my-common-zzp 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ /**
2
+ * itec 开发环境基础设施
3
+ * - 基础组件声明
4
+ * - 基础服务声明
5
+ */
6
+ import { NgModule } from '@angular/core';
7
+ import { CommonModule } from '@angular/common';
8
+ import { NgZorroAntdModule } from './ngZorroAntd.module';
9
+ import { MaterialModule } from './material.module';
10
+ // 核心的组件
11
+ import { UcModule } from './ucModel';
12
+ import * as i0 from "@angular/core";
13
+ export class ItecCoreModule {
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, imports: [CommonModule, NgZorroAntdModule, MaterialModule], exports: [CommonModule, NgZorroAntdModule, MaterialModule, UcModule] }); }
16
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, imports: [CommonModule, NgZorroAntdModule, MaterialModule, CommonModule, NgZorroAntdModule, MaterialModule, UcModule] }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, decorators: [{
19
+ type: NgModule,
20
+ args: [{
21
+ imports: [CommonModule, NgZorroAntdModule, MaterialModule],
22
+ exports: [CommonModule, NgZorroAntdModule, MaterialModule, UcModule],
23
+ providers: [],
24
+ }]
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL215LWNvbW1vbi9zcmMvbGliL2NvbW1vbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxRQUFRO0FBQ1IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFPckMsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSmhCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLGFBQy9DLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsUUFBUTsrR0FHdkQsY0FBYyxZQUpoQixZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUMvQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFFBQVE7OzJGQUd2RCxjQUFjO2tCQUwxQixRQUFRO21CQUFDO29CQUNULE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUM7b0JBQzFELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDO29CQUNwRSxTQUFTLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiAgaXRlYyDlvIDlj5Hnjq/looPln7rnoYDorr7mlr1cclxuICogIC0g5Z+656GA57uE5Lu25aOw5piOXHJcbiAqICAtIOWfuuehgOacjeWKoeWjsOaYjlxyXG4gKi9cclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IE5nWm9ycm9BbnRkTW9kdWxlIH0gZnJvbSAnLi9uZ1pvcnJvQW50ZC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4vbWF0ZXJpYWwubW9kdWxlJztcclxuLy8g5qC45b+D55qE57uE5Lu2XHJcbmltcG9ydCB7IFVjTW9kdWxlIH0gZnJvbSAnLi91Y01vZGVsJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmdab3Jyb0FudGRNb2R1bGUsIE1hdGVyaWFsTW9kdWxlXSxcclxuXHRleHBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ1pvcnJvQW50ZE1vZHVsZSwgTWF0ZXJpYWxNb2R1bGUsIFVjTW9kdWxlXSxcclxuXHRwcm92aWRlcnM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlY0NvcmVNb2R1bGUge31cclxuIl19
@@ -19,4 +19,5 @@ export { UcPickupWindowHeaderComponent } from "./uc-pickup-window/header.compone
19
19
  export { UcFormComponent } from "./uc-fields/uc-form.component";
20
20
  export { UcFieldsReadonlyComponent } from "./uc-fields/fieldsReadonly.component";
21
21
  export { UcFieldsEditComponent } from "./uc-fields/fieldsEdit.component";
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teS1jb21tb24vc3JjL2xpYi91Yy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbW1vblwiO1xyXG5leHBvcnQgeyBVY0RhdGVSYW5nZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWRhdGUtcmFuZ2UvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTnpNb2RhbENvbnRlbnRDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1kaWFsb2cvdWNOek1vZGFsQ29udGVudC5Db21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNGaWVsZHNDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1maWVsZHMvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdEZpbHRlck9wdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtZmlsdGVyL3VjLWxpc3QtZmlsdGVyT3B0aW9uXCI7XHJcbmV4cG9ydCB7IFVjTGlzdE5hdkNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtbmF2L2NvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0xpc3RUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtdGFibGUvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRhYmxlQ29yZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtdGFibGUvdGFibGUuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRyZWVDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1saXN0LXRyZWUvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRyZWVDb3JlQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtbGlzdC10cmVlL3RhYmxlLmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY05hdkxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1uYXYtbGlzdC9jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNOYXYxQ29tcG9uZW50LCBkZWZhdWx0TGlzdCB9IGZyb20gXCIuL3VjLW5hdjEvdWMtbmF2MS5jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNQZXJmZWN0U2Nyb2xsYmFyQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGVyZmVjdC1zY3JvbGxiYXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjUGlja3VwV2luZG93Q29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGlja3VwLXdpbmRvdy9jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNTdWJIZWFkZXJDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1zdWJoZWFkZXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjVGl0bGVOYXZDb21wb25lbnQgfSBmcm9tIFwiLi91Yy10aXRsZS1uYXYvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjVG9vbGJhckNvbXBvbmVudCB9IGZyb20gXCIuL3VjLXRvb2xiYXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjUGlja3VwV2luZG93SGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGlja3VwLXdpbmRvdy9oZWFkZXIuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWZpZWxkcy91Yy1mb3JtLmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0ZpZWxkc1JlYWRvbmx5Q29tcG9uZW50IH0gZnJvbSBcIi4vdWMtZmllbGRzL2ZpZWxkc1JlYWRvbmx5LmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0ZpZWxkc0VkaXRDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1maWVsZHMvZmllbGRzRWRpdC5jb21wb25lbnRcIjtcclxuIl19
22
+ export { UcFileListComponent } from "./uc-file-list/component";
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teS1jb21tb24vc3JjL2xpYi91Yy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbW1vblwiO1xyXG5leHBvcnQgeyBVY0RhdGVSYW5nZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWRhdGUtcmFuZ2UvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTnpNb2RhbENvbnRlbnRDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1kaWFsb2cvdWNOek1vZGFsQ29udGVudC5Db21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNGaWVsZHNDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1maWVsZHMvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdEZpbHRlck9wdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtZmlsdGVyL3VjLWxpc3QtZmlsdGVyT3B0aW9uXCI7XHJcbmV4cG9ydCB7IFVjTGlzdE5hdkNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtbmF2L2NvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0xpc3RUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtdGFibGUvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRhYmxlQ29yZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtdGFibGUvdGFibGUuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRyZWVDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1saXN0LXRyZWUvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRyZWVDb3JlQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtbGlzdC10cmVlL3RhYmxlLmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY05hdkxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1uYXYtbGlzdC9jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNOYXYxQ29tcG9uZW50LCBkZWZhdWx0TGlzdCB9IGZyb20gXCIuL3VjLW5hdjEvdWMtbmF2MS5jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNQZXJmZWN0U2Nyb2xsYmFyQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGVyZmVjdC1zY3JvbGxiYXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjUGlja3VwV2luZG93Q29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGlja3VwLXdpbmRvdy9jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNTdWJIZWFkZXJDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1zdWJoZWFkZXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjVGl0bGVOYXZDb21wb25lbnQgfSBmcm9tIFwiLi91Yy10aXRsZS1uYXYvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjVG9vbGJhckNvbXBvbmVudCB9IGZyb20gXCIuL3VjLXRvb2xiYXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjUGlja3VwV2luZG93SGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGlja3VwLXdpbmRvdy9oZWFkZXIuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWZpZWxkcy91Yy1mb3JtLmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0ZpZWxkc1JlYWRvbmx5Q29tcG9uZW50IH0gZnJvbSBcIi4vdWMtZmllbGRzL2ZpZWxkc1JlYWRvbmx5LmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0ZpZWxkc0VkaXRDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1maWVsZHMvZmllbGRzRWRpdC5jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNGaWxlTGlzdENvbXBvbmVudCB9IGZyb20gXCIuL3VjLWZpbGUtbGlzdC9jb21wb25lbnRcIjtcclxuIl19
@@ -0,0 +1,150 @@
1
+ import { moveItemInArray } from "@angular/cdk/drag-drop";
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core";
3
+ import { actions } from "../data";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/cdk/drag-drop";
7
+ import * as i3 from "ng-inline-svg-2";
8
+ import * as i4 from "../upload";
9
+ export class UcFileCardListComponent {
10
+ constructor() {
11
+ this.multiple = false; //多选文件
12
+ this.allowUpload = true; //允许上传
13
+ this.onUploadCancelClick = new EventEmitter();
14
+ this.onCradClick = new EventEmitter();
15
+ this.actions = actions;
16
+ }
17
+ ngOnInit() {
18
+ this.cardSize = this.cardSize ? this.cardSize + "px" : "150px";
19
+ }
20
+ drop(event) {
21
+ if (event.previousIndex !== event.currentIndex) {
22
+ moveItemInArray(this.dataList, event.previousIndex, event.currentIndex);
23
+ this.onCradClick.emit({
24
+ code: "DROPPED",
25
+ data: event.currentIndex,
26
+ });
27
+ }
28
+ }
29
+ doSth(event, code, item) {
30
+ event.stopPropagation();
31
+ this.onCradClick.emit({
32
+ code: code,
33
+ data: item,
34
+ });
35
+ }
36
+ onUploadCancelCallback() {
37
+ this.onUploadCancelClick.emit();
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileCardListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: UcFileCardListComponent, selector: "uc-file-card-list", inputs: { cardSize: "cardSize", multiple: "multiple", allowUpload: "allowUpload", beforeUpload: "beforeUpload", dataList: "dataList" }, outputs: { onUploadCancelClick: "onUploadCancelClick", onCradClick: "onCradClick" }, ngImport: i0, template: `<div class="main">
41
+ <div class="dropContent" cdkDropList cdkDropListOrientation="mixed" (cdkDropListDropped)="drop($event)">
42
+ @for (item of dataList ; let idx = $index; track idx) {
43
+ <div
44
+ cdkDrag
45
+ class="fileContent"
46
+ [ngStyle]="{
47
+ width:cardSize,
48
+ height:cardSize,
49
+ }"
50
+ >
51
+ @if(item.type==="image"){
52
+ <span class="image-content vc">
53
+ <img [src]="item.fileSrc" />
54
+ </span>
55
+ }@else {
56
+ <span [inlineSVG]="item.imageSrc" cacheSVG="true" class="svg-icon svg-icon-7x vc"></span>
57
+ }
58
+ <div class="mask">
59
+ <div class="maskContent" (click)="doSth($event, 'DOWNLOAD', item)">
60
+ <span class="operating">
61
+ @for (c of actions ; track c) { @if(c.type===item.type||c.type==='any'){
62
+ <a [class]="c.type === 'image' ? 'mr-5' : ''" (click)="doSth($event, c.code, item)">
63
+ <i class="icon-xl" [ngClass]="c.icon"></i>
64
+ </a>
65
+ } }
66
+ </span>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ } @if(allowUpload){
71
+
72
+ <uc-file-upload [multiple]="multiple" [beforeUpload]="beforeUpload" (onCancel)="onUploadCancelCallback()">
73
+ <div
74
+ class="fileContent text-muted"
75
+ [ngStyle]="{
76
+ width:cardSize,
77
+ height:cardSize,
78
+ }"
79
+ >
80
+ <i class="flaticon2-plus icon-xl icon-plus vc"></i>
81
+ </div>
82
+ </uc-file-upload>
83
+ }
84
+ </div>
85
+ </div> `, isInline: true, styles: ["@charset \"UTF-8\";.main .dropContent{display:flex;flex-wrap:wrap}.main .dropContent .fileContent{margin-right:8px;margin-bottom:5px;padding:6px;border:1px solid #cccccc;position:relative}.main .dropContent .fileContent .image-content{width:100%;height:100%}.main .dropContent .fileContent .image-content img{width:100%;height:100%;object-fit:cover}.main .dropContent .fileContent .icon-plus{color:unset}.main .dropContent .fileContent .icon-plus:hover{cursor:pointer}.main .dropContent .fileContent .mask{position:absolute;top:0;left:0;height:100%;width:100%}.main .dropContent .fileContent .mask .maskContent{opacity:0;transition:opacity .2s ease,visibility .2s ease;background:#65656599;height:100%;width:100%;position:relative}.main .dropContent .fileContent .mask .maskContent .operating{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.main .dropContent .fileContent .mask .maskContent .operating a{color:#fff}.main .dropContent .fileContent .mask .maskContent .operating a i{color:unset}.main .dropContent .fileContent .mask:hover .maskContent{opacity:1;visibility:visible}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-preview .image-content{width:100%;height:100%}.cdk-drag-preview .image-content img{width:100%;height:100%;object-fit:cover}.cdk-drag-preview .maskContent,.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.vc{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i4.UcFileUploadComponent, selector: "uc-file-upload", inputs: ["multiple", "beforeUpload"], outputs: ["onCancel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileCardListComponent, decorators: [{
88
+ type: Component,
89
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: "uc-file-card-list", template: `<div class="main">
90
+ <div class="dropContent" cdkDropList cdkDropListOrientation="mixed" (cdkDropListDropped)="drop($event)">
91
+ @for (item of dataList ; let idx = $index; track idx) {
92
+ <div
93
+ cdkDrag
94
+ class="fileContent"
95
+ [ngStyle]="{
96
+ width:cardSize,
97
+ height:cardSize,
98
+ }"
99
+ >
100
+ @if(item.type==="image"){
101
+ <span class="image-content vc">
102
+ <img [src]="item.fileSrc" />
103
+ </span>
104
+ }@else {
105
+ <span [inlineSVG]="item.imageSrc" cacheSVG="true" class="svg-icon svg-icon-7x vc"></span>
106
+ }
107
+ <div class="mask">
108
+ <div class="maskContent" (click)="doSth($event, 'DOWNLOAD', item)">
109
+ <span class="operating">
110
+ @for (c of actions ; track c) { @if(c.type===item.type||c.type==='any'){
111
+ <a [class]="c.type === 'image' ? 'mr-5' : ''" (click)="doSth($event, c.code, item)">
112
+ <i class="icon-xl" [ngClass]="c.icon"></i>
113
+ </a>
114
+ } }
115
+ </span>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ } @if(allowUpload){
120
+
121
+ <uc-file-upload [multiple]="multiple" [beforeUpload]="beforeUpload" (onCancel)="onUploadCancelCallback()">
122
+ <div
123
+ class="fileContent text-muted"
124
+ [ngStyle]="{
125
+ width:cardSize,
126
+ height:cardSize,
127
+ }"
128
+ >
129
+ <i class="flaticon2-plus icon-xl icon-plus vc"></i>
130
+ </div>
131
+ </uc-file-upload>
132
+ }
133
+ </div>
134
+ </div> `, styles: ["@charset \"UTF-8\";.main .dropContent{display:flex;flex-wrap:wrap}.main .dropContent .fileContent{margin-right:8px;margin-bottom:5px;padding:6px;border:1px solid #cccccc;position:relative}.main .dropContent .fileContent .image-content{width:100%;height:100%}.main .dropContent .fileContent .image-content img{width:100%;height:100%;object-fit:cover}.main .dropContent .fileContent .icon-plus{color:unset}.main .dropContent .fileContent .icon-plus:hover{cursor:pointer}.main .dropContent .fileContent .mask{position:absolute;top:0;left:0;height:100%;width:100%}.main .dropContent .fileContent .mask .maskContent{opacity:0;transition:opacity .2s ease,visibility .2s ease;background:#65656599;height:100%;width:100%;position:relative}.main .dropContent .fileContent .mask .maskContent .operating{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.main .dropContent .fileContent .mask .maskContent .operating a{color:#fff}.main .dropContent .fileContent .mask .maskContent .operating a i{color:unset}.main .dropContent .fileContent .mask:hover .maskContent{opacity:1;visibility:visible}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-preview .image-content{width:100%;height:100%}.cdk-drag-preview .image-content img{width:100%;height:100%;object-fit:cover}.cdk-drag-preview .maskContent,.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.vc{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"] }]
135
+ }], propDecorators: { cardSize: [{
136
+ type: Input
137
+ }], multiple: [{
138
+ type: Input
139
+ }], allowUpload: [{
140
+ type: Input
141
+ }], beforeUpload: [{
142
+ type: Input
143
+ }], dataList: [{
144
+ type: Input
145
+ }], onUploadCancelClick: [{
146
+ type: Output
147
+ }], onCradClick: [{
148
+ type: Output
149
+ }] } });
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXktY29tbW9uL3NyYy9saWIvdWMvdWMtZmlsZS1saXN0L2NhcmQtbGlzdC9jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBcURsQyxNQUFNLE9BQU8sdUJBQXVCO0lBbkRwQztRQXFEYSxhQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsTUFBTTtRQUNqQyxnQkFBVyxHQUFZLElBQUksQ0FBQyxDQUFDLE1BQU07UUFHbEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM5QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFaEQsWUFBTyxHQUFlLE9BQU8sQ0FBQztLQTBCakM7SUF4QkcsUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNuRSxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQTRCO1FBQzdCLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0MsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxLQUFLLENBQUMsWUFBWTthQUMzQixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUk7UUFDbkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2xCLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzhHQWxDUSx1QkFBdUI7a0dBQXZCLHVCQUF1QixzUkFoRHRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUE2Q0Y7OzJGQUdDLHVCQUF1QjtrQkFuRG5DLFNBQVM7c0NBQ1csdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxtQkFBbUIsWUFDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQTZDRjs4QkFJQyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IGFjdGlvbnMgfSBmcm9tIFwiLi4vZGF0YVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHNlbGVjdG9yOiBcInVjLWZpbGUtY2FyZC1saXN0XCIsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJtYWluXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BDb250ZW50XCIgY2RrRHJvcExpc3QgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cIm1peGVkXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cclxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhTGlzdCA7IGxldCBpZHggPSAkaW5kZXg7IHRyYWNrIGlkeCkge1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGVDb250ZW50XCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIHdpZHRoOmNhcmRTaXplLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OmNhcmRTaXplLFxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBAaWYoaXRlbS50eXBlPT09XCJpbWFnZVwiKXtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1hZ2UtY29udGVudCB2Y1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtLmZpbGVTcmNcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiaXRlbS5pbWFnZVNyY1wiIGNhY2hlU1ZHPVwidHJ1ZVwiIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tN3ggdmNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFza1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXNrQ29udGVudFwiIChjbGljayk9XCJkb1N0aCgkZXZlbnQsICdET1dOTE9BRCcsIGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3BlcmF0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjIG9mIGFjdGlvbnMgOyB0cmFjayBjKSB7IEBpZihjLnR5cGU9PT1pdGVtLnR5cGV8fGMudHlwZT09PSdhbnknKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtjbGFzc109XCJjLnR5cGUgPT09ICdpbWFnZScgPyAnbXItNScgOiAnJ1wiIChjbGljayk9XCJkb1N0aCgkZXZlbnQsIGMuY29kZSwgaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24teGxcIiBbbmdDbGFzc109XCJjLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBpZihhbGxvd1VwbG9hZCl7XHJcblxyXG4gICAgICAgICAgICA8dWMtZmlsZS11cGxvYWQgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW2JlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIiAob25DYW5jZWwpPVwib25VcGxvYWRDYW5jZWxDYWxsYmFjaygpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlQ29udGVudCB0ZXh0LW11dGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDpjYXJkU2l6ZSxcclxuICAgICAgICAgICAgICAgIGhlaWdodDpjYXJkU2l6ZSxcclxuICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmbGF0aWNvbjItcGx1cyBpY29uLXhsIGljb24tcGx1cyB2Y1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3VjLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj4gYCxcclxuICAgIHN0eWxlVXJsczogW1wiY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVY0ZpbGVDYXJkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBjYXJkU2l6ZTogc3RyaW5nIHwgbnVtYmVyOyAvL2NhcmTlpKflsI8g6buY6K6kMjAwcHhcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7IC8v5aSa6YCJ5paH5Lu2XHJcbiAgICBASW5wdXQoKSBhbGxvd1VwbG9hZDogYm9vbGVhbiA9IHRydWU7IC8v5YWB6K645LiK5LygXHJcbiAgICBASW5wdXQoKSBiZWZvcmVVcGxvYWQ7XHJcbiAgICBASW5wdXQoKSBkYXRhTGlzdDtcclxuICAgIEBPdXRwdXQoKSBvblVwbG9hZENhbmNlbENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DcmFkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBhY3Rpb25zOiBBcnJheTxhbnk+ID0gYWN0aW9ucztcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhcmRTaXplID0gdGhpcy5jYXJkU2l6ZSA/IHRoaXMuY2FyZFNpemUgKyBcInB4XCIgOiBcIjE1MHB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggIT09IGV2ZW50LmN1cnJlbnRJbmRleCkge1xyXG4gICAgICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5kYXRhTGlzdCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgICAgICAgICAgdGhpcy5vbkNyYWRDbGljay5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IFwiRFJPUFBFRFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZXZlbnQuY3VycmVudEluZGV4LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb1N0aChldmVudCwgY29kZSwgaXRlbSkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMub25DcmFkQ2xpY2suZW1pdCh7XHJcbiAgICAgICAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25VcGxvYWRDYW5jZWxDYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLm9uVXBsb2FkQ2FuY2VsQ2xpY2suZW1pdCgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,277 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChildren, } from "@angular/core";
2
+ import _ from "lodash";
3
+ import { forkJoin, tap } from "rxjs";
4
+ import { UcFileCardsCropImageModalComponent } from "./cropImageModal/component";
5
+ import { compressImage } from "../../formly-config/types/avatar/cropImageModal/method";
6
+ import { findFileTypeOption } from "./method";
7
+ import { fileSvgSrc, FLIETYPE } from "./data";
8
+ import { calcNewSeqValue } from "./method";
9
+ import { saveAs } from "file-saver";
10
+ import { AppInjector } from "../../service";
11
+ import { FILE_URL } from "../../service/inject.token";
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../service";
14
+ import * as i2 from "@angular/common/http";
15
+ import * as i3 from "ng-zorro-antd/image";
16
+ import * as i4 from "./table-list";
17
+ import * as i5 from "./toolbar";
18
+ import * as i6 from "./card-list/component";
19
+ export class UcFileListComponent {
20
+ //传入的数据
21
+ set dataList(list) {
22
+ if (list) {
23
+ this.fileList = list.map(m => {
24
+ return {
25
+ id: m.id,
26
+ fileSrc: this.apiUrl + m.name,
27
+ imageSrc: fileSvgSrc[m.type],
28
+ lineCode: m.lineCode,
29
+ name: m.name,
30
+ type: m.type,
31
+ };
32
+ });
33
+ this.fileList = _.orderBy(this.fileList, "lineCode");
34
+ }
35
+ }
36
+ constructor(cdr, App, http, modalUtils) {
37
+ this.cdr = cdr;
38
+ this.App = App;
39
+ this.http = http;
40
+ this.modalUtils = modalUtils;
41
+ this.apiUrl = AppInjector.get(FILE_URL, ""); // root FILE_URL 文件上传地址
42
+ this.uploadFileTypes = []; //设定允许上传文件类型
43
+ this.mode = "card";
44
+ this.multiple = false; //多选文件
45
+ this.allowUpload = true; //允许上传
46
+ this.toolbarVisible = true; //表头操作可见
47
+ this.fileList = [];
48
+ this.imageGroups = [];
49
+ this.onOk = new EventEmitter();
50
+ this.beforeUpload = async (file, uploadFileList) => {
51
+ // 两种状态 上传文件数量
52
+ // 一个 判断当前文件类型与允许上传的文件类型是否一致 后单笔上传 图片类型 打开编辑框
53
+ // 多个 过滤掉文件类型与允许上传的文件类型不一致的文件 多笔文件上传
54
+ if (uploadFileList.length > 1) {
55
+ if (file === uploadFileList.at(-1)) {
56
+ //最后一个文件时执行所有的文件上传 图片自动压缩200kb以内
57
+ const observableArayy = [];
58
+ for (let index = 0; index < uploadFileList.length; index++) {
59
+ let e = uploadFileList[index];
60
+ const fileTypeOption = findFileTypeOption(e);
61
+ const valid = this.uploadFileTypes.length
62
+ ? this.uploadFileTypes.some(item => item == fileTypeOption.type)
63
+ : true;
64
+ if (valid) {
65
+ if (fileTypeOption.type === "image") {
66
+ e = await compressImage(e);
67
+ }
68
+ const o = this.uploadFiles(e, fileTypeOption);
69
+ observableArayy.push(o);
70
+ }
71
+ }
72
+ forkJoin(observableArayy).subscribe();
73
+ }
74
+ }
75
+ else {
76
+ // 获取文件对象
77
+ const _file = (file.originFileObj || file);
78
+ // //找到上传文件是哪个类型的
79
+ const fileTypeOption = findFileTypeOption(file);
80
+ const valid = this.uploadFileTypes.length
81
+ ? this.uploadFileTypes.some(item => item == fileTypeOption.type)
82
+ : true;
83
+ if (valid) {
84
+ if (fileTypeOption.type === "image") {
85
+ const reader = new FileReader();
86
+ // 定义文件读取完成后的回调函数
87
+ reader.onload = (e) => {
88
+ this.openEditImageModal({ fileSrc: e.target.result }, "DEFAULT");
89
+ this.cdr.markForCheck();
90
+ };
91
+ // 启动文件读取过程
92
+ reader.readAsDataURL(_file);
93
+ }
94
+ else {
95
+ this.uploadFiles(file, fileTypeOption).subscribe();
96
+ }
97
+ }
98
+ }
99
+ return false;
100
+ };
101
+ }
102
+ onUploadCancelClick() {
103
+ this.openEditImageModal(null, "DEFAULT");
104
+ this.cdr.markForCheck();
105
+ }
106
+ doSth(event) {
107
+ switch (event.code) {
108
+ case "EDIT":
109
+ this.openEditImageModal(event.data);
110
+ break;
111
+ case "DELETE":
112
+ this.deleteFile(event.data);
113
+ break;
114
+ case "DOWNLOAD":
115
+ this.viewFile(event.data);
116
+ break;
117
+ case "DROPPED":
118
+ this.dropFile(event.data);
119
+ break;
120
+ }
121
+ }
122
+ deleteFile(item) {
123
+ this.App.httpClient.delete(item.fileSrc).subscribe();
124
+ this.onOk.emit({
125
+ code: "DELETE",
126
+ id: item.id,
127
+ });
128
+ }
129
+ viewFile(item) {
130
+ switch (item.type) {
131
+ case "image":
132
+ this.openImageBoard(item.fileSrc);
133
+ break;
134
+ case "pdf":
135
+ this.http.get(item.fileSrc, { responseType: "blob" }).subscribe(blob => {
136
+ const pdf = new Blob([blob], { type: "application/pdf;chartset=uTF-8" });
137
+ const url = window.URL.createObjectURL(pdf);
138
+ window.open(url, "_blank");
139
+ //释放内存(确保窗口已打开后执行)
140
+ setTimeout(() => window.URL.revokeObjectURL(url), 1000);
141
+ });
142
+ break;
143
+ default:
144
+ this.downloadFile(item.fileSrc, item.name);
145
+ break;
146
+ }
147
+ }
148
+ /**
149
+ *
150
+ * @param item
151
+ * @param modalType DEFAULT 普通类型 不带有删除 用于上传文件后 打开编辑模式 , IMAGE 带有删除功能 用于图片编辑
152
+ */
153
+ openEditImageModal(item, modalType) {
154
+ let flieSrc = item?.fileSrc || null;
155
+ if (flieSrc) {
156
+ if (!modalType)
157
+ flieSrc = `${item.fileSrc}?timestamp=${new Date().getTime()}`;
158
+ }
159
+ this.modalUtils.openModal({
160
+ content: UcFileCardsCropImageModalComponent,
161
+ props: {
162
+ imageSrc: flieSrc,
163
+ modalType: modalType,
164
+ onOk: event => this.cropImageModalOnOk(event, item),
165
+ },
166
+ });
167
+ }
168
+ //打开nzimage看板
169
+ openImageBoard(src) {
170
+ this.imageGroups = this.fileList.filter(f => f.type === "image");
171
+ setTimeout(t => {
172
+ const images = this.nzImages.toArray();
173
+ for (let index = 0; index < images.length; index++) {
174
+ const x = images[index];
175
+ if (x.nativeElement.src == src) {
176
+ x.nativeElement.click();
177
+ this.cdr.markForCheck();
178
+ break;
179
+ }
180
+ }
181
+ });
182
+ }
183
+ /**
184
+ * 裁剪对话框 图片编辑 上传 删除功能
185
+ * @param event 对话框返回参数
186
+ * @param item 当前选项的原型
187
+ */
188
+ async cropImageModalOnOk(event, item) {
189
+ if (event.code === "DELETE") {
190
+ this.App.httpClient.delete(item.fileSrc).subscribe();
191
+ this.onOk.emit({
192
+ code: "DELETE",
193
+ id: item.id,
194
+ });
195
+ }
196
+ else {
197
+ const fileTypeOption = FLIETYPE.find(f => f.type === "image");
198
+ let fileName = item?.name || null;
199
+ this.uploadFiles(event.file, fileTypeOption, fileName).subscribe(r => {
200
+ item.fileSrc = `${item.fileSrc}?timestamp=${new Date().getTime()}`;
201
+ this.cdr.markForCheck();
202
+ });
203
+ }
204
+ }
205
+ /**
206
+ *上传方法
207
+ * @param file 上传所需要的文件
208
+ * @param fileName 文件名
209
+ */
210
+ uploadFiles(file, fileTypeOption, fileName) {
211
+ let isNew = false;
212
+ if (!fileName) {
213
+ fileName = this.masterId + fileTypeOption.type + Date.now() + fileTypeOption.suffix;
214
+ isNew = true;
215
+ }
216
+ const newFile = file;
217
+ const formData = new FormData();
218
+ formData.append("file", newFile, fileName);
219
+ return this.App.httpClient.post(this.apiUrl, formData).pipe(tap(x => {
220
+ if (isNew) {
221
+ this.onOk.emit({
222
+ code: "UPLOAD",
223
+ fileName: fileName,
224
+ lineCode: this.fileList.length + 1,
225
+ type: fileTypeOption.type,
226
+ });
227
+ }
228
+ }));
229
+ }
230
+ downloadFile(url, name) {
231
+ this.http.get(url, { responseType: "blob" }).subscribe(blob => {
232
+ saveAs(blob, name); // 你可以指定任何你想要的文件名
233
+ });
234
+ }
235
+ dropFile(currentIndex) {
236
+ let lineCode = calcNewSeqValue(currentIndex, this.fileList, "lineCode");
237
+ this.fileList[currentIndex].lineCode = lineCode;
238
+ this.onOk.emit({
239
+ code: "UPDATE",
240
+ id: this.fileList[currentIndex].id,
241
+ updateData: [
242
+ {
243
+ key: "lineCode",
244
+ value: lineCode,
245
+ },
246
+ ],
247
+ });
248
+ }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Application }, { token: i2.HttpClient }, { token: i1.ModalUtils }], target: i0.ɵɵFactoryTarget.Component }); }
250
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: UcFileListComponent, selector: "uc-file-list", inputs: { uploadFileTypes: "uploadFileTypes", mode: "mode", cardSize: "cardSize", masterId: "masterId", multiple: "multiple", allowUpload: "allowUpload", toolbarVisible: "toolbarVisible", dataList: "dataList" }, outputs: { onOk: "onOk" }, viewQueries: [{ propertyName: "nzImages", predicate: ["nzImage"], descendants: true }], ngImport: i0, template: "@if(toolbarVisible){\r\n<uc-file-toolbar\r\n [(mode)]=\"mode\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(mode === 'card'){\r\n<uc-file-card-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n (onCradClick)=\"doSth($event)\"\r\n/>\r\n}@else{\r\n<uc-file-table-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"toolbarVisible?false: allowUpload \"\r\n [multiple]=\"multiple\"\r\n (onTableRowClick)=\"doSth($event)\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(imageGroups.length){\r\n<nz-image-group style=\"display: none\" class=\"nzImage\">\r\n @for (item of imageGroups; track item) {\r\n <img nz-image #nzImage [nzSrc]=\"item.fileSrc\" (close)=\"imageGroups=[]\" />\r\n }\r\n</nz-image-group>\r\n}\r\n", dependencies: [{ kind: "directive", type: i3.NzImageDirective, selector: "img[nz-image]", inputs: ["nzSrc", "nzSrcset", "nzDisablePreview", "nzFallback", "nzPlaceholder", "nzScaleStep"], exportAs: ["nzImage"] }, { kind: "component", type: i3.NzImageGroupComponent, selector: "nz-image-group", inputs: ["nzScaleStep"], exportAs: ["nzImageGroup"] }, { kind: "component", type: i4.UcFileTableListComponent, selector: "uc-file-table-list", inputs: ["dataList", "multiple", "beforeUpload", "allowUpload"], outputs: ["onTableRowClick", "onUploadCancelClick"] }, { kind: "component", type: i5.UcFileToolbarComponent, selector: "uc-file-toolbar", inputs: ["mode", "beforeUpload", "multiple", "allowUpload"], outputs: ["modeChange", "onUploadCancelClick"] }, { kind: "component", type: i6.UcFileCardListComponent, selector: "uc-file-card-list", inputs: ["cardSize", "multiple", "allowUpload", "beforeUpload", "dataList"], outputs: ["onUploadCancelClick", "onCradClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
251
+ }
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileListComponent, decorators: [{
253
+ type: Component,
254
+ args: [{ selector: "uc-file-list", changeDetection: ChangeDetectionStrategy.OnPush, template: "@if(toolbarVisible){\r\n<uc-file-toolbar\r\n [(mode)]=\"mode\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(mode === 'card'){\r\n<uc-file-card-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n (onCradClick)=\"doSth($event)\"\r\n/>\r\n}@else{\r\n<uc-file-table-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"toolbarVisible?false: allowUpload \"\r\n [multiple]=\"multiple\"\r\n (onTableRowClick)=\"doSth($event)\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(imageGroups.length){\r\n<nz-image-group style=\"display: none\" class=\"nzImage\">\r\n @for (item of imageGroups; track item) {\r\n <img nz-image #nzImage [nzSrc]=\"item.fileSrc\" (close)=\"imageGroups=[]\" />\r\n }\r\n</nz-image-group>\r\n}\r\n" }]
255
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Application }, { type: i2.HttpClient }, { type: i1.ModalUtils }], propDecorators: { uploadFileTypes: [{
256
+ type: Input
257
+ }], mode: [{
258
+ type: Input
259
+ }], cardSize: [{
260
+ type: Input
261
+ }], masterId: [{
262
+ type: Input
263
+ }], multiple: [{
264
+ type: Input
265
+ }], allowUpload: [{
266
+ type: Input
267
+ }], toolbarVisible: [{
268
+ type: Input
269
+ }], dataList: [{
270
+ type: Input
271
+ }], nzImages: [{
272
+ type: ViewChildren,
273
+ args: ["nzImage"]
274
+ }], onOk: [{
275
+ type: Output
276
+ }] } });
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXktY29tbW9uL3NyYy9saWIvdWMvdWMtZmlsZS1saXN0L2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215LWNvbW1vbi9zcmMvbGliL3VjL3VjLWZpbGUtbGlzdC9jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLG1CQUFtQjtJQVM1QixPQUFPO0lBQ1AsSUFBYSxRQUFRLENBQUMsSUFBa0I7UUFDcEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FB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Q0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F2UFEsbUJBQW1CO2tHQUFuQixtQkFBbUIsMlhDL0JoQyxxa0NBbUNBOzsyRkRKYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNO2tLQUl0QyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRU8sUUFBUTtzQkFBcEIsS0FBSztnQkFvQm1CLFFBQVE7c0JBQWhDLFlBQVk7dUJBQUMsU0FBUztnQkFFYixJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFZpZXdDaGlsZHJlbixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IE56VXBsb2FkRmlsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3VwbG9hZFwiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7IFVjRmlsZUNhcmRzQ3JvcEltYWdlTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9jcm9wSW1hZ2VNb2RhbC9jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgY29tcHJlc3NJbWFnZSB9IGZyb20gXCIuLi8uLi9mb3JtbHktY29uZmlnL3R5cGVzL2F2YXRhci9jcm9wSW1hZ2VNb2RhbC9tZXRob2RcIjtcclxuaW1wb3J0IHsgZmluZEZpbGVUeXBlT3B0aW9uIH0gZnJvbSBcIi4vbWV0aG9kXCI7XHJcbmltcG9ydCB7IGZpbGVTdmdTcmMsIEZMSUVUWVBFIH0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgeyBtb2RlbCwgdXBsb2FkRmlsZVR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XHJcbmltcG9ydCB7IGNhbGNOZXdTZXFWYWx1ZSB9IGZyb20gXCIuL21ldGhvZFwiO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tIFwiZmlsZS1zYXZlclwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEFwcEluamVjdG9yLCBBcHBsaWNhdGlvbiwgTW9kYWxVdGlscyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZJTEVfVVJMIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvaW5qZWN0LnRva2VuXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInVjLWZpbGUtbGlzdFwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVY0ZpbGVMaXN0Q29tcG9uZW50IHtcclxuICAgIGFwaVVybDogc3RyaW5nID0gQXBwSW5qZWN0b3IuZ2V0KEZJTEVfVVJMLCBcIlwiKTsgLy8gcm9vdCBGSUxFX1VSTCDmlofku7bkuIrkvKDlnLDlnYBcclxuICAgIEBJbnB1dCgpIHVwbG9hZEZpbGVUeXBlczogQXJyYXk8dXBsb2FkRmlsZVR5cGU+ID0gW107IC8v6K6+5a6a5YWB6K645LiK5Lyg5paH5Lu257G75Z6LXHJcbiAgICBASW5wdXQoKSBtb2RlOiBcImNhcmRcIiB8IFwibGlzdFwiID0gXCJjYXJkXCI7XHJcbiAgICBASW5wdXQoKSBjYXJkU2l6ZTogc3RyaW5nIHwgbnVtYmVyOyAvL2NhcmTlpKflsI8g6buY6K6kMjAwcHhcclxuICAgIEBJbnB1dCgpIG1hc3RlcklkOiBzdHJpbmcgfCBudW1iZXI7IC8v5paH5Lu26K+G5YiraWRcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7IC8v5aSa6YCJ5paH5Lu2XHJcbiAgICBASW5wdXQoKSBhbGxvd1VwbG9hZDogYm9vbGVhbiA9IHRydWU7IC8v5YWB6K645LiK5LygXHJcbiAgICBASW5wdXQoKSB0b29sYmFyVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7IC8v6KGo5aS05pON5L2c5Y+v6KeBXHJcbiAgICAvL+S8oOWFpeeahOaVsOaNrlxyXG4gICAgQElucHV0KCkgc2V0IGRhdGFMaXN0KGxpc3Q6IEFycmF5PG1vZGVsPikge1xyXG4gICAgICAgIGlmIChsaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUxpc3QgPSBsaXN0Lm1hcChtID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVNyYzogdGhpcy5hcGlVcmwgKyBtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VTcmM6IGZpbGVTdmdTcmNbbS50eXBlXSxcclxuICAgICAgICAgICAgICAgICAgICBsaW5lQ29kZTogbS5saW5lQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbS50eXBlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUxpc3QgPSBfLm9yZGVyQnkodGhpcy5maWxlTGlzdCwgXCJsaW5lQ29kZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlsZVR5cGVPcHRpb247IC8v5paH5Lu257G75Z6LIOmAiemhuSDljIXlkKsg5ZCO57yAIOexu+Wei+etiVxyXG4gICAgZmlsZUxpc3Q6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIGltYWdlR3JvdXBzOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gICAgQFZpZXdDaGlsZHJlbihcIm56SW1hZ2VcIikgbnpJbWFnZXMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gICAgQE91dHB1dCgpIG9uT2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIGJlZm9yZVVwbG9hZCA9IGFzeW5jIChmaWxlOiBOelVwbG9hZEZpbGUsIHVwbG9hZEZpbGVMaXN0OiBOelVwbG9hZEZpbGVbXSkgPT4ge1xyXG4gICAgICAgIC8vIOS4pOenjeeKtuaAgSDkuIrkvKDmlofku7bmlbDph49cclxuICAgICAgICAvLyDkuIDkuKog5Yik5pat5b2T5YmN5paH5Lu257G75Z6L5LiO5YWB6K645LiK5Lyg55qE5paH5Lu257G75Z6L5piv5ZCm5LiA6Ie0IOWQjuWNleeslOS4iuS8oCDlm77niYfnsbvlnosg5omT5byA57yW6L6R5qGGXHJcbiAgICAgICAgLy8g5aSa5LiqIOi/h+a7pOaOieaWh+S7tuexu+Wei+S4juWFgeiuuOS4iuS8oOeahOaWh+S7tuexu+Wei+S4jeS4gOiHtOeahOaWh+S7tiDlpJrnrJTmlofku7bkuIrkvKBcclxuXHJcbiAgICAgICAgaWYgKHVwbG9hZEZpbGVMaXN0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgaWYgKGZpbGUgPT09IHVwbG9hZEZpbGVMaXN0LmF0KC0xKSkge1xyXG4gICAgICAgICAgICAgICAgLy/mnIDlkI7kuIDkuKrmlofku7bml7bmiafooYzmiYDmnInnmoTmlofku7bkuIrkvKAg5Zu+54mH6Ieq5Yqo5Y6L57ypMjAwa2Lku6XlhoVcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGVBcmF5eTogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB1cGxvYWRGaWxlTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IHVwbG9hZEZpbGVMaXN0W2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlVHlwZU9wdGlvbiA9IGZpbmRGaWxlVHlwZU9wdGlvbihlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudXBsb2FkRmlsZVR5cGVzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudXBsb2FkRmlsZVR5cGVzLnNvbWUoaXRlbSA9PiBpdGVtID09IGZpbGVUeXBlT3B0aW9uLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVUeXBlT3B0aW9uLnR5cGUgPT09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGF3YWl0IGNvbXByZXNzSW1hZ2UoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbyA9IHRoaXMudXBsb2FkRmlsZXMoZSwgZmlsZVR5cGVPcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlQXJheXkucHVzaChvKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3JrSm9pbihvYnNlcnZhYmxlQXJheXkpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8g6I635Y+W5paH5Lu25a+56LGhXHJcbiAgICAgICAgICAgIGNvbnN0IF9maWxlID0gKGZpbGUub3JpZ2luRmlsZU9iaiB8fCBmaWxlKSBhcyBGaWxlO1xyXG4gICAgICAgICAgICAvLyAvL+aJvuWIsOS4iuS8oOaWh+S7tuaYr+WTquS4quexu+Wei+eahFxyXG4gICAgICAgICAgICBjb25zdCBmaWxlVHlwZU9wdGlvbiA9IGZpbmRGaWxlVHlwZU9wdGlvbihmaWxlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy51cGxvYWRGaWxlVHlwZXMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMudXBsb2FkRmlsZVR5cGVzLnNvbWUoaXRlbSA9PiBpdGVtID09IGZpbGVUeXBlT3B0aW9uLnR5cGUpXHJcbiAgICAgICAgICAgICAgICA6IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVUeXBlT3B0aW9uLnR5cGUgPT09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5a6a5LmJ5paH5Lu26K+75Y+W5a6M5oiQ5ZCO55qE5Zue6LCD5Ye95pWwXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWRpdEltYWdlTW9kYWwoeyBmaWxlU3JjOiBlLnRhcmdldC5yZXN1bHQgfSwgXCJERUZBVUxUXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWQr+WKqOaWh+S7tuivu+WPlui/h+eoi1xyXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKF9maWxlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlcyhmaWxlLCBmaWxlVHlwZU9wdGlvbikuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBBcHA6IEFwcGxpY2F0aW9uLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcml2YXRlIG1vZGFsVXRpbHM6IE1vZGFsVXRpbHNcclxuICAgICkge31cclxuXHJcbiAgICBvblVwbG9hZENhbmNlbENsaWNrKCkge1xyXG4gICAgICAgIHRoaXMub3BlbkVkaXRJbWFnZU1vZGFsKG51bGwsIFwiREVGQVVMVFwiKTtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBkb1N0aChldmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiRURJVFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRWRpdEltYWdlTW9kYWwoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIkRFTEVURVwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWxlKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJET1dOTE9BRFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3RmlsZShldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiRFJPUFBFRFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRmlsZShldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGaWxlKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLkFwcC5odHRwQ2xpZW50LmRlbGV0ZShpdGVtLmZpbGVTcmMpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMub25Pay5lbWl0KHtcclxuICAgICAgICAgICAgY29kZTogXCJERUxFVEVcIixcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlld0ZpbGUoaXRlbSkge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJpbWFnZVwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW1hZ2VCb2FyZChpdGVtLmZpbGVTcmMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwZGZcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQoaXRlbS5maWxlU3JjLCB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIgfSkuc3Vic2NyaWJlKGJsb2IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBkZiA9IG5ldyBCbG9iKFtibG9iXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL3BkZjtjaGFydHNldD11VEYtOFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHBkZik7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAvL+mHiuaUvuWGheWtmO+8iOehruS/neeql+WPo+W3suaJk+W8gOWQjuaJp+ihjO+8iVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKSwgMTAwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoaXRlbS5maWxlU3JjLCBpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpdGVtXHJcbiAgICAgKiBAcGFyYW0gbW9kYWxUeXBlICBERUZBVUxUIOaZrumAmuexu+WeiyDkuI3luKbmnInliKDpmaQg55So5LqO5LiK5Lyg5paH5Lu25ZCOIOaJk+W8gOe8lui+keaooeW8jyAsIElNQUdFIOW4puacieWIoOmZpOWKn+iDvSDnlKjkuo7lm77niYfnvJbovpFcclxuICAgICAqL1xyXG4gICAgb3BlbkVkaXRJbWFnZU1vZGFsKGl0ZW0sIG1vZGFsVHlwZT8pIHtcclxuICAgICAgICBsZXQgZmxpZVNyYyA9IGl0ZW0/LmZpbGVTcmMgfHwgbnVsbDtcclxuICAgICAgICBpZiAoZmxpZVNyYykge1xyXG4gICAgICAgICAgICBpZiAoIW1vZGFsVHlwZSkgZmxpZVNyYyA9IGAke2l0ZW0uZmlsZVNyY30/dGltZXN0YW1wPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kYWxVdGlscy5vcGVuTW9kYWwoe1xyXG4gICAgICAgICAgICBjb250ZW50OiBVY0ZpbGVDYXJkc0Nyb3BJbWFnZU1vZGFsQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VTcmM6IGZsaWVTcmMsXHJcbiAgICAgICAgICAgICAgICBtb2RhbFR5cGU6IG1vZGFsVHlwZSxcclxuICAgICAgICAgICAgICAgIG9uT2s6IGV2ZW50ID0+IHRoaXMuY3JvcEltYWdlTW9kYWxPbk9rKGV2ZW50LCBpdGVtKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL+aJk+W8gG56aW1hZ2XnnIvmnb9cclxuICAgIG9wZW5JbWFnZUJvYXJkKHNyYykge1xyXG4gICAgICAgIHRoaXMuaW1hZ2VHcm91cHMgPSB0aGlzLmZpbGVMaXN0LmZpbHRlcihmID0+IGYudHlwZSA9PT0gXCJpbWFnZVwiKTtcclxuICAgICAgICBzZXRUaW1lb3V0KHQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZXMgPSB0aGlzLm56SW1hZ2VzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGltYWdlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBpbWFnZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHgubmF0aXZlRWxlbWVudC5zcmMgPT0gc3JjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOijgeWJquWvueivneahhiDlm77niYfnvJbovpEg5LiK5LygIOWIoOmZpOWKn+iDvVxyXG4gICAgICogQHBhcmFtIGV2ZW50IOWvueivneahhui/lOWbnuWPguaVsFxyXG4gICAgICogQHBhcmFtIGl0ZW0g5b2T5YmN6YCJ6aG555qE5Y6f5Z6LXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyb3BJbWFnZU1vZGFsT25PayhldmVudCwgaXRlbT8pIHtcclxuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJERUxFVEVcIikge1xyXG4gICAgICAgICAgICB0aGlzLkFwcC5odHRwQ2xpZW50LmRlbGV0ZShpdGVtLmZpbGVTcmMpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uT2suZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiBcIkRFTEVURVwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVUeXBlT3B0aW9uID0gRkxJRVRZUEUuZmluZChmID0+IGYudHlwZSA9PT0gXCJpbWFnZVwiKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gaXRlbT8ubmFtZSB8fCBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzKGV2ZW50LmZpbGUsIGZpbGVUeXBlT3B0aW9uLCBmaWxlTmFtZSkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5maWxlU3JjID0gYCR7aXRlbS5maWxlU3JjfT90aW1lc3RhbXA9JHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICrkuIrkvKDmlrnms5VcclxuICAgICAqIEBwYXJhbSBmaWxlIOS4iuS8oOaJgOmcgOimgeeahOaWh+S7tlxyXG4gICAgICogQHBhcmFtIGZpbGVOYW1lIOaWh+S7tuWQjVxyXG4gICAgICovXHJcbiAgICB1cGxvYWRGaWxlcyhmaWxlLCBmaWxlVHlwZU9wdGlvbiwgZmlsZU5hbWU/KSB7XHJcbiAgICAgICAgbGV0IGlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IHRoaXMubWFzdGVySWQgKyBmaWxlVHlwZU9wdGlvbi50eXBlICsgRGF0ZS5ub3coKSArIGZpbGVUeXBlT3B0aW9uLnN1ZmZpeDtcclxuICAgICAgICAgICAgaXNOZXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdGaWxlID0gZmlsZTtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgbmV3RmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFwcC5odHRwQ2xpZW50LnBvc3QodGhpcy5hcGlVcmwsIGZvcm1EYXRhKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT2suZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiVVBMT0FEXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUNvZGU6IHRoaXMuZmlsZUxpc3QubGVuZ3RoICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZVR5cGVPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRvd25sb2FkRmlsZSh1cmw6IHN0cmluZywgbmFtZSkge1xyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIgfSkuc3Vic2NyaWJlKGJsb2IgPT4ge1xyXG4gICAgICAgICAgICBzYXZlQXMoYmxvYiwgbmFtZSk7IC8vIOS9oOWPr+S7peaMh+WumuS7u+S9leS9oOaDs+imgeeahOaWh+S7tuWQjVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRyb3BGaWxlKGN1cnJlbnRJbmRleCkge1xyXG4gICAgICAgIGxldCBsaW5lQ29kZSA9IGNhbGNOZXdTZXFWYWx1ZShjdXJyZW50SW5kZXgsIHRoaXMuZmlsZUxpc3QsIFwibGluZUNvZGVcIik7XHJcbiAgICAgICAgdGhpcy5maWxlTGlzdFtjdXJyZW50SW5kZXhdLmxpbmVDb2RlID0gbGluZUNvZGU7XHJcbiAgICAgICAgdGhpcy5vbk9rLmVtaXQoe1xyXG4gICAgICAgICAgICBjb2RlOiBcIlVQREFURVwiLFxyXG4gICAgICAgICAgICBpZDogdGhpcy5maWxlTGlzdFtjdXJyZW50SW5kZXhdLmlkLFxyXG4gICAgICAgICAgICB1cGRhdGVEYXRhOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBcImxpbmVDb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJAaWYodG9vbGJhclZpc2libGUpe1xyXG48dWMtZmlsZS10b29sYmFyXHJcbiAgICBbKG1vZGUpXT1cIm1vZGVcIlxyXG4gICAgW2JlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIlxyXG4gICAgW2FsbG93VXBsb2FkXT1cImFsbG93VXBsb2FkXCJcclxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAob25VcGxvYWRDYW5jZWxDbGljayk9XCJvblVwbG9hZENhbmNlbENsaWNrKClcIlxyXG4vPlxyXG5cclxufSBAaWYobW9kZSA9PT0gJ2NhcmQnKXtcclxuPHVjLWZpbGUtY2FyZC1saXN0XHJcbiAgICBbZGF0YUxpc3RdPVwiZmlsZUxpc3RcIlxyXG4gICAgW2JlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIlxyXG4gICAgW2FsbG93VXBsb2FkXT1cImFsbG93VXBsb2FkXCJcclxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAob25VcGxvYWRDYW5jZWxDbGljayk9XCJvblVwbG9hZENhbmNlbENsaWNrKClcIlxyXG4gICAgKG9uQ3JhZENsaWNrKT1cImRvU3RoKCRldmVudClcIlxyXG4vPlxyXG59QGVsc2V7XHJcbjx1Yy1maWxlLXRhYmxlLWxpc3RcclxuICAgIFtkYXRhTGlzdF09XCJmaWxlTGlzdFwiXHJcbiAgICBbYmVmb3JlVXBsb2FkXT1cImJlZm9yZVVwbG9hZFwiXHJcbiAgICBbYWxsb3dVcGxvYWRdPVwidG9vbGJhclZpc2libGU/ZmFsc2U6IGFsbG93VXBsb2FkIFwiXHJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgKG9uVGFibGVSb3dDbGljayk9XCJkb1N0aCgkZXZlbnQpXCJcclxuICAgIChvblVwbG9hZENhbmNlbENsaWNrKT1cIm9uVXBsb2FkQ2FuY2VsQ2xpY2soKVwiXHJcbi8+XHJcblxyXG59IEBpZihpbWFnZUdyb3Vwcy5sZW5ndGgpe1xyXG48bnotaW1hZ2UtZ3JvdXAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgY2xhc3M9XCJuekltYWdlXCI+XHJcbiAgICBAZm9yIChpdGVtIG9mIGltYWdlR3JvdXBzOyB0cmFjayBpdGVtKSB7XHJcbiAgICA8aW1nIG56LWltYWdlICNuekltYWdlIFtuelNyY109XCJpdGVtLmZpbGVTcmNcIiAoY2xvc2UpPVwiaW1hZ2VHcm91cHM9W11cIiAvPlxyXG4gICAgfVxyXG48L256LWltYWdlLWdyb3VwPlxyXG59XHJcbiJdfQ==