ngx-tethys 15.2.9 → 15.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/esm2020/upload/file-drop.directive.mjs +2 -8
- package/esm2020/upload/file-select-base.mjs +12 -2
- package/esm2020/upload/upload.config.mjs +2 -1
- package/esm2020/version.mjs +2 -2
- package/fesm2015/ngx-tethys-upload.mjs +72 -67
- package/fesm2015/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2015/ngx-tethys.mjs +1 -1
- package/fesm2015/ngx-tethys.mjs.map +1 -1
- package/fesm2020/ngx-tethys-upload.mjs +70 -65
- package/fesm2020/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2020/ngx-tethys.mjs +1 -1
- package/fesm2020/ngx-tethys.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/upload/file-drop.directive.d.ts +1 -2
- package/upload/file-select-base.d.ts +5 -1
- package/upload/upload.config.d.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [15.2.10](https://github.com/atinc/ngx-tethys/compare/15.2.4...15.2.10) (2023-05-10)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **date-picker:** compatibility null values at updateHourMinute ([#2633](https://github.com/atinc/ngx-tethys/issues/2633)) ([1207c47](https://github.com/atinc/ngx-tethys/commit/1207c473f98c18d8a30dc4d2e00b002b86aeb246))
|
|
11
|
+
* **input-number:** fix not call thyBlur when focus other input-number #INFR-7496 ([#2638](https://github.com/atinc/ngx-tethys/issues/2638)) ([1caccb3](https://github.com/atinc/ngx-tethys/commit/1caccb36d1a70637e736017896269635d60a207f)), closes [#INFR-7496](https://github.com/atinc/ngx-tethys/issues/INFR-7496)
|
|
12
|
+
* **layout:** collapse dom appears when the mouse hovers over the sidebar #INFR-5569 ([#2616](https://github.com/atinc/ngx-tethys/issues/2616)) ([e9b925d](https://github.com/atinc/ngx-tethys/commit/e9b925dce96175ac8f2b6eb1a48503391f877fc3)), closes [#INFR-5569](https://github.com/atinc/ngx-tethys/issues/INFR-5569) [#INFR-5569](https://github.com/atinc/ngx-tethys/issues/INFR-5569)
|
|
13
|
+
* **layout:** fix can't operate layout content ([#2635](https://github.com/atinc/ngx-tethys/issues/2635)) ([0c7ce6f](https://github.com/atinc/ngx-tethys/commit/0c7ce6f506db35fec9f523b2b3f5087df8810d64))
|
|
14
|
+
* **tree:** fix the problem of clicking to disable the parent node #INFR-7545 ([#2639](https://github.com/atinc/ngx-tethys/issues/2639)) ([4936aba](https://github.com/atinc/ngx-tethys/commit/4936aba4890c891f5792bf46d6df86802e095e3a)), closes [#INFR-7545](https://github.com/atinc/ngx-tethys/issues/INFR-7545)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **cascader:** support search #INFR-7498 ([#2644](https://github.com/atinc/ngx-tethys/issues/2644)) ([f490007](https://github.com/atinc/ngx-tethys/commit/f4900077721f2a95bf8116a93e351f767d637b78)), closes [#INFR-7498](https://github.com/atinc/ngx-tethys/issues/INFR-7498)
|
|
20
|
+
* **color-picker:** support hover trigger #INFR-7525 ([#2642](https://github.com/atinc/ngx-tethys/issues/2642)) ([78b5c7a](https://github.com/atinc/ngx-tethys/commit/78b5c7ac34e5fc897cbdac40579c12aeee25d991)), closes [#INFR-7525](https://github.com/atinc/ngx-tethys/issues/INFR-7525)
|
|
21
|
+
* **color-picker:** support thyPlacement params #INFR-7526 ([#2637](https://github.com/atinc/ngx-tethys/issues/2637)) ([366f742](https://github.com/atinc/ngx-tethys/commit/366f742859fd39c4f61ff04c2715aae96632a05b)), closes [#INFR-7526](https://github.com/atinc/ngx-tethys/issues/INFR-7526)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
5
25
|
## [15.2.9](https://github.com/atinc/ngx-tethys/compare/15.2.4...15.2.9) (2023-05-06)
|
|
6
26
|
|
|
7
27
|
|
|
@@ -4,7 +4,6 @@ import { filter, takeUntil, tap } from 'rxjs/operators';
|
|
|
4
4
|
import { Directive, ElementRef, EventEmitter, HostBinding, Inject, Input, NgZone, Output, Renderer2 } from '@angular/core';
|
|
5
5
|
import { FileSelectBaseDirective } from './file-select-base';
|
|
6
6
|
import { THY_UPLOAD_DEFAULT_OPTIONS } from './upload.config';
|
|
7
|
-
import { mimeTypeConvert } from './util';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
/**
|
|
10
9
|
* @name thyFileDrop
|
|
@@ -13,9 +12,6 @@ export class ThyFileDropDirective extends FileSelectBaseDirective {
|
|
|
13
12
|
set thyFileDropClassName(value) {
|
|
14
13
|
this.dragOverCustomClass = value;
|
|
15
14
|
}
|
|
16
|
-
set thyAcceptType(value) {
|
|
17
|
-
this.acceptType = mimeTypeConvert(value);
|
|
18
|
-
}
|
|
19
15
|
constructor(elementRef, renderer, ngZone, defaultConfig) {
|
|
20
16
|
super(elementRef, defaultConfig);
|
|
21
17
|
this.elementRef = elementRef;
|
|
@@ -133,7 +129,7 @@ export class ThyFileDropDirective extends FileSelectBaseDirective {
|
|
|
133
129
|
}
|
|
134
130
|
}
|
|
135
131
|
ThyFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyFileDropDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: THY_UPLOAD_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Directive });
|
|
136
|
-
ThyFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyFileDropDirective, isStandalone: true, selector: "[thyFileDrop]", inputs: { thyFileDropClassName: "thyFileDropClassName"
|
|
132
|
+
ThyFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyFileDropDirective, isStandalone: true, selector: "[thyFileDrop]", inputs: { thyFileDropClassName: "thyFileDropClassName" }, outputs: { thyOnDrop: "thyOnDrop" }, host: { properties: { "class.drop-over": "this.isDragOver", "class.thy-drop-over": "this.isDragOver" } }, usesInheritance: true, ngImport: i0 });
|
|
137
133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyFileDropDirective, decorators: [{
|
|
138
134
|
type: Directive,
|
|
139
135
|
args: [{
|
|
@@ -151,9 +147,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
151
147
|
args: ['class.thy-drop-over']
|
|
152
148
|
}], thyFileDropClassName: [{
|
|
153
149
|
type: Input
|
|
154
|
-
}], thyAcceptType: [{
|
|
155
|
-
type: Input
|
|
156
150
|
}], thyOnDrop: [{
|
|
157
151
|
type: Output
|
|
158
152
|
}] } });
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGxvYWQvZmlsZS1kcm9wLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUV6Qzs7R0FFRztBQUtILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx1QkFBdUI7SUFNN0QsSUFBYSxvQkFBb0IsQ0FBQyxLQUFhO1FBQzNDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELElBQ0ksYUFBYSxDQUFDLEtBQTZCO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFNRCxZQUNXLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLE1BQWMsRUFDc0IsYUFBOEI7UUFFekUsS0FBSyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUwxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixR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LENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUN0RjtTQUNKO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFVBQW1CO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDOztpSEFsSlEsb0JBQW9CLDJGQXVCakIsMEJBQTBCO3FHQXZCN0Isb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7MEJBd0JRLE1BQU07MkJBQUMsMEJBQTBCOzRDQXBCdEMsVUFBVTtzQkFGVCxXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQzdCLFdBQVc7dUJBQUMscUJBQXFCO2dCQUlyQixvQkFBb0I7c0JBQWhDLEtBQUs7Z0JBS0YsYUFBYTtzQkFEaEIsS0FBSztnQkFLSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRmlsZVNlbGVjdEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2ZpbGUtc2VsZWN0LWJhc2UnO1xuaW1wb3J0IHsgVEhZX1VQTE9BRF9ERUZBVUxUX09QVElPTlMsIFRoeVVwbG9hZENvbmZpZyB9IGZyb20gJy4vdXBsb2FkLmNvbmZpZyc7XG5pbXBvcnQgeyBtaW1lVHlwZUNvbnZlcnQgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIEBuYW1lIHRoeUZpbGVEcm9wXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3RoeUZpbGVEcm9wXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBUaHlGaWxlRHJvcERpcmVjdGl2ZSBleHRlbmRzIEZpbGVTZWxlY3RCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZHJvcC1vdmVyJylcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1kcm9wLW92ZXInKVxuICAgIGlzRHJhZ092ZXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIGRyYWdPdmVyQ3VzdG9tQ2xhc3M6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHNldCB0aHlGaWxlRHJvcENsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZHJhZ092ZXJDdXN0b21DbGFzcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUFjY2VwdFR5cGUodmFsdWU6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5hY2NlcHRUeXBlID0gbWltZVR5cGVDb252ZXJ0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgdGh5T25Ecm9wID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoVEhZX1VQTE9BRF9ERUZBVUxUX09QVElPTlMpIHB1YmxpYyBkZWZhdWx0Q29uZmlnOiBUaHlVcGxvYWRDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgZGVmYXVsdENvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkcmFnZW50ZXInKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoZXZlbnQ6IERyYWdFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5kYXRhVHJhbnNmZXIuaXRlbXMgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tSZWplY3RGb2xkZXJBbmRIdG1sRWxlbWVudChldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5maWx0ZXJGaWxlc09ySXRlbXMoQXJyYXkuZnJvbShldmVudC5kYXRhVHJhbnNmZXIuaXRlbXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShmaWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJhZ092ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZURyb3BPdmVyQ2xhc3NOYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZHJhZ292ZXInKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2RyYWdsZWF2ZScpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQuZnJvbUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldERyYWdPdmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEcm9wT3ZlckNsYXNzTmFtZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZHJvcCcpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKChldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja1JlamVjdEZvbGRlckFuZEh0bWxFbGVtZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5maWx0ZXJGaWxlc09ySXRlbXMoZXZlbnQuZGF0YVRyYW5zZmVyID8gQXJyYXkuZnJvbShldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpIDogW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShmaWxlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGaWxlcyhldmVudCwgQXJyYXkuZnJvbShldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpLCB0aGlzLnRoeU9uRHJvcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldERyYWdPdmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZURyb3BPdmVyQ2xhc3NOYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUmVqZWN0Rm9sZGVyQW5kSHRtbEVsZW1lbnQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICAvLyDmjpLpmaTmlofku7blpLnlkoxIVE1M5YWD57Sg5ouW5ou9XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBEYXRhVHJhbnNmZXJJdGVtTGlzdCB8IERhdGFUcmFuc2Zlckl0ZW1bXSA9IGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcyA6IFtdO1xuICAgICAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5nZXRBc0VudHJ5KGl0ZW0pO1xuICAgICAgICAgICAgaWYgKGl0ZW0ua2luZCAhPT0gJ2ZpbGUnIHx8IChlbnRyeSAmJiAhZW50cnkuaXNGaWxlKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoYGZpbGUgZXh0ZW5zaW9ucyBub3Qgc3VwcG9ydCBkcmFnIHVwbG9hZCwga2luZDogJHtpdGVtLmtpbmR9LCB0eXBlOiAke2l0ZW0udHlwZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXNFbnRyeShpdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogRmlsZVN5c3RlbUVudHJ5IHtcbiAgICAgICAgbGV0IGVudHJ5OiBGaWxlU3lzdGVtRW50cnk7XG4gICAgICAgIGlmIChpdGVtWydnZXRBc0VudHJ5J10pIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvRHJhZ0FuZERyb3BFbnRyaWVzXG4gICAgICAgICAgICBlbnRyeSA9IGl0ZW1bJ2dldEFzRW50cnknXSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ud2Via2l0R2V0QXNFbnRyeSkge1xuICAgICAgICAgICAgZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJGaWxlc09ySXRlbXMoaXRlbXM6IEFycmF5PERhdGFUcmFuc2Zlckl0ZW0gfCBGaWxlPik6IEFycmF5PERhdGFUcmFuc2Zlckl0ZW0gfCBGaWxlPiB7XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdFR5cGUgJiYgdGhpcy5hY2NlcHRUeXBlICE9ICcqLyonKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2VwdFR5cGUuaW5jbHVkZXMoaXRlbS50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVEcm9wT3ZlckNsYXNzTmFtZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ092ZXJDdXN0b21DbGFzcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnT3Zlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZHJhZ092ZXJDdXN0b21DbGFzcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZHJhZ092ZXJDdXN0b21DbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERyYWdPdmVyU3RhdGUoaXNEcmFnT3ZlcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzRHJhZ092ZXIgPSBpc0RyYWdPdmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXREcmFnT3ZlcigpIHtcbiAgICAgICAgdGhpcy5zZXREcmFnT3ZlclN0YXRlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIl19
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGxvYWQvZmlsZS1kcm9wLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHOUU7O0dBRUc7QUFLSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsdUJBQXVCO0lBTTdELElBQWEsb0JBQW9CLENBQUMsS0FBYTtRQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFNRCxZQUNXLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLE1BQWMsRUFDc0IsYUFBOEI7UUFFekUsS0FBSyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUwxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNzQixrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFmN0UsZUFBVSxHQUFHLEtBQUssQ0FBQztRQU9ULGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpD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QUM7SUFDakMsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7O2lIQTdJUSxvQkFBb0IsMkZBa0JqQiwwQkFBMEI7cUdBbEI3QixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkFtQlEsTUFBTTsyQkFBQywwQkFBMEI7NENBZnRDLFVBQVU7c0JBRlQsV0FBVzt1QkFBQyxpQkFBaUI7O3NCQUM3QixXQUFXO3VCQUFDLHFCQUFxQjtnQkFJckIsb0JBQW9CO3NCQUFoQyxLQUFLO2dCQUlJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGaWxlU2VsZWN0QmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZmlsZS1zZWxlY3QtYmFzZSc7XG5pbXBvcnQgeyBUSFlfVVBMT0FEX0RFRkFVTFRfT1BUSU9OUywgVGh5VXBsb2FkQ29uZmlnIH0gZnJvbSAnLi91cGxvYWQuY29uZmlnJztcbmltcG9ydCB7IG1pbWVUeXBlQ29udmVydCB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQG5hbWUgdGh5RmlsZURyb3BcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGh5RmlsZURyb3BdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFRoeUZpbGVEcm9wRGlyZWN0aXZlIGV4dGVuZHMgRmlsZVNlbGVjdEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcm9wLW92ZXInKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWRyb3Atb3ZlcicpXG4gICAgaXNEcmFnT3ZlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgZHJhZ092ZXJDdXN0b21DbGFzczogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgc2V0IHRoeUZpbGVEcm9wQ2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kcmFnT3ZlckN1c3RvbUNsYXNzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIHRoeU9uRHJvcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByaXZhdGUgbmdVbnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHVibGljIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KFRIWV9VUExPQURfREVGQVVMVF9PUFRJT05TKSBwdWJsaWMgZGVmYXVsdENvbmZpZzogVGh5VXBsb2FkQ29uZmlnXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGRlZmF1bHRDb25maWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZHJhZ2VudGVyJylcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrUmVqZWN0Rm9sZGVyQW5kSHRtbEVsZW1lbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZmlsdGVyRmlsZXNPckl0ZW1zKEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHkoZmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEcm9wT3ZlckNsYXNzTmFtZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2RyYWdvdmVyJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkcmFnbGVhdmUnKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LmZyb21FbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXREcmFnT3ZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRHJvcE92ZXJDbGFzc05hbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Ryb3AnKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoZXZlbnQ6IERyYWdFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IERyYWdFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tSZWplY3RGb2xkZXJBbmRIdG1sRWxlbWVudChldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZmlsdGVyRmlsZXNPckl0ZW1zKGV2ZW50LmRhdGFUcmFuc2ZlciA/IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSA6IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHkoZmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZXMoZXZlbnQsIEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSwgdGhpcy50aHlPbkRyb3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXREcmFnT3ZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEcm9wT3ZlckNsYXNzTmFtZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1JlamVjdEZvbGRlckFuZEh0bWxFbGVtZW50KGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgLy8g5o6S6Zmk5paH5Lu25aS55ZKMSFRNTOWFg+e0oOaLluaLvVxuICAgICAgICBjb25zdCBpdGVtczogRGF0YVRyYW5zZmVySXRlbUxpc3QgfCBEYXRhVHJhbnNmZXJJdGVtW10gPSBldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIuaXRlbXMgOiBbXTtcbiAgICAgICAgbGV0IHJlcyA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZ2V0QXNFbnRyeShpdGVtKTtcbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgIT09ICdmaWxlJyB8fCAoZW50cnkgJiYgIWVudHJ5LmlzRmlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKGBmaWxlIGV4dGVuc2lvbnMgbm90IHN1cHBvcnQgZHJhZyB1cGxvYWQsIGtpbmQ6ICR7aXRlbS5raW5kfSwgdHlwZTogJHtpdGVtLnR5cGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFzRW50cnkoaXRlbTogRGF0YVRyYW5zZmVySXRlbSk6IEZpbGVTeXN0ZW1FbnRyeSB7XG4gICAgICAgIGxldCBlbnRyeTogRmlsZVN5c3RlbUVudHJ5O1xuICAgICAgICBpZiAoaXRlbVsnZ2V0QXNFbnRyeSddKSB7XG4gICAgICAgICAgICAvLyBodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0RyYWdBbmREcm9wRW50cmllc1xuICAgICAgICAgICAgZW50cnkgPSBpdGVtWydnZXRBc0VudHJ5J10oKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLndlYmtpdEdldEFzRW50cnkpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyRmlsZXNPckl0ZW1zKGl0ZW1zOiBBcnJheTxEYXRhVHJhbnNmZXJJdGVtIHwgRmlsZT4pOiBBcnJheTxEYXRhVHJhbnNmZXJJdGVtIHwgRmlsZT4ge1xuICAgICAgICBpZiAodGhpcy5hY2NlcHRUeXBlICYmIHRoaXMuYWNjZXB0VHlwZSAhPSAnKi8qJykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY2NlcHRUeXBlLmluY2x1ZGVzKGl0ZW0udHlwZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlRHJvcE92ZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdPdmVyQ3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRHJhZ092ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmRyYWdPdmVyQ3VzdG9tQ2xhc3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmRyYWdPdmVyQ3VzdG9tQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREcmFnT3ZlclN0YXRlKGlzRHJhZ092ZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0RyYWdPdmVyID0gaXNEcmFnT3ZlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0RHJhZ092ZXIoKSB7XG4gICAgICAgIHRoaXMuc2V0RHJhZ092ZXJTdGF0ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { coerceNumberValue, isNumber } from 'ngx-tethys/util';
|
|
2
2
|
import { Directive, ElementRef, Inject, Input, NgZone } from '@angular/core';
|
|
3
3
|
import { THY_UPLOAD_DEFAULT_OPTIONS } from './upload.config';
|
|
4
|
+
import { mimeTypeConvert } from './util';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export class FileSelectBaseDirective {
|
|
6
7
|
set thySizeThreshold(value) {
|
|
@@ -14,12 +15,19 @@ export class FileSelectBaseDirective {
|
|
|
14
15
|
this.sizeExceedsHandler = value;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* 指定文件后缀类型(MIME_Map),例如".xls,xlsx","[".doc",".docx"]"
|
|
20
|
+
*/
|
|
21
|
+
set thyAcceptType(value) {
|
|
22
|
+
this.acceptType = mimeTypeConvert(value);
|
|
23
|
+
}
|
|
17
24
|
constructor(elementRef, defaultConfig, ngZone) {
|
|
18
25
|
this.elementRef = elementRef;
|
|
19
26
|
this.defaultConfig = defaultConfig;
|
|
20
27
|
this.ngZone = ngZone;
|
|
21
28
|
this.sizeThreshold = defaultConfig.sizeThreshold;
|
|
22
29
|
this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;
|
|
30
|
+
this.acceptType = defaultConfig.acceptType;
|
|
23
31
|
}
|
|
24
32
|
handleSizeExceeds(event, files) {
|
|
25
33
|
let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);
|
|
@@ -48,7 +56,7 @@ export class FileSelectBaseDirective {
|
|
|
48
56
|
}
|
|
49
57
|
}
|
|
50
58
|
FileSelectBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, deps: [{ token: i0.ElementRef }, { token: THY_UPLOAD_DEFAULT_OPTIONS }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
51
|
-
FileSelectBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: FileSelectBaseDirective, inputs: { thySizeThreshold: "thySizeThreshold", thySizeExceedsHandler: "thySizeExceedsHandler" }, ngImport: i0 });
|
|
59
|
+
FileSelectBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: FileSelectBaseDirective, inputs: { thySizeThreshold: "thySizeThreshold", thySizeExceedsHandler: "thySizeExceedsHandler", thyAcceptType: "thyAcceptType" }, ngImport: i0 });
|
|
52
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, decorators: [{
|
|
53
61
|
type: Directive
|
|
54
62
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
@@ -58,5 +66,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
58
66
|
type: Input
|
|
59
67
|
}], thySizeExceedsHandler: [{
|
|
60
68
|
type: Input
|
|
69
|
+
}], thyAcceptType: [{
|
|
70
|
+
type: Input
|
|
61
71
|
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3QtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGxvYWQvZmlsZS1zZWxlY3QtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE9BQU8sRUFBRSwwQkFBMEIsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUd6QyxNQUFNLE9BQU8sdUJBQXVCO0lBS2hDLElBQWEsZ0JBQWdCLENBQUMsS0FBYTtRQUN2QyxNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCxJQUFhLHFCQUFxQixDQUFDLEtBQTRCO1FBQzNELElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLEtBQTZCO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUNXLFVBQXNCLEVBQ2MsYUFBOEIsRUFDbEUsTUFBZTtRQUZmLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDYyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDbEUsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUV0QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDL0MsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVksRUFBRSxLQUFhO1FBQ3pDLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxpQkFBaUIsR0FBRztnQkFDdEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osWUFBWSxFQUFFLGdCQUFnQjtnQkFDOUIsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTthQUNwQyxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNyRDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBWSxFQUFFLEtBQWEsRUFBRSxZQUE4QztRQUNuRixJQUFJLFlBQVksR0FBa0IsS0FBSyxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtZQUM5QyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksWUFBWSxFQUFFO1lBQ2QsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDZCxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsV0FBVyxFQUFFLEtBQUs7YUFDckIsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOztvSEE3RFEsdUJBQXVCLDRDQTRCcEIsMEJBQTBCO3dHQTVCN0IsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBRG5DLFNBQVM7OzBCQTZCRCxNQUFNOzJCQUFDLDBCQUEwQjtpRUF2QnpCLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFPTyxxQkFBcUI7c0JBQWpDLEtBQUs7Z0JBVUYsYUFBYTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclZhbHVlLCBpc051bWJlciB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlGaWxlU2VsZWN0RXZlbnQsIFRoeVNpemVFeGNlZWRzSGFuZGxlciB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVEhZX1VQTE9BRF9ERUZBVUxUX09QVElPTlMsIFRoeVVwbG9hZENvbmZpZyB9IGZyb20gJy4vdXBsb2FkLmNvbmZpZyc7XG5pbXBvcnQgeyBtaW1lVHlwZUNvbnZlcnQgfSBmcm9tICcuL3V0aWwnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBGaWxlU2VsZWN0QmFzZURpcmVjdGl2ZSB7XG4gICAgYWNjZXB0VHlwZTogc3RyaW5nO1xuICAgIHNpemVUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBzaXplRXhjZWVkc0hhbmRsZXI6IFRoeVNpemVFeGNlZWRzSGFuZGxlcjtcblxuICAgIEBJbnB1dCgpIHNldCB0aHlTaXplVGhyZXNob2xkKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgc2l6ZVRocmVzaG9sZCA9IGNvZXJjZU51bWJlclZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKHNpemVUaHJlc2hvbGQpKSB7XG4gICAgICAgICAgICB0aGlzLnNpemVUaHJlc2hvbGQgPSBzaXplVGhyZXNob2xkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHRoeVNpemVFeGNlZWRzSGFuZGxlcih2YWx1ZTogVGh5U2l6ZUV4Y2VlZHNIYW5kbGVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zaXplRXhjZWVkc0hhbmRsZXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaMh+WumuaWh+S7tuWQjue8gOexu+Wei++8iE1JTUVfTWFw77yJ77yM5L6L5aaCXCIueGxzLHhsc3hcIu+8jFwiW1wiLmRvY1wiLFwiLmRvY3hcIl1cIlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUFjY2VwdFR5cGUodmFsdWU6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5hY2NlcHRUeXBlID0gbWltZVR5cGVDb252ZXJ0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBJbmplY3QoVEhZX1VQTE9BRF9ERUZBVUxUX09QVElPTlMpIHB1YmxpYyBkZWZhdWx0Q29uZmlnOiBUaHlVcGxvYWRDb25maWcsXG4gICAgICAgIHB1YmxpYyBuZ1pvbmU/OiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgdGhpcy5zaXplVGhyZXNob2xkID0gZGVmYXVsdENvbmZpZy5zaXplVGhyZXNob2xkO1xuICAgICAgICB0aGlzLnNpemVFeGNlZWRzSGFuZGxlciA9IGRlZmF1bHRDb25maWcuc2l6ZUV4Y2VlZHNIYW5kbGVyO1xuICAgICAgICB0aGlzLmFjY2VwdFR5cGUgPSBkZWZhdWx0Q29uZmlnLmFjY2VwdFR5cGU7XG4gICAgfVxuXG4gICAgaGFuZGxlU2l6ZUV4Y2VlZHMoZXZlbnQ6IEV2ZW50LCBmaWxlczogRmlsZVtdKSB7XG4gICAgICAgIGxldCBzaXplRXhjZWVkc0ZpbGVzID0gZmlsZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zaXplIC8gMTAyNCA+IHRoaXMuc2l6ZVRocmVzaG9sZCk7XG4gICAgICAgIGlmIChzaXplRXhjZWVkc0ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNpemVFeGNlZWRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGZpbGVzOiBmaWxlcyxcbiAgICAgICAgICAgICAgICBleGNlZWRzRmlsZXM6IHNpemVFeGNlZWRzRmlsZXMsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIHNpemVUaHJlc2hvbGQ6IHRoaXMuc2l6ZVRocmVzaG9sZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNpemVFeGNlZWRzSGFuZGxlcihzaXplRXhjZWVkQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVzO1xuICAgIH1cblxuICAgIHNlbGVjdEZpbGVzKGV2ZW50OiBFdmVudCwgZmlsZXM6IEZpbGVbXSwgZXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8VGh5RmlsZVNlbGVjdEV2ZW50Pikge1xuICAgICAgICBsZXQgc3VjY2Vzc0ZpbGVzOiBGaWxlW10gfCB2b2lkID0gZmlsZXM7XG4gICAgICAgIGlmICh0aGlzLnNpemVUaHJlc2hvbGQgJiYgdGhpcy5zaXplVGhyZXNob2xkID4gMCkge1xuICAgICAgICAgICAgc3VjY2Vzc0ZpbGVzID0gdGhpcy5oYW5kbGVTaXplRXhjZWVkcyhldmVudCwgZmlsZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdWNjZXNzRmlsZXMpIHtcbiAgICAgICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KHtcbiAgICAgICAgICAgICAgICBmaWxlczogc3VjY2Vzc0ZpbGVzLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBldmVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -3,6 +3,7 @@ export const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken('thy-uploader-defau
|
|
|
3
3
|
export const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {
|
|
4
4
|
provide: THY_UPLOAD_DEFAULT_OPTIONS,
|
|
5
5
|
useValue: {
|
|
6
|
+
acceptType: '',
|
|
6
7
|
sizeThreshold: 0,
|
|
7
8
|
sizeExceedsHandler: sizeExceedsHandler
|
|
8
9
|
}
|
|
@@ -17,4 +18,4 @@ export function sizeExceedsHandler(event) {
|
|
|
17
18
|
console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGxvYWQvdXBsb2FkLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBVS9DLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksY0FBYyxDQUFrQiw4QkFBOEIsQ0FBQyxDQUFDO0FBRTlHLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHO0lBQy9DLE9BQU8sRUFBRSwwQkFBMEI7SUFDbkMsUUFBUSxFQUFFO1FBQ04sVUFBVSxFQUFFLEVBQUU7UUFDZCxhQUFhLEVBQUUsQ0FBQztRQUNoQixrQkFBa0IsRUFBRSxrQkFBa0I7S0FDekM7Q0FDSixDQUFDO0FBRUYsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWdDO0lBQy9ELElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsRUFBRTtRQUMvQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxZQUFZO2FBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNSLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsbUJBQW1CLDRCQUE0QixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztLQUNyRztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBUaHlGaWxlU2l6ZUV4Y2VlZHNDb250ZXh0LCBUaHlTaXplRXhjZWVkc0hhbmRsZXIgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBUaHlVcGxvYWRDb25maWcge1xuICAgIHNpemVUaHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgc2l6ZUV4Y2VlZHNIYW5kbGVyPzogVGh5U2l6ZUV4Y2VlZHNIYW5kbGVyO1xuICAgIGFjY2VwdFR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBUSFlfVVBMT0FEX0RFRkFVTFRfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUaHlVcGxvYWRDb25maWc+KCd0aHktdXBsb2FkZXItZGVmYXVsdC1vcHRpb25zJyk7XG5cbmV4cG9ydCBjb25zdCBUSFlfVVBMT0FEX0RFRkFVTFRfT1BUSU9OU19QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBUSFlfVVBMT0FEX0RFRkFVTFRfT1BUSU9OUyxcbiAgICB1c2VWYWx1ZToge1xuICAgICAgICBhY2NlcHRUeXBlOiAnJyxcbiAgICAgICAgc2l6ZVRocmVzaG9sZDogMCxcbiAgICAgICAgc2l6ZUV4Y2VlZHNIYW5kbGVyOiBzaXplRXhjZWVkc0hhbmRsZXJcbiAgICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUV4Y2VlZHNIYW5kbGVyKGV2ZW50OiBUaHlGaWxlU2l6ZUV4Y2VlZHNDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICBjb25zdCBleGNlZWRzRmlsZXNNZXNzYWdlID0gZXZlbnQuZXhjZWVkc0ZpbGVzXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBgZmlsZTogJHtpdGVtLm5hbWV9LCBzaXplOiAke2l0ZW0uc2l6ZX1gO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYHNvbWUgZmlsZXMoJHtleGNlZWRzRmlsZXNNZXNzYWdlfSkgc2l6ZSBleGNlZWRzIHRocmVzaG9sZCAke2V2ZW50LnNpemVUaHJlc2hvbGR9YCk7XG4gICAgfVxufVxuIl19
|
package/esm2020/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Version } from '@angular/core';
|
|
2
|
-
export const VERSION = new Version('15.2.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const VERSION = new Version('15.2.10');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNS4yLjEwJyk7XG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
|
|
|
3
3
|
import { HttpClientModule } from '@angular/common/http';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
5
|
import { InjectionToken, Directive, Inject, Input, EventEmitter, HostBinding, Output, Component, ViewChild, Injectable, NgModule } from '@angular/core';
|
|
6
|
-
import {
|
|
6
|
+
import { isArray, isString, coerceNumberValue, isNumber, isEmpty, coerceBooleanProperty, coerceArray, humanizeBytes } from 'ngx-tethys/util';
|
|
7
7
|
import { Subject, fromEvent, Observable, from } from 'rxjs';
|
|
8
8
|
import { takeUntil, tap, filter, mergeMap, map } from 'rxjs/operators';
|
|
9
9
|
import { __decorate, __metadata } from 'tslib';
|
|
@@ -13,6 +13,7 @@ const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken('thy-uploader-default-opti
|
|
|
13
13
|
const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {
|
|
14
14
|
provide: THY_UPLOAD_DEFAULT_OPTIONS,
|
|
15
15
|
useValue: {
|
|
16
|
+
acceptType: '',
|
|
16
17
|
sizeThreshold: 0,
|
|
17
18
|
sizeExceedsHandler: sizeExceedsHandler
|
|
18
19
|
}
|
|
@@ -28,66 +29,6 @@ function sizeExceedsHandler(event) {
|
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
class FileSelectBaseDirective {
|
|
32
|
-
set thySizeThreshold(value) {
|
|
33
|
-
const sizeThreshold = coerceNumberValue(value);
|
|
34
|
-
if (isNumber(sizeThreshold)) {
|
|
35
|
-
this.sizeThreshold = sizeThreshold;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
set thySizeExceedsHandler(value) {
|
|
39
|
-
if (value) {
|
|
40
|
-
this.sizeExceedsHandler = value;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
constructor(elementRef, defaultConfig, ngZone) {
|
|
44
|
-
this.elementRef = elementRef;
|
|
45
|
-
this.defaultConfig = defaultConfig;
|
|
46
|
-
this.ngZone = ngZone;
|
|
47
|
-
this.sizeThreshold = defaultConfig.sizeThreshold;
|
|
48
|
-
this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;
|
|
49
|
-
}
|
|
50
|
-
handleSizeExceeds(event, files) {
|
|
51
|
-
let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);
|
|
52
|
-
if (sizeExceedsFiles.length > 0) {
|
|
53
|
-
const sizeExceedContext = {
|
|
54
|
-
files: files,
|
|
55
|
-
exceedsFiles: sizeExceedsFiles,
|
|
56
|
-
nativeEvent: event,
|
|
57
|
-
sizeThreshold: this.sizeThreshold
|
|
58
|
-
};
|
|
59
|
-
return this.sizeExceedsHandler(sizeExceedContext);
|
|
60
|
-
}
|
|
61
|
-
return files;
|
|
62
|
-
}
|
|
63
|
-
selectFiles(event, files, eventEmitter) {
|
|
64
|
-
let successFiles = files;
|
|
65
|
-
if (this.sizeThreshold && this.sizeThreshold > 0) {
|
|
66
|
-
successFiles = this.handleSizeExceeds(event, files);
|
|
67
|
-
}
|
|
68
|
-
if (successFiles) {
|
|
69
|
-
eventEmitter.emit({
|
|
70
|
-
files: successFiles,
|
|
71
|
-
nativeEvent: event
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
FileSelectBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, deps: [{ token: i0.ElementRef }, { token: THY_UPLOAD_DEFAULT_OPTIONS }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
77
|
-
FileSelectBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: FileSelectBaseDirective, inputs: { thySizeThreshold: "thySizeThreshold", thySizeExceedsHandler: "thySizeExceedsHandler" }, ngImport: i0 });
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, decorators: [{
|
|
79
|
-
type: Directive
|
|
80
|
-
}], ctorParameters: function () {
|
|
81
|
-
return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
82
|
-
type: Inject,
|
|
83
|
-
args: [THY_UPLOAD_DEFAULT_OPTIONS]
|
|
84
|
-
}] }, { type: i0.NgZone }];
|
|
85
|
-
}, propDecorators: { thySizeThreshold: [{
|
|
86
|
-
type: Input
|
|
87
|
-
}], thySizeExceedsHandler: [{
|
|
88
|
-
type: Input
|
|
89
|
-
}] } });
|
|
90
|
-
|
|
91
32
|
// Multipurpose Internet Mail Extensions
|
|
92
33
|
const MIME_Map = {
|
|
93
34
|
'.3gp': 'video/3gpp',
|
|
@@ -185,6 +126,75 @@ function mimeTypeConvert(value) {
|
|
|
185
126
|
return acceptTypes.join(',');
|
|
186
127
|
}
|
|
187
128
|
|
|
129
|
+
class FileSelectBaseDirective {
|
|
130
|
+
set thySizeThreshold(value) {
|
|
131
|
+
const sizeThreshold = coerceNumberValue(value);
|
|
132
|
+
if (isNumber(sizeThreshold)) {
|
|
133
|
+
this.sizeThreshold = sizeThreshold;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
set thySizeExceedsHandler(value) {
|
|
137
|
+
if (value) {
|
|
138
|
+
this.sizeExceedsHandler = value;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 指定文件后缀类型(MIME_Map),例如".xls,xlsx","[".doc",".docx"]"
|
|
143
|
+
*/
|
|
144
|
+
set thyAcceptType(value) {
|
|
145
|
+
this.acceptType = mimeTypeConvert(value);
|
|
146
|
+
}
|
|
147
|
+
constructor(elementRef, defaultConfig, ngZone) {
|
|
148
|
+
this.elementRef = elementRef;
|
|
149
|
+
this.defaultConfig = defaultConfig;
|
|
150
|
+
this.ngZone = ngZone;
|
|
151
|
+
this.sizeThreshold = defaultConfig.sizeThreshold;
|
|
152
|
+
this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;
|
|
153
|
+
this.acceptType = defaultConfig.acceptType;
|
|
154
|
+
}
|
|
155
|
+
handleSizeExceeds(event, files) {
|
|
156
|
+
let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);
|
|
157
|
+
if (sizeExceedsFiles.length > 0) {
|
|
158
|
+
const sizeExceedContext = {
|
|
159
|
+
files: files,
|
|
160
|
+
exceedsFiles: sizeExceedsFiles,
|
|
161
|
+
nativeEvent: event,
|
|
162
|
+
sizeThreshold: this.sizeThreshold
|
|
163
|
+
};
|
|
164
|
+
return this.sizeExceedsHandler(sizeExceedContext);
|
|
165
|
+
}
|
|
166
|
+
return files;
|
|
167
|
+
}
|
|
168
|
+
selectFiles(event, files, eventEmitter) {
|
|
169
|
+
let successFiles = files;
|
|
170
|
+
if (this.sizeThreshold && this.sizeThreshold > 0) {
|
|
171
|
+
successFiles = this.handleSizeExceeds(event, files);
|
|
172
|
+
}
|
|
173
|
+
if (successFiles) {
|
|
174
|
+
eventEmitter.emit({
|
|
175
|
+
files: successFiles,
|
|
176
|
+
nativeEvent: event
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
FileSelectBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, deps: [{ token: i0.ElementRef }, { token: THY_UPLOAD_DEFAULT_OPTIONS }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
182
|
+
FileSelectBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: FileSelectBaseDirective, inputs: { thySizeThreshold: "thySizeThreshold", thySizeExceedsHandler: "thySizeExceedsHandler", thyAcceptType: "thyAcceptType" }, ngImport: i0 });
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, decorators: [{
|
|
184
|
+
type: Directive
|
|
185
|
+
}], ctorParameters: function () {
|
|
186
|
+
return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
187
|
+
type: Inject,
|
|
188
|
+
args: [THY_UPLOAD_DEFAULT_OPTIONS]
|
|
189
|
+
}] }, { type: i0.NgZone }];
|
|
190
|
+
}, propDecorators: { thySizeThreshold: [{
|
|
191
|
+
type: Input
|
|
192
|
+
}], thySizeExceedsHandler: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}], thyAcceptType: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}] } });
|
|
197
|
+
|
|
188
198
|
/**
|
|
189
199
|
* @name thyFileDrop
|
|
190
200
|
*/
|
|
@@ -192,9 +202,6 @@ class ThyFileDropDirective extends FileSelectBaseDirective {
|
|
|
192
202
|
set thyFileDropClassName(value) {
|
|
193
203
|
this.dragOverCustomClass = value;
|
|
194
204
|
}
|
|
195
|
-
set thyAcceptType(value) {
|
|
196
|
-
this.acceptType = mimeTypeConvert(value);
|
|
197
|
-
}
|
|
198
205
|
constructor(elementRef, renderer, ngZone, defaultConfig) {
|
|
199
206
|
super(elementRef, defaultConfig);
|
|
200
207
|
this.elementRef = elementRef;
|
|
@@ -312,7 +319,7 @@ class ThyFileDropDirective extends FileSelectBaseDirective {
|
|
|
312
319
|
}
|
|
313
320
|
}
|
|
314
321
|
ThyFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyFileDropDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: THY_UPLOAD_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Directive });
|
|
315
|
-
ThyFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyFileDropDirective, isStandalone: true, selector: "[thyFileDrop]", inputs: { thyFileDropClassName: "thyFileDropClassName"
|
|
322
|
+
ThyFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyFileDropDirective, isStandalone: true, selector: "[thyFileDrop]", inputs: { thyFileDropClassName: "thyFileDropClassName" }, outputs: { thyOnDrop: "thyOnDrop" }, host: { properties: { "class.drop-over": "this.isDragOver", "class.thy-drop-over": "this.isDragOver" } }, usesInheritance: true, ngImport: i0 });
|
|
316
323
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyFileDropDirective, decorators: [{
|
|
317
324
|
type: Directive,
|
|
318
325
|
args: [{
|
|
@@ -332,8 +339,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
332
339
|
args: ['class.thy-drop-over']
|
|
333
340
|
}], thyFileDropClassName: [{
|
|
334
341
|
type: Input
|
|
335
|
-
}], thyAcceptType: [{
|
|
336
|
-
type: Input
|
|
337
342
|
}], thyOnDrop: [{
|
|
338
343
|
type: Output
|
|
339
344
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/file-select-base.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","import { coerceNumberValue, isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, NgZone } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\n\n@Directive()\nexport class FileSelectBaseDirective {\n acceptType: string;\n sizeThreshold: number;\n sizeExceedsHandler: ThySizeExceedsHandler;\n\n @Input() set thySizeThreshold(value: number) {\n const sizeThreshold = coerceNumberValue(value);\n if (isNumber(sizeThreshold)) {\n this.sizeThreshold = sizeThreshold;\n }\n }\n\n @Input() set thySizeExceedsHandler(value: ThySizeExceedsHandler) {\n if (value) {\n this.sizeExceedsHandler = value;\n }\n }\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n public ngZone?: NgZone\n ) {\n this.sizeThreshold = defaultConfig.sizeThreshold;\n this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;\n }\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.sizeThreshold\n };\n return this.sizeExceedsHandler(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: EventEmitter<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.sizeThreshold && this.sizeThreshold > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { isEmpty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n standalone: true\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit, OnDestroy {\n @HostBinding('class.drop-over')\n @HostBinding('class.thy-drop-over')\n isDragOver = false;\n private dragOverCustomClass: string;\n\n @Input() set thyFileDropClassName(value: string) {\n this.dragOverCustomClass = value;\n }\n\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n @Output() thyOnDrop = new EventEmitter();\n\n private ngUnsubscribe$ = new Subject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver = true;\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(event.dataTransfer ? Array.from(event.dataTransfer.files) : []);\n if (!isEmpty(files)) {\n this.selectFiles(event, Array.from(event.dataTransfer.files), this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if (item['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = item['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n if (this.acceptType && this.acceptType != '*/*') {\n return items.filter(item => {\n return this.acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n if (this.dragOverCustomClass) {\n if (this.isDragOver) {\n this.renderer.addClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n }\n }\n }\n\n private setDragOverState(isDragOver: boolean) {\n this.isDragOver = isDragOver;\n }\n\n private resetDragOver() {\n this.setDragOverState(false);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","import { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Component, ElementRef, EventEmitter, Inject, Input, NgZone, OnDestroy, Output, ViewChild } from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\nimport { InputBoolean, InputNumber } from 'ngx-tethys/core';\n\n/**\n * 文件上传组件\n * @name [thyFileSelect],thy-file-select\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html',\n standalone: true\n})\nexport class ThyFileSelectComponent extends FileSelectBaseDirective implements OnDestroy {\n private multiple: boolean;\n\n private acceptFolder: boolean;\n\n /**\n * 文件选择事件\n */\n @Output() thyOnFileSelect = new EventEmitter();\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef<HTMLInputElement>;\n\n /**\n * 文件是否多选\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyMultiple(value: boolean) {\n this.multiple = coerceBooleanProperty(value);\n if (this.multiple) {\n this.fileInput.nativeElement.setAttribute('multiple', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('multiple');\n }\n }\n\n @Input()\n @InputBoolean()\n set thyAcceptFolder(value: boolean) {\n this.acceptFolder = coerceBooleanProperty(value);\n if (this.acceptFolder) {\n this.fileInput.nativeElement.setAttribute('webkitdirectory', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('webkitdirectory');\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n /**\n * 文件上传大小限制,单位`kb`,`0`表示没有任何限制\n */\n @Input()\n @InputNumber()\n set thySizeThreshold(value: number) {\n this.sizeThreshold = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor(public elementRef: ElementRef, @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig, ngZone: NgZone) {\n super(elementRef, defaultConfig);\n\n ngZone.runOutsideAngular(() =>\n fromEvent(elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.fileInput.nativeElement.click();\n })\n );\n }\n\n selectFile($event: Event) {\n const files = this.fileInput.nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput.nativeElement.value = '';\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"acceptType\"\n/>\n","import { coerceArray, humanizeBytes } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n *进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度, 比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间, 比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n constructor(private xhrFactory: XhrFactory) {}\n\n private secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new Date().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new Date().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new Date().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new Date().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelectComponent } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, ThyFileSelectComponent, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER],\n exports: [ThyFileSelectComponent, ThyFileDropDirective]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-select-base.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n acceptType?: string;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n acceptType: '',\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { coerceNumberValue, isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, NgZone } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n@Directive()\nexport class FileSelectBaseDirective {\n acceptType: string;\n sizeThreshold: number;\n sizeExceedsHandler: ThySizeExceedsHandler;\n\n @Input() set thySizeThreshold(value: number) {\n const sizeThreshold = coerceNumberValue(value);\n if (isNumber(sizeThreshold)) {\n this.sizeThreshold = sizeThreshold;\n }\n }\n\n @Input() set thySizeExceedsHandler(value: ThySizeExceedsHandler) {\n if (value) {\n this.sizeExceedsHandler = value;\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n public ngZone?: NgZone\n ) {\n this.sizeThreshold = defaultConfig.sizeThreshold;\n this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;\n this.acceptType = defaultConfig.acceptType;\n }\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.sizeThreshold\n };\n return this.sizeExceedsHandler(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: EventEmitter<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.sizeThreshold && this.sizeThreshold > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","import { isEmpty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n standalone: true\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit, OnDestroy {\n @HostBinding('class.drop-over')\n @HostBinding('class.thy-drop-over')\n isDragOver = false;\n private dragOverCustomClass: string;\n\n @Input() set thyFileDropClassName(value: string) {\n this.dragOverCustomClass = value;\n }\n\n @Output() thyOnDrop = new EventEmitter();\n\n private ngUnsubscribe$ = new Subject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver = true;\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(event.dataTransfer ? Array.from(event.dataTransfer.files) : []);\n if (!isEmpty(files)) {\n this.selectFiles(event, Array.from(event.dataTransfer.files), this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if (item['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = item['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n if (this.acceptType && this.acceptType != '*/*') {\n return items.filter(item => {\n return this.acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n if (this.dragOverCustomClass) {\n if (this.isDragOver) {\n this.renderer.addClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n }\n }\n }\n\n private setDragOverState(isDragOver: boolean) {\n this.isDragOver = isDragOver;\n }\n\n private resetDragOver() {\n this.setDragOverState(false);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","import { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Component, ElementRef, EventEmitter, Inject, Input, NgZone, OnDestroy, Output, ViewChild } from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\nimport { InputBoolean, InputNumber } from 'ngx-tethys/core';\n\n/**\n * 文件上传组件\n * @name [thyFileSelect],thy-file-select\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html',\n standalone: true\n})\nexport class ThyFileSelectComponent extends FileSelectBaseDirective implements OnDestroy {\n private multiple: boolean;\n\n private acceptFolder: boolean;\n\n /**\n * 文件选择事件\n */\n @Output() thyOnFileSelect = new EventEmitter();\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef<HTMLInputElement>;\n\n /**\n * 文件是否多选\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyMultiple(value: boolean) {\n this.multiple = coerceBooleanProperty(value);\n if (this.multiple) {\n this.fileInput.nativeElement.setAttribute('multiple', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('multiple');\n }\n }\n\n @Input()\n @InputBoolean()\n set thyAcceptFolder(value: boolean) {\n this.acceptFolder = coerceBooleanProperty(value);\n if (this.acceptFolder) {\n this.fileInput.nativeElement.setAttribute('webkitdirectory', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('webkitdirectory');\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n /**\n * 文件上传大小限制,单位`kb`,`0`表示没有任何限制\n */\n @Input()\n @InputNumber()\n set thySizeThreshold(value: number) {\n this.sizeThreshold = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor(public elementRef: ElementRef, @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig, ngZone: NgZone) {\n super(elementRef, defaultConfig);\n\n ngZone.runOutsideAngular(() =>\n fromEvent(elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.fileInput.nativeElement.click();\n })\n );\n }\n\n selectFile($event: Event) {\n const files = this.fileInput.nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput.nativeElement.value = '';\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"acceptType\"\n/>\n","import { coerceArray, humanizeBytes } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n *进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度, 比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间, 比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n constructor(private xhrFactory: XhrFactory) {}\n\n private secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new Date().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new Date().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new Date().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new Date().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelectComponent } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, ThyFileSelectComponent, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER],\n exports: [ThyFileSelectComponent, ThyFileDropDirective]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2015/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('15.2.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('15.2.10');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS;;ACF5C;;AAEG;;;;"}
|
|
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
|
|
|
3
3
|
import { HttpClientModule } from '@angular/common/http';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
5
|
import { InjectionToken, Directive, Inject, Input, EventEmitter, HostBinding, Output, Component, ViewChild, Injectable, NgModule } from '@angular/core';
|
|
6
|
-
import {
|
|
6
|
+
import { isArray, isString, coerceNumberValue, isNumber, isEmpty, coerceBooleanProperty, coerceArray, humanizeBytes } from 'ngx-tethys/util';
|
|
7
7
|
import { Subject, fromEvent, Observable, from } from 'rxjs';
|
|
8
8
|
import { takeUntil, tap, filter, mergeMap, map } from 'rxjs/operators';
|
|
9
9
|
import { __decorate, __metadata } from 'tslib';
|
|
@@ -13,6 +13,7 @@ const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken('thy-uploader-default-opti
|
|
|
13
13
|
const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {
|
|
14
14
|
provide: THY_UPLOAD_DEFAULT_OPTIONS,
|
|
15
15
|
useValue: {
|
|
16
|
+
acceptType: '',
|
|
16
17
|
sizeThreshold: 0,
|
|
17
18
|
sizeExceedsHandler: sizeExceedsHandler
|
|
18
19
|
}
|
|
@@ -28,64 +29,6 @@ function sizeExceedsHandler(event) {
|
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
class FileSelectBaseDirective {
|
|
32
|
-
set thySizeThreshold(value) {
|
|
33
|
-
const sizeThreshold = coerceNumberValue(value);
|
|
34
|
-
if (isNumber(sizeThreshold)) {
|
|
35
|
-
this.sizeThreshold = sizeThreshold;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
set thySizeExceedsHandler(value) {
|
|
39
|
-
if (value) {
|
|
40
|
-
this.sizeExceedsHandler = value;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
constructor(elementRef, defaultConfig, ngZone) {
|
|
44
|
-
this.elementRef = elementRef;
|
|
45
|
-
this.defaultConfig = defaultConfig;
|
|
46
|
-
this.ngZone = ngZone;
|
|
47
|
-
this.sizeThreshold = defaultConfig.sizeThreshold;
|
|
48
|
-
this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;
|
|
49
|
-
}
|
|
50
|
-
handleSizeExceeds(event, files) {
|
|
51
|
-
let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);
|
|
52
|
-
if (sizeExceedsFiles.length > 0) {
|
|
53
|
-
const sizeExceedContext = {
|
|
54
|
-
files: files,
|
|
55
|
-
exceedsFiles: sizeExceedsFiles,
|
|
56
|
-
nativeEvent: event,
|
|
57
|
-
sizeThreshold: this.sizeThreshold
|
|
58
|
-
};
|
|
59
|
-
return this.sizeExceedsHandler(sizeExceedContext);
|
|
60
|
-
}
|
|
61
|
-
return files;
|
|
62
|
-
}
|
|
63
|
-
selectFiles(event, files, eventEmitter) {
|
|
64
|
-
let successFiles = files;
|
|
65
|
-
if (this.sizeThreshold && this.sizeThreshold > 0) {
|
|
66
|
-
successFiles = this.handleSizeExceeds(event, files);
|
|
67
|
-
}
|
|
68
|
-
if (successFiles) {
|
|
69
|
-
eventEmitter.emit({
|
|
70
|
-
files: successFiles,
|
|
71
|
-
nativeEvent: event
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
FileSelectBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, deps: [{ token: i0.ElementRef }, { token: THY_UPLOAD_DEFAULT_OPTIONS }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
77
|
-
FileSelectBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: FileSelectBaseDirective, inputs: { thySizeThreshold: "thySizeThreshold", thySizeExceedsHandler: "thySizeExceedsHandler" }, ngImport: i0 });
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, decorators: [{
|
|
79
|
-
type: Directive
|
|
80
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
81
|
-
type: Inject,
|
|
82
|
-
args: [THY_UPLOAD_DEFAULT_OPTIONS]
|
|
83
|
-
}] }, { type: i0.NgZone }]; }, propDecorators: { thySizeThreshold: [{
|
|
84
|
-
type: Input
|
|
85
|
-
}], thySizeExceedsHandler: [{
|
|
86
|
-
type: Input
|
|
87
|
-
}] } });
|
|
88
|
-
|
|
89
32
|
// Multipurpose Internet Mail Extensions
|
|
90
33
|
const MIME_Map = {
|
|
91
34
|
'.3gp': 'video/3gpp',
|
|
@@ -183,6 +126,73 @@ function mimeTypeConvert(value) {
|
|
|
183
126
|
return acceptTypes.join(',');
|
|
184
127
|
}
|
|
185
128
|
|
|
129
|
+
class FileSelectBaseDirective {
|
|
130
|
+
set thySizeThreshold(value) {
|
|
131
|
+
const sizeThreshold = coerceNumberValue(value);
|
|
132
|
+
if (isNumber(sizeThreshold)) {
|
|
133
|
+
this.sizeThreshold = sizeThreshold;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
set thySizeExceedsHandler(value) {
|
|
137
|
+
if (value) {
|
|
138
|
+
this.sizeExceedsHandler = value;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 指定文件后缀类型(MIME_Map),例如".xls,xlsx","[".doc",".docx"]"
|
|
143
|
+
*/
|
|
144
|
+
set thyAcceptType(value) {
|
|
145
|
+
this.acceptType = mimeTypeConvert(value);
|
|
146
|
+
}
|
|
147
|
+
constructor(elementRef, defaultConfig, ngZone) {
|
|
148
|
+
this.elementRef = elementRef;
|
|
149
|
+
this.defaultConfig = defaultConfig;
|
|
150
|
+
this.ngZone = ngZone;
|
|
151
|
+
this.sizeThreshold = defaultConfig.sizeThreshold;
|
|
152
|
+
this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;
|
|
153
|
+
this.acceptType = defaultConfig.acceptType;
|
|
154
|
+
}
|
|
155
|
+
handleSizeExceeds(event, files) {
|
|
156
|
+
let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);
|
|
157
|
+
if (sizeExceedsFiles.length > 0) {
|
|
158
|
+
const sizeExceedContext = {
|
|
159
|
+
files: files,
|
|
160
|
+
exceedsFiles: sizeExceedsFiles,
|
|
161
|
+
nativeEvent: event,
|
|
162
|
+
sizeThreshold: this.sizeThreshold
|
|
163
|
+
};
|
|
164
|
+
return this.sizeExceedsHandler(sizeExceedContext);
|
|
165
|
+
}
|
|
166
|
+
return files;
|
|
167
|
+
}
|
|
168
|
+
selectFiles(event, files, eventEmitter) {
|
|
169
|
+
let successFiles = files;
|
|
170
|
+
if (this.sizeThreshold && this.sizeThreshold > 0) {
|
|
171
|
+
successFiles = this.handleSizeExceeds(event, files);
|
|
172
|
+
}
|
|
173
|
+
if (successFiles) {
|
|
174
|
+
eventEmitter.emit({
|
|
175
|
+
files: successFiles,
|
|
176
|
+
nativeEvent: event
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
FileSelectBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, deps: [{ token: i0.ElementRef }, { token: THY_UPLOAD_DEFAULT_OPTIONS }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
182
|
+
FileSelectBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: FileSelectBaseDirective, inputs: { thySizeThreshold: "thySizeThreshold", thySizeExceedsHandler: "thySizeExceedsHandler", thyAcceptType: "thyAcceptType" }, ngImport: i0 });
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FileSelectBaseDirective, decorators: [{
|
|
184
|
+
type: Directive
|
|
185
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
186
|
+
type: Inject,
|
|
187
|
+
args: [THY_UPLOAD_DEFAULT_OPTIONS]
|
|
188
|
+
}] }, { type: i0.NgZone }]; }, propDecorators: { thySizeThreshold: [{
|
|
189
|
+
type: Input
|
|
190
|
+
}], thySizeExceedsHandler: [{
|
|
191
|
+
type: Input
|
|
192
|
+
}], thyAcceptType: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}] } });
|
|
195
|
+
|
|
186
196
|
/**
|
|
187
197
|
* @name thyFileDrop
|
|
188
198
|
*/
|
|
@@ -190,9 +200,6 @@ class ThyFileDropDirective extends FileSelectBaseDirective {
|
|
|
190
200
|
set thyFileDropClassName(value) {
|
|
191
201
|
this.dragOverCustomClass = value;
|
|
192
202
|
}
|
|
193
|
-
set thyAcceptType(value) {
|
|
194
|
-
this.acceptType = mimeTypeConvert(value);
|
|
195
|
-
}
|
|
196
203
|
constructor(elementRef, renderer, ngZone, defaultConfig) {
|
|
197
204
|
super(elementRef, defaultConfig);
|
|
198
205
|
this.elementRef = elementRef;
|
|
@@ -310,7 +317,7 @@ class ThyFileDropDirective extends FileSelectBaseDirective {
|
|
|
310
317
|
}
|
|
311
318
|
}
|
|
312
319
|
ThyFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyFileDropDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: THY_UPLOAD_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Directive });
|
|
313
|
-
ThyFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyFileDropDirective, isStandalone: true, selector: "[thyFileDrop]", inputs: { thyFileDropClassName: "thyFileDropClassName"
|
|
320
|
+
ThyFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ThyFileDropDirective, isStandalone: true, selector: "[thyFileDrop]", inputs: { thyFileDropClassName: "thyFileDropClassName" }, outputs: { thyOnDrop: "thyOnDrop" }, host: { properties: { "class.drop-over": "this.isDragOver", "class.thy-drop-over": "this.isDragOver" } }, usesInheritance: true, ngImport: i0 });
|
|
314
321
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ThyFileDropDirective, decorators: [{
|
|
315
322
|
type: Directive,
|
|
316
323
|
args: [{
|
|
@@ -328,8 +335,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
328
335
|
args: ['class.thy-drop-over']
|
|
329
336
|
}], thyFileDropClassName: [{
|
|
330
337
|
type: Input
|
|
331
|
-
}], thyAcceptType: [{
|
|
332
|
-
type: Input
|
|
333
338
|
}], thyOnDrop: [{
|
|
334
339
|
type: Output
|
|
335
340
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/file-select-base.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","import { coerceNumberValue, isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, NgZone } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\n\n@Directive()\nexport class FileSelectBaseDirective {\n acceptType: string;\n sizeThreshold: number;\n sizeExceedsHandler: ThySizeExceedsHandler;\n\n @Input() set thySizeThreshold(value: number) {\n const sizeThreshold = coerceNumberValue(value);\n if (isNumber(sizeThreshold)) {\n this.sizeThreshold = sizeThreshold;\n }\n }\n\n @Input() set thySizeExceedsHandler(value: ThySizeExceedsHandler) {\n if (value) {\n this.sizeExceedsHandler = value;\n }\n }\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n public ngZone?: NgZone\n ) {\n this.sizeThreshold = defaultConfig.sizeThreshold;\n this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;\n }\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.sizeThreshold\n };\n return this.sizeExceedsHandler(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: EventEmitter<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.sizeThreshold && this.sizeThreshold > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { isEmpty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n standalone: true\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit, OnDestroy {\n @HostBinding('class.drop-over')\n @HostBinding('class.thy-drop-over')\n isDragOver = false;\n private dragOverCustomClass: string;\n\n @Input() set thyFileDropClassName(value: string) {\n this.dragOverCustomClass = value;\n }\n\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n @Output() thyOnDrop = new EventEmitter();\n\n private ngUnsubscribe$ = new Subject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver = true;\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(event.dataTransfer ? Array.from(event.dataTransfer.files) : []);\n if (!isEmpty(files)) {\n this.selectFiles(event, Array.from(event.dataTransfer.files), this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if (item['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = item['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n if (this.acceptType && this.acceptType != '*/*') {\n return items.filter(item => {\n return this.acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n if (this.dragOverCustomClass) {\n if (this.isDragOver) {\n this.renderer.addClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n }\n }\n }\n\n private setDragOverState(isDragOver: boolean) {\n this.isDragOver = isDragOver;\n }\n\n private resetDragOver() {\n this.setDragOverState(false);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","import { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Component, ElementRef, EventEmitter, Inject, Input, NgZone, OnDestroy, Output, ViewChild } from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\nimport { InputBoolean, InputNumber } from 'ngx-tethys/core';\n\n/**\n * 文件上传组件\n * @name [thyFileSelect],thy-file-select\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html',\n standalone: true\n})\nexport class ThyFileSelectComponent extends FileSelectBaseDirective implements OnDestroy {\n private multiple: boolean;\n\n private acceptFolder: boolean;\n\n /**\n * 文件选择事件\n */\n @Output() thyOnFileSelect = new EventEmitter();\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef<HTMLInputElement>;\n\n /**\n * 文件是否多选\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyMultiple(value: boolean) {\n this.multiple = coerceBooleanProperty(value);\n if (this.multiple) {\n this.fileInput.nativeElement.setAttribute('multiple', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('multiple');\n }\n }\n\n @Input()\n @InputBoolean()\n set thyAcceptFolder(value: boolean) {\n this.acceptFolder = coerceBooleanProperty(value);\n if (this.acceptFolder) {\n this.fileInput.nativeElement.setAttribute('webkitdirectory', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('webkitdirectory');\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n /**\n * 文件上传大小限制,单位`kb`,`0`表示没有任何限制\n */\n @Input()\n @InputNumber()\n set thySizeThreshold(value: number) {\n this.sizeThreshold = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor(public elementRef: ElementRef, @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig, ngZone: NgZone) {\n super(elementRef, defaultConfig);\n\n ngZone.runOutsideAngular(() =>\n fromEvent(elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.fileInput.nativeElement.click();\n })\n );\n }\n\n selectFile($event: Event) {\n const files = this.fileInput.nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput.nativeElement.value = '';\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"acceptType\"\n/>\n","import { coerceArray, humanizeBytes } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n *进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度, 比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间, 比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n constructor(private xhrFactory: XhrFactory) {}\n\n private secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new Date().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new Date().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new Date().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new Date().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelectComponent } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, ThyFileSelectComponent, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER],\n exports: [ThyFileSelectComponent, ThyFileDropDirective]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-select-base.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n acceptType?: string;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n acceptType: '',\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { coerceNumberValue, isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, NgZone } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n@Directive()\nexport class FileSelectBaseDirective {\n acceptType: string;\n sizeThreshold: number;\n sizeExceedsHandler: ThySizeExceedsHandler;\n\n @Input() set thySizeThreshold(value: number) {\n const sizeThreshold = coerceNumberValue(value);\n if (isNumber(sizeThreshold)) {\n this.sizeThreshold = sizeThreshold;\n }\n }\n\n @Input() set thySizeExceedsHandler(value: ThySizeExceedsHandler) {\n if (value) {\n this.sizeExceedsHandler = value;\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n public ngZone?: NgZone\n ) {\n this.sizeThreshold = defaultConfig.sizeThreshold;\n this.sizeExceedsHandler = defaultConfig.sizeExceedsHandler;\n this.acceptType = defaultConfig.acceptType;\n }\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.sizeThreshold);\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.sizeThreshold\n };\n return this.sizeExceedsHandler(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: EventEmitter<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.sizeThreshold && this.sizeThreshold > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","import { isEmpty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n standalone: true\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit, OnDestroy {\n @HostBinding('class.drop-over')\n @HostBinding('class.thy-drop-over')\n isDragOver = false;\n private dragOverCustomClass: string;\n\n @Input() set thyFileDropClassName(value: string) {\n this.dragOverCustomClass = value;\n }\n\n @Output() thyOnDrop = new EventEmitter();\n\n private ngUnsubscribe$ = new Subject<void>();\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver = true;\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(event.dataTransfer ? Array.from(event.dataTransfer.files) : []);\n if (!isEmpty(files)) {\n this.selectFiles(event, Array.from(event.dataTransfer.files), this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if (item['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = item['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n if (this.acceptType && this.acceptType != '*/*') {\n return items.filter(item => {\n return this.acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n if (this.dragOverCustomClass) {\n if (this.isDragOver) {\n this.renderer.addClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, this.dragOverCustomClass);\n }\n }\n }\n\n private setDragOverState(isDragOver: boolean) {\n this.isDragOver = isDragOver;\n }\n\n private resetDragOver() {\n this.setDragOverState(false);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n}\n","import { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Component, ElementRef, EventEmitter, Inject, Input, NgZone, OnDestroy, Output, ViewChild } from '@angular/core';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\nimport { InputBoolean, InputNumber } from 'ngx-tethys/core';\n\n/**\n * 文件上传组件\n * @name [thyFileSelect],thy-file-select\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html',\n standalone: true\n})\nexport class ThyFileSelectComponent extends FileSelectBaseDirective implements OnDestroy {\n private multiple: boolean;\n\n private acceptFolder: boolean;\n\n /**\n * 文件选择事件\n */\n @Output() thyOnFileSelect = new EventEmitter();\n\n @ViewChild('fileInput', { static: true }) fileInput: ElementRef<HTMLInputElement>;\n\n /**\n * 文件是否多选\n * @default false\n */\n @Input()\n @InputBoolean()\n set thyMultiple(value: boolean) {\n this.multiple = coerceBooleanProperty(value);\n if (this.multiple) {\n this.fileInput.nativeElement.setAttribute('multiple', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('multiple');\n }\n }\n\n @Input()\n @InputBoolean()\n set thyAcceptFolder(value: boolean) {\n this.acceptFolder = coerceBooleanProperty(value);\n if (this.acceptFolder) {\n this.fileInput.nativeElement.setAttribute('webkitdirectory', '');\n } else {\n this.fileInput.nativeElement.removeAttribute('webkitdirectory');\n }\n }\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n @Input()\n set thyAcceptType(value: Array<string> | string) {\n this.acceptType = mimeTypeConvert(value);\n }\n\n /**\n * 文件上传大小限制,单位`kb`,`0`表示没有任何限制\n */\n @Input()\n @InputNumber()\n set thySizeThreshold(value: number) {\n this.sizeThreshold = value;\n }\n\n private destroy$ = new Subject<void>();\n\n constructor(public elementRef: ElementRef, @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig, ngZone: NgZone) {\n super(elementRef, defaultConfig);\n\n ngZone.runOutsideAngular(() =>\n fromEvent(elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.fileInput.nativeElement.click();\n })\n );\n }\n\n selectFile($event: Event) {\n const files = this.fileInput.nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput.nativeElement.value = '';\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"acceptType\"\n/>\n","import { coerceArray, humanizeBytes } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n *进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度, 比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间, 比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n constructor(private xhrFactory: XhrFactory) {}\n\n private secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new Date().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new Date().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new Date().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new Date().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelectComponent } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule, ThyFileSelectComponent, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER],\n exports: [ThyFileSelectComponent, ThyFileDropDirective]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2020/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('15.2.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('15.2.10');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS;;ACF5C;;AAEG;;;;"}
|
package/package.json
CHANGED
package/schematics/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "15.2.
|
|
1
|
+
export declare const VERSION = "15.2.10";
|
package/schematics/version.js
CHANGED
|
@@ -13,7 +13,6 @@ export declare class ThyFileDropDirective extends FileSelectBaseDirective implem
|
|
|
13
13
|
isDragOver: boolean;
|
|
14
14
|
private dragOverCustomClass;
|
|
15
15
|
set thyFileDropClassName(value: string);
|
|
16
|
-
set thyAcceptType(value: Array<string> | string);
|
|
17
16
|
thyOnDrop: EventEmitter<any>;
|
|
18
17
|
private ngUnsubscribe$;
|
|
19
18
|
constructor(elementRef: ElementRef, renderer: Renderer2, ngZone: NgZone, defaultConfig: ThyUploadConfig);
|
|
@@ -26,5 +25,5 @@ export declare class ThyFileDropDirective extends FileSelectBaseDirective implem
|
|
|
26
25
|
private resetDragOver;
|
|
27
26
|
ngOnDestroy(): void;
|
|
28
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<ThyFileDropDirective, never>;
|
|
29
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ThyFileDropDirective, "[thyFileDrop]", never, { "thyFileDropClassName": "thyFileDropClassName";
|
|
28
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ThyFileDropDirective, "[thyFileDrop]", never, { "thyFileDropClassName": "thyFileDropClassName"; }, { "thyOnDrop": "thyOnDrop"; }, never, never, true, never>;
|
|
30
29
|
}
|
|
@@ -11,9 +11,13 @@ export declare class FileSelectBaseDirective {
|
|
|
11
11
|
sizeExceedsHandler: ThySizeExceedsHandler;
|
|
12
12
|
set thySizeThreshold(value: number);
|
|
13
13
|
set thySizeExceedsHandler(value: ThySizeExceedsHandler);
|
|
14
|
+
/**
|
|
15
|
+
* 指定文件后缀类型(MIME_Map),例如".xls,xlsx","[".doc",".docx"]"
|
|
16
|
+
*/
|
|
17
|
+
set thyAcceptType(value: Array<string> | string);
|
|
14
18
|
constructor(elementRef: ElementRef, defaultConfig: ThyUploadConfig, ngZone?: NgZone);
|
|
15
19
|
handleSizeExceeds(event: Event, files: File[]): void | File[];
|
|
16
20
|
selectFiles(event: Event, files: File[], eventEmitter: EventEmitter<ThyFileSelectEvent>): void;
|
|
17
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<FileSelectBaseDirective, never>;
|
|
18
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FileSelectBaseDirective, never, never, { "thySizeThreshold": "thySizeThreshold"; "thySizeExceedsHandler": "thySizeExceedsHandler"; }, {}, never, never, false, never>;
|
|
22
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FileSelectBaseDirective, never, never, { "thySizeThreshold": "thySizeThreshold"; "thySizeExceedsHandler": "thySizeExceedsHandler"; "thyAcceptType": "thyAcceptType"; }, {}, never, never, false, never>;
|
|
19
23
|
}
|
|
@@ -3,11 +3,13 @@ import { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';
|
|
|
3
3
|
export interface ThyUploadConfig {
|
|
4
4
|
sizeThreshold?: number;
|
|
5
5
|
sizeExceedsHandler?: ThySizeExceedsHandler;
|
|
6
|
+
acceptType?: string;
|
|
6
7
|
}
|
|
7
8
|
export declare const THY_UPLOAD_DEFAULT_OPTIONS: InjectionToken<ThyUploadConfig>;
|
|
8
9
|
export declare const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER: {
|
|
9
10
|
provide: InjectionToken<ThyUploadConfig>;
|
|
10
11
|
useValue: {
|
|
12
|
+
acceptType: string;
|
|
11
13
|
sizeThreshold: number;
|
|
12
14
|
sizeExceedsHandler: typeof sizeExceedsHandler;
|
|
13
15
|
};
|