ngx-tethys 17.0.1 → 17.0.2
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/CHANGELOG.md +9 -0
- package/action/action.component.d.ts +3 -0
- package/affix/affix.component.d.ts +2 -0
- package/alert/alert.component.d.ts +1 -0
- package/anchor/anchor.component.d.ts +3 -0
- package/arrow-switcher/arrow-switcher.component.d.ts +1 -0
- package/autocomplete/autocomplete.component.d.ts +2 -3
- package/autocomplete/autocomplete.trigger.directive.d.ts +3 -0
- package/avatar/avatar.component.d.ts +4 -0
- package/back-top/back-top.component.d.ts +1 -0
- package/badge/badge.component.d.ts +5 -0
- package/button/button-icon.component.d.ts +2 -0
- package/button/button.component.d.ts +2 -0
- package/card/card.component.d.ts +3 -0
- package/card/content.component.d.ts +2 -1
- package/carousel/carousel.component.d.ts +5 -0
- package/cascader/cascader-li.component.d.ts +9 -2
- package/cascader/cascader-search-option.component.d.ts +7 -2
- package/cascader/cascader.component.d.ts +23 -2
- package/cascader/styles/cascader.scss +1 -0
- package/cascader/types.d.ts +1 -0
- package/checkbox/checkbox.component.d.ts +1 -0
- package/collapse/collapse-item.component.d.ts +2 -0
- package/collapse/collapse.component.d.ts +1 -0
- package/color-picker/color-picker-panel.component.d.ts +1 -0
- package/color-picker/color-picker.component.d.ts +7 -1
- package/copy/copy.directive.d.ts +1 -0
- package/core/behaviors/decorators.d.ts +6 -0
- package/date-picker/abstract-picker.component.d.ts +8 -1
- package/date-picker/abstract-picker.directive.d.ts +4 -0
- package/date-picker/base-picker.component.d.ts +2 -0
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -0
- package/date-picker/lib/popups/inner-popup.component.d.ts +1 -0
- package/date-picker/picker.component.d.ts +1 -0
- package/date-range/date-range.component.d.ts +2 -0
- package/dialog/body/dialog-body.component.d.ts +2 -1
- package/dialog/footer/dialog-footer.component.d.ts +1 -0
- package/dialog/header/dialog-header.component.d.ts +1 -0
- package/divider/divider.component.d.ts +2 -0
- package/drag-drop/drag-handle.directive.d.ts +1 -0
- package/drag-drop/drag.directive.d.ts +1 -0
- package/drag-drop/drop-container.directive.d.ts +1 -0
- package/dropdown/dropdown-menu-item.directive.d.ts +3 -1
- package/dropdown/dropdown-menu.component.d.ts +1 -0
- package/dropdown/dropdown.directive.d.ts +3 -0
- package/empty/empty.component.d.ts +1 -0
- package/esm2022/action/action.component.mjs +9 -22
- package/esm2022/affix/affix.component.mjs +8 -15
- package/esm2022/alert/alert.component.mjs +5 -10
- package/esm2022/anchor/anchor.component.mjs +10 -20
- package/esm2022/arrow-switcher/arrow-switcher.component.mjs +5 -11
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -23
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +9 -20
- package/esm2022/avatar/avatar.component.mjs +14 -30
- package/esm2022/back-top/back-top.component.mjs +6 -10
- package/esm2022/badge/badge.component.mjs +15 -37
- package/esm2022/button/button-icon.component.mjs +9 -20
- package/esm2022/button/button.component.mjs +7 -16
- package/esm2022/card/card.component.mjs +6 -20
- package/esm2022/card/content.component.mjs +5 -6
- package/esm2022/carousel/carousel.component.mjs +13 -30
- package/esm2022/cascader/cascader-li.component.mjs +16 -31
- package/esm2022/cascader/cascader-search-option.component.mjs +12 -21
- package/esm2022/cascader/cascader.component.mjs +32 -52
- package/esm2022/cascader/types.mjs +1 -1
- package/esm2022/checkbox/checkbox.component.mjs +7 -13
- package/esm2022/collapse/collapse-item.component.mjs +8 -15
- package/esm2022/collapse/collapse.component.mjs +5 -10
- package/esm2022/color-picker/color-picker-panel.component.mjs +5 -10
- package/esm2022/color-picker/color-picker.component.mjs +17 -37
- package/esm2022/copy/copy.directive.mjs +5 -10
- package/esm2022/core/behaviors/decorators.mjs +7 -44
- package/esm2022/date-picker/abstract-picker.component.mjs +21 -45
- package/esm2022/date-picker/abstract-picker.directive.mjs +11 -27
- package/esm2022/date-picker/base-picker.component.mjs +8 -15
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -10
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +7 -6
- package/esm2022/date-picker/picker.component.mjs +6 -10
- package/esm2022/date-range/date-range.component.mjs +7 -15
- package/esm2022/dialog/body/dialog-body.component.mjs +6 -6
- package/esm2022/dialog/footer/dialog-footer.component.mjs +6 -13
- package/esm2022/dialog/header/dialog-header.component.mjs +6 -10
- package/esm2022/divider/divider.component.mjs +7 -15
- package/esm2022/drag-drop/drag-handle.directive.mjs +5 -13
- package/esm2022/drag-drop/drag.directive.mjs +5 -11
- package/esm2022/drag-drop/drop-container.directive.mjs +5 -10
- package/esm2022/dropdown/dropdown-menu-item.directive.mjs +9 -19
- package/esm2022/dropdown/dropdown-menu.component.mjs +6 -9
- package/esm2022/dropdown/dropdown.directive.mjs +8 -22
- package/esm2022/empty/empty.component.mjs +7 -13
- package/esm2022/flexible-text/flexible-text.component.mjs +4 -11
- package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -10
- package/esm2022/form/form-group-label.directive.mjs +6 -6
- package/esm2022/form/form-group.component.mjs +13 -17
- package/esm2022/icon/icon.component.mjs +6 -20
- package/esm2022/image/image.directive.mjs +7 -15
- package/esm2022/input/input-search.component.mjs +6 -11
- package/esm2022/input/input.component.mjs +7 -15
- package/esm2022/input-number/input-number.component.mjs +12 -25
- package/esm2022/layout/header.component.mjs +9 -19
- package/esm2022/layout/sidebar-header.component.mjs +5 -10
- package/esm2022/layout/sidebar.component.mjs +22 -45
- package/esm2022/list/list.component.mjs +5 -11
- package/esm2022/list/selection/selection-list.mjs +13 -10
- package/esm2022/loading/loading.component.mjs +9 -20
- package/esm2022/menu/group/menu-group.component.mjs +12 -38
- package/esm2022/menu/item/action/menu-item-action.component.mjs +5 -10
- package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -10
- package/esm2022/menu/menu.component.mjs +5 -10
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +6 -6
- package/esm2022/nav/nav-ink-bar.directive.mjs +7 -15
- package/esm2022/nav/nav-item.directive.mjs +10 -20
- package/esm2022/nav/nav.component.mjs +12 -25
- package/esm2022/pagination/pagination.component.mjs +18 -68
- package/esm2022/popover/popover.directive.mjs +12 -33
- package/esm2022/progress/progress-circle.component.mjs +9 -20
- package/esm2022/progress/progress-strip.component.mjs +5 -11
- package/esm2022/progress/progress.component.mjs +11 -23
- package/esm2022/property/properties.component.mjs +5 -10
- package/esm2022/property/property-item.component.mjs +8 -15
- package/esm2022/property-operation/property-operation.component.mjs +16 -37
- package/esm2022/radio/group/radio-group.component.mjs +6 -21
- package/esm2022/rate/rate-item.component.mjs +5 -10
- package/esm2022/rate/rate.component.mjs +16 -25
- package/esm2022/resizable/resizable.directive.mjs +24 -55
- package/esm2022/resizable/resize-handle.component.mjs +6 -10
- package/esm2022/resizable/resize-handles.component.mjs +5 -10
- package/esm2022/segment/segment-item.component.mjs +5 -10
- package/esm2022/segment/segment.component.mjs +7 -16
- package/esm2022/select/custom-select/custom-select.component.mjs +30 -65
- package/esm2022/select/native-select/native-select.component.mjs +6 -10
- package/esm2022/shared/base-form-check.component.mjs +10 -20
- package/esm2022/shared/directives/thy-autofocus.directive.mjs +10 -15
- package/esm2022/shared/directives/thy-scroll.directive.mjs +6 -13
- package/esm2022/shared/directives/thy-show.mjs +5 -11
- package/esm2022/shared/option/group/option-group.component.mjs +5 -10
- package/esm2022/shared/option/list-option/list-option.component.mjs +6 -13
- package/esm2022/shared/option/option.component.mjs +5 -11
- package/esm2022/shared/select/select-control/select-control.component.mjs +17 -44
- package/esm2022/skeleton/skeleton-circle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton.component.mjs +5 -10
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/paragraph.component.mjs +6 -9
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +6 -6
- package/esm2022/slider/slider.component.mjs +18 -35
- package/esm2022/space/space.component.mjs +6 -10
- package/esm2022/stepper/step-header.component.mjs +9 -20
- package/esm2022/stepper/stepper.component.mjs +7 -16
- package/esm2022/switch/switch.component.mjs +12 -17
- package/esm2022/table/table-column.component.mjs +9 -31
- package/esm2022/table/table-skeleton.component.mjs +8 -14
- package/esm2022/table/table.component.mjs +32 -83
- package/esm2022/tabs/tab.component.mjs +5 -10
- package/esm2022/tabs/tabs.component.mjs +8 -15
- package/esm2022/tag/tag.component.mjs +6 -10
- package/esm2022/time-picker/time-picker-panel.component.mjs +8 -15
- package/esm2022/time-picker/time-picker.component.mjs +20 -46
- package/esm2022/timeline/timeline.component.mjs +5 -10
- package/esm2022/tooltip/tooltip.directive.mjs +11 -34
- package/esm2022/tree/tree-node.component.mjs +17 -40
- package/esm2022/tree/tree.component.mjs +19 -47
- package/esm2022/tree-select/tree-select.component.mjs +18 -40
- package/esm2022/upload/file-select-base.mjs +7 -6
- package/esm2022/upload/file-select.component.mjs +11 -26
- package/esm2022/version.mjs +2 -2
- package/esm2022/vote/vote.component.mjs +11 -33
- package/esm2022/watermark/watermark.directive.mjs +6 -10
- package/fesm2022/ngx-tethys-action.mjs +9 -21
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-affix.mjs +6 -14
- package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +4 -9
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +8 -19
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -10
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +14 -39
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +14 -29
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-back-top.mjs +5 -9
- package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +14 -36
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +13 -30
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +8 -23
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +12 -29
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +55 -95
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +5 -12
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +10 -20
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +19 -42
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +4 -9
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +6 -43
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +45 -93
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +6 -14
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +13 -21
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +6 -14
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +10 -25
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +19 -42
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +5 -12
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +3 -10
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +19 -25
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +5 -19
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +7 -14
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +11 -24
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +10 -21
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +31 -64
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +16 -18
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +8 -19
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +20 -55
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +28 -55
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +17 -67
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +11 -32
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-progress.mjs +20 -45
- package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +14 -36
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +10 -21
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +5 -19
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +18 -30
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +29 -66
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +10 -21
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +32 -70
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +49 -105
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +20 -38
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +6 -5
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +17 -34
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +5 -9
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +13 -31
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +11 -16
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +43 -120
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +10 -20
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +5 -9
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +24 -55
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +4 -9
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +10 -33
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +17 -39
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +33 -82
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +15 -28
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +10 -32
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +5 -9
- package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/flexible-text/flexible-text.component.d.ts +1 -0
- package/form/form-group-error/form-group-error.component.d.ts +1 -0
- package/form/form-group-label.directive.d.ts +2 -1
- package/form/form-group.component.d.ts +5 -2
- package/icon/icon.component.d.ts +3 -0
- package/image/image.directive.d.ts +2 -0
- package/input/input-search.component.d.ts +1 -0
- package/input/input.component.d.ts +2 -0
- package/input-number/input-number.component.d.ts +4 -0
- package/layout/header.component.d.ts +5 -2
- package/layout/sidebar-header.component.d.ts +1 -0
- package/layout/sidebar.component.d.ts +14 -4
- package/list/list.component.d.ts +1 -0
- package/list/selection/selection-list.d.ts +4 -1
- package/loading/loading.component.d.ts +4 -2
- package/menu/group/menu-group.component.d.ts +6 -0
- package/menu/item/action/menu-item-action.component.d.ts +1 -0
- package/menu/item/name/menu-item-name.component.d.ts +1 -0
- package/menu/menu.component.d.ts +1 -0
- package/nav/icon-nav/icon-nav-link.directive.d.ts +2 -1
- package/nav/nav-ink-bar.directive.d.ts +2 -0
- package/nav/nav-item.directive.d.ts +3 -0
- package/nav/nav.component.d.ts +4 -0
- package/package.json +1 -1
- package/pagination/pagination.component.d.ts +11 -0
- package/popover/popover.directive.d.ts +5 -0
- package/progress/progress-circle.component.d.ts +3 -0
- package/progress/progress-strip.component.d.ts +1 -0
- package/progress/progress.component.d.ts +3 -0
- package/property/properties.component.d.ts +1 -0
- package/property/property-item.component.d.ts +2 -0
- package/property-operation/property-operation.component.d.ts +5 -0
- package/radio/group/radio-group.component.d.ts +2 -2
- package/rate/rate-item.component.d.ts +1 -0
- package/rate/rate.component.d.ts +5 -1
- package/resizable/resizable.directive.d.ts +10 -0
- package/resizable/resize-handle.component.d.ts +1 -0
- package/resizable/resize-handles.component.d.ts +1 -0
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +1 -0
- package/segment/segment.component.d.ts +2 -0
- package/select/custom-select/custom-select.component.d.ts +12 -1
- package/select/native-select/native-select.component.d.ts +1 -0
- package/shared/base-form-check.component.d.ts +2 -0
- package/shared/directives/thy-autofocus.directive.d.ts +3 -1
- package/shared/directives/thy-scroll.directive.d.ts +1 -0
- package/shared/directives/thy-show.d.ts +1 -0
- package/shared/option/group/option-group.component.d.ts +1 -0
- package/shared/option/list-option/list-option.component.d.ts +1 -0
- package/shared/option/option.component.d.ts +1 -0
- package/shared/option/styles/select-dropdown.scss +1 -0
- package/shared/select/select-control/select-control.component.d.ts +7 -0
- package/skeleton/skeleton-circle.component.d.ts +1 -0
- package/skeleton/skeleton-rectangle.component.d.ts +1 -0
- package/skeleton/skeleton.component.d.ts +1 -0
- package/skeleton/stylized/bullet-list.component.d.ts +1 -0
- package/skeleton/stylized/list.component.d.ts +1 -0
- package/skeleton/stylized/paragraph.component.d.ts +1 -0
- package/slide/slide-body/slide-body-section.component.d.ts +2 -1
- package/slider/slider.component.d.ts +6 -1
- package/space/space.component.d.ts +1 -0
- package/stepper/step-header.component.d.ts +3 -0
- package/stepper/stepper.component.d.ts +2 -0
- package/switch/switch.component.d.ts +3 -1
- package/table/table-column.component.d.ts +7 -2
- package/table/table-skeleton.component.d.ts +2 -0
- package/table/table.component.d.ts +14 -0
- package/tabs/tab.component.d.ts +1 -0
- package/tabs/tabs.component.d.ts +2 -0
- package/tag/tag.component.d.ts +1 -0
- package/time-picker/time-picker-panel.component.d.ts +2 -0
- package/time-picker/time-picker.component.d.ts +6 -2
- package/timeline/timeline.component.d.ts +1 -0
- package/tooltip/tooltip.directive.d.ts +5 -0
- package/tree/tree-node.component.d.ts +7 -0
- package/tree/tree.component.d.ts +8 -0
- package/tree-select/tree-select.component.d.ts +7 -0
- package/upload/file-select-base.d.ts +1 -0
- package/upload/file-select.component.d.ts +3 -0
- package/vote/vote.component.d.ts +4 -2
- package/watermark/watermark.directive.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-select-base.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n acceptType?: string;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n acceptType: '',\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '.ico': 'image/vnd.microsoft.icon',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { coerceNumberValue, isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, NgZone } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @private\n */\n@Directive()\nexport class FileSelectBaseDirective {\n acceptType: string;\n sizeThreshold: number;\n sizeExceedsHandler: ThySizeExceedsHandler;\n\n @Input() set thySizeThreshold(value: number) {\n const sizeThreshold = coerceNumberValue(value);\n if (isNumber(sizeThreshold)) {\n this.sizeThreshold = sizeThreshold;\n }\n }\n\n @Input() set thySizeExceedsHandler(value: ThySizeExceedsHandler) {\n if (value) {\n this.sizeExceedsHandler = value;\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n public ngZone?: NgZone\n ) {\n this.sizeThreshold = defaultConfig.sizeThreshold;\n this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;\n this.acceptType = mimeTypeConvert(defaultConfig.acceptType);\n }\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.sizeThreshold\n };\n return this.sizeExceedsHandler(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: EventEmitter<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.sizeThreshold && this.sizeThreshold > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","import { isEmpty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n standalone: true\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit, OnDestroy {\n @HostBinding('class.drop-over')\n @HostBinding('class.thy-drop-over')\n isDragOver = false;\n private dragOverCustomClass: string;\n\n @Input() set thyFileDropClassName(value: string) {\n this.dragOverCustomClass = value;\n }\n\n @Output() thyOnDrop = new EventEmitter();\n\n private ngUnsubscribe$ = new Subject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver = true;\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(event.dataTransfer ? Array.from(event.dataTransfer.files) : []);\n if (!isEmpty(files)) {\n this.selectFiles(event, Array.from(event.dataTransfer.files), this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if (item['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = item['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n if (this.acceptType && this.acceptType != '*/*') {\n return items.filter(item => {\n return this.acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n if (this.dragOverCustomClass) {\n if (this.isDragOver) {\n this.renderer.addClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n }\n }\n }\n\n private setDragOverState(isDragOver: boolean) {\n this.isDragOver = isDragOver;\n }\n\n private resetDragOver() {\n this.setDragOverState(false);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","import { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Component, ElementRef, EventEmitter, Inject, Input, NgZone, OnDestroy, Output, ViewChild } from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\nimport { InputBoolean, InputNumber } from 'ngx-tethys/core';\n\n/**\n * 文件上传组件\n * @name thy-file-select,[thyFileSelect]\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html',\n standalone: true\n})\nexport class ThyFileSelect extends FileSelectBaseDirective implements OnDestroy {\n private multiple: boolean;\n\n private acceptFolder: boolean;\n\n /**\n * 文件选择事件\n */\n @Output() thyOnFileSelect = new EventEmitter();\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef<HTMLInputElement>;\n\n /**\n * 文件是否多选\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyMultiple(value: boolean) {\n this.multiple = coerceBooleanProperty(value);\n if (this.multiple) {\n this.fileInput.nativeElement.setAttribute('multiple', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('multiple');\n }\n }\n\n @Input()\n @InputBoolean()\n set thyAcceptFolder(value: boolean) {\n this.acceptFolder = coerceBooleanProperty(value);\n if (this.acceptFolder) {\n this.fileInput.nativeElement.setAttribute('webkitdirectory', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('webkitdirectory');\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n * @type Array<string> | string\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n /**\n * 文件上传大小限制,单位`kb`,`0`表示没有任何限制\n */\n @Input()\n @InputNumber()\n set thySizeThreshold(value: number) {\n this.sizeThreshold = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor(public elementRef: ElementRef, @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig, ngZone: NgZone) {\n super(elementRef, defaultConfig);\n\n ngZone.runOutsideAngular(() =>\n fromEvent(elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.fileInput.nativeElement.click();\n })\n );\n }\n\n selectFile($event: Event) {\n const files = this.fileInput.nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput.nativeElement.value = '';\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"acceptType\"\n/>\n","import { coerceArray, humanizeBytes } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @public\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n * 进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度,比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间,比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @public\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n constructor(private xhrFactory: XhrFactory) {}\n\n private secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new Date().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new Date().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new Date().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new Date().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelect } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, ThyFileSelect, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER],\n exports: [ThyFileSelect, ThyFileDropDirective]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MAUa,0BAA0B,GAAG,IAAI,cAAc,CAAkB,8BAA8B,EAAE;AAEjG,MAAA,mCAAmC,GAAG;AAC/C,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,QAAQ,EAAE;AACN,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,kBAAkB,EAAE,kBAAkB;AACzC,KAAA;EACH;AAEI,SAAU,kBAAkB,CAAC,KAAgC,EAAA;AAC/D,IAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;AAC/C,QAAA,MAAM,mBAAmB,GAAG,KAAK,CAAC,YAAY;aACzC,GAAG,CAAC,IAAI,IAAG;YACR,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;AACpD,SAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,CAAc,WAAA,EAAA,mBAAmB,CAA4B,yBAAA,EAAA,KAAK,CAAC,aAAa,CAAE,CAAA,CAAC,CAAC;KACrG;AACL;;AC9BA;AACO,MAAM,QAAQ,GAAG;AACpB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,MAAM,EAAE,yCAAyC;AACjD,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,QAAQ,EAAE,0BAA0B;AACpC,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,MAAM,EAAE,4FAA4F;AACpG,IAAA,OAAO,EAAE,4FAA4F;AACrG,IAAA,MAAM,EAAE,uGAAuG;AAC/G,IAAA,OAAO,EAAE,uGAAuG;AAChH,IAAA,OAAO,EAAE,uDAAuD;AAChE,IAAA,OAAO,EAAE,gDAAgD;AACzD,IAAA,OAAO,EAAE,sEAAsE;AAC/E,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,OAAO,EAAE,oBAAoB;AAC7B,IAAA,KAAK,EAAE,oBAAoB;AAC3B,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,KAAK,EAAE,0BAA0B;AACjC,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,mBAAmB;AAC3B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,MAAM,EAAE,oCAAoC;AAC5C,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,OAAO,EAAE,WAAW;AACpB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,MAAM,EAAE,4BAA4B;AACpC,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,MAAM,EAAE,+BAA+B;AACvC,IAAA,MAAM,EAAE,yGAAyG;AACjH,IAAA,OAAO,EAAE,yGAAyG;AAClH,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,OAAO,EAAE,sBAAsB;AAC/B,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,MAAM,EAAE,mBAAmB;AAC3B,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,MAAM,EAAE,gBAAgB;AACxB,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,IAAI,EAAE,wBAAwB;AAC9B,IAAA,MAAM,EAAE,8BAA8B;AACtC,IAAA,MAAM,EAAE,0BAA0B;AAClC,IAAA,EAAE,EAAE,KAAK;CACZ;;ACpEK,SAAU,eAAe,CAAC,KAA6B,EAAA;AACzD,IAAA,IAAI,UAAyB,CAAC;IAC9B,MAAM,WAAW,GAAkB,EAAE,CAAC;AACtC,IAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;QAChB,UAAU,GAAG,KAAsB,CAAC;KACvC;AAAM,SAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACjC;SAAM;QACH,UAAU,GAAG,EAAE,CAAC;KACnB;AAED,IAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;AACnB,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;gBACb,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aACjC;iBAAM;AACH,gBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;AACL,SAAC,CAAC,CAAC;KACN;AACD,IAAA,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC;;AClBA;;AAEG;MAEU,uBAAuB,CAAA;IAKhC,IAAa,gBAAgB,CAAC,KAAa,EAAA;AACvC,QAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;SACtC;KACJ;IAED,IAAa,qBAAqB,CAAC,KAA4B,EAAA;QAC3D,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;SACnC;KACJ;AAED;;AAEG;IACH,IACI,aAAa,CAAC,KAA6B,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;KAC5C;AAED,IAAA,WAAA,CACW,UAAsB,EACc,aAA8B,EAClE,MAAe,EAAA;QAFf,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACc,IAAa,CAAA,aAAA,GAAb,aAAa,CAAiB;QAClE,IAAM,CAAA,MAAA,GAAN,MAAM,CAAS;AAEtB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC;AACjD,QAAA,IAAI,CAAC,kBAAkB,GAAG,aAAa,CAAC,kBAAkB,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;KAC/D;IAED,iBAAiB,CAAC,KAAY,EAAE,KAAa,EAAA;QACzC,IAAI,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AACnF,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,MAAM,iBAAiB,GAAG;AACtB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,YAAY,EAAE,gBAAgB;AAC9B,gBAAA,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,IAAI,CAAC,aAAa;aACpC,CAAC;AACF,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;SACrD;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,WAAW,CAAC,KAAY,EAAE,KAAa,EAAE,YAA8C,EAAA;QACnF,IAAI,YAAY,GAAkB,KAAK,CAAC;QACxC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YAC9C,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACvD;QACD,IAAI,YAAY,EAAE;YACd,YAAY,CAAC,IAAI,CAAC;AACd,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,WAAW,EAAE,KAAK;AACrB,aAAA,CAAC,CAAC;SACN;KACJ;AA7DQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,4CA4BpB,0BAA0B,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGA5B7B,uBAAuB,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,SAAS;;0BA6BD,MAAM;2BAAC,0BAA0B,CAAA;8DAvBzB,gBAAgB,EAAA,CAAA;sBAA5B,KAAK;gBAOO,qBAAqB,EAAA,CAAA;sBAAjC,KAAK;gBAUF,aAAa,EAAA,CAAA;sBADhB,KAAK;;;ACVV;;AAEG;AAKG,MAAO,oBAAqB,SAAQ,uBAAuB,CAAA;IAM7D,IAAa,oBAAoB,CAAC,KAAa,EAAA;AAC3C,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;KACpC;AAMD,IAAA,WAAA,CACW,UAAsB,EACtB,QAAmB,EACnB,MAAc,EACsB,aAA8B,EAAA;AAEzE,QAAA,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAL1B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACnB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACsB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAiB;QAf7E,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAOT,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE,CAAC;AAEjC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;KAS5C;IAEM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC;AAChD,iBAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAC9B,GAAG,CAAC,CAAC,KAAgB,KAAI;gBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B,CAAC,EACF,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CACnF;AACA,iBAAA,SAAS,CAAC,CAAC,KAAgB,KAAI;AAC5B,gBAAA,IAAI,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,EAAE;AAC7C,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5E,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjB,wBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,4BAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;4BACvB,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACnC,yBAAC,CAAC,CAAC;qBACN;iBACJ;AACL,aAAC,CAAC,CAAC;YAEP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC;AAC/C,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,iBAAA,SAAS,CAAC,CAAC,KAAU,KAAI;gBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,aAAC,CAAC,CAAC;YAEP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC;AAChD,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,iBAAA,SAAS,CAAC,CAAC,KAAU,KAAI;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;wBAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,IAAI,CAAC,uBAAuB,EAAE,CAAC;qBAClC;AACL,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;YAEP,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC;AAC3C,iBAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAC9B,GAAG,CAAC,CAAC,KAAgB,KAAI;gBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,aAAC,CAAC,CACL;AACA,iBAAA,SAAS,CAAC,CAAC,KAAgB,KAAI;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,EAAE;wBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,wBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BACjB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;yBACjF;qBACJ;oBACD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACnC,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,+BAA+B,CAAC,KAAgB,EAAA;;AAEpD,QAAA,MAAM,KAAK,GAA8C,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5G,IAAI,GAAG,GAAG,IAAI,CAAC;AACf,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC/C,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBAClD,GAAG,GAAG,KAAK,CAAC;;aAEf;SACJ;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAEO,IAAA,UAAU,CAAC,IAAsB,EAAA;AACrC,QAAA,IAAI,KAAsB,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;;AAEpB,YAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;SAChC;AAAM,aAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC9B,YAAA,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACnC;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAEO,IAAA,kBAAkB,CAAC,KAAqC,EAAA;QAC5D,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,EAAE;AAC7C,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;gBACvB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,aAAC,CAAC,CAAC;SACN;aAAM;AACH,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B;KACJ;IAEO,uBAAuB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;aACnF;iBAAM;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;aACtF;SACJ;KACJ;AAEO,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAChC;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KAChC;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;KAClC;AA7IQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,2FAkBjB,0BAA0B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAlB7B,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;0BAmBQ,MAAM;2BAAC,0BAA0B,CAAA;yCAftC,UAAU,EAAA,CAAA;sBAFT,WAAW;uBAAC,iBAAiB,CAAA;;sBAC7B,WAAW;uBAAC,qBAAqB,CAAA;gBAIrB,oBAAoB,EAAA,CAAA;sBAAhC,KAAK;gBAII,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;AC3BX;;;;AAIG;AAMG,MAAO,aAAc,SAAQ,uBAAuB,CAAA;AAYtD;;;AAGG;IACH,IAEI,WAAW,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SAC7D;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;SAC5D;KACJ;IAED,IAEI,eAAe,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACjD,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;SACpE;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;SACnE;KACJ;AAED;;;AAGG;IACH,IACI,aAAa,CAAC,KAA6B,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;KAC5C;AAED;;AAEG;IACH,IAEI,gBAAgB,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAID,IAAA,WAAA,CAAmB,UAAsB,EAA6C,aAA8B,EAAE,MAAc,EAAA;AAChI,QAAA,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QADlB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAA6C,IAAa,CAAA,aAAA,GAAb,aAAa,CAAiB;AArDpH;;AAEG;AACO,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAE,CAAC;AAgDvC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAKnC,QAAA,MAAM,CAAC,iBAAiB,CAAC,MACrB,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC;AACvC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACxC,CAAC,CACT,CAAC;KACL;AAED,IAAA,UAAU,CAAC,MAAa,EAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QACjD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAClE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3C;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACxB;AAhFQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,4CA0D6B,0BAA0B,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AA1DpE,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,2aCrB1B,kOAUA,EAAA,CAAA,CAAA,EAAA;;AD2BI,UAAA,CAAA;AACC,IAAA,YAAY,EAAE;;;AAQd,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,aAAA,EAAA,IAAA,CAAA,CAAA;AAED,UAAA,CAAA;AACC,IAAA,YAAY,EAAE;;;AAQd,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,IAAA,CAAA,CAAA;AAcD,UAAA,CAAA;AACC,IAAA,WAAW,EAAE;;;AAGb,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA,CAAA;2FAtDQ,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,cAE/B,IAAI,EAAA,QAAA,EAAA,kOAAA,EAAA,CAAA;;0BA4D4B,MAAM;2BAAC,0BAA0B,CAAA;8DAlDnE,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEmC,SAAS,EAAA,CAAA;sBAAlD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAQpC,WAAW,EAAA,CAAA;sBAFd,KAAK;gBAaF,eAAe,EAAA,CAAA;sBAFlB,KAAK;gBAgBF,aAAa,EAAA,CAAA;sBADhB,KAAK;gBAUF,gBAAgB,EAAA,CAAA;sBAFnB,KAAK;;;IEhEE,gBAKX;AALD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,eAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACjB,CAAC,EALW,eAAe,KAAf,eAAe,GAK1B,EAAA,CAAA,CAAA,CAAA;AAoID;;;AAGG;MAEU,gBAAgB,CAAA;AACzB,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAAI;AAEtC,IAAA,cAAc,CAAC,GAAW,EAAA;AAC9B,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC3D;AAEO,IAAA,oBAAoB,CAAC,WAA4C,EAAA;QACrE,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,IAAG;AAC1C,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBACtB,UAAU,CAAC,QAAQ,GAAG;oBAClB,MAAM,EAAE,eAAe,CAAC,OAAO;AAC/B,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,SAAS,EAAE,CAAC;iBACf,CAAC;aACL;AACL,SAAC,CAAC,CAAC;KACN;IAEO,WAAW,CAAC,QAAuC,EAAE,UAAyB,EAAA;QAClF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,IAAI,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,aAAa,GAAkB,IAAI,CAAC;QAExC,UAAU,CAAC,QAAQ,GAAG;YAClB,MAAM,EAAE,eAAe,CAAC,OAAO;AAC/B,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,SAAS,EAAE,IAAI;SAClB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,CAAC,KAAoB,KAAU;AAC9C,YAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;AACxB,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAChE,gBAAA,IAAI,UAAU,KAAK,GAAG,EAAE;oBACpB,UAAU,GAAG,EAAE,CAAC;iBACnB;gBACD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACzC,gBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC;gBACjD,MAAM,iBAAiB,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACzG,gBAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;gBAEhE,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC;AACvD,gBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;AAC5C,gBAAA,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;AAClC,gBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAG,EAAA,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;AACvE,gBAAA,UAAU,CAAC,QAAQ,CAAC,SAAS,GAAG,iBAAiB,CAAC;AAClD,gBAAA,UAAU,CAAC,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;gBAClD,UAAU,CAAC,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAE5E,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;aAChF;AACL,SAAC,CAAC;AAEF,QAAA,MAAM,OAAO,GAAG,CAAC,KAAiB,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE7D,MAAM,kBAAkB,GAAG,MAAK;YAC5B,IAAI,GAAG,CAAC,UAAU,KAAK,cAAc,CAAC,IAAI,EAAE;AACxC,gBAAA,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;AAChF,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;gBAExE,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;AAClD,gBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;AACrC,gBAAA,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,YAAY,CAAC;AACzC,gBAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAG,EAAA,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;AACvE,gBAAA,UAAU,CAAC,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;AAClD,gBAAA,UAAU,CAAC,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;AAEjF,gBAAA,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;AAEvC,gBAAA,IAAI;oBACA,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;iBAClD;gBAAC,OAAO,CAAC,EAAE;AACR,oBAAA,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;iBACtC;;AAID,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;gBAExE,QAAQ,CAAC,QAAQ,EAAE,CAAC;aACvB;AACL,SAAC,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;;;;QAK9C,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChD,QAAA,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACzC,QAAA,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AAE7D,QAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClD,QAAA,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,GAAG,IAAI,GAAG,KAAK,CAAC;AAEhE,QAAA,IAAI;AACA,YAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEhC,YAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9F,YAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEzG,YAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;AAE5F,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3E,YAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;QAAC,OAAO,KAAK,EAAE;AACZ,YAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACzB;QAED,OAAO;YACH,GAAG;YACH,OAAO,EAAE,MAAK;gBACV,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACvD,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjD,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACnD,gBAAA,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC5C,gBAAA,GAAG,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;aACnE;SACJ,CAAC;KACL;AAEO,IAAA,cAAc,CAAC,UAAyB,EAAA;AAC5C,QAAA,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;KAC3E;AAED;;;AAGG;AACH,IAAA,MAAM,CAAC,UAAyB,EAAA;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AAEhC,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;AAC7B,YAAA,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAChE,YAAA,OAAO,MAAK;AACR,gBAAA,OAAO,EAAE,CAAC;gBAEV,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,EAAE;oBAC7B,GAAG,CAAC,KAAK,EAAE,CAAC;iBACf;AACL,aAAC,CAAC;AACN,SAAC,CAAC,CAAC;KACN;AAED;;;;;AAKG;AACH,IAAA,UAAU,CAAC,WAA4B,EAAE,UAAU,GAAG,CAAC,EAAE,OAA+B,EAAA;AACpF,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CACjC,QAAQ,CAAC,UAAU,IAAG;AAClB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAC/B,GAAG,CAAC,cAAc,IAAG;AACjB,gBAAA,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,MAAM,KAAK,eAAe,CAAC,OAAO,EAAE;AACnF,oBAAA,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;iBAChD;AACD,gBAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,KAAK,eAAe,CAAC,IAAI,EAAE;AAC7E,oBAAA,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;iBAC7C;aACJ,CAAC,CACL,CAAC;SACL,EAAE,UAAU,CAAC,EACd,GAAG,CAAC,QAAQ,IAAG;AACX,YAAA,OAAO,QAAQ,CAAC;SACnB,CAAC,CACL,CAAC;AAEF,QAAA,OAAO,MAAM,CAAC;KACjB;8GA7KQ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;AC3IX;MAOa,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAf,eAAe,EAAA,OAAA,EAAA,CAJd,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAEnE,aAAa,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAEpC,eAAe,EAAA,SAAA,EAHb,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,EAAA,OAAA,EAAA,CADxD,YAAY,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI/B,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,CAAC;AAC9E,oBAAA,SAAS,EAAE,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;AAClE,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC;AACjD,iBAAA,CAAA;;;ACfD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-select-base.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n acceptType?: string;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n acceptType: '',\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '.ico': 'image/vnd.microsoft.icon',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, NgZone, numberAttribute } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @private\n */\n@Directive()\nexport class FileSelectBaseDirective {\n acceptType: string;\n sizeThreshold: number;\n sizeExceedsHandler: ThySizeExceedsHandler;\n\n @Input({ transform: numberAttribute })\n set thySizeThreshold(value: number) {\n const sizeThreshold = value;\n if (isNumber(sizeThreshold)) {\n this.sizeThreshold = sizeThreshold;\n }\n }\n\n @Input() set thySizeExceedsHandler(value: ThySizeExceedsHandler) {\n if (value) {\n this.sizeExceedsHandler = value;\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n public ngZone?: NgZone\n ) {\n this.sizeThreshold = defaultConfig.sizeThreshold;\n this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;\n this.acceptType = mimeTypeConvert(defaultConfig.acceptType);\n }\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.sizeThreshold\n };\n return this.sizeExceedsHandler(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: EventEmitter<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.sizeThreshold && this.sizeThreshold > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","import { isEmpty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n standalone: true\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit, OnDestroy {\n @HostBinding('class.drop-over')\n @HostBinding('class.thy-drop-over')\n isDragOver = false;\n private dragOverCustomClass: string;\n\n @Input() set thyFileDropClassName(value: string) {\n this.dragOverCustomClass = value;\n }\n\n @Output() thyOnDrop = new EventEmitter();\n\n private ngUnsubscribe$ = new Subject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver = true;\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(event.dataTransfer ? Array.from(event.dataTransfer.files) : []);\n if (!isEmpty(files)) {\n this.selectFiles(event, Array.from(event.dataTransfer.files), this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if (item['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = item['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n if (this.acceptType && this.acceptType != '*/*') {\n return items.filter(item => {\n return this.acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n if (this.dragOverCustomClass) {\n if (this.isDragOver) {\n this.renderer.addClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n }\n }\n }\n\n private setDragOverState(isDragOver: boolean) {\n this.isDragOver = isDragOver;\n }\n\n private resetDragOver() {\n this.setDragOverState(false);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","import { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport {\n booleanAttribute,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n Output,\n ViewChild\n} from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * 文件上传组件\n * @name thy-file-select,[thyFileSelect]\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html',\n standalone: true\n})\nexport class ThyFileSelect extends FileSelectBaseDirective implements OnDestroy {\n private multiple: boolean;\n\n private acceptFolder: boolean;\n\n /**\n * 文件选择事件\n */\n @Output() thyOnFileSelect = new EventEmitter();\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef<HTMLInputElement>;\n\n /**\n * 文件是否多选\n * @default false\n */\n @Input({ transform: booleanAttribute })\n set thyMultiple(value: boolean) {\n this.multiple = value;\n if (this.multiple) {\n this.fileInput.nativeElement.setAttribute('multiple', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('multiple');\n }\n }\n\n @Input({ transform: booleanAttribute })\n set thyAcceptFolder(value: boolean) {\n this.acceptFolder = value;\n if (this.acceptFolder) {\n this.fileInput.nativeElement.setAttribute('webkitdirectory', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('webkitdirectory');\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n * @type Array<string> | string\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n /**\n * 文件上传大小限制,单位`kb`,`0`表示没有任何限制\n */\n @Input({ transform: numberAttribute })\n set thySizeThreshold(value: number) {\n this.sizeThreshold = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor(public elementRef: ElementRef, @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig, ngZone: NgZone) {\n super(elementRef, defaultConfig);\n\n ngZone.runOutsideAngular(() =>\n fromEvent(elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.fileInput.nativeElement.click();\n })\n );\n }\n\n selectFile($event: Event) {\n const files = this.fileInput.nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput.nativeElement.value = '';\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"acceptType\"\n/>\n","import { coerceArray, humanizeBytes } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @public\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n * 进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度,比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间,比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @public\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n constructor(private xhrFactory: XhrFactory) {}\n\n private secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new Date().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new Date().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new Date().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new Date().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelect } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, ThyFileSelect, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER],\n exports: [ThyFileSelect, ThyFileDropDirective]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { NgIf, NgTemplateOutlet, CommonModule } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Component, HostBinding, Input, ContentChild, NgModule } from '@angular/core';
|
|
3
|
+
import { booleanAttribute, Component, HostBinding, Input, ContentChild, NgModule } from '@angular/core';
|
|
4
4
|
import { ThySharedModule } from 'ngx-tethys/shared';
|
|
5
|
-
import { __decorate, __metadata } from 'tslib';
|
|
6
|
-
import { InputBoolean } from 'ngx-tethys/core';
|
|
7
|
-
import { coerceBooleanProperty } from 'ngx-tethys/util';
|
|
8
5
|
import { useHostRenderer } from '@tethys/cdk/dom';
|
|
9
6
|
import { ThyIcon, ThyIconModule } from 'ngx-tethys/icon';
|
|
10
7
|
|
|
@@ -34,13 +31,6 @@ class ThyVote {
|
|
|
34
31
|
this._setClassesByType();
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
|
-
/**
|
|
38
|
-
* 是否是偏圆型
|
|
39
|
-
* @default false
|
|
40
|
-
*/
|
|
41
|
-
set thyRound(value) {
|
|
42
|
-
this._isRound = coerceBooleanProperty(value);
|
|
43
|
-
}
|
|
44
34
|
/**
|
|
45
35
|
* 布局: horizontal | vertical
|
|
46
36
|
* @default horizontal
|
|
@@ -57,14 +47,13 @@ class ThyVote {
|
|
|
57
47
|
* @default false
|
|
58
48
|
*/
|
|
59
49
|
set thyHasVoted(value) {
|
|
60
|
-
this._hasVoted =
|
|
50
|
+
this._hasVoted = value;
|
|
61
51
|
if (this._initialized) {
|
|
62
52
|
this._setClassesByType();
|
|
63
53
|
}
|
|
64
54
|
}
|
|
65
55
|
constructor() {
|
|
66
56
|
this._initialized = false;
|
|
67
|
-
this._isRound = false;
|
|
68
57
|
this.hostRenderer = useHostRenderer();
|
|
69
58
|
this.class = true;
|
|
70
59
|
this._hasVoted = true;
|
|
@@ -94,7 +83,7 @@ class ThyVote {
|
|
|
94
83
|
if (!this._size) {
|
|
95
84
|
this._size = 'default';
|
|
96
85
|
}
|
|
97
|
-
if (this.
|
|
86
|
+
if (this.thyRound) {
|
|
98
87
|
classNames.push('thy-vote-round');
|
|
99
88
|
}
|
|
100
89
|
classNames.push(`thy-vote-${this._type}`);
|
|
@@ -103,22 +92,8 @@ class ThyVote {
|
|
|
103
92
|
this.hostRenderer.updateClass(classNames);
|
|
104
93
|
}
|
|
105
94
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyVote, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
95
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.3", type: ThyVote, isStandalone: true, selector: "thy-vote,[thyVote]", inputs: { thySize: "thySize", thyVote: "thyVote", thyRound: ["thyRound", "thyRound", booleanAttribute], thyLayout: "thyLayout", thyVoteCount: "thyVoteCount", thyIcon: "thyIcon", thyHasVoted: ["thyHasVoted", "thyHasVoted", booleanAttribute], thyDisabled: ["thyDisabled", "thyDisabled", booleanAttribute] }, host: { properties: { "class.thy-vote-disabled": "thyDisabled", "class.thy-vote": "this.class", "class.has-voted": "this._hasVoted" } }, queries: [{ propertyName: "voteIcon", first: true, predicate: ["voteIcon"], descendants: true }], ngImport: i0, template: "<thy-icon *ngIf=\"!voteIcon\" [thyIconName]=\"thyIcon\" [thyIconType]=\"_hasVoted ? 'fill' : ''\"></thy-icon>\n<ng-container *ngIf=\"voteIcon\" [ngTemplateOutlet]=\"voteIcon\"></ng-container>\n<div>{{ thyVoteCount }}</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
107
96
|
}
|
|
108
|
-
__decorate([
|
|
109
|
-
InputBoolean(),
|
|
110
|
-
__metadata("design:type", Boolean),
|
|
111
|
-
__metadata("design:paramtypes", [Boolean])
|
|
112
|
-
], ThyVote.prototype, "thyRound", null);
|
|
113
|
-
__decorate([
|
|
114
|
-
InputBoolean(),
|
|
115
|
-
__metadata("design:type", Boolean),
|
|
116
|
-
__metadata("design:paramtypes", [Boolean])
|
|
117
|
-
], ThyVote.prototype, "thyHasVoted", null);
|
|
118
|
-
__decorate([
|
|
119
|
-
InputBoolean(),
|
|
120
|
-
__metadata("design:type", Object)
|
|
121
|
-
], ThyVote.prototype, "thyDisabled", void 0);
|
|
122
97
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyVote, decorators: [{
|
|
123
98
|
type: Component,
|
|
124
99
|
args: [{ selector: 'thy-vote,[thyVote]', host: {
|
|
@@ -135,7 +110,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
135
110
|
}], thyVote: [{
|
|
136
111
|
type: Input
|
|
137
112
|
}], thyRound: [{
|
|
138
|
-
type: Input
|
|
113
|
+
type: Input,
|
|
114
|
+
args: [{ transform: booleanAttribute }]
|
|
139
115
|
}], thyLayout: [{
|
|
140
116
|
type: Input
|
|
141
117
|
}], thyVoteCount: [{
|
|
@@ -143,9 +119,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
143
119
|
}], thyIcon: [{
|
|
144
120
|
type: Input
|
|
145
121
|
}], thyHasVoted: [{
|
|
146
|
-
type: Input
|
|
122
|
+
type: Input,
|
|
123
|
+
args: [{ transform: booleanAttribute }]
|
|
147
124
|
}], thyDisabled: [{
|
|
148
|
-
type: Input
|
|
125
|
+
type: Input,
|
|
126
|
+
args: [{ transform: booleanAttribute }]
|
|
149
127
|
}], voteIcon: [{
|
|
150
128
|
type: ContentChild,
|
|
151
129
|
args: ['voteIcon']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-vote.mjs","sources":["../../../src/vote/vote.component.ts","../../../src/vote/vote.component.html","../../../src/vote/vote.module.ts","../../../src/vote/ngx-tethys-vote.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ngx-tethys-vote.mjs","sources":["../../../src/vote/vote.component.ts","../../../src/vote/vote.component.html","../../../src/vote/vote.module.ts","../../../src/vote/ngx-tethys-vote.ts"],"sourcesContent":["import { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { Component, ContentChild, HostBinding, Input, OnInit, TemplateRef, booleanAttribute } from '@angular/core';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\n\nexport type ThyVoteSizes = 'default' | 'sm';\n\nexport type ThyVoteType = 'primary' | 'success' | 'primary-weak' | 'success-weak';\n\nexport type ThyVoteLayout = 'vertical' | 'horizontal';\n\n/**\n * 投票组件\n * @name thy-vote,[thyVote]\n * @order 10\n */\n@Component({\n selector: 'thy-vote,[thyVote]',\n templateUrl: './vote.component.html',\n host: {\n '[class.thy-vote-disabled]': `thyDisabled`\n },\n standalone: true,\n imports: [NgIf, ThyIcon, NgTemplateOutlet]\n})\nexport class ThyVote implements OnInit {\n _size: ThyVoteSizes;\n\n _type: ThyVoteType;\n\n _layout: ThyVoteLayout;\n\n _initialized = false;\n\n private hostRenderer = useHostRenderer();\n\n @HostBinding(`class.thy-vote`) class = true;\n\n @HostBinding(`class.has-voted`) _hasVoted = true;\n\n /**\n * 大小,thyLayout=\"vertical\" 时,支持: sm | default\n * @default default\n */\n @Input()\n set thySize(value: ThyVoteSizes) {\n this._size = value;\n if (this._initialized) {\n this._setClassesByType();\n }\n }\n\n /**\n * 标签类型: primary | success | primary-weak | success-weak\n * @default primary\n */\n @Input()\n set thyVote(value: ThyVoteType) {\n this._type = value;\n if (this._initialized) {\n this._setClassesByType();\n }\n }\n\n /**\n * 是否是偏圆型\n * @default false\n */\n @Input({ transform: booleanAttribute }) thyRound: boolean;\n\n /**\n * 布局: horizontal | vertical\n * @default horizontal\n */\n @Input()\n set thyLayout(value: ThyVoteLayout) {\n this._layout = value;\n if (this._initialized) {\n this._setClassesByType();\n }\n }\n\n /**\n * 赞同的数量\n */\n @Input() thyVoteCount: number | string;\n\n /**\n * 图标\n * @type string\n */\n @Input() thyIcon = 'thumb-up';\n\n /**\n * 是否赞同\n * @type boolean\n * @default false\n */\n @Input({ transform: booleanAttribute })\n set thyHasVoted(value: boolean) {\n this._hasVoted = value;\n if (this._initialized) {\n this._setClassesByType();\n }\n }\n\n /**\n * 是否禁用\n * @type boolean\n */\n @Input({ transform: booleanAttribute }) thyDisabled = false;\n\n /**\n * 自定义Icon模板\n * @type TemplateRef\n */\n @ContentChild('voteIcon') voteIcon: TemplateRef<any>;\n\n constructor() {}\n\n ngOnInit() {\n this._setClassesByType();\n this._initialized = true;\n }\n\n _setClassesByType() {\n const classNames = [];\n if (!this._type) {\n this._type = 'primary';\n }\n if (!this._layout) {\n this._layout = 'horizontal';\n }\n if (!this._size) {\n this._size = 'default';\n }\n if (this.thyRound) {\n classNames.push('thy-vote-round');\n }\n classNames.push(`thy-vote-${this._type}`);\n classNames.push(`thy-vote-${this._layout}`);\n classNames.push(`thy-vote-${this._layout}-size-${this._size}`);\n this.hostRenderer.updateClass(classNames);\n }\n}\n","<thy-icon *ngIf=\"!voteIcon\" [thyIconName]=\"thyIcon\" [thyIconType]=\"_hasVoted ? 'fill' : ''\"></thy-icon>\n<ng-container *ngIf=\"voteIcon\" [ngTemplateOutlet]=\"voteIcon\"></ng-container>\n<div>{{ thyVoteCount }}</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyVote } from './vote.component';\nimport { ThyIconModule } from 'ngx-tethys/icon';\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyIconModule, ThyVote],\n exports: [ThyVote],\n providers: []\n})\nexport class ThyVoteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { __decorate, __metadata } from 'tslib';
|
|
2
1
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Directive, Input, NgModule } from '@angular/core';
|
|
4
|
-
import { mixinUnsubscribe, MixinBase
|
|
2
|
+
import { booleanAttribute, Directive, Input, NgModule } from '@angular/core';
|
|
3
|
+
import { mixinUnsubscribe, MixinBase } from 'ngx-tethys/core';
|
|
5
4
|
import { Subject, Observable } from 'rxjs';
|
|
6
5
|
import { takeUntil } from 'rxjs/operators';
|
|
7
6
|
import { MutationObserverFactory } from '@angular/cdk/observers';
|
|
@@ -178,12 +177,8 @@ class ThyWatermarkDirective extends _MixinBase {
|
|
|
178
177
|
super.ngOnDestroy();
|
|
179
178
|
}
|
|
180
179
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyWatermarkDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
181
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
180
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.2.3", type: ThyWatermarkDirective, isStandalone: true, selector: "[thyWatermark]", inputs: { thyDisabled: ["thyDisabled", "thyDisabled", booleanAttribute], thyWatermark: "thyWatermark", thyCanvasConfig: "thyCanvasConfig" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
|
|
182
181
|
}
|
|
183
|
-
__decorate([
|
|
184
|
-
InputBoolean(),
|
|
185
|
-
__metadata("design:type", Boolean)
|
|
186
|
-
], ThyWatermarkDirective.prototype, "thyDisabled", void 0);
|
|
187
182
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyWatermarkDirective, decorators: [{
|
|
188
183
|
type: Directive,
|
|
189
184
|
args: [{
|
|
@@ -191,7 +186,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
191
186
|
standalone: true
|
|
192
187
|
}]
|
|
193
188
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { thyDisabled: [{
|
|
194
|
-
type: Input
|
|
189
|
+
type: Input,
|
|
190
|
+
args: [{ transform: booleanAttribute }]
|
|
195
191
|
}], thyWatermark: [{
|
|
196
192
|
type: Input
|
|
197
193
|
}], thyCanvasConfig: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-watermark.mjs","sources":["../../../src/watermark/config.ts","../../../src/watermark/watermark.directive.ts","../../../src/watermark/watermark.module.ts","../../../src/watermark/ngx-tethys-watermark.ts"],"sourcesContent":["export const DEFAULT_WATERMARK_CONFIG = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n opacity: '0.8',\n 'background-repeat': 'repeat',\n 'pointer-events': 'none',\n 'z-index': 2147483647,\n 'background-image': ''\n};\n\nexport const DEFAULT_CANVAS_CONFIG = {\n degree: 15,\n color: 'rgba(51, 51, 51, 0.12)',\n fontSize: 12,\n textLineHeight: 20,\n gutter: [250, 200]\n};\n","import { Directive, Input, ElementRef, OnDestroy, OnInit, SimpleChanges, OnChanges } from '@angular/core';\nimport { InputBoolean, Constructor, MixinBase, mixinUnsubscribe, ThyUnsubscribe } from 'ngx-tethys/core';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DEFAULT_WATERMARK_CONFIG, DEFAULT_CANVAS_CONFIG } from './config';\nimport { MutationObserverFactory } from '@angular/cdk/observers';\n\nconst _MixinBase: Constructor<ThyUnsubscribe> & typeof MixinBase = mixinUnsubscribe(MixinBase);\n\nexport interface ThyCanvasConfigType {\n degree?: number;\n color?: string;\n fontSize?: number | string;\n textLineHeight?: number;\n gutter?: number[];\n}\n\n/**\n * 水印指令\n * @name thyWatermark\n */\n@Directive({\n selector: '[thyWatermark]',\n standalone: true\n})\nexport class ThyWatermarkDirective extends _MixinBase implements OnInit, OnDestroy, OnChanges {\n /**\n * 是否禁用,默认为 false\n */\n @Input()\n @InputBoolean()\n thyDisabled: boolean = false;\n\n content: string;\n /**\n * 水印内容\n */\n @Input()\n set thyWatermark(value: string) {\n value = value?.replace(/^\\\"|\\\"$/g, '');\n this.content = !!value ? value : '';\n }\n\n /**\n * canvas样式配置\n */\n @Input() thyCanvasConfig: ThyCanvasConfigType;\n\n private createWatermark$ = new Subject<string>();\n\n private observer: MutationObserver;\n\n private canvas: HTMLCanvasElement;\n\n private wmDiv: HTMLElement;\n\n constructor(private el: ElementRef) {\n super();\n }\n\n ngOnInit() {\n if (!this.thyDisabled) {\n this.createWatermark$.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n this.observeAttributes()\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {});\n });\n this.createWatermark();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyWatermark, thyDisabled } = changes;\n const thyWatermarkChange = () => {\n if (thyWatermark.firstChange) return;\n if (thyWatermark.currentValue) {\n this.refreshWatermark();\n }\n };\n const thyDisabledChange = () => {\n if (thyDisabled.firstChange) return;\n thyDisabled?.currentValue ? this.removeWatermark() : this.refreshWatermark();\n };\n thyWatermark && thyWatermarkChange();\n thyDisabled && thyDisabledChange();\n }\n\n private refreshWatermark() {\n this.removeWatermark();\n this.createWatermark();\n }\n\n private removeWatermark() {\n if (this.wmDiv) {\n this.wmDiv.remove();\n this.wmDiv = null;\n }\n }\n\n createCanvas() {\n let { gutter, fontSize, color, degree, textLineHeight } = {\n ...DEFAULT_CANVAS_CONFIG,\n ...(this.thyCanvasConfig || {})\n };\n\n const [xGutter, yGutter] = gutter;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const getFakeSize = () => {\n const fakeBox = document.createElement('div');\n const fakeBoxStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n display: 'inline-block',\n 'font-size': `${parseFloat('' + fontSize)}px`,\n 'word-wrap': 'break-word',\n 'font-family': 'inherit',\n 'white-space': 'pre-line'\n };\n const styleStr = Object.keys(fakeBoxStyle).reduce((pre, next) => ((pre += `${next}:${fakeBoxStyle[next]};`), pre), '');\n fakeBox.setAttribute('style', styleStr);\n\n fakeBox.innerHTML = this.content.replace(/(\\\\n)/gm, '</br>');\n document.querySelector('body').insertBefore(fakeBox, document.querySelector('body').firstChild);\n const { width, height } = fakeBox.getBoundingClientRect();\n fakeBox.remove();\n return { width, height };\n };\n const { width: fakeBoxWidth, height: fakeBoxHeight } = getFakeSize();\n\n const angle = (degree * Math.PI) / 180;\n const contentArr = this.content.split('\\\\n');\n const canvasHeight = Math.sin(angle) * fakeBoxWidth + fakeBoxHeight;\n\n let start = Math.ceil(Math.sin(angle) * fakeBoxWidth * Math.sin(angle));\n const canvasWidth = start + fakeBoxWidth;\n canvas.setAttribute('width', '' + (canvasWidth + xGutter));\n canvas.setAttribute('height', '' + (canvasHeight + yGutter));\n\n ctx.font = `${parseFloat('' + fontSize)}px microsoft yahei`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'top';\n ctx.fillStyle = color;\n ctx.rotate(0 - (degree * Math.PI) / 180);\n contentArr.map((k, i) => {\n ctx.fillText(k, -start + Math.ceil(canvasWidth / 2), Math.sin(angle) * canvasWidth + textLineHeight * i);\n start += Math.sin(angle) * textLineHeight;\n });\n this.canvas = canvas;\n return canvas;\n }\n\n private createWatermark(isRefresh = true) {\n const watermarkDiv = this.wmDiv || document.createElement('div');\n\n const background = !isRefresh ? this.canvas.toDataURL() : this.createCanvas().toDataURL();\n const watermarkStyle = {\n ...DEFAULT_WATERMARK_CONFIG,\n 'background-image': `url(${background})`\n };\n\n const styleStr = Object.keys(watermarkStyle).reduce((pre, next) => ((pre += `${next}:${watermarkStyle[next]};`), pre), '');\n watermarkDiv.setAttribute('style', styleStr);\n\n if (!this.wmDiv) {\n const parentNode = this.el.nativeElement;\n watermarkDiv.classList.add(`_vm`);\n this.wmDiv = watermarkDiv;\n parentNode.insertBefore(watermarkDiv, parentNode.firstChild);\n }\n this.createWatermark$.next('');\n }\n\n private observeAttributes() {\n this.observer?.disconnect();\n return new Observable(observe => {\n const stream = new Subject<MutationRecord[]>();\n this.observer = new MutationObserverFactory().create(mutations => stream.next(mutations));\n if (this.observer) {\n this.observer.observe(this.wmDiv, {\n attributes: true\n });\n }\n stream.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n if (this.wmDiv) {\n this?.observer?.disconnect();\n this.createWatermark(false);\n }\n });\n observe.next(stream);\n return () => {\n this.observer?.disconnect();\n };\n });\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyWatermarkDirective } from './watermark.directive';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyWatermarkDirective],\n exports: [ThyWatermarkDirective],\n providers: []\n})\nexport class ThyWatermarkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-watermark.mjs","sources":["../../../src/watermark/config.ts","../../../src/watermark/watermark.directive.ts","../../../src/watermark/watermark.module.ts","../../../src/watermark/ngx-tethys-watermark.ts"],"sourcesContent":["export const DEFAULT_WATERMARK_CONFIG = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n opacity: '0.8',\n 'background-repeat': 'repeat',\n 'pointer-events': 'none',\n 'z-index': 2147483647,\n 'background-image': ''\n};\n\nexport const DEFAULT_CANVAS_CONFIG = {\n degree: 15,\n color: 'rgba(51, 51, 51, 0.12)',\n fontSize: 12,\n textLineHeight: 20,\n gutter: [250, 200]\n};\n","import { Directive, Input, ElementRef, OnDestroy, OnInit, SimpleChanges, OnChanges, booleanAttribute } from '@angular/core';\nimport { Constructor, MixinBase, mixinUnsubscribe, ThyUnsubscribe } from 'ngx-tethys/core';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DEFAULT_WATERMARK_CONFIG, DEFAULT_CANVAS_CONFIG } from './config';\nimport { MutationObserverFactory } from '@angular/cdk/observers';\n\nconst _MixinBase: Constructor<ThyUnsubscribe> & typeof MixinBase = mixinUnsubscribe(MixinBase);\n\nexport interface ThyCanvasConfigType {\n degree?: number;\n color?: string;\n fontSize?: number | string;\n textLineHeight?: number;\n gutter?: number[];\n}\n\n/**\n * 水印指令\n * @name thyWatermark\n */\n@Directive({\n selector: '[thyWatermark]',\n standalone: true\n})\nexport class ThyWatermarkDirective extends _MixinBase implements OnInit, OnDestroy, OnChanges {\n /**\n * 是否禁用,默认为 false\n */\n @Input({ transform: booleanAttribute })\n thyDisabled: boolean = false;\n\n content: string;\n /**\n * 水印内容\n */\n @Input()\n set thyWatermark(value: string) {\n value = value?.replace(/^\\\"|\\\"$/g, '');\n this.content = !!value ? value : '';\n }\n\n /**\n * canvas样式配置\n */\n @Input() thyCanvasConfig: ThyCanvasConfigType;\n\n private createWatermark$ = new Subject<string>();\n\n private observer: MutationObserver;\n\n private canvas: HTMLCanvasElement;\n\n private wmDiv: HTMLElement;\n\n constructor(private el: ElementRef) {\n super();\n }\n\n ngOnInit() {\n if (!this.thyDisabled) {\n this.createWatermark$.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n this.observeAttributes()\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {});\n });\n this.createWatermark();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyWatermark, thyDisabled } = changes;\n const thyWatermarkChange = () => {\n if (thyWatermark.firstChange) return;\n if (thyWatermark.currentValue) {\n this.refreshWatermark();\n }\n };\n const thyDisabledChange = () => {\n if (thyDisabled.firstChange) return;\n thyDisabled?.currentValue ? this.removeWatermark() : this.refreshWatermark();\n };\n thyWatermark && thyWatermarkChange();\n thyDisabled && thyDisabledChange();\n }\n\n private refreshWatermark() {\n this.removeWatermark();\n this.createWatermark();\n }\n\n private removeWatermark() {\n if (this.wmDiv) {\n this.wmDiv.remove();\n this.wmDiv = null;\n }\n }\n\n createCanvas() {\n let { gutter, fontSize, color, degree, textLineHeight } = {\n ...DEFAULT_CANVAS_CONFIG,\n ...(this.thyCanvasConfig || {})\n };\n\n const [xGutter, yGutter] = gutter;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const getFakeSize = () => {\n const fakeBox = document.createElement('div');\n const fakeBoxStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n display: 'inline-block',\n 'font-size': `${parseFloat('' + fontSize)}px`,\n 'word-wrap': 'break-word',\n 'font-family': 'inherit',\n 'white-space': 'pre-line'\n };\n const styleStr = Object.keys(fakeBoxStyle).reduce((pre, next) => ((pre += `${next}:${fakeBoxStyle[next]};`), pre), '');\n fakeBox.setAttribute('style', styleStr);\n\n fakeBox.innerHTML = this.content.replace(/(\\\\n)/gm, '</br>');\n document.querySelector('body').insertBefore(fakeBox, document.querySelector('body').firstChild);\n const { width, height } = fakeBox.getBoundingClientRect();\n fakeBox.remove();\n return { width, height };\n };\n const { width: fakeBoxWidth, height: fakeBoxHeight } = getFakeSize();\n\n const angle = (degree * Math.PI) / 180;\n const contentArr = this.content.split('\\\\n');\n const canvasHeight = Math.sin(angle) * fakeBoxWidth + fakeBoxHeight;\n\n let start = Math.ceil(Math.sin(angle) * fakeBoxWidth * Math.sin(angle));\n const canvasWidth = start + fakeBoxWidth;\n canvas.setAttribute('width', '' + (canvasWidth + xGutter));\n canvas.setAttribute('height', '' + (canvasHeight + yGutter));\n\n ctx.font = `${parseFloat('' + fontSize)}px microsoft yahei`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'top';\n ctx.fillStyle = color;\n ctx.rotate(0 - (degree * Math.PI) / 180);\n contentArr.map((k, i) => {\n ctx.fillText(k, -start + Math.ceil(canvasWidth / 2), Math.sin(angle) * canvasWidth + textLineHeight * i);\n start += Math.sin(angle) * textLineHeight;\n });\n this.canvas = canvas;\n return canvas;\n }\n\n private createWatermark(isRefresh = true) {\n const watermarkDiv = this.wmDiv || document.createElement('div');\n\n const background = !isRefresh ? this.canvas.toDataURL() : this.createCanvas().toDataURL();\n const watermarkStyle = {\n ...DEFAULT_WATERMARK_CONFIG,\n 'background-image': `url(${background})`\n };\n\n const styleStr = Object.keys(watermarkStyle).reduce((pre, next) => ((pre += `${next}:${watermarkStyle[next]};`), pre), '');\n watermarkDiv.setAttribute('style', styleStr);\n\n if (!this.wmDiv) {\n const parentNode = this.el.nativeElement;\n watermarkDiv.classList.add(`_vm`);\n this.wmDiv = watermarkDiv;\n parentNode.insertBefore(watermarkDiv, parentNode.firstChild);\n }\n this.createWatermark$.next('');\n }\n\n private observeAttributes() {\n this.observer?.disconnect();\n return new Observable(observe => {\n const stream = new Subject<MutationRecord[]>();\n this.observer = new MutationObserverFactory().create(mutations => stream.next(mutations));\n if (this.observer) {\n this.observer.observe(this.wmDiv, {\n attributes: true\n });\n }\n stream.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(() => {\n if (this.wmDiv) {\n this?.observer?.disconnect();\n this.createWatermark(false);\n }\n });\n observe.next(stream);\n return () => {\n this.observer?.disconnect();\n };\n });\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyWatermarkDirective } from './watermark.directive';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyWatermarkDirective],\n exports: [ThyWatermarkDirective],\n providers: []\n})\nexport class ThyWatermarkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('17.0.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('17.0.2');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
|
|
@@ -57,4 +57,5 @@ export declare class ThyFlexibleText implements OnInit, AfterContentInit, OnDest
|
|
|
57
57
|
updateContainerClass(): void;
|
|
58
58
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyFlexibleText, never>;
|
|
59
59
|
static ɵcmp: i0.ɵɵComponentDeclaration<ThyFlexibleText, "thy-flexible-text,[thyFlexibleText]", ["thyFlexibleText"], { "trigger": { "alias": "thyTooltipTrigger"; "required": false; }; "thyContainerClass": { "alias": "thyContainerClass"; "required": false; }; "thyContent": { "alias": "thyTooltipContent"; "required": false; }; "thyPlacement": { "alias": "thyTooltipPlacement"; "required": false; }; "thyOffset": { "alias": "thyTooltipOffset"; "required": false; }; }, {}, never, ["*"], true, [{ directive: typeof i1.ThyTooltipDirective; inputs: {}; outputs: {}; }]>;
|
|
60
|
+
static ngAcceptInputType_thyOffset: unknown;
|
|
60
61
|
}
|
|
@@ -20,4 +20,5 @@ export declare class ThyFormGroupError implements OnInit {
|
|
|
20
20
|
ngOnInit(): void;
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyFormGroupError, [{ optional: true; }]>;
|
|
22
22
|
static ɵcmp: i0.ɵɵComponentDeclaration<ThyFormGroupError, "thy-form-group-error", never, { "thyShowFirst": { "alias": "thyShowFirst"; "required": false; }; "thyErrors": { "alias": "thyErrors"; "required": false; }; }, {}, never, never, true, never>;
|
|
23
|
+
static ngAcceptInputType_thyShowFirst: unknown;
|
|
23
24
|
}
|
|
@@ -11,8 +11,9 @@ export declare class ThyFormGroupLabelDirective {
|
|
|
11
11
|
_isFormGroupLabel: boolean;
|
|
12
12
|
set thyLabelText(value: string);
|
|
13
13
|
set thyLabelTranslateKey(translateKey: string);
|
|
14
|
-
set thyLabelRequired(value:
|
|
14
|
+
set thyLabelRequired(value: boolean);
|
|
15
15
|
constructor(thyTranslate: ThyTranslate);
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyFormGroupLabelDirective, never>;
|
|
17
17
|
static ɵdir: i0.ɵɵDirectiveDeclaration<ThyFormGroupLabelDirective, "[thyFormGroupLabel]", never, { "thyLabelText": { "alias": "thyLabelText"; "required": false; }; "thyLabelTranslateKey": { "alias": "thyLabelTranslateKey"; "required": false; }; "thyLabelRequired": { "alias": "thyLabelRequired"; "required": false; }; }, {}, never, never, true, never>;
|
|
18
|
+
static ngAcceptInputType_thyLabelRequired: unknown;
|
|
18
19
|
}
|
|
@@ -33,8 +33,8 @@ export declare class ThyFormGroup implements OnInit {
|
|
|
33
33
|
/**
|
|
34
34
|
* Label 是否显示必填项样式
|
|
35
35
|
*/
|
|
36
|
-
set thyLabelRequired(value:
|
|
37
|
-
set thyLabelPaddingTopClear(value:
|
|
36
|
+
set thyLabelRequired(value: boolean);
|
|
37
|
+
set thyLabelPaddingTopClear(value: boolean);
|
|
38
38
|
/**
|
|
39
39
|
* 反馈图标,比如日期输入框显示日期的图标,常用输入 date 表示时间 wtf wtf-schedule-o
|
|
40
40
|
*/
|
|
@@ -71,5 +71,8 @@ export declare class ThyFormGroup implements OnInit {
|
|
|
71
71
|
ngOnInit(): void;
|
|
72
72
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyFormGroup, [{ optional: true; }, null]>;
|
|
73
73
|
static ɵcmp: i0.ɵɵComponentDeclaration<ThyFormGroup, "thy-form-group", never, { "thyLabelText": { "alias": "thyLabelText"; "required": false; }; "thyLabelTextTranslateKey": { "alias": "thyLabelTextTranslateKey"; "required": false; }; "thyLabelRequired": { "alias": "thyLabelRequired"; "required": false; }; "thyLabelPaddingTopClear": { "alias": "thyLabelPaddingTopClear"; "required": false; }; "thyFeedbackIcon": { "alias": "thyFeedbackIcon"; "required": false; }; "thyTipsMode": { "alias": "thyTipsMode"; "required": false; }; "thyTips": { "alias": "thyTips"; "required": false; }; "thyTipsTranslateKey": { "alias": "thyTipsTranslateKey"; "required": false; }; "thyRowFill": { "alias": "thyRowFill"; "required": false; }; }, {}, ["contentTemplateRef", "contentTemplate"], ["*"], true, never>;
|
|
74
|
+
static ngAcceptInputType_thyLabelRequired: unknown;
|
|
75
|
+
static ngAcceptInputType_thyLabelPaddingTopClear: unknown;
|
|
76
|
+
static ngAcceptInputType_thyRowFill: unknown;
|
|
74
77
|
}
|
|
75
78
|
export {};
|
package/icon/icon.component.d.ts
CHANGED
|
@@ -50,4 +50,7 @@ export declare class ThyIcon implements OnInit, OnChanges {
|
|
|
50
50
|
private clearTitleElement;
|
|
51
51
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyIcon, never>;
|
|
52
52
|
static ɵcmp: i0.ɵɵComponentDeclaration<ThyIcon, "thy-icon, [thy-icon]", never, { "iconType": { "alias": "thyIconType"; "required": false; }; "iconTwotoneColor": { "alias": "thyTwotoneColor"; "required": false; }; "iconName": { "alias": "thyIconName"; "required": false; }; "iconRotate": { "alias": "thyIconRotate"; "required": false; }; "iconSet": { "alias": "thyIconSet"; "required": false; }; "iconLegging": { "alias": "thyIconLegging"; "required": false; }; "iconLinearGradient": { "alias": "thyIconLinearGradient"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
53
|
+
static ngAcceptInputType_iconRotate: unknown;
|
|
54
|
+
static ngAcceptInputType_iconLegging: unknown;
|
|
55
|
+
static ngAcceptInputType_iconLinearGradient: unknown;
|
|
53
56
|
}
|
|
@@ -48,4 +48,6 @@ export declare class ThyImageDirective implements OnInit, OnChanges, AfterViewIn
|
|
|
48
48
|
ngOnDestroy(): void;
|
|
49
49
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyImageDirective, never>;
|
|
50
50
|
static ɵdir: i0.ɵɵDirectiveDeclaration<ThyImageDirective, "img[thyImage]", ["thyImage"], { "thySrc": { "alias": "thySrc"; "required": false; }; "thyPreviewSrc": { "alias": "thyPreviewSrc"; "required": false; }; "thyOriginSrc": { "alias": "thyOriginSrc"; "required": false; }; "thyImageMeta": { "alias": "thyImageMeta"; "required": false; }; "thyDisablePreview": { "alias": "thyDisablePreview"; "required": false; }; "thyResolveSize": { "alias": "thyResolveSize"; "required": false; }; }, {}, never, never, true, never>;
|
|
51
|
+
static ngAcceptInputType_thyDisablePreview: unknown;
|
|
52
|
+
static ngAcceptInputType_thyResolveSize: unknown;
|
|
51
53
|
}
|