cmat 0.0.17 → 0.0.18
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/components/carousel/carousel.component.d.ts +136 -0
- package/components/carousel/carousel.interface.d.ts +38 -0
- package/components/carousel/index.d.ts +5 -0
- package/components/carousel/public-api.d.ts +2 -0
- package/components/custom-formly/public-api.d.ts +1 -0
- package/components/custom-formly/types/knob/knob.component.d.ts +36 -0
- package/components/custom-formly/types/table/table.component.d.ts +3 -8
- package/components/custom-formly/wrappers/form-field/form-field.component.d.ts +4 -4
- package/components/image-viewer/image-viewer.component.d.ts +76 -0
- package/components/image-viewer/index.d.ts +5 -0
- package/components/image-viewer/public-api.d.ts +1 -0
- package/components/knob-input/index.d.ts +5 -0
- package/components/knob-input/knob-input.component.d.ts +95 -0
- package/components/knob-input/public-api.d.ts +1 -0
- package/components/material-datetimepicker/datetimepicker-input.d.ts +2 -2
- package/components/opt-input/index.d.ts +5 -0
- package/components/opt-input/models/config.d.ts +14 -0
- package/components/opt-input/otp-input.component.d.ts +70 -0
- package/components/opt-input/public-api.d.ts +1 -0
- package/components/opt-input/utils/keyboard-util.d.ts +9 -0
- package/components/opt-input/utils/object-util.d.ts +3 -0
- package/components/org-chart/designer/chart-designer.component.d.ts +17 -0
- package/components/org-chart/index.d.ts +5 -0
- package/components/org-chart/node/chart-node.component.d.ts +17 -0
- package/components/org-chart/node/node.type.d.ts +22 -0
- package/components/org-chart/org-chart.component.d.ts +12 -0
- package/components/org-chart/public-api.d.ts +2 -0
- package/components/popover/popover.interfaces.d.ts +1 -1
- package/components/select-table/index.d.ts +5 -0
- package/components/select-table/public-api.d.ts +2 -0
- package/components/select-table/select-table.component.d.ts +96 -0
- package/components/select-table/select-table.type.d.ts +20 -0
- package/components/select-tree/select-tree.component.d.ts +11 -12
- package/components/speed-dial/index.d.ts +5 -0
- package/components/speed-dial/public-api.d.ts +2 -0
- package/components/speed-dial/speed-dial.component.d.ts +63 -0
- package/components/transfer-picker/interface.d.ts +0 -1
- package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +8 -6
- package/components/treetable/index.d.ts +5 -0
- package/components/treetable/public-api.d.ts +2 -0
- package/components/treetable/treetable.component.d.ts +32 -0
- package/components/treetable/treetable.interface.d.ts +9 -0
- package/directives/animate-on-scroll/animate-on-scroll.directive.d.ts +4 -4
- package/directives/arrow-cursor/arrow-cursor.directive.d.ts +31 -0
- package/directives/arrow-cursor/index.d.ts +5 -0
- package/directives/arrow-cursor/public-api.d.ts +1 -0
- package/directives/data-exporter/constants.d.ts +26 -0
- package/directives/data-exporter/data-exporter.directive.d.ts +18 -0
- package/directives/data-exporter/index.d.ts +5 -0
- package/directives/data-exporter/mime.d.ts +5 -0
- package/directives/data-exporter/options.d.ts +21 -0
- package/directives/data-exporter/public-api.d.ts +2 -0
- package/directives/data-exporter/services/exporters/csv-exporter.service.d.ts +12 -0
- package/directives/data-exporter/services/exporters/exporter.d.ts +4 -0
- package/directives/data-exporter/services/exporters/file-exporter.d.ts +8 -0
- package/directives/data-exporter/services/exporters/json-exporter.service.d.ts +11 -0
- package/directives/data-exporter/services/exporters/txt-exporter.service.d.ts +12 -0
- package/directives/data-exporter/services/exporters/worksheet-exporter.d.ts +10 -0
- package/directives/data-exporter/services/exporters/xls-exporter.service.d.ts +14 -0
- package/directives/data-exporter/services/exporters/xlsx-exporter.service.d.ts +9 -0
- package/directives/data-exporter/services/file-util.d.ts +8 -0
- package/directives/data-exporter/services/service-locator.service.d.ts +11 -0
- package/directives/debounce/abstract-debounce.directive.d.ts +1 -1
- package/fesm2022/cmat-animations.mjs.map +1 -1
- package/fesm2022/cmat-components-adapter.mjs +9 -9
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +10 -10
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -4
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-carousel.mjs +711 -0
- package/fesm2022/cmat-components-carousel.mjs.map +1 -0
- package/fesm2022/cmat-components-cascade.mjs +12 -12
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +5 -5
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-custom-formly.mjs +168 -155
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
- package/fesm2022/cmat-components-date-range.mjs +5 -5
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +6 -6
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +4 -4
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +7 -7
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-image-viewer.mjs +227 -0
- package/fesm2022/cmat-components-image-viewer.mjs.map +1 -0
- package/fesm2022/cmat-components-json-editor.mjs +4 -4
- package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-knob-input.mjs +404 -0
- package/fesm2022/cmat-components-knob-input.mjs.map +1 -0
- package/fesm2022/cmat-components-masonry.mjs +4 -4
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +4 -4
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +53 -53
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +51 -51
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-opt-input.mjs +457 -0
- package/fesm2022/cmat-components-opt-input.mjs.map +1 -0
- package/fesm2022/cmat-components-org-chart.mjs +141 -0
- package/fesm2022/cmat-components-org-chart.mjs.map +1 -0
- package/fesm2022/cmat-components-pagination.mjs +13 -13
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +12 -12
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +10 -10
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +4 -4
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +4 -4
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +11 -11
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-table.mjs +658 -0
- package/fesm2022/cmat-components-select-table.mjs.map +1 -0
- package/fesm2022/cmat-components-select-tree.mjs +75 -57
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-speed-dial.mjs +312 -0
- package/fesm2022/cmat-components-speed-dial.mjs.map +1 -0
- package/fesm2022/cmat-components-timeline.mjs +14 -14
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +11 -11
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +60 -41
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-treetable.mjs +122 -0
- package/fesm2022/cmat-components-treetable.mjs.map +1 -0
- package/fesm2022/cmat-components-upload.mjs +11 -11
- package/fesm2022/cmat-components-upload.mjs.map +1 -1
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +21 -21
- package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
- package/fesm2022/cmat-directives-arrow-cursor.mjs +184 -0
- package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -0
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
- package/fesm2022/cmat-directives-data-exporter.mjs +324 -0
- package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -0
- package/fesm2022/cmat-directives-debounce.mjs +9 -9
- package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
- package/fesm2022/cmat-directives-digit-only.mjs +8 -6
- package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
- package/fesm2022/cmat-pipes-secure.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
- package/fesm2022/cmat-services-alert.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +6 -6
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +7 -7
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +3 -3
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-export-as.mjs +211 -0
- package/fesm2022/cmat-services-export-as.mjs.map +1 -0
- package/fesm2022/cmat-services-loading.mjs +6 -6
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
- package/fesm2022/cmat-services-media-watcher.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +3 -3
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-translation.mjs.map +1 -1
- package/fesm2022/cmat-services-utils.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/fesm2022/cmat-validators.mjs.map +1 -1
- package/fesm2022/cmat-version.mjs.map +1 -1
- package/icons/arrow-cursor.svg +1 -1
- package/package.json +82 -148
- package/services/export-as/export-as-config.model.d.ts +8 -0
- package/services/export-as/export-as.service.d.ts +43 -0
- package/services/export-as/index.d.ts +5 -0
- package/services/export-as/public-api.d.ts +2 -0
- package/styles/overrides/angular-material.scss +95 -13
- package/esm2022/animations/cmat-animations.mjs +0 -5
- package/esm2022/animations/defaults.mjs +0 -12
- package/esm2022/animations/dropdown.mjs +0 -26
- package/esm2022/animations/expand-collapse.mjs +0 -17
- package/esm2022/animations/fade.mjs +0 -170
- package/esm2022/animations/public-api.mjs +0 -19
- package/esm2022/animations/shake.mjs +0 -59
- package/esm2022/animations/slide.mjs +0 -124
- package/esm2022/animations/transform.mjs +0 -16
- package/esm2022/animations/zoom.mjs +0 -38
- package/esm2022/cmat.mjs +0 -5
- package/esm2022/components/adapter/cmat-components-adapter.mjs +0 -5
- package/esm2022/components/adapter/datetime-adapter.mjs +0 -127
- package/esm2022/components/adapter/datetime-formats.mjs +0 -3
- package/esm2022/components/adapter/dayjs-date-adapter.mjs +0 -198
- package/esm2022/components/adapter/dayjs-date-formats.mjs +0 -12
- package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +0 -100
- package/esm2022/components/adapter/dayjs-datetime-formats.mjs +0 -21
- package/esm2022/components/adapter/native-datetime-adapter.mjs +0 -130
- package/esm2022/components/adapter/native-datetime-formats.mjs +0 -15
- package/esm2022/components/adapter/public-api.mjs +0 -9
- package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +0 -19
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -94
- package/esm2022/components/breadcrumb/breadcrumb.service.mjs +0 -333
- package/esm2022/components/breadcrumb/cmat-components-breadcrumb.mjs +0 -5
- package/esm2022/components/breadcrumb/public-api.mjs +0 -6
- package/esm2022/components/breadcrumb/types/breadcrumb.config.mjs +0 -2
- package/esm2022/components/breadcrumb/types/breadcrumb.mjs +0 -2
- package/esm2022/components/card/card.component.mjs +0 -49
- package/esm2022/components/card/card.types.mjs +0 -2
- package/esm2022/components/card/cmat-components-card.mjs +0 -5
- package/esm2022/components/card/public-api.mjs +0 -3
- package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +0 -49
- package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +0 -384
- package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +0 -22
- package/esm2022/components/cascade/cmat-components-cascade.mjs +0 -5
- package/esm2022/components/cascade/options.interface.mjs +0 -2
- package/esm2022/components/cascade/public-api.mjs +0 -4
- package/esm2022/components/chip-input/chip-input.component.mjs +0 -251
- package/esm2022/components/chip-input/cmat-components-chip-input.mjs +0 -5
- package/esm2022/components/chip-input/public-api.mjs +0 -2
- package/esm2022/components/custom-formly/cmat-components-custom-formly.mjs +0 -5
- package/esm2022/components/custom-formly/extension/addons.extension.mjs +0 -13
- package/esm2022/components/custom-formly/public-api.mjs +0 -29
- package/esm2022/components/custom-formly/types/button/button.component.mjs +0 -81
- package/esm2022/components/custom-formly/types/cascade/cascade.component.mjs +0 -71
- package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +0 -161
- package/esm2022/components/custom-formly/types/chips/chips.component.mjs +0 -55
- package/esm2022/components/custom-formly/types/color-picker/color-picker.component.mjs +0 -15
- package/esm2022/components/custom-formly/types/date-range/date-range.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/datepicker/datepicker.component.mjs +0 -51
- package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +0 -88
- package/esm2022/components/custom-formly/types/number/number.component.mjs +0 -27
- package/esm2022/components/custom-formly/types/quill/quill.component.mjs +0 -171
- package/esm2022/components/custom-formly/types/radio/radio.component.mjs +0 -87
- package/esm2022/components/custom-formly/types/rating/rating.component.mjs +0 -27
- package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/select/select.component.mjs +0 -167
- package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +0 -66
- package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +0 -28
- package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +0 -2
- package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +0 -28
- package/esm2022/components/custom-formly/types/table/table.component.mjs +0 -127
- package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +0 -16
- package/esm2022/components/custom-formly/types/tags/tags.component.mjs +0 -146
- package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +0 -25
- package/esm2022/components/custom-formly/types/upload/upload.component.mjs +0 -58
- package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +0 -92
- package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +0 -14
- package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +0 -14
- package/esm2022/components/custom-formly/wrappers/form-field/form-field.component.mjs +0 -47
- package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +0 -12
- package/esm2022/components/date-range/cmat-components-date-range.mjs +0 -5
- package/esm2022/components/date-range/date-range.component.mjs +0 -558
- package/esm2022/components/date-range/public-api.mjs +0 -2
- package/esm2022/components/drawer/cmat-components-drawer.mjs +0 -5
- package/esm2022/components/drawer/drawer.component.mjs +0 -301
- package/esm2022/components/drawer/drawer.service.mjs +0 -41
- package/esm2022/components/drawer/drawer.types.mjs +0 -2
- package/esm2022/components/drawer/public-api.mjs +0 -4
- package/esm2022/components/fullscreen/cmat-components-fullscreen.mjs +0 -5
- package/esm2022/components/fullscreen/fullscreen.component.mjs +0 -44
- package/esm2022/components/fullscreen/public-api.mjs +0 -2
- package/esm2022/components/highlight/cmat-components-highlight.mjs +0 -5
- package/esm2022/components/highlight/highlight.component.mjs +0 -80
- package/esm2022/components/highlight/highlight.service.mjs +0 -47
- package/esm2022/components/highlight/public-api.mjs +0 -3
- package/esm2022/components/json-editor/cmat-components-json-editor.mjs +0 -5
- package/esm2022/components/json-editor/json-editor.component.mjs +0 -176
- package/esm2022/components/json-editor/public-api.mjs +0 -2
- package/esm2022/components/masonry/cmat-components-masonry.mjs +0 -5
- package/esm2022/components/masonry/masonry.component.mjs +0 -54
- package/esm2022/components/masonry/public-api.mjs +0 -2
- package/esm2022/components/material-color-picker/base-color.mjs +0 -13
- package/esm2022/components/material-color-picker/cmat-components-material-color-picker.mjs +0 -5
- package/esm2022/components/material-color-picker/material-color-picker.component.mjs +0 -147
- package/esm2022/components/material-color-picker/public-api.mjs +0 -3
- package/esm2022/components/material-color-picker/selected-color.mjs +0 -3
- package/esm2022/components/material-datetimepicker/calendar-body.mjs +0 -76
- package/esm2022/components/material-datetimepicker/calendar.mjs +0 -670
- package/esm2022/components/material-datetimepicker/clock.mjs +0 -290
- package/esm2022/components/material-datetimepicker/cmat-components-material-datetimepicker.mjs +0 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-animations.mjs +0 -34
- package/esm2022/components/material-datetimepicker/datetimepicker-errors.mjs +0 -6
- package/esm2022/components/material-datetimepicker/datetimepicker-filtertype.mjs +0 -8
- package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +0 -341
- package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +0 -63
- package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +0 -87
- package/esm2022/components/material-datetimepicker/datetimepicker-types.mjs +0 -2
- package/esm2022/components/material-datetimepicker/datetimepicker.mjs +0 -531
- package/esm2022/components/material-datetimepicker/month-view.mjs +0 -141
- package/esm2022/components/material-datetimepicker/multi-year-view.mjs +0 -197
- package/esm2022/components/material-datetimepicker/public-api.mjs +0 -11
- package/esm2022/components/material-datetimepicker/time.mjs +0 -455
- package/esm2022/components/material-datetimepicker/year-view.mjs +0 -124
- package/esm2022/components/navigation/cmat-components-navigation.mjs +0 -5
- package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +0 -70
- package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +0 -82
- package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +0 -47
- package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +0 -47
- package/esm2022/components/navigation/horizontal/horizontal.component.mjs +0 -87
- package/esm2022/components/navigation/navigation.service.mjs +0 -140
- package/esm2022/components/navigation/navigation.types.mjs +0 -3
- package/esm2022/components/navigation/public-api.mjs +0 -5
- package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +0 -162
- package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +0 -60
- package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +0 -277
- package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +0 -56
- package/esm2022/components/navigation/vertical/components/group/group.component.mjs +0 -78
- package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +0 -56
- package/esm2022/components/navigation/vertical/vertical.component.mjs +0 -584
- package/esm2022/components/pagination/cmat-components-pagination.mjs +0 -5
- package/esm2022/components/pagination/pagination.component.mjs +0 -67
- package/esm2022/components/pagination/pagination.directive.mjs +0 -197
- package/esm2022/components/pagination/pagination.instance.mjs +0 -2
- package/esm2022/components/pagination/pagination.pipe.mjs +0 -100
- package/esm2022/components/pagination/pagination.service.mjs +0 -90
- package/esm2022/components/pagination/public-api.mjs +0 -6
- package/esm2022/components/password-strength/animations/index.mjs +0 -48
- package/esm2022/components/password-strength/cmat-components-password-strength.mjs +0 -5
- package/esm2022/components/password-strength/enum.mjs +0 -17
- package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +0 -27
- package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +0 -206
- package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +0 -150
- package/esm2022/components/password-strength/mat-password-strength-validator.mjs +0 -36
- package/esm2022/components/password-strength/public-api.mjs +0 -4
- package/esm2022/components/password-strength/regexp.class.mjs +0 -8
- package/esm2022/components/popover/cmat-components-popover.mjs +0 -5
- package/esm2022/components/popover/popover-trigger.mjs +0 -442
- package/esm2022/components/popover/popover.component.mjs +0 -348
- package/esm2022/components/popover/popover.errors.mjs +0 -27
- package/esm2022/components/popover/popover.interfaces.mjs +0 -2
- package/esm2022/components/popover/popover.target.mjs +0 -18
- package/esm2022/components/popover/popover.type.mjs +0 -2
- package/esm2022/components/popover/public-api.mjs +0 -5
- package/esm2022/components/progress-bar/cmat-components-progress-bar.mjs +0 -5
- package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -58
- package/esm2022/components/progress-bar/public-api.mjs +0 -2
- package/esm2022/components/rating/cmat-components-rating.mjs +0 -5
- package/esm2022/components/rating/public-api.mjs +0 -2
- package/esm2022/components/rating/rating.component.mjs +0 -202
- package/esm2022/components/select-search/cmat-components-select-search.mjs +0 -5
- package/esm2022/components/select-search/default-options.mjs +0 -16
- package/esm2022/components/select-search/public-api.mjs +0 -3
- package/esm2022/components/select-search/select-no-entries-found.directive.mjs +0 -14
- package/esm2022/components/select-search/select-search-clear.directive.mjs +0 -14
- package/esm2022/components/select-search/select-search.component.mjs +0 -485
- package/esm2022/components/select-tree/cmat-components-select-tree.mjs +0 -5
- package/esm2022/components/select-tree/public-api.mjs +0 -4
- package/esm2022/components/select-tree/select-tree.component.mjs +0 -565
- package/esm2022/components/select-tree/select-tree.flatnode.mjs +0 -3
- package/esm2022/components/select-tree/select-tree.node.mjs +0 -3
- package/esm2022/components/timeline/cmat-components-timeline.mjs +0 -5
- package/esm2022/components/timeline/public-api.mjs +0 -3
- package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +0 -70
- package/esm2022/components/timeline/timeline.component.mjs +0 -107
- package/esm2022/components/toast/cmat-components-toast.mjs +0 -5
- package/esm2022/components/toast/models/global-config.model.mjs +0 -2
- package/esm2022/components/toast/models/toast.model.mjs +0 -2
- package/esm2022/components/toast/models/type.model.mjs +0 -2
- package/esm2022/components/toast/public-api.mjs +0 -7
- package/esm2022/components/toast/toast-modal.component.mjs +0 -53
- package/esm2022/components/toast/toast.component.mjs +0 -30
- package/esm2022/components/toast/toast.service.mjs +0 -122
- package/esm2022/components/transfer-picker/cmat-components-transfer-picker.mjs +0 -5
- package/esm2022/components/transfer-picker/filter/filter.component.mjs +0 -91
- package/esm2022/components/transfer-picker/interface.mjs +0 -17
- package/esm2022/components/transfer-picker/public-api.mjs +0 -8
- package/esm2022/components/transfer-picker/search/search.component.mjs +0 -38
- package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +0 -201
- package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +0 -32
- package/esm2022/components/transfer-picker/transfer-picker.component.mjs +0 -84
- package/esm2022/components/transfer-picker/transfer-picker.service.mjs +0 -137
- package/esm2022/components/upload/cmat-components-upload.mjs +0 -5
- package/esm2022/components/upload/files.type.mjs +0 -2
- package/esm2022/components/upload/files.util.service.mjs +0 -89
- package/esm2022/components/upload/public-api.mjs +0 -5
- package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +0 -155
- package/esm2022/components/upload/upload.component.mjs +0 -118
- package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +0 -126
- package/esm2022/directives/animate-on-scroll/cmat-directives-animate-on-scroll.mjs +0 -5
- package/esm2022/directives/animate-on-scroll/public-api.mjs +0 -2
- package/esm2022/directives/animate-on-scroll/scroll.service.mjs +0 -38
- package/esm2022/directives/autofocus/autofocus.directive.mjs +0 -20
- package/esm2022/directives/autofocus/cmat-directives-autofocus.mjs +0 -5
- package/esm2022/directives/autofocus/public-api.mjs +0 -2
- package/esm2022/directives/debounce/abstract-debounce.directive.mjs +0 -34
- package/esm2022/directives/debounce/cmat-directives-debounce.mjs +0 -5
- package/esm2022/directives/debounce/debounce-click.directive.mjs +0 -25
- package/esm2022/directives/debounce/debounce-keyup.directive.mjs +0 -25
- package/esm2022/directives/debounce/public-api.mjs +0 -3
- package/esm2022/directives/digit-only/cmat-directives-digit-only.mjs +0 -5
- package/esm2022/directives/digit-only/digit-only.directive.mjs +0 -298
- package/esm2022/directives/digit-only/mask.directive.mjs +0 -84
- package/esm2022/directives/digit-only/public-api.mjs +0 -3
- package/esm2022/directives/equal-validator/cmat-directives-equal-validator.mjs +0 -5
- package/esm2022/directives/equal-validator/equal-validator.directive.mjs +0 -54
- package/esm2022/directives/equal-validator/public-api.mjs +0 -2
- package/esm2022/lib/mock-api/cmat-lib-mock-api.mjs +0 -5
- package/esm2022/lib/mock-api/mock-api.constants.mjs +0 -3
- package/esm2022/lib/mock-api/mock-api.interceptor.mjs +0 -73
- package/esm2022/lib/mock-api/mock-api.request-handler.mjs +0 -48
- package/esm2022/lib/mock-api/mock-api.service.mjs +0 -93
- package/esm2022/lib/mock-api/mock-api.types.mjs +0 -2
- package/esm2022/lib/mock-api/mock-api.utils.mjs +0 -16
- package/esm2022/lib/mock-api/public-api.mjs +0 -6
- package/esm2022/pipes/bytes/bytes.pipe.mjs +0 -25
- package/esm2022/pipes/bytes/cmat-pipes-bytes.mjs +0 -5
- package/esm2022/pipes/bytes/public-api.mjs +0 -2
- package/esm2022/pipes/date-format/cmat-pipes-date-format.mjs +0 -5
- package/esm2022/pipes/date-format/date-format.pipe.mjs +0 -20
- package/esm2022/pipes/date-format/public-api.mjs +0 -2
- package/esm2022/pipes/find-by-key/cmat-pipes-find-by-key.mjs +0 -5
- package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +0 -23
- package/esm2022/pipes/find-by-key/public-api.mjs +0 -2
- package/esm2022/pipes/group-by/cmat-pipes-group-by.mjs +0 -5
- package/esm2022/pipes/group-by/group-by.pipe.mjs +0 -29
- package/esm2022/pipes/group-by/public-api.mjs +0 -2
- package/esm2022/pipes/keys/cmat-pipes-keys.mjs +0 -5
- package/esm2022/pipes/keys/keys.pipe.mjs +0 -26
- package/esm2022/pipes/keys/public-api.mjs +0 -2
- package/esm2022/pipes/secure/cmat-pipes-secure.mjs +0 -5
- package/esm2022/pipes/secure/public-api.mjs +0 -2
- package/esm2022/pipes/secure/secure-pipe.mjs +0 -46
- package/esm2022/pipes/uppercase/cmat-pipes-uppercase.mjs +0 -5
- package/esm2022/pipes/uppercase/public-api.mjs +0 -2
- package/esm2022/pipes/uppercase/uppercase.pipe.mjs +0 -17
- package/esm2022/public-api.mjs +0 -2
- package/esm2022/services/alert/alert.dialog.mjs +0 -12
- package/esm2022/services/alert/alert.message.mjs +0 -9
- package/esm2022/services/alert/alert.service.mjs +0 -166
- package/esm2022/services/alert/cmat-services-alert.mjs +0 -5
- package/esm2022/services/alert/enum.mjs +0 -15
- package/esm2022/services/alert/public-api.mjs +0 -5
- package/esm2022/services/config/cmat-services-config.mjs +0 -5
- package/esm2022/services/config/config.constants.mjs +0 -3
- package/esm2022/services/config/config.service.mjs +0 -35
- package/esm2022/services/config/public-api.mjs +0 -4
- package/esm2022/services/config/urlStateConfig.service.mjs +0 -30
- package/esm2022/services/confirmation/cmat-services-confirmation.mjs +0 -5
- package/esm2022/services/confirmation/confirmation.service.mjs +0 -51
- package/esm2022/services/confirmation/confirmation.types.mjs +0 -2
- package/esm2022/services/confirmation/dialog/dialog.component.mjs +0 -25
- package/esm2022/services/confirmation/public-api.mjs +0 -3
- package/esm2022/services/data/cmat-services-data.mjs +0 -5
- package/esm2022/services/data/data.service.mjs +0 -169
- package/esm2022/services/data/public-api.mjs +0 -2
- package/esm2022/services/loading/cmat-services-loading.mjs +0 -5
- package/esm2022/services/loading/loading.interceptor.mjs +0 -29
- package/esm2022/services/loading/loading.service.mjs +0 -72
- package/esm2022/services/loading/public-api.mjs +0 -3
- package/esm2022/services/local-storage/cmat-services-local-storage.mjs +0 -5
- package/esm2022/services/local-storage/local-storage.service.mjs +0 -22
- package/esm2022/services/local-storage/public-api.mjs +0 -2
- package/esm2022/services/media-watcher/cmat-services-media-watcher.mjs +0 -5
- package/esm2022/services/media-watcher/media-watcher.service.mjs +0 -55
- package/esm2022/services/media-watcher/public-api.mjs +0 -2
- package/esm2022/services/platform/cmat-services-platform.mjs +0 -5
- package/esm2022/services/platform/platform.service.mjs +0 -46
- package/esm2022/services/platform/public-api.mjs +0 -2
- package/esm2022/services/splash-screen/cmat-services-splash-screen.mjs +0 -5
- package/esm2022/services/splash-screen/public-api.mjs +0 -2
- package/esm2022/services/splash-screen/splash-screen.service.mjs +0 -42
- package/esm2022/services/title/cmat-services-title.mjs +0 -5
- package/esm2022/services/title/public-api.mjs +0 -2
- package/esm2022/services/title/title.service.mjs +0 -46
- package/esm2022/services/translation/cmat-services-translation.mjs +0 -5
- package/esm2022/services/translation/public-api.mjs +0 -2
- package/esm2022/services/translation/translation.service.mjs +0 -62
- package/esm2022/services/utils/cmat-services-utils.mjs +0 -5
- package/esm2022/services/utils/public-api.mjs +0 -2
- package/esm2022/services/utils/utils.service.mjs +0 -467
- package/esm2022/validators/cmat-validators.mjs +0 -5
- package/esm2022/validators/public-api.mjs +0 -2
- package/esm2022/validators/validators.mjs +0 -33
- package/esm2022/version/cmat-version.mjs +0 -5
- package/esm2022/version/public-api.mjs +0 -2
- package/esm2022/version/version.mjs +0 -11
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy91cGxvYWQvZmlsZXMudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWxlTW9kZWwge1xyXG4gICAgaWQ/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZmlsZU5hbWU6IHN0cmluZztcclxuICAgIGZpbGVQYXRoOiBzdHJpbmc7XHJcbiAgICBmaWxlU3RhdHVzPzogJ1VwbG9hZGVkJyB8ICdQcm9jZXNzZWQnO1xyXG4gICAgbGVuZ3RoOiBudW1iZXI7XHJcbiAgICB1cGxvYWRVc2VySWQ/OiBzdHJpbmc7XHJcbiAgICB1cGxvYWRVc2VyTmFtZT86IHN0cmluZztcclxuICAgIHVwbG9hZERhdGU6IERhdGU7XHJcbiAgICBmaWxlVHlwZTogJ2NzdicgfCAnZ2lmJyB8ICd3b3JkJyB8ICdleGNlbCcgfCAnanBnJyB8ICdvdXRsb29rJyB8ICdwZGYnIHwgJ3BuZycgfCAncHB0JyB8ICdmaWxlJyB8ICd0ZXh0JyB8ICd2aWRlbycgfCAnemlwJztcclxuICAgIGZpbGVDYXRlZ29yeTogc3RyaW5nO1xyXG4gICAgZGF0YT86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2F0ZWdvcnlNb2RlbCB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMaXN0TW9kZWwge1xyXG4gICAgZGF0YTogRmlsZU1vZGVsW107XHJcbiAgICBkYXRhQ291bnQ6IG51bWJlcjtcclxuICAgIGNhdGVnb3J5OiBGaWxlQ2F0ZWdvcnlNb2RlbFtdO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject, catchError, map, takeUntil, tap } from 'rxjs';
|
|
3
|
-
import { CmatUtilsService } from 'cmat/services/utils';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common/http";
|
|
6
|
-
import * as i2 from "cmat/services/config";
|
|
7
|
-
export class CmatFilesUtilService {
|
|
8
|
-
constructor(_http, _urlStateConfigService) {
|
|
9
|
-
this._http = _http;
|
|
10
|
-
this._urlStateConfigService = _urlStateConfigService;
|
|
11
|
-
this._unsubscribeAll = new Subject();
|
|
12
|
-
this._urlStateConfigService.config$
|
|
13
|
-
.pipe(takeUntil(this._unsubscribeAll))
|
|
14
|
-
.subscribe((config) => {
|
|
15
|
-
this._config = config;
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
ngOnDestroy() {
|
|
19
|
-
this._unsubscribeAll.next(void 0);
|
|
20
|
-
this._unsubscribeAll.complete();
|
|
21
|
-
}
|
|
22
|
-
downloadFile(fileId, isStream = true) {
|
|
23
|
-
return this._http.get(`${this._config.fileUrl}/download/${fileId}`, {
|
|
24
|
-
headers: CmatUtilsService.getRequestCryptoHeaders(fileId),
|
|
25
|
-
observe: 'response',
|
|
26
|
-
reportProgress: true,
|
|
27
|
-
responseType: 'blob',
|
|
28
|
-
params: {
|
|
29
|
-
isStream
|
|
30
|
-
}
|
|
31
|
-
}).pipe(catchError(CmatUtilsService.handleError));
|
|
32
|
-
}
|
|
33
|
-
downloadFileZip(fileIds) {
|
|
34
|
-
return this._http.post(`${this._config.fileUrl}/download`, fileIds, {
|
|
35
|
-
headers: CmatUtilsService.getRequestCryptoHeaders('fileZip'),
|
|
36
|
-
observe: 'response',
|
|
37
|
-
reportProgress: true,
|
|
38
|
-
responseType: 'blob',
|
|
39
|
-
}).pipe(catchError(CmatUtilsService.handleError));
|
|
40
|
-
}
|
|
41
|
-
uploadFile(file) {
|
|
42
|
-
return this._http.post(`${this._config.fileUrl}/upload`, file, {
|
|
43
|
-
headers: CmatUtilsService.getRequestCryptoHeaders('files'),
|
|
44
|
-
observe: 'events',
|
|
45
|
-
reportProgress: true,
|
|
46
|
-
responseType: 'json'
|
|
47
|
-
}).pipe(tap((res) => res), catchError(CmatUtilsService.handleError));
|
|
48
|
-
}
|
|
49
|
-
deleteFile(fileId) {
|
|
50
|
-
return this._http.delete(`${this._config.fileUrl}/${fileId}`, {
|
|
51
|
-
headers: CmatUtilsService.getRequestCryptoHeaders(fileId)
|
|
52
|
-
}).pipe(catchError(err => CmatUtilsService.handleError(err)));
|
|
53
|
-
}
|
|
54
|
-
getFileList(ids, fileName, fileCategory, searchDate, pageIndex = -1, pageSize = -1) {
|
|
55
|
-
const query = {
|
|
56
|
-
ids,
|
|
57
|
-
fileName,
|
|
58
|
-
fileCategory,
|
|
59
|
-
searchDate
|
|
60
|
-
};
|
|
61
|
-
if (this._config.enableDataProtect) {
|
|
62
|
-
return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`, CmatUtilsService.getEncryptData(JSON.stringify(query)), {
|
|
63
|
-
headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),
|
|
64
|
-
responseType: 'text'
|
|
65
|
-
})
|
|
66
|
-
.pipe(
|
|
67
|
-
// retry(3), // retry a failed request up to 3 times
|
|
68
|
-
map((res) => JSON.parse(CmatUtilsService.getDecryptData(res))), catchError(err => CmatUtilsService.handleError(err)));
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`, query, {
|
|
72
|
-
headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),
|
|
73
|
-
responseType: 'json'
|
|
74
|
-
})
|
|
75
|
-
.pipe(
|
|
76
|
-
// retry(3), // retry a failed request up to 3 times
|
|
77
|
-
tap((res) => res), catchError(err => CmatUtilsService.handleError(err)));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatFilesUtilService, deps: [{ token: i1.HttpClient }, { token: i2.CmatUrlStateConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
81
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatFilesUtilService, providedIn: 'root' }); }
|
|
82
|
-
}
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatFilesUtilService, decorators: [{
|
|
84
|
-
type: Injectable,
|
|
85
|
-
args: [{
|
|
86
|
-
providedIn: 'root'
|
|
87
|
-
}]
|
|
88
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.CmatUrlStateConfigService }] });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMudXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL3VwbG9hZC9maWxlcy51dGlsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQU12RCxNQUFNLE9BQU8sb0JBQW9CO0lBSTdCLFlBQW9CLEtBQWlCLEVBQVUsc0JBQWlEO1FBQTVFLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQTJCO1FBRnhGLG9CQUFlLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFHekQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU87YUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDckMsU0FBUyxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjLEVBQUUsV0FBb0IsSUFBSTtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLGFBQWEs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LENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3ZELENBQUM7UUFDVixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksU0FBUyxJQUFJLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRTtnQkFDN0YsT0FBTyxFQUFFLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQztnQkFDN0QsWUFBWSxFQUFFLE1BQU07YUFDdkIsQ0FBQztpQkFDRyxJQUFJO1lBQ0Qsb0RBQW9EO1lBQ3BELEdBQUcsQ0FBQyxDQUFDLEdBQWtCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUNoQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDdkQsQ0FBQztRQUNWLENBQUM7SUFDTCxDQUFDOytHQTFGUSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZqQixNQUFNOzs0RkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSVVybFN0YXRlQ29uZmlnLCBDbWF0VXJsU3RhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnY21hdC9zZXJ2aWNlcy9jb25maWcnO1xyXG5pbXBvcnQgeyBDbWF0VXRpbHNTZXJ2aWNlIH0gZnJvbSAnY21hdC9zZXJ2aWNlcy91dGlscyc7XHJcbmltcG9ydCB7IEZpbGVMaXN0TW9kZWwgfSBmcm9tICcuL2ZpbGVzLnR5cGUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RmlsZXNVdGlsU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIF9jb25maWc6IElVcmxTdGF0ZUNvbmZpZztcclxuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIF91cmxTdGF0ZUNvbmZpZ1NlcnZpY2U6IENtYXRVcmxTdGF0ZUNvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLl91cmxTdGF0ZUNvbmZpZ1NlcnZpY2UuY29uZmlnJFxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjb25maWc6IElVcmxTdGF0ZUNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KHZvaWQgMCk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEZpbGUoZmlsZUlkOiBzdHJpbmcsIGlzU3RyZWFtOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KGAke3RoaXMuX2NvbmZpZy5maWxlVXJsfS9kb3dubG9hZC8ke2ZpbGVJZH1gLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IENtYXRVdGlsc1NlcnZpY2UuZ2V0UmVxdWVzdENyeXB0b0hlYWRlcnMoZmlsZUlkKSxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcclxuICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIGlzU3RyZWFtXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCkucGlwZTxhbnk+KFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKENtYXRVdGlsc1NlcnZpY2UuaGFuZGxlRXJyb3IpKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEZpbGVaaXAoZmlsZUlkcz86IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KGAke3RoaXMuX2NvbmZpZy5maWxlVXJsfS9kb3dubG9hZGAsIGZpbGVJZHMsIHtcclxuICAgICAgICAgICAgaGVhZGVyczogQ21hdFV0aWxzU2VydmljZS5nZXRSZXF1ZXN0Q3J5cHRvSGVhZGVycygnZmlsZVppcCcpLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXHJcbiAgICAgICAgfSkucGlwZTxhbnk+KFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKENtYXRVdGlsc1NlcnZpY2UuaGFuZGxlRXJyb3IpKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGxvYWRGaWxlKGZpbGU6IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KGAke3RoaXMuX2NvbmZpZy5maWxlVXJsfS91cGxvYWRgLCBmaWxlLCB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IENtYXRVdGlsc1NlcnZpY2UuZ2V0UmVxdWVzdENyeXB0b0hlYWRlcnMoJ2ZpbGVzJyksXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdldmVudHMnLFxyXG4gICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbidcclxuICAgICAgICB9KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKHJlczogYW55KSA9PiByZXMpLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKENtYXRVdGlsc1NlcnZpY2UuaGFuZGxlRXJyb3IpKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGaWxlKGZpbGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGUoYCR7dGhpcy5fY29uZmlnLmZpbGVVcmx9LyR7ZmlsZUlkfWAsIHtcclxuICAgICAgICAgICAgaGVhZGVyczogQ21hdFV0aWxzU2VydmljZS5nZXRSZXF1ZXN0Q3J5cHRvSGVhZGVycyhmaWxlSWQpXHJcbiAgICAgICAgfSkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4gQ21hdFV0aWxzU2VydmljZS5oYW5kbGVFcnJvcihlcnIpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZUxpc3QoaWRzPzogW10sIGZpbGVOYW1lPzogc3RyaW5nLCBmaWxlQ2F0ZWdvcnk/OiBzdHJpbmcsIHNlYXJjaERhdGU/OiBEYXRlLCBwYWdlSW5kZXg6IG51bWJlciA9IC0xLCBwYWdlU2l6ZTogbnVtYmVyID0gLTEpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xyXG4gICAgICAgICAgICBpZHMsXHJcbiAgICAgICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgICAgICBmaWxlQ2F0ZWdvcnksXHJcbiAgICAgICAgICAgIHNlYXJjaERhdGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZW5hYmxlRGF0YVByb3RlY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdChgJHt0aGlzLl9jb25maWcuZmlsZVVybH0vJHtwYWdlSW5kZXh9LyR7cGFnZVNpemV9YCxcclxuICAgICAgICAgICAgICAgIENtYXRVdGlsc1NlcnZpY2UuZ2V0RW5jcnlwdERhdGEoSlNPTi5zdHJpbmdpZnkocXVlcnkpKSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBDbWF0VXRpbHNTZXJ2aWNlLmdldFJlcXVlc3RDcnlwdG9IZWFkZXJzKCdmaWxlTGlzdCcpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHJ5KDMpLCAvLyByZXRyeSBhIGZhaWxlZCByZXF1ZXN0IHVwIHRvIDMgdGltZXNcclxuICAgICAgICAgICAgICAgICAgICBtYXAoKHJlczogc3RyaW5nKSA9PiBKU09OLnBhcnNlKENtYXRVdGlsc1NlcnZpY2UuZ2V0RGVjcnlwdERhdGEocmVzKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IENtYXRVdGlsc1NlcnZpY2UuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxGaWxlTGlzdE1vZGVsPihgJHt0aGlzLl9jb25maWcuZmlsZVVybH0vJHtwYWdlSW5kZXh9LyR7cGFnZVNpemV9YCwgcXVlcnksIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IENtYXRVdGlsc1NlcnZpY2UuZ2V0UmVxdWVzdENyeXB0b0hlYWRlcnMoJ2ZpbGVMaXN0JyksXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0cnkoMyksIC8vIHJldHJ5IGEgZmFpbGVkIHJlcXVlc3QgdXAgdG8gMyB0aW1lc1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcCgocmVzOiBGaWxlTGlzdE1vZGVsKSA9PiByZXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IENtYXRVdGlsc1NlcnZpY2UuaGFuZGxlRXJyb3IoZXJyKSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './upload-queue/upload-queue.component';
|
|
2
|
-
export * from './upload.component';
|
|
3
|
-
export * from './files.util.service';
|
|
4
|
-
export * from './files.type';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy91cGxvYWQvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdXBsb2FkLXF1ZXVlL3VwbG9hZC1xdWV1ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VwbG9hZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGVzLnV0aWwuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMudHlwZSc7XHJcbiJdfQ==
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, ViewChildren, ViewEncapsulation, forwardRef } from '@angular/core';
|
|
2
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
3
|
-
import { MatCardModule } from '@angular/material/card';
|
|
4
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
-
import { MatListModule } from '@angular/material/list';
|
|
6
|
-
import { Subject, takeUntil } from 'rxjs';
|
|
7
|
-
import { CmatUploadComponent } from '../upload.component';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "cmat/services/media-watcher";
|
|
10
|
-
import * as i2 from "@angular/material/card";
|
|
11
|
-
import * as i3 from "@angular/material/list";
|
|
12
|
-
import * as i4 from "@angular/material/button";
|
|
13
|
-
import * as i5 from "@angular/material/icon";
|
|
14
|
-
export class CmatUploadQueueComponent {
|
|
15
|
-
constructor(_changeDetectorRef, _cmatMediaWatcherService, _elementRef) {
|
|
16
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
17
|
-
this._cmatMediaWatcherService = _cmatMediaWatcherService;
|
|
18
|
-
this._elementRef = _elementRef;
|
|
19
|
-
this.fileAlias = 'fileData';
|
|
20
|
-
this.filePath = '';
|
|
21
|
-
this.required = false;
|
|
22
|
-
this.autoUpload = true;
|
|
23
|
-
this.multiple = true;
|
|
24
|
-
this.accept = '';
|
|
25
|
-
this.title = '附件';
|
|
26
|
-
this.editMode = false;
|
|
27
|
-
this.filesData = [];
|
|
28
|
-
this.outputRemoveIdEvent = new EventEmitter();
|
|
29
|
-
this.outputUploadIdEvent = new EventEmitter();
|
|
30
|
-
this.outputFilesDataEvent = new EventEmitter();
|
|
31
|
-
this.id = 'cmatupload-' + Math.floor(Math.random() * 1000000);
|
|
32
|
-
this._unsubscribeAll = new Subject();
|
|
33
|
-
this._cmatMediaWatcherService.onMediaChange$
|
|
34
|
-
.pipe(takeUntil(this._unsubscribeAll))
|
|
35
|
-
.subscribe(({ matchingAliases }) => {
|
|
36
|
-
this.isHandSet = !matchingAliases.includes('lg');
|
|
37
|
-
this._changeDetectorRef.markForCheck();
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
onDrop(event) {
|
|
41
|
-
const files = event.dataTransfer.files;
|
|
42
|
-
for (const file of files) {
|
|
43
|
-
if (this.accept?.includes(file.type))
|
|
44
|
-
this.add(file);
|
|
45
|
-
}
|
|
46
|
-
event.preventDefault();
|
|
47
|
-
event.stopPropagation();
|
|
48
|
-
}
|
|
49
|
-
onDropOver(event) {
|
|
50
|
-
event.preventDefault();
|
|
51
|
-
}
|
|
52
|
-
ngAfterViewInit() {
|
|
53
|
-
const fileUpload = this._elementRef.nativeElement.querySelector('#' + this.id);
|
|
54
|
-
fileUpload.onchange = () => {
|
|
55
|
-
for (let index = 0; index < (fileUpload.files?.length ?? 0); index++) {
|
|
56
|
-
const file = fileUpload.files[index];
|
|
57
|
-
this.add(file);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
ngOnDestroy() {
|
|
62
|
-
this._unsubscribeAll.next(void 0);
|
|
63
|
-
this._unsubscribeAll.complete();
|
|
64
|
-
}
|
|
65
|
-
add(file) {
|
|
66
|
-
if ((this.accept === '' || this.accept === undefined) || (this.accept !== '' && this.accept.includes(file.type))) {
|
|
67
|
-
if (!Array.isArray(this.filesData)) {
|
|
68
|
-
this.filesData = [];
|
|
69
|
-
}
|
|
70
|
-
if (!(!this.multiple && this.filesData.length > 0)) {
|
|
71
|
-
this.filesData.push(file);
|
|
72
|
-
}
|
|
73
|
-
else if (this.fileUploads.first.id === null) {
|
|
74
|
-
this.filesData.push(file);
|
|
75
|
-
this.fileUploads.first.remove();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
this._changeDetectorRef.markForCheck();
|
|
79
|
-
}
|
|
80
|
-
upload(event) {
|
|
81
|
-
this.outputUploadIdEvent.emit(event.id);
|
|
82
|
-
this.outputFilesDataEvent.emit(this.filesData);
|
|
83
|
-
}
|
|
84
|
-
remove(event) {
|
|
85
|
-
const index = this.filesData.indexOf(event.file);
|
|
86
|
-
if (index > -1) {
|
|
87
|
-
this.filesData.splice(index, 1);
|
|
88
|
-
if (event.file.id) {
|
|
89
|
-
this.outputRemoveIdEvent.emit(event.file.id);
|
|
90
|
-
}
|
|
91
|
-
this.outputFilesDataEvent.emit(this.filesData);
|
|
92
|
-
}
|
|
93
|
-
this._changeDetectorRef.markForCheck();
|
|
94
|
-
}
|
|
95
|
-
uploadAll() {
|
|
96
|
-
this.fileUploads.forEach((fileUpload) => {
|
|
97
|
-
if (fileUpload.id === null) {
|
|
98
|
-
fileUpload.upload();
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
this._changeDetectorRef.markForCheck();
|
|
102
|
-
}
|
|
103
|
-
removeAll() {
|
|
104
|
-
this.fileUploads.forEach((fileUpload) => { fileUpload.remove(); });
|
|
105
|
-
this._changeDetectorRef.markForCheck();
|
|
106
|
-
}
|
|
107
|
-
choose() {
|
|
108
|
-
this._elementRef.nativeElement.querySelector('#' + this.id).click();
|
|
109
|
-
}
|
|
110
|
-
getData() {
|
|
111
|
-
return Array.isArray(this.filesData) ? this.filesData : [];
|
|
112
|
-
}
|
|
113
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatUploadQueueComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CmatMediaWatcherService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
114
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: CmatUploadQueueComponent, isStandalone: true, selector: "cmat-upload-queue", inputs: { fileAlias: "fileAlias", filePath: "filePath", fileCategory: "fileCategory", required: "required", autoUpload: "autoUpload", multiple: "multiple", accept: "accept", title: "title", editMode: "editMode", filesData: "filesData" }, outputs: { outputRemoveIdEvent: "outputRemoveIdEvent", outputUploadIdEvent: "outputUploadIdEvent", outputFilesDataEvent: "outputFilesDataEvent" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDropOver($event)" } }, viewQueries: [{ propertyName: "fileUploads", predicate: i0.forwardRef(() => CmatUploadComponent), descendants: true }], exportAs: ["cmatUploadQueue"], ngImport: i0, template: "<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"space-x-1 print:hidden\">\r\n @if(!isHandSet){\r\n <button mat-raised-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">\u9009\u62E9</span>\r\n </button>\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-raised-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">\u4E0A\u4F20\u5168\u90E8</span></button>\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">\u5220\u9664\u5168\u90E8</span></button>\r\n }\r\n }@else {\r\n <button mat-icon-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-icon-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button mat-icon-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of getData(); track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>", dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CmatUploadComponent, selector: "cmat-upload", inputs: ["fileAlias", "filePath", "fileCategory", "editMode", "autoUpload", "id", "file"], outputs: ["removeEvent", "uploadEvent"], exportAs: ["cmatUpload"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
115
|
-
}
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatUploadQueueComponent, decorators: [{
|
|
117
|
-
type: Component,
|
|
118
|
-
args: [{ selector: 'cmat-upload-queue', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatUploadQueue', standalone: true, imports: [MatCardModule, MatListModule, MatButtonModule, MatIconModule, CmatUploadComponent], template: "<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"space-x-1 print:hidden\">\r\n @if(!isHandSet){\r\n <button mat-raised-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">\u9009\u62E9</span>\r\n </button>\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-raised-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">\u4E0A\u4F20\u5168\u90E8</span></button>\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">\u5220\u9664\u5168\u90E8</span></button>\r\n }\r\n }@else {\r\n <button mat-icon-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-icon-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button mat-icon-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of getData(); track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>" }]
|
|
119
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.CmatMediaWatcherService }, { type: i0.ElementRef }], propDecorators: { fileUploads: [{
|
|
120
|
-
type: ViewChildren,
|
|
121
|
-
args: [forwardRef(() => CmatUploadComponent)]
|
|
122
|
-
}], fileAlias: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], filePath: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], fileCategory: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], required: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], autoUpload: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], multiple: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], accept: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], title: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], editMode: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], filesData: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], outputRemoveIdEvent: [{
|
|
143
|
-
type: Output
|
|
144
|
-
}], outputUploadIdEvent: [{
|
|
145
|
-
type: Output
|
|
146
|
-
}], outputFilesDataEvent: [{
|
|
147
|
-
type: Output
|
|
148
|
-
}], onDrop: [{
|
|
149
|
-
type: HostListener,
|
|
150
|
-
args: ['drop', ['$event']]
|
|
151
|
-
}], onDropOver: [{
|
|
152
|
-
type: HostListener,
|
|
153
|
-
args: ['dragover', ['$event']]
|
|
154
|
-
}] } });
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXF1ZXVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLXF1ZXVlL3VwbG9hZC1xdWV1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvdXBsb2FkL3VwbG9hZC1xdWV1ZS91cGxvYWQtcXVldWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQVcxRCxNQUFNLE9BQU8sd0JBQXdCO0lBK0JqQyxZQUFvQixrQkFBcUMsRUFBVSx3QkFBaUQsRUFBVSxXQUF1QjtRQUFqSSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQVUsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUF5QjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBNUJySixjQUFTLEdBQVcsVUFBVSxDQUFDO1FBRy9CLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFJdEIsYUFB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QUUsZUFBZSx3VUFBRSxhQUFhLG9MQUFFLG1CQUFtQjs7NEZBRWxGLHdCQUF3QjtrQkFUcEMsU0FBUzsrQkFDSSxtQkFBbUIsaUJBRWQsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUM7cUpBR3ZDLFdBQVc7c0JBQS9ELFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUVuRCxTQUFTO3NCQURSLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVOLFNBQVM7c0JBRFIsS0FBSztnQkFHSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFrQlAsTUFBTTtzQkFETCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhaEMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFZpZXdDaGlsZHJlbixcclxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gICAgZm9yd2FyZFJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ21hdE1lZGlhV2F0Y2hlclNlcnZpY2UgfSBmcm9tICdjbWF0L3NlcnZpY2VzL21lZGlhLXdhdGNoZXInO1xyXG5pbXBvcnQgeyBDbWF0VXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC11cGxvYWQtcXVldWUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1xdWV1ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBleHBvcnRBczogJ2NtYXRVcGxvYWRRdWV1ZScsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW01hdENhcmRNb2R1bGUsIE1hdExpc3RNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgQ21hdFVwbG9hZENvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXRVcGxvYWRRdWV1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gQ21hdFVwbG9hZENvbXBvbmVudCkpIGZpbGVVcGxvYWRzOiBRdWVyeUxpc3Q8Q21hdFVwbG9hZENvbXBvbmVudD47XHJcbiAgICBASW5wdXQoKVxyXG4gICAgZmlsZUFsaWFzOiBzdHJpbmcgPSAnZmlsZURhdGEnO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBmaWxlUGF0aDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgZmlsZUNhdGVnb3J5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgYXV0b1VwbG9hZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYWNjZXB0OiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAn6ZmE5Lu2JztcclxuICAgIEBJbnB1dCgpIGVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgZmlsZXNEYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvdXRwdXRSZW1vdmVJZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgb3V0cHV0VXBsb2FkSWRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIG91dHB1dEZpbGVzRGF0YUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgcHVibGljIGlkID0gJ2NtYXR1cGxvYWQtJyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xyXG5cclxuICAgIGlzSGFuZFNldDogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9jbWF0TWVkaWFXYXRjaGVyU2VydmljZTogQ21hdE1lZGlhV2F0Y2hlclNlcnZpY2UsIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICB0aGlzLl9jbWF0TWVkaWFXYXRjaGVyU2VydmljZS5vbk1lZGlhQ2hhbmdlJFxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IG1hdGNoaW5nQWxpYXNlcyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGFuZFNldCA9ICFtYXRjaGluZ0FsaWFzZXMuaW5jbHVkZXMoJ2xnJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxyXG4gICAgb25Ecm9wKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcztcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjY2VwdD8uaW5jbHVkZXMoZmlsZS50eXBlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGZpbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcclxuICAgIG9uRHJvcE92ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZpbGVVcGxvYWQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyB0aGlzLmlkKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuICAgICAgICBmaWxlVXBsb2FkLm9uY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgKGZpbGVVcGxvYWQuZmlsZXM/Lmxlbmd0aCA/PyAwKTsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVVcGxvYWQuZmlsZXMhW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KHZvaWQgMCk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGQoZmlsZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmFjY2VwdCA9PT0gJycgfHwgdGhpcy5hY2NlcHQgPT09IHVuZGVmaW5lZCkgfHwgKHRoaXMuYWNjZXB0ICE9PSAnJyAmJiB0aGlzLmFjY2VwdC5pbmNsdWRlcyhmaWxlLnR5cGUpKSkge1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5maWxlc0RhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoISghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLmZpbGVzRGF0YS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc0RhdGEucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbGVVcGxvYWRzLmZpcnN0LmlkID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzRGF0YS5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlVXBsb2Fkcy5maXJzdC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBsb2FkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm91dHB1dFVwbG9hZElkRXZlbnQuZW1pdChldmVudC5pZCk7XHJcblxyXG4gICAgICAgIHRoaXMub3V0cHV0RmlsZXNEYXRhRXZlbnQuZW1pdCh0aGlzLmZpbGVzRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlKGV2ZW50OiBDbWF0VXBsb2FkQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbGVzRGF0YS5pbmRleE9mKGV2ZW50LmZpbGUpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZXNEYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5maWxlLmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFJlbW92ZUlkRXZlbnQuZW1pdChldmVudC5maWxlLmlkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5vdXRwdXRGaWxlc0RhdGFFdmVudC5lbWl0KHRoaXMuZmlsZXNEYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwbG9hZEFsbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGVVcGxvYWRzLmZvckVhY2goKGZpbGVVcGxvYWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGVVcGxvYWQuaWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGZpbGVVcGxvYWQudXBsb2FkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQWxsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsZVVwbG9hZHMuZm9yRWFjaCgoZmlsZVVwbG9hZCkgPT4geyBmaWxlVXBsb2FkLnJlbW92ZSgpIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBjaG9vc2UoKTogdm9pZCB7XHJcbiAgICAgICAgKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIHRoaXMuaWQpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZmlsZXNEYXRhKSA/IHRoaXMuZmlsZXNEYXRhIDogW107XHJcbiAgICB9XHJcbn1cclxuIiwiPG1hdC1jYXJkPlxyXG4gICAgPG1hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ0ZXh0LWxnXCI+XHJcbiAgICAgICAgICAgICAgICB7e3RpdGxlfX1cclxuICAgICAgICAgICAgICAgIEBpZihyZXF1aXJlZCl7XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2xlZ2VuZD5cclxuICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImhpZGRlblwiIFtpZF09XCJpZFwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiIFthY2NlcHRdPVwiYWNjZXB0XCIgLz5cclxuXHJcbiAgICBAaWYoZWRpdE1vZGUpe1xyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnMgY2xhc3M9XCJzcGFjZS14LTEgcHJpbnQ6aGlkZGVuXCI+XHJcbiAgICAgICAgQGlmKCFpc0hhbmRTZXQpe1xyXG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNob29zZSgpXCI+XHJcbiAgICAgICAgICAgIEBpZihhdXRvVXBsb2FkKXtcclxuICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidtYXRfb3V0bGluZTpmaWxlX3VwbG9hZCdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ21hdF9vdXRsaW5lOmFkZF9ib3gnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj7pgInmi6k8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgQGlmKGdldERhdGEoKS5sZW5ndGggPiAwJiZtdWx0aXBsZSl7XHJcbiAgICAgICAgQGlmKCFhdXRvVXBsb2FkKXtcclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cInVwbG9hZEFsbCgpXCI+PG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgICBbc3ZnSWNvbl09XCInbWF0X291dGxpbmU6ZmlsZV91cGxvYWQnXCI+PC9tYXQtaWNvbj48c3BhbiBjbGFzcz1cIm1sLTJcIj7kuIrkvKDlhajpg6g8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIChjbGljayk9XCJyZW1vdmVBbGwoKVwiPjxtYXQtaWNvblxyXG4gICAgICAgICAgICAgICAgW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19zb2xpZDp0cmFzaCdcIj48L21hdC1pY29uPjxzcGFuIGNsYXNzPVwibWwtMlwiPuWIoOmZpOWFqOmDqDwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2hvb3NlKClcIj5cclxuICAgICAgICAgICAgQGlmKGF1dG9VcGxvYWQpe1xyXG4gICAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ21hdF9vdXRsaW5lOmZpbGVfdXBsb2FkJ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInbWF0X291dGxpbmU6YWRkX2JveCdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIEBpZihnZXREYXRhKCkubGVuZ3RoID4gMCYmbXVsdGlwbGUpe1xyXG4gICAgICAgIEBpZighYXV0b1VwbG9hZCl7XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwidXBsb2FkQWxsKClcIj48bWF0LWljb25cclxuICAgICAgICAgICAgICAgIFtzdmdJY29uXT1cIidtYXRfb3V0bGluZTpmaWxlX3VwbG9hZCdcIj48L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJ3YXJuXCIgKGNsaWNrKT1cInJlbW92ZUFsbCgpXCI+PG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgICBbc3ZnSWNvbl09XCInaGVyb2ljb25zX3NvbGlkOnRyYXNoJ1wiPjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICAgIH1cclxuXHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8bWF0LWxpc3QgY2xhc3M9XCJib3JkZXItdFwiPlxyXG4gICAgICAgICAgICBAZm9yIChmaWxlIG9mIGdldERhdGEoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtIGNsYXNzPVwiY21hdC11cGxvYWQtZmlsZS1pdGVtIGgtZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPGNtYXQtdXBsb2FkIGNsYXNzPVwibXktMlwiIFtmaWxlQWxpYXNdPVwiZmlsZUFsaWFzXCIgW2ZpbGVQYXRoXT1cImZpbGVQYXRoXCIgW2ZpbGVDYXRlZ29yeV09XCJmaWxlQ2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdXRvVXBsb2FkXT1cImF1dG9VcGxvYWRcIiBbZWRpdE1vZGVdPVwiZWRpdE1vZGVcIiBbZmlsZV09XCJmaWxlXCIgW2lkXT1cImZpbGUuaWR8fG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyZW1vdmVFdmVudCk9XCJyZW1vdmUoJGV2ZW50KVwiICh1cGxvYWRFdmVudCk9XCJ1cGxvYWQoJGV2ZW50KVwiPjwvY21hdC11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvbWF0LWxpc3Q+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbjwvbWF0LWNhcmQ+Il19
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { NgClass } from '@angular/common';
|
|
2
|
-
import { HttpEventType } from '@angular/common/http';
|
|
3
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
4
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
-
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
7
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
8
|
-
import { saveAs } from 'file-saver-es';
|
|
9
|
-
import { Subject, takeUntil } from 'rxjs';
|
|
10
|
-
import { CmatBytesPipe } from 'cmat/pipes/bytes';
|
|
11
|
-
import { CmatUtilsService } from 'cmat/services/utils';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "./files.util.service";
|
|
14
|
-
import * as i2 from "@angular/material/button";
|
|
15
|
-
import * as i3 from "@angular/material/icon";
|
|
16
|
-
import * as i4 from "@angular/material/progress-bar";
|
|
17
|
-
import * as i5 from "@angular/material/tooltip";
|
|
18
|
-
export class CmatUploadComponent {
|
|
19
|
-
constructor(_fileService, _changeDetectorRef) {
|
|
20
|
-
this._fileService = _fileService;
|
|
21
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
22
|
-
this.fileAlias = 'fileData';
|
|
23
|
-
this.filePath = '';
|
|
24
|
-
this.fileCategory = '';
|
|
25
|
-
this.editMode = false;
|
|
26
|
-
this.autoUpload = true;
|
|
27
|
-
this.removeEvent = new EventEmitter();
|
|
28
|
-
this.uploadEvent = new EventEmitter();
|
|
29
|
-
this.progressPercentage = 0;
|
|
30
|
-
this.loaded = 0;
|
|
31
|
-
this.total = 0;
|
|
32
|
-
this.isUploading = false;
|
|
33
|
-
this._unsubscribeAll = new Subject();
|
|
34
|
-
}
|
|
35
|
-
get file() {
|
|
36
|
-
return this._file;
|
|
37
|
-
}
|
|
38
|
-
set file(file) {
|
|
39
|
-
this._file = file;
|
|
40
|
-
this.total = this._file.size;
|
|
41
|
-
}
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
43
|
-
get fileType() {
|
|
44
|
-
return CmatUtilsService.getFileType(this.file.type);
|
|
45
|
-
}
|
|
46
|
-
ngOnInit() {
|
|
47
|
-
if (this.autoUpload && this.id === null) {
|
|
48
|
-
this.upload();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
ngOnDestroy() {
|
|
52
|
-
this._unsubscribeAll.next(void 0);
|
|
53
|
-
this._unsubscribeAll.complete();
|
|
54
|
-
}
|
|
55
|
-
upload() {
|
|
56
|
-
this.isUploading = true;
|
|
57
|
-
const fileModel = {
|
|
58
|
-
id: null,
|
|
59
|
-
fileName: this.file.name,
|
|
60
|
-
length: this.file.size,
|
|
61
|
-
fileCategory: this.fileCategory,
|
|
62
|
-
filePath: this.filePath,
|
|
63
|
-
fileType: 'file',
|
|
64
|
-
data: this.file
|
|
65
|
-
};
|
|
66
|
-
fileModel.fileType = this.fileType;
|
|
67
|
-
const formData = new FormData();
|
|
68
|
-
formData.set('fileData', this._file, this._file.name);
|
|
69
|
-
formData.append('fileInfo', JSON.stringify(fileModel));
|
|
70
|
-
this._fileService.uploadFile(formData).pipe(takeUntil(this._unsubscribeAll)).subscribe((event) => {
|
|
71
|
-
if (event.type === HttpEventType.UploadProgress) {
|
|
72
|
-
this.progressPercentage = Math.floor(event.loaded * 100 / event.total);
|
|
73
|
-
this.loaded = event.loaded;
|
|
74
|
-
this.total = event.total;
|
|
75
|
-
}
|
|
76
|
-
if (event.type === HttpEventType.Response) {
|
|
77
|
-
this.id = event.body.id;
|
|
78
|
-
this.file.id = event.body.id;
|
|
79
|
-
this.isUploading = false;
|
|
80
|
-
}
|
|
81
|
-
this.uploadEvent.emit(this.file);
|
|
82
|
-
this._changeDetectorRef.markForCheck();
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
download() {
|
|
86
|
-
this._fileService.downloadFile(this.id).pipe(takeUntil(this._unsubscribeAll)).subscribe((file) => {
|
|
87
|
-
saveAs(new Blob([file.body]), this.file.fileName);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
remove() {
|
|
91
|
-
this.removeEvent.emit(this);
|
|
92
|
-
}
|
|
93
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatUploadComponent, deps: [{ token: i1.CmatFilesUtilService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: CmatUploadComponent, isStandalone: true, selector: "cmat-upload", inputs: { fileAlias: "fileAlias", filePath: "filePath", fileCategory: "fileCategory", editMode: "editMode", autoUpload: "autoUpload", id: "id", file: "file" }, outputs: { removeEvent: "removeEvent", uploadEvent: "uploadEvent" }, exportAs: ["cmatUpload"], ngImport: i0, template: "<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\"\r\n [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\"\r\n matTooltip=\"{{file.name}}\">{{file.name}}({{file.size | cmatBytes}})</span>\r\n <span class=\"space-x-1 print:hidden\">\r\n @if(id===null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button mat-icon-button color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage}}%</span><span> {{loaded | cmatBytes}} of {{total | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: CmatBytesPipe, name: "cmatBytes" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
95
|
-
}
|
|
96
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatUploadComponent, decorators: [{
|
|
97
|
-
type: Component,
|
|
98
|
-
args: [{ selector: 'cmat-upload', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatUpload', standalone: true, imports: [MatButtonModule, MatIconModule, MatProgressBarModule, MatTooltipModule, CmatBytesPipe, NgClass], template: "<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\"\r\n [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\"\r\n matTooltip=\"{{file.name}}\">{{file.name}}({{file.size | cmatBytes}})</span>\r\n <span class=\"space-x-1 print:hidden\">\r\n @if(id===null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button mat-icon-button color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage}}%</span><span> {{loaded | cmatBytes}} of {{total | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>" }]
|
|
99
|
-
}], ctorParameters: () => [{ type: i1.CmatFilesUtilService }, { type: i0.ChangeDetectorRef }], propDecorators: { fileAlias: [{
|
|
100
|
-
type: Input
|
|
101
|
-
}], filePath: [{
|
|
102
|
-
type: Input
|
|
103
|
-
}], fileCategory: [{
|
|
104
|
-
type: Input
|
|
105
|
-
}], editMode: [{
|
|
106
|
-
type: Input
|
|
107
|
-
}], autoUpload: [{
|
|
108
|
-
type: Input
|
|
109
|
-
}], id: [{
|
|
110
|
-
type: Input
|
|
111
|
-
}], removeEvent: [{
|
|
112
|
-
type: Output
|
|
113
|
-
}], uploadEvent: [{
|
|
114
|
-
type: Output
|
|
115
|
-
}], file: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy91cGxvYWQvdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFhdkQsTUFBTSxPQUFPLG1CQUFtQjtJQThCNUIsWUFBb0IsWUFBa0MsRUFBVSxrQkFBcUM7UUFBakYsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTVCckcsY0FB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UixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUM7eUhBSXpHLFNBQVM7c0JBRFIsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdOLEVBQUU7c0JBREQsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBZ0JILElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlci1lcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbWF0Qnl0ZXNQaXBlIH0gZnJvbSAnY21hdC9waXBlcy9ieXRlcyc7XHJcbmltcG9ydCB7IENtYXRVdGlsc1NlcnZpY2UgfSBmcm9tICdjbWF0L3NlcnZpY2VzL3V0aWxzJztcclxuaW1wb3J0IHsgRmlsZU1vZGVsIH0gZnJvbSAnLi9maWxlcy50eXBlJztcclxuaW1wb3J0IHsgQ21hdEZpbGVzVXRpbFNlcnZpY2UgfSBmcm9tICcuL2ZpbGVzLnV0aWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC11cGxvYWQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBleHBvcnRBczogJ2NtYXRVcGxvYWQnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdFByb2dyZXNzQmFyTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBDbWF0Qnl0ZXNQaXBlLCBOZ0NsYXNzXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ21hdFVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBmaWxlQWxpYXM6IHN0cmluZyA9ICdmaWxlRGF0YSc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGZpbGVQYXRoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZmlsZUNhdGVnb3J5OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBhdXRvVXBsb2FkID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgaWQ6IHN0cmluZztcclxuXHJcbiAgICBAT3V0cHV0KCkgcmVtb3ZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENtYXRVcGxvYWRDb21wb25lbnQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgdXBsb2FkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBwcm9ncmVzc1BlcmNlbnRhZ2U6IG51bWJlciA9IDA7XHJcbiAgICBsb2FkZWQ6IG51bWJlciA9IDA7XHJcbiAgICB0b3RhbDogbnVtYmVyID0gMDtcclxuICAgIGlzVXBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfZmlsZTogYW55O1xyXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZmlsZVNlcnZpY2U6IENtYXRGaWxlc1V0aWxTZXJ2aWNlLCBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBmaWxlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGU7XHJcbiAgICB9XHJcbiAgICBzZXQgZmlsZShmaWxlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9maWxlID0gZmlsZTtcclxuICAgICAgICB0aGlzLnRvdGFsID0gdGhpcy5fZmlsZS5zaXplO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgZmlsZVR5cGUoKTogJ2NzdicgfCAnZ2lmJyB8ICd3b3JkJyB8ICdleGNlbCcgfCAnanBnJyB8ICdvdXRsb29rJyB8ICdwZGYnIHwgJ3BuZycgfCAncHB0JyB8ICdmaWxlJyB8ICd0ZXh0JyB8ICd2aWRlbycgfCAnemlwJyB7XHJcbiAgICAgICAgcmV0dXJuIENtYXRVdGlsc1NlcnZpY2UuZ2V0RmlsZVR5cGUodGhpcy5maWxlLnR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGxvYWQgJiYgdGhpcy5pZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQodm9pZCAwKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB1cGxvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZmlsZU1vZGVsID0ge1xyXG4gICAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMuZmlsZS5zaXplLFxyXG4gICAgICAgICAgICBmaWxlQ2F0ZWdvcnk6IHRoaXMuZmlsZUNhdGVnb3J5LFxyXG4gICAgICAgICAgICBmaWxlUGF0aDogdGhpcy5maWxlUGF0aCxcclxuICAgICAgICAgICAgZmlsZVR5cGU6ICdmaWxlJyxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlXHJcbiAgICAgICAgfSBhcyBGaWxlTW9kZWw7XHJcblxyXG4gICAgICAgIGZpbGVNb2RlbC5maWxlVHlwZSA9IHRoaXMuZmlsZVR5cGU7XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcblxyXG4gICAgICAgIGZvcm1EYXRhLnNldCgnZmlsZURhdGEnLCB0aGlzLl9maWxlLCB0aGlzLl9maWxlLm5hbWUpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZUluZm8nLCBKU09OLnN0cmluZ2lmeShmaWxlTW9kZWwpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZmlsZVNlcnZpY2UudXBsb2FkRmlsZShmb3JtRGF0YSkucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IE1hdGguZmxvb3IoZXZlbnQubG9hZGVkICogMTAwIC8gZXZlbnQudG90YWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBldmVudC5sb2FkZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gZXZlbnQudG90YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSBldmVudC5ib2R5LmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlLmlkID0gZXZlbnQuYm9keS5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRXZlbnQuZW1pdCh0aGlzLmZpbGUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZmlsZVNlcnZpY2UuZG93bmxvYWRGaWxlKHRoaXMuaWQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcclxuICAgICAgICApLnN1YnNjcmliZSgoZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHNhdmVBcyhuZXcgQmxvYihbZmlsZS5ib2R5XSksIHRoaXMuZmlsZS5maWxlTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC0xXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tc2l6ZS02IHRleHQtaGludFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT1cImZpbGVUeXBlXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmbGV4IGZsZXgtYXV0byB3aGl0ZXNwYWNlLW5vd3JhcCBvdmVyZmxvdy14LWhpZGRlbiB0ZXh0LWVsbGlwc2lzXCJcclxuICAgICAgbWF0VG9vbHRpcD1cInt7ZmlsZS5uYW1lfX1cIj57e2ZpbGUubmFtZX19KHt7ZmlsZS5zaXplIHwgY21hdEJ5dGVzfX0pPC9zcGFuPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzcGFjZS14LTEgcHJpbnQ6aGlkZGVuXCI+XHJcbiAgICAgIEBpZihpZD09PW51bGwpe1xyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInctOCBtaW4taC04IGgtOCBtYXgtdy04XCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCcgOiBpc1VwbG9hZGluZ31cIlxyXG4gICAgICAgIChjbGljayk9XCJ1cGxvYWQoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tc2l6ZS01XCIgW3N2Z0ljb25dPVwiJ21hdF9vdXRsaW5lOmZpbGVfdXBsb2FkJ1wiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcblxyXG4gICAgICBAaWYoaWQhPT1udWxsKXtcclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJ3LTggbWluLWgtOCBoLTggbWF4LXctOFwiIChjbGljayk9XCJkb3dubG9hZCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1zaXplLTVcIiBbc3ZnSWNvbl09XCInbWF0X291dGxpbmU6ZmlsZV9kb3dubG9hZCdcIj48L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG5cclxuICAgICAgQGlmKGVkaXRNb2RlKXtcclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJ3YXJuXCIgY2xhc3M9XCJ3LTggbWluLWgtOCBoLTggbWF4LXctOFwiIChjbGljayk9XCJyZW1vdmUoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tc2l6ZS01XCIgW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19zb2xpZDp0cmFzaCdcIj48L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIEBpZihpZD09PW51bGwpe1xyXG4gIDxtYXQtcHJvZ3Jlc3MtYmFyIFt2YWx1ZV09XCJwcm9ncmVzc1BlcmNlbnRhZ2VcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgPGRpdiBjbGFzcz1cInRleHQtc20gYmxvY2sgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3cteC1oaWRkZW4gdGV4dC1lbGxpcHNpc1wiPlxyXG4gICAgPHNwYW4+e3twcm9ncmVzc1BlcmNlbnRhZ2V9fSU8L3NwYW4+PHNwYW4+IHt7bG9hZGVkIHwgY21hdEJ5dGVzfX0gb2Yge3t0b3RhbCB8IGNtYXRCeXRlc319PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+Il19
|