@acorex/components 7.17.14 → 7.17.16
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/common/lib/services/hotkey.service.d.ts +14 -0
- package/esm2022/action-sheet/lib/action-sheet.component.mjs +3 -3
- package/esm2022/action-sheet/lib/action-sheet.module.mjs +4 -4
- package/esm2022/action-sheet/lib/action-sheet.service.mjs +3 -3
- package/esm2022/alert/lib/alert.component.mjs +9 -9
- package/esm2022/alert/lib/alert.module.mjs +4 -4
- package/esm2022/avatar/lib/avatar-group.component.mjs +3 -3
- package/esm2022/avatar/lib/avatar.component.mjs +3 -3
- package/esm2022/avatar/lib/avatar.module.mjs +4 -4
- package/esm2022/badge/lib/badge.component.mjs +3 -3
- package/esm2022/badge/lib/badge.module.mjs +4 -4
- package/esm2022/breadcrumbs/lib/breadcrumbs-item.component.mjs +3 -3
- package/esm2022/breadcrumbs/lib/breadcrumbs.component.mjs +3 -3
- package/esm2022/breadcrumbs/lib/breadcrumbs.module.mjs +4 -4
- package/esm2022/button/lib/button-item-list.component.mjs +5 -5
- package/esm2022/button/lib/button-item.component.mjs +3 -3
- package/esm2022/button/lib/button.component.mjs +5 -5
- package/esm2022/button/lib/button.module.mjs +4 -4
- package/esm2022/button-group/lib/button-group.component.mjs +4 -4
- package/esm2022/button-group/lib/button-group.module.mjs +4 -4
- package/esm2022/calendar/lib/calendar-range.component.mjs +3 -3
- package/esm2022/calendar/lib/calendar.class.mjs +3 -3
- package/esm2022/calendar/lib/calendar.component.mjs +5 -5
- package/esm2022/calendar/lib/calendar.module.mjs +4 -4
- package/esm2022/check-box/lib/check-box.component.mjs +3 -3
- package/esm2022/check-box/lib/check-box.module.mjs +4 -4
- package/esm2022/chips/lib/chips.component.mjs +3 -3
- package/esm2022/chips/lib/chips.module.mjs +4 -4
- package/esm2022/circular-progress/lib/circular-progress.component.mjs +4 -4
- package/esm2022/circular-progress/lib/circular-progress.module.mjs +4 -4
- package/esm2022/collapse/lib/collapse-group.component.mjs +3 -3
- package/esm2022/collapse/lib/collapse.component.mjs +5 -5
- package/esm2022/collapse/lib/collapse.module.mjs +4 -4
- package/esm2022/color-box/lib/color-box.component.mjs +3 -3
- package/esm2022/color-box/lib/color-box.module.mjs +4 -4
- package/esm2022/color-palette/lib/color-palette-input.component.mjs +4 -4
- package/esm2022/color-palette/lib/color-palette-picker.component.mjs +3 -3
- package/esm2022/color-palette/lib/color-palette-preview.component.mjs +3 -3
- package/esm2022/color-palette/lib/color-palette-swatches.component.mjs +3 -3
- package/esm2022/color-palette/lib/color-palette.class.mjs +6 -6
- package/esm2022/color-palette/lib/color-palette.component.mjs +3 -3
- package/esm2022/color-palette/lib/color-palette.module.mjs +4 -4
- package/esm2022/common/lib/classes/components.class.mjs +21 -21
- package/esm2022/common/lib/common.module.mjs +4 -4
- package/esm2022/common/lib/components/base-component.class.mjs +3 -3
- package/esm2022/common/lib/components/input-base-value-component.class.mjs +3 -3
- package/esm2022/common/lib/components/look-component.class.mjs +3 -3
- package/esm2022/common/lib/components/selection-base.component.class.mjs +6 -6
- package/esm2022/common/lib/components/value-component.class.mjs +3 -3
- package/esm2022/common/lib/directives/auto-focus.directive.mjs +3 -3
- package/esm2022/common/lib/directives/delayed-value-changed.directive.mjs +3 -3
- package/esm2022/common/lib/directives/hotkey.directive.mjs +3 -3
- package/esm2022/common/lib/directives/infinite-scroll.directive.mjs +3 -3
- package/esm2022/common/lib/directives/responsive.directive.mjs +3 -3
- package/esm2022/common/lib/directives/ripple.directive.mjs +3 -3
- package/esm2022/common/lib/services/dom.service.mjs +3 -3
- package/esm2022/common/lib/services/hotkey.service.mjs +12 -4
- package/esm2022/data-pager/lib/data-pager-base.component.mjs +6 -6
- package/esm2022/data-pager/lib/data-pager-info.component.mjs +3 -3
- package/esm2022/data-pager/lib/data-pager-input-selector.component.mjs +4 -4
- package/esm2022/data-pager/lib/data-pager-next-buttons.components.mjs +3 -3
- package/esm2022/data-pager/lib/data-pager-numeric-selector.component.mjs +3 -3
- package/esm2022/data-pager/lib/data-pager-pagesize-dropdown.component.mjs +6 -6
- package/esm2022/data-pager/lib/data-pager-prev-buttons.component.mjs +3 -3
- package/esm2022/data-pager/lib/data-pager.component.mjs +5 -5
- package/esm2022/data-pager/lib/data-pager.module.mjs +4 -4
- package/esm2022/data-table/lib/columns/data-table-column.mjs +3 -3
- package/esm2022/data-table/lib/columns/data-text-column.component.mjs +3 -3
- package/esm2022/data-table/lib/columns/row-command-column.component.mjs +6 -6
- package/esm2022/data-table/lib/columns/row-index-column.component.mjs +3 -3
- package/esm2022/data-table/lib/columns/row-select-column.component.mjs +3 -3
- package/esm2022/data-table/lib/data-table.component.mjs +4 -4
- package/esm2022/data-table/lib/data-table.module.mjs +4 -4
- package/esm2022/datetime-box/lib/datetime-box.component.mjs +3 -3
- package/esm2022/datetime-box/lib/datetime-box.module.mjs +4 -4
- package/esm2022/datetime-input/lib/datetime-input.component.mjs +3 -3
- package/esm2022/datetime-input/lib/datetime-input.module.mjs +4 -4
- package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +6 -6
- package/esm2022/datetime-picker/lib/datetime-picker.module.mjs +4 -4
- package/esm2022/decorators/lib/components/clear-button.component.mjs +7 -7
- package/esm2022/decorators/lib/components/close-button.component.mjs +5 -5
- package/esm2022/decorators/lib/components/generic-content.component.mjs +3 -3
- package/esm2022/decorators/lib/components/icon.component.mjs +3 -3
- package/esm2022/decorators/lib/decorators.module.mjs +4 -4
- package/esm2022/dialog/lib/dialog.component.mjs +3 -3
- package/esm2022/dialog/lib/dialog.module.mjs +4 -4
- package/esm2022/dialog/lib/dialog.service.mjs +3 -3
- package/esm2022/drawer/lib/drawer-container.component.mjs +3 -3
- package/esm2022/drawer/lib/drawer.component.mjs +3 -3
- package/esm2022/drawer/lib/drawer.module.mjs +4 -4
- package/esm2022/dropdown/lib/dropdown-box.class.mjs +3 -3
- package/esm2022/dropdown/lib/dropdown-box.component.mjs +3 -3
- package/esm2022/dropdown/lib/dropdown-panel.component.mjs +3 -3
- package/esm2022/dropdown/lib/dropdown.module.mjs +4 -4
- package/esm2022/form/lib/form-field.component.mjs +3 -3
- package/esm2022/form/lib/form.component.mjs +3 -3
- package/esm2022/form/lib/form.module.mjs +4 -4
- package/esm2022/form/lib/validation-rule.widget.mjs +3 -3
- package/esm2022/form/lib/validation-summary.component.mjs +3 -3
- package/esm2022/image/lib/image.component.mjs +3 -3
- package/esm2022/image/lib/image.module.mjs +4 -4
- package/esm2022/label/lib/label.component.mjs +3 -3
- package/esm2022/label/lib/label.module.mjs +4 -4
- package/esm2022/list/lib/list.component.mjs +5 -5
- package/esm2022/list/lib/list.module.mjs +4 -4
- package/esm2022/loading/lib/loading-spinner.component.mjs +3 -3
- package/esm2022/loading/lib/loading.component.mjs +3 -3
- package/esm2022/loading/lib/loading.directive.mjs +3 -3
- package/esm2022/loading/lib/loading.module.mjs +4 -4
- package/esm2022/loading/lib/loading.service.mjs +3 -3
- package/esm2022/menu/lib/menu-item/menu-item.component.mjs +5 -5
- package/esm2022/menu/lib/menu.component.mjs +5 -5
- package/esm2022/menu/lib/menu.module.mjs +4 -4
- package/esm2022/navbar/lib/navbar.component.mjs +3 -3
- package/esm2022/navbar/lib/navbar.module.mjs +4 -4
- package/esm2022/notification/lib/notification.component.mjs +9 -9
- package/esm2022/notification/lib/notification.module.mjs +4 -4
- package/esm2022/notification/lib/notification.service.mjs +3 -3
- package/esm2022/number-box/lib/number-box.component.mjs +9 -6
- package/esm2022/number-box/lib/number-box.module.mjs +4 -4
- package/esm2022/otp/lib/otp.component.mjs +3 -3
- package/esm2022/otp/lib/otp.module.mjs +4 -4
- package/esm2022/page/lib/base-page.class.mjs +4 -4
- package/esm2022/page/lib/page.component.mjs +3 -3
- package/esm2022/page/lib/page.module.mjs +4 -4
- package/esm2022/password-box/lib/password-box.component.mjs +7 -4
- package/esm2022/password-box/lib/password-box.module.mjs +4 -4
- package/esm2022/picker/lib/picker-column.directive.mjs +3 -3
- package/esm2022/picker/lib/picker.component.mjs +6 -6
- package/esm2022/picker/lib/picker.module.mjs +4 -4
- package/esm2022/popover/lib/popover.component.mjs +3 -3
- package/esm2022/popover/lib/popover.module.mjs +4 -4
- package/esm2022/popup/lib/popup.component.mjs +10 -5
- package/esm2022/popup/lib/popup.module.mjs +4 -4
- package/esm2022/popup/lib/popup.service.mjs +3 -3
- package/esm2022/progress-bar/lib/progress-bar.component.mjs +3 -3
- package/esm2022/progress-bar/lib/progress-bar.module.mjs +4 -4
- package/esm2022/radio/lib/radio.component.mjs +3 -3
- package/esm2022/radio/lib/radio.module.mjs +4 -4
- package/esm2022/range-slider/lib/range-slider.component.mjs +3 -3
- package/esm2022/range-slider/lib/range-slider.module.mjs +4 -4
- package/esm2022/result/lib/result.component.mjs +3 -3
- package/esm2022/result/lib/result.module.mjs +4 -4
- package/esm2022/routing-progress/lib/routing-progress.component.mjs +3 -3
- package/esm2022/routing-progress/lib/routing-progress.module.mjs +4 -4
- package/esm2022/scheduler/lib/scheduler-month-view.component.mjs +3 -3
- package/esm2022/scheduler/lib/scheduler-week-view.component.mjs +3 -3
- package/esm2022/scheduler/lib/scheduler.component.mjs +3 -3
- package/esm2022/scheduler/lib/scheduler.module.mjs +4 -4
- package/esm2022/search-box/lib/search-box.component.mjs +3 -3
- package/esm2022/search-box/lib/search-box.module.mjs +4 -4
- package/esm2022/select-box/lib/select-box.component.mjs +48 -15
- package/esm2022/select-box/lib/select-box.module.mjs +4 -4
- package/esm2022/selection-list/lib/selection-list.component.mjs +3 -3
- package/esm2022/selection-list/lib/selection-list.module.mjs +4 -4
- package/esm2022/side-menu/lib/side-menu-item/side-menu-item.compoent.mjs +3 -3
- package/esm2022/side-menu/lib/side-menu.component.mjs +4 -4
- package/esm2022/side-menu/lib/side-menu.module.mjs +4 -4
- package/esm2022/skeleton/lib/skeleton.component.mjs +3 -3
- package/esm2022/skeleton/lib/skeleton.module.mjs +4 -4
- package/esm2022/switch/lib/switch-content.component.mjs +3 -3
- package/esm2022/switch/lib/switch.component.mjs +3 -3
- package/esm2022/switch/lib/switch.module.mjs +4 -4
- package/esm2022/tabs/lib/tab-content.directive.mjs +3 -3
- package/esm2022/tabs/lib/tab-item.component.mjs +3 -3
- package/esm2022/tabs/lib/tabs.component.mjs +4 -4
- package/esm2022/tabs/lib/tabs.module.mjs +4 -4
- package/esm2022/tag/lib/tag.component.mjs +3 -3
- package/esm2022/tag/lib/tag.module.mjs +4 -4
- package/esm2022/text-area/lib/text-area.component.mjs +12 -6
- package/esm2022/text-area/lib/text-area.module.mjs +4 -4
- package/esm2022/text-box/lib/mask-options.directive.mjs +3 -3
- package/esm2022/text-box/lib/text-box.component.mjs +7 -4
- package/esm2022/text-box/lib/text-box.module.mjs +4 -4
- package/esm2022/toast/lib/toast.component.mjs +9 -9
- package/esm2022/toast/lib/toast.module.mjs +4 -4
- package/esm2022/toast/lib/toast.service.mjs +3 -3
- package/esm2022/tooltip/lib/tooltip.component.mjs +3 -3
- package/esm2022/tooltip/lib/tooltip.directive.mjs +3 -3
- package/esm2022/tooltip/lib/tooltip.module.mjs +4 -4
- package/esm2022/uploader/index.mjs +3 -2
- package/esm2022/uploader/lib/uploader-browse-handle.directive.mjs +27 -0
- package/esm2022/uploader/lib/uploader-dialog-container.component.mjs +39 -0
- package/esm2022/uploader/lib/uploader-drop-zone.component.mjs +6 -5
- package/esm2022/uploader/lib/uploader-list.component.mjs +13 -54
- package/esm2022/uploader/lib/uploader-zone.directive.mjs +8 -6
- package/esm2022/uploader/lib/uploader.models.mjs +68 -0
- package/esm2022/uploader/lib/uploader.module.mjs +40 -18
- package/esm2022/uploader/lib/uploader.service.mjs +68 -36
- package/fesm2022/acorex-components-action-sheet.mjs +10 -10
- package/fesm2022/acorex-components-alert.mjs +12 -12
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-avatar.mjs +10 -10
- package/fesm2022/acorex-components-badge.mjs +7 -7
- package/fesm2022/acorex-components-breadcrumbs.mjs +10 -10
- package/fesm2022/acorex-components-button-group.mjs +8 -8
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +17 -17
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +15 -15
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +7 -7
- package/fesm2022/acorex-components-chips.mjs +7 -7
- package/fesm2022/acorex-components-circular-progress.mjs +8 -8
- package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-collapse.mjs +11 -11
- package/fesm2022/acorex-components-collapse.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +7 -7
- package/fesm2022/acorex-components-color-palette.mjs +26 -26
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-common.mjs +75 -67
- package/fesm2022/acorex-components-common.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +36 -36
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +26 -26
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +7 -7
- package/fesm2022/acorex-components-datetime-input.mjs +7 -7
- package/fesm2022/acorex-components-datetime-picker.mjs +9 -9
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +21 -21
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +10 -10
- package/fesm2022/acorex-components-drawer.mjs +10 -10
- package/fesm2022/acorex-components-dropdown.mjs +13 -13
- package/fesm2022/acorex-components-form.mjs +16 -16
- package/fesm2022/acorex-components-image.mjs +7 -7
- package/fesm2022/acorex-components-label.mjs +7 -7
- package/fesm2022/acorex-components-list.mjs +9 -9
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +16 -16
- package/fesm2022/acorex-components-menu.mjs +13 -13
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-navbar.mjs +7 -7
- package/fesm2022/acorex-components-notification.mjs +15 -15
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +12 -9
- package/fesm2022/acorex-components-number-box.mjs.map +1 -1
- package/fesm2022/acorex-components-otp.mjs +7 -7
- package/fesm2022/acorex-components-page.mjs +10 -10
- package/fesm2022/acorex-components-page.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +10 -7
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +12 -12
- package/fesm2022/acorex-components-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +7 -7
- package/fesm2022/acorex-components-popup.mjs +16 -11
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +7 -7
- package/fesm2022/acorex-components-radio.mjs +7 -7
- package/fesm2022/acorex-components-range-slider.mjs +7 -7
- package/fesm2022/acorex-components-result.mjs +7 -7
- package/fesm2022/acorex-components-routing-progress.mjs +7 -7
- package/fesm2022/acorex-components-scheduler.mjs +13 -13
- package/fesm2022/acorex-components-search-box.mjs +7 -7
- package/fesm2022/acorex-components-select-box.mjs +50 -17
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +7 -7
- package/fesm2022/acorex-components-side-menu.mjs +11 -11
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-skeleton.mjs +7 -7
- package/fesm2022/acorex-components-switch.mjs +10 -10
- package/fesm2022/acorex-components-tabs.mjs +14 -14
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag.mjs +7 -7
- package/fesm2022/acorex-components-text-area.mjs +15 -9
- package/fesm2022/acorex-components-text-area.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +13 -10
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +15 -15
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +10 -10
- package/fesm2022/acorex-components-uploader.mjs +266 -130
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/number-box/lib/number-box.component.d.ts +1 -1
- package/package.json +3 -3
- package/page/lib/base-page.class.d.ts +1 -0
- package/password-box/lib/password-box.component.d.ts +1 -1
- package/select-box/lib/select-box.component.d.ts +10 -3
- package/text-area/lib/text-area.component.d.ts +2 -1
- package/text-box/lib/text-box.component.d.ts +1 -1
- package/uploader/index.d.ts +2 -1
- package/uploader/lib/uploader-browse-handle.directive.d.ts +11 -0
- package/uploader/lib/uploader-dialog-container.component.d.ts +9 -0
- package/uploader/lib/uploader-list.component.d.ts +4 -19
- package/uploader/lib/uploader-zone.directive.d.ts +1 -0
- package/uploader/lib/uploader.models.d.ts +19 -0
- package/uploader/lib/uploader.module.d.ts +15 -9
- package/uploader/lib/uploader.service.d.ts +15 -8
- package/esm2022/uploader/lib/uploader-overlay.component.mjs +0 -12
- package/uploader/lib/uploader-overlay.component.d.ts +0 -6
@@ -1,133 +1,166 @@
|
|
1
|
-
import { MXBaseComponent } from '@acorex/components/common';
|
2
1
|
import * as i0 from '@angular/core';
|
3
|
-
import {
|
4
|
-
import
|
5
|
-
import
|
2
|
+
import { signal, inject, Injectable, Directive, Input, HostBinding, ElementRef, Component, ViewEncapsulation, NgModule } from '@angular/core';
|
3
|
+
import { AXFileService, AXFileModule } from '@acorex/core/file';
|
4
|
+
import * as i3 from '@acorex/core/translation';
|
5
|
+
import { AXTranslator, AXTranslationModule } from '@acorex/core/translation';
|
6
|
+
import { BehaviorSubject, switchMap, map, interval } from 'rxjs';
|
7
|
+
import { sumBy } from 'lodash-es';
|
8
|
+
import { AXPopupService, AXPopupModule } from '@acorex/components/popup';
|
6
9
|
import { AUTO_STYLE, style, state, animate, transition, trigger } from '@angular/animations';
|
7
|
-
import
|
8
|
-
import { Dialog, DIALOG_DATA } from '@angular/cdk/dialog';
|
9
|
-
import { GlobalPositionStrategy } from '@angular/cdk/overlay';
|
10
|
-
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
11
|
-
import { BehaviorSubject } from 'rxjs';
|
10
|
+
import { AXClosbaleComponent, MXBaseComponent } from '@acorex/components/common';
|
12
11
|
import * as i2 from '@angular/common';
|
13
12
|
import { CommonModule } from '@angular/common';
|
14
|
-
import
|
15
|
-
import
|
16
|
-
import
|
17
|
-
import
|
18
|
-
import {
|
13
|
+
import { AXBasePageComponent } from '@acorex/components/page';
|
14
|
+
import * as i1 from '@acorex/components/circular-progress';
|
15
|
+
import { AXCircularProgressModule } from '@acorex/components/circular-progress';
|
16
|
+
import * as i4 from '@acorex/core/format';
|
17
|
+
import { AXFormatModule } from '@acorex/core/format';
|
18
|
+
import * as i1$1 from '@acorex/components/decorators';
|
19
|
+
import { AXDecoratorModule } from '@acorex/components/decorators';
|
19
20
|
import { AXButtonModule } from '@acorex/components/button';
|
21
|
+
import { AXProgressBarModule } from '@acorex/components/progress-bar';
|
22
|
+
import { AXDateTimeModule } from '@acorex/core/dateTime';
|
23
|
+
import { HttpClientModule } from '@angular/common/http';
|
20
24
|
|
21
|
-
class
|
22
|
-
|
23
|
-
|
25
|
+
class AXUploadRequest {
|
26
|
+
get name() {
|
27
|
+
return this.file.name;
|
28
|
+
}
|
29
|
+
get ext() {
|
30
|
+
const parts = this.name.split('.');
|
31
|
+
if (parts.length > 1) {
|
32
|
+
return parts[parts.length - 1];
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
// No extension found
|
36
|
+
return '';
|
37
|
+
}
|
38
|
+
}
|
39
|
+
get size() {
|
40
|
+
return this.file.size;
|
41
|
+
}
|
42
|
+
constructor(file) {
|
43
|
+
this.file = file;
|
44
|
+
this.progress = signal(0);
|
45
|
+
this.estimateTime = signal(0);
|
46
|
+
this.status = signal('new');
|
47
|
+
this.bytesTransferred = 0;
|
48
|
+
this.uploadSpeed = 1000000; // Simulated upload speed in bytes per interval (e.g., 50KB per interval)
|
49
|
+
this.interval = 1000;
|
50
|
+
this.intervalId = -1;
|
51
|
+
}
|
52
|
+
estimateTimeRemaining(bytesTransferred) {
|
53
|
+
const now = Date.now();
|
54
|
+
const elapsed = now - this.startTime; // Time in milliseconds
|
55
|
+
if (elapsed === 0) {
|
56
|
+
return null; // Avoid division by zero
|
57
|
+
}
|
58
|
+
const speed = bytesTransferred / elapsed; // Bytes per millisecond
|
59
|
+
const remainingBytes = this.size - bytesTransferred;
|
60
|
+
const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds
|
61
|
+
return estimatedTime; // Return the estimated time in milliseconds
|
62
|
+
}
|
63
|
+
async upload() {
|
64
|
+
this.startTime = Date.now();
|
65
|
+
this.progress.set(0);
|
66
|
+
this.status.set('inprogress');
|
67
|
+
this.intervalId = setInterval(() => {
|
68
|
+
this.bytesTransferred += this.uploadSpeed;
|
69
|
+
if (this.bytesTransferred > this.size) {
|
70
|
+
this.bytesTransferred = this.size;
|
71
|
+
}
|
72
|
+
const progress = Math.floor(this.bytesTransferred / this.size * 100);
|
73
|
+
this.progress.set(progress);
|
74
|
+
this.estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));
|
75
|
+
if (this.bytesTransferred === this.size) {
|
76
|
+
clearInterval(this.intervalId);
|
77
|
+
this.progress.set(100);
|
78
|
+
this.status.set('completed');
|
79
|
+
}
|
80
|
+
}, this.interval);
|
81
|
+
}
|
82
|
+
cancel() {
|
83
|
+
this.status.set('canceled');
|
84
|
+
this.bytesTransferred = 0;
|
85
|
+
this.estimateTime.set(0);
|
86
|
+
this.progress.set(0);
|
87
|
+
clearInterval(this.intervalId);
|
88
|
+
return Promise.resolve();
|
89
|
+
}
|
24
90
|
}
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: AXUploaderDropZoneComponent, decorators: [{
|
26
|
-
type: Component,
|
27
|
-
args: [{ selector: 'ax-uploader-drop-zone', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-uploader-drop-zone-container\">\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>\n" }]
|
28
|
-
}] });
|
29
91
|
|
30
92
|
class AXUploaderService {
|
31
93
|
constructor() {
|
32
|
-
this.
|
33
|
-
this.
|
94
|
+
this.popupService = inject(AXPopupService);
|
95
|
+
this.fileService = inject(AXFileService);
|
34
96
|
this.files$ = new BehaviorSubject([]);
|
97
|
+
this.totalEstimateTime = interval(500).pipe(switchMap(() => this.files$.asObservable()), map(f => sumBy(f, c => c.estimateTime())));
|
35
98
|
}
|
36
|
-
|
37
|
-
|
38
|
-
if (!this.dialogRef) {
|
39
|
-
this.dialogRef = this.dialog.open(AXUploaderListComponent, {
|
40
|
-
hasBackdrop: false,
|
41
|
-
closeOnNavigation: false,
|
42
|
-
width: '320px',
|
43
|
-
maxWidth: 320,
|
44
|
-
panelClass: [
|
45
|
-
'ax-uploader-list-pane',
|
46
|
-
'ax-animate-animated',
|
47
|
-
'ax-animate-fadeIn',
|
48
|
-
'ax-animate-faster',
|
49
|
-
],
|
50
|
-
positionStrategy: positionStrategy.bottom().end('24px'),
|
51
|
-
data: {
|
52
|
-
files: this.files$,
|
53
|
-
},
|
54
|
-
});
|
55
|
-
}
|
99
|
+
get files() {
|
100
|
+
return this.files$;
|
56
101
|
}
|
57
|
-
|
58
|
-
|
102
|
+
showDialog() {
|
103
|
+
Promise.resolve().then(function () { return uploaderList_component; }).then(c => {
|
104
|
+
this.popupService.open(c.AXUploaderListComponent, {
|
105
|
+
size: 'md',
|
106
|
+
title: "Upload File"
|
107
|
+
}).then(async () => {
|
108
|
+
await this.cancelAll();
|
109
|
+
this.clearAll();
|
110
|
+
});
|
111
|
+
});
|
59
112
|
}
|
60
|
-
|
61
|
-
|
62
|
-
formData.append(file.name, file);
|
63
|
-
return this.http.post(requestUrl, formData, options);
|
113
|
+
convertFileToRequest(file) {
|
114
|
+
return new AXUploadRequest(file);
|
64
115
|
}
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: AXUploaderService, decorators: [{
|
69
|
-
type: Injectable
|
70
|
-
}] });
|
71
|
-
|
72
|
-
class AXUploaderListComponent extends MXBaseComponent {
|
73
|
-
constructor(dialogRef) {
|
74
|
-
super();
|
75
|
-
this.dialogRef = dialogRef;
|
76
|
-
this.data = inject(DIALOG_DATA);
|
77
|
-
this.items = [];
|
78
|
-
this.leftTime = 5;
|
79
|
-
this.isCollapsed = false;
|
80
|
-
this.uploadService = inject(AXUploaderService);
|
81
|
-
this.uploadService.files$.subscribe({
|
82
|
-
next: (e) => {
|
83
|
-
this.items.push(...e);
|
84
|
-
// this.upload()
|
85
|
-
},
|
116
|
+
startUpload() {
|
117
|
+
this.files.value.filter(c => c.status() == 'new').forEach(c => {
|
118
|
+
c.upload();
|
86
119
|
});
|
87
120
|
}
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
}
|
94
|
-
|
121
|
+
async browse() {
|
122
|
+
try {
|
123
|
+
const files = await this.fileService.choose();
|
124
|
+
if (files.length) {
|
125
|
+
return this.add(files);
|
126
|
+
}
|
127
|
+
return Promise.resolve([]);
|
128
|
+
}
|
129
|
+
catch (error) {
|
130
|
+
console.error(error);
|
131
|
+
return Promise.resolve([]);
|
132
|
+
}
|
95
133
|
}
|
96
|
-
|
97
|
-
|
134
|
+
async add(files) {
|
135
|
+
const list = Array.from(files).map(f => this.convertFileToRequest(f));
|
136
|
+
const currentValue = this.files$.value;
|
137
|
+
currentValue.push(...list);
|
138
|
+
this.files$.next(currentValue);
|
139
|
+
this.showDialog();
|
140
|
+
this.startUpload();
|
141
|
+
return Promise.resolve(list);
|
98
142
|
}
|
99
|
-
|
100
|
-
this.dialogRef.close();
|
143
|
+
upload() {
|
101
144
|
}
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
state('true', style({ height: '0', visibility: 'hidden' })),
|
118
|
-
transition('false => true', animate(150 + 'ms ease-in')),
|
119
|
-
transition('true => false', animate(150 + 'ms ease-out')),
|
120
|
-
]),
|
121
|
-
], template: "<div class=\"ax-uploader-list-header\">\n <div>Uploader list</div>\n <div>\n <i\n class=\"ax-icon\"\n [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"\n ></i>\n\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n\n<div [@collapse]=\"isCollapsed\">\n <div class=\"ax-uploader-progress-status\">\n <div>{{ leftTime }}min left</div>\n <button>{{ 'common.cancel' | trans }}</button>\n </div>\n <ul class=\"ax-uploader-list-items\">\n <ng-container *ngFor=\"let item of items\">\n <li>\n <div>\n <i class=\"ax-icon ax-icon-inbox\"></i>\n <div class=\"ax-uploader-item-text\">\n <strong>{{ item.name }}</strong>\n <small>{{ item.size }}</small>\n </div>\n </div>\n <div>\n <ax-progress-bar style=\"width: 48px\" color=\"primary\" [progress]=\"20\"></ax-progress-bar>\n </div>\n </li>\n </ng-container>\n </ul>\n</div>\n", styles: [".ax-dark ax-uploader-list .ax-uploader-progress-status{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-500),.25);color:rgba(var(--ax-color-primary-fore))}ax-uploader-list{display:block;background-color:rgba(var(--ax-color-surface));-webkit-border-top-left-radius:.75rem;-webkit-border-top-right-radius:.75rem;-moz-border-radius-topleft:.75rem;-moz-border-radius-topright:.75rem;border-top-left-radius:.75rem;border-top-right-radius:.75rem;overflow:hidden;box-shadow:-1px -1px 10px rgba(0,0,0,.16);border:1px solid;border-color:rgba(var(--ax-color-border-default));outline-color:rgba(var(--ax-color-primary-500))}ax-uploader-list .ax-uploader-list-header{display:flex;justify-content:space-between;background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;font-weight:500;color:rgba(var(--ax-color-on-surface-fore))}ax-uploader-list .ax-uploader-list-header .ax-icon{-webkit-margin-start:.5rem;margin-inline-start:.5rem;cursor:pointer;font-size:1.5rem;line-height:2rem;line-height:1}ax-uploader-list .ax-uploader-list-header .ax-icon:hover{opacity:.75}ax-uploader-list .ax-uploader-progress-status{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-top-width:1px;border-color:rgba(var(--ax-color-primary-200));background-color:rgba(var(--ax-color-primary-200));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore-tint))}ax-uploader-list .ax-uploader-list-items{padding:.5rem 0;overflow-y:auto;overflow-x:hidden;max-height:75vh}ax-uploader-list .ax-uploader-list-items li{display:flex;align-items:center;justify-content:space-between;padding:.75rem;font-size:.875rem;line-height:1.25rem}ax-uploader-list .ax-uploader-list-items li>div{display:flex}ax-uploader-list .ax-uploader-list-items li>div .ax-icon{-webkit-margin-end:.5rem;margin-inline-end:.5rem;display:flex;font-size:1.5rem;line-height:1}ax-uploader-list .ax-uploader-list-items li>div .ax-uploader-item-text{display:flex;flex-direction:column}ax-uploader-list .ax-uploader-list-items li>div .ax-uploader-item-text strong{display:block;font-weight:500}ax-uploader-list .ax-uploader-list-items li>div .ax-uploader-item-text small{color:rgb(var(--ax-color-text-default),.5)}.ax-uploader-list-pane .cdk-dialog-container:focus,.ax-uploader-list-pane .cdk-dialog-container:focus-visible,.ax-uploader-list-pane .cdk-dialog-container:focus-within{outline:2px solid transparent;outline-offset:2px}\n"] }]
|
122
|
-
}], ctorParameters: () => [{ type: i1$1.DialogRef }] });
|
123
|
-
|
124
|
-
class AXUploaderOverlayComponent extends MXBaseComponent {
|
125
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: AXUploaderOverlayComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
126
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: AXUploaderOverlayComponent, selector: "ax-uploader-overlay", usesInheritance: true, ngImport: i0, template: "<div\n class=\"ax-flex ax-flex-col ax-gap-4 ax-items-center ax-justify-center ax-h-[95vh] hover:ax-bg-primary-50 ax-m-2 hover:ax-border-2 ax-rounded-lg hover:ax-border-primary-500\">\n\n</div>", styles: [""], encapsulation: i0.ViewEncapsulation.None }); }
|
145
|
+
async cancelAll() {
|
146
|
+
await Promise.all(this.files$.value.filter(c => c.status() != 'completed').map(c => c.cancel()));
|
147
|
+
}
|
148
|
+
clearAll() {
|
149
|
+
this.files$.value
|
150
|
+
.filter(c => c.status() != 'inprogress')
|
151
|
+
.forEach(c => this.remove(c));
|
152
|
+
}
|
153
|
+
remove(item) {
|
154
|
+
let currentValue = this.files$.value;
|
155
|
+
currentValue = currentValue.filter(c => c != item);
|
156
|
+
this.files$.next(currentValue);
|
157
|
+
}
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
159
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderService, providedIn: 'root' }); }
|
127
160
|
}
|
128
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
129
|
-
type:
|
130
|
-
args: [{
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderService, decorators: [{
|
162
|
+
type: Injectable,
|
163
|
+
args: [{ providedIn: 'root' }]
|
131
164
|
}] });
|
132
165
|
|
133
166
|
class AXUploaderZoneDirective {
|
@@ -161,8 +194,7 @@ class AXUploaderZoneDirective {
|
|
161
194
|
handleOnDrop(event) {
|
162
195
|
event.preventDefault();
|
163
196
|
event.stopImmediatePropagation();
|
164
|
-
this.uploadService.
|
165
|
-
this.uploadService.openDialog();
|
197
|
+
this.uploadService.add(event.dataTransfer?.files);
|
166
198
|
this.removeZone();
|
167
199
|
}
|
168
200
|
handleDragOver(event) {
|
@@ -183,13 +215,16 @@ class AXUploaderZoneDirective {
|
|
183
215
|
removeZone() {
|
184
216
|
this.overlayElement.remove();
|
185
217
|
}
|
218
|
+
browser() {
|
219
|
+
this.uploadService.browse();
|
220
|
+
}
|
186
221
|
get __hostClass() {
|
187
222
|
return `ax-drop-zone`;
|
188
223
|
}
|
189
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
190
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.
|
224
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderZoneDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
225
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: { multiple: "multiple" }, host: { properties: { "class": "this.__hostClass" } }, ngImport: i0 }); }
|
191
226
|
}
|
192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderZoneDirective, decorators: [{
|
193
228
|
type: Directive,
|
194
229
|
args: [{
|
195
230
|
selector: '[axUploaderZone]',
|
@@ -201,35 +236,131 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
201
236
|
args: ['class']
|
202
237
|
}] } });
|
203
238
|
|
239
|
+
class AXUploaderBrowseDirective {
|
240
|
+
constructor() {
|
241
|
+
this.uploaderZone = inject(AXUploaderZoneDirective);
|
242
|
+
this.elemenrRef = inject((ElementRef));
|
243
|
+
}
|
244
|
+
ngOnInit() {
|
245
|
+
this.elemenrRef.nativeElement.addEventListener('click', this.handleClick.bind(this));
|
246
|
+
}
|
247
|
+
ngOnDestroy() {
|
248
|
+
this.elemenrRef.nativeElement.removeEventListener('click', this.handleClick.bind(this));
|
249
|
+
}
|
250
|
+
handleClick() {
|
251
|
+
this.uploaderZone.browser();
|
252
|
+
}
|
253
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderBrowseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
254
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderBrowseDirective, selector: "[axUploaderBrowseHandle]", ngImport: i0 }); }
|
255
|
+
}
|
256
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderBrowseDirective, decorators: [{
|
257
|
+
type: Directive,
|
258
|
+
args: [{
|
259
|
+
selector: '[axUploaderBrowseHandle]',
|
260
|
+
}]
|
261
|
+
}] });
|
262
|
+
|
263
|
+
class AXUploaderListComponent extends AXBasePageComponent {
|
264
|
+
constructor() {
|
265
|
+
super(...arguments);
|
266
|
+
this.uploadService = inject(AXUploaderService);
|
267
|
+
}
|
268
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
269
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: AXUploaderListComponent, selector: "ax-uploader-list", usesInheritance: true, ngImport: i0, template: "@if((uploadService.totalEstimateTime | async) > 0)\n{\n<div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n</div>\n}\n<ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <div class=\"ax-file ax-bg-success-500\">\n <span>{{ item.ext }}</span>\n </div>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\" [title]=\"item.name\">{{ item.name }}</div>\n <div><span>{{ item.size | format: 'filesize' }}</span>\n @switch (item.status()) {\n @case ('inprogress') {\n / {{ item.estimateTime() | format: 'timeleft' }}\n }\n }\n </div>\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n </div>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">Canceled</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">Failed</span>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\"\n title=\"{{ 'common.cancel' | trans }}\"></i>\n </div>\n }\n }\n </li>\n }\n</ul>", styles: [".ax-dark ax-uploader-list .ax-uploader-progress-status{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-500),.25);color:rgba(var(--ax-color-primary-fore))}ax-uploader-list .ax-uploader-progress-status{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-top-width:1px;border-color:rgba(var(--ax-color-primary-200));background-color:rgba(var(--ax-color-primary-200));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore-tint))}ax-uploader-list .ax-uploader-list-items{max-height:75vh;width:100%;overflow-y:auto;overflow-x:hidden;padding:.5rem 1rem;gap:.5rem;display:flex;flex-direction:column}ax-uploader-list .ax-uploader-list-items li{display:flex;align-items:center;font-size:.875rem;line-height:1.25rem;gap:1rem;width:100%}ax-uploader-list .ax-uploader-list-items li .ax-item-container{display:flex;flex-direction:column;flex:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}ax-uploader-list .ax-uploader-list-items li .ax-item-container .ax-item-name{font-size:.875rem;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;width:12rem}ax-uploader-list .ax-uploader-list-items li .ax-status{position:relative;color:rgba(var(--ax-color-black),.5)}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon{font-size:1.375rem}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon-close{cursor:pointer}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-canceled{color:rgba(var(--ax-color-neutral-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-failed{color:rgba(var(--ax-color-danger-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-completed{color:rgba(var(--ax-color-success-500))}ax-uploader-list .ax-uploader-list-items li:hover .ax-hide{display:flex!important}ax-uploader-list .ax-uploader-list-items li:hover .ax-show{display:none!important}ax-uploader-list .ax-uploader-list-items li .ax-show{display:flex!important}ax-uploader-list .ax-uploader-list-items li .ax-hide{display:none!important}.ax-file{position:relative;display:flex;align-items:center;justify-content:center;width:1.5rem;aspect-ratio:.7;border-radius:.25rem;color:rgba(var(--ax-color-white))}.ax-file>*{position:absolute;bottom:.3rem;font-weight:700;font-size:.65rem;line-height:.65rem}.ax-file:before{content:\"\";position:absolute;top:0;right:0;border-width:0 12px 12px 0;border-color:rgba(var(--ax-color-surface)) rgba(var(--ax-color-surface)) rgba(var(--ax-color-black),.3) rgba(var(--ax-color-black),.3)}\n"], dependencies: [{ kind: "component", type: i1.AXCircularProgressComponent, selector: "ax-circular-progress", inputs: ["color", "progress", "stroke", "size"], outputs: ["ValueChange", "strokeChange", "sizeChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "trans" }, { kind: "pipe", type: i4.AXFormatPipe, name: "format" }], encapsulation: i0.ViewEncapsulation.None }); }
|
270
|
+
}
|
271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderListComponent, decorators: [{
|
272
|
+
type: Component,
|
273
|
+
args: [{ selector: 'ax-uploader-list', encapsulation: ViewEncapsulation.None, template: "@if((uploadService.totalEstimateTime | async) > 0)\n{\n<div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'common.cancel' | trans }}</button>\n</div>\n}\n<ul class=\"ax-uploader-list-items\">\n @for (item of uploadService.files | async; track item.name) {\n <li>\n <div class=\"ax-file ax-bg-success-500\">\n <span>{{ item.ext }}</span>\n </div>\n <div class=\"ax-item-container\">\n <div class=\"ax-item-name\" [title]=\"item.name\">{{ item.name }}</div>\n <div><span>{{ item.size | format: 'filesize' }}</span>\n @switch (item.status()) {\n @case ('inprogress') {\n / {{ item.estimateTime() | format: 'timeleft' }}\n }\n }\n </div>\n </div>\n @switch (item.status()) {\n @case ('completed') {\n <div class=\"ax-status\">\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n </div>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">Canceled</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">Failed</span>\n }\n @default {\n <div class=\"ax-status\">\n <ax-circular-progress [size]=\"22\" [stroke]=\"6\" [progress]=\"item.progress()\" class=\"ax-show\">\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\"\n title=\"{{ 'common.cancel' | trans }}\"></i>\n </div>\n }\n }\n </li>\n }\n</ul>", styles: [".ax-dark ax-uploader-list .ax-uploader-progress-status{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-500),.25);color:rgba(var(--ax-color-primary-fore))}ax-uploader-list .ax-uploader-progress-status{display:flex;align-items:center;justify-content:space-between;border-bottom-width:1px;border-top-width:1px;border-color:rgba(var(--ax-color-primary-200));background-color:rgba(var(--ax-color-primary-200));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore-tint))}ax-uploader-list .ax-uploader-list-items{max-height:75vh;width:100%;overflow-y:auto;overflow-x:hidden;padding:.5rem 1rem;gap:.5rem;display:flex;flex-direction:column}ax-uploader-list .ax-uploader-list-items li{display:flex;align-items:center;font-size:.875rem;line-height:1.25rem;gap:1rem;width:100%}ax-uploader-list .ax-uploader-list-items li .ax-item-container{display:flex;flex-direction:column;flex:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}ax-uploader-list .ax-uploader-list-items li .ax-item-container .ax-item-name{font-size:.875rem;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;width:12rem}ax-uploader-list .ax-uploader-list-items li .ax-status{position:relative;color:rgba(var(--ax-color-black),.5)}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon{font-size:1.375rem}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-icon-close{cursor:pointer}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-canceled{color:rgba(var(--ax-color-neutral-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-failed{color:rgba(var(--ax-color-danger-500))}ax-uploader-list .ax-uploader-list-items li .ax-status .ax-state-completed{color:rgba(var(--ax-color-success-500))}ax-uploader-list .ax-uploader-list-items li:hover .ax-hide{display:flex!important}ax-uploader-list .ax-uploader-list-items li:hover .ax-show{display:none!important}ax-uploader-list .ax-uploader-list-items li .ax-show{display:flex!important}ax-uploader-list .ax-uploader-list-items li .ax-hide{display:none!important}.ax-file{position:relative;display:flex;align-items:center;justify-content:center;width:1.5rem;aspect-ratio:.7;border-radius:.25rem;color:rgba(var(--ax-color-white))}.ax-file>*{position:absolute;bottom:.3rem;font-weight:700;font-size:.65rem;line-height:.65rem}.ax-file:before{content:\"\";position:absolute;top:0;right:0;border-width:0 12px 12px 0;border-color:rgba(var(--ax-color-surface)) rgba(var(--ax-color-surface)) rgba(var(--ax-color-black),.3) rgba(var(--ax-color-black),.3)}\n"] }]
|
274
|
+
}] });
|
275
|
+
|
276
|
+
var uploaderList_component = /*#__PURE__*/Object.freeze({
|
277
|
+
__proto__: null,
|
278
|
+
AXUploaderListComponent: AXUploaderListComponent
|
279
|
+
});
|
280
|
+
|
281
|
+
class AXUploaderDialogContainerComponent {
|
282
|
+
constructor() {
|
283
|
+
this.parent = inject(AXClosbaleComponent);
|
284
|
+
this.isCollapsed = false;
|
285
|
+
}
|
286
|
+
close() {
|
287
|
+
this.parent.close();
|
288
|
+
}
|
289
|
+
toggle() {
|
290
|
+
this.isCollapsed = !this.isCollapsed;
|
291
|
+
}
|
292
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDialogContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
293
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderDialogContainerComponent, selector: "ax-uploader-dialog-container", ngImport: i0, template: "<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i class=\"ax-icon\" [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <ax-uploader-list></ax-uploader-list>\n</div>", styles: ["ax-uploader-dialog-container{display:block;background-color:rgba(var(--ax-color-surface));-webkit-border-top-left-radius:.75rem;-webkit-border-top-right-radius:.75rem;-moz-border-radius-topleft:.75rem;-moz-border-radius-topright:.75rem;border-top-left-radius:.75rem;border-top-right-radius:.75rem;overflow:hidden;box-shadow:-1px -1px 10px rgba(0,0,0,.16);border:1px solid;border-color:rgba(var(--ax-color-border-default));outline-color:rgba(var(--ax-color-primary-500))}ax-uploader-dialog-container .ax-uploader-list-header{display:flex;justify-content:space-between;background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;font-weight:500;color:rgba(var(--ax-color-on-surface-fore))}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon{-webkit-margin-start:.5rem;margin-inline-start:.5rem;cursor:pointer}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon:hover{opacity:.75}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AXUploaderListComponent, selector: "ax-uploader-list" }], animations: [
|
294
|
+
trigger('collapse', [
|
295
|
+
state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
|
296
|
+
state('true', style({ height: '0', visibility: 'hidden' })),
|
297
|
+
transition('false => true', animate(150 + 'ms ease-in')),
|
298
|
+
transition('true => false', animate(150 + 'ms ease-out')),
|
299
|
+
]),
|
300
|
+
], encapsulation: i0.ViewEncapsulation.None }); }
|
301
|
+
}
|
302
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDialogContainerComponent, decorators: [{
|
303
|
+
type: Component,
|
304
|
+
args: [{ selector: 'ax-uploader-dialog-container', encapsulation: ViewEncapsulation.None, animations: [
|
305
|
+
trigger('collapse', [
|
306
|
+
state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
|
307
|
+
state('true', style({ height: '0', visibility: 'hidden' })),
|
308
|
+
transition('false => true', animate(150 + 'ms ease-in')),
|
309
|
+
transition('true => false', animate(150 + 'ms ease-out')),
|
310
|
+
]),
|
311
|
+
], template: "<div class=\"ax-uploader-list-header\">\n <div>Uploading</div>\n <div>\n <i class=\"ax-icon\" [ngClass]=\"{ 'ax-icon-chevron-down': !isCollapsed, 'ax-icon-chevron-up': isCollapsed }\"\n (click)=\"toggle()\"></i>\n <i class=\"ax-icon ax-icon-close\" (click)=\"close()\"></i>\n </div>\n</div>\n<div [@collapse]=\"isCollapsed\">\n <ax-uploader-list></ax-uploader-list>\n</div>", styles: ["ax-uploader-dialog-container{display:block;background-color:rgba(var(--ax-color-surface));-webkit-border-top-left-radius:.75rem;-webkit-border-top-right-radius:.75rem;-moz-border-radius-topleft:.75rem;-moz-border-radius-topright:.75rem;border-top-left-radius:.75rem;border-top-right-radius:.75rem;overflow:hidden;box-shadow:-1px -1px 10px rgba(0,0,0,.16);border:1px solid;border-color:rgba(var(--ax-color-border-default));outline-color:rgba(var(--ax-color-primary-500))}ax-uploader-dialog-container .ax-uploader-list-header{display:flex;justify-content:space-between;background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;font-weight:500;color:rgba(var(--ax-color-on-surface-fore))}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon{-webkit-margin-start:.5rem;margin-inline-start:.5rem;cursor:pointer}ax-uploader-dialog-container .ax-uploader-list-header .ax-icon:hover{opacity:.75}\n"] }]
|
312
|
+
}] });
|
313
|
+
|
314
|
+
class AXUploaderDropZoneComponent extends MXBaseComponent {
|
315
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDropZoneComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
316
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: AXUploaderDropZoneComponent, selector: "ax-uploader-drop-zone", usesInheritance: true, ngImport: i0, template: "<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>", styles: [".ax-uploader-drop-zone-container{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.5rem;margin:1rem;padding:1rem;gap:1rem;border:2px dashed;border-color:rgba(var(--ax-color-border-default))}.ax-uploader-drop-zone-container:hover{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-50))}.ax-uploader-drop-zone-container ax-icon{font-size:1.875rem;line-height:2.25rem;color:#a3a3a3}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description{display:flex;flex-direction:column;gap:.5rem}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description a{color:rgba(var(--ax-color-primary-500))}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description p{font-size:.875rem;line-height:1.25rem;color:#a3a3a3}\n"], dependencies: [{ kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: ["multiple"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
317
|
+
}
|
318
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderDropZoneComponent, decorators: [{
|
319
|
+
type: Component,
|
320
|
+
args: [{ selector: 'ax-uploader-drop-zone', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-uploader-drop-zone-container\" axUploaderZone>\n <ax-icon class=\"ax-icon ax-icon-upload\"></ax-icon>\n <div class=\"ax-uploader-drop-zone-description\">\n <span>Drag & Drop or <a href=\"#\">Choose file</a> to upload</span>\n <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p>\n </div>\n</div>", styles: [".ax-uploader-drop-zone-container{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.5rem;margin:1rem;padding:1rem;gap:1rem;border:2px dashed;border-color:rgba(var(--ax-color-border-default))}.ax-uploader-drop-zone-container:hover{border-color:rgba(var(--ax-color-primary-500));background-color:rgba(var(--ax-color-primary-50))}.ax-uploader-drop-zone-container ax-icon{font-size:1.875rem;line-height:2.25rem;color:#a3a3a3}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description{display:flex;flex-direction:column;gap:.5rem}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description a{color:rgba(var(--ax-color-primary-500))}.ax-uploader-drop-zone-container .ax-uploader-drop-zone-description p{font-size:.875rem;line-height:1.25rem;color:#a3a3a3}\n"] }]
|
321
|
+
}] });
|
322
|
+
|
204
323
|
class AXUploaderModule {
|
205
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
206
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.
|
324
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
325
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, declarations: [AXUploaderDropZoneComponent,
|
207
326
|
AXUploaderListComponent,
|
208
|
-
|
209
|
-
|
327
|
+
AXUploaderZoneDirective,
|
328
|
+
AXUploaderBrowseDirective,
|
329
|
+
AXUploaderDialogContainerComponent], imports: [CommonModule,
|
210
330
|
HttpClientModule,
|
211
331
|
AXDecoratorModule,
|
212
332
|
AXButtonModule,
|
213
333
|
AXTranslationModule,
|
214
|
-
AXProgressBarModule
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
334
|
+
AXProgressBarModule,
|
335
|
+
AXFormatModule,
|
336
|
+
AXFileModule,
|
337
|
+
AXDateTimeModule,
|
338
|
+
AXCircularProgressModule,
|
339
|
+
AXPopupModule], exports: [AXUploaderDropZoneComponent,
|
340
|
+
AXUploaderZoneDirective,
|
341
|
+
AXUploaderBrowseDirective,
|
342
|
+
AXUploaderDialogContainerComponent] }); }
|
343
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, providers: [AXUploaderService], imports: [CommonModule,
|
219
344
|
HttpClientModule,
|
220
345
|
AXDecoratorModule,
|
221
346
|
AXButtonModule,
|
222
347
|
AXTranslationModule,
|
223
|
-
AXProgressBarModule
|
348
|
+
AXProgressBarModule,
|
349
|
+
AXFormatModule,
|
350
|
+
AXFileModule,
|
351
|
+
AXDateTimeModule,
|
352
|
+
AXCircularProgressModule,
|
353
|
+
AXPopupModule] }); }
|
224
354
|
}
|
225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AXUploaderModule, decorators: [{
|
226
356
|
type: NgModule,
|
227
357
|
args: [{
|
228
358
|
declarations: [
|
229
359
|
AXUploaderDropZoneComponent,
|
230
360
|
AXUploaderListComponent,
|
231
|
-
AXUploaderOverlayComponent,
|
232
361
|
AXUploaderZoneDirective,
|
362
|
+
AXUploaderBrowseDirective,
|
363
|
+
AXUploaderDialogContainerComponent,
|
233
364
|
],
|
234
365
|
imports: [
|
235
366
|
CommonModule,
|
@@ -238,14 +369,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
238
369
|
AXButtonModule,
|
239
370
|
AXTranslationModule,
|
240
371
|
AXProgressBarModule,
|
372
|
+
AXFormatModule,
|
373
|
+
AXFileModule,
|
374
|
+
AXDateTimeModule,
|
375
|
+
AXCircularProgressModule,
|
376
|
+
AXPopupModule,
|
241
377
|
],
|
242
378
|
exports: [
|
243
379
|
AXUploaderDropZoneComponent,
|
244
|
-
AXUploaderListComponent,
|
245
|
-
AXUploaderOverlayComponent,
|
246
380
|
AXUploaderZoneDirective,
|
381
|
+
AXUploaderBrowseDirective,
|
382
|
+
AXUploaderDialogContainerComponent,
|
247
383
|
],
|
248
|
-
providers: [AXUploaderService
|
384
|
+
providers: [AXUploaderService],
|
249
385
|
}]
|
250
386
|
}] });
|
251
387
|
|
@@ -253,5 +389,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
253
389
|
* Generated bundle index. Do not edit.
|
254
390
|
*/
|
255
391
|
|
256
|
-
export { AXUploaderDropZoneComponent, AXUploaderListComponent, AXUploaderModule,
|
392
|
+
export { AXUploaderBrowseDirective, AXUploaderDialogContainerComponent, AXUploaderDropZoneComponent, AXUploaderListComponent, AXUploaderModule, AXUploaderService, AXUploaderZoneDirective };
|
257
393
|
//# sourceMappingURL=acorex-components-uploader.mjs.map
|