@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":["wmNavigatorCss","Navigator","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,\r\nwm-navigator {\r\n min-width: 0;\r\n position: relative;\r\n display: inline-block;\r\n\r\n .wrapper {\r\n overflow: auto;\r\n font-size: rem-calc(18);\r\n min-width: rem-calc(210);\r\n width: auto;\r\n max-height: 80vh;\r\n text-align: left;\r\n position: absolute;\r\n z-index: 50;\r\n top: 100%;\r\n right: 20px;\r\n left: auto;\r\n background: #fff;\r\n letter-spacing: normal;\r\n @include box-shadow(0 4px 15px 0 rgba(0, 0, 0, 0.2));\r\n @include transition(transform 0.25s ease);\r\n @include transformOrigin(center top);\r\n @include scale($xVal: 1, $yVal: 1);\r\n\r\n .user {\r\n background: $background;\r\n padding: rem-calc(10 20);\r\n font-size: rem-calc(14);\r\n\r\n p {\r\n margin: 0;\r\n }\r\n p:first-child {\r\n font-weight: 700;\r\n text-transform: capitalize;\r\n }\r\n }\r\n\r\n h2 {\r\n background: #2e1b46;\r\n color: #fff;\r\n font-weight: 700;\r\n margin: 0;\r\n padding: rem-calc(10 20);\r\n font-size: rem-calc(14);\r\n }\r\n\r\n [role=\"listbox\"] {\r\n list-style: none;\r\n margin: 0;\r\n padding-left: 0;\r\n }\r\n\r\n &.hide {\r\n @include scale($xVal: 1, $yVal: 0);\r\n }\r\n\r\n &.right {\r\n right: auto;\r\n left: 20px;\r\n }\r\n }\r\n\r\n img {\r\n transform: scale(0.8);\r\n transform-origin: left center;\r\n display: block;\r\n }\r\n\r\n .logout {\r\n text-align: center;\r\n text-transform: capitalize;\r\n }\r\n}\r\n\r\npriv-navigator-item:focus {\r\n outline: none;\r\n}\r\n","import { Component, Element, h, Host, Prop, State, Listen, EventEmitter, Event, Watch } from \"@stencil/core\";\r\nimport { getWmMode, Product, NavigatorPayload } from \"../../global/interfaces\";\r\nimport { intl, snakeCaseToCamelCase, getNewIndexToFocus } from \"../../global/functions\";\r\nimport { getRequest } from \"../../global/services/http-service\";\r\n\r\n@Component({\r\n tag: \"wm-navigator\",\r\n styleUrl: \"wm-navigator.scss\",\r\n shadow: { delegatesFocus: true },\r\n})\r\nexport class Navigator {\r\n @Element() el!: any;\r\n private wrapperEl?: HTMLDivElement;\r\n\r\n // Component can receive user info and products as props (this is how it worked before)\r\n @Prop() userName?: string;\r\n @Prop() email?: string;\r\n @Prop() authType: number = 1; // 1: none or off, 2: username-password or username_password_sso, 3: saml or saml_sso\r\n @Prop() connectionName?: string;\r\n @Prop() logoutUrl?: string;\r\n @Prop() products?: string | []; // products as JSON string, parsed on load\r\n\r\n // The new way is to retrieve user info from an endpoint\r\n // dev needs to opt-in by setting loadFromUserinfo to true\r\n @Prop() loadFromUserinfo: boolean = false;\r\n // comp can check whether the info was successfully retrieved with:\r\n private retrievedInfo: boolean = !this.loadFromUserinfo; // when in endpoint mode, only render after get request completed\r\n\r\n // used either way to store the products\r\n parsedProducts: Array<Product> = [];\r\n\r\n /**\r\n * Event emitted from child wm-navigator-button updates the state, which is then passed down as a prop by wm-navigator.\r\n */\r\n @State() isOpen: boolean = false;\r\n private openRight: boolean = false; // whether the menu should open on the right side\r\n\r\n @State() isTabbing: boolean = false;\r\n\r\n /**\r\n * Value is set to the index of the current product on load.\r\n * Keyboard navigation updates the state to keep track of focus in the dropdown.\r\n * State resets to the index of the current product when the dropdown closes.\r\n */\r\n @State() itemIndexToFocus: number = 0;\r\n\r\n @Event() wmNavigatorLogout!: EventEmitter;\r\n\r\n private currentProductId!: string;\r\n\r\n async componentWillLoad() {\r\n if (!this.userName) {\r\n console.error(\"wm-navigator: user-name is a required property.\");\r\n }\r\n\r\n await this.parseData();\r\n this.setFocusIndex();\r\n }\r\n\r\n // async because we need the http request to complete before proceeding\r\n @Watch(\"products\")\r\n async parseData() {\r\n if (!!this.loadFromUserinfo) {\r\n await getRequest(\"/platform/navigator/userinfo\")\r\n .then((response: NavigatorPayload) => {\r\n this.email = response.email;\r\n this.currentProductId = response.current_product_id;\r\n this.parsedProducts = this.productKeysToCamelCase(response.products);\r\n this.logoutUrl = this.logoutUrl ? this.logoutUrl : response.logout_url;\r\n this.connectionName = this.connectionName ? this.connectionName : response.connection_name;\r\n if (!!this.email && !!this.currentProductId) {\r\n this.retrievedInfo = true;\r\n }\r\n })\r\n .catch((errStatus) => {\r\n console.error(errStatus);\r\n });\r\n } else {\r\n this.currentProductId = getWmMode(this.el);\r\n if (!!this.products) {\r\n if (typeof this.products === \"string\") {\r\n this.parsedProducts = JSON.parse(this.products);\r\n } else {\r\n this.parsedProducts = this.products;\r\n }\r\n this.parsedProducts = this.productKeysToCamelCase(this.parsedProducts);\r\n }\r\n }\r\n // products is initialized as empty array in case nothing is passed\r\n this.parsedProducts.sort((a, b) => (a.name < b.name ? -1 : 1));\r\n }\r\n\r\n productKeysToCamelCase(products: object[]): Product[] {\r\n products = products.map((product: any) => {\r\n const keys = Object.keys(product);\r\n let newProduct: { [key: string]: string } = {};\r\n keys.forEach((key) => {\r\n newProduct[snakeCaseToCamelCase(key)] = product[key];\r\n });\r\n return newProduct;\r\n });\r\n return products as Product[];\r\n }\r\n\r\n /**\r\n * Sets index to focus on open to the selected product. This index resets it when the menu closes.\r\n */\r\n setFocusIndex() {\r\n if (this.parsedProducts.length > 1) {\r\n const currentProduct = this.getProduct(this.currentProductId);\r\n\r\n if (currentProduct) {\r\n this.itemIndexToFocus = this.parsedProducts.indexOf(currentProduct);\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(\"keydown\")\r\n handleKeys(ev: KeyboardEvent) {\r\n switch (ev.key) {\r\n case \"Escape\":\r\n ev.preventDefault();\r\n this.closeMenu();\r\n break;\r\n case \"ArrowDown\":\r\n case \"ArrowUp\":\r\n ev.preventDefault();\r\n if (!this.isOpen) {\r\n this.itemIndexToFocus = getNewIndexToFocus(this.itemIndexToFocus, ev.key, this.navigatorItems.length);\r\n this.openMenu();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n @Listen(\"keydownOnNavItem\")\r\n handleKeydown(ev: CustomEvent) {\r\n const key = ev.detail.key;\r\n const item = ev.detail.navItem;\r\n switch (key) {\r\n case \"Tab\":\r\n this.closeMenu();\r\n break;\r\n case \"Enter\":\r\n case \" \":\r\n item.click();\r\n break;\r\n case \"ArrowDown\":\r\n case \"ArrowUp\":\r\n const oldIndex = this.itemIndexToFocus;\r\n this.itemIndexToFocus = getNewIndexToFocus(this.itemIndexToFocus, key, this.navigatorItems.length);\r\n this.focusItem();\r\n this.unfocusItem(oldIndex);\r\n break;\r\n }\r\n }\r\n\r\n @Listen(\"click\", { target: \"document\" })\r\n handleClick(ev: MouseEvent) {\r\n const isElOrChild = ev.target === this.el || this.el.contains(ev.target as Node);\r\n\r\n if (!isElOrChild && this.isOpen) {\r\n this.closeMenu();\r\n }\r\n }\r\n\r\n @Listen(\"buttonActivated\")\r\n handleButtonClick() {\r\n this.isOpen ? this.closeMenu() : this.openMenu();\r\n }\r\n\r\n openMenu() {\r\n if (this.wrapperEl) {\r\n const wrapperWidth = this.wrapperEl.clientWidth;\r\n const spaceLeft = this.el.getBoundingClientRect().left;\r\n const spaceRight = document.documentElement.clientWidth - this.el.getBoundingClientRect().right;\r\n this.openRight = wrapperWidth > spaceLeft && spaceRight > spaceLeft;\r\n }\r\n this.isOpen = true;\r\n this.focusItem();\r\n }\r\n\r\n closeMenu() {\r\n this.isOpen = false;\r\n this.buttonFocusHandler();\r\n this.unfocusItem(this.itemIndexToFocus);\r\n this.setFocusIndex();\r\n }\r\n\r\n focusItem() {\r\n const newSelection = this.navigatorItems[this.itemIndexToFocus];\r\n newSelection.tabIndex = 0;\r\n newSelection.focused = true;\r\n window.requestAnimationFrame(() => newSelection.focus());\r\n }\r\n\r\n unfocusItem(index: number) {\r\n const oldSelection = this.navigatorItems[index];\r\n oldSelection.tabIndex = -1;\r\n oldSelection.focused = false;\r\n }\r\n\r\n buttonFocusHandler() {\r\n const hostButton = this.el.shadowRoot.querySelector(\"priv-navigator-button\");\r\n const button = hostButton.shadowRoot.querySelector(\"button\");\r\n window.requestAnimationFrame(() => button.focus());\r\n }\r\n\r\n /**\r\n * HELPERS FOR RENDER\r\n */\r\n renderUserInfo() {\r\n return (\r\n <div\r\n class=\"user\"\r\n id=\"wm-nav-user\"\r\n aria-label={intl.formatMessage(\r\n {\r\n id: \"navigator.userinfoLabel\",\r\n defaultMessage: \"for {name}, email {email}\",\r\n },\r\n { name: this.userName, email: this.email }\r\n )}\r\n >\r\n <p>{this.userName}</p>\r\n <p>{this.email}</p>\r\n </div>\r\n );\r\n }\r\n\r\n setAltText(): string {\r\n if (this.parsedProducts.length > 1) {\r\n return intl.formatMessage({\r\n id: \"navigator.userinfoAndProductNavigator\",\r\n defaultMessage: \"User information and product navigator\",\r\n });\r\n } else {\r\n return intl.formatMessage({\r\n id: \"navigator.userinfo\",\r\n defaultMessage: \"User information\",\r\n });\r\n }\r\n }\r\n\r\n renderHeading() {\r\n return (\r\n <h2>\r\n {intl.formatMessage({\r\n id: \"navigator.watermarkApps\",\r\n defaultMessage: \"Watermark Apps\",\r\n description: \"Applications made by Watermark Insights\",\r\n })}\r\n </h2>\r\n );\r\n }\r\n\r\n renderList() {\r\n return (\r\n <ul\r\n role=\"listbox\"\r\n aria-label={`${intl.formatMessage({\r\n id: \"navigator.WatermarkAppNavigation\",\r\n defaultMessage: \"Watermark App Navigation\",\r\n description: \"list of applications by Watermark Insights\",\r\n })}`}\r\n aria-describedby=\"wm-nav-user\"\r\n >\r\n {this.parsedProducts.length > 1 && this.renderProductOptions()}\r\n {this.renderLogoutOption()}\r\n </ul>\r\n );\r\n }\r\n\r\n renderProductOptions(): Array<HTMLPrivNavigatorItemElement> {\r\n return this.parsedProducts.map((product: Product) => {\r\n let name: string | undefined, icon: string | undefined, isSelected: boolean, clickRedirect: any;\r\n\r\n name = product.name;\r\n icon = (product as Product).iconUrl;\r\n\r\n clickRedirect = this.setProductOnClick(product.id);\r\n\r\n if (!!name && !!icon) {\r\n isSelected = this.currentProductId === product.id;\r\n\r\n return (\r\n <priv-navigator-item\r\n selected={isSelected}\r\n id={product.id}\r\n onClick={clickRedirect}\r\n role=\"option\"\r\n aria-label={name}\r\n >\r\n <img src={icon} alt={name} />\r\n </priv-navigator-item>\r\n );\r\n }\r\n });\r\n }\r\n\r\n setProductOnClick(productId: string) {\r\n const product = this.getProduct(productId);\r\n\r\n if (this.currentProductId === productId) {\r\n return () => {};\r\n } else if (product) {\r\n if (!!this.loadFromUserinfo || this.authType === 2) {\r\n return () => (window.location.href = (product as Product).linkUrl);\r\n } else if (this.authType === 3) {\r\n // products passed as prop, saml\r\n const connName = this.connectionName ? `/?connection_name=${this.connectionName}` : \"\";\r\n return () => (window.location.href = (product as Product).samlLinkUrl + connName);\r\n }\r\n }\r\n }\r\n\r\n renderLogoutOption() {\r\n return (\r\n <priv-navigator-item\r\n class=\"logout\"\r\n selected={!(this.parsedProducts.length > 1)}\r\n id=\"nav-logout\"\r\n onClick={this.setLogoutOnclick()}\r\n role=\"option\"\r\n >\r\n <span class=\"logout\">\r\n {intl.formatMessage({\r\n id: \"navigator.logout\",\r\n defaultMessage: \"Log Out\",\r\n })}\r\n </span>\r\n </priv-navigator-item>\r\n );\r\n }\r\n\r\n setLogoutOnclick() {\r\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).\r\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.\r\n return () => {\r\n this.wmNavigatorLogout.emit();\r\n if (this.logoutUrl) {\r\n window.location.href = this.logoutUrl;\r\n }\r\n };\r\n }\r\n\r\n private get navigatorItems(): Array<HTMLPrivNavigatorItemElement> {\r\n return Array.from(this.el.shadowRoot.querySelectorAll(\"priv-navigator-item\"));\r\n }\r\n\r\n private getProduct(id: string): Product | undefined {\r\n return this.parsedProducts.find((product) => product.id === id);\r\n }\r\n\r\n render() {\r\n return this.retrievedInfo ? (\r\n <Host class={this.isTabbing ? \"user-is-tabbing\" : \"\"}>\r\n <priv-navigator-button expanded={this.isOpen} altText={this.setAltText()} isTabbing={this.isTabbing} />\r\n <div\r\n class={`wrapper ${this.isOpen ? \"\" : \"hide\"} ${this.openRight ? \"right\" : \"\"}`}\r\n ref={(el) => (this.wrapperEl = el as HTMLDivElement)}\r\n >\r\n {this.renderUserInfo()}\r\n {this.parsedProducts.length > 1 && this.renderHeading()}\r\n {this.renderList()}\r\n </div>\r\n </Host>\r\n ) : (\r\n \"\"\r\n );\r\n }\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["wmNavigatorCss","Navigator","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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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(t,e,o,n){function r(t){return t instanceof o?t:new o((function(e){e(t)}))}return new(o||(o=Promise))((function(o,i){function a(t){try{l(n.next(t))}catch(t){i(t)}}function s(t){try{l(n["throw"](t))}catch(t){i(t)}}function l(t){t.done?o(t.value):r(t.value).then(a,s)}l((n=n.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var o={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,r,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(t){return function(e){return l([t,e])}}function l(s){if(n)throw new TypeError("Generator is already executing.");while(a&&(a=0,s[0]&&(o=0)),o)try{if(n=1,r&&(i=s[0]&2?r["return"]:s[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;if(r=0,i)s=[s[0]&2,i.value];switch(s[0]){case 0:case 1:i=s;break;case 4:o.label++;return{value:s[1],done:false};case 5:o.label++;r=s[1];s=[0];continue;case 7:s=o.ops.pop();o.trys.pop();continue;default:if(!(i=o.trys,i=i.length>0&&i[i.length-1])&&(s[0]===6||s[0]===2)){o=0;continue}if(s[0]===3&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(s[0]===6&&o.label<i[1]){o.label=i[1];i=s;break}if(i&&o.label<i[2]){o.label=i[2];o.ops.push(s);break}if(i[2])o.ops.pop();o.trys.pop();continue}s=e.call(t,o)}catch(t){s=[6,t];r=0}finally{n=i=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}};import{r as registerInstance,c as createEvent,f as forceUpdate,h,H as Host,g as getElement}from"./index-84a6ae22.js";import{g as getRequest,p as putRequest,a as postRequest,d as deleteRequest}from"./http-service-3dc3b3e7.js";import{g as generateId,i as intl,v as hasValidType}from"./functions-bb1309d0.js";var wmNetworkUploaderCss=':host .wm-button,wm-network-uploader .wm-button{-ms-transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);-webkit-transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);-moz-transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;width:inherit;border:2px solid #575195;color:#575195;font-family:inherit;font-size:0.75rem;font-weight:700;height:2.75rem;padding:0 1.3333333333em;cursor:pointer;position:relative;background:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;text-decoration:none;text-transform:uppercase;letter-spacing:0.01875rem;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@media screen and (min-width: 48rem){:host .wm-button,wm-network-uploader .wm-button{height:3.3333333333em}}:host .wm-button.nowrap,wm-network-uploader .wm-button.nowrap{display:inline-block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .wm-button:focus,wm-network-uploader .wm-button:focus{outline:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}:host .wm-button::-moz-focus-inner,wm-network-uploader .wm-button::-moz-focus-inner{border:0;outline:none}:host .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) :host .wm-button.-textonly .button-text,wm-network-uploader .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) :host .wm-button.-textonly .button-text,:host .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) wm-network-uploader .wm-button.-textonly .button-text,wm-network-uploader .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) wm-network-uploader .wm-button.-textonly .button-text{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 1em;border-radius:0;line-height:normal}:host .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled),wm-network-uploader .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled){-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}:host .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark),wm-network-uploader .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark){-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;-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;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}:host .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark)::-moz-focus-inner,wm-network-uploader .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark)::-moz-focus-inner{border:0}:host .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled),wm-network-uploader .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled){background:transparent;border:2px solid #fff;color:#fff}:host .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled):hover{color:#575195;background:#e6e6e6;border:2px solid #e6e6e6}:host .wm-button.dark.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled).dark,wm-network-uploader .wm-button.dark.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled).dark{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-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 #c6b4e3;-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 #c6b4e3;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 #c6b4e3;outline:none}:host .wm-button:active:not(:disabled):not(.disabled):not(.-textonly):not(.-actionbutton):not(.displayedoption),wm-network-uploader .wm-button:active:not(:disabled):not(.disabled):not(.-textonly):not(.-actionbutton):not(.displayedoption){-ms-transform:scale(0.9, 0.9);-webkit-transform:scale(0.9, 0.9);-moz-transform:scale(0.9, 0.9);transform:scale(0.9, 0.9)}:host .wm-button .mdi,wm-network-uploader .wm-button .mdi{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}:host .wm-button:not(.-icononly):not(.-navigational) .mdi,wm-network-uploader .wm-button:not(.-icononly):not(.-navigational) .mdi{margin-right:0.3125rem}:host .wm-button[dir=RTL] :not(.-icononly) .mdi,wm-network-uploader .wm-button[dir=RTL] :not(.-icononly) .mdi{margin-left:0.3125rem;margin-right:0}:host .wm-button.-primary:not(.-textonly),wm-network-uploader .wm-button.-primary:not(.-textonly){background:#575195;color:#fff}:host .wm-button.-primary:not(.-textonly):not(:focus),wm-network-uploader .wm-button.-primary:not(.-textonly):not(:focus){-webkit-box-shadow:0 2px 2px 0 rgba(87, 81, 149, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 2px 0 rgba(87, 81, 149, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.2);box-shadow:0 2px 2px 0 rgba(87, 81, 149, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.2)}:host .wm-button.-primary:not(.-textonly):hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-primary:not(.-textonly):hover:not(:disabled):not(.disabled){background:#464177}:host .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled){color:#575195;background:#fff;border:2px solid #fff}:host .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled):hover{color:#575195;background:#e6e6e6;border:2px solid #e6e6e6}:host .wm-button.-secondary:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-secondary:hover:not(:disabled):not(.disabled),:host .wm-button.-selector:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-selector:hover:not(:disabled):not(.disabled),:host .wm-button.-icononly:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-icononly:hover:not(:disabled):not(.disabled){background:#464177;color:#fff}:host .wm-button.-textonly,wm-network-uploader .wm-button.-textonly{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;letter-spacing:0;text-transform:none;text-align:initial;font-size:0.875rem;border:none;background:transparent;padding-left:0;padding-right:0;height:auto;border-radius:0;line-height:1}:host .wm-button.-textonly+.-textonly,wm-network-uploader .wm-button.-textonly+.-textonly{margin-left:0.3125rem}:host .wm-button.-textonly:focus,wm-network-uploader .wm-button.-textonly:focus{outline:none}:host .wm-button.-textonly::-moz-focus-inner,wm-network-uploader .wm-button.-textonly::-moz-focus-inner{border:0;outline:none}:host .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled) .button-text,wm-network-uploader .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled) .button-text{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 1em;border-radius:0;line-height:normal}:host .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled).dark .button-text,wm-network-uploader .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled).dark .button-text{background:-webkit-gradient(linear, left top, right top, color-stop(66%, #fff), color-stop(0, transparent)) repeat-x;background:linear-gradient(90deg, #fff 66%, transparent 0) repeat-x;background-size:6px 3px;background-position:0 1em;border-radius:0;line-height:normal}:host .wm-button.-textonly.small,wm-network-uploader .wm-button.-textonly.small{font-size:0.625rem}:host .wm-button.-textonly:hover:not(:disabled):not(.disabled):not(.-permanentlydelete),wm-network-uploader .wm-button.-textonly:hover:not(:disabled):not(.disabled):not(.-permanentlydelete){text-decoration:underline}:host .wm-button.-textonly.-permanentlydelete,wm-network-uploader .wm-button.-textonly.-permanentlydelete{color:#c0392b}:host .wm-button.-textonly.-permanentlydelete:hover:not(:disabled):not(.disabled):not(.dark),wm-network-uploader .wm-button.-textonly.-permanentlydelete:hover:not(:disabled):not(.disabled):not(.dark){text-decoration:underline;color:#c0392b !important}:host .wm-button.-textonly.dark,wm-network-uploader .wm-button.-textonly.dark{color:#fff}:host .wm-button.-textonly.dark:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-textonly.dark:hover:not(:disabled):not(.disabled){text-decoration:underline;color:#fff !important}:host .wm-button.-icononly,wm-network-uploader .wm-button.-icononly,:host .wm-button.-navigational,wm-network-uploader .wm-button.-navigational{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;border-radius:50%;font-size:1rem;padding:0;height:auto;line-height:1;min-width:2.75rem;min-height:2.75rem;text-align:center;letter-spacing:normal}:host .wm-button.-icononly:not(:focus),wm-network-uploader .wm-button.-icononly:not(:focus),:host .wm-button.-navigational:not(:focus),wm-network-uploader .wm-button.-navigational:not(:focus){-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@media screen and (min-width: 48rem){:host .wm-button.-icononly,wm-network-uploader .wm-button.-icononly,:host .wm-button.-navigational,wm-network-uploader .wm-button.-navigational{min-width:2.5rem;min-height:2.5rem}}:host .wm-button.-icononly,wm-network-uploader .wm-button.-icononly{border-width:1px !important}:host .wm-button.-icononly:before,wm-network-uploader .wm-button.-icononly:before{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}:host .wm-button.-navigational,wm-network-uploader .wm-button.-navigational{border:none !important;background-color:transparent}:host .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled),wm-network-uploader .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled){color:#575195}:host .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled):hover,:host .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled).selected,wm-network-uploader .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled).selected{background-color:#d7d6d9}:host .wm-button.-navigational:before,wm-network-uploader .wm-button.-navigational:before{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}:host .wm-button.-permanentlydelete:not(.-textonly),wm-network-uploader .wm-button.-permanentlydelete:not(.-textonly){background:#c0392b;border-color:#c0392b;color:#fff}:host .wm-button.-permanentlydelete:not(.-textonly):hover:not(:disabled):not(.disabled):not(.dark),wm-network-uploader .wm-button.-permanentlydelete:not(.-textonly):hover:not(:disabled):not(.disabled):not(.dark){background:#9a2e22;border-color:#9a2e22}:host .wm-button.-pairnegative,wm-network-uploader .wm-button.-pairnegative{background:#cc4c3e;border-color:#cc4c3e;color:#fff}:host .wm-button.-pairnegative:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-pairnegative:hover:not(:disabled):not(.disabled){background:#a33d32;border-color:#a33d32}:host .wm-button.-pairpositive,wm-network-uploader .wm-button.-pairpositive{background:#15868d;border-color:#15868d;color:#fff}:host .wm-button.-pairpositive:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-pairpositive:hover:not(:disabled):not(.disabled){background:#116b71;border-color:#116b71}:host .wm-button.-selector,wm-network-uploader .wm-button.-selector,:host .wm-button.-selector-primary,wm-network-uploader .wm-button.-selector-primary{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;border-radius:3px;display:block;background:transparent;border:2px solid #575195;border-radius:3px;height:2.75rem;min-width:11.4375rem;padding:0 1.875rem 0 0.9375rem;line-height:normal;font-family:inherit;color:#575195;font-weight:700;font-size:0.75rem;text-transform:uppercase;letter-spacing:0.01875rem;text-align:left}@media screen and (min-width: 48rem){:host .wm-button.-selector,wm-network-uploader .wm-button.-selector,:host .wm-button.-selector-primary,wm-network-uploader .wm-button.-selector-primary{height:2.5rem}}:host .wm-button.-selector:before,wm-network-uploader .wm-button.-selector:before,:host .wm-button.-selector-primary:before,wm-network-uploader .wm-button.-selector-primary:before{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:"\\f140";position:absolute;right:0.5625rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:0.875rem;font-weight:700;pointer-events:none}:host .wm-button.-selector:active,wm-network-uploader .wm-button.-selector:active,:host .wm-button.-selector-primary:active,wm-network-uploader .wm-button.-selector-primary:active{-ms-transform:scale(1, 1) !important;-webkit-transform:scale(1, 1) !important;transform:scale(1, 1) !important}:host .wm-button.-selector::-moz-focus-inner,wm-network-uploader .wm-button.-selector::-moz-focus-inner,:host .wm-button.-selector-primary::-moz-focus-inner,wm-network-uploader .wm-button.-selector-primary::-moz-focus-inner{border:0}:host .wm-button.-selector .overflowcontrol,wm-network-uploader .wm-button.-selector .overflowcontrol,:host .wm-button.-selector-primary .overflowcontrol,wm-network-uploader .wm-button.-selector-primary .overflowcontrol{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:visible}:host .wm-button.-selector.dark:not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-selector.dark:not(:disabled):not(.disabled):hover,:host .wm-button.-selector-primary.dark:not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-selector-primary.dark:not(:disabled):not(.disabled):hover{color:#575195;background:#e6e6e6;border:2px solid #e6e6e6}:host .wm-button.-selector-primary,wm-network-uploader .wm-button.-selector-primary{background:#575195;color:#fff}:host .wm-button.-selector-primary:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-selector-primary:hover:not(:disabled):not(.disabled){background:#464177}:host .wm-button.-selector-primary.dark:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-selector-primary.dark:not(:disabled):not(.disabled){color:#575195;background:#fff;border:2px solid #fff}:host .wm-button:disabled,wm-network-uploader .wm-button:disabled,:host .wm-button.disabled,wm-network-uploader .wm-button.disabled{background:inherit;border-color:#737373;color:#737373;cursor:default;pointer-events:none}:host .wm-button:disabled.-primary,wm-network-uploader .wm-button:disabled.-primary,:host .wm-button:disabled.-permanentlydelete,wm-network-uploader .wm-button:disabled.-permanentlydelete,:host .wm-button:disabled.-pairnegative,wm-network-uploader .wm-button:disabled.-pairnegative,:host .wm-button:disabled.-pairpositive,wm-network-uploader .wm-button:disabled.-pairpositive,:host .wm-button.disabled.-primary,wm-network-uploader .wm-button.disabled.-primary,:host .wm-button.disabled.-permanentlydelete,wm-network-uploader .wm-button.disabled.-permanentlydelete,:host .wm-button.disabled.-pairnegative,wm-network-uploader .wm-button.disabled.-pairnegative,:host .wm-button.disabled.-pairpositive,wm-network-uploader .wm-button.disabled.-pairpositive{background:#737373;color:#fff;border-color:#737373}:host .wm-button:disabled.-secondary,wm-network-uploader .wm-button:disabled.-secondary,:host .wm-button.disabled.-secondary,wm-network-uploader .wm-button.disabled.-secondary{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}:host .wm-button:disabled.-selector,wm-network-uploader .wm-button:disabled.-selector,:host .wm-button.disabled.-selector,wm-network-uploader .wm-button.disabled.-selector{color:#737373}:host .wm-button:disabled.-selector-primary,wm-network-uploader .wm-button:disabled.-selector-primary,:host .wm-button.disabled.-selector-primary,wm-network-uploader .wm-button.disabled.-selector-primary{background:#737373;color:#fff;border-color:#737373}:host .wm-button:disabled.-textonly,wm-network-uploader .wm-button:disabled.-textonly,:host .wm-button.disabled.-textonly,wm-network-uploader .wm-button.disabled.-textonly{color:#6b6b6b;background:transparent}:host .wm-button:disabled.dark.-secondary:not(.-permanentlydelete),wm-network-uploader .wm-button:disabled.dark.-secondary:not(.-permanentlydelete),:host .wm-button:disabled.dark.-selector,wm-network-uploader .wm-button:disabled.dark.-selector,:host .wm-button:disabled.dark.-textonly,wm-network-uploader .wm-button:disabled.dark.-textonly,:host .wm-button:disabled.dark.-navigational,wm-network-uploader .wm-button:disabled.dark.-navigational,:host .wm-button:disabled.dark.-icononly,wm-network-uploader .wm-button:disabled.dark.-icononly,:host .wm-button.disabled.dark.-secondary:not(.-permanentlydelete),wm-network-uploader .wm-button.disabled.dark.-secondary:not(.-permanentlydelete),:host .wm-button.disabled.dark.-selector,wm-network-uploader .wm-button.disabled.dark.-selector,:host .wm-button.disabled.dark.-textonly,wm-network-uploader .wm-button.disabled.dark.-textonly,:host .wm-button.disabled.dark.-navigational,wm-network-uploader .wm-button.disabled.dark.-navigational,:host .wm-button.disabled.dark.-icononly,wm-network-uploader .wm-button.disabled.dark.-icononly{color:#b5b5b5;border-color:#b5b5b5}:host .wm-button:disabled.dark.-primary,wm-network-uploader .wm-button:disabled.dark.-primary,:host .wm-button:disabled.dark.-selector-primary,wm-network-uploader .wm-button:disabled.dark.-selector-primary,:host .wm-button:disabled.dark.-permanentlydelete:not(.-textonly),wm-network-uploader .wm-button:disabled.dark.-permanentlydelete:not(.-textonly),:host .wm-button.disabled.dark.-primary,wm-network-uploader .wm-button.disabled.dark.-primary,:host .wm-button.disabled.dark.-selector-primary,wm-network-uploader .wm-button.disabled.dark.-selector-primary,:host .wm-button.disabled.dark.-permanentlydelete:not(.-textonly),wm-network-uploader .wm-button.disabled.dark.-permanentlydelete:not(.-textonly){background:#a6a6a6;border-color:#a6a6a6;color:#353b48}:host a.wm-button,wm-network-uploader a.wm-button,:host label.wm-button,wm-network-uploader label.wm-button{height:auto;padding-top:0.75rem;padding-bottom:0.75rem}:host,wm-network-uploader{width:100%;position:relative}:host[dir=RTL] .mdi,wm-network-uploader[dir=RTL] .mdi{margin-left:0.3125rem;margin-right:0}:host input:focus+.wm-button.user-is-tabbing,wm-network-uploader input:focus+.wm-button.user-is-tabbing{-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;-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;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}:host *,wm-network-uploader *{-webkit-box-sizing:border-box;box-sizing:border-box}.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}.header{position:relative;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap}.header .notif-wrapper{-ms-flex-align:end;align-items:flex-end}.notif-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.notif-wrapper .notif{font-size:0.875rem;font-style:italic;margin-top:0.25rem}@media (max-width: 60.9375rem){.descr{margin-bottom:0.5rem}.notif-wrapper{margin-bottom:1rem}.header .notif-wrapper{-ms-flex-align:start;align-items:flex-start}}.file-info{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.file-info+.file-controls{-ms-flex:none;flex:none;margin-left:1rem}.empty-block{margin:5rem auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.empty-block .upload-file{margin-bottom:1.875rem}.empty-block .empty-message{font-size:1.5rem;margin-bottom:0.4375rem}.empty-block .notif-wrapper{-ms-flex-pack:center;justify-content:center}.empty-block .notif-wrapper .wm-button{width:auto}ul{list-style:none;padding:0;width:100%}ul li{font-size:0.875rem}ul li .file{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;border-radius:3px;position:relative;height:3.75rem;padding:0.5rem 1.25rem;background:#f4f4f4;border:1px solid #6b6b6b;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}ul li .file+.file{margin-top:1.25rem}ul li .file .filename{font-weight:500}ul li .file .filedate{margin-left:3.75rem;font-weight:normal;font-style:italic}ul li .file wm-button+wm-button{margin-left:1rem}ul.file-list .file.--saved,ul.inprogress-list .file{margin-bottom:1.625rem}ul .progress{position:absolute;left:0;top:0;right:0;height:8px}ul.error-list li{margin-bottom:1.25rem;color:#c0392b}ul.error-list li .file{border:1px solid #c0392b;background-color:#f5ebea;height:3.75rem}ul .error-message{padding-top:0.25rem;font-style:italic}';var NetworkUploader=function(){function t(t){registerInstance(this,t);this.wmNetworkUploaderFilesChanged=createEvent(this,"wmNetworkUploaderFilesChanged",7);this.inputId=generateId();this.isTabbing=false;this.fileList=[];this.inProgressList=[];this.errorList=[];this.notif=undefined;this.snackbar=[];this.numFilesInProgress=undefined;this.getPath=undefined;this.requestUploadPath=undefined;this.uploadPath=undefined;this.requestDownloadPath=undefined;this.deletePath=undefined;this.associatedData=undefined;this.buttonText=undefined;this.emptyStateText=undefined;this.icon=undefined;this.fileTypes="pdf txt log xml doc docx xls xlsx ppt pptx gif jpg jpeg png csv";this.maxSize=100;this.maxFiles=undefined;this.sortBy="date"}t.prototype.toggleTabbingOn=function(){this.isTabbing=true};t.prototype.toggleTabbingOff=function(){this.isTabbing=false};t.prototype.handleUploadProgress=function(t){var e=this;this.inProgressList.map((function(o){if(o.name===t.detail.file_name){o.progress=t.detail.progress;forceUpdate(e.el)}}));if(t.detail.progress===100){this.numFilesInProgress-=1}if(!this.srProgress&&this.numFilesInProgress){var o=this.numFilesInProgress;this.srProgress=setInterval((function(){var t=e.inProgressList.reduce((function(t,e){return e.progress?t+e.progress:t}),0);if(e.liveRegion){e.liveRegion.innerHTML=intl.formatMessage({id:"uploader.uploadProgress",defaultMessage:"Upload progress: {percentage}%"},{percentage:Math.floor(t/o)})}}),5e3)}};t.prototype.handleFinishedSnack=function(t){this.snackbar=this.snackbar.filter((function(e){return e.id!==t.detail.id}))};t.prototype.setMaxSize=function(){this.maxSize=this.maxSize>100?100:this.maxSize};t.prototype.uploadNotifications=function(t,e){var o=this;if(e>0&&t===0){setTimeout((function(){o.notif=null}),20*1e3);var n=intl.formatMessage({id:"uploader.finishedUploading",defaultMessage:"Finished uploading"});this.notif={id:5,message:n};if(this.liveRegion){this.liveRegion.innerHTML=n}this.numFilesInProgress=null;clearInterval(this.srProgress);forceUpdate(this.el)}else if(t>0&&t!=e){var n=intl.formatMessage({id:"uploader.filesUploading",defaultMessage:"{num, plural, one {1 file uploading} other {# files uploading}}"},{num:t});this.notif={id:6,message:n};if(this.liveRegion){this.liveRegion.innerHTML=n}forceUpdate(this.el)}};t.prototype.emitFileListEvent=function(){this.wmNetworkUploaderFilesChanged.emit(this.fileList)};t.prototype.formatDate=function(t,e,o){var n=Date.parse(t);if(e.match(/^[a-zA-Z]*(-[a-zA-Z0-9]*)*$/g)){try{Intl.getCanonicalLocales(e)}catch(t){e="en-us"}}else{return t}if(!!n){var r=new Date(n);var i=r.getFullYear();var a=("0"+(r.getMonth()+1)).substr(-2);var s=("0"+r.getDate()).substr(-2);var l=r.toLocaleTimeString([e,"en-us"],{timeZone:o,hour:"numeric",minute:"numeric"});return"".concat(i,"/").concat(a,"/").concat(s," ").concat(l)}else{return t}};t.prototype.isValidSize=function(t){return t/1024/1024<=this.maxSize};t.prototype.isDuplicate=function(t){return this.fileList.find((function(e){return e.file_name===t}))};t.prototype.isEmpty=function(){return!this.fileList.length&&!this.inProgressList.length&&!this.errorList.length};Object.defineProperty(t.prototype,"isDisabled",{get:function(){var t=!!this.maxFiles&&this.fileList.length>=this.maxFiles;if(!this.notif){if(t){var e=intl.formatMessage({id:"uploader.fileUploadLimitExceeded",defaultMessage:"Upload unsuccessful because file selection would exceed the maximum number of files",description:"Message displayed when trying to upload too many files"});this.notif={id:1,message:e};if(this.liveRegion){this.liveRegion.innerHTML=e}}else{this.notif=null}}else if(this.notif.id===1){if(!t){this.notif=null}}return t||this.numFilesInProgress>0},enumerable:false,configurable:true});t.prototype.purgeProgressList=function(t){this.inProgressList=this.inProgressList.filter((function(e){return e.progress!==100&&e.name!==t.file_name}))};t.prototype.getExistingFiles=function(){var t=this;getRequest(this.getPath).then((function(e){e.map((function(e){return t.purgeProgressList(e)}));if(t.sortBy==="name"){e.sort((function(t,e){return t.file_name.localeCompare(e.file_name)}))}t.fileList=e})).catch((function(t){console.error(t)}))};t.prototype.clearErrors=function(){this.errorList=[];this.notif=null};t.prototype.handleFiles=function(t){var e=this;var o=Array.from(t.target.files);var n=this.fileTypes.split(" ").join(", ");if(!!this.maxFiles&&this.fileList.length+o.length>this.maxFiles){var r=intl.formatMessage({id:"uploader.fileUploadLimitExceeded",defaultMessage:"Upload unsuccessful because file selection would exceed the maximum number of files",description:"Message displayed when trying to upload too many files"});this.notif={id:2,message:r};if(this.liveRegion){this.liveRegion.innerHTML=r}}else{o&&o.map((function(t){if(!hasValidType(t,e.fileTypes)){var o={file_name:t.name,message:intl.formatMessage({id:"uploader.invalidFileType",defaultMessage:"The file type is invalid. Accepted types: {validTypes}"},{validTypes:n})};e.errorList.push(o)}else if(!e.isValidSize(t.size)){var o={file_name:t.name,message:intl.formatMessage({id:"uploader.fileTooLarge",defaultMessage:"The selected file is too large. Maximum file size is {size}Mb"},{size:e.maxSize})};e.errorList.push(o)}else if(e.isDuplicate(t.name)){var o={file_name:t.name,message:intl.formatMessage({id:"uploader.duplicateName",defaultMessage:"A file with this name already exists."})};e.errorList.push(o)}else{e.inProgressList.push(t)}forceUpdate(e.el)}));if(this.inProgressList.length>0){this.numFilesInProgress=this.inProgressList.length;this.inProgressList.map((function(t,o){e.uploadFile(t,o)}))}}t.target.value=""};t.prototype.uploadFile=function(t,e){var o=this;getRequest(this.requestUploadPath+e.toString()).then((function(e){return __awaiter(o,void 0,void 0,(function(){var o,n,r;var i=this;return __generator(this,(function(a){switch(a.label){case 0:o=JSON.parse(this.associatedData);n=Object.assign(Object.assign({},o),{file_name:t.name,mime_type:t.type,file_path:e.path,document_uuid:e.guid});r=function(e){var o=e.lengthComputable&&e.total!==0?e.loaded/e.total*100:0;var n=new CustomEvent("wmUploadProgress",{detail:{file_name:t.name,progress:o}});i.el.dispatchEvent(n)};return[4,putRequest(e.url,t,r)];case 1:a.sent();return[4,postRequest(this.uploadPath,n)];case 2:a.sent();this.getExistingFiles();return[2]}}))}))})).catch((function(t){o.numFilesInProgress=null;o.inProgressList=[];o.notif={id:3,message:intl.formatMessage({id:"global.genericError",defaultMessage:"An error occurred. Please try again."})};console.error(t)}))};t.prototype.downloadFile=function(t,e){this.clearErrors();var o={file_path:e,file_uuid:t};postRequest(this.requestDownloadPath,o).then((function(t){window.location.assign(t.url)})).catch((function(t){console.error(t)}))};t.prototype.deleteFile=function(t){var e=this;this.clearErrors();this.snackbar.push({message:intl.formatMessage({id:"uploader.fileDeleted",defaultMessage:"{fileName} was deleted."},{fileName:t.file_name}),id:t.uuid,link:""});this.fileList=this.fileList.filter((function(e){return e.uuid!==t.uuid}));deleteRequest("".concat(this.deletePath,"/").concat(t.uuid)).catch((function(o){e.notif={id:4,message:intl.formatMessage({id:"uploader.fileNotDeleted",defaultMessage:"{fileName} could not be deleted."},{fileName:t.file_name})};e.getExistingFiles();console.error(o)}))};t.prototype.componentWillLoad=function(){if(!this.getPath){throw new Error("wm-network-uploader: get-path is a required prop")}if(!this.requestUploadPath){throw new Error("wm-network-uploader: request-upload-path is a required prop")}if(!this.uploadPath){throw new Error("wm-network-uploader: upload-path is a required prop")}if(!this.requestDownloadPath){throw new Error("wm-network-uploader: request-download-path is a required prop")}if(!this.deletePath){throw new Error("wm-network-uploader: delete-path is a required prop")}if(!this.buttonText){throw new Error("wm-network-uploader: button-text is a required prop")}if(!this.emptyStateText){throw new Error("wm-network-uploader: empty-state-text is a required prop")}if(!this.associatedData){throw new Error("wm-network-uploader: associated-data is a required prop")}this.setMaxSize();this.clearErrors()};t.prototype.componentDidLoad=function(){this.getExistingFiles();if(document.body.classList.contains("wmcl-user-is-tabbing")){this.toggleTabbingOn()}};t.prototype.uploadButtonOnClick=function(t){var e=this;if(this.isDisabled){t.preventDefault();if(this.liveRegion){var o=!!this.maxFiles&&this.fileList.length>=this.maxFiles;var n="";if(this.numFilesInProgress>0){n=intl.formatMessage({id:"uploader.waitToUpload",defaultMessage:"Please wait for current upload to complete before uploading new files.",description:"Message for screen reader users"})}else if(o){n=intl.formatMessage({id:"uploader.fileUploadLimitExceeded",defaultMessage:"Upload unsuccessful because file selection would exceed the maximum number of files",description:"Message displayed when trying to upload too many files"})}if(n){this.liveRegion.innerHTML="";new Promise((function(t){setTimeout((function(){t("")}),500)})).then((function(){return e.liveRegion.innerHTML=n}))}}}else{this.clearErrors()}};t.prototype.renderUploadSvg=function(){return h("svg",{class:"upload-file",width:"91",height:"84",viewBox:"0 0 91 84"},h("path",{transform:"rotate(-180.000000) translate(-452, -255.5)",fill:"#eae8ec",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"}))};t.prototype.renderIcon=function(){var t=this.icon&&this.icon==="f066";return this.icon&&h("span",{class:"mdi ".concat(t?"rotate":"")},String.fromCodePoint(parseInt("0x".concat(this.icon))))};t.prototype.renderNotif=function(){return this.notif?h("span",{class:"notif"},this.notif.message):""};t.prototype.renderUploadButton=function(t){var e=this;return h("div",{class:"notif-wrapper"},h("input",{name:this.inputId,id:this.inputId,class:"sr-only",type:"file",multiple:true,onClick:function(t){return e.uploadButtonOnClick(t)},onChange:function(t){return e.handleFiles(t)}}),h("label",{htmlFor:this.inputId,class:"wm-button ".concat(t).concat(this.isTabbing?" user-is-tabbing":"")},this.renderIcon(),this.buttonText),this.renderNotif())};t.prototype.renderWithItems=function(){return h("div",null,h("div",{class:"header"},h("div",{class:"descr"},h("slot",null)),this.renderUploadButton(this.isDisabled?"disabled":"")),this.renderErrorList(),this.renderInProgressList(),this.renderFileList())};t.prototype.renderEmptyState=function(){return h("div",null,h("div",{class:"header"},h("div",{class:"descr"},h("slot",null))),h("div",{class:"empty-block"},this.renderUploadSvg(),h("div",{class:"empty-message"},this.emptyStateText),this.renderUploadButton("-primary empty-button")))};t.prototype.renderErrorList=function(){if(!!this.errorList.length){if(this.liveRegion){var t=this.errorList.reduce((function(t,e){return t+"".concat(e.file_name,": ").concat(e.message," ")}),"");this.liveRegion.innerHTML=t}return h("ul",{class:"error-list"},this.errorList.map((function(t){return h("li",null,h("div",{class:"file --error"},h("div",{class:"file-info"},h("span",{class:"filename"},t.file_name))),h("div",{class:"error-message"},t.message))})))}};t.prototype.renderInProgressList=function(){return h("ul",{class:"inprogress-list"},this.inProgressList.map((function(t){return h("li",null,h("div",{class:"file --progress"},h("div",{class:"progress",style:{background:"linear-gradient(to right, rgba(67, 126, 142, 1) ".concat(t.progress,"%, transparent ").concat(t.progress,"%)")}}),h("div",{class:"file-info"},h("span",{class:"filename"},t.name," ",h("span",{class:"sr-only"},"uploading")))))})))};t.prototype.renderFile=function(t){var e=this;return h("li",null,h("div",{class:"file --saved"},h("div",{class:"file-info"},h("span",{class:"filename"},t.file_name),h("span",{class:"filedate"},this.formatDate(t.updated_at,intl.locale,Intl.DateTimeFormat().resolvedOptions().timeZone))),h("div",{class:"file-controls"},h("wm-button",{class:"download-button","button-type":"icononly",tooltip:"download","label-for-identical-buttons":"download ".concat(t.file_name),icon:"f1da",onClick:function(){return e.downloadFile(t.uuid,t.file_path)}}),h("wm-button",{class:"delete-button","button-type":"icononly",tooltip:"remove","label-for-identical-buttons":"remove ".concat(t.file_name),icon:"f1c0",onClick:function(){return e.deleteFile(t)}}))))};t.prototype.renderFileList=function(){var t=this;return h("ul",{class:"file-list"},this.fileList.map((function(e){return t.renderFile(e)})))};t.prototype.render=function(){var t=this;return h(Host,null,this.isEmpty()?this.renderEmptyState():this.renderWithItems(),h("wm-snackbar",{notifications:JSON.stringify(this.snackbar)}),h("div",{ref:function(e){return t.liveRegion=e},class:"live-region sr-only","aria-live":"assertive","aria-atomic":"true"}))};Object.defineProperty(t.prototype,"el",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{maxSize:["setMaxSize"],numFilesInProgress:["uploadNotifications"],fileList:["emitFileListEvent"]}},enumerable:false,configurable:true});return t}();NetworkUploader.style=wmNetworkUploaderCss;export{NetworkUploader as wm_network_uploader};
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(t,e,o,n){function r(t){return t instanceof o?t:new o((function(e){e(t)}))}return new(o||(o=Promise))((function(o,i){function a(t){try{l(n.next(t))}catch(t){i(t)}}function s(t){try{l(n["throw"](t))}catch(t){i(t)}}function l(t){t.done?o(t.value):r(t.value).then(a,s)}l((n=n.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var o={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,r,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(t){return function(e){return l([t,e])}}function l(s){if(n)throw new TypeError("Generator is already executing.");while(a&&(a=0,s[0]&&(o=0)),o)try{if(n=1,r&&(i=s[0]&2?r["return"]:s[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;if(r=0,i)s=[s[0]&2,i.value];switch(s[0]){case 0:case 1:i=s;break;case 4:o.label++;return{value:s[1],done:false};case 5:o.label++;r=s[1];s=[0];continue;case 7:s=o.ops.pop();o.trys.pop();continue;default:if(!(i=o.trys,i=i.length>0&&i[i.length-1])&&(s[0]===6||s[0]===2)){o=0;continue}if(s[0]===3&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(s[0]===6&&o.label<i[1]){o.label=i[1];i=s;break}if(i&&o.label<i[2]){o.label=i[2];o.ops.push(s);break}if(i[2])o.ops.pop();o.trys.pop();continue}s=e.call(t,o)}catch(t){s=[6,t];r=0}finally{n=i=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}};import{r as registerInstance,c as createEvent,f as forceUpdate,h,H as Host,g as getElement}from"./index-84a6ae22.js";import{g as getRequest,p as putRequest,a as postRequest,d as deleteRequest}from"./http-service-5d037e16.js";import{g as generateId,i as intl,v as hasValidType}from"./functions-dc9964aa.js";import{g as globalMessages}from"./intl-4d4826dd.js";var wmNetworkUploaderCss=':host .wm-button,wm-network-uploader .wm-button{-ms-transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);-webkit-transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);-moz-transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);transition:background-color 500ms cubic-bezier(0.4, 0, 0.2, 1), color 500ms cubic-bezier(0.4, 0, 0.2, 1), border 500ms cubic-bezier(0.4, 0, 0.2, 1);-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;width:inherit;border:2px solid #575195;color:#575195;font-family:inherit;font-size:0.75rem;font-weight:700;height:2.75rem;padding:0 1.3333333333em;cursor:pointer;position:relative;background:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;text-decoration:none;text-transform:uppercase;letter-spacing:0.01875rem;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@media screen and (min-width: 48rem){:host .wm-button,wm-network-uploader .wm-button{height:3.3333333333em}}:host .wm-button.nowrap,wm-network-uploader .wm-button.nowrap{display:inline-block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .wm-button:focus,wm-network-uploader .wm-button:focus{outline:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}:host .wm-button::-moz-focus-inner,wm-network-uploader .wm-button::-moz-focus-inner{border:0;outline:none}:host .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) :host .wm-button.-textonly .button-text,wm-network-uploader .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) :host .wm-button.-textonly .button-text,:host .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) wm-network-uploader .wm-button.-textonly .button-text,wm-network-uploader .wm-button.user-is-tabbing:focus:not(:disabled):not(.disabled) wm-network-uploader .wm-button.-textonly .button-text{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 1em;border-radius:0;line-height:normal}:host .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled),wm-network-uploader .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled){-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}:host .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark),wm-network-uploader .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark){-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;-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;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}:host .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark)::-moz-focus-inner,wm-network-uploader .wm-button.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled):not(.dark)::-moz-focus-inner{border:0}:host .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled),wm-network-uploader .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled){background:transparent;border:2px solid #fff;color:#fff}:host .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.dark:not(.-textonly):not(:disabled):not(.disabled):hover{color:#575195;background:#e6e6e6;border:2px solid #e6e6e6}:host .wm-button.dark.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled).dark,wm-network-uploader .wm-button.dark.user-is-tabbing:focus:not(.-textonly):not(:disabled):not(.disabled).dark{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-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 #c6b4e3;-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 #c6b4e3;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 #c6b4e3;outline:none}:host .wm-button:active:not(:disabled):not(.disabled):not(.-textonly):not(.-actionbutton):not(.displayedoption),wm-network-uploader .wm-button:active:not(:disabled):not(.disabled):not(.-textonly):not(.-actionbutton):not(.displayedoption){-ms-transform:scale(0.9, 0.9);-webkit-transform:scale(0.9, 0.9);-moz-transform:scale(0.9, 0.9);transform:scale(0.9, 0.9)}:host .wm-button .mdi,wm-network-uploader .wm-button .mdi{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}:host .wm-button:not(.-icononly):not(.-navigational) .mdi,wm-network-uploader .wm-button:not(.-icononly):not(.-navigational) .mdi{margin-right:0.3125rem}:host .wm-button[dir=RTL] :not(.-icononly) .mdi,wm-network-uploader .wm-button[dir=RTL] :not(.-icononly) .mdi{margin-left:0.3125rem;margin-right:0}:host .wm-button.-primary:not(.-textonly),wm-network-uploader .wm-button.-primary:not(.-textonly){background:#575195;color:#fff}:host .wm-button.-primary:not(.-textonly):not(:focus),wm-network-uploader .wm-button.-primary:not(.-textonly):not(:focus){-webkit-box-shadow:0 2px 2px 0 rgba(87, 81, 149, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 2px 0 rgba(87, 81, 149, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.2);box-shadow:0 2px 2px 0 rgba(87, 81, 149, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.2)}:host .wm-button.-primary:not(.-textonly):hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-primary:not(.-textonly):hover:not(:disabled):not(.disabled){background:#464177}:host .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled){color:#575195;background:#fff;border:2px solid #fff}:host .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-primary:not(.-textonly).dark:not(:disabled):not(.disabled):hover{color:#575195;background:#e6e6e6;border:2px solid #e6e6e6}:host .wm-button.-secondary:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-secondary:hover:not(:disabled):not(.disabled),:host .wm-button.-selector:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-selector:hover:not(:disabled):not(.disabled),:host .wm-button.-icononly:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-icononly:hover:not(:disabled):not(.disabled){background:#464177;color:#fff}:host .wm-button.-textonly,wm-network-uploader .wm-button.-textonly{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;letter-spacing:0;text-transform:none;text-align:initial;font-size:0.875rem;border:none;background:transparent;padding-left:0;padding-right:0;height:auto;border-radius:0;line-height:1}:host .wm-button.-textonly+.-textonly,wm-network-uploader .wm-button.-textonly+.-textonly{margin-left:0.3125rem}:host .wm-button.-textonly:focus,wm-network-uploader .wm-button.-textonly:focus{outline:none}:host .wm-button.-textonly::-moz-focus-inner,wm-network-uploader .wm-button.-textonly::-moz-focus-inner{border:0;outline:none}:host .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled) .button-text,wm-network-uploader .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled) .button-text{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 1em;border-radius:0;line-height:normal}:host .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled).dark .button-text,wm-network-uploader .wm-button.-textonly.user-is-tabbing:focus:not(:disabled):not(.disabled).dark .button-text{background:-webkit-gradient(linear, left top, right top, color-stop(66%, #fff), color-stop(0, transparent)) repeat-x;background:linear-gradient(90deg, #fff 66%, transparent 0) repeat-x;background-size:6px 3px;background-position:0 1em;border-radius:0;line-height:normal}:host .wm-button.-textonly.small,wm-network-uploader .wm-button.-textonly.small{font-size:0.625rem}:host .wm-button.-textonly:hover:not(:disabled):not(.disabled):not(.-permanentlydelete),wm-network-uploader .wm-button.-textonly:hover:not(:disabled):not(.disabled):not(.-permanentlydelete){text-decoration:underline}:host .wm-button.-textonly.-permanentlydelete,wm-network-uploader .wm-button.-textonly.-permanentlydelete{color:#c0392b}:host .wm-button.-textonly.-permanentlydelete:hover:not(:disabled):not(.disabled):not(.dark),wm-network-uploader .wm-button.-textonly.-permanentlydelete:hover:not(:disabled):not(.disabled):not(.dark){text-decoration:underline;color:#c0392b !important}:host .wm-button.-textonly.dark,wm-network-uploader .wm-button.-textonly.dark{color:#fff}:host .wm-button.-textonly.dark:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-textonly.dark:hover:not(:disabled):not(.disabled){text-decoration:underline;color:#fff !important}:host .wm-button.-icononly,wm-network-uploader .wm-button.-icononly,:host .wm-button.-navigational,wm-network-uploader .wm-button.-navigational{-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;border-radius:50%;font-size:1rem;padding:0;height:auto;line-height:1;min-width:2.75rem;min-height:2.75rem;text-align:center;letter-spacing:normal}:host .wm-button.-icononly:not(:focus),wm-network-uploader .wm-button.-icononly:not(:focus),:host .wm-button.-navigational:not(:focus),wm-network-uploader .wm-button.-navigational:not(:focus){-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@media screen and (min-width: 48rem){:host .wm-button.-icononly,wm-network-uploader .wm-button.-icononly,:host .wm-button.-navigational,wm-network-uploader .wm-button.-navigational{min-width:2.5rem;min-height:2.5rem}}:host .wm-button.-icononly,wm-network-uploader .wm-button.-icononly{border-width:1px !important}:host .wm-button.-icononly:before,wm-network-uploader .wm-button.-icononly:before{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}:host .wm-button.-navigational,wm-network-uploader .wm-button.-navigational{border:none !important;background-color:transparent}:host .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled),wm-network-uploader .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled){color:#575195}:host .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled):hover,:host .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled).selected,wm-network-uploader .wm-button.-navigational:not(.dark):not(:disabled):not(.disabled).selected{background-color:#d7d6d9}:host .wm-button.-navigational:before,wm-network-uploader .wm-button.-navigational:before{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}:host .wm-button.-permanentlydelete:not(.-textonly),wm-network-uploader .wm-button.-permanentlydelete:not(.-textonly){background:#c0392b;border-color:#c0392b;color:#fff}:host .wm-button.-permanentlydelete:not(.-textonly):hover:not(:disabled):not(.disabled):not(.dark),wm-network-uploader .wm-button.-permanentlydelete:not(.-textonly):hover:not(:disabled):not(.disabled):not(.dark){background:#9a2e22;border-color:#9a2e22}:host .wm-button.-pairnegative,wm-network-uploader .wm-button.-pairnegative{background:#cc4c3e;border-color:#cc4c3e;color:#fff}:host .wm-button.-pairnegative:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-pairnegative:hover:not(:disabled):not(.disabled){background:#a33d32;border-color:#a33d32}:host .wm-button.-pairpositive,wm-network-uploader .wm-button.-pairpositive{background:#15868d;border-color:#15868d;color:#fff}:host .wm-button.-pairpositive:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-pairpositive:hover:not(:disabled):not(.disabled){background:#116b71;border-color:#116b71}:host .wm-button.-selector,wm-network-uploader .wm-button.-selector,:host .wm-button.-selector-primary,wm-network-uploader .wm-button.-selector-primary{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;border-radius:3px;display:block;background:transparent;border:2px solid #575195;border-radius:3px;height:2.75rem;min-width:11.4375rem;padding:0 1.875rem 0 0.9375rem;line-height:normal;font-family:inherit;color:#575195;font-weight:700;font-size:0.75rem;text-transform:uppercase;letter-spacing:0.01875rem;text-align:left}@media screen and (min-width: 48rem){:host .wm-button.-selector,wm-network-uploader .wm-button.-selector,:host .wm-button.-selector-primary,wm-network-uploader .wm-button.-selector-primary{height:2.5rem}}:host .wm-button.-selector:before,wm-network-uploader .wm-button.-selector:before,:host .wm-button.-selector-primary:before,wm-network-uploader .wm-button.-selector-primary:before{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:"\\f140";position:absolute;right:0.5625rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:0.875rem;font-weight:700;pointer-events:none}:host .wm-button.-selector:active,wm-network-uploader .wm-button.-selector:active,:host .wm-button.-selector-primary:active,wm-network-uploader .wm-button.-selector-primary:active{-ms-transform:scale(1, 1) !important;-webkit-transform:scale(1, 1) !important;transform:scale(1, 1) !important}:host .wm-button.-selector::-moz-focus-inner,wm-network-uploader .wm-button.-selector::-moz-focus-inner,:host .wm-button.-selector-primary::-moz-focus-inner,wm-network-uploader .wm-button.-selector-primary::-moz-focus-inner{border:0}:host .wm-button.-selector .overflowcontrol,wm-network-uploader .wm-button.-selector .overflowcontrol,:host .wm-button.-selector-primary .overflowcontrol,wm-network-uploader .wm-button.-selector-primary .overflowcontrol{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:visible}:host .wm-button.-selector.dark:not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-selector.dark:not(:disabled):not(.disabled):hover,:host .wm-button.-selector-primary.dark:not(:disabled):not(.disabled):hover,wm-network-uploader .wm-button.-selector-primary.dark:not(:disabled):not(.disabled):hover{color:#575195;background:#e6e6e6;border:2px solid #e6e6e6}:host .wm-button.-selector-primary,wm-network-uploader .wm-button.-selector-primary{background:#575195;color:#fff}:host .wm-button.-selector-primary:hover:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-selector-primary:hover:not(:disabled):not(.disabled){background:#464177}:host .wm-button.-selector-primary.dark:not(:disabled):not(.disabled),wm-network-uploader .wm-button.-selector-primary.dark:not(:disabled):not(.disabled){color:#575195;background:#fff;border:2px solid #fff}:host .wm-button:disabled,wm-network-uploader .wm-button:disabled,:host .wm-button.disabled,wm-network-uploader .wm-button.disabled{background:inherit;border-color:#737373;color:#737373;cursor:default;pointer-events:none}:host .wm-button:disabled.-primary,wm-network-uploader .wm-button:disabled.-primary,:host .wm-button:disabled.-permanentlydelete,wm-network-uploader .wm-button:disabled.-permanentlydelete,:host .wm-button:disabled.-pairnegative,wm-network-uploader .wm-button:disabled.-pairnegative,:host .wm-button:disabled.-pairpositive,wm-network-uploader .wm-button:disabled.-pairpositive,:host .wm-button.disabled.-primary,wm-network-uploader .wm-button.disabled.-primary,:host .wm-button.disabled.-permanentlydelete,wm-network-uploader .wm-button.disabled.-permanentlydelete,:host .wm-button.disabled.-pairnegative,wm-network-uploader .wm-button.disabled.-pairnegative,:host .wm-button.disabled.-pairpositive,wm-network-uploader .wm-button.disabled.-pairpositive{background:#737373;color:#fff;border-color:#737373}:host .wm-button:disabled.-secondary,wm-network-uploader .wm-button:disabled.-secondary,:host .wm-button.disabled.-secondary,wm-network-uploader .wm-button.disabled.-secondary{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}:host .wm-button:disabled.-selector,wm-network-uploader .wm-button:disabled.-selector,:host .wm-button.disabled.-selector,wm-network-uploader .wm-button.disabled.-selector{color:#737373}:host .wm-button:disabled.-selector-primary,wm-network-uploader .wm-button:disabled.-selector-primary,:host .wm-button.disabled.-selector-primary,wm-network-uploader .wm-button.disabled.-selector-primary{background:#737373;color:#fff;border-color:#737373}:host .wm-button:disabled.-textonly,wm-network-uploader .wm-button:disabled.-textonly,:host .wm-button.disabled.-textonly,wm-network-uploader .wm-button.disabled.-textonly{color:#6b6b6b;background:transparent}:host .wm-button:disabled.dark.-secondary:not(.-permanentlydelete),wm-network-uploader .wm-button:disabled.dark.-secondary:not(.-permanentlydelete),:host .wm-button:disabled.dark.-selector,wm-network-uploader .wm-button:disabled.dark.-selector,:host .wm-button:disabled.dark.-textonly,wm-network-uploader .wm-button:disabled.dark.-textonly,:host .wm-button:disabled.dark.-navigational,wm-network-uploader .wm-button:disabled.dark.-navigational,:host .wm-button:disabled.dark.-icononly,wm-network-uploader .wm-button:disabled.dark.-icononly,:host .wm-button.disabled.dark.-secondary:not(.-permanentlydelete),wm-network-uploader .wm-button.disabled.dark.-secondary:not(.-permanentlydelete),:host .wm-button.disabled.dark.-selector,wm-network-uploader .wm-button.disabled.dark.-selector,:host .wm-button.disabled.dark.-textonly,wm-network-uploader .wm-button.disabled.dark.-textonly,:host .wm-button.disabled.dark.-navigational,wm-network-uploader .wm-button.disabled.dark.-navigational,:host .wm-button.disabled.dark.-icononly,wm-network-uploader .wm-button.disabled.dark.-icononly{color:#b5b5b5;border-color:#b5b5b5}:host .wm-button:disabled.dark.-primary,wm-network-uploader .wm-button:disabled.dark.-primary,:host .wm-button:disabled.dark.-selector-primary,wm-network-uploader .wm-button:disabled.dark.-selector-primary,:host .wm-button:disabled.dark.-permanentlydelete:not(.-textonly),wm-network-uploader .wm-button:disabled.dark.-permanentlydelete:not(.-textonly),:host .wm-button.disabled.dark.-primary,wm-network-uploader .wm-button.disabled.dark.-primary,:host .wm-button.disabled.dark.-selector-primary,wm-network-uploader .wm-button.disabled.dark.-selector-primary,:host .wm-button.disabled.dark.-permanentlydelete:not(.-textonly),wm-network-uploader .wm-button.disabled.dark.-permanentlydelete:not(.-textonly){background:#a6a6a6;border-color:#a6a6a6;color:#353b48}:host a.wm-button,wm-network-uploader a.wm-button,:host label.wm-button,wm-network-uploader label.wm-button{height:auto;padding-top:0.75rem;padding-bottom:0.75rem}:host,wm-network-uploader{width:100%;position:relative}:host[dir=RTL] .mdi,wm-network-uploader[dir=RTL] .mdi{margin-left:0.3125rem;margin-right:0}:host input:focus+.wm-button.user-is-tabbing,wm-network-uploader input:focus+.wm-button.user-is-tabbing{-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;-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;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}:host *,wm-network-uploader *{-webkit-box-sizing:border-box;box-sizing:border-box}.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}.header{position:relative;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap}.header .notif-wrapper{-ms-flex-align:end;align-items:flex-end}.notif-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.notif-wrapper .notif{font-size:0.875rem;font-style:italic;margin-top:0.25rem}@media (max-width: 60.9375rem){.descr{margin-bottom:0.5rem}.notif-wrapper{margin-bottom:1rem}.header .notif-wrapper{-ms-flex-align:start;align-items:flex-start}}.file-info{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.file-info+.file-controls{-ms-flex:none;flex:none;margin-left:1rem}.empty-block{margin:5rem auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.empty-block .upload-file{margin-bottom:1.875rem}.empty-block .empty-message{font-size:1.5rem;margin-bottom:0.4375rem}.empty-block .notif-wrapper{-ms-flex-pack:center;justify-content:center}.empty-block .notif-wrapper .wm-button{width:auto}ul{list-style:none;padding:0;width:100%}ul li{font-size:0.875rem}ul li .file{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;border-radius:3px;position:relative;height:3.75rem;padding:0.5rem 1.25rem;background:#f4f4f4;border:1px solid #6b6b6b;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}ul li .file+.file{margin-top:1.25rem}ul li .file .filename{font-weight:500}ul li .file .filedate{margin-left:3.75rem;font-weight:normal;font-style:italic}ul li .file wm-button+wm-button{margin-left:1rem}ul.file-list .file.--saved,ul.inprogress-list .file{margin-bottom:1.625rem}ul .progress{position:absolute;left:0;top:0;right:0;height:8px}ul.error-list li{margin-bottom:1.25rem;color:#c0392b}ul.error-list li .file{border:1px solid #c0392b;background-color:#f5ebea;height:3.75rem}ul .error-message{padding-top:0.25rem;font-style:italic}';var NetworkUploader=function(){function t(t){registerInstance(this,t);this.wmNetworkUploaderFilesChanged=createEvent(this,"wmNetworkUploaderFilesChanged",7);this.inputId=generateId();this.isTabbing=false;this.fileList=[];this.inProgressList=[];this.errorList=[];this.notif=undefined;this.snackbar=[];this.numFilesInProgress=undefined;this.getPath=undefined;this.requestUploadPath=undefined;this.uploadPath=undefined;this.requestDownloadPath=undefined;this.deletePath=undefined;this.associatedData=undefined;this.buttonText=undefined;this.emptyStateText=undefined;this.icon=undefined;this.fileTypes="pdf txt log xml doc docx xls xlsx ppt pptx gif jpg jpeg png csv";this.maxSize=100;this.maxFiles=undefined;this.sortBy="date"}t.prototype.toggleTabbingOn=function(){this.isTabbing=true};t.prototype.toggleTabbingOff=function(){this.isTabbing=false};t.prototype.handleUploadProgress=function(t){var e=this;this.inProgressList.map((function(o){if(o.name===t.detail.file_name){o.progress=t.detail.progress;forceUpdate(e.el)}}));if(t.detail.progress===100){this.numFilesInProgress-=1}if(!this.srProgress&&this.numFilesInProgress){var o=this.numFilesInProgress;this.srProgress=setInterval((function(){var t=e.inProgressList.reduce((function(t,e){return e.progress?t+e.progress:t}),0);if(e.liveRegion){e.liveRegion.innerHTML=intl.formatMessage({id:"uploader.uploadProgress",defaultMessage:"Upload progress: {percentage}%"},{percentage:Math.floor(t/o)})}}),5e3)}};t.prototype.handleFinishedSnack=function(t){this.snackbar=this.snackbar.filter((function(e){return e.id!==t.detail.id}))};t.prototype.setMaxSize=function(){this.maxSize=this.maxSize>100?100:this.maxSize};t.prototype.uploadNotifications=function(t,e){var o=this;if(e>0&&t===0){setTimeout((function(){o.notif=null}),20*1e3);var n=intl.formatMessage({id:"uploader.finishedUploading",defaultMessage:"Finished uploading"});this.notif={id:5,message:n};if(this.liveRegion){this.liveRegion.innerHTML=n}this.numFilesInProgress=null;clearInterval(this.srProgress);forceUpdate(this.el)}else if(t>0&&t!=e){var n=intl.formatMessage({id:"uploader.filesUploading",defaultMessage:"{num, plural, one {1 file uploading} other {# files uploading}}"},{num:t});this.notif={id:6,message:n};if(this.liveRegion){this.liveRegion.innerHTML=n}forceUpdate(this.el)}};t.prototype.emitFileListEvent=function(){this.wmNetworkUploaderFilesChanged.emit(this.fileList)};t.prototype.formatDate=function(t,e,o){var n=Date.parse(t);if(e.match(/^[a-zA-Z]*(-[a-zA-Z0-9]*)*$/g)){try{Intl.getCanonicalLocales(e)}catch(t){e="en-us"}}else{return t}if(!!n){var r=new Date(n);var i=r.getFullYear();var a=("0"+(r.getMonth()+1)).substr(-2);var s=("0"+r.getDate()).substr(-2);var l=r.toLocaleTimeString([e,"en-us"],{timeZone:o,hour:"numeric",minute:"numeric"});return"".concat(i,"/").concat(a,"/").concat(s," ").concat(l)}else{return t}};t.prototype.isValidSize=function(t){return t/1024/1024<=this.maxSize};t.prototype.isDuplicate=function(t){return this.fileList.find((function(e){return e.file_name===t}))};t.prototype.isEmpty=function(){return!this.fileList.length&&!this.inProgressList.length&&!this.errorList.length};Object.defineProperty(t.prototype,"isDisabled",{get:function(){var t=!!this.maxFiles&&this.fileList.length>=this.maxFiles;if(!this.notif){if(t){var e=intl.formatMessage({id:"uploader.fileUploadLimitExceeded",defaultMessage:"Upload unsuccessful because file selection would exceed the maximum number of files",description:"Message displayed when trying to upload too many files"});this.notif={id:1,message:e};if(this.liveRegion){this.liveRegion.innerHTML=e}}else{this.notif=null}}else if(this.notif.id===1){if(!t){this.notif=null}}return t||this.numFilesInProgress>0},enumerable:false,configurable:true});t.prototype.purgeProgressList=function(t){this.inProgressList=this.inProgressList.filter((function(e){return e.progress!==100&&e.name!==t.file_name}))};t.prototype.getExistingFiles=function(){var t=this;getRequest(this.getPath).then((function(e){e.map((function(e){return t.purgeProgressList(e)}));if(t.sortBy==="name"){e.sort((function(t,e){return t.file_name.localeCompare(e.file_name)}))}t.fileList=e})).catch((function(t){console.error(t)}))};t.prototype.clearErrors=function(){this.errorList=[];this.notif=null};t.prototype.handleFiles=function(t){var e=this;var o=Array.from(t.target.files);var n=this.fileTypes.split(" ").join(", ");if(!!this.maxFiles&&this.fileList.length+o.length>this.maxFiles){var r=intl.formatMessage({id:"uploader.fileUploadLimitExceeded",defaultMessage:"Upload unsuccessful because file selection would exceed the maximum number of files",description:"Message displayed when trying to upload too many files"});this.notif={id:2,message:r};if(this.liveRegion){this.liveRegion.innerHTML=r}}else{o&&o.map((function(t){if(!hasValidType(t,e.fileTypes)){var o={file_name:t.name,message:intl.formatMessage({id:"uploader.invalidFileType",defaultMessage:"The file type is invalid. Accepted types: {validTypes}"},{validTypes:n})};e.errorList.push(o)}else if(!e.isValidSize(t.size)){var o={file_name:t.name,message:intl.formatMessage({id:"uploader.fileTooLarge",defaultMessage:"The selected file is too large. Maximum file size is {size}Mb"},{size:e.maxSize})};e.errorList.push(o)}else if(e.isDuplicate(t.name)){var o={file_name:t.name,message:intl.formatMessage({id:"uploader.duplicateName",defaultMessage:"A file with this name already exists."})};e.errorList.push(o)}else{e.inProgressList.push(t)}forceUpdate(e.el)}));if(this.inProgressList.length>0){this.numFilesInProgress=this.inProgressList.length;this.inProgressList.map((function(t,o){e.uploadFile(t,o)}))}}t.target.value=""};t.prototype.uploadFile=function(t,e){var o=this;getRequest(this.requestUploadPath+e.toString()).then((function(e){return __awaiter(o,void 0,void 0,(function(){var o,n,r;var i=this;return __generator(this,(function(a){switch(a.label){case 0:o=JSON.parse(this.associatedData);n=Object.assign(Object.assign({},o),{file_name:t.name,mime_type:t.type,file_path:e.path,document_uuid:e.guid});r=function(e){var o=e.lengthComputable&&e.total!==0?e.loaded/e.total*100:0;var n=new CustomEvent("wmUploadProgress",{detail:{file_name:t.name,progress:o}});i.el.dispatchEvent(n)};return[4,putRequest(e.url,t,r)];case 1:a.sent();return[4,postRequest(this.uploadPath,n)];case 2:a.sent();this.getExistingFiles();return[2]}}))}))})).catch((function(t){o.numFilesInProgress=null;o.inProgressList=[];o.notif={id:3,message:globalMessages.genericError};console.error(t)}))};t.prototype.downloadFile=function(t,e){this.clearErrors();var o={file_path:e,file_uuid:t};postRequest(this.requestDownloadPath,o).then((function(t){window.location.assign(t.url)})).catch((function(t){console.error(t)}))};t.prototype.deleteFile=function(t){var e=this;this.clearErrors();this.snackbar.push({message:intl.formatMessage({id:"uploader.fileDeleted",defaultMessage:"{fileName} was deleted."},{fileName:t.file_name}),id:t.uuid,link:""});this.fileList=this.fileList.filter((function(e){return e.uuid!==t.uuid}));deleteRequest("".concat(this.deletePath,"/").concat(t.uuid)).catch((function(o){e.notif={id:4,message:intl.formatMessage({id:"uploader.fileNotDeleted",defaultMessage:"{fileName} could not be deleted."},{fileName:t.file_name})};e.getExistingFiles();console.error(o)}))};t.prototype.componentWillLoad=function(){if(!this.getPath){throw new Error("wm-network-uploader: get-path is a required prop")}if(!this.requestUploadPath){throw new Error("wm-network-uploader: request-upload-path is a required prop")}if(!this.uploadPath){throw new Error("wm-network-uploader: upload-path is a required prop")}if(!this.requestDownloadPath){throw new Error("wm-network-uploader: request-download-path is a required prop")}if(!this.deletePath){throw new Error("wm-network-uploader: delete-path is a required prop")}if(!this.buttonText){throw new Error("wm-network-uploader: button-text is a required prop")}if(!this.emptyStateText){throw new Error("wm-network-uploader: empty-state-text is a required prop")}if(!this.associatedData){throw new Error("wm-network-uploader: associated-data is a required prop")}this.setMaxSize();this.clearErrors()};t.prototype.componentDidLoad=function(){this.getExistingFiles();if(document.body.classList.contains("wmcl-user-is-tabbing")){this.toggleTabbingOn()}};t.prototype.uploadButtonOnClick=function(t){var e=this;if(this.isDisabled){t.preventDefault();if(this.liveRegion){var o=!!this.maxFiles&&this.fileList.length>=this.maxFiles;var n="";if(this.numFilesInProgress>0){n=intl.formatMessage({id:"uploader.waitToUpload",defaultMessage:"Please wait for current upload to complete before uploading new files.",description:"Message for screen reader users"})}else if(o){n=intl.formatMessage({id:"uploader.fileUploadLimitExceeded",defaultMessage:"Upload unsuccessful because file selection would exceed the maximum number of files",description:"Message displayed when trying to upload too many files"})}if(n){this.liveRegion.innerHTML="";new Promise((function(t){setTimeout((function(){t("")}),500)})).then((function(){return e.liveRegion.innerHTML=n}))}}}else{this.clearErrors()}};t.prototype.renderUploadSvg=function(){return h("svg",{class:"upload-file",width:"91",height:"84",viewBox:"0 0 91 84"},h("path",{transform:"rotate(-180.000000) translate(-452, -255.5)",fill:"#eae8ec",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"}))};t.prototype.renderIcon=function(){var t=this.icon&&this.icon==="f066";return this.icon&&h("span",{class:"mdi ".concat(t?"rotate":"")},String.fromCodePoint(parseInt("0x".concat(this.icon))))};t.prototype.renderNotif=function(){return this.notif?h("span",{class:"notif"},this.notif.message):""};t.prototype.renderUploadButton=function(t){var e=this;return h("div",{class:"notif-wrapper"},h("input",{name:this.inputId,id:this.inputId,class:"sr-only",type:"file",multiple:true,onClick:function(t){return e.uploadButtonOnClick(t)},onChange:function(t){return e.handleFiles(t)}}),h("label",{htmlFor:this.inputId,class:"wm-button ".concat(t).concat(this.isTabbing?" user-is-tabbing":"")},this.renderIcon(),this.buttonText),this.renderNotif())};t.prototype.renderWithItems=function(){return h("div",null,h("div",{class:"header"},h("div",{class:"descr"},h("slot",null)),this.renderUploadButton(this.isDisabled?"disabled":"")),this.renderErrorList(),this.renderInProgressList(),this.renderFileList())};t.prototype.renderEmptyState=function(){return h("div",null,h("div",{class:"header"},h("div",{class:"descr"},h("slot",null))),h("div",{class:"empty-block"},this.renderUploadSvg(),h("div",{class:"empty-message"},this.emptyStateText),this.renderUploadButton("-primary empty-button")))};t.prototype.renderErrorList=function(){if(!!this.errorList.length){if(this.liveRegion){var t=this.errorList.reduce((function(t,e){return t+"".concat(e.file_name,": ").concat(e.message," ")}),"");this.liveRegion.innerHTML=t}return h("ul",{class:"error-list"},this.errorList.map((function(t){return h("li",null,h("div",{class:"file --error"},h("div",{class:"file-info"},h("span",{class:"filename"},t.file_name))),h("div",{class:"error-message"},t.message))})))}};t.prototype.renderInProgressList=function(){return h("ul",{class:"inprogress-list"},this.inProgressList.map((function(t){return h("li",null,h("div",{class:"file --progress"},h("div",{class:"progress",style:{background:"linear-gradient(to right, rgba(67, 126, 142, 1) ".concat(t.progress,"%, transparent ").concat(t.progress,"%)")}}),h("div",{class:"file-info"},h("span",{class:"filename"},t.name," ",h("span",{class:"sr-only"},"uploading")))))})))};t.prototype.renderFile=function(t){var e=this;return h("li",null,h("div",{class:"file --saved"},h("div",{class:"file-info"},h("span",{class:"filename"},t.file_name),h("span",{class:"filedate"},this.formatDate(t.updated_at,intl.locale,Intl.DateTimeFormat().resolvedOptions().timeZone))),h("div",{class:"file-controls"},h("wm-button",{class:"download-button","button-type":"icononly",tooltip:"download","label-for-identical-buttons":"download ".concat(t.file_name),icon:"f1da",onClick:function(){return e.downloadFile(t.uuid,t.file_path)}}),h("wm-button",{class:"delete-button","button-type":"icononly",tooltip:"remove","label-for-identical-buttons":"remove ".concat(t.file_name),icon:"f1c0",onClick:function(){return e.deleteFile(t)}}))))};t.prototype.renderFileList=function(){var t=this;return h("ul",{class:"file-list"},this.fileList.map((function(e){return t.renderFile(e)})))};t.prototype.render=function(){var t=this;return h(Host,null,this.isEmpty()?this.renderEmptyState():this.renderWithItems(),h("wm-snackbar",{notifications:JSON.stringify(this.snackbar)}),h("div",{ref:function(e){return t.liveRegion=e},class:"live-region sr-only","aria-live":"assertive","aria-atomic":"true"}))};Object.defineProperty(t.prototype,"el",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{maxSize:["setMaxSize"],numFilesInProgress:["uploadNotifications"],fileList:["emitFileListEvent"]}},enumerable:false,configurable:true});return t}();NetworkUploader.style=wmNetworkUploaderCss;export{NetworkUploader as wm_network_uploader};
|
|
2
2
|
//# sourceMappingURL=wm-network-uploader.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["wmNetworkUploaderCss","NetworkUploader","this","inputId","generateId","class_1","prototype","toggleTabbingOn","isTabbing","toggleTabbingOff","handleUploadProgress","ev","_this","inProgressList","map","i","name","detail","file_name","progress","forceUpdate","el","numFilesInProgress","srProgress","total_1","setInterval","aggregate","reduce","avg","item","liveRegion","innerHTML","intl","formatMessage","id","defaultMessage","percentage","Math","floor","handleFinishedSnack","snackbar","filter","n","setMaxSize","maxSize","uploadNotifications","newNum","oldNum","setTimeout","notif","message","clearInterval","num","emitFileListEvent","wmNetworkUploaderFilesChanged","emit","fileList","formatDate","isoDate","locale","timezone","timestamp","Date","parse","match","Intl","getCanonicalLocales","_a","date","year","getFullYear","month","getMonth","substr","day","getDate","time","toLocaleTimeString","timeZone","hour","minute","concat","isValidSize","size","isDuplicate","find","f","isEmpty","length","errorList","Object","defineProperty","isMax","maxFiles","errMessage","description","purgeProgressList","getExistingFiles","getRequest","getPath","then","reply","sortBy","sort","a","b","localeCompare","catch","errStatus","console","error","clearErrors","handleFiles","files","Array","from","target","validTypes","fileTypes","split","join","file","hasValidType","push","uploadFile","value","requestUploadPath","toString","__awaiter","assData","JSON","associatedData","fileInfo","assign","mime_type","type","file_path","path","document_uuid","guid","onProgress","lengthComputable","total","loaded","event","CustomEvent","dispatchEvent","putRequest","url","_b","sent","postRequest","uploadPath","err","downloadFile","uuid","payload","file_uuid","requestDownloadPath","window","location","deleteFile","fileName","link","deleteRequest","deletePath","componentWillLoad","Error","buttonText","emptyStateText","componentDidLoad","document","body","classList","contains","uploadButtonOnClick","isDisabled","preventDefault","errMsg_1","Promise","resolve","renderUploadSvg","h","class","width","height","viewBox","transform","fill","d","renderIcon","rotate","icon","String","fromCodePoint","parseInt","renderNotif","renderUploadButton","classes","multiple","onClick","onChange","e","htmlFor","renderWithItems","renderErrorList","renderInProgressList","renderFileList","renderEmptyState","srMessage","acc","style","background","renderFile","updated_at","DateTimeFormat","resolvedOptions","tooltip","render","Host","notifications","stringify","ref"],"sources":["src/components/wm-uploader/wm-network-uploader/wm-network-uploader.scss?tag=wm-network-uploader&encapsulation=shadow","src/components/wm-uploader/wm-network-uploader/wm-network-uploader.tsx"],"sourcesContent":[":host,\r\nwm-network-uploader {\r\n width: 100%;\r\n position: relative;\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-network-uploader * {\r\n box-sizing: border-box;\r\n}\r\n\r\n.sr-only {\r\n @include srOnly;\r\n}\r\n\r\n.header {\r\n position: relative;\r\n display: flex;\r\n justify-content: space-between;\r\n flex-wrap: wrap;\r\n\r\n .notif-wrapper {\r\n align-items: flex-end;\r\n }\r\n}\r\n\r\n.notif-wrapper {\r\n display: flex;\r\n align-items: flex-start; // for .notif\r\n height: -moz-fit-content;\r\n height: fit-content;\r\n flex-direction: column; // for.notif\r\n align-items: center; // for.notif\r\n .notif {\r\n font-size: 0.875rem;\r\n font-style: italic;\r\n margin-top: rem-calc(4);\r\n }\r\n}\r\n\r\n@media (max-width: rem-calc(975)) {\r\n .descr {\r\n margin-bottom: rem-calc(8);\r\n }\r\n .notif-wrapper {\r\n margin-bottom: rem-calc(16);\r\n }\r\n .header {\r\n .notif-wrapper {\r\n align-items: flex-start;\r\n }\r\n }\r\n}\r\n\r\n.file-info {\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n\r\n + .file-controls {\r\n flex: none;\r\n margin-left: rem-calc(16);\r\n }\r\n}\r\n\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: 1.5rem;\r\n margin-bottom: rem-calc(7);\r\n }\r\n\r\n .notif-wrapper {\r\n justify-content: center;\r\n\r\n .wm-button {\r\n // Removing the width inherit here to prevent a 100% width\r\n // from the notif-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\nul {\r\n list-style: none;\r\n padding: 0;\r\n width: 100%;\r\n li {\r\n font-size: rem-calc(14);\r\n .file {\r\n @include border-radius(3px);\r\n position: relative; // for progress bar\r\n height: rem-calc(60);\r\n padding: rem-calc(8 20);\r\n background: $background;\r\n border: 1px solid rgb(107, 107, 107);\r\n\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n\r\n + .file {\r\n margin-top: rem-calc(20);\r\n }\r\n\r\n .filename {\r\n font-weight: 500;\r\n }\r\n\r\n .filedate {\r\n margin-left: rem-calc(60);\r\n font-weight: normal;\r\n font-style: italic;\r\n }\r\n\r\n wm-button + wm-button {\r\n margin-left: rem-calc(16);\r\n }\r\n }\r\n }\r\n\r\n &.file-list .file.--saved,\r\n &.inprogress-list .file {\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\r\n .progress {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n height: 8px;\r\n }\r\n\r\n &.error-list li {\r\n margin-bottom: rem-calc(20);\r\n color: $error-color;\r\n .file {\r\n border: 1px solid $error-color;\r\n background-color: #f5ebea;\r\n height: rem-calc(60);\r\n }\r\n }\r\n .error-message {\r\n padding-top: rem-calc(4);\r\n font-style: italic;\r\n }\r\n}\r\n","import { Component, Element, h, Host, Prop, State, Listen, Watch, Event, EventEmitter } from \"@stencil/core\";\r\nimport { forceUpdate } from \"@stencil/core\";\r\nimport { getRequest, postRequest, putRequest, deleteRequest } from \"../../../global/services/http-service\";\r\nimport { intl, generateId, hasValidType } from \"../../../global/functions\";\r\n//\r\n// Web API File interface => for FileList on input element, sending to AWS\r\n// Custom FileInfo interface (below) => for our server\r\nexport interface FileInfo {\r\n file_name: string;\r\n file_path?: string;\r\n mime_type: string;\r\n updated_at?: string;\r\n\r\n uuid?: string; // AWS guid\r\n document_uuid?: string; // aka file uuid. how is that different from the uuid above?\r\n // organization_uuid: string; // aka node uuid\r\n}\r\n\r\ninterface FileInProgress extends File {\r\n progress?: number;\r\n}\r\n\r\ninterface ErrorInfo {\r\n file_name: string;\r\n message: string;\r\n}\r\n\r\ninterface AWSData {\r\n url: string;\r\n updated_at: string;\r\n path: string;\r\n guid: string;\r\n}\r\n\r\ninterface Notification {\r\n message: string;\r\n id: string;\r\n link: string;\r\n}\r\n\r\n@Component({\r\n tag: \"wm-network-uploader\",\r\n styleUrl: \"wm-network-uploader.scss\",\r\n shadow: true,\r\n})\r\nexport class NetworkUploader {\r\n @Element() el!: HTMLWmNetworkUploaderElement;\r\n private liveRegion?: HTMLDivElement;\r\n\r\n @State() isTabbing: boolean = false;\r\n\r\n @State() fileList: FileInfo[] = [];\r\n @State() inProgressList: FileInProgress[] = [];\r\n @State() errorList: ErrorInfo[] = []; // for errors on a particular file\r\n @State() notif?: { id: number; message: string } | null; // for global errors, e.g. user tries uploading too many files, and upload notifications\r\n @State() snackbar: Notification[] = [];\r\n @State() numFilesInProgress?: number | null; // null when not uploading != 0 (when all files are done uploading) != undefined (original state)\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\r\n @Prop() getPath!: string;\r\n @Prop() requestUploadPath!: string;\r\n @Prop() uploadPath!: string; // used for POST request (create db entry)\r\n @Prop() requestDownloadPath!: string;\r\n @Prop() deletePath!: string;\r\n\r\n @Prop() associatedData?: string;\r\n @Prop() buttonText!: 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({ mutable: true }) maxSize: number = 100; // 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\r\n @Event() wmNetworkUploaderFilesChanged!: EventEmitter<Object[]>;\r\n\r\n private inputId = generateId();\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.inProgressList.map((i) => {\r\n if (i.name === ev.detail.file_name) {\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.inProgressList.reduce((avg, item) => (item.progress ? avg + item.progress : avg), 0);\r\n if (this.liveRegion) {\r\n this.liveRegion.innerHTML = 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(\"userFinishedSnack\")\r\n handleFinishedSnack(ev: CustomEvent) {\r\n this.snackbar = this.snackbar.filter((n) => n.id !== ev.detail.id);\r\n }\r\n\r\n @Watch(\"maxSize\")\r\n setMaxSize() {\r\n // Max size can't be set above 100Mb\r\n this.maxSize = this.maxSize > 100 ? 100 : this.maxSize;\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 = null;\r\n }, 20 * 1000);\r\n const message = intl.formatMessage({\r\n id: \"uploader.finishedUploading\",\r\n defaultMessage: \"Finished uploading\",\r\n });\r\n this.notif = { id: 5, message };\r\n if (this.liveRegion) {\r\n this.liveRegion.innerHTML = message;\r\n }\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 message = 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 = { id: 6, message };\r\n if (this.liveRegion) {\r\n this.liveRegion.innerHTML = message;\r\n }\r\n forceUpdate(this.el);\r\n }\r\n }\r\n\r\n @Watch(\"fileList\")\r\n emitFileListEvent() {\r\n this.wmNetworkUploaderFilesChanged.emit(this.fileList);\r\n }\r\n\r\n formatDate(isoDate: string, locale: string, timezone: string) {\r\n const timestamp = Date.parse(isoDate);\r\n if (locale.match(/^[a-zA-Z]*(-[a-zA-Z0-9]*)*$/g)) {\r\n // make sure locale is valid, otherwise set default locale\r\n try {\r\n //@ts-ignore\r\n Intl.getCanonicalLocales(locale);\r\n } catch {\r\n locale = \"en-us\";\r\n }\r\n } else {\r\n return isoDate;\r\n }\r\n\r\n if (!!timestamp) {\r\n const date = new Date(timestamp);\r\n const year = date.getFullYear();\r\n const month = (\"0\" + (date.getMonth() + 1)).substr(-2);\r\n const day = (\"0\" + date.getDate()).substr(-2);\r\n const time = date.toLocaleTimeString([locale, \"en-us\"], {\r\n timeZone: timezone,\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n });\r\n return `${year}/${month}/${day} ${time}`;\r\n } else {\r\n return isoDate;\r\n }\r\n }\r\n\r\n isValidSize(size: number) {\r\n // https://stackoverflow.com/questions/2365100/converting-bytes-to-megabytes\r\n return size / 1024 / 1024 <= this.maxSize;\r\n }\r\n\r\n isDuplicate(name: string) {\r\n return this.fileList.find((f) => f.file_name === name);\r\n }\r\n\r\n isEmpty() {\r\n return !this.fileList.length && !this.inProgressList.length && !this.errorList.length;\r\n }\r\n\r\n get isDisabled() {\r\n const isMax = !!this.maxFiles && this.fileList.length >= this.maxFiles;\r\n\r\n if (!this.notif) {\r\n if (isMax) {\r\n const errMessage = 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 this.notif = { id: 1, message: errMessage };\r\n if (this.liveRegion) {\r\n this.liveRegion.innerHTML = errMessage;\r\n }\r\n } else {\r\n this.notif = null;\r\n }\r\n } else if (this.notif.id === 1) {\r\n // to make sure SR don't repeat the error, don't reset it if it already is showing\r\n // just dismiss it if isMax is not true anymore\r\n if (!isMax) {\r\n this.notif = null;\r\n }\r\n // finally do nothing if error 2 is showing (special case when user selects too many files)\r\n }\r\n // disable if is the uploader is maxed out or if something is uploading\r\n return isMax || this.numFilesInProgress! > 0;\r\n }\r\n\r\n purgeProgressList(item: FileInfo) {\r\n // If a file is retrieved from the server because it was just uploaded\r\n // it should be removed from inProgressList\r\n this.inProgressList = this.inProgressList.filter((i) => i.progress !== 100 && i.name !== item.file_name);\r\n }\r\n\r\n getExistingFiles() {\r\n getRequest(this.getPath)\r\n .then((reply: FileInfo[]) => {\r\n reply.map((item) => this.purgeProgressList(item));\r\n if (this.sortBy === \"name\") {\r\n reply.sort((a, b) => a.file_name.localeCompare(b.file_name));\r\n }\r\n this.fileList = reply;\r\n })\r\n .catch((errStatus) => {\r\n console.error(errStatus);\r\n });\r\n }\r\n\r\n clearErrors() {\r\n this.errorList = [];\r\n this.notif = null;\r\n }\r\n\r\n handleFiles(ev: Event) {\r\n const files = Array.from((ev.target! as HTMLInputElement).files!);\r\n const validTypes = this.fileTypes.split(\" \").join(\", \");\r\n\r\n if (!!this.maxFiles && this.fileList.length + files.length > this.maxFiles) {\r\n const errMessage = 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 this.notif = { id: 2, message: errMessage };\r\n if (this.liveRegion) {\r\n this.liveRegion.innerHTML = errMessage;\r\n }\r\n } else {\r\n // map to create inProgress items so they can be displayed immediately\r\n files &&\r\n files.map((file) => {\r\n if (!hasValidType(file, this.fileTypes)) {\r\n const error = {\r\n file_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 (!this.isValidSize(file.size)) {\r\n const error = {\r\n file_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.maxSize }\r\n ),\r\n };\r\n this.errorList.push(error);\r\n } else if (this.isDuplicate(file.name)) {\r\n const error = {\r\n file_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.inProgressList.push(file);\r\n }\r\n forceUpdate(this.el);\r\n });\r\n\r\n if (this.inProgressList.length > 0) {\r\n this.numFilesInProgress = this.inProgressList.length;\r\n\r\n // map over \"uploadable\" files for actual upload\r\n // this happens separately otherwise at each pass we'd have to wait for the requests to complete before displaying things\r\n this.inProgressList.map((file, i) => {\r\n this.uploadFile(file, i); // = input.files file\r\n });\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 uploadFile(file: File, i: number) {\r\n // get upload link\r\n getRequest(this.requestUploadPath + i.toString())\r\n .then(async (reply: AWSData) => {\r\n const assData = JSON.parse(this.associatedData!);\r\n const fileInfo: FileInfo = {\r\n ...assData,\r\n file_name: file.name,\r\n mime_type: file.type,\r\n file_path: reply.path,\r\n document_uuid: reply.guid,\r\n };\r\n\r\n // onProgress is passed as a callback to the ev listener inside putRequest (http service),\r\n // so we can't change component things directly => custom event to pass data to uploader component.\r\n const onProgress = (ev: ProgressEvent) => {\r\n const progress = ev.lengthComputable && ev.total !== 0 ? (ev.loaded / ev.total) * 100 : 0;\r\n const event = new CustomEvent(\"wmUploadProgress\", {\r\n detail: { file_name: file.name, progress },\r\n });\r\n\r\n this.el.dispatchEvent(event);\r\n };\r\n\r\n // upload to AWS s3 to url we just fetched\r\n await putRequest(reply.url, file, onProgress);\r\n\r\n // create the db entry\r\n await postRequest(this.uploadPath, fileInfo);\r\n\r\n // get files from server again\r\n this.getExistingFiles();\r\n })\r\n .catch((err) => {\r\n // do not show toast on error\r\n this.numFilesInProgress = null;\r\n // do not show in progress item on error\r\n this.inProgressList = [];\r\n this.notif = {\r\n id: 3,\r\n message: intl.formatMessage({\r\n id: \"global.genericError\",\r\n defaultMessage: \"An error occurred. Please try again.\",\r\n }),\r\n };\r\n console.error(err);\r\n });\r\n }\r\n\r\n downloadFile(uuid: string, path: string) {\r\n this.clearErrors();\r\n\r\n // POST request to get temporary download link\r\n const payload = {\r\n file_path: path,\r\n file_uuid: uuid,\r\n };\r\n postRequest(this.requestDownloadPath, payload)\r\n .then((reply: { url: string }) => {\r\n // we got the download link, now download the file\r\n window.location.assign(reply.url);\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n });\r\n }\r\n\r\n deleteFile(file: FileInfo) {\r\n this.clearErrors();\r\n\r\n this.snackbar.push({\r\n message: intl.formatMessage(\r\n {\r\n id: \"uploader.fileDeleted\",\r\n defaultMessage: \"{fileName} was deleted.\",\r\n },\r\n { fileName: file.file_name }\r\n ),\r\n id: file.uuid!,\r\n link: \"\",\r\n });\r\n\r\n // rm file from list immediately.\r\n this.fileList = this.fileList.filter((i) => i.uuid !== file.uuid);\r\n\r\n deleteRequest(`${this.deletePath}/${file.uuid}`).catch((err) => {\r\n this.notif = {\r\n id: 4,\r\n message: intl.formatMessage(\r\n {\r\n id: \"uploader.fileNotDeleted\",\r\n defaultMessage: \"{fileName} could not be deleted.\",\r\n },\r\n { fileName: file.file_name }\r\n ),\r\n };\r\n this.getExistingFiles();\r\n console.error(err);\r\n });\r\n }\r\n\r\n componentWillLoad() {\r\n if (!this.getPath) {\r\n throw new Error(\"wm-network-uploader: get-path is a required prop\");\r\n }\r\n if (!this.requestUploadPath) {\r\n throw new Error(\"wm-network-uploader: request-upload-path is a required prop\");\r\n }\r\n if (!this.uploadPath) {\r\n throw new Error(\"wm-network-uploader: upload-path is a required prop\");\r\n }\r\n if (!this.requestDownloadPath) {\r\n throw new Error(\"wm-network-uploader: request-download-path is a required prop\");\r\n }\r\n if (!this.deletePath) {\r\n throw new Error(\"wm-network-uploader: delete-path is a required prop\");\r\n }\r\n if (!this.buttonText) {\r\n throw new Error(\"wm-network-uploader: button-text is a required prop\");\r\n }\r\n if (!this.emptyStateText) {\r\n throw new Error(\"wm-network-uploader: empty-state-text is a required prop\");\r\n }\r\n if (!this.associatedData) {\r\n throw new Error(\"wm-network-uploader: associated-data is a required prop\");\r\n }\r\n\r\n this.setMaxSize();\r\n this.clearErrors();\r\n }\r\n\r\n componentDidLoad() {\r\n this.getExistingFiles();\r\n\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 // this is not pretty duplicating a intl message + the logic of isDisabled,\r\n // but not worth a bigger refactor since this is only until we get the UX for disabled elements and refactor all interactive els.\r\n ev.preventDefault();\r\n if (this.liveRegion) {\r\n const isMax = !!this.maxFiles && this.fileList.length >= this.maxFiles;\r\n let errMsg: string = \"\";\r\n if (this.numFilesInProgress! > 0) {\r\n errMsg = 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 } else if (isMax) {\r\n errMsg = 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 if (errMsg) {\r\n // clear and set again to re-announce if button is clicked several times\r\n // (can't be done inside setTimeout because of scope, hence the promise)\r\n this.liveRegion.innerHTML = \"\";\r\n new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(\"\");\r\n }, 500);\r\n }).then(() => (this.liveRegion!.innerHTML = errMsg));\r\n }\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 renderNotif() {\r\n return this.notif ? <span class=\"notif\">{this.notif.message}</span> : \"\";\r\n }\r\n\r\n renderUploadButton(classes: string) {\r\n return (\r\n <div class=\"notif-wrapper\">\r\n <input\r\n name={this.inputId}\r\n id={this.inputId}\r\n class=\"sr-only\"\r\n type=\"file\"\r\n multiple\r\n onClick={(ev) => this.uploadButtonOnClick(ev)}\r\n onChange={(e) => this.handleFiles(e)}\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.renderNotif()}\r\n </div>\r\n );\r\n }\r\n\r\n renderWithItems() {\r\n return (\r\n <div>\r\n <div class=\"header\">\r\n <div class=\"descr\">\r\n <slot />\r\n </div>\r\n {this.renderUploadButton(this.isDisabled ? \"disabled\" : \"\")}\r\n </div>\r\n {this.renderErrorList()}\r\n {this.renderInProgressList()}\r\n {this.renderFileList()}\r\n </div>\r\n );\r\n }\r\n\r\n renderEmptyState() {\r\n return (\r\n <div>\r\n <div class=\"header\">\r\n <div class=\"descr\">\r\n <slot />\r\n </div>\r\n </div>\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 </div>\r\n </div>\r\n );\r\n }\r\n\r\n renderErrorList() {\r\n if (!!this.errorList.length) {\r\n if (this.liveRegion) {\r\n let srMessage = this.errorList.reduce(function (acc, err) {\r\n return acc + `${err.file_name}: ${err.message} `;\r\n }, \"\");\r\n this.liveRegion.innerHTML = srMessage;\r\n }\r\n\r\n return (\r\n <ul class=\"error-list\">\r\n {this.errorList.map((err) => (\r\n <li>\r\n <div class=\"file --error\">\r\n <div class=\"file-info\">\r\n <span class=\"filename\">{err.file_name}</span>\r\n </div>\r\n </div>\r\n <div class=\"error-message\">{err.message}</div>\r\n </li>\r\n ))}\r\n </ul>\r\n );\r\n }\r\n }\r\n\r\n renderInProgressList() {\r\n return (\r\n <ul class=\"inprogress-list\">\r\n {this.inProgressList.map((item) => {\r\n return (\r\n <li>\r\n <div class=\"file --progress\">\r\n <div\r\n class=\"progress\"\r\n style={{\r\n background: `linear-gradient(to right, rgba(67, 126, 142, 1) ${item.progress}%, transparent ${item.progress}%)`,\r\n }}\r\n ></div>\r\n <div class=\"file-info\">\r\n <span class=\"filename\">\r\n {item.name} <span class=\"sr-only\">uploading</span>\r\n </span>\r\n </div>\r\n </div>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n }\r\n\r\n renderFile(item: FileInfo) {\r\n return (\r\n <li>\r\n <div class=\"file --saved\">\r\n <div class=\"file-info\">\r\n <span class=\"filename\">{item.file_name}</span>\r\n <span class=\"filedate\">\r\n {this.formatDate(item.updated_at!, intl.locale, Intl.DateTimeFormat().resolvedOptions().timeZone)}\r\n </span>\r\n </div>\r\n <div class=\"file-controls\">\r\n <wm-button\r\n class=\"download-button\"\r\n button-type=\"icononly\"\r\n tooltip=\"download\"\r\n label-for-identical-buttons={`download ${item.file_name}`}\r\n icon=\"f1da\"\r\n onClick={() => this.downloadFile(item.uuid!, item.file_path!)}\r\n ></wm-button>\r\n <wm-button\r\n class=\"delete-button\"\r\n button-type=\"icononly\"\r\n tooltip=\"remove\"\r\n label-for-identical-buttons={`remove ${item.file_name}`}\r\n icon=\"f1c0\"\r\n onClick={() => this.deleteFile(item)}\r\n ></wm-button>\r\n </div>\r\n </div>\r\n </li>\r\n );\r\n }\r\n\r\n renderFileList() {\r\n return <ul class=\"file-list\">{this.fileList.map((item) => this.renderFile(item))}</ul>;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.isEmpty() ? this.renderEmptyState() : this.renderWithItems()}\r\n <wm-snackbar notifications={JSON.stringify(this.snackbar)}></wm-snackbar>\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 ></div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"mappings":"gwDAAA,IAAMA,qBAAuB,m9sB,IC6ChBC,gBAAe,W,8HA+BlBC,KAAAC,QAAUC,a,eA3BY,M,cAEE,G,oBACY,G,eACV,G,mCAEE,G,0SAcR,kE,aACe,I,oCAET,M,CAOlCC,EAAAC,UAAAC,gBAAA,WACEL,KAAKM,UAAY,I,EAInBH,EAAAC,UAAAG,iBAAA,WACEP,KAAKM,UAAY,K,EAInBH,EAAAC,UAAAI,qBAAA,SAAqBC,GAArB,IAAAC,EAAAV,KACEA,KAAKW,eAAeC,KAAI,SAACC,GACvB,GAAIA,EAAEC,OAASL,EAAGM,OAAOC,UAAW,CAClCH,EAAEI,SAAWR,EAAGM,OAAOE,SACvBC,YAAYR,EAAKS,G,KAIrB,GAAIV,EAAGM,OAAOE,WAAa,IAAK,CAI9BjB,KAAKoB,oBAAuB,C,CAI9B,IAAKpB,KAAKqB,YAAcrB,KAAKoB,mBAAoB,CAC/C,IAAME,EAAQtB,KAAKoB,mBACnBpB,KAAKqB,WAAaE,aAAY,WAC5B,IAAMC,EAAYd,EAAKC,eAAec,QAAO,SAACC,EAAKC,GAAI,OAAMA,EAAKV,SAAWS,EAAMC,EAAKV,SAAWS,CAA5C,GAAkD,GACzG,GAAIhB,EAAKkB,WAAY,CACnBlB,EAAKkB,WAAWC,UAAYC,KAAKC,cAC/B,CACEC,GAAI,0BACJC,eAAgB,kCAElB,CAAEC,WAAYC,KAAKC,MAAMZ,EAAYF,I,IAGxC,I,GAKPnB,EAAAC,UAAAiC,oBAAA,SAAoB5B,GAClBT,KAAKsC,SAAWtC,KAAKsC,SAASC,QAAO,SAACC,GAAM,OAAAA,EAAER,KAAOvB,EAAGM,OAAOiB,EAAnB,G,EAI9C7B,EAAAC,UAAAqC,WAAA,WAEEzC,KAAK0C,QAAU1C,KAAK0C,QAAU,IAAM,IAAM1C,KAAK0C,O,EAIjDvC,EAAAC,UAAAuC,oBAAA,SAAoBC,EAAgBC,GAApC,IAAAnC,EAAAV,KACE,GAAI6C,EAAS,GAAKD,IAAW,EAAG,CAC9BE,YAAW,WACTpC,EAAKqC,MAAQ,I,GACZ,GAAK,KACR,IAAMC,EAAUlB,KAAKC,cAAc,CACjCC,GAAI,6BACJC,eAAgB,uBAElBjC,KAAK+C,MAAQ,CAAEf,GAAI,EAAGgB,QAAOA,GAC7B,GAAIhD,KAAK4B,WAAY,CACnB5B,KAAK4B,WAAWC,UAAYmB,C,CAE9BhD,KAAKoB,mBAAqB,KAC1B6B,cAAcjD,KAAKqB,YACnBH,YAAYlB,KAAKmB,G,MACZ,GAAIyB,EAAS,GAAKA,GAAUC,EAAQ,CACzC,IAAMG,EAAUlB,KAAKC,cACnB,CACEC,GAAI,0BACJC,eAAgB,mEAElB,CAAEiB,IAAKN,IAET5C,KAAK+C,MAAQ,CAAEf,GAAI,EAAGgB,QAAOA,GAC7B,GAAIhD,KAAK4B,WAAY,CACnB5B,KAAK4B,WAAWC,UAAYmB,C,CAE9B9B,YAAYlB,KAAKmB,G,GAKrBhB,EAAAC,UAAA+C,kBAAA,WACEnD,KAAKoD,8BAA8BC,KAAKrD,KAAKsD,S,EAG/CnD,EAAAC,UAAAmD,WAAA,SAAWC,EAAiBC,EAAgBC,GAC1C,IAAMC,EAAYC,KAAKC,MAAML,GAC7B,GAAIC,EAAOK,MAAM,gCAAiC,CAEhD,IAEEC,KAAKC,oBAAoBP,E,CACzB,MAAAQ,GACAR,EAAS,O,MAEN,CACL,OAAOD,C,CAGT,KAAMG,EAAW,CACf,IAAMO,EAAO,IAAIN,KAAKD,GACtB,IAAMQ,EAAOD,EAAKE,cAClB,IAAMC,GAAS,KAAOH,EAAKI,WAAa,IAAIC,QAAQ,GACpD,IAAMC,GAAO,IAAMN,EAAKO,WAAWF,QAAQ,GAC3C,IAAMG,EAAOR,EAAKS,mBAAmB,CAAClB,EAAQ,SAAU,CACtDmB,SAAUlB,EACVmB,KAAM,UACNC,OAAQ,YAEV,MAAO,GAAAC,OAAGZ,EAAI,KAAAY,OAAIV,EAAK,KAAAU,OAAIP,EAAG,KAAAO,OAAIL,E,KAC7B,CACL,OAAOlB,C,GAIXrD,EAAAC,UAAA4E,YAAA,SAAYC,GAEV,OAAOA,EAAO,KAAO,MAAQjF,KAAK0C,O,EAGpCvC,EAAAC,UAAA8E,YAAA,SAAYpE,GACV,OAAOd,KAAKsD,SAAS6B,MAAK,SAACC,GAAM,OAAAA,EAAEpE,YAAcF,CAAhB,G,EAGnCX,EAAAC,UAAAiF,QAAA,WACE,OAAQrF,KAAKsD,SAASgC,SAAWtF,KAAKW,eAAe2E,SAAWtF,KAAKuF,UAAUD,M,EAGjFE,OAAAC,eAAItF,EAAAC,UAAA,aAAU,C,IAAd,WACE,IAAMsF,IAAU1F,KAAK2F,UAAY3F,KAAKsD,SAASgC,QAAUtF,KAAK2F,SAE9D,IAAK3F,KAAK+C,MAAO,CACf,GAAI2C,EAAO,CACT,IAAME,EAAa9D,KAAKC,cAAc,CACpCC,GAAI,mCACJC,eAAgB,sFAChB4D,YAAa,2DAEf7F,KAAK+C,MAAQ,CAAEf,GAAI,EAAGgB,QAAS4C,GAC/B,GAAI5F,KAAK4B,WAAY,CACnB5B,KAAK4B,WAAWC,UAAY+D,C,MAEzB,CACL5F,KAAK+C,MAAQ,I,OAEV,GAAI/C,KAAK+C,MAAMf,KAAO,EAAG,CAG9B,IAAK0D,EAAO,CACV1F,KAAK+C,MAAQ,I,EAKjB,OAAO2C,GAAS1F,KAAKoB,mBAAsB,C,uCAG7CjB,EAAAC,UAAA0F,kBAAA,SAAkBnE,GAGhB3B,KAAKW,eAAiBX,KAAKW,eAAe4B,QAAO,SAAC1B,GAAM,OAAAA,EAAEI,WAAa,KAAOJ,EAAEC,OAASa,EAAKX,SAAtC,G,EAG1Db,EAAAC,UAAA2F,iBAAA,eAAArF,EAAAV,KACEgG,WAAWhG,KAAKiG,SACbC,MAAK,SAACC,GACLA,EAAMvF,KAAI,SAACe,GAAS,OAAAjB,EAAKoF,kBAAkBnE,EAAvB,IACpB,GAAIjB,EAAK0F,SAAW,OAAQ,CAC1BD,EAAME,MAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEtF,UAAUwF,cAAcD,EAAEvF,UAA5B,G,CAEvBN,EAAK4C,SAAW6C,C,IAEjBM,OAAM,SAACC,GACNC,QAAQC,MAAMF,E,KAIpBvG,EAAAC,UAAAyG,YAAA,WACE7G,KAAKuF,UAAY,GACjBvF,KAAK+C,MAAQ,I,EAGf5C,EAAAC,UAAA0G,YAAA,SAAYrG,GAAZ,IAAAC,EAAAV,KACE,IAAM+G,EAAQC,MAAMC,KAAMxG,EAAGyG,OAA6BH,OAC1D,IAAMI,EAAanH,KAAKoH,UAAUC,MAAM,KAAKC,KAAK,MAElD,KAAMtH,KAAK2F,UAAY3F,KAAKsD,SAASgC,OAASyB,EAAMzB,OAAStF,KAAK2F,SAAU,CAC1E,IAAMC,EAAa9D,KAAKC,cAAc,CACpCC,GAAI,mCACJC,eAAgB,sFAChB4D,YAAa,2DAEf7F,KAAK+C,MAAQ,CAAEf,GAAI,EAAGgB,QAAS4C,GAC/B,GAAI5F,KAAK4B,WAAY,CACnB5B,KAAK4B,WAAWC,UAAY+D,C,MAEzB,CAELmB,GACEA,EAAMnG,KAAI,SAAC2G,GACT,IAAKC,aAAaD,EAAM7G,EAAK0G,WAAY,CACvC,IAAMR,EAAQ,CACZ5F,UAAWuG,EAAKzG,KAChBkC,QAASlB,KAAKC,cACZ,CACEC,GAAI,2BACJC,eAAgB,0DAElB,CAAEkF,WAAUA,KAGhBzG,EAAK6E,UAAUkC,KAAKb,E,MACf,IAAKlG,EAAKsE,YAAYuC,EAAKtC,MAAO,CACvC,IAAM2B,EAAQ,CACZ5F,UAAWuG,EAAKzG,KAChBkC,QAASlB,KAAKC,cACZ,CACEC,GAAI,wBACJC,eAAgB,iEAElB,CAAEgD,KAAMvE,EAAKgC,WAGjBhC,EAAK6E,UAAUkC,KAAKb,E,MACf,GAAIlG,EAAKwE,YAAYqC,EAAKzG,MAAO,CACtC,IAAM8F,EAAQ,CACZ5F,UAAWuG,EAAKzG,KAChBkC,QAASlB,KAAKC,cAAc,CAC1BC,GAAI,yBACJC,eAAgB,2CAGpBvB,EAAK6E,UAAUkC,KAAKb,E,KACf,CACLlG,EAAKC,eAAe8G,KAAKF,E,CAE3BrG,YAAYR,EAAKS,G,IAGrB,GAAInB,KAAKW,eAAe2E,OAAS,EAAG,CAClCtF,KAAKoB,mBAAqBpB,KAAKW,eAAe2E,OAI9CtF,KAAKW,eAAeC,KAAI,SAAC2G,EAAM1G,GAC7BH,EAAKgH,WAAWH,EAAM1G,E,KAI3BJ,EAAGyG,OAA6BS,MAAQ,E,EAG3CxH,EAAAC,UAAAsH,WAAA,SAAWH,EAAY1G,GAAvB,IAAAH,EAAAV,KAEEgG,WAAWhG,KAAK4H,kBAAoB/G,EAAEgH,YACnC3B,MAAK,SAAOC,GAAc,OAAA2B,UAAApH,OAAA,qB,iFACnBqH,EAAUC,KAAKnE,MAAM7D,KAAKiI,gBAC1BC,EAAQ1C,OAAA2C,OAAA3C,OAAA2C,OAAA,GACTJ,GAAO,CACV/G,UAAWuG,EAAKzG,KAChBsH,UAAWb,EAAKc,KAChBC,UAAWnC,EAAMoC,KACjBC,cAAerC,EAAMsC,OAKjBC,EAAa,SAACjI,GAClB,IAAMQ,EAAWR,EAAGkI,kBAAoBlI,EAAGmI,QAAU,EAAKnI,EAAGoI,OAASpI,EAAGmI,MAAS,IAAM,EACxF,IAAME,EAAQ,IAAIC,YAAY,mBAAoB,CAChDhI,OAAQ,CAAEC,UAAWuG,EAAKzG,KAAMG,SAAQA,KAG1CP,EAAKS,GAAG6H,cAAcF,E,EAIxB,SAAMG,WAAW9C,EAAM+C,IAAK3B,EAAMmB,I,OAAlCS,EAAAC,OAGA,SAAMC,YAAYrJ,KAAKsJ,WAAYpB,I,OAAnCiB,EAAAC,OAGApJ,KAAK+F,mB,oBAENU,OAAM,SAAC8C,GAEN7I,EAAKU,mBAAqB,KAE1BV,EAAKC,eAAiB,GACtBD,EAAKqC,MAAQ,CACXf,GAAI,EACJgB,QAASlB,KAAKC,cAAc,CAC1BC,GAAI,sBACJC,eAAgB,0CAGpB0E,QAAQC,MAAM2C,E,KAIpBpJ,EAAAC,UAAAoJ,aAAA,SAAaC,EAAclB,GACzBvI,KAAK6G,cAGL,IAAM6C,EAAU,CACdpB,UAAWC,EACXoB,UAAWF,GAEbJ,YAAYrJ,KAAK4J,oBAAqBF,GACnCxD,MAAK,SAACC,GAEL0D,OAAOC,SAAS3B,OAAOhC,EAAM+C,I,IAE9BzC,OAAM,SAAC8C,GACN5C,QAAQC,MAAM2C,E,KAIpBpJ,EAAAC,UAAA2J,WAAA,SAAWxC,GAAX,IAAA7G,EAAAV,KACEA,KAAK6G,cAEL7G,KAAKsC,SAASmF,KAAK,CACjBzE,QAASlB,KAAKC,cACZ,CACEC,GAAI,uBACJC,eAAgB,2BAElB,CAAE+H,SAAUzC,EAAKvG,YAEnBgB,GAAIuF,EAAKkC,KACTQ,KAAM,KAIRjK,KAAKsD,SAAWtD,KAAKsD,SAASf,QAAO,SAAC1B,GAAM,OAAAA,EAAE4I,OAASlC,EAAKkC,IAAhB,IAE5CS,cAAc,GAAAnF,OAAG/E,KAAKmK,WAAU,KAAApF,OAAIwC,EAAKkC,OAAQhD,OAAM,SAAC8C,GACtD7I,EAAKqC,MAAQ,CACXf,GAAI,EACJgB,QAASlB,KAAKC,cACZ,CACEC,GAAI,0BACJC,eAAgB,oCAElB,CAAE+H,SAAUzC,EAAKvG,aAGrBN,EAAKqF,mBACLY,QAAQC,MAAM2C,E,KAIlBpJ,EAAAC,UAAAgK,kBAAA,WACE,IAAKpK,KAAKiG,QAAS,CACjB,MAAM,IAAIoE,MAAM,mD,CAElB,IAAKrK,KAAK4H,kBAAmB,CAC3B,MAAM,IAAIyC,MAAM,8D,CAElB,IAAKrK,KAAKsJ,WAAY,CACpB,MAAM,IAAIe,MAAM,sD,CAElB,IAAKrK,KAAK4J,oBAAqB,CAC7B,MAAM,IAAIS,MAAM,gE,CAElB,IAAKrK,KAAKmK,WAAY,CACpB,MAAM,IAAIE,MAAM,sD,CAElB,IAAKrK,KAAKsK,WAAY,CACpB,MAAM,IAAID,MAAM,sD,CAElB,IAAKrK,KAAKuK,eAAgB,CACxB,MAAM,IAAIF,MAAM,2D,CAElB,IAAKrK,KAAKiI,eAAgB,CACxB,MAAM,IAAIoC,MAAM,0D,CAGlBrK,KAAKyC,aACLzC,KAAK6G,a,EAGP1G,EAAAC,UAAAoK,iBAAA,WACExK,KAAK+F,mBAEL,GAAI0E,SAASC,KAAKC,UAAUC,SAAS,wBAAyB,CAC5D5K,KAAKK,iB,GAITF,EAAAC,UAAAyK,oBAAA,SAAoBpK,GAApB,IAAAC,EAAAV,KACE,GAAIA,KAAK8K,WAAY,CASnBrK,EAAGsK,iBACH,GAAI/K,KAAK4B,WAAY,CACnB,IAAM8D,IAAU1F,KAAK2F,UAAY3F,KAAKsD,SAASgC,QAAUtF,KAAK2F,SAC9D,IAAIqF,EAAiB,GACrB,GAAIhL,KAAKoB,mBAAsB,EAAG,CAChC4J,EAASlJ,KAAKC,cAAc,CAC1BC,GAAI,wBACJC,eAAgB,yEAChB4D,YAAa,mC,MAEV,GAAIH,EAAO,CAChBsF,EAASlJ,KAAKC,cAAc,CAC1BC,GAAI,mCACJC,eAAgB,sFAChB4D,YAAa,0D,CAIjB,GAAImF,EAAQ,CAGVhL,KAAK4B,WAAWC,UAAY,GAC5B,IAAIoJ,SAAQ,SAACC,GACXpI,YAAW,WACToI,EAAQ,G,GACP,I,IACFhF,MAAK,kBAAOxF,EAAKkB,WAAYC,UAAYmJ,CAApC,G,OAGP,CACLhL,KAAK6G,a,GAIT1G,EAAAC,UAAA+K,gBAAA,WACE,OACEC,EAAA,OAAKC,MAAM,cAAcC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,aACtDJ,EAAA,QACEK,UAAU,8CACVC,KAAK,UACLC,EAAE,mkB,EAMVxL,EAAAC,UAAAwL,WAAA,WAEE,IAAMC,EAAS7L,KAAK8L,MAAQ9L,KAAK8L,OAAS,OAC1C,OACE9L,KAAK8L,MACHV,EAAA,QAAMC,MAAO,OAAAtG,OAAO8G,EAAS,SAAW,KAAOE,OAAOC,cAAcC,SAAS,KAAAlH,OAAK/E,KAAK8L,Q,EAK7F3L,EAAAC,UAAA8L,YAAA,WACE,OAAOlM,KAAK+C,MAAQqI,EAAA,QAAMC,MAAM,SAASrL,KAAK+C,MAAMC,SAAkB,E,EAGxE7C,EAAAC,UAAA+L,mBAAA,SAAmBC,GAAnB,IAAA1L,EAAAV,KACE,OACEoL,EAAA,OAAKC,MAAM,iBACTD,EAAA,SACEtK,KAAMd,KAAKC,QACX+B,GAAIhC,KAAKC,QACToL,MAAM,UACNhD,KAAK,OACLgE,SAAQ,KACRC,QAAS,SAAC7L,GAAO,OAAAC,EAAKmK,oBAAoBpK,EAAzB,EACjB8L,SAAU,SAACC,GAAM,OAAA9L,EAAKoG,YAAY0F,EAAjB,IAEnBpB,EAAA,SAAOqB,QAASzM,KAAKC,QAASoL,MAAO,aAAAtG,OAAaqH,GAAOrH,OAAG/E,KAAKM,UAAY,mBAAqB,KAC/FN,KAAK4L,aACL5L,KAAKsK,YAEPtK,KAAKkM,c,EAKZ/L,EAAAC,UAAAsM,gBAAA,WACE,OACEtB,EAAA,WACEA,EAAA,OAAKC,MAAM,UACTD,EAAA,OAAKC,MAAM,SACTD,EAAA,cAEDpL,KAAKmM,mBAAmBnM,KAAK8K,WAAa,WAAa,KAEzD9K,KAAK2M,kBACL3M,KAAK4M,uBACL5M,KAAK6M,iB,EAKZ1M,EAAAC,UAAA0M,iBAAA,WACE,OACE1B,EAAA,WACEA,EAAA,OAAKC,MAAM,UACTD,EAAA,OAAKC,MAAM,SACTD,EAAA,eAGJA,EAAA,OAAKC,MAAM,eACRrL,KAAKmL,kBACNC,EAAA,OAAKC,MAAM,iBAAiBrL,KAAKuK,gBAChCvK,KAAKmM,mBAAmB,0B,EAMjChM,EAAAC,UAAAuM,gBAAA,WACE,KAAM3M,KAAKuF,UAAUD,OAAQ,CAC3B,GAAItF,KAAK4B,WAAY,CACnB,IAAImL,EAAY/M,KAAKuF,UAAU9D,QAAO,SAAUuL,EAAKzD,GACnD,OAAOyD,EAAM,GAAAjI,OAAGwE,EAAIvI,UAAS,MAAA+D,OAAKwE,EAAIvG,QAAO,I,GAC5C,IACHhD,KAAK4B,WAAWC,UAAYkL,C,CAG9B,OACE3B,EAAA,MAAIC,MAAM,cACPrL,KAAKuF,UAAU3E,KAAI,SAAC2I,GAAG,OACtB6B,EAAA,UACEA,EAAA,OAAKC,MAAM,gBACTD,EAAA,OAAKC,MAAM,aACTD,EAAA,QAAMC,MAAM,YAAY9B,EAAIvI,aAGhCoK,EAAA,OAAKC,MAAM,iBAAiB9B,EAAIvG,SAPZ,I,GAehC7C,EAAAC,UAAAwM,qBAAA,WACE,OACExB,EAAA,MAAIC,MAAM,mBACPrL,KAAKW,eAAeC,KAAI,SAACe,GACxB,OACEyJ,EAAA,UACEA,EAAA,OAAKC,MAAM,mBACTD,EAAA,OACEC,MAAM,WACN4B,MAAO,CACLC,WAAY,mDAAAnI,OAAmDpD,EAAKV,SAAQ,mBAAA8D,OAAkBpD,EAAKV,SAAQ,SAG/GmK,EAAA,OAAKC,MAAM,aACTD,EAAA,QAAMC,MAAM,YACT1J,EAAKb,KAAI,IAAEsK,EAAA,QAAMC,MAAM,WAAS,gB,MAWnDlL,EAAAC,UAAA+M,WAAA,SAAWxL,GAAX,IAAAjB,EAAAV,KACE,OACEoL,EAAA,UACEA,EAAA,OAAKC,MAAM,gBACTD,EAAA,OAAKC,MAAM,aACTD,EAAA,QAAMC,MAAM,YAAY1J,EAAKX,WAC7BoK,EAAA,QAAMC,MAAM,YACTrL,KAAKuD,WAAW5B,EAAKyL,WAAatL,KAAK2B,OAAQM,KAAKsJ,iBAAiBC,kBAAkB1I,YAG5FwG,EAAA,OAAKC,MAAM,iBACTD,EAAA,aACEC,MAAM,kBAAiB,cACX,WACZkC,QAAQ,WAAU,8BACW,YAAAxI,OAAYpD,EAAKX,WAC9C8K,KAAK,OACLQ,QAAS,WAAM,OAAA5L,EAAK8I,aAAa7H,EAAK8H,KAAO9H,EAAK2G,UAAnC,IAEjB8C,EAAA,aACEC,MAAM,gBAAe,cACT,WACZkC,QAAQ,SAAQ,8BACa,UAAAxI,OAAUpD,EAAKX,WAC5C8K,KAAK,OACLQ,QAAS,WAAM,OAAA5L,EAAKqJ,WAAWpI,EAAhB,M,EAQ3BxB,EAAAC,UAAAyM,eAAA,eAAAnM,EAAAV,KACE,OAAOoL,EAAA,MAAIC,MAAM,aAAarL,KAAKsD,SAAS1C,KAAI,SAACe,GAAS,OAAAjB,EAAKyM,WAAWxL,EAAhB,I,EAG5DxB,EAAAC,UAAAoN,OAAA,eAAA9M,EAAAV,KACE,OACEoL,EAACqC,KAAI,KACFzN,KAAKqF,UAAYrF,KAAK8M,mBAAqB9M,KAAK0M,kBACjDtB,EAAA,eAAasC,cAAe1F,KAAK2F,UAAU3N,KAAKsC,YAChD8I,EAAA,OACEwC,IAAK,SAACzM,GAAE,OAAMT,EAAKkB,WAAaT,CAAxB,EACRkK,MAAM,sBAAqB,YACjB,Y,cACE,S,kUA9oBM,G"}
|
|
1
|
+
{"version":3,"names":["wmNetworkUploaderCss","NetworkUploader","this","inputId","generateId","class_1","prototype","toggleTabbingOn","isTabbing","toggleTabbingOff","handleUploadProgress","ev","_this","inProgressList","map","i","name","detail","file_name","progress","forceUpdate","el","numFilesInProgress","srProgress","total_1","setInterval","aggregate","reduce","avg","item","liveRegion","innerHTML","intl","formatMessage","id","defaultMessage","percentage","Math","floor","handleFinishedSnack","snackbar","filter","n","setMaxSize","maxSize","uploadNotifications","newNum","oldNum","setTimeout","notif","message","clearInterval","num","emitFileListEvent","wmNetworkUploaderFilesChanged","emit","fileList","formatDate","isoDate","locale","timezone","timestamp","Date","parse","match","Intl","getCanonicalLocales","_a","date","year","getFullYear","month","getMonth","substr","day","getDate","time","toLocaleTimeString","timeZone","hour","minute","concat","isValidSize","size","isDuplicate","find","f","isEmpty","length","errorList","Object","defineProperty","isMax","maxFiles","errMessage","description","purgeProgressList","getExistingFiles","getRequest","getPath","then","reply","sortBy","sort","a","b","localeCompare","catch","errStatus","console","error","clearErrors","handleFiles","files","Array","from","target","validTypes","fileTypes","split","join","file","hasValidType","push","uploadFile","value","requestUploadPath","toString","__awaiter","assData","JSON","associatedData","fileInfo","assign","mime_type","type","file_path","path","document_uuid","guid","onProgress","lengthComputable","total","loaded","event","CustomEvent","dispatchEvent","putRequest","url","_b","sent","postRequest","uploadPath","err","globalMessages","genericError","downloadFile","uuid","payload","file_uuid","requestDownloadPath","window","location","deleteFile","fileName","link","deleteRequest","deletePath","componentWillLoad","Error","buttonText","emptyStateText","componentDidLoad","document","body","classList","contains","uploadButtonOnClick","isDisabled","preventDefault","errMsg_1","Promise","resolve","renderUploadSvg","h","class","width","height","viewBox","transform","fill","d","renderIcon","rotate","icon","String","fromCodePoint","parseInt","renderNotif","renderUploadButton","classes","multiple","onClick","onChange","e","htmlFor","renderWithItems","renderErrorList","renderInProgressList","renderFileList","renderEmptyState","srMessage","acc","style","background","renderFile","updated_at","DateTimeFormat","resolvedOptions","tooltip","render","Host","notifications","stringify","ref"],"sources":["src/components/wm-uploader/wm-network-uploader/wm-network-uploader.scss?tag=wm-network-uploader&encapsulation=shadow","src/components/wm-uploader/wm-network-uploader/wm-network-uploader.tsx"],"sourcesContent":[":host,\nwm-network-uploader {\n width: 100%;\n position: relative;\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-network-uploader * {\n box-sizing: border-box;\n}\n\n.sr-only {\n @include srOnly;\n}\n\n.header {\n position: relative;\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n\n .notif-wrapper {\n align-items: flex-end;\n }\n}\n\n.notif-wrapper {\n display: flex;\n align-items: flex-start; // for .notif\n height: -moz-fit-content;\n height: fit-content;\n flex-direction: column; // for.notif\n align-items: center; // for.notif\n .notif {\n font-size: 0.875rem;\n font-style: italic;\n margin-top: rem-calc(4);\n }\n}\n\n@media (max-width: rem-calc(975)) {\n .descr {\n margin-bottom: rem-calc(8);\n }\n .notif-wrapper {\n margin-bottom: rem-calc(16);\n }\n .header {\n .notif-wrapper {\n align-items: flex-start;\n }\n }\n}\n\n.file-info {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n\n + .file-controls {\n flex: none;\n margin-left: rem-calc(16);\n }\n}\n\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: 1.5rem;\n margin-bottom: rem-calc(7);\n }\n\n .notif-wrapper {\n justify-content: center;\n\n .wm-button {\n // Removing the width inherit here to prevent a 100% width\n // from the notif-wrapper. Future proofing a day when\n // we might want a long notif to wrap.\n width: auto;\n }\n }\n}\n\nul {\n list-style: none;\n padding: 0;\n width: 100%;\n li {\n font-size: rem-calc(14);\n .file {\n @include border-radius(3px);\n position: relative; // for progress bar\n height: rem-calc(60);\n padding: rem-calc(8 20);\n background: $background;\n border: 1px solid rgb(107, 107, 107);\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n + .file {\n margin-top: rem-calc(20);\n }\n\n .filename {\n font-weight: 500;\n }\n\n .filedate {\n margin-left: rem-calc(60);\n font-weight: normal;\n font-style: italic;\n }\n\n wm-button + wm-button {\n margin-left: rem-calc(16);\n }\n }\n }\n\n &.file-list .file.--saved,\n &.inprogress-list .file {\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\n .progress {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n height: 8px;\n }\n\n &.error-list li {\n margin-bottom: rem-calc(20);\n color: $error-color;\n .file {\n border: 1px solid $error-color;\n background-color: #f5ebea;\n height: rem-calc(60);\n }\n }\n .error-message {\n padding-top: rem-calc(4);\n font-style: italic;\n }\n}\n","import { Component, Element, h, Host, Prop, State, Listen, Watch, Event, EventEmitter } from \"@stencil/core\";\nimport { forceUpdate } from \"@stencil/core\";\nimport { getRequest, postRequest, putRequest, deleteRequest } from \"../../../global/services/http-service\";\nimport { intl, generateId, hasValidType } from \"../../../global/functions\";\nimport { globalMessages } from \"../../../global/intl\";\n//\n// Web API File interface => for FileList on input element, sending to AWS\n// Custom FileInfo interface (below) => for our server\nexport interface FileInfo {\n file_name: string;\n file_path?: string;\n mime_type: string;\n updated_at?: string;\n\n uuid?: string; // AWS guid\n document_uuid?: string; // aka file uuid. how is that different from the uuid above?\n // organization_uuid: string; // aka node uuid\n}\n\ninterface FileInProgress extends File {\n progress?: number;\n}\n\ninterface ErrorInfo {\n file_name: string;\n message: string;\n}\n\ninterface AWSData {\n url: string;\n updated_at: string;\n path: string;\n guid: string;\n}\n\ninterface Notification {\n message: string;\n id: string;\n link: string;\n}\n\n@Component({\n tag: \"wm-network-uploader\",\n styleUrl: \"wm-network-uploader.scss\",\n shadow: true,\n})\nexport class NetworkUploader {\n @Element() el!: HTMLWmNetworkUploaderElement;\n private liveRegion?: HTMLDivElement;\n\n @State() isTabbing: boolean = false;\n\n @State() fileList: FileInfo[] = [];\n @State() inProgressList: FileInProgress[] = [];\n @State() errorList: ErrorInfo[] = []; // for errors on a particular file\n @State() notif?: { id: number; message: string } | null; // for global errors, e.g. user tries uploading too many files, and upload notifications\n @State() snackbar: Notification[] = [];\n @State() numFilesInProgress?: number | null; // null when not uploading != 0 (when all files are done uploading) != undefined (original state)\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\n @Prop() getPath!: string;\n @Prop() requestUploadPath!: string;\n @Prop() uploadPath!: string; // used for POST request (create db entry)\n @Prop() requestDownloadPath!: string;\n @Prop() deletePath!: string;\n\n @Prop() associatedData?: string;\n @Prop() buttonText!: 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({ mutable: true }) maxSize: number = 100; // in Mb\n @Prop() maxFiles?: number;\n @Prop() sortBy: \"name\" | \"date\" = \"date\"; // name is descending (a -> z), date is ascending (earlier -> later)\n\n @Event() wmNetworkUploaderFilesChanged!: EventEmitter<Object[]>;\n\n private inputId = generateId();\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.inProgressList.map((i) => {\n if (i.name === ev.detail.file_name) {\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.inProgressList.reduce((avg, item) => (item.progress ? avg + item.progress : avg), 0);\n if (this.liveRegion) {\n this.liveRegion.innerHTML = intl.formatMessage(\n {\n id: \"uploader.uploadProgress\",\n defaultMessage: \"Upload progress: {percentage}%\",\n },\n { percentage: Math.floor(aggregate / total) }\n );\n }\n }, 5000);\n }\n }\n\n @Listen(\"userFinishedSnack\")\n handleFinishedSnack(ev: CustomEvent) {\n this.snackbar = this.snackbar.filter((n) => n.id !== ev.detail.id);\n }\n\n @Watch(\"maxSize\")\n setMaxSize() {\n // Max size can't be set above 100Mb\n this.maxSize = this.maxSize > 100 ? 100 : this.maxSize;\n }\n\n @Watch(\"numFilesInProgress\")\n uploadNotifications(newNum: number, oldNum: number) {\n if (oldNum > 0 && newNum === 0) {\n setTimeout(() => {\n this.notif = null;\n }, 20 * 1000);\n const message = intl.formatMessage({\n id: \"uploader.finishedUploading\",\n defaultMessage: \"Finished uploading\",\n });\n this.notif = { id: 5, message };\n if (this.liveRegion) {\n this.liveRegion.innerHTML = message;\n }\n this.numFilesInProgress = null;\n clearInterval(this.srProgress);\n forceUpdate(this.el);\n } else if (newNum > 0 && newNum != oldNum) {\n const message = intl.formatMessage(\n {\n id: \"uploader.filesUploading\",\n defaultMessage: \"{num, plural, one {1 file uploading} other {# files uploading}}\",\n },\n { num: newNum }\n );\n this.notif = { id: 6, message };\n if (this.liveRegion) {\n this.liveRegion.innerHTML = message;\n }\n forceUpdate(this.el);\n }\n }\n\n @Watch(\"fileList\")\n emitFileListEvent() {\n this.wmNetworkUploaderFilesChanged.emit(this.fileList);\n }\n\n formatDate(isoDate: string, locale: string, timezone: string) {\n const timestamp = Date.parse(isoDate);\n if (locale.match(/^[a-zA-Z]*(-[a-zA-Z0-9]*)*$/g)) {\n // make sure locale is valid, otherwise set default locale\n try {\n //@ts-ignore\n Intl.getCanonicalLocales(locale);\n } catch {\n locale = \"en-us\";\n }\n } else {\n return isoDate;\n }\n\n if (!!timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = (\"0\" + (date.getMonth() + 1)).substr(-2);\n const day = (\"0\" + date.getDate()).substr(-2);\n const time = date.toLocaleTimeString([locale, \"en-us\"], {\n timeZone: timezone,\n hour: \"numeric\",\n minute: \"numeric\",\n });\n return `${year}/${month}/${day} ${time}`;\n } else {\n return isoDate;\n }\n }\n\n isValidSize(size: number) {\n // https://stackoverflow.com/questions/2365100/converting-bytes-to-megabytes\n return size / 1024 / 1024 <= this.maxSize;\n }\n\n isDuplicate(name: string) {\n return this.fileList.find((f) => f.file_name === name);\n }\n\n isEmpty() {\n return !this.fileList.length && !this.inProgressList.length && !this.errorList.length;\n }\n\n get isDisabled() {\n const isMax = !!this.maxFiles && this.fileList.length >= this.maxFiles;\n\n if (!this.notif) {\n if (isMax) {\n const errMessage = intl.formatMessage({\n id: \"uploader.fileUploadLimitExceeded\",\n defaultMessage: \"Upload unsuccessful because file selection would exceed the maximum number of files\",\n description: \"Message displayed when trying to upload too many files\",\n });\n this.notif = { id: 1, message: errMessage };\n if (this.liveRegion) {\n this.liveRegion.innerHTML = errMessage;\n }\n } else {\n this.notif = null;\n }\n } else if (this.notif.id === 1) {\n // to make sure SR don't repeat the error, don't reset it if it already is showing\n // just dismiss it if isMax is not true anymore\n if (!isMax) {\n this.notif = null;\n }\n // finally do nothing if error 2 is showing (special case when user selects too many files)\n }\n // disable if is the uploader is maxed out or if something is uploading\n return isMax || this.numFilesInProgress! > 0;\n }\n\n purgeProgressList(item: FileInfo) {\n // If a file is retrieved from the server because it was just uploaded\n // it should be removed from inProgressList\n this.inProgressList = this.inProgressList.filter((i) => i.progress !== 100 && i.name !== item.file_name);\n }\n\n getExistingFiles() {\n getRequest(this.getPath)\n .then((reply: FileInfo[]) => {\n reply.map((item) => this.purgeProgressList(item));\n if (this.sortBy === \"name\") {\n reply.sort((a, b) => a.file_name.localeCompare(b.file_name));\n }\n this.fileList = reply;\n })\n .catch((errStatus) => {\n console.error(errStatus);\n });\n }\n\n clearErrors() {\n this.errorList = [];\n this.notif = null;\n }\n\n handleFiles(ev: Event) {\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 const errMessage = intl.formatMessage({\n id: \"uploader.fileUploadLimitExceeded\",\n defaultMessage: \"Upload unsuccessful because file selection would exceed the maximum number of files\",\n description: \"Message displayed when trying to upload too many files\",\n });\n this.notif = { id: 2, message: errMessage };\n if (this.liveRegion) {\n this.liveRegion.innerHTML = errMessage;\n }\n } else {\n // map to create inProgress items so they can be displayed immediately\n files &&\n files.map((file) => {\n if (!hasValidType(file, this.fileTypes)) {\n const error = {\n file_name: file.name,\n message: intl.formatMessage(\n {\n id: \"uploader.invalidFileType\",\n defaultMessage: \"The file type is invalid. Accepted types: {validTypes}\",\n },\n { validTypes }\n ),\n };\n this.errorList.push(error);\n } else if (!this.isValidSize(file.size)) {\n const error = {\n file_name: file.name,\n message: intl.formatMessage(\n {\n id: \"uploader.fileTooLarge\",\n defaultMessage: \"The selected file is too large. Maximum file size is {size}Mb\",\n },\n { size: this.maxSize }\n ),\n };\n this.errorList.push(error);\n } else if (this.isDuplicate(file.name)) {\n const error = {\n file_name: file.name,\n message: intl.formatMessage({\n id: \"uploader.duplicateName\",\n defaultMessage: \"A file with this name already exists.\",\n }),\n };\n this.errorList.push(error);\n } else {\n this.inProgressList.push(file);\n }\n forceUpdate(this.el);\n });\n\n if (this.inProgressList.length > 0) {\n this.numFilesInProgress = this.inProgressList.length;\n\n // map over \"uploadable\" files for actual upload\n // this happens separately otherwise at each pass we'd have to wait for the requests to complete before displaying things\n this.inProgressList.map((file, i) => {\n this.uploadFile(file, i); // = input.files file\n });\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 uploadFile(file: File, i: number) {\n // get upload link\n getRequest(this.requestUploadPath + i.toString())\n .then(async (reply: AWSData) => {\n const assData = JSON.parse(this.associatedData!);\n const fileInfo: FileInfo = {\n ...assData,\n file_name: file.name,\n mime_type: file.type,\n file_path: reply.path,\n document_uuid: reply.guid,\n };\n\n // onProgress is passed as a callback to the ev listener inside putRequest (http service),\n // so we can't change component things directly => custom event to pass data to uploader component.\n const onProgress = (ev: ProgressEvent) => {\n const progress = ev.lengthComputable && ev.total !== 0 ? (ev.loaded / ev.total) * 100 : 0;\n const event = new CustomEvent(\"wmUploadProgress\", {\n detail: { file_name: file.name, progress },\n });\n\n this.el.dispatchEvent(event);\n };\n\n // upload to AWS s3 to url we just fetched\n await putRequest(reply.url, file, onProgress);\n\n // create the db entry\n await postRequest(this.uploadPath, fileInfo);\n\n // get files from server again\n this.getExistingFiles();\n })\n .catch((err) => {\n // do not show toast on error\n this.numFilesInProgress = null;\n // do not show in progress item on error\n this.inProgressList = [];\n this.notif = {\n id: 3,\n message: globalMessages.genericError,\n };\n console.error(err);\n });\n }\n\n downloadFile(uuid: string, path: string) {\n this.clearErrors();\n\n // POST request to get temporary download link\n const payload = {\n file_path: path,\n file_uuid: uuid,\n };\n postRequest(this.requestDownloadPath, payload)\n .then((reply: { url: string }) => {\n // we got the download link, now download the file\n window.location.assign(reply.url);\n })\n .catch((err) => {\n console.error(err);\n });\n }\n\n deleteFile(file: FileInfo) {\n this.clearErrors();\n\n this.snackbar.push({\n message: intl.formatMessage(\n {\n id: \"uploader.fileDeleted\",\n defaultMessage: \"{fileName} was deleted.\",\n },\n { fileName: file.file_name }\n ),\n id: file.uuid!,\n link: \"\",\n });\n\n // rm file from list immediately.\n this.fileList = this.fileList.filter((i) => i.uuid !== file.uuid);\n\n deleteRequest(`${this.deletePath}/${file.uuid}`).catch((err) => {\n this.notif = {\n id: 4,\n message: intl.formatMessage(\n {\n id: \"uploader.fileNotDeleted\",\n defaultMessage: \"{fileName} could not be deleted.\",\n },\n { fileName: file.file_name }\n ),\n };\n this.getExistingFiles();\n console.error(err);\n });\n }\n\n componentWillLoad() {\n if (!this.getPath) {\n throw new Error(\"wm-network-uploader: get-path is a required prop\");\n }\n if (!this.requestUploadPath) {\n throw new Error(\"wm-network-uploader: request-upload-path is a required prop\");\n }\n if (!this.uploadPath) {\n throw new Error(\"wm-network-uploader: upload-path is a required prop\");\n }\n if (!this.requestDownloadPath) {\n throw new Error(\"wm-network-uploader: request-download-path is a required prop\");\n }\n if (!this.deletePath) {\n throw new Error(\"wm-network-uploader: delete-path is a required prop\");\n }\n if (!this.buttonText) {\n throw new Error(\"wm-network-uploader: button-text is a required prop\");\n }\n if (!this.emptyStateText) {\n throw new Error(\"wm-network-uploader: empty-state-text is a required prop\");\n }\n if (!this.associatedData) {\n throw new Error(\"wm-network-uploader: associated-data is a required prop\");\n }\n\n this.setMaxSize();\n this.clearErrors();\n }\n\n componentDidLoad() {\n this.getExistingFiles();\n\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 // this is not pretty duplicating a intl message + the logic of isDisabled,\n // but not worth a bigger refactor since this is only until we get the UX for disabled elements and refactor all interactive els.\n ev.preventDefault();\n if (this.liveRegion) {\n const isMax = !!this.maxFiles && this.fileList.length >= this.maxFiles;\n let errMsg: string = \"\";\n if (this.numFilesInProgress! > 0) {\n errMsg = intl.formatMessage({\n id: \"uploader.waitToUpload\",\n defaultMessage: \"Please wait for current upload to complete before uploading new files.\",\n description: \"Message for screen reader users\",\n });\n } else if (isMax) {\n errMsg = intl.formatMessage({\n id: \"uploader.fileUploadLimitExceeded\",\n defaultMessage: \"Upload unsuccessful because file selection would exceed the maximum number of files\",\n description: \"Message displayed when trying to upload too many files\",\n });\n }\n\n if (errMsg) {\n // clear and set again to re-announce if button is clicked several times\n // (can't be done inside setTimeout because of scope, hence the promise)\n this.liveRegion.innerHTML = \"\";\n new Promise((resolve) => {\n setTimeout(() => {\n resolve(\"\");\n }, 500);\n }).then(() => (this.liveRegion!.innerHTML = errMsg));\n }\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 renderNotif() {\n return this.notif ? <span class=\"notif\">{this.notif.message}</span> : \"\";\n }\n\n renderUploadButton(classes: string) {\n return (\n <div class=\"notif-wrapper\">\n <input\n name={this.inputId}\n id={this.inputId}\n class=\"sr-only\"\n type=\"file\"\n multiple\n onClick={(ev) => this.uploadButtonOnClick(ev)}\n onChange={(e) => this.handleFiles(e)}\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.renderNotif()}\n </div>\n );\n }\n\n renderWithItems() {\n return (\n <div>\n <div class=\"header\">\n <div class=\"descr\">\n <slot />\n </div>\n {this.renderUploadButton(this.isDisabled ? \"disabled\" : \"\")}\n </div>\n {this.renderErrorList()}\n {this.renderInProgressList()}\n {this.renderFileList()}\n </div>\n );\n }\n\n renderEmptyState() {\n return (\n <div>\n <div class=\"header\">\n <div class=\"descr\">\n <slot />\n </div>\n </div>\n <div class=\"empty-block\">\n {this.renderUploadSvg()}\n <div class=\"empty-message\">{this.emptyStateText}</div>\n {this.renderUploadButton(\"-primary empty-button\")}\n </div>\n </div>\n );\n }\n\n renderErrorList() {\n if (!!this.errorList.length) {\n if (this.liveRegion) {\n let srMessage = this.errorList.reduce(function (acc, err) {\n return acc + `${err.file_name}: ${err.message} `;\n }, \"\");\n this.liveRegion.innerHTML = srMessage;\n }\n\n return (\n <ul class=\"error-list\">\n {this.errorList.map((err) => (\n <li>\n <div class=\"file --error\">\n <div class=\"file-info\">\n <span class=\"filename\">{err.file_name}</span>\n </div>\n </div>\n <div class=\"error-message\">{err.message}</div>\n </li>\n ))}\n </ul>\n );\n }\n }\n\n renderInProgressList() {\n return (\n <ul class=\"inprogress-list\">\n {this.inProgressList.map((item) => {\n return (\n <li>\n <div class=\"file --progress\">\n <div\n class=\"progress\"\n style={{\n background: `linear-gradient(to right, rgba(67, 126, 142, 1) ${item.progress}%, transparent ${item.progress}%)`,\n }}\n ></div>\n <div class=\"file-info\">\n <span class=\"filename\">\n {item.name} <span class=\"sr-only\">uploading</span>\n </span>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n );\n }\n\n renderFile(item: FileInfo) {\n return (\n <li>\n <div class=\"file --saved\">\n <div class=\"file-info\">\n <span class=\"filename\">{item.file_name}</span>\n <span class=\"filedate\">\n {this.formatDate(item.updated_at!, intl.locale, Intl.DateTimeFormat().resolvedOptions().timeZone)}\n </span>\n </div>\n <div class=\"file-controls\">\n <wm-button\n class=\"download-button\"\n button-type=\"icononly\"\n tooltip=\"download\"\n label-for-identical-buttons={`download ${item.file_name}`}\n icon=\"f1da\"\n onClick={() => this.downloadFile(item.uuid!, item.file_path!)}\n ></wm-button>\n <wm-button\n class=\"delete-button\"\n button-type=\"icononly\"\n tooltip=\"remove\"\n label-for-identical-buttons={`remove ${item.file_name}`}\n icon=\"f1c0\"\n onClick={() => this.deleteFile(item)}\n ></wm-button>\n </div>\n </div>\n </li>\n );\n }\n\n renderFileList() {\n return <ul class=\"file-list\">{this.fileList.map((item) => this.renderFile(item))}</ul>;\n }\n\n render() {\n return (\n <Host>\n {this.isEmpty() ? this.renderEmptyState() : this.renderWithItems()}\n <wm-snackbar notifications={JSON.stringify(this.snackbar)}></wm-snackbar>\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 ></div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|