@sumaris-net/ngx-components 2.8.1-beta4 → 2.8.1-beta5

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/doc/changelog.md CHANGED
@@ -731,3 +731,5 @@ This will allow subclasses to override the default selectedTabIndex after an err
731
731
  - `sumaris.auth.api.token.scope.enabled` to show/hide scopes in API token table (default is false)
732
732
  - `sumaris.auth.api.token.scope.default` set the default scope for new API token, mandatory if `sumaris.auth.api.token.scope.enabled` if false (default is 'read_api')
733
733
  - [enh] Add AppRowField component: wrap an AppFormField into a table column
734
+ - [enh] Add pipe `valueFormat` to format a value with a FormFieldDefinition (equivalent to pipe `propertyFormat`)
735
+ - [fix] `UploadFileComponent` Refactored
@@ -18,7 +18,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
18
18
  type: Pipe,
19
19
  args: [{ name: 'propertyGet' }]
20
20
  }] });
21
- class AbstractValuePipe {
21
+ class AbstractValueFormatPipe {
22
22
  dateFormat;
23
23
  translate;
24
24
  _i18nYes;
@@ -70,7 +70,7 @@ class AbstractValuePipe {
70
70
  }
71
71
  }
72
72
  }
73
- export class PropertyFormatPipe extends AbstractValuePipe {
73
+ export class PropertyFormatPipe extends AbstractValueFormatPipe {
74
74
  constructor(dateFormat, translate) {
75
75
  super(dateFormat, translate);
76
76
  }
@@ -100,7 +100,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
100
100
  type: Injectable,
101
101
  args: [{ providedIn: 'root' }]
102
102
  }], ctorParameters: () => [{ type: i1.DateFormatService }, { type: i2.TranslateService }] });
103
- export class ValueFormatPipe extends AbstractValuePipe {
103
+ export class ValueFormatPipe extends AbstractValueFormatPipe {
104
104
  constructor(dateFormat, translate) {
105
105
  super(dateFormat, translate);
106
106
  }
@@ -120,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
120
120
  type: Injectable,
121
121
  args: [{ providedIn: 'root' }]
122
122
  }], ctorParameters: () => [{ type: i1.DateFormatService }, { type: i2.TranslateService }] });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9wcm9wZXJ0eS5waXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFNdEYsTUFBTSxPQUFPLGVBQWU7SUFDMUIsU0FBUyxDQUFDLEdBQVEsRUFBRSxJQUEyRTtRQUM3RixPQUFPLGlCQUFpQixDQUN0QixHQUFHO1FBQ0gsT0FBTztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0UsZ0JBQWdCO1FBQ2hCLElBQUksSUFBSyxJQUFZLEVBQUUsWUFBWSxDQUNwQyxDQUFDO0lBQ0osQ0FBQzt1R0FUVSxlQUFlO3FHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFOztBQWE3QixNQUFlLGlCQUFpQjtJQUtwQjtJQUNBO0lBTEYsUUFBUSxDQUFTO0lBQ2pCLE9BQU8sQ0FBUztJQUV4QixZQUNVLFVBQTZCLEVBQzdCLFNBQTJCO1FBRDNCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQ2xDLENBQUM7SUFFSixJQUFJLE9BQU87UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxP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QUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7WUFDaEYsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt1R0FoQlUsa0JBQWtCO3FHQUFsQixrQkFBa0I7MkdBQWxCLGtCQUFrQixjQURMLE1BQU07OzJGQUNuQixrQkFBa0I7a0JBSjlCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGdCQUFnQjtpQkFDdkI7O2tCQUNBLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXdCbEMsTUFBTSxPQUFPLGVBQWdCLFNBQVEsaUJBQWlCO0lBQ3BELFlBQVksVUFBNkIsRUFBRSxTQUEyQjtRQUNwRSxLQUFLLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLFVBQStCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt1R0FQVSxlQUFlO3FHQUFmLGVBQWU7MkdBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUozQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxhQUFhO2lCQUNwQjs7a0JBQ0EsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNOaWwsIGlzTm90TmlsLCBqb2luUHJvcGVydGllc1BhdGggfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AUGlwZSh7IG5hbWU6ICdwcm9wZXJ0eUdldCcgfSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUdldFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKG9iajogYW55LCBhcmdzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgeyBrZXk6IHN0cmluZzsgZGVmYXVsdFZhbHVlPzogYW55IH0pOiBhbnkge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aChcbiAgICAgIG9iaixcbiAgICAgIC8vIFBhdGhcbiAgICAgIGFyZ3MgJiYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IGFyZ3Mua2V5KSxcbiAgICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICAgIGFyZ3MgJiYgKGFyZ3MgYXMgYW55KT8uZGVmYXVsdFZhbHVlXG4gICAgKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbHVlUGlwZSB7XG4gIHByaXZhdGUgX2kxOG5ZZXM6IHN0cmluZztcbiAgcHJpdmF0ZSBfaTE4bk5vOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRlRm9ybWF0OiBEYXRlRm9ybWF0U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgZ2V0IGkxOG5ZZXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2kxOG5ZZXMpIHtcbiAgICAgIHRoaXMuX2kxOG5ZZXMgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uWUVTJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pMThuWWVzO1xuICB9XG5cbiAgZ2V0IGkxOG5ObygpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5faTE4bk5vKSB7XG4gICAgICB0aGlzLl9pMThuTm8gPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uTk8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2kxOG5ObztcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWx1ZVRvU3RyaW5nKHZhbHVlOiBhbnksIGRlZmluaXRpb24/OiBGb3JtRmllbGREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgY29uc3QgdHlwZSA9IGRlZmluaXRpb24/LnR5cGUgfHwgdHlwZW9mIHZhbHVlO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXQudHJhbnNmb3JtKHZhbHVlKSBhcyBzdHJpbmc7XG4gICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXQudHJhbnNmb3JtKHZhbHVlLCB7IHRpbWU6IHRydWUgfSkgYXMgc3RyaW5nO1xuICAgICAgY2FzZSAnZW51bSc6IHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZygnZm9ybWF0UHJvcGVydHkgYnkgZGVmaW5pdGlvbiAodHlwZT0nZW51bScsIGtleT0nICtkZWZpbml0aW9uLmtleSsgJyk6JywgdmFsdWUgKTtcbiAgICAgICAgY29uc3QgaXRlbSA9ICgoZGVmaW5pdGlvbj8udmFsdWVzIGFzIGFueVtdKSB8fCBbdmFsdWVdKS5maW5kKChpdGVtKSA9PiAoaXNOb3ROaWwoaXRlbS5rZXkpID8gaXRlbS5rZXkgOiBpdGVtKSA9PT0gdmFsdWUpO1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSB8fCBpdGVtO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW50aXR5Jzoge1xuICAgICAgICBpZiAoZGVmaW5pdGlvbj8uYXV0b2NvbXBsZXRlPy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uPy5hdXRvY29tcGxldGUuZGlzcGxheVdpdGgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqb2luUHJvcGVydGllc1BhdGgodmFsdWUsIGRlZmluaXRpb24/LmF1dG9jb21wbGV0ZT8uYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXSkgfHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnID8gdGhpcy5pMThuWWVzIDogdGhpcy5pMThuTm87XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdwcm9wZXJ0eUZvcm1hdCcsXG59KVxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUZvcm1hdFBpcGUgZXh0ZW5kcyBBYnN0cmFjdFZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihkYXRlRm9ybWF0OiBEYXRlRm9ybWF0U2VydmljZSwgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZGF0ZUZvcm1hdCwgdHJhbnNsYXRlKTtcbiAgfVxuXG4gIHRyYW5zZm9ybShvYmo6IGFueSwga2V5T3JEZWZpbml0aW9uOiBzdHJpbmcgfCBGb3JtRmllbGREZWZpbml0aW9uKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIW9iaikgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBrZXlPckRlZmluaXRpb24gJiYgdHlwZW9mIGtleU9yRGVmaW5pdGlvbiA9PT0gJ29iamVjdCcgJiYga2V5T3JEZWZpbml0aW9uO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb24/LmtleSB8fCAoa2V5T3JEZWZpbml0aW9uIGFzIHN0cmluZyk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIC8vIFNob3VsZCBuZXZlciBvY2N1clxuICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCB1c2Ugb2YgcGlwZSAnZm9ybWF0UHJvcGVydHknOiBtaXNzaW5nIGtleSBvciBkZWZpbml0aW9uXCIpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIHJldHVybiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUsIGRlZmluaXRpb24pO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3ZhbHVlRm9ybWF0Jyxcbn0pXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFZhbHVlRm9ybWF0UGlwZSBleHRlbmRzIEFic3RyYWN0VmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGRhdGVGb3JtYXQ6IERhdGVGb3JtYXRTZXJ2aWNlLCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICBzdXBlcihkYXRlRm9ybWF0LCB0cmFuc2xhdGUpO1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUsIGRlZmluaXRpb24pO1xuICB9XG59XG4iXX0=
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9wcm9wZXJ0eS5waXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFNdEYsTUFBTSxPQUFPLGVBQWU7SUFDMUIsU0FBUyxDQUFDLEdBQVEsRUFBRSxJQUEyRTtRQUM3RixPQUFPLGlCQUFpQixDQUN0QixHQUFHO1FBQ0gsT0FBTztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0UsZ0JBQWdCO1FBQ2hCLElBQUksSUFBSyxJQUFZLEVBQUUsWUFBWSxDQUNwQyxDQUFDO0lBQ0osQ0FBQzt1R0FUVSxlQUFlO3FHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFOztBQWE3QixNQUFlLHVCQUF1QjtJQUsxQjtJQUNBO0lBTEYsUUFBUSxDQUFTO0lBQ2pCLE9BQU8sQ0FBUztJQUV4QixZQUNVLFVBQTZCLEVBQzdCLFNBQTJCO1FBRDNCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQ2xDLENBQUM7SUFFSixJQUFJLE9BQU87UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxP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QUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7WUFDaEYsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt1R0FoQlUsa0JBQWtCO3FHQUFsQixrQkFBa0I7MkdBQWxCLGtCQUFrQixjQURMLE1BQU07OzJGQUNuQixrQkFBa0I7a0JBSjlCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGdCQUFnQjtpQkFDdkI7O2tCQUNBLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXdCbEMsTUFBTSxPQUFPLGVBQWdCLFNBQVEsdUJBQXVCO0lBQzFELFlBQVksVUFBNkIsRUFBRSxTQUEyQjtRQUNwRSxLQUFLLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLFVBQStCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt1R0FQVSxlQUFlO3FHQUFmLGVBQWU7MkdBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUozQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxhQUFhO2lCQUNwQjs7a0JBQ0EsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNOaWwsIGlzTm90TmlsLCBqb2luUHJvcGVydGllc1BhdGggfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AUGlwZSh7IG5hbWU6ICdwcm9wZXJ0eUdldCcgfSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUdldFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKG9iajogYW55LCBhcmdzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgeyBrZXk6IHN0cmluZzsgZGVmYXVsdFZhbHVlPzogYW55IH0pOiBhbnkge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aChcbiAgICAgIG9iaixcbiAgICAgIC8vIFBhdGhcbiAgICAgIGFyZ3MgJiYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IGFyZ3Mua2V5KSxcbiAgICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICAgIGFyZ3MgJiYgKGFyZ3MgYXMgYW55KT8uZGVmYXVsdFZhbHVlXG4gICAgKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbHVlRm9ybWF0UGlwZSB7XG4gIHByaXZhdGUgX2kxOG5ZZXM6IHN0cmluZztcbiAgcHJpdmF0ZSBfaTE4bk5vOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRlRm9ybWF0OiBEYXRlRm9ybWF0U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgZ2V0IGkxOG5ZZXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2kxOG5ZZXMpIHtcbiAgICAgIHRoaXMuX2kxOG5ZZXMgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uWUVTJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pMThuWWVzO1xuICB9XG5cbiAgZ2V0IGkxOG5ObygpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5faTE4bk5vKSB7XG4gICAgICB0aGlzLl9pMThuTm8gPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uTk8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2kxOG5ObztcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWx1ZVRvU3RyaW5nKHZhbHVlOiBhbnksIGRlZmluaXRpb24/OiBGb3JtRmllbGREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgY29uc3QgdHlwZSA9IGRlZmluaXRpb24/LnR5cGUgfHwgdHlwZW9mIHZhbHVlO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXQudHJhbnNmb3JtKHZhbHVlKSBhcyBzdHJpbmc7XG4gICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXQudHJhbnNmb3JtKHZhbHVlLCB7IHRpbWU6IHRydWUgfSkgYXMgc3RyaW5nO1xuICAgICAgY2FzZSAnZW51bSc6IHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZygnZm9ybWF0UHJvcGVydHkgYnkgZGVmaW5pdGlvbiAodHlwZT0nZW51bScsIGtleT0nICtkZWZpbml0aW9uLmtleSsgJyk6JywgdmFsdWUgKTtcbiAgICAgICAgY29uc3QgaXRlbSA9ICgoZGVmaW5pdGlvbj8udmFsdWVzIGFzIGFueVtdKSB8fCBbdmFsdWVdKS5maW5kKChpdGVtKSA9PiAoaXNOb3ROaWwoaXRlbS5rZXkpID8gaXRlbS5rZXkgOiBpdGVtKSA9PT0gdmFsdWUpO1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSB8fCBpdGVtO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW50aXR5Jzoge1xuICAgICAgICBpZiAoZGVmaW5pdGlvbj8uYXV0b2NvbXBsZXRlPy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uPy5hdXRvY29tcGxldGUuZGlzcGxheVdpdGgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqb2luUHJvcGVydGllc1BhdGgodmFsdWUsIGRlZmluaXRpb24/LmF1dG9jb21wbGV0ZT8uYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXSkgfHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnID8gdGhpcy5pMThuWWVzIDogdGhpcy5pMThuTm87XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdwcm9wZXJ0eUZvcm1hdCcsXG59KVxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUZvcm1hdFBpcGUgZXh0ZW5kcyBBYnN0cmFjdFZhbHVlRm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihkYXRlRm9ybWF0OiBEYXRlRm9ybWF0U2VydmljZSwgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZGF0ZUZvcm1hdCwgdHJhbnNsYXRlKTtcbiAgfVxuXG4gIHRyYW5zZm9ybShvYmo6IGFueSwga2V5T3JEZWZpbml0aW9uOiBzdHJpbmcgfCBGb3JtRmllbGREZWZpbml0aW9uKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIW9iaikgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBrZXlPckRlZmluaXRpb24gJiYgdHlwZW9mIGtleU9yRGVmaW5pdGlvbiA9PT0gJ29iamVjdCcgJiYga2V5T3JEZWZpbml0aW9uO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb24/LmtleSB8fCAoa2V5T3JEZWZpbml0aW9uIGFzIHN0cmluZyk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIC8vIFNob3VsZCBuZXZlciBvY2N1clxuICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCB1c2Ugb2YgcGlwZSAnZm9ybWF0UHJvcGVydHknOiBtaXNzaW5nIGtleSBvciBkZWZpbml0aW9uXCIpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIHJldHVybiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUsIGRlZmluaXRpb24pO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3ZhbHVlRm9ybWF0Jyxcbn0pXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFZhbHVlRm9ybWF0UGlwZSBleHRlbmRzIEFic3RyYWN0VmFsdWVGb3JtYXRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKGRhdGVGb3JtYXQ6IERhdGVGb3JtYXRTZXJ2aWNlLCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICBzdXBlcihkYXRlRm9ybWF0LCB0cmFuc2xhdGUpO1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUsIGRlZmluaXRpb24pO1xuICB9XG59XG4iXX0=
@@ -31,14 +31,15 @@ export class UploadFileTestingPage {
31
31
  const loadStep = file.size / 10;
32
32
  let loaded = 0;
33
33
  return timer(0, 250).pipe(takeUntil($stop), map(() => {
34
+ // pause in middle
35
+ // if (loaded > 0) return { type: HttpEventType.UploadProgress, total: file.size, loaded };
34
36
  loaded += loadStep;
35
37
  // Return progression
36
38
  if (loaded < file.size) {
37
- //return {type: HttpEventType.UploadProgress, total: file.size, loaded };
38
- return { type: HttpEventType.UploadProgress, loaded: -1 };
39
+ return { type: HttpEventType.UploadProgress, total: file.size, loaded };
39
40
  }
40
41
  // Stop the timer
41
- setTimeout(() => $stop.next(), 100);
42
+ setTimeout(() => $stop.next(), 1000);
42
43
  // Return final response
43
44
  return new HttpResponse({ body: { finalName: file.name } });
44
45
  }));
@@ -55,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
55
56
  type: Component,
56
57
  args: [{ selector: 'upload-file-testing', template: "<ion-toolbar color=\"primary\">\n <ion-title>File upload</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n <p>Popover examples:</p>\n\n <ion-button (click)=\"showPopover($event, { uniqueFile: true })\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(unique file)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, { uniqueFile: false })\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(many files)\n </ion-button>\n\n <ion-button (click)=\"showPopover($event, { uniqueFile: false, instantUpload: true })\" color=\"tertiary\">\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(instant upload)\n </ion-button>\n\n <ion-button\n (click)=\"showPopover($event, { uniqueFile: false, instantUpload: true, maxParallelUpload: 3 })\"\n color=\"tertiary\"\n >\n <span translate>COMMON.BTN_IMPORT</span>\n &nbsp;(max parallel upload)\n </ion-button>\n</ion-content>\n" }]
57
58
  }], ctorParameters: () => [{ type: i1.PopoverController }] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUudGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUMsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFNbkQsTUFBTSxPQUFPLHFCQUFxQjtJQUNaO0lBQXBCLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUU1RCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQVksRUFBRSxJQUE2QztRQUMzRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRTtZQUNqRixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3pDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDekMsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLElBQVU7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUN2QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLElBQUksUUFBUSxDQUFDO1lBRW5CLHFCQUFxQjtZQUNyQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLHlFQUF5RTtnQkFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVELENBQUM7WUFFRCxpQkFBaUI7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVwQyx3QkFBd0I7WUFDeEIsT0FBTyxJQUFJLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFVO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7dUdBL0NVLHFCQUFxQjsyRkFBckIscUJBQXFCLDJEQ2RsQyxtOUJBOEJBOzsyRkRoQmEscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBVcGxvYWRGaWxlUG9wb3Zlck9wdGlvbnMgfSBmcm9tICcuLi91cGxvYWQtZmlsZS1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cEV2ZW50VHlwZSwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBGaWxlRXZlbnQgfSBmcm9tICcuLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBGaWxlc1V0aWxzIH0gZnJvbSAnLi4vLi4vZmlsZS9maWxlLnV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndXBsb2FkLWZpbGUtdGVzdGluZycsXG4gIHRlbXBsYXRlVXJsOiAndXBsb2FkLWZpbGUudGVzdGluZy5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZVRlc3RpbmdQYWdlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXIpIHt9XG5cbiAgYXN5bmMgc2hvd1BvcG92ZXIoZXZlbnQ6IEV2ZW50LCBvcHRzPzogUGFydGlhbDxVcGxvYWRGaWxlUG9wb3Zlck9wdGlvbnM8YW55Pj4pIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IEZpbGVzVXRpbHMuc2hvd1VwbG9hZFBvcG92ZXIodGhpcy5wb3BvdmVyQ29udHJvbGxlciwgZXZlbnQsIHtcbiAgICAgIHVwbG9hZEZuOiAoZmlsZSkgPT4gdGhpcy51cGxvYWRGaWxlKGZpbGUpLFxuICAgICAgZGVsZXRlRm46IChmaWxlKSA9PiB0aGlzLmRlbGV0ZUZpbGUoZmlsZSksXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlsZW5hbWVzID0gKGRhdGEgfHwgW10pLm1hcCgoZmlsZSkgPT4gZmlsZS5yZXNwb25zZT8uYm9keT8uZmluYWxOYW1lKTtcbiAgICBjb25zb2xlLmluZm8oJ1BvcG92ZXIgcmVzdWx0OiAnLCBmaWxlbmFtZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXVsYXRlIGEgdXBsb2FkIGZ1bmN0aW9uLCB3aXRoIHByb2dyZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlXG4gICAqL1xuICB1cGxvYWRGaWxlKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPEZpbGVFdmVudDx7IGZpbmFsTmFtZTogc3RyaW5nIH0+PiB7XG4gICAgY29uc3QgJHN0b3AgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IGxvYWRTdGVwID0gZmlsZS5zaXplIC8gMTA7XG4gICAgbGV0IGxvYWRlZCA9IDA7XG4gICAgcmV0dXJuIHRpbWVyKDAsIDI1MCkucGlwZShcbiAgICAgIHRha2VVbnRpbCgkc3RvcCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBsb2FkZWQgKz0gbG9hZFN0ZXA7XG5cbiAgICAgICAgLy8gUmV0dXJuIHByb2dyZXNzaW9uXG4gICAgICAgIGlmIChsb2FkZWQgPCBmaWxlLnNpemUpIHtcbiAgICAgICAgICAvL3JldHVybiB7dHlwZTogSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcywgdG90YWw6IGZpbGUuc2l6ZSwgbG9hZGVkIH07XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcywgbG9hZGVkOiAtMSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcCB0aGUgdGltZXJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAkc3RvcC5uZXh0KCksIDEwMCk7XG5cbiAgICAgICAgLy8gUmV0dXJuIGZpbmFsIHJlc3BvbnNlXG4gICAgICAgIHJldHVybiBuZXcgSHR0cFJlc3BvbnNlKHsgYm9keTogeyBmaW5hbE5hbWU6IGZpbGUubmFtZSB9IH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShmaWxlOiBGaWxlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5pbmZvKCdbdGVzdGluZ10gU2ltdWxhdGUgcmVtb3RlIGRlbGV0aW9uLi4uICh3YWl0aW5nIDJzKScpO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCI8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gIDxpb24tdGl0bGU+RmlsZSB1cGxvYWQ8L2lvbi10aXRsZT5cbjwvaW9uLXRvb2xiYXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDxwPlBvcG92ZXIgZXhhbXBsZXM6PC9wPlxuXG4gIDxpb24tYnV0dG9uIChjbGljayk9XCJzaG93UG9wb3ZlcigkZXZlbnQsIHsgdW5pcXVlRmlsZTogdHJ1ZSB9KVwiIGNvbG9yPVwidGVydGlhcnlcIj5cbiAgICA8c3BhbiB0cmFuc2xhdGU+Q09NTU9OLkJUTl9JTVBPUlQ8L3NwYW4+XG4gICAgJm5ic3A7KHVuaXF1ZSBmaWxlKVxuICA8L2lvbi1idXR0b24+XG5cbiAgPGlvbi1idXR0b24gKGNsaWNrKT1cInNob3dQb3BvdmVyKCRldmVudCwgeyB1bmlxdWVGaWxlOiBmYWxzZSB9KVwiIGNvbG9yPVwidGVydGlhcnlcIj5cbiAgICA8c3BhbiB0cmFuc2xhdGU+Q09NTU9OLkJUTl9JTVBPUlQ8L3NwYW4+XG4gICAgJm5ic3A7KG1hbnkgZmlsZXMpXG4gIDwvaW9uLWJ1dHRvbj5cblxuICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwic2hvd1BvcG92ZXIoJGV2ZW50LCB7IHVuaXF1ZUZpbGU6IGZhbHNlLCBpbnN0YW50VXBsb2FkOiB0cnVlIH0pXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxuICAgIDxzcGFuIHRyYW5zbGF0ZT5DT01NT04uQlROX0lNUE9SVDwvc3Bhbj5cbiAgICAmbmJzcDsoaW5zdGFudCB1cGxvYWQpXG4gIDwvaW9uLWJ1dHRvbj5cblxuICA8aW9uLWJ1dHRvblxuICAgIChjbGljayk9XCJzaG93UG9wb3ZlcigkZXZlbnQsIHsgdW5pcXVlRmlsZTogZmFsc2UsIGluc3RhbnRVcGxvYWQ6IHRydWUsIG1heFBhcmFsbGVsVXBsb2FkOiAzIH0pXCJcbiAgICBjb2xvcj1cInRlcnRpYXJ5XCJcbiAgPlxuICAgIDxzcGFuIHRyYW5zbGF0ZT5DT01NT04uQlROX0lNUE9SVDwvc3Bhbj5cbiAgICAmbmJzcDsobWF4IHBhcmFsbGVsIHVwbG9hZClcbiAgPC9pb24tYnV0dG9uPlxuPC9pb24tY29udGVudD5cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUudGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUMsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFNbkQsTUFBTSxPQUFPLHFCQUFxQjtJQUNaO0lBQXBCLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUU1RCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQVksRUFBRSxJQUE2QztRQUMzRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRTtZQUNqRixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3pDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDekMsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLElBQVU7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUN2QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxrQkFBa0I7WUFDbEIsMkZBQTJGO1lBRTNGLE1BQU0sSUFBSSxRQUFRLENBQUM7WUFFbkIscUJBQXFCO1lBQ3JCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFFLENBQUM7WUFFRCxpQkFBaUI7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVyQyx3QkFBd0I7WUFDeEIsT0FBTyxJQUFJLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFVO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7dUdBakRVLHFCQUFxQjsyRkFBckIscUJBQXFCLDJEQ2RsQyxtOUJBOEJBOzsyRkRoQmEscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBVcGxvYWRGaWxlUG9wb3Zlck9wdGlvbnMgfSBmcm9tICcuLi91cGxvYWQtZmlsZS1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cEV2ZW50VHlwZSwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBGaWxlRXZlbnQgfSBmcm9tICcuLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBGaWxlc1V0aWxzIH0gZnJvbSAnLi4vLi4vZmlsZS9maWxlLnV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndXBsb2FkLWZpbGUtdGVzdGluZycsXG4gIHRlbXBsYXRlVXJsOiAndXBsb2FkLWZpbGUudGVzdGluZy5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZVRlc3RpbmdQYWdlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXIpIHt9XG5cbiAgYXN5bmMgc2hvd1BvcG92ZXIoZXZlbnQ6IEV2ZW50LCBvcHRzPzogUGFydGlhbDxVcGxvYWRGaWxlUG9wb3Zlck9wdGlvbnM8YW55Pj4pIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IEZpbGVzVXRpbHMuc2hvd1VwbG9hZFBvcG92ZXIodGhpcy5wb3BvdmVyQ29udHJvbGxlciwgZXZlbnQsIHtcbiAgICAgIHVwbG9hZEZuOiAoZmlsZSkgPT4gdGhpcy51cGxvYWRGaWxlKGZpbGUpLFxuICAgICAgZGVsZXRlRm46IChmaWxlKSA9PiB0aGlzLmRlbGV0ZUZpbGUoZmlsZSksXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlsZW5hbWVzID0gKGRhdGEgfHwgW10pLm1hcCgoZmlsZSkgPT4gZmlsZS5yZXNwb25zZT8uYm9keT8uZmluYWxOYW1lKTtcbiAgICBjb25zb2xlLmluZm8oJ1BvcG92ZXIgcmVzdWx0OiAnLCBmaWxlbmFtZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXVsYXRlIGEgdXBsb2FkIGZ1bmN0aW9uLCB3aXRoIHByb2dyZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlXG4gICAqL1xuICB1cGxvYWRGaWxlKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPEZpbGVFdmVudDx7IGZpbmFsTmFtZTogc3RyaW5nIH0+PiB7XG4gICAgY29uc3QgJHN0b3AgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IGxvYWRTdGVwID0gZmlsZS5zaXplIC8gMTA7XG4gICAgbGV0IGxvYWRlZCA9IDA7XG4gICAgcmV0dXJuIHRpbWVyKDAsIDI1MCkucGlwZShcbiAgICAgIHRha2VVbnRpbCgkc3RvcCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAvLyBwYXVzZSBpbiBtaWRkbGVcbiAgICAgICAgLy8gaWYgKGxvYWRlZCA+IDApIHJldHVybiB7IHR5cGU6IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MsIHRvdGFsOiBmaWxlLnNpemUsIGxvYWRlZCB9O1xuXG4gICAgICAgIGxvYWRlZCArPSBsb2FkU3RlcDtcblxuICAgICAgICAvLyBSZXR1cm4gcHJvZ3Jlc3Npb25cbiAgICAgICAgaWYgKGxvYWRlZCA8IGZpbGUuc2l6ZSkge1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MsIHRvdGFsOiBmaWxlLnNpemUsIGxvYWRlZCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcCB0aGUgdGltZXJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAkc3RvcC5uZXh0KCksIDEwMDApO1xuXG4gICAgICAgIC8vIFJldHVybiBmaW5hbCByZXNwb25zZVxuICAgICAgICByZXR1cm4gbmV3IEh0dHBSZXNwb25zZSh7IGJvZHk6IHsgZmluYWxOYW1lOiBmaWxlLm5hbWUgfSB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUuaW5mbygnW3Rlc3RpbmddIFNpbXVsYXRlIHJlbW90ZSBkZWxldGlvbi4uLiAod2FpdGluZyAycyknKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiPGlvbi10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICA8aW9uLXRpdGxlPkZpbGUgdXBsb2FkPC9pb24tdGl0bGU+XG48L2lvbi10b29sYmFyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICA8cD5Qb3BvdmVyIGV4YW1wbGVzOjwvcD5cblxuICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwic2hvd1BvcG92ZXIoJGV2ZW50LCB7IHVuaXF1ZUZpbGU6IHRydWUgfSlcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgPHNwYW4gdHJhbnNsYXRlPkNPTU1PTi5CVE5fSU1QT1JUPC9zcGFuPlxuICAgICZuYnNwOyh1bmlxdWUgZmlsZSlcbiAgPC9pb24tYnV0dG9uPlxuXG4gIDxpb24tYnV0dG9uIChjbGljayk9XCJzaG93UG9wb3ZlcigkZXZlbnQsIHsgdW5pcXVlRmlsZTogZmFsc2UgfSlcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgPHNwYW4gdHJhbnNsYXRlPkNPTU1PTi5CVE5fSU1QT1JUPC9zcGFuPlxuICAgICZuYnNwOyhtYW55IGZpbGVzKVxuICA8L2lvbi1idXR0b24+XG5cbiAgPGlvbi1idXR0b24gKGNsaWNrKT1cInNob3dQb3BvdmVyKCRldmVudCwgeyB1bmlxdWVGaWxlOiBmYWxzZSwgaW5zdGFudFVwbG9hZDogdHJ1ZSB9KVwiIGNvbG9yPVwidGVydGlhcnlcIj5cbiAgICA8c3BhbiB0cmFuc2xhdGU+Q09NTU9OLkJUTl9JTVBPUlQ8L3NwYW4+XG4gICAgJm5ic3A7KGluc3RhbnQgdXBsb2FkKVxuICA8L2lvbi1idXR0b24+XG5cbiAgPGlvbi1idXR0b25cbiAgICAoY2xpY2spPVwic2hvd1BvcG92ZXIoJGV2ZW50LCB7IHVuaXF1ZUZpbGU6IGZhbHNlLCBpbnN0YW50VXBsb2FkOiB0cnVlLCBtYXhQYXJhbGxlbFVwbG9hZDogMyB9KVwiXG4gICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gID5cbiAgICA8c3BhbiB0cmFuc2xhdGU+Q09NTU9OLkJUTl9JTVBPUlQ8L3NwYW4+XG4gICAgJm5ic3A7KG1heCBwYXJhbGxlbCB1cGxvYWQpXG4gIDwvaW9uLWJ1dHRvbj5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { Component, Input, ViewChild } from '@angular/core';
2
- import { catchError, debounceTime, filter, first, map, switchMap, tap } from 'rxjs/operators';
2
+ import { catchError, debounceTime, filter, finalize, first, map, switchMap, tap } from 'rxjs/operators';
3
3
  import { BehaviorSubject, forkJoin, of, Subject } from 'rxjs';
4
4
  import { isProgressEvent, isResponseEvent } from './upload-file.model';
5
5
  import { isNil, isNotNil } from '../functions';
@@ -23,6 +23,7 @@ export class UploadFileComponent {
23
23
  deleteFn;
24
24
  maxParallelUpload;
25
25
  files = [];
26
+ uploading = false;
26
27
  get processingFiles() {
27
28
  return this.files.filter((f) => !f.deleting && isNotNil(f.progress) && f.progress < 1);
28
29
  }
@@ -114,6 +115,7 @@ export class UploadFileComponent {
114
115
  * Execute upload
115
116
  */
116
117
  async uploadFiles(files) {
118
+ this.uploading = true;
117
119
  if (!files) {
118
120
  console.info('[upload-file] Uploading all files...');
119
121
  files = this.files;
@@ -180,18 +182,18 @@ export class UploadFileComponent {
180
182
  })))));
181
183
  // Wait jobs to finish
182
184
  return forkJoin(jobs)
183
- .pipe(tap((_) => $changes.complete()))
185
+ .pipe(tap((_) => $changes.complete()), finalize(() => (this.uploading = false)))
184
186
  .toPromise();
185
187
  }
186
188
  waitIdle(opts) {
187
189
  return waitFor(() => this.processingFilesCount === 0, opts);
188
190
  }
189
191
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UploadFileComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
190
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: UploadFileComponent, selector: "app-upload-file", inputs: { fileExtension: "fileExtension", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload" }, viewQueries: [{ propertyName: "fileDropEl", first: true, predicate: ["fileDropRef"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\" class=\"single-file\" [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar\n *ngIf=\"!file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:gray!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.DragAndDropDirective, selector: "[appDragAndDrop]", outputs: ["fileDropped"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.FileSizePipe, name: "fileSize" }] });
192
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: UploadFileComponent, selector: "app-upload-file", inputs: { fileExtension: "fileExtension", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload" }, viewQueries: [{ propertyName: "fileDropEl", first: true, predicate: ["fileDropRef"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <ion-list>\n @for (file of files; track file; let i = $index) {\n <ion-item>\n <mat-icon slot=\"start\">description</mat-icon>\n <div class=\"single-file\">\n <ion-label>\n <h4 class=\"name\" [class.deleting]=\"file.deleting\">\n {{ file.name }}\n </h4>\n <p>\n {{ file.size | fileSize }}\n </p>\n </ion-label>\n <ion-progress-bar\n *ngIf=\"uploading && !file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button slot=\"end\" (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button\n *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\"\n mat-icon-button\n slot=\"end\"\n (click)=\"deleteFile(i)\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n </ion-item>\n }\n </ion-list>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-direction:column}.files-list .single-file .name{word-break:break-all}.files-list .single-file .name.deleting{color:gray!important;font-style:italic!important}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.DragAndDropDirective, selector: "[appDragAndDrop]", outputs: ["fileDropped"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.FileSizePipe, name: "fileSize" }] });
191
193
  }
192
194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UploadFileComponent, decorators: [{
193
195
  type: Component,
194
- args: [{ selector: 'app-upload-file', template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\" class=\"single-file\" [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar\n *ngIf=\"!file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:gray!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}\n"] }]
196
+ args: [{ selector: 'app-upload-file', template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <ion-list>\n @for (file of files; track file; let i = $index) {\n <ion-item>\n <mat-icon slot=\"start\">description</mat-icon>\n <div class=\"single-file\">\n <ion-label>\n <h4 class=\"name\" [class.deleting]=\"file.deleting\">\n {{ file.name }}\n </h4>\n <p>\n {{ file.size | fileSize }}\n </p>\n </ion-label>\n <ion-progress-bar\n *ngIf=\"uploading && !file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button slot=\"end\" (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button\n *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\"\n mat-icon-button\n slot=\"end\"\n (click)=\"deleteFile(i)\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n </ion-item>\n }\n </ion-list>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-direction:column}.files-list .single-file .name{word-break:break-all}.files-list .single-file .name.deleting{color:gray!important;font-style:italic!important}\n"] }]
195
197
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateService }], propDecorators: { fileDropEl: [{
196
198
  type: ViewChild,
197
199
  args: ['fileDropRef', { static: false }]
@@ -208,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
208
210
  }], maxParallelUpload: [{
209
211
  type: Input
210
212
  }] } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRSxPQUFPLEVBQThCLGVBQWUsRUFBRSxlQUFlLEVBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLG1CQUFtQjtJQXlCbEI7SUFDQTtJQXpCaUMsVUFBVSxDQUFhO0lBRTNELGFBQWEsQ0FBUztJQUN0QixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsUUFBUSxDQUFvQjtJQUM1QixRQUFRLENBQW9CO0lBQzVCLGlCQUFpQixDQUFTO0lBRW5DLEtBQUssR0FBc0IsRUFBRSxDQUFDO0lBRTlCLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FB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Q0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZpbGVEZWxldGVGbiwgRmlsZVVwbG9hZEZuLCBpc1Byb2dyZXNzRXZlbnQsIGlzUmVzcG9uc2VFdmVudCwgVXBsb2FkRmlsZSB9IGZyb20gJy4vdXBsb2FkLWZpbGUubW9kZWwnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXBsb2FkLWZpbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZmlsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRGaWxlQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnZmlsZURyb3BSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgZmlsZURyb3BFbDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBmaWxlRXh0ZW5zaW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVuaXF1ZUZpbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgaW5zdGFudFVwbG9hZCA9IGZhbHNlO1xuICBASW5wdXQoKSB1cGxvYWRGbjogRmlsZVVwbG9hZEZuPGFueT47XG4gIEBJbnB1dCgpIGRlbGV0ZUZuOiBGaWxlRGVsZXRlRm48YW55PjtcbiAgQElucHV0KCkgbWF4UGFyYWxsZWxVcGxvYWQ6IG51bWJlcjtcblxuICBmaWxlczogVXBsb2FkRmlsZTxhbnk+W10gPSBbXTtcblxuICBnZXQgcHJvY2Vzc2luZ0ZpbGVzKCk6IFVwbG9hZEZpbGU8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoKGYpID0+ICFmLmRlbGV0aW5nICYmIGlzTm90TmlsKGYucHJvZ3Jlc3MpICYmIGYucHJvZ3Jlc3MgPCAxKTtcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRGaWxlcygpOiBVcGxvYWRGaWxlPGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKChmKSA9PiAhZi5kZWxldGluZyAmJiBmLnByb2dyZXNzID09PSAxKTtcbiAgfVxuXG4gIGdldCBwcm9jZXNzaW5nRmlsZXNDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NpbmdGaWxlcy5sZW5ndGg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBvbiBmaWxlIGRyb3AgaGFuZGxlclxuICAgKi9cbiAgb25GaWxlRHJvcHBlZChldmVudCkge1xuICAgIHRoaXMucHJlcGFyZUZpbGVzTGlzdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGZpbGUgZnJvbSBicm93c2luZ1xuICAgKi9cbiAgZmlsZUJyb3dzZUhhbmRsZXIoZmlsZXMpIHtcbiAgICB0aGlzLnByZXBhcmVGaWxlc0xpc3QoZmlsZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBmaWxlIGZyb20gZmlsZXMgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXggKEZpbGUgaW5kZXgpXG4gICAqL1xuICBhc3luYyBkZWxldGVGaWxlKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWxlID0gdGhpcy5maWxlc1tpbmRleF07XG5cbiAgICBpZiAoZmlsZS5wcm9ncmVzcyA9PT0gMSAmJiB0aGlzLmRlbGV0ZUZuKSB7XG4gICAgICBpZiAoZmlsZS5kZWxldGluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oYFt1cGxvYWQtZmlsZV0gVGhpcyBmaWxlIGFscmVhZHkgZGVsZXRpbmdgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsZS5kZWxldGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCB0aGlzLmRlbGV0ZUZuKGZpbGUpO1xuICAgICAgICBpZiAoIWRlbGV0ZWQpIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZpbGUuZGVsZXRpbmcgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFrZSBzdXJlIGluZGV4IG5vdCBjaGFuZ2VkXG4gICAgICBpbmRleCA9IHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKTtcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjsgLy8gTm90IGZvdW5kIChhbHJlYWR5IHJlbW92ZWQgPylcbiAgICB9IGVsc2UgaWYgKGZpbGUucHJvZ3Jlc3MgPiAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFt1cGxvYWQtZmlsZV0gQ2Fubm90IHJlbW92ZSB0aGlzIGZpbGUgd2hpbGUgdXBsb2FkaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBGaWxlcyBsaXN0IHRvIG5vcm1hbCBhcnJheSBsaXN0XG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAoRmlsZXMgTGlzdClcbiAgICovXG4gIHByZXBhcmVGaWxlc0xpc3QoZmlsZXM6IEZpbGVMaXN0IHwgRmlsZVtdKSB7XG4gICAgbGV0IGl0ZW1zOiBGaWxlW107XG4gICAgaWYgKGZpbGVzIGluc3RhbmNlb2YgRmlsZUxpc3QpIHtcbiAgICAgIGl0ZW1zID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBmaWxlcy5pdGVtKGkpO1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IGZpbGVzO1xuICAgIH1cbiAgICB0aGlzLmZpbGVzLnB1c2goLi4uaXRlbXMpO1xuXG4gICAgdGhpcy5maWxlRHJvcEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gU3RhcnQgdXBsb2FkXG4gICAgaWYgKHRoaXMuaW5zdGFudFVwbG9hZCkge1xuICAgICAgdGhpcy51cGxvYWRGaWxlcyhpdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdXBsb2FkXG4gICAqL1xuICBhc3luYyB1cGxvYWRGaWxlcyhmaWxlcz86IEZpbGVbXSk6IFByb21pc2U8VXBsb2FkRmlsZTxhbnk+W10+IHtcbiAgICBpZiAoIWZpbGVzKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1t1cGxvYWQtZmlsZV0gVXBsb2FkaW5nIGFsbCBmaWxlcy4uLicpO1xuICAgICAgZmlsZXMgPSB0aGlzLmZpbGVzO1xuICAgIH1cblxuICAgIGNvbnN0ICRwcm9jZXNzaW5nRmlsZUNvdW50Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLnByb2Nlc3NpbmdGaWxlc0NvdW50KTtcbiAgICBjb25zdCAkY2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgJGNoYW5nZXMuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgJHByb2Nlc3NpbmdGaWxlQ291bnRDaGFuZ2UubmV4dCh0aGlzLnByb2Nlc3NpbmdGaWxlc0NvdW50KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGpvYnM6IE9ic2VydmFibGU8VXBsb2FkRmlsZTxhbnk+PltdID0gZmlsZXNcbiAgICAgIC5tYXAoKGYpID0+IGYgYXMgVXBsb2FkRmlsZTxhbnk+KVxuICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZSAmJiBpc05pbChmaWxlLnByb2dyZXNzKSAmJiAhZmlsZS5lcnJvcikgLy8gU2tpcCBpZiBhbHJlYWR5IHN0YXJ0ZWQgb3IgaW4gZXJyb3JcbiAgICAgIC5tYXAoKGZpbGUsIGkpID0+IHtcbiAgICAgICAgLy8gV2FpdCBpZiBuZWVkXG4gICAgICAgIGlmIChpc05vdE5pbCh0aGlzLm1heFBhcmFsbGVsVXBsb2FkKSkge1xuICAgICAgICAgIHJldHVybiAkcHJvY2Vzc2luZ0ZpbGVDb3VudENoYW5nZS5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKGkpLCAvLyBjYWxsIG9mIGZpbHRlcigpIG11c3QgYmUgZGlmZmVyZW50IGZvciB3YWl0aW5nIGpvYlxuICAgICAgICAgICAgZmlsdGVyKChjb3VudCkgPT4gY291bnQgPCB0aGlzLm1heFBhcmFsbGVsVXBsb2FkKSxcbiAgICAgICAgICAgIG1hcCgoXykgPT4ge1xuICAgICAgICAgICAgICAvLyBTdGFydCB1cGxvYWRpbmdcbiAgICAgICAgICAgICAgaWYgKGlzTmlsKGZpbGUucHJvZ3Jlc3MpKSBmaWxlLnByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgJGNoYW5nZXMubmV4dCgpO1xuICAgICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RhcnQgdXBsb2FkaW5nXG4gICAgICAgIGlmIChpc05pbChmaWxlLnByb2dyZXNzKSkgZmlsZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgIHJldHVybiBvZihmaWxlKTtcbiAgICAgIH0pXG5cbiAgICAgIC5tYXAoKGZpbGUkKSA9PlxuICAgICAgICBmaWxlJC5waXBlKFxuICAgICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgICAgLy8gTG9nXG4gICAgICAgICAgdGFwKChmaWxlKSA9PiBjb25zb2xlLmRlYnVnKGBbdXBsb2FkLWZpbGVdICR7ZmlsZS5uYW1lfTogdXBsb2FkaW5nLi4uYCkpLFxuXG4gICAgICAgICAgLy8gU3RhcnQgdXBsb2FkaW5nXG4gICAgICAgICAgc3dpdGNoTWFwKChmaWxlKSA9PlxuICAgICAgICAgICAgdGhpcy51cGxvYWRGbihmaWxlKS5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgICAgICAgICBtYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9ncmVzc0V2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzTm90TmlsKGV2ZW50LmxvYWRlZCkgJiYgZXZlbnQubG9hZGVkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgubWluKDEsIGV2ZW50LmxvYWRlZCAvIChldmVudC50b3RhbCB8fCAxKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gLTE7IC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jlc3Npb25cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBSZXNwb25zZSBldmVudFxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVzcG9uc2VFdmVudChldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSAxO1xuICAgICAgICAgICAgICAgICAgZmlsZS5yZXNwb25zZSA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW3VwbG9hZC1maWxlXSAke2ZpbGUubmFtZX06ICR7ZXZlbnQuc3RhdHVzVGV4dCB8fCAnT0snfWAsIGZpbGUucmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE90aGVyIGV2ZW50czogaWdub3JlXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnW3VwbG9hZC1maWxlXSBJZ25vcmluZyBhIGZpbGUgZXZlbnQ6ICcsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgZmlsZS5lcnJvciA9IChlcnIgJiYgKGVyci5tZXNzYWdlIHx8IGVyci5lcnJvcj8ubWVzc2FnZSkpIHx8ICdGSUxFLlVQTE9BRC5FUlJPUic7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZpbGUpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAkY2hhbmdlcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAvLyBXYWl0IGpvYnMgdG8gZmluaXNoXG4gICAgcmV0dXJuIGZvcmtKb2luKGpvYnMpXG4gICAgICAucGlwZSh0YXAoKF8pID0+ICRjaGFuZ2VzLmNvbXBsZXRlKCkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHdhaXRGb3IoKCkgPT4gdGhpcy5wcm9jZXNzaW5nRmlsZXNDb3VudCA9PT0gMCwgb3B0cyk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCIhdW5pcXVlRmlsZSB8fCBmaWxlcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImNvbnRhaW5lclwiIGFwcERyYWdBbmREcm9wIChmaWxlRHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkKCRldmVudClcIj5cbiAgPGlucHV0XG4gICAgdHlwZT1cImZpbGVcIlxuICAgICNmaWxlRHJvcFJlZlxuICAgIGlkPVwiZmlsZURyb3BSZWZcIlxuICAgIFttdWx0aXBsZV09XCIhdW5pcXVlRmlsZVwiXG4gICAgW2FjY2VwdF09XCJmaWxlRXh0ZW5zaW9uXCJcbiAgICAoY2hhbmdlKT1cImZpbGVCcm93c2VIYW5kbGVyKCRhbnkoJGV2ZW50LnRhcmdldCkuZmlsZXMpXCJcbiAgLz5cbiAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiB4eC1sYXJnZVwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJ0ZXh0LXNpemVcIj51cGxvYWQ8L21hdC1pY29uPlxuICA8aW9uLWxhYmVsXG4gICAgW2lubmVySFRNTF09XCJcbiAgICAgICdGSUxFLlVQTE9BRC5EUkFHX0FORF9EUk9QJyB8IHRyYW5zbGF0ZTogeyBleHRlbnNpb246ICFmaWxlRXh0ZW5zaW9uID8gJycgOiAnICgnICsgZmlsZUV4dGVuc2lvbiArICcpJyB9XG4gICAgXCJcbiAgPjwvaW9uLWxhYmVsPlxuICA8aW9uLWJ1dHRvbj57eyAnRklMRS5VUExPQUQuQlJPV1NFJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWJ1dHRvbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImZpbGVzLWxpc3RcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlczsgaW5kZXggYXMgaVwiIGNsYXNzPVwic2luZ2xlLWZpbGVcIiBbY2xhc3MuZGVsZXRpbmddPVwiZmlsZS5kZWxldGluZ1wiPlxuICAgIDxtYXQtaWNvbj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgPGRpdiBjbGFzcz1cImluZm9cIj5cbiAgICAgIDxoNCBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAge3sgZmlsZS5uYW1lIH19XG4gICAgICA8L2g0PlxuICAgICAgPHAgY2xhc3M9XCJzaXplXCI+XG4gICAgICAgIHt7IGZpbGUuc2l6ZSB8IGZpbGVTaXplIH19XG4gICAgICA8L3A+XG4gICAgICA8aW9uLXByb2dyZXNzLWJhclxuICAgICAgICAqbmdJZj1cIiFmaWxlLmVycm9yXCJcbiAgICAgICAgW3ZhbHVlXT1cImZpbGUucHJvZ3Jlc3MgfHwgMFwiXG4gICAgICAgIFt0eXBlXT1cImZpbGUuZGVsZXRpbmcgfHwgZmlsZS5wcm9ncmVzcyA9PT0gLTEgPyAnaW5kZXRlcm1pbmF0ZScgOiAnZGV0ZXJtaW5hdGUnXCJcbiAgICAgID48L2lvbi1wcm9ncmVzcy1iYXI+XG4gICAgICA8aW9uLWxhYmVsICpuZ0lmPVwiZmlsZS5lcnJvclwiIGNvbG9yPVwiZGFuZ2VyXCIgW2lubmVySFRNTF09XCJmaWxlLmVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPCEtLSByZW1vdGUgZnJvbSBsaXN0IChiZWZvcmUgaW1wb3J0YXRpb24pIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCIhZmlsZS5wcm9ncmVzcyB8fCBmaWxlLmVycm9yXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkZWxldGVGaWxlKGkpXCI+XG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS0gZGVsZXRlIGZpbGUgKHJlbW90ZWx5IC0gYWZ0ZXIgaW1wb3J0YXRpb24pIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCJmaWxlLnByb2dyZXNzID09PSAxICYmICEhZGVsZXRlRm4gJiYgIWZpbGUuZGVsZXRpbmdcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRlbGV0ZUZpbGUoaSlcIj5cbiAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUUsT0FBTyxFQUE4QixlQUFlLEVBQUUsZUFBZSxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDL0csT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxtQkFBbUI7SUEwQmxCO0lBQ0E7SUExQmlDLFVBQVUsQ0FBYTtJQUUzRCxhQUFhLENBQVM7SUFDdEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFFBQVEsQ0FBb0I7SUFDNUIsUUFBUSxDQUFvQjtJQUM1QixpQkFBaUIsQ0FBUztJQUVuQyxLQUFLLEdBQXNCLEVBQUUsQ0FBQztJQUM5QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQ1ksRUFBcUIsRUFDckIsU0FBMkI7UUFEM0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFDcEMsQ0FBQztJQUVKOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQUs7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLEtBQUs7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztnQkFDekQsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTztZQUN2QixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7b0JBQVMsQ0FBQztnQkFDVCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO1lBRUQsOEJBQThCO1lBQzlCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxDQUFDLGdDQUFnQztRQUM1RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQztZQUN0RSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBd0I7UUFDdkMsSUFBSSxLQUFhLENBQUM7UUFDbEIsSUFBSSxLQUFLLFlBQVksUUFBUSxFQUFFLENBQUM7WUFDOUIsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNYLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNoQixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdkIsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDckQsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNyQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QiwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBa0MsS0FBSzthQUM5QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQW9CLENBQUM7YUFDaEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxzQ0FBc0M7YUFDcEcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2YsZUFBZTtZQUNmLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sMEJBQTBCLENBQUMsSUFBSSxDQUNwQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUscURBQXFEO2dCQUN0RSxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDakQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1Isa0JBQWtCO29CQUNsQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUM1QyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNSLENBQUM7WUFDSixDQUFDO1lBQ0Qsa0JBQWtCO1lBQ2xCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDNUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDO2FBRUQsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixLQUFLLENBQUMsSUFBSSxDQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEIsTUFBTTtRQUNOLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQztRQUV4RSxrQkFBa0I7UUFDbEIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ3RCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDaEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixpQkFBaUI7WUFDakIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7Z0JBQ2xELENBQUM7WUFDSCxDQUFDO1lBRUQsaUJBQWlCO2lCQUNaLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRixDQUFDO1lBRUQsdUJBQXVCO2lCQUNsQixDQUFDO2dCQUNKLFFBQVE7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUNqRixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FBQztRQUVKLHNCQUFzQjtRQUN0QixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7YUFDbEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQy9CLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FDekM7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQXFCO1FBQzVCLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQzt1R0E5TVUsbUJBQW1COzJGQUFuQixtQkFBbUIsNFZDYmhDLHNpRUF1REE7OzJGRDFDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCO3FIQUtrQixVQUFVO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRWxDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIGZpcnN0LCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZpbGVEZWxldGVGbiwgRmlsZVVwbG9hZEZuLCBpc1Byb2dyZXNzRXZlbnQsIGlzUmVzcG9uc2VFdmVudCwgVXBsb2FkRmlsZSB9IGZyb20gJy4vdXBsb2FkLWZpbGUubW9kZWwnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXBsb2FkLWZpbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZmlsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRGaWxlQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnZmlsZURyb3BSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgZmlsZURyb3BFbDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBmaWxlRXh0ZW5zaW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVuaXF1ZUZpbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgaW5zdGFudFVwbG9hZCA9IGZhbHNlO1xuICBASW5wdXQoKSB1cGxvYWRGbjogRmlsZVVwbG9hZEZuPGFueT47XG4gIEBJbnB1dCgpIGRlbGV0ZUZuOiBGaWxlRGVsZXRlRm48YW55PjtcbiAgQElucHV0KCkgbWF4UGFyYWxsZWxVcGxvYWQ6IG51bWJlcjtcblxuICBmaWxlczogVXBsb2FkRmlsZTxhbnk+W10gPSBbXTtcbiAgdXBsb2FkaW5nID0gZmFsc2U7XG5cbiAgZ2V0IHByb2Nlc3NpbmdGaWxlcygpOiBVcGxvYWRGaWxlPGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKChmKSA9PiAhZi5kZWxldGluZyAmJiBpc05vdE5pbChmLnByb2dyZXNzKSAmJiBmLnByb2dyZXNzIDwgMSk7XG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkRmlsZXMoKTogVXBsb2FkRmlsZTxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLmZpbGVzLmZpbHRlcigoZikgPT4gIWYuZGVsZXRpbmcgJiYgZi5wcm9ncmVzcyA9PT0gMSk7XG4gIH1cblxuICBnZXQgcHJvY2Vzc2luZ0ZpbGVzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzaW5nRmlsZXMubGVuZ3RoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogb24gZmlsZSBkcm9wIGhhbmRsZXJcbiAgICovXG4gIG9uRmlsZURyb3BwZWQoZXZlbnQpIHtcbiAgICB0aGlzLnByZXBhcmVGaWxlc0xpc3QoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBmaWxlIGZyb20gYnJvd3NpbmdcbiAgICovXG4gIGZpbGVCcm93c2VIYW5kbGVyKGZpbGVzKSB7XG4gICAgdGhpcy5wcmVwYXJlRmlsZXNMaXN0KGZpbGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZmlsZSBmcm9tIGZpbGVzIGxpc3RcbiAgICpcbiAgICogQHBhcmFtIGluZGV4IChGaWxlIGluZGV4KVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRmlsZShpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXNbaW5kZXhdO1xuXG4gICAgaWYgKGZpbGUucHJvZ3Jlc3MgPT09IDEgJiYgdGhpcy5kZWxldGVGbikge1xuICAgICAgaWYgKGZpbGUuZGVsZXRpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbdXBsb2FkLWZpbGVdIFRoaXMgZmlsZSBhbHJlYWR5IGRlbGV0aW5nYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbGUuZGVsZXRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5kZWxldGVGbihmaWxlKTtcbiAgICAgICAgaWYgKCFkZWxldGVkKSByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBmaWxlLmRlbGV0aW5nID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSBpbmRleCBub3QgY2hhbmdlZFxuICAgICAgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47IC8vIE5vdCBmb3VuZCAoYWxyZWFkeSByZW1vdmVkID8pXG4gICAgfSBlbHNlIGlmIChmaWxlLnByb2dyZXNzID4gMCkge1xuICAgICAgY29uc29sZS53YXJuKGBbdXBsb2FkLWZpbGVdIENhbm5vdCByZW1vdmUgdGhpcyBmaWxlIHdoaWxlIHVwbG9hZGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgRmlsZXMgbGlzdCB0byBub3JtYWwgYXJyYXkgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgKEZpbGVzIExpc3QpXG4gICAqL1xuICBwcmVwYXJlRmlsZXNMaXN0KGZpbGVzOiBGaWxlTGlzdCB8IEZpbGVbXSkge1xuICAgIGxldCBpdGVtczogRmlsZVtdO1xuICAgIGlmIChmaWxlcyBpbnN0YW5jZW9mIEZpbGVMaXN0KSB7XG4gICAgICBpdGVtcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gZmlsZXMuaXRlbShpKTtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSBmaWxlcztcbiAgICB9XG4gICAgdGhpcy5maWxlcy5wdXNoKC4uLml0ZW1zKTtcblxuICAgIHRoaXMuZmlsZURyb3BFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFN0YXJ0IHVwbG9hZFxuICAgIGlmICh0aGlzLmluc3RhbnRVcGxvYWQpIHtcbiAgICAgIHRoaXMudXBsb2FkRmlsZXMoaXRlbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHVwbG9hZFxuICAgKi9cbiAgYXN5bmMgdXBsb2FkRmlsZXMoZmlsZXM/OiBGaWxlW10pOiBQcm9taXNlPFVwbG9hZEZpbGU8YW55PltdPiB7XG4gICAgdGhpcy51cGxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICghZmlsZXMpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3VwbG9hZC1maWxlXSBVcGxvYWRpbmcgYWxsIGZpbGVzLi4uJyk7XG4gICAgICBmaWxlcyA9IHRoaXMuZmlsZXM7XG4gICAgfVxuXG4gICAgY29uc3QgJHByb2Nlc3NpbmdGaWxlQ291bnRDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMucHJvY2Vzc2luZ0ZpbGVzQ291bnQpO1xuICAgIGNvbnN0ICRjaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAkY2hhbmdlcy5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAkcHJvY2Vzc2luZ0ZpbGVDb3VudENoYW5nZS5uZXh0KHRoaXMucHJvY2Vzc2luZ0ZpbGVzQ291bnQpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgam9iczogT2JzZXJ2YWJsZTxVcGxvYWRGaWxlPGFueT4+W10gPSBmaWxlc1xuICAgICAgLm1hcCgoZikgPT4gZiBhcyBVcGxvYWRGaWxlPGFueT4pXG4gICAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlICYmIGlzTmlsKGZpbGUucHJvZ3Jlc3MpICYmICFmaWxlLmVycm9yKSAvLyBTa2lwIGlmIGFscmVhZHkgc3RhcnRlZCBvciBpbiBlcnJvclxuICAgICAgLm1hcCgoZmlsZSwgaSkgPT4ge1xuICAgICAgICAvLyBXYWl0IGlmIG5lZWRcbiAgICAgICAgaWYgKGlzTm90TmlsKHRoaXMubWF4UGFyYWxsZWxVcGxvYWQpKSB7XG4gICAgICAgICAgcmV0dXJuICRwcm9jZXNzaW5nRmlsZUNvdW50Q2hhbmdlLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoaSksIC8vIGNhbGwgb2YgZmlsdGVyKCkgbXVzdCBiZSBkaWZmZXJlbnQgZm9yIHdhaXRpbmcgam9iXG4gICAgICAgICAgICBmaWx0ZXIoKGNvdW50KSA9PiBjb3VudCA8IHRoaXMubWF4UGFyYWxsZWxVcGxvYWQpLFxuICAgICAgICAgICAgbWFwKChfKSA9PiB7XG4gICAgICAgICAgICAgIC8vIFN0YXJ0IHVwbG9hZGluZ1xuICAgICAgICAgICAgICBpZiAoaXNOaWwoZmlsZS5wcm9ncmVzcykpIGZpbGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgICAkY2hhbmdlcy5uZXh0KCk7XG4gICAgICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdGFydCB1cGxvYWRpbmdcbiAgICAgICAgaWYgKGlzTmlsKGZpbGUucHJvZ3Jlc3MpKSBmaWxlLnByb2dyZXNzID0gMDtcbiAgICAgICAgcmV0dXJuIG9mKGZpbGUpO1xuICAgICAgfSlcblxuICAgICAgLm1hcCgoZmlsZSQpID0+XG4gICAgICAgIGZpbGUkLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGlzTm90TmlsKSxcbiAgICAgICAgICAvLyBMb2dcbiAgICAgICAgICB0YXAoKGZpbGUpID0+IGNvbnNvbGUuZGVidWcoYFt1cGxvYWQtZmlsZV0gJHtmaWxlLm5hbWV9OiB1cGxvYWRpbmcuLi5gKSksXG5cbiAgICAgICAgICAvLyBTdGFydCB1cGxvYWRpbmdcbiAgICAgICAgICBzd2l0Y2hNYXAoKGZpbGUpID0+XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZuKGZpbGUpLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgICAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBQcm9ncmVzcyBldmVudFxuICAgICAgICAgICAgICAgIGlmIChpc1Byb2dyZXNzRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNOb3ROaWwoZXZlbnQubG9hZGVkKSAmJiBldmVudC5sb2FkZWQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5taW4oMSwgZXZlbnQubG9hZGVkIC8gKGV2ZW50LnRvdGFsIHx8IDEpKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSAtMTsgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzc2lvblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFJlc3BvbnNlIGV2ZW50XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNSZXNwb25zZUV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IDE7XG4gICAgICAgICAgICAgICAgICBmaWxlLnJlc3BvbnNlID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbdXBsb2FkLWZpbGVdICR7ZmlsZS5uYW1lfTogJHtldmVudC5zdGF0dXNUZXh0IHx8ICdPSyd9YCwgZmlsZS5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gT3RoZXIgZXZlbnRzOiBpZ25vcmVcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbdXBsb2FkLWZpbGVdIElnbm9yaW5nIGEgZmlsZSBldmVudDogJywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBmaWxlLmVycm9yID0gKGVyciAmJiAoZXJyLm1lc3NhZ2UgfHwgZXJyLmVycm9yPy5tZXNzYWdlKSkgfHwgJ0ZJTEUuVVBMT0FELkVSUk9SJztcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmlsZSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICRjaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIC8vIFdhaXQgam9icyB0byBmaW5pc2hcbiAgICByZXR1cm4gZm9ya0pvaW4oam9icylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKF8pID0+ICRjaGFuZ2VzLmNvbXBsZXRlKCkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy51cGxvYWRpbmcgPSBmYWxzZSkpXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gd2FpdEZvcigoKSA9PiB0aGlzLnByb2Nlc3NpbmdGaWxlc0NvdW50ID09PSAwLCBvcHRzKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiF1bmlxdWVGaWxlIHx8IGZpbGVzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY29udGFpbmVyXCIgYXBwRHJhZ0FuZERyb3AgKGZpbGVEcm9wcGVkKT1cIm9uRmlsZURyb3BwZWQoJGV2ZW50KVwiPlxuICA8aW5wdXRcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgI2ZpbGVEcm9wUmVmXG4gICAgaWQ9XCJmaWxlRHJvcFJlZlwiXG4gICAgW211bHRpcGxlXT1cIiF1bmlxdWVGaWxlXCJcbiAgICBbYWNjZXB0XT1cImZpbGVFeHRlbnNpb25cIlxuICAgIChjaGFuZ2UpPVwiZmlsZUJyb3dzZUhhbmRsZXIoJGFueSgkZXZlbnQudGFyZ2V0KS5maWxlcylcIlxuICAvPlxuICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IHh4LWxhcmdlXCIgY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cInRleHQtc2l6ZVwiPnVwbG9hZDwvbWF0LWljb24+XG4gIDxpb24tbGFiZWxcbiAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgJ0ZJTEUuVVBMT0FELkRSQUdfQU5EX0RST1AnIHwgdHJhbnNsYXRlOiB7IGV4dGVuc2lvbjogIWZpbGVFeHRlbnNpb24gPyAnJyA6ICcgKCcgKyBmaWxlRXh0ZW5zaW9uICsgJyknIH1cbiAgICBcIlxuICA+PC9pb24tbGFiZWw+XG4gIDxpb24tYnV0dG9uPnt7ICdGSUxFLlVQTE9BRC5CUk9XU0UnIHwgdHJhbnNsYXRlIH19PC9pb24tYnV0dG9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZmlsZXMtbGlzdFwiPlxuICA8aW9uLWxpc3Q+XG4gICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDxpb24taXRlbT5cbiAgICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWxlXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm5hbWVcIiBbY2xhc3MuZGVsZXRpbmddPVwiZmlsZS5kZWxldGluZ1wiPlxuICAgICAgICAgICAgICB7eyBmaWxlLm5hbWUgfX1cbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAge3sgZmlsZS5zaXplIHwgZmlsZVNpemUgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8aW9uLXByb2dyZXNzLWJhclxuICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRpbmcgJiYgIWZpbGUuZXJyb3JcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbGUucHJvZ3Jlc3MgfHwgMFwiXG4gICAgICAgICAgICBbdHlwZV09XCJmaWxlLmRlbGV0aW5nIHx8IGZpbGUucHJvZ3Jlc3MgPT09IC0xID8gJ2luZGV0ZXJtaW5hdGUnIDogJ2RldGVybWluYXRlJ1wiXG4gICAgICAgICAgPjwvaW9uLXByb2dyZXNzLWJhcj5cbiAgICAgICAgICA8aW9uLWxhYmVsICpuZ0lmPVwiZmlsZS5lcnJvclwiIGNvbG9yPVwiZGFuZ2VyXCIgW2lubmVySFRNTF09XCJmaWxlLmVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIHJlbW90ZSBmcm9tIGxpc3QgKGJlZm9yZSBpbXBvcnRhdGlvbikgLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhZmlsZS5wcm9ncmVzcyB8fCBmaWxlLmVycm9yXCIgbWF0LWljb24tYnV0dG9uIHNsb3Q9XCJlbmRcIiAoY2xpY2spPVwiZGVsZXRlRmlsZShpKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8IS0tIGRlbGV0ZSBmaWxlIChyZW1vdGVseSAtIGFmdGVyIGltcG9ydGF0aW9uKSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiZmlsZS5wcm9ncmVzcyA9PT0gMSAmJiAhIWRlbGV0ZUZuICYmICFmaWxlLmRlbGV0aW5nXCJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICBzbG90PVwiZW5kXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsZShpKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgfVxuICA8L2lvbi1saXN0PlxuPC9kaXY+XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Directive, Pipe, Injectable, EventEmitter, Output, Optional, Inject, NgModule, forwardRef, Component, ChangeDetectionStrategy, Input, ViewChildren, HostBinding, HostListener, ElementRef, ViewChild, ANIMATION_MODULE_TYPE, inject, ChangeDetectorRef, ContentChild, CUSTOM_ELEMENTS_SCHEMA, ViewEncapsulation, APP_INITIALIZER } from '@angular/core';
3
3
  import { firstValueFrom, shareReplay, tap, of, Subject, merge, timer, isObservable, from, Subscription, BehaviorSubject, fromEvent, noop as noop$a, Observable, forkJoin, defer, timeout, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, fromEventPattern, interval, combineLatest, mergeMap as mergeMap$1, EMPTY, switchMap as switchMap$1, delay } from 'rxjs';
4
- import { catchError, map, first, tap as tap$1, switchMap, takeUntil, filter, debounceTime, startWith, distinctUntilChanged, mergeMap, skip, throttleTime, bufferWhen, mapTo, distinctUntilKeyChanged, take } from 'rxjs/operators';
4
+ import { catchError, map, first, tap as tap$1, switchMap, takeUntil, filter, debounceTime, startWith, distinctUntilChanged, mergeMap, skip, finalize, throttleTime, bufferWhen, mapTo, distinctUntilKeyChanged, take } from 'rxjs/operators';
5
5
  import * as i3 from '@angular/common';
6
6
  import { CommonModule, DOCUMENT, Location } from '@angular/common';
7
7
  import { CdkTableModule } from '@angular/cdk/table';
@@ -4182,7 +4182,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
4182
4182
  type: Pipe,
4183
4183
  args: [{ name: 'propertyGet' }]
4184
4184
  }] });
4185
- class AbstractValuePipe {
4185
+ class AbstractValueFormatPipe {
4186
4186
  dateFormat;
4187
4187
  translate;
4188
4188
  _i18nYes;
@@ -4234,7 +4234,7 @@ class AbstractValuePipe {
4234
4234
  }
4235
4235
  }
4236
4236
  }
4237
- class PropertyFormatPipe extends AbstractValuePipe {
4237
+ class PropertyFormatPipe extends AbstractValueFormatPipe {
4238
4238
  constructor(dateFormat, translate) {
4239
4239
  super(dateFormat, translate);
4240
4240
  }
@@ -4264,7 +4264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
4264
4264
  type: Injectable,
4265
4265
  args: [{ providedIn: 'root' }]
4266
4266
  }], ctorParameters: () => [{ type: DateFormatService }, { type: i1$1.TranslateService }] });
4267
- class ValueFormatPipe extends AbstractValuePipe {
4267
+ class ValueFormatPipe extends AbstractValueFormatPipe {
4268
4268
  constructor(dateFormat, translate) {
4269
4269
  super(dateFormat, translate);
4270
4270
  }
@@ -13818,6 +13818,7 @@ class UploadFileComponent {
13818
13818
  deleteFn;
13819
13819
  maxParallelUpload;
13820
13820
  files = [];
13821
+ uploading = false;
13821
13822
  get processingFiles() {
13822
13823
  return this.files.filter((f) => !f.deleting && isNotNil(f.progress) && f.progress < 1);
13823
13824
  }
@@ -13909,6 +13910,7 @@ class UploadFileComponent {
13909
13910
  * Execute upload
13910
13911
  */
13911
13912
  async uploadFiles(files) {
13913
+ this.uploading = true;
13912
13914
  if (!files) {
13913
13915
  console.info('[upload-file] Uploading all files...');
13914
13916
  files = this.files;
@@ -13975,18 +13977,18 @@ class UploadFileComponent {
13975
13977
  })))));
13976
13978
  // Wait jobs to finish
13977
13979
  return forkJoin(jobs)
13978
- .pipe(tap$1((_) => $changes.complete()))
13980
+ .pipe(tap$1((_) => $changes.complete()), finalize(() => (this.uploading = false)))
13979
13981
  .toPromise();
13980
13982
  }
13981
13983
  waitIdle(opts) {
13982
13984
  return waitFor(() => this.processingFilesCount === 0, opts);
13983
13985
  }
13984
13986
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UploadFileComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
13985
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: UploadFileComponent, selector: "app-upload-file", inputs: { fileExtension: "fileExtension", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload" }, viewQueries: [{ propertyName: "fileDropEl", first: true, predicate: ["fileDropRef"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\" class=\"single-file\" [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar\n *ngIf=\"!file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:gray!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: DragAndDropDirective, selector: "[appDragAndDrop]", outputs: ["fileDropped"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: FileSizePipe, name: "fileSize" }] });
13987
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: UploadFileComponent, selector: "app-upload-file", inputs: { fileExtension: "fileExtension", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload" }, viewQueries: [{ propertyName: "fileDropEl", first: true, predicate: ["fileDropRef"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <ion-list>\n @for (file of files; track file; let i = $index) {\n <ion-item>\n <mat-icon slot=\"start\">description</mat-icon>\n <div class=\"single-file\">\n <ion-label>\n <h4 class=\"name\" [class.deleting]=\"file.deleting\">\n {{ file.name }}\n </h4>\n <p>\n {{ file.size | fileSize }}\n </p>\n </ion-label>\n <ion-progress-bar\n *ngIf=\"uploading && !file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button slot=\"end\" (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button\n *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\"\n mat-icon-button\n slot=\"end\"\n (click)=\"deleteFile(i)\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n </ion-item>\n }\n </ion-list>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-direction:column}.files-list .single-file .name{word-break:break-all}.files-list .single-file .name.deleting{color:gray!important;font-style:italic!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2$1.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: DragAndDropDirective, selector: "[appDragAndDrop]", outputs: ["fileDropped"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: FileSizePipe, name: "fileSize" }] });
13986
13988
  }
13987
13989
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UploadFileComponent, decorators: [{
13988
13990
  type: Component,
13989
- args: [{ selector: 'app-upload-file', template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <div *ngFor=\"let file of files; index as i\" class=\"single-file\" [class.deleting]=\"file.deleting\">\n <mat-icon>description</mat-icon>\n <div class=\"info\">\n <h4 class=\"name\">\n {{ file.name }}\n </h4>\n <p class=\"size\">\n {{ file.size | fileSize }}\n </p>\n <ion-progress-bar\n *ngIf=\"!file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\" mat-icon-button (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-grow:1;padding:.5rem;justify-content:space-between;align-items:center;border:dashed 1px #979797;margin-bottom:1rem}.files-list .single-file.deleting .name{color:gray!important;font-style:italic!important}.files-list .single-file .name{font-size:14px;font-weight:500;color:#353f4a;margin:0}.files-list .single-file .size{font-size:12px;font-weight:500;color:#a4a4a4;margin:0 0 .25rem}.files-list .single-file .info{width:100%}\n"] }]
13991
+ args: [{ selector: 'app-upload-file', template: "<div *ngIf=\"!uniqueFile || files.length === 0\" class=\"container\" appDragAndDrop (fileDropped)=\"onFileDropped($event)\">\n <input\n type=\"file\"\n #fileDropRef\n id=\"fileDropRef\"\n [multiple]=\"!uniqueFile\"\n [accept]=\"fileExtension\"\n (change)=\"fileBrowseHandler($any($event.target).files)\"\n />\n <mat-icon style=\"font-size: xx-large\" color=\"accent\" class=\"text-size\">upload</mat-icon>\n <ion-label\n [innerHTML]=\"\n 'FILE.UPLOAD.DRAG_AND_DROP' | translate: { extension: !fileExtension ? '' : ' (' + fileExtension + ')' }\n \"\n ></ion-label>\n <ion-button>{{ 'FILE.UPLOAD.BROWSE' | translate }}</ion-button>\n</div>\n<div class=\"files-list\">\n <ion-list>\n @for (file of files; track file; let i = $index) {\n <ion-item>\n <mat-icon slot=\"start\">description</mat-icon>\n <div class=\"single-file\">\n <ion-label>\n <h4 class=\"name\" [class.deleting]=\"file.deleting\">\n {{ file.name }}\n </h4>\n <p>\n {{ file.size | fileSize }}\n </p>\n </ion-label>\n <ion-progress-bar\n *ngIf=\"uploading && !file.error\"\n [value]=\"file.progress || 0\"\n [type]=\"file.deleting || file.progress === -1 ? 'indeterminate' : 'determinate'\"\n ></ion-progress-bar>\n <ion-label *ngIf=\"file.error\" color=\"danger\" [innerHTML]=\"file.error | translate\"></ion-label>\n </div>\n <!-- remote from list (before importation) -->\n <button *ngIf=\"!file.progress || file.error\" mat-icon-button slot=\"end\" (click)=\"deleteFile(i)\">\n <mat-icon>clear</mat-icon>\n </button>\n <!-- delete file (remotely - after importation) -->\n <button\n *ngIf=\"file.progress === 1 && !!deleteFn && !file.deleting\"\n mat-icon-button\n slot=\"end\"\n (click)=\"deleteFile(i)\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n </ion-item>\n }\n </ion-list>\n</div>\n", styles: [".container{width:calc(100% - 3rem);min-height:200px;padding:2rem;text-align:center;border:dashed 1px #979797;position:relative;margin:1.5rem}.container input{opacity:0;position:absolute;z-index:2;width:100%;height:100%;top:0;left:0;cursor:pointer}.container ion-label{display:block;font-size:20px;font-weight:600;color:#38424c}.container label{display:inline-block;color:#fff;width:183px;height:44px;border-radius:21.5px;background-color:#db202f;padding:8px 16px}.fileover{border:solid 1px var(--ion-color-accent)}.files-list{max-height:300px;overflow:auto}.files-list .single-file{display:flex;flex-direction:column}.files-list .single-file .name{word-break:break-all}.files-list .single-file .name.deleting{color:gray!important;font-style:italic!important}\n"] }]
13990
13992
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { fileDropEl: [{
13991
13993
  type: ViewChild,
13992
13994
  args: ['fileDropRef', { static: false }]
@@ -39867,14 +39869,15 @@ class UploadFileTestingPage {
39867
39869
  const loadStep = file.size / 10;
39868
39870
  let loaded = 0;
39869
39871
  return timer(0, 250).pipe(takeUntil($stop), map(() => {
39872
+ // pause in middle
39873
+ // if (loaded > 0) return { type: HttpEventType.UploadProgress, total: file.size, loaded };
39870
39874
  loaded += loadStep;
39871
39875
  // Return progression
39872
39876
  if (loaded < file.size) {
39873
- //return {type: HttpEventType.UploadProgress, total: file.size, loaded };
39874
- return { type: HttpEventType.UploadProgress, loaded: -1 };
39877
+ return { type: HttpEventType.UploadProgress, total: file.size, loaded };
39875
39878
  }
39876
39879
  // Stop the timer
39877
- setTimeout(() => $stop.next(), 100);
39880
+ setTimeout(() => $stop.next(), 1000);
39878
39881
  // Return final response
39879
39882
  return new HttpResponse({ body: { finalName: file.name } });
39880
39883
  }));