@acorex/components 18.5.17 → 18.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audio-wave/lib/audio-wave.component.d.ts +5 -0
- package/button-group/lib/button-group.component.d.ts +5 -2
- package/circular-progress/lib/circular-progress.component.d.ts +21 -57
- package/data-pager/lib/data-pager-pagesize-dropdown.component.d.ts +28 -0
- package/data-pager/lib/data-pager-prev-buttons.component.d.ts +20 -0
- package/data-pager/lib/data-pager.component.d.ts +111 -0
- package/data-table/lib/columns/data-text-column.component.d.ts +58 -0
- package/data-table/lib/columns/row-command-column.component.d.ts +83 -0
- package/data-table/lib/columns/row-index-column.component.d.ts +51 -0
- package/data-table/lib/columns/row-select-column.component.d.ts +47 -0
- package/data-table/lib/data-table/data-table.component.d.ts +200 -0
- package/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.d.ts +185 -0
- package/datetime-box/lib/datetime-box.component.d.ts +59 -1
- package/datetime-input/lib/datetime-input.component.d.ts +133 -0
- package/datetime-picker/lib/datetime-picker.component.d.ts +95 -0
- package/decorators/lib/components/clear-button.component.d.ts +25 -0
- package/decorators/lib/components/close-button.component.d.ts +22 -0
- package/decorators/lib/components/generic-content.component.d.ts +4 -0
- package/decorators/lib/components/icon.component.d.ts +12 -0
- package/dialog/lib/dialog.component.d.ts +20 -0
- package/drawer/lib/drawer-container.component.d.ts +7 -0
- package/drawer/lib/drawer.component.d.ts +104 -0
- package/dropdown/lib/dropdown-box.component.d.ts +66 -0
- package/dropdown/lib/dropdown-panel.component.d.ts +85 -0
- package/dropdown-button/lib/dropdown-button.component.d.ts +38 -0
- package/esm2022/audio-wave/lib/audio-wave.component.mjs +6 -1
- package/esm2022/button-group/lib/button-group.component.mjs +6 -3
- package/esm2022/circular-progress/lib/circular-progress.component.mjs +45 -114
- package/esm2022/data-pager/lib/data-pager-pagesize-dropdown.component.mjs +23 -1
- package/esm2022/data-pager/lib/data-pager-prev-buttons.component.mjs +18 -1
- package/esm2022/data-pager/lib/data-pager.component.mjs +109 -1
- package/esm2022/data-table/lib/columns/data-text-column.component.mjs +32 -1
- package/esm2022/data-table/lib/columns/row-command-column.component.mjs +63 -1
- package/esm2022/data-table/lib/columns/row-index-column.component.mjs +40 -1
- package/esm2022/data-table/lib/columns/row-select-column.component.mjs +39 -1
- package/esm2022/data-table/lib/data-table/data-table.component.mjs +183 -1
- package/esm2022/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.mjs +159 -1
- package/esm2022/datetime-box/lib/datetime-box.component.mjs +51 -2
- package/esm2022/datetime-input/lib/datetime-input.component.mjs +122 -1
- package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +90 -1
- package/esm2022/decorators/lib/components/clear-button.component.mjs +26 -1
- package/esm2022/decorators/lib/components/close-button.component.mjs +23 -1
- package/esm2022/decorators/lib/components/generic-content.component.mjs +5 -1
- package/esm2022/decorators/lib/components/icon.component.mjs +13 -1
- package/esm2022/dialog/lib/dialog.component.mjs +18 -1
- package/esm2022/drawer/lib/drawer-container.component.mjs +8 -1
- package/esm2022/drawer/lib/drawer.component.mjs +102 -1
- package/esm2022/dropdown/lib/dropdown-box.component.mjs +58 -1
- package/esm2022/dropdown/lib/dropdown-panel.component.mjs +77 -1
- package/esm2022/dropdown-button/lib/dropdown-button.component.mjs +36 -1
- package/esm2022/form/lib/form-field.component.mjs +40 -1
- package/esm2022/form/lib/form.component.mjs +59 -1
- package/esm2022/form/lib/validation-summary.component.mjs +41 -1
- package/esm2022/image/lib/image.component.mjs +47 -1
- package/esm2022/label/lib/label.component.mjs +32 -1
- package/esm2022/list/lib/list.component.mjs +84 -1
- package/esm2022/loading/lib/loading-spinner.component.mjs +17 -1
- package/esm2022/loading/lib/loading.component.mjs +27 -1
- package/esm2022/popup/lib/popup.component.mjs +2 -2
- package/esm2022/progress-bar/lib/progress-bar.component.mjs +1 -1
- package/esm2022/uploader/index.mjs +5 -5
- package/esm2022/uploader/lib/{uploader-dialog-container.component.mjs → uploader-dialog-container/uploader-dialog-container.component.mjs} +2 -2
- package/esm2022/uploader/lib/uploader-drop-zone/uploader-drop-zone.component.mjs +27 -0
- package/esm2022/uploader/lib/uploader-list/uploader-list.component.mjs +26 -0
- package/esm2022/uploader/lib/uploader-zone.directive.mjs +23 -16
- package/esm2022/uploader/lib/uploader.models.mjs +6 -1
- package/esm2022/uploader/lib/uploader.module.mjs +18 -13
- package/esm2022/uploader/lib/uploader.service.mjs +14 -7
- package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.mjs +50 -10
- package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-toolbar/wysiwyg-toolbar.component.mjs +8 -16
- package/fesm2022/acorex-components-audio-wave.mjs +5 -0
- package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
- package/fesm2022/acorex-components-button-group.mjs +5 -2
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-circular-progress.mjs +44 -113
- package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +147 -0
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +510 -0
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +50 -1
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +121 -0
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +89 -0
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +63 -0
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +17 -0
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +108 -0
- package/fesm2022/acorex-components-drawer.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown-button.mjs +35 -0
- package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +133 -0
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +137 -0
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +46 -0
- package/fesm2022/acorex-components-image.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +31 -0
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +83 -0
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +42 -0
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +1 -1
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +63 -32
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +55 -25
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/form/lib/form-field.component.d.ts +45 -0
- package/form/lib/form.component.d.ts +58 -0
- package/form/lib/validation-summary.component.d.ts +49 -0
- package/image/lib/image.component.d.ts +61 -0
- package/label/lib/label.component.d.ts +34 -0
- package/list/lib/list.component.d.ts +98 -0
- package/loading/lib/loading-spinner.component.d.ts +20 -0
- package/loading/lib/loading.component.d.ts +35 -0
- package/package.json +66 -66
- package/progress-bar/lib/progress-bar.component.d.ts +0 -1
- package/uploader/index.d.ts +4 -4
- package/uploader/lib/{uploader-drop-zone.component.d.ts → uploader-drop-zone/uploader-drop-zone.component.d.ts} +3 -1
- package/uploader/lib/{uploader-list.component.d.ts → uploader-list/uploader-list.component.d.ts} +1 -1
- package/uploader/lib/uploader-zone.directive.d.ts +1 -0
- package/uploader/lib/uploader.models.d.ts +5 -0
- package/uploader/lib/uploader.module.d.ts +4 -4
- package/uploader/lib/uploader.service.d.ts +2 -1
- package/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.d.ts +16 -3
- package/wysiwyg/lib/wysiwyg/wysiwyg-toolbar/wysiwyg-toolbar.component.d.ts +3 -4
- package/esm2022/uploader/lib/uploader-drop-zone.component.mjs +0 -18
- package/esm2022/uploader/lib/uploader-list.component.mjs +0 -26
- /package/uploader/lib/{uploader-dialog-container.component.d.ts → uploader-dialog-container/uploader-dialog-container.component.d.ts} +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, computed, inject, Injectable, EventEmitter, Directive, Input, Output, HostBinding, ElementRef, Component, ViewEncapsulation, NgModule } from '@angular/core';
|
|
2
|
+
import { signal, computed, inject, Injectable, ChangeDetectorRef, EventEmitter, Directive, Input, Output, HostBinding, ElementRef, Component, ViewEncapsulation, input, NgModule } from '@angular/core';
|
|
3
3
|
import * as i3 from '@acorex/core/translation';
|
|
4
4
|
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
|
5
|
+
import { AXUnsubscriber } from '@acorex/core/utils';
|
|
5
6
|
import { AXPopupService, AXPopupModule } from '@acorex/components/popup';
|
|
6
7
|
import { AXFileService, AXFileModule } from '@acorex/core/file';
|
|
7
8
|
import { sumBy } from 'lodash-es';
|
|
8
9
|
import { BehaviorSubject, Subject, interval, switchMap, map } from 'rxjs';
|
|
9
|
-
import { AXUnsubscriber } from '@acorex/core/utils';
|
|
10
10
|
import { AXClosbaleComponent, MXBaseComponent } from '@acorex/components/common';
|
|
11
11
|
import { trigger, state, style, AUTO_STYLE, transition, animate } from '@angular/animations';
|
|
12
12
|
import * as i1$1 from '@angular/common';
|
|
@@ -52,6 +52,8 @@ class AXUploadRequest {
|
|
|
52
52
|
this.status = computed(() => this._status());
|
|
53
53
|
this._message = signal(null);
|
|
54
54
|
this.message = computed(() => this._message());
|
|
55
|
+
this._isDetermined = signal(false);
|
|
56
|
+
this.isDetermined = computed(() => this._isDetermined());
|
|
55
57
|
this.bytesTransferred = 0;
|
|
56
58
|
}
|
|
57
59
|
estimateTimeRemaining(bytesTransferred) {
|
|
@@ -67,6 +69,9 @@ class AXUploadRequest {
|
|
|
67
69
|
}
|
|
68
70
|
setTransferredBytes(value) {
|
|
69
71
|
this.bytesTransferred = value;
|
|
72
|
+
if (value > 0 && !this._isDetermined() && (this.status() == 'new' || this.status() == 'inprogress')) {
|
|
73
|
+
this._isDetermined.set(true);
|
|
74
|
+
}
|
|
70
75
|
this.updateEstimateTime();
|
|
71
76
|
}
|
|
72
77
|
updateEstimateTime() {
|
|
@@ -115,6 +120,7 @@ class AXUploaderService {
|
|
|
115
120
|
this.files$ = new BehaviorSubject([]);
|
|
116
121
|
this.onFileUploadComplete = new Subject();
|
|
117
122
|
this.onFilesUploadComplete = new Subject();
|
|
123
|
+
this.onFileUploadCanceled = new Subject();
|
|
118
124
|
this.totalEstimateTime = interval(500).pipe(switchMap(() => this.files$.asObservable()), map((f) => sumBy(f, (c) => c.estimateTime())));
|
|
119
125
|
}
|
|
120
126
|
get files() {
|
|
@@ -144,17 +150,23 @@ class AXUploaderService {
|
|
|
144
150
|
this.onFileUploadComplete.next({
|
|
145
151
|
component: this,
|
|
146
152
|
uploadedFile: c,
|
|
147
|
-
isUserInteraction: false
|
|
153
|
+
isUserInteraction: false,
|
|
148
154
|
});
|
|
149
|
-
if (this.files.value.every(c => c.status() == 'completed')) {
|
|
155
|
+
if (this.files.value.every((c) => c.status() == 'completed')) {
|
|
150
156
|
this.onFilesUploadComplete.next({
|
|
151
157
|
component: this,
|
|
152
158
|
uploadedFiles: this.files.value,
|
|
153
|
-
isUserInteraction: false
|
|
159
|
+
isUserInteraction: false,
|
|
154
160
|
});
|
|
155
161
|
}
|
|
156
162
|
};
|
|
157
|
-
c.
|
|
163
|
+
c.onCancel = () => {
|
|
164
|
+
this.onFileUploadCanceled.next({
|
|
165
|
+
component: this,
|
|
166
|
+
uploadedFile: c,
|
|
167
|
+
isUserInteraction: false,
|
|
168
|
+
});
|
|
169
|
+
};
|
|
158
170
|
});
|
|
159
171
|
}
|
|
160
172
|
async browse(options = { multiple: false }) {
|
|
@@ -202,6 +214,7 @@ class AXUploaderZoneDirective {
|
|
|
202
214
|
this.elementRef = elementRef;
|
|
203
215
|
this.multiple = true;
|
|
204
216
|
this.accept = null;
|
|
217
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
205
218
|
this.uploadService = inject(AXUploaderService);
|
|
206
219
|
this.unsubscriber = inject(AXUnsubscriber);
|
|
207
220
|
this.translateService = inject(AXTranslationService);
|
|
@@ -212,25 +225,21 @@ class AXUploaderZoneDirective {
|
|
|
212
225
|
this.element = this.elementRef.nativeElement;
|
|
213
226
|
this.element.style.position = 'relative';
|
|
214
227
|
//
|
|
215
|
-
this.uploadService
|
|
216
|
-
.onFileUploadComplete
|
|
217
|
-
.pipe(this.unsubscriber.takeUntilDestroy)
|
|
218
|
-
.subscribe(c => {
|
|
228
|
+
this.uploadService.onFileUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
|
|
219
229
|
this.onFileUploadComplete.next(c);
|
|
220
230
|
});
|
|
221
|
-
this.uploadService
|
|
222
|
-
.onFilesUploadComplete
|
|
223
|
-
.pipe(this.unsubscriber.takeUntilDestroy)
|
|
224
|
-
.subscribe(c => {
|
|
231
|
+
this.uploadService.onFilesUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
|
|
225
232
|
this.onFilesUploadComplete.next(c);
|
|
226
233
|
});
|
|
227
234
|
//
|
|
235
|
+
this.element.addEventListener('click', this.browser.bind(this), true);
|
|
228
236
|
this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);
|
|
229
237
|
this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);
|
|
230
238
|
this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);
|
|
231
239
|
this.element.addEventListener('dragleave', this.removeZone.bind(this), true);
|
|
232
240
|
}
|
|
233
241
|
ngOnDestroy() {
|
|
242
|
+
this.element.addEventListener('click', this.browser.bind(this), true);
|
|
234
243
|
this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));
|
|
235
244
|
this.element.removeEventListener('drop', this.handleOnDrop.bind(this));
|
|
236
245
|
this.element.removeEventListener('dragover', this.handleDragOver.bind(this));
|
|
@@ -241,11 +250,18 @@ class AXUploaderZoneDirective {
|
|
|
241
250
|
event.preventDefault();
|
|
242
251
|
event.stopImmediatePropagation();
|
|
243
252
|
}
|
|
244
|
-
handleOnDrop(event) {
|
|
253
|
+
async handleOnDrop(event) {
|
|
245
254
|
event.preventDefault();
|
|
246
255
|
event.stopImmediatePropagation();
|
|
247
|
-
this.uploadService.add(event.dataTransfer?.files);
|
|
256
|
+
const requests = await this.uploadService.add(event.dataTransfer?.files);
|
|
257
|
+
this.onChanged.emit({
|
|
258
|
+
component: this,
|
|
259
|
+
requests,
|
|
260
|
+
isUserInteraction: true,
|
|
261
|
+
});
|
|
262
|
+
// debugger;
|
|
248
263
|
this.removeZone();
|
|
264
|
+
this.cdr.detectChanges();
|
|
249
265
|
}
|
|
250
266
|
handleDragOver(event) {
|
|
251
267
|
event.preventDefault();
|
|
@@ -253,7 +269,8 @@ class AXUploaderZoneDirective {
|
|
|
253
269
|
}
|
|
254
270
|
createZone() {
|
|
255
271
|
this.overlayElement = document.createElement('div');
|
|
256
|
-
this.overlayElement.classList.add('ax-uploader-overlay-state');
|
|
272
|
+
this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');
|
|
273
|
+
this.overlayElement.id = 'ax-uploader-overlay-state';
|
|
257
274
|
const icon = document.createElement('span');
|
|
258
275
|
icon.classList.add('ax-icon', 'ax-icon-upload');
|
|
259
276
|
const text = document.createElement('span');
|
|
@@ -263,14 +280,16 @@ class AXUploaderZoneDirective {
|
|
|
263
280
|
this.element.appendChild(this.overlayElement);
|
|
264
281
|
}
|
|
265
282
|
removeZone() {
|
|
283
|
+
this.element.removeChild(document.getElementById('ax-uploader-overlay-state'));
|
|
266
284
|
this.overlayElement.remove();
|
|
285
|
+
console.log(this.overlayElement);
|
|
267
286
|
}
|
|
268
287
|
async browser() {
|
|
269
288
|
const requests = await this.uploadService.browse({ accept: this.accept, multiple: this.multiple });
|
|
270
289
|
this.onChanged.emit({
|
|
271
290
|
component: this,
|
|
272
291
|
requests,
|
|
273
|
-
isUserInteraction: true
|
|
292
|
+
isUserInteraction: true,
|
|
274
293
|
});
|
|
275
294
|
}
|
|
276
295
|
get __hostClass() {
|
|
@@ -283,7 +302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
283
302
|
type: Directive,
|
|
284
303
|
args: [{
|
|
285
304
|
selector: '[axUploaderZone]',
|
|
286
|
-
providers: [AXUnsubscriber]
|
|
305
|
+
providers: [AXUnsubscriber],
|
|
287
306
|
}]
|
|
288
307
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { multiple: [{
|
|
289
308
|
type: Input
|
|
@@ -335,11 +354,11 @@ class AXUploaderListComponent extends AXBasePageComponent {
|
|
|
335
354
|
this.uploadService = inject(AXUploaderService);
|
|
336
355
|
}
|
|
337
356
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
338
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: AXUploaderListComponent, selector: "ax-uploader-list", usesInheritance: true, ngImport: i0, template: "@if((uploadService.totalEstimateTime | async) > 0)
|
|
357
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: AXUploaderListComponent, selector: "ax-uploader-list", usesInheritance: true, ngImport: i0, template: "@if ((uploadService.totalEstimateTime | async) > 0) {\n <div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' | async }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'cancel' | translate | async }}</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 class=\"ax-status\">\n @switch (item.status()) {\n @case ('inprogress') {\n <span>{{ item.size | format: 'filesize' | async }}</span> / {{ item.estimateTime() | format: 'timeleft' | async }}\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ item.message() }}</span>\n }\n }\n </div>\n </div>\n <div class=\"ax-status\">\n @switch (item.status()) {\n @case ('completed') {\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">{{ 'canceled' | translate | async }}</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ 'failed' | translate | async }}</span>\n }\n @default {\n <ax-circular-progress\n [mode]=\"item.isDetermined() ? 'determinate' : 'indeterminate'\"\n [size]=\"22\"\n [stroke]=\"6\"\n [progress]=\"item.isDetermined() ? item.progress() : 60\"\n class=\"ax-show\"\n >\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\" title=\"{{ 'cancel' | translate | async }}\"></i>\n }\n }\n </div>\n </li>\n }\n</ul>\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 .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;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", "mode", "progress", "stroke", "size"], outputs: ["progressChange", "strokeChange", "sizeChange"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: i4.AXFormatPipe, name: "format" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
339
358
|
}
|
|
340
359
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderListComponent, decorators: [{
|
|
341
360
|
type: Component,
|
|
342
|
-
args: [{ selector: 'ax-uploader-list', encapsulation: ViewEncapsulation.None, template: "@if((uploadService.totalEstimateTime | async) > 0)
|
|
361
|
+
args: [{ selector: 'ax-uploader-list', encapsulation: ViewEncapsulation.None, template: "@if ((uploadService.totalEstimateTime | async) > 0) {\n <div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' | async }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'cancel' | translate | async }}</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 class=\"ax-status\">\n @switch (item.status()) {\n @case ('inprogress') {\n <span>{{ item.size | format: 'filesize' | async }}</span> / {{ item.estimateTime() | format: 'timeleft' | async }}\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ item.message() }}</span>\n }\n }\n </div>\n </div>\n <div class=\"ax-status\">\n @switch (item.status()) {\n @case ('completed') {\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">{{ 'canceled' | translate | async }}</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ 'failed' | translate | async }}</span>\n }\n @default {\n <ax-circular-progress\n [mode]=\"item.isDetermined() ? 'determinate' : 'indeterminate'\"\n [size]=\"22\"\n [stroke]=\"6\"\n [progress]=\"item.isDetermined() ? item.progress() : 60\"\n class=\"ax-show\"\n >\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\" title=\"{{ 'cancel' | translate | async }}\"></i>\n }\n }\n </div>\n </li>\n }\n</ul>\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 .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;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"] }]
|
|
343
362
|
}] });
|
|
344
363
|
|
|
345
364
|
var uploaderList_component = /*#__PURE__*/Object.freeze({
|
|
@@ -400,14 +419,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
400
419
|
* @category Components
|
|
401
420
|
*/
|
|
402
421
|
class AXUploaderDropZoneComponent extends MXBaseComponent {
|
|
422
|
+
constructor() {
|
|
423
|
+
super(...arguments);
|
|
424
|
+
this.description = input('');
|
|
425
|
+
}
|
|
426
|
+
preventRefresh() {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
403
429
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderDropZoneComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
404
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
430
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.2", type: AXUploaderDropZoneComponent, selector: "ax-uploader-drop-zone", inputs: { description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, 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\n >{{ 'uploader.zone.drag' | translate | async\n }}<a href=\"\" (click)=\"preventRefresh()\" axUploaderBrowseHandle>{{ 'uploader.zone.choose' | translate | async }}</a>\n {{ 'uploader.zone.to-upload' | translate | async }}</span\n >\n <!-- <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p> -->\n <p>{{ description() }}</p>\n </div>\n</div>\n", styles: ["ax-uploader-drop-zone{width:100%;height:100%;display:block;cursor:pointer}ax-uploader-drop-zone .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));pointer-events:none}ax-uploader-drop-zone .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 .ax-uploader-drop-zone-container ax-icon{font-size:1.875rem;line-height:2.25rem;color:#a3a3a3}ax-uploader-drop-zone .ax-uploader-drop-zone-container .ax-uploader-drop-zone-description{display:flex;flex-direction:column;gap:.5rem}ax-uploader-drop-zone .ax-uploader-drop-zone-container .ax-uploader-drop-zone-description a{color:rgba(var(--ax-color-primary-500))}ax-uploader-drop-zone .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$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXUploaderBrowseDirective, selector: "[axUploaderBrowseHandle]" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
405
431
|
}
|
|
406
432
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderDropZoneComponent, decorators: [{
|
|
407
433
|
type: Component,
|
|
408
|
-
args: [{ selector: 'ax-uploader-drop-zone', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-uploader-drop-zone-container\"
|
|
434
|
+
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\n >{{ 'uploader.zone.drag' | translate | async\n }}<a href=\"\" (click)=\"preventRefresh()\" axUploaderBrowseHandle>{{ 'uploader.zone.choose' | translate | async }}</a>\n {{ 'uploader.zone.to-upload' | translate | async }}</span\n >\n <!-- <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p> -->\n <p>{{ description() }}</p>\n </div>\n</div>\n", styles: ["ax-uploader-drop-zone{width:100%;height:100%;display:block;cursor:pointer}ax-uploader-drop-zone .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));pointer-events:none}ax-uploader-drop-zone .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 .ax-uploader-drop-zone-container ax-icon{font-size:1.875rem;line-height:2.25rem;color:#a3a3a3}ax-uploader-drop-zone .ax-uploader-drop-zone-container .ax-uploader-drop-zone-description{display:flex;flex-direction:column;gap:.5rem}ax-uploader-drop-zone .ax-uploader-drop-zone-container .ax-uploader-drop-zone-description a{color:rgba(var(--ax-color-primary-500))}ax-uploader-drop-zone .ax-uploader-drop-zone-container .ax-uploader-drop-zone-description p{font-size:.875rem;line-height:1.25rem;color:#a3a3a3}\n"] }]
|
|
409
435
|
}] });
|
|
410
436
|
|
|
437
|
+
const COMPONENTS = [
|
|
438
|
+
AXUploaderDropZoneComponent,
|
|
439
|
+
AXUploaderListComponent,
|
|
440
|
+
AXUploaderZoneDirective,
|
|
441
|
+
AXUploaderBrowseDirective,
|
|
442
|
+
AXUploaderDialogContainerComponent,
|
|
443
|
+
];
|
|
411
444
|
class AXUploaderModule {
|
|
412
445
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
413
446
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderModule, declarations: [AXUploaderDropZoneComponent,
|
|
@@ -423,7 +456,11 @@ class AXUploaderModule {
|
|
|
423
456
|
AXFileModule,
|
|
424
457
|
AXDateTimeModule,
|
|
425
458
|
AXCircularProgressModule,
|
|
426
|
-
AXPopupModule], exports: [AXUploaderDropZoneComponent,
|
|
459
|
+
AXPopupModule], exports: [AXUploaderDropZoneComponent,
|
|
460
|
+
AXUploaderListComponent,
|
|
461
|
+
AXUploaderZoneDirective,
|
|
462
|
+
AXUploaderBrowseDirective,
|
|
463
|
+
AXUploaderDialogContainerComponent] }); }
|
|
427
464
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderModule, imports: [CommonModule,
|
|
428
465
|
AXDecoratorModule,
|
|
429
466
|
AXButtonModule,
|
|
@@ -438,13 +475,7 @@ class AXUploaderModule {
|
|
|
438
475
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXUploaderModule, decorators: [{
|
|
439
476
|
type: NgModule,
|
|
440
477
|
args: [{
|
|
441
|
-
declarations: [
|
|
442
|
-
AXUploaderDropZoneComponent,
|
|
443
|
-
AXUploaderListComponent,
|
|
444
|
-
AXUploaderZoneDirective,
|
|
445
|
-
AXUploaderBrowseDirective,
|
|
446
|
-
AXUploaderDialogContainerComponent,
|
|
447
|
-
],
|
|
478
|
+
declarations: [...COMPONENTS],
|
|
448
479
|
imports: [
|
|
449
480
|
CommonModule,
|
|
450
481
|
AXDecoratorModule,
|
|
@@ -457,7 +488,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
457
488
|
AXCircularProgressModule,
|
|
458
489
|
AXPopupModule,
|
|
459
490
|
],
|
|
460
|
-
exports: [
|
|
491
|
+
exports: [...COMPONENTS],
|
|
461
492
|
providers: [],
|
|
462
493
|
}]
|
|
463
494
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-uploader.mjs","sources":["../../../../libs/components/uploader/src/lib/uploader.models.ts","../../../../libs/components/uploader/src/lib/uploader.service.ts","../../../../libs/components/uploader/src/lib/uploader-zone.directive.ts","../../../../libs/components/uploader/src/lib/uploader-browse-handle.directive.ts","../../../../libs/components/uploader/src/lib/uploader-list.component.ts","../../../../libs/components/uploader/src/lib/uploader-list.component.html","../../../../libs/components/uploader/src/lib/uploader-dialog-container.component.ts","../../../../libs/components/uploader/src/lib/uploader-dialog-container.component.html","../../../../libs/components/uploader/src/lib/uploader-drop-zone.component.ts","../../../../libs/components/uploader/src/lib/uploader-drop-zone.component.html","../../../../libs/components/uploader/src/lib/uploader.module.ts","../../../../libs/components/uploader/src/acorex-components-uploader.ts"],"sourcesContent":["import { AXEvent } from '@acorex/components/common';\nimport { computed, signal } from '@angular/core';\n\nexport type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'failed' | 'canceled';\n\n\nexport interface AXUploaderChangedEvent extends AXEvent {\n requests: AXUploadRequest[];\n}\n\nexport interface AXUploaderFileCompleteEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport interface AXUploaderFilesCompleteEvent extends AXEvent {\n uploadedFiles: AXUploadRequest[];\n}\n\nexport class AXUploadRequest {\n\n get name(): string {\n return this.file.name;\n }\n\n get ext(): string {\n const parts = this.name.split('.');\n if (parts.length > 1) {\n return parts[parts.length - 1];\n } else {\n // No extension found\n return '';\n }\n }\n\n get size(): number {\n return this.file.size;\n }\n\n get file(): File {\n return this.uploadFile;\n }\n\n private readonly _progress = signal(0);\n progress = computed(() => this._progress())\n\n private readonly _estimateTime = signal(0);\n estimateTime = computed(() => this._estimateTime())\n\n private readonly _status = signal<AXUploadStatus>('new');\n status = computed(() => this._status())\n\n private readonly _message = signal<string | null>(null);\n message = computed(() => this._message())\n\n private startTime: number;\n private bytesTransferred = 0;\n\n public onStart: (file: AXUploadRequest) => void;\n public onCancel: (file: AXUploadRequest) => void;\n public onFailed: (file: AXUploadRequest) => void;\n public onComplete: (file: AXUploadRequest) => void;\n\n constructor(private uploadFile: File) { }\n\n private estimateTimeRemaining(bytesTransferred: number): number | null {\n const now = Date.now();\n const elapsed = now - this.startTime; // Time in milliseconds\n\n if (elapsed === 0) {\n return null; // Avoid division by zero\n }\n\n const speed = bytesTransferred / elapsed; // Bytes per millisecond\n const remainingBytes = this.size - bytesTransferred;\n const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds\n return estimatedTime; // Return the estimated time in milliseconds\n }\n\n public setTransferredBytes(value: number) {\n this.bytesTransferred = value;\n this.updateEstimateTime();\n }\n\n private updateEstimateTime() {\n this._estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred))\n const progress = Math.floor((this.bytesTransferred / this.size) * 100);\n this._progress.set(progress);\n }\n\n public async upload(): Promise<void> {\n this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n if (this.onStart)\n this.onStart(this);\n }\n\n public cancel(): void {\n this._status.set('canceled');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n if (this.onCancel)\n this.onCancel(this);\n }\n\n public error(message: string): void {\n this._status.set('failed');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this._message.set(message);\n if (this.onFailed)\n this.onFailed(this);\n }\n\n public finish(data?: any): void {\n this._status.set('completed');\n this.bytesTransferred = this.size;\n this._estimateTime.set(0);\n this._progress.set(100);\n if (this.onComplete)\n this.onComplete(this);\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXFileService } from '@acorex/core/file';\nimport { Injectable, inject } from '@angular/core';\nimport { sumBy } from 'lodash-es';\nimport { BehaviorSubject, interval, map, Subject, switchMap } from 'rxjs';\nimport { AXUploaderFileCompleteEvent, AXUploaderFilesCompleteEvent, AXUploadRequest } from './uploader.models';\n\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n\n private popupService = inject(AXPopupService);\n private fileService: AXFileService = inject(AXFileService);\n private files$: BehaviorSubject<AXUploadRequest[]> = new BehaviorSubject<AXUploadRequest[]>([]);\n public get files(): BehaviorSubject<AXUploadRequest[]> {\n return this.files$;\n }\n\n public readonly onFileUploadComplete: Subject<AXUploaderFileCompleteEvent> = new Subject<AXUploaderFileCompleteEvent>();\n public readonly onFilesUploadComplete: Subject<AXUploaderFilesCompleteEvent> = new Subject<AXUploaderFilesCompleteEvent>();\n\n public readonly totalEstimateTime = interval(500).pipe(\n switchMap(() => this.files$.asObservable()),\n map((f) => sumBy(f, (c) => c.estimateTime())),\n );\n\n private showDialog() {\n import('./uploader-list.component').then((c) => {\n this.popupService\n .open(c.AXUploaderListComponent, {\n size: 'md',\n title: 'Upload File',\n })\n .then(async () => {\n await this.cancelAll();\n this.clearAll();\n });\n });\n }\n\n private convertFileToRequest(file: File): AXUploadRequest {\n return new AXUploadRequest(file);\n }\n\n private startUpload() {\n this.files.value\n .filter((c) => c.status() == 'new')\n .forEach((c) => {\n c.onComplete = () => {\n this.onFileUploadComplete.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false\n });\n if (this.files.value.every(c => c.status() == 'completed')) {\n this.onFilesUploadComplete.next({\n component: this,\n uploadedFiles: this.files.value,\n isUserInteraction: false\n });\n }\n };\n c.upload();\n });\n }\n\n async browse(options: { multiple?: boolean, accept?: string } = { multiple: false }): Promise<AXUploadRequest[]> {\n try {\n const files = await this.fileService.choose({ multiple: options?.multiple || false, accept: options.accept });\n if (files.length) {\n return this.add(files);\n }\n return Promise.resolve([]);\n } catch (error) {\n return Promise.resolve([]);\n }\n }\n\n async add(files: FileList | File[]): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map((f) => this.convertFileToRequest(f));\n const currentValue = this.files$.value;\n currentValue.push(...list);\n this.files$.next(currentValue);\n this.showDialog();\n this.startUpload();\n return Promise.resolve(list);\n }\n\n\n async cancelAll() {\n await Promise.all(this.files$.value.filter((c) => c.status() != 'completed').map((c) => c.cancel()));\n }\n\n clearAll() {\n this.files$.value.filter((c) => c.status() != 'inprogress').forEach((c) => this.remove(c));\n }\n\n remove(item: AXUploadRequest) {\n let currentValue = this.files$.value;\n currentValue = currentValue.filter((c) => c != item);\n this.files$.next(currentValue);\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { Directive, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, Output, inject } from '@angular/core';\nimport { AXUploaderService } from './uploader.service';\nimport { AXUploaderChangedEvent, AXUploaderFileCompleteEvent, AXUploaderFilesCompleteEvent } from './uploader.models';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n@Directive({\n selector: '[axUploaderZone]',\n providers: [AXUnsubscriber]\n})\nexport class AXUploaderZoneDirective implements OnDestroy {\n @Input()\n multiple = true;\n\n @Input()\n accept: string = null;\n\n private uploadService = inject(AXUploaderService);\n private unsubscriber = inject(AXUnsubscriber);\n private translateService = inject(AXTranslationService);\n private element: HTMLElement;\n\n\n @Output()\n onChanged: EventEmitter<AXUploaderChangedEvent> = new EventEmitter<AXUploaderChangedEvent>();\n\n @Output()\n onFileUploadComplete: EventEmitter<AXUploaderFileCompleteEvent> = new EventEmitter<AXUploaderFileCompleteEvent>();\n\n @Output()\n onFilesUploadComplete: EventEmitter<AXUploaderFilesCompleteEvent> = new EventEmitter<AXUploaderFilesCompleteEvent>();\n\n\n stateClass = 'ax-uploader-overlay-state';\n overlayElement: HTMLDivElement;\n\n\n\n constructor(private elementRef: ElementRef) {\n this.element = this.elementRef.nativeElement as HTMLElement;\n this.element.style.position = 'relative';\n //\n this.uploadService\n .onFileUploadComplete\n .pipe(this.unsubscriber.takeUntilDestroy)\n .subscribe(c => {\n this.onFileUploadComplete.next(c);\n });\n\n this.uploadService\n .onFilesUploadComplete\n .pipe(this.unsubscriber.takeUntilDestroy)\n .subscribe(c => {\n this.onFilesUploadComplete.next(c);\n });\n //\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', this.removeZone.bind(this), true);\n }\n\n ngOnDestroy(): void {\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n\n private handleDragEnter(event: Event) {\n this.createZone();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n private handleOnDrop(event: DragEvent) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.uploadService.add(event.dataTransfer?.files);\n this.removeZone();\n }\n\n private handleDragOver(event: Event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n private createZone() {\n this.overlayElement = document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state');\n\n const icon: HTMLSpanElement = document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n\n const text = document.createElement('span');\n text.innerText = this.translateService.translateSync('uploader.zone.text');\n\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n\n this.element.appendChild(this.overlayElement);\n }\n\n private removeZone() {\n this.overlayElement.remove();\n }\n\n public async browser(): Promise<void> {\n const requests = await this.uploadService.browse({ accept: this.accept, multiple: this.multiple });\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true\n });\n }\n\n @HostBinding('class')\n get __hostClass(): string {\n return `ax-drop-zone`;\n }\n}\n","import { Directive, ElementRef, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n@Directive({\n selector: '[axUploaderBrowseHandle]',\n})\nexport class AXUploaderBrowseDirective implements OnInit, OnDestroy {\n private uploaderZone = inject(AXUploaderZoneDirective);\n private elemenrRef: ElementRef<HTMLDivElement> = inject(ElementRef<HTMLDivElement>);\n\n ngOnInit() {\n this.elemenrRef.nativeElement.addEventListener('click', this.handleClick.bind(this));\n }\n\n ngOnDestroy(): void {\n this.elemenrRef.nativeElement.removeEventListener('click', this.handleClick.bind(this));\n }\n\n private async handleClick() {\n await this.uploaderZone.browser();\n }\n}\n","import { AXBasePageComponent } from '@acorex/components/page';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { AXUploaderService } from './uploader.service';\n\n/**\n * A component that displays a list of uploaded files.\n * @category Components\n */\n@Component({\n selector: 'ax-uploader-list',\n templateUrl: './uploader-list.component.html',\n styleUrls: ['./uploader-list.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXUploaderListComponent extends AXBasePageComponent {\n\n /** @ignore */\n protected uploadService: AXUploaderService = inject(AXUploaderService);\n}\n","@if((uploadService.totalEstimateTime | async) > 0)\n{\n<div class=\"ax-uploader-progress-status\">\n <div>{{ (uploadService.totalEstimateTime | async) | format: 'timeleft' | async }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'cancel' | translate | async }}</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 class=\"ax-status\">\n @switch (item.status()) {\n @case ('inprogress') {\n <span>{{ item.size | format: 'filesize' | async }}</span> / {{ item.estimateTime() | format: 'timeleft' | async\n }}\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ item.message() }}</span>\n }\n }\n </div>\n </div>\n <div class=\"ax-status\">\n @switch (item.status()) {\n @case ('completed') {\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">{{ 'canceled' | translate | async }}</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ 'failed' | translate | async }}</span>\n }\n @default {\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=\"{{ 'cancel' | translate | async }}\"></i>\n }\n }\n </div>\n </li>\n }\n</ul>","import { AXClosbaleComponent } from '@acorex/components/common';\nimport { AUTO_STYLE, animate, state, style, transition, trigger } from '@angular/animations';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\n\n/**\n * A container for managing the uploader dialog with collapse and expand animations.\n * @category Components\n */\n@Component({\n selector: 'ax-uploader-dialog-container',\n templateUrl: './uploader-dialog-container.component.html',\n styleUrls: ['./uploader-dialog-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('collapse', [\n state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),\n state('true', style({ height: '0', visibility: 'hidden' })),\n transition('false => true', animate(150 + 'ms ease-in')),\n transition('true => false', animate(150 + 'ms ease-out')),\n ]),\n ],\n})\nexport class AXUploaderDialogContainerComponent {\n /** @ignore */\n private parent = inject(AXClosbaleComponent);\n\n /**\n * Indicates whether the component is in a collapsed state.\n * @defaultValue false\n */\n isCollapsed = false;\n\n /**\n * Closes the parent dialog or container.\n */\n close() {\n this.parent.close();\n }\n\n /**\n * Toggles the collapsed state of the component.\n */\n toggle() {\n this.isCollapsed = !this.isCollapsed;\n }\n}\n","<div class=\"ax-uploader-list-header\">\n <div>{{'Uploading' | translate | async }}</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>","import { MXBaseComponent } from '@acorex/components/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * A component that provides a drop zone area for uploading files.\n * @category Components\n */\n@Component({\n selector: 'ax-uploader-drop-zone',\n templateUrl: './uploader-drop-zone.component.html',\n styleUrls: ['./uploader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXUploaderDropZoneComponent extends MXBaseComponent {}\n","<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>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXCircularProgressModule } from '@acorex/components/circular-progress';\nimport { AXPopupModule } from '@acorex/components/popup';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUploaderBrowseDirective } from './uploader-browse-handle.directive';\nimport { AXUploaderDialogContainerComponent } from './uploader-dialog-container.component';\nimport { AXUploaderDropZoneComponent } from './uploader-drop-zone.component';\nimport { AXUploaderListComponent } from './uploader-list.component';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\nimport { AXUploaderService } from './uploader.service';\n\n@NgModule({\n declarations: [\n AXUploaderDropZoneComponent,\n AXUploaderListComponent,\n AXUploaderZoneDirective,\n AXUploaderBrowseDirective,\n AXUploaderDialogContainerComponent,\n ],\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXProgressBarModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXCircularProgressModule,\n AXPopupModule,\n ],\n exports: [AXUploaderDropZoneComponent, AXUploaderZoneDirective, AXUploaderBrowseDirective, AXUploaderDialogContainerComponent],\n providers: [],\n})\nexport class AXUploaderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i2.AXUploaderListComponent","i2.AXUploaderZoneDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-components-uploader.mjs","sources":["../../../../libs/components/uploader/src/lib/uploader.models.ts","../../../../libs/components/uploader/src/lib/uploader.service.ts","../../../../libs/components/uploader/src/lib/uploader-zone.directive.ts","../../../../libs/components/uploader/src/lib/uploader-browse-handle.directive.ts","../../../../libs/components/uploader/src/lib/uploader-list/uploader-list.component.ts","../../../../libs/components/uploader/src/lib/uploader-list/uploader-list.component.html","../../../../libs/components/uploader/src/lib/uploader-dialog-container/uploader-dialog-container.component.ts","../../../../libs/components/uploader/src/lib/uploader-dialog-container/uploader-dialog-container.component.html","../../../../libs/components/uploader/src/lib/uploader-drop-zone/uploader-drop-zone.component.ts","../../../../libs/components/uploader/src/lib/uploader-drop-zone/uploader-drop-zone.component.html","../../../../libs/components/uploader/src/lib/uploader.module.ts","../../../../libs/components/uploader/src/acorex-components-uploader.ts"],"sourcesContent":["import { AXEvent } from '@acorex/components/common';\nimport { computed, signal } from '@angular/core';\n\nexport type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'failed' | 'canceled';\n\nexport interface AXUploaderChangedEvent extends AXEvent {\n requests: AXUploadRequest[];\n}\n\nexport interface AXUploaderFileCompleteEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport interface AXUploaderFilesCompleteEvent extends AXEvent {\n uploadedFiles: AXUploadRequest[];\n}\n\nexport interface AXUploaderFileCancelEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport class AXUploadRequest {\n get name(): string {\n return this.file.name;\n }\n\n get ext(): string {\n const parts = this.name.split('.');\n if (parts.length > 1) {\n return parts[parts.length - 1];\n } else {\n // No extension found\n return '';\n }\n }\n\n get size(): number {\n return this.file.size;\n }\n\n get file(): File {\n return this.uploadFile;\n }\n\n private readonly _progress = signal(0);\n progress = computed(() => this._progress());\n\n private readonly _estimateTime = signal(0);\n estimateTime = computed(() => this._estimateTime());\n\n private readonly _status = signal<AXUploadStatus>('new');\n status = computed(() => this._status());\n\n private readonly _message = signal<string | null>(null);\n message = computed(() => this._message());\n\n private readonly _isDetermined = signal<boolean>(false);\n isDetermined = computed(() => this._isDetermined());\n\n private startTime: number;\n private bytesTransferred = 0;\n\n public onStart: (file: AXUploadRequest) => void;\n public onCancel: (file: AXUploadRequest) => void;\n public onFailed: (file: AXUploadRequest) => void;\n public onComplete: (file: AXUploadRequest) => void;\n\n constructor(private uploadFile: File) {}\n\n private estimateTimeRemaining(bytesTransferred: number): number | null {\n const now = Date.now();\n const elapsed = now - this.startTime; // Time in milliseconds\n\n if (elapsed === 0) {\n return null; // Avoid division by zero\n }\n\n const speed = bytesTransferred / elapsed; // Bytes per millisecond\n const remainingBytes = this.size - bytesTransferred;\n const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds\n return estimatedTime; // Return the estimated time in milliseconds\n }\n\n public setTransferredBytes(value: number) {\n this.bytesTransferred = value;\n if (value > 0 && !this._isDetermined() && (this.status() == 'new' || this.status() == 'inprogress')) {\n this._isDetermined.set(true);\n }\n this.updateEstimateTime();\n }\n\n private updateEstimateTime() {\n this._estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));\n const progress = Math.floor((this.bytesTransferred / this.size) * 100);\n this._progress.set(progress);\n }\n\n public async upload(): Promise<void> {\n this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n if (this.onStart) this.onStart(this);\n }\n\n public cancel(): void {\n this._status.set('canceled');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n if (this.onCancel) this.onCancel(this);\n }\n\n public error(message: string): void {\n this._status.set('failed');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this._message.set(message);\n if (this.onFailed) this.onFailed(this);\n }\n\n public finish(data?: any): void {\n this._status.set('completed');\n this.bytesTransferred = this.size;\n this._estimateTime.set(0);\n this._progress.set(100);\n if (this.onComplete) this.onComplete(this);\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXFileService } from '@acorex/core/file';\nimport { Injectable, inject } from '@angular/core';\nimport { sumBy } from 'lodash-es';\nimport { BehaviorSubject, Subject, interval, map, switchMap } from 'rxjs';\nimport { AXUploadRequest, AXUploaderFileCancelEvent, AXUploaderFileCompleteEvent, AXUploaderFilesCompleteEvent } from './uploader.models';\n\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n private popupService = inject(AXPopupService);\n private fileService: AXFileService = inject(AXFileService);\n private files$: BehaviorSubject<AXUploadRequest[]> = new BehaviorSubject<AXUploadRequest[]>([]);\n public get files(): BehaviorSubject<AXUploadRequest[]> {\n return this.files$;\n }\n\n public readonly onFileUploadComplete: Subject<AXUploaderFileCompleteEvent> = new Subject<AXUploaderFileCompleteEvent>();\n public readonly onFilesUploadComplete: Subject<AXUploaderFilesCompleteEvent> = new Subject<AXUploaderFilesCompleteEvent>();\n public readonly onFileUploadCanceled: Subject<AXUploaderFileCancelEvent> = new Subject<AXUploaderFileCancelEvent>();\n\n public readonly totalEstimateTime = interval(500).pipe(\n switchMap(() => this.files$.asObservable()),\n map((f) => sumBy(f, (c) => c.estimateTime())),\n );\n\n private showDialog() {\n import('./uploader-list/uploader-list.component').then((c) => {\n this.popupService\n .open(c.AXUploaderListComponent, {\n size: 'md',\n title: 'Upload File',\n })\n .then(async () => {\n await this.cancelAll();\n this.clearAll();\n });\n });\n }\n\n private convertFileToRequest(file: File): AXUploadRequest {\n return new AXUploadRequest(file);\n }\n\n private startUpload() {\n this.files.value\n .filter((c) => c.status() == 'new')\n .forEach((c) => {\n c.onComplete = () => {\n this.onFileUploadComplete.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n if (this.files.value.every((c) => c.status() == 'completed')) {\n this.onFilesUploadComplete.next({\n component: this,\n uploadedFiles: this.files.value,\n isUserInteraction: false,\n });\n }\n };\n c.onCancel = () => {\n this.onFileUploadCanceled.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n };\n });\n }\n\n async browse(options: { multiple?: boolean; accept?: string } = { multiple: false }): Promise<AXUploadRequest[]> {\n try {\n const files = await this.fileService.choose({ multiple: options?.multiple || false, accept: options.accept });\n if (files.length) {\n return this.add(files);\n }\n return Promise.resolve([]);\n } catch (error) {\n return Promise.resolve([]);\n }\n }\n\n async add(files: FileList | File[]): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map((f) => this.convertFileToRequest(f));\n const currentValue = this.files$.value;\n currentValue.push(...list);\n this.files$.next(currentValue);\n this.showDialog();\n this.startUpload();\n return Promise.resolve(list);\n }\n\n async cancelAll() {\n await Promise.all(this.files$.value.filter((c) => c.status() != 'completed').map((c) => c.cancel()));\n }\n\n clearAll() {\n this.files$.value.filter((c) => c.status() != 'inprogress').forEach((c) => this.remove(c));\n }\n\n remove(item: AXUploadRequest) {\n let currentValue = this.files$.value;\n currentValue = currentValue.filter((c) => c != item);\n this.files$.next(currentValue);\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, Output, inject } from '@angular/core';\nimport { AXUploaderChangedEvent, AXUploaderFileCompleteEvent, AXUploaderFilesCompleteEvent } from './uploader.models';\nimport { AXUploaderService } from './uploader.service';\n@Directive({\n selector: '[axUploaderZone]',\n providers: [AXUnsubscriber],\n})\nexport class AXUploaderZoneDirective implements OnDestroy {\n @Input()\n multiple = true;\n\n @Input()\n accept: string = null;\n\n private cdr = inject(ChangeDetectorRef);\n\n private uploadService = inject(AXUploaderService);\n private unsubscriber = inject(AXUnsubscriber);\n private translateService = inject(AXTranslationService);\n private element: HTMLElement;\n\n @Output()\n onChanged: EventEmitter<AXUploaderChangedEvent> = new EventEmitter<AXUploaderChangedEvent>();\n\n @Output()\n onFileUploadComplete: EventEmitter<AXUploaderFileCompleteEvent> = new EventEmitter<AXUploaderFileCompleteEvent>();\n\n @Output()\n onFilesUploadComplete: EventEmitter<AXUploaderFilesCompleteEvent> = new EventEmitter<AXUploaderFilesCompleteEvent>();\n\n stateClass = 'ax-uploader-overlay-state';\n overlayElement: HTMLDivElement;\n\n constructor(private elementRef: ElementRef) {\n this.element = this.elementRef.nativeElement as HTMLElement;\n this.element.style.position = 'relative';\n\n //\n this.uploadService.onFileUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFileUploadComplete.next(c);\n });\n\n this.uploadService.onFilesUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFilesUploadComplete.next(c);\n });\n //\n this.element.addEventListener('click', this.browser.bind(this), true);\n\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', this.removeZone.bind(this), true);\n }\n\n ngOnDestroy(): void {\n this.element.addEventListener('click', this.browser.bind(this), true);\n\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n\n private handleDragEnter(event: Event) {\n this.createZone();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n private async handleOnDrop(event: DragEvent) {\n event.preventDefault();\n event.stopImmediatePropagation();\n const requests = await this.uploadService.add(event.dataTransfer?.files);\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n // debugger;\n this.removeZone();\n this.cdr.detectChanges();\n }\n\n private handleDragOver(event: Event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n private createZone() {\n this.overlayElement = document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n\n const icon: HTMLSpanElement = document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n\n const text = document.createElement('span');\n text.innerText = this.translateService.translateSync('uploader.zone.text');\n\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n\n this.element.appendChild(this.overlayElement);\n }\n\n private removeZone() {\n this.element.removeChild(document.getElementById('ax-uploader-overlay-state'));\n this.overlayElement.remove();\n console.log(this.overlayElement);\n }\n\n public async browser(): Promise<void> {\n const requests = await this.uploadService.browse({ accept: this.accept, multiple: this.multiple });\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n\n @HostBinding('class')\n get __hostClass(): string {\n return `ax-drop-zone`;\n }\n}\n","import { Directive, ElementRef, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n@Directive({\n selector: '[axUploaderBrowseHandle]',\n})\nexport class AXUploaderBrowseDirective implements OnInit, OnDestroy {\n private uploaderZone = inject(AXUploaderZoneDirective);\n private elemenrRef: ElementRef<HTMLDivElement> = inject(ElementRef<HTMLDivElement>);\n\n ngOnInit() {\n this.elemenrRef.nativeElement.addEventListener('click', this.handleClick.bind(this));\n }\n\n ngOnDestroy(): void {\n this.elemenrRef.nativeElement.removeEventListener('click', this.handleClick.bind(this));\n }\n\n private async handleClick() {\n await this.uploaderZone.browser();\n }\n}\n","import { AXBasePageComponent } from '@acorex/components/page';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { AXUploaderService } from '../uploader.service';\n\n/**\n * A component that displays a list of uploaded files.\n * @category Components\n */\n@Component({\n selector: 'ax-uploader-list',\n templateUrl: './uploader-list.component.html',\n styleUrls: ['./uploader-list.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXUploaderListComponent extends AXBasePageComponent {\n /** @ignore */\n protected uploadService: AXUploaderService = inject(AXUploaderService);\n}\n","@if ((uploadService.totalEstimateTime | async) > 0) {\n <div class=\"ax-uploader-progress-status\">\n <div>{{ uploadService.totalEstimateTime | async | format: 'timeleft' | async }}</div>\n <button (click)=\"uploadService.cancelAll()\">{{ 'cancel' | translate | async }}</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 class=\"ax-status\">\n @switch (item.status()) {\n @case ('inprogress') {\n <span>{{ item.size | format: 'filesize' | async }}</span> / {{ item.estimateTime() | format: 'timeleft' | async }}\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ item.message() }}</span>\n }\n }\n </div>\n </div>\n <div class=\"ax-status\">\n @switch (item.status()) {\n @case ('completed') {\n <i class=\"ax-icon ax-icon-solid ax-icon-check-circle ax-state-completed\"></i>\n }\n @case ('canceled') {\n <span class=\"ax-state-canceled\">{{ 'canceled' | translate | async }}</span>\n }\n @case ('failed') {\n <span class=\"ax-state-failed\">{{ 'failed' | translate | async }}</span>\n }\n @default {\n <ax-circular-progress\n [mode]=\"item.isDetermined() ? 'determinate' : 'indeterminate'\"\n [size]=\"22\"\n [stroke]=\"6\"\n [progress]=\"item.isDetermined() ? item.progress() : 60\"\n class=\"ax-show\"\n >\n </ax-circular-progress>\n <i class=\"ax-icon ax-icon-solid ax-icon-close ax-hide\" (click)=\"item.cancel()\" title=\"{{ 'cancel' | translate | async }}\"></i>\n }\n }\n </div>\n </li>\n }\n</ul>\n","import { AXClosbaleComponent } from '@acorex/components/common';\nimport { AUTO_STYLE, animate, state, style, transition, trigger } from '@angular/animations';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\n\n/**\n * A container for managing the uploader dialog with collapse and expand animations.\n * @category Components\n */\n@Component({\n selector: 'ax-uploader-dialog-container',\n templateUrl: './uploader-dialog-container.component.html',\n styleUrls: ['./uploader-dialog-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('collapse', [\n state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),\n state('true', style({ height: '0', visibility: 'hidden' })),\n transition('false => true', animate(150 + 'ms ease-in')),\n transition('true => false', animate(150 + 'ms ease-out')),\n ]),\n ],\n})\nexport class AXUploaderDialogContainerComponent {\n /** @ignore */\n private parent = inject(AXClosbaleComponent);\n\n /**\n * Indicates whether the component is in a collapsed state.\n * @defaultValue false\n */\n isCollapsed = false;\n\n /**\n * Closes the parent dialog or container.\n */\n close() {\n this.parent.close();\n }\n\n /**\n * Toggles the collapsed state of the component.\n */\n toggle() {\n this.isCollapsed = !this.isCollapsed;\n }\n}\n","<div class=\"ax-uploader-list-header\">\n <div>{{'Uploading' | translate | async }}</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>","import { MXBaseComponent } from '@acorex/components/common';\nimport { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * A component that provides a drop zone area for uploading files.\n * @category Components\n */\n@Component({\n selector: 'ax-uploader-drop-zone',\n templateUrl: './uploader-drop-zone.component.html',\n styleUrls: ['./uploader-drop-zone.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXUploaderDropZoneComponent extends MXBaseComponent {\n protected description = input('');\n preventRefresh() {\n return false;\n }\n}\n","<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\n >{{ 'uploader.zone.drag' | translate | async\n }}<a href=\"\" (click)=\"preventRefresh()\" axUploaderBrowseHandle>{{ 'uploader.zone.choose' | translate | async }}</a>\n {{ 'uploader.zone.to-upload' | translate | async }}</span\n >\n <!-- <p>SVG, PNG, JPG or GIF (MAX. 800x400px)</p> -->\n <p>{{ description() }}</p>\n </div>\n</div>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXCircularProgressModule } from '@acorex/components/circular-progress';\nimport { AXPopupModule } from '@acorex/components/popup';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUploaderListComponent } from '..';\nimport { AXUploaderBrowseDirective } from './uploader-browse-handle.directive';\nimport { AXUploaderDialogContainerComponent } from './uploader-dialog-container/uploader-dialog-container.component';\nimport { AXUploaderDropZoneComponent } from './uploader-drop-zone/uploader-drop-zone.component';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\n\nconst COMPONENTS = [\n AXUploaderDropZoneComponent,\n AXUploaderListComponent,\n AXUploaderZoneDirective,\n AXUploaderBrowseDirective,\n AXUploaderDialogContainerComponent,\n];\n\n@NgModule({\n declarations: [...COMPONENTS],\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXProgressBarModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXCircularProgressModule,\n AXPopupModule,\n ],\n exports: [...COMPONENTS],\n providers: [],\n})\nexport class AXUploaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i2.AXUploaderListComponent","i2.AXUploaderBrowseDirective","i3","i4"],"mappings":"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"}
|