@libs-ui/components-gallery 0.2.54 → 0.2.56
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.
|
@@ -24,6 +24,7 @@ export class LibsUiComponentsGalleryComponent {
|
|
|
24
24
|
imageArrayStringConvert = input(); // sử dụng trong 1 số trường hợp images là Array<string>
|
|
25
25
|
/* OUTPUT */
|
|
26
26
|
outFunctionsControl = output();
|
|
27
|
+
outViewerEvent = output();
|
|
27
28
|
/* INJECT */
|
|
28
29
|
dynamicComponent = inject(LibsUiDynamicComponentService);
|
|
29
30
|
constructor() {
|
|
@@ -63,6 +64,7 @@ export class LibsUiComponentsGalleryComponent {
|
|
|
63
64
|
this.closePopup();
|
|
64
65
|
});
|
|
65
66
|
this.dynamicComponent.addToBody(this.viewerRef);
|
|
67
|
+
this.outViewerEvent.emit('show');
|
|
66
68
|
if (isEmbedFrame()) {
|
|
67
69
|
const data = {
|
|
68
70
|
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
@@ -87,20 +89,23 @@ export class LibsUiComponentsGalleryComponent {
|
|
|
87
89
|
}
|
|
88
90
|
closePopup() {
|
|
89
91
|
clearInterval(this.idInterval());
|
|
92
|
+
if (this.viewerRef) {
|
|
93
|
+
this.outViewerEvent.emit('remove');
|
|
94
|
+
if (isEmbedFrame()) {
|
|
95
|
+
const data = {
|
|
96
|
+
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
97
|
+
response: {
|
|
98
|
+
message: 'close',
|
|
99
|
+
state: false,
|
|
100
|
+
idOverlay: this.idOverlay
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
UtilsCommunicateMicro.PostMessageToParent(data);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
90
106
|
this.dynamicComponent.remove(this.viewerRef);
|
|
91
107
|
this.viewerRef = undefined;
|
|
92
108
|
this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected) => this.handlerSelectImage(undefined, imageSelected) });
|
|
93
|
-
if (isEmbedFrame()) {
|
|
94
|
-
const data = {
|
|
95
|
-
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
96
|
-
response: {
|
|
97
|
-
message: 'close',
|
|
98
|
-
state: false,
|
|
99
|
-
idOverlay: this.idOverlay
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
UtilsCommunicateMicro.PostMessageToParent(data);
|
|
103
|
-
}
|
|
104
109
|
}
|
|
105
110
|
get ViewerRef() {
|
|
106
111
|
return this.viewerRef;
|
|
@@ -110,7 +115,7 @@ export class LibsUiComponentsGalleryComponent {
|
|
|
110
115
|
this.closePopup();
|
|
111
116
|
}
|
|
112
117
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
113
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryComponent, isStandalone: true, selector: "libs_ui-components-gallery", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: false, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: false, transformFunction: null }, ignoreOverlayCountImage: { classPropertyName: "ignoreOverlayCountImage", publicName: "ignoreOverlayCountImage", isSignal: true, isRequired: false, transformFunction: null }, imageArrayStringConvert: { classPropertyName: "imageArrayStringConvert", publicName: "imageArrayStringConvert", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { images: "imagesChange", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "@if (images()) {\n <div class=\"flex nowrap w-100 h-100\">\n @for (image of imagesDisplay(); track $index; let last = $last) {\n <div class=\"w-full h-full libs-ui-border-general relative cursor-pointer\"\n [class.mr-[12px]]=\"!last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex libs-uipercent-max-height-100 libs-uipercent-max-width-100 m-auto\"\n (error)='handlerImageError($event, image)' />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async\"></div>\n }\n </div>\n @if (last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-[#000] opacity-5\">\n </div>\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center\">\n <span class=\"libs-ui-font-h3s libs-ui-font-size-20px text-[#ffffff]\">+ {{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
118
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryComponent, isStandalone: true, selector: "libs_ui-components-gallery", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: false, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: false, transformFunction: null }, ignoreOverlayCountImage: { classPropertyName: "ignoreOverlayCountImage", publicName: "ignoreOverlayCountImage", isSignal: true, isRequired: false, transformFunction: null }, imageArrayStringConvert: { classPropertyName: "imageArrayStringConvert", publicName: "imageArrayStringConvert", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { images: "imagesChange", outFunctionsControl: "outFunctionsControl", outViewerEvent: "outViewerEvent" }, ngImport: i0, template: "@if (images()) {\n <div class=\"flex nowrap w-100 h-100\">\n @for (image of imagesDisplay(); track $index; let last = $last) {\n <div class=\"w-full h-full libs-ui-border-general relative cursor-pointer\"\n [class.mr-[12px]]=\"!last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex libs-uipercent-max-height-100 libs-uipercent-max-width-100 m-auto\"\n (error)='handlerImageError($event, image)' />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async\"></div>\n }\n </div>\n @if (last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-[#000] opacity-5\">\n </div>\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center\">\n <span class=\"libs-ui-font-h3s libs-ui-font-size-20px text-[#ffffff]\">+ {{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
114
119
|
}
|
|
115
120
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryComponent, decorators: [{
|
|
116
121
|
type: Component,
|
|
@@ -119,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
119
124
|
LibsUiIconsGetIconComponentPipe
|
|
120
125
|
], template: "@if (images()) {\n <div class=\"flex nowrap w-100 h-100\">\n @for (image of imagesDisplay(); track $index; let last = $last) {\n <div class=\"w-full h-full libs-ui-border-general relative cursor-pointer\"\n [class.mr-[12px]]=\"!last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex libs-uipercent-max-height-100 libs-uipercent-max-width-100 m-auto\"\n (error)='handlerImageError($event, image)' />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async\"></div>\n }\n </div>\n @if (last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-[#000] opacity-5\">\n </div>\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center\">\n <span class=\"libs-ui-font-h3s libs-ui-font-size-20px text-[#ffffff]\">+ {{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n" }]
|
|
121
126
|
}], ctorParameters: () => [] });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUosT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7O0FBZ0IxQixNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLGNBQWM7SUFDSixhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUssU0FBUyxHQUFHLE1BQU0sQ0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFVBQVUsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxD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Q0FBZ0M7a0JBWjVDLFNBQVM7K0JBRUUsNEJBQTRCLGNBRzFCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxpQkFBaUIsRUFBRSxTQUFTO3dCQUM1QiwrQkFBK0I7cUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfSBmcm9tICdAbGlicy11aS9pY29ucyc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNFbWJlZEZyYW1lLCBVdGlsc0NvbW11bmljYXRlTWljcm8sIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBJR2FsbGVyeUZ1bmN0aW9uc0NvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbnMtY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdlci92aWV3ZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWdhbGxlcnknLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dhbGxlcnkuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NvbXBvbmVudE91dGxldCwgQXN5bmNQaXBlLFxuICAgIExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzR2FsbGVyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGltYWdlc0Rpc3BsYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VzKCkuc2xpY2UodGhpcy5zdGFydCgpLCB0aGlzLmVuZCgpKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBpZE92ZXJsYXkgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpO1xuICBwcml2YXRlIGlkSW50ZXJ2YWwgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHZpZXdlclJlZjogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNHYWxsZXJ5Vmlld2VyQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSBpbWFnZXMgPSBtb2RlbC5yZXF1aXJlZDxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj4oKTtcbiAgcmVhZG9ubHkgc3RhcnQgPSBpbnB1dDxudW1iZXI+KDApO1xuICByZWFkb25seSBlbmQgPSBpbnB1dDxudW1iZXI+KDMpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KDEyMDApO1xuICByZWFkb25seSBmaWVsZERpc3BsYXlTcmNJbWFnZSA9IGlucHV0PHN0cmluZz4oJ3VybCcpO1xuICByZWFkb25seSBpZ25vcmVPdmVybGF5Q291bnRJbWFnZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGltYWdlQXJyYXlTdHJpbmdDb252ZXJ0ID0gaW5wdXQ8QXJyYXk8c3RyaW5nPj4oKTsgLy8gc+G7rSBk4bulbmcgdHJvbmcgMSBz4buRIHRyxrDhu51uZyBo4bujcCBpbWFnZXMgbMOgIEFycmF5PHN0cmluZz5cblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJR2FsbGVyeUZ1bmN0aW9uc0NvbnRyb2xFdmVudD4oKTtcblxuICAvKiBJTkpFQ1QgKi9cbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50ID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaW1hZ2VBcnJheVN0cmluZ0NvbnZlcnQoKT8ubGVuZ3RoICYmIHRoaXMuZmllbGREaXNwbGF5U3JjSW1hZ2UoKSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRJbWFnZXMgPSB0aGlzLmltYWdlQXJyYXlTdHJpbmdDb252ZXJ0KCk/Lm1hcChpdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RoaXMuZmllbGREaXNwbGF5U3JjSW1hZ2UoKV06IGl0ZW1cbiAgICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICAgIH0pIHx8IFtdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VzLnNldChjb252ZXJ0ZWRJbWFnZXMpO1xuICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBvcGVuOiAoaW1hZ2VTZWxlY3RlZDogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdGhpcy5oYW5kbGVyU2VsZWN0SW1hZ2UodW5kZWZpbmVkLCBpbWFnZVNlbGVjdGVkKSxcbiAgICAgIHZpZXdlclJlZjogdGhpcy5WaWV3ZXJSZWZcbiAgICB9KVxuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0SW1hZ2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCB1bmRlZmluZWQsIGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy52aWV3ZXJSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3ZXJDb21wb25lbnQgPSBhd2FpdCBpbXBvcnQoJy4vdmlld2VyL3ZpZXdlci5jb21wb25lbnQnKS50aGVuKGMgPT4gYy5MaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudCk7XG5cbiAgICB0aGlzLnZpZXdlclJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh2aWV3ZXJDb21wb25lbnQpO1xuXG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyB2aWV3ZXJSZWY6IHRoaXMuVmlld2VyUmVmLCBvcGVuOiAoaW1hZ2VTZWxlY3RlZDogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdGhpcy5oYW5kbGVyU2VsZWN0SW1hZ2UodW5kZWZpbmVkLCBpbWFnZVNlbGVjdGVkKSB9KTtcblxuICAgIHRoaXMudmlld2VyUmVmLnNldElucHV0KCdmaWVsZERpc3BsYXlTcmNJbWFnZScsIHRoaXMuZmllbGREaXNwbGF5U3JjSW1hZ2UoKSk7XG4gICAgdGhpcy52aWV3ZXJSZWYuc2V0SW5wdXQoJ2ltYWdlcycsIHRoaXMuaW1hZ2VzKCkpO1xuICAgIHRoaXMudmlld2VyUmVmLnNldElucHV0KCdpbWFnZVNlbGVjdGVkJywgaW1hZ2VTZWxlY3RlZCk7XG4gICAgdGhpcy52aWV3ZXJSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkpO1xuICAgIHRoaXMudmlld2VyUmVmLnNldElucHV0KCdzaW5nbGVJbWFnZScsIHRoaXMuaW1hZ2VzKCkubGVuZ3RoIDw9IDEpO1xuXG4gICAgY29uc3Qgc3ViID0gdGhpcy52aWV3ZXJSZWYuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuYWRkVG9Cb2R5KHRoaXMudmlld2VyUmVmKTtcblxuICAgIGlmIChpc0VtYmVkRnJhbWUoKSkge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdHlwZTogVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLktFWV9NRVNTQUdFX01PREFMLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdvcGVuJyxcbiAgICAgICAgICBzdGF0ZTogdHJ1ZSxcbiAgICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5LFxuICAgICAgICAgIHRpbWVMaXZlVXBkYXRlOiBkYXlqcygpLnVuaXgoKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcblxuICAgICAgdGhpcy5pZEludGVydmFsLnNldCgoc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBkYXRhLnJlc3BvbnNlLnRpbWVMaXZlVXBkYXRlID0gZGF5anMoKS51bml4KCk7XG5cbiAgICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gICAgICB9LCAyMDAwKSBhcyB1bmtub3duKSBhcyBudW1iZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VFcnJvcihlOiBFcnJvckV2ZW50LCBpbWFnZTogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IGV2ZW50ID0gZSBhcyBJRXZlbnQ7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGltYWdlWydpc0Vycm9yJ10gPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVBvcHVwKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pZEludGVydmFsKCkpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudC5yZW1vdmUodGhpcy52aWV3ZXJSZWYpO1xuICAgIHRoaXMudmlld2VyUmVmID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgdmlld2VyUmVmOiB0aGlzLlZpZXdlclJlZiwgb3BlbjogKGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHRoaXMuaGFuZGxlclNlbGVjdEltYWdlKHVuZGVmaW5lZCwgaW1hZ2VTZWxlY3RlZCkgfSk7XG4gICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuS0VZX01FU1NBR0VfTU9EQUwsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ2Nsb3NlJyxcbiAgICAgICAgICBzdGF0ZTogZmFsc2UsXG4gICAgICAgICAgaWRPdmVybGF5OiB0aGlzLmlkT3ZlcmxheVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBWaWV3ZXJSZWYoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld2VyUmVmO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy52aWV3ZXJSZWY/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgfVxufVxuIiwiQGlmIChpbWFnZXMoKSkge1xuICA8ZGl2IGNsYXNzPVwiZmxleCBub3dyYXAgdy0xMDAgaC0xMDBcIj5cbiAgICBAZm9yIChpbWFnZSBvZiBpbWFnZXNEaXNwbGF5KCk7IHRyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBoLWZ1bGwgbGlicy11aS1ib3JkZXItZ2VuZXJhbCByZWxhdGl2ZSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIFtjbGFzcy5tci1bMTJweF1dPVwiIWxhc3RcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEltYWdlKCRldmVudCwgaW1hZ2UpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgQGlmICghaW1hZ2VbJ2lzRXJyb3InXSkge1xuICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGxpYnMtdWlwZXJjZW50LW1heC1oZWlnaHQtMTAwIGxpYnMtdWlwZXJjZW50LW1heC13aWR0aC0xMDAgbS1hdXRvXCJcbiAgICAgICAgICAgICAgKGVycm9yKT0naGFuZGxlckltYWdlRXJyb3IoJGV2ZW50LCBpbWFnZSknIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoaW1hZ2VbJ2lzRXJyb3InXSkge1xuICAgICAgICAgICAgPGRpdiAqbmdDb21wb25lbnRPdXRsZXQ9XCInaW1hZ2UtZGVmYXVsdCcgfCBMaWJzVWlJY29uc0dldEljb25Db21wb25lbnRQaXBlIHwgYXN5bmNcIj48L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKGxhc3QgJiYgaW1hZ2VzKCkubGVuZ3RoID4gZW5kKCkgJiYgIWlnbm9yZU92ZXJsYXlDb3VudEltYWdlKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaC1mdWxsIGFic29sdXRlIHRvcC0wIGxlZnQtMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctWyMwMDBdIG9wYWNpdHktNVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDNzIGxpYnMtdWktZm9udC1zaXplLTIwcHggdGV4dC1bI2ZmZmZmZl1cIj4rIHt7IGltYWdlcygpLmxlbmd0aCAtIGVuZCgpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUosT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7O0FBZ0IxQixNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLGNBQWM7SUFDSixhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUssU0FBUyxHQUFHLE1BQU0sQ0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFVBQVUsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxD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QUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO3dHQXBJVSxnQ0FBZ0M7NEZBQWhDLGdDQUFnQyxxckNDdkI3QyxpeUNBMkJBLDBERFJJLGlCQUFpQiwrT0FBRSxTQUFTLHlDQUM1QiwrQkFBK0I7OzRGQUd0QixnQ0FBZ0M7a0JBWjVDLFNBQVM7K0JBRUUsNEJBQTRCLGNBRzFCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxpQkFBaUIsRUFBRSxTQUFTO3dCQUM1QiwrQkFBK0I7cUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfSBmcm9tICdAbGlicy11aS9pY29ucyc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNFbWJlZEZyYW1lLCBVdGlsc0NvbW11bmljYXRlTWljcm8sIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBJR2FsbGVyeUZ1bmN0aW9uc0NvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbnMtY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdlci92aWV3ZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWdhbGxlcnknLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dhbGxlcnkuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NvbXBvbmVudE91dGxldCwgQXN5bmNQaXBlLFxuICAgIExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzR2FsbGVyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGltYWdlc0Rpc3BsYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VzKCkuc2xpY2UodGhpcy5zdGFydCgpLCB0aGlzLmVuZCgpKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBpZE92ZXJsYXkgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpO1xuICBwcml2YXRlIGlkSW50ZXJ2YWwgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHZpZXdlclJlZjogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNHYWxsZXJ5Vmlld2VyQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSBpbWFnZXMgPSBtb2RlbC5yZXF1aXJlZDxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj4oKTtcbiAgcmVhZG9ubHkgc3RhcnQgPSBpbnB1dDxudW1iZXI+KDApO1xuICByZWFkb25seSBlbmQgPSBpbnB1dDxudW1iZXI+KDMpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KDEyMDApO1xuICByZWFkb25seSBmaWVsZERpc3BsYXlTcmNJbWFnZSA9IGlucHV0PHN0cmluZz4oJ3VybCcpO1xuICByZWFkb25seSBpZ25vcmVPdmVybGF5Q291bnRJbWFnZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGltYWdlQXJyYXlTdHJpbmdDb252ZXJ0ID0gaW5wdXQ8QXJyYXk8c3RyaW5nPj4oKTsgLy8gc+G7rSBk4bulbmcgdHJvbmcgMSBz4buRIHRyxrDhu51uZyBo4bujcCBpbWFnZXMgbMOgIEFycmF5PHN0cmluZz5cblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJR2FsbGVyeUZ1bmN0aW9uc0NvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Vmlld2VyRXZlbnQgPSBvdXRwdXQ8J3Nob3cnIHwgJ3JlbW92ZSc+KCk7XG5cbiAgLyogSU5KRUNUICovXG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudCA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmltYWdlQXJyYXlTdHJpbmdDb252ZXJ0KCk/Lmxlbmd0aCAmJiB0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCkpIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkSW1hZ2VzID0gdGhpcy5pbWFnZUFycmF5U3RyaW5nQ29udmVydCgpPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldOiBpdGVtXG4gICAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICB0aGlzLmltYWdlcy5zZXQoY29udmVydGVkSW1hZ2VzKTtcbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgb3BlbjogKGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHRoaXMuaGFuZGxlclNlbGVjdEltYWdlKHVuZGVmaW5lZCwgaW1hZ2VTZWxlY3RlZCksXG4gICAgICB2aWV3ZXJSZWY6IHRoaXMuVmlld2VyUmVmXG4gICAgfSlcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNlbGVjdEltYWdlKGV2ZW50OiBNb3VzZUV2ZW50IHwgdW5kZWZpbmVkLCBpbWFnZVNlbGVjdGVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMudmlld2VyUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld2VyQ29tcG9uZW50ID0gYXdhaXQgaW1wb3J0KCcuL3ZpZXdlci92aWV3ZXIuY29tcG9uZW50JykudGhlbihjID0+IGMuTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuXG4gICAgdGhpcy52aWV3ZXJSZWYgPSB0aGlzLmR5bmFtaWNDb21wb25lbnQucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkodmlld2VyQ29tcG9uZW50KTtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7IHZpZXdlclJlZjogdGhpcy5WaWV3ZXJSZWYsIG9wZW46IChpbWFnZVNlbGVjdGVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZSh1bmRlZmluZWQsIGltYWdlU2VsZWN0ZWQpIH0pO1xuXG4gICAgdGhpcy52aWV3ZXJSZWYuc2V0SW5wdXQoJ2ZpZWxkRGlzcGxheVNyY0ltYWdlJywgdGhpcy5maWVsZERpc3BsYXlTcmNJbWFnZSgpKTtcbiAgICB0aGlzLnZpZXdlclJlZi5zZXRJbnB1dCgnaW1hZ2VzJywgdGhpcy5pbWFnZXMoKSk7XG4gICAgdGhpcy52aWV3ZXJSZWYuc2V0SW5wdXQoJ2ltYWdlU2VsZWN0ZWQnLCBpbWFnZVNlbGVjdGVkKTtcbiAgICB0aGlzLnZpZXdlclJlZi5zZXRJbnB1dCgnekluZGV4JywgdGhpcy56SW5kZXgoKSk7XG4gICAgdGhpcy52aWV3ZXJSZWYuc2V0SW5wdXQoJ3NpbmdsZUltYWdlJywgdGhpcy5pbWFnZXMoKS5sZW5ndGggPD0gMSk7XG5cbiAgICBjb25zdCBzdWIgPSB0aGlzLnZpZXdlclJlZi5pbnN0YW5jZS5vdXRDbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudC5hZGRUb0JvZHkodGhpcy52aWV3ZXJSZWYpO1xuICAgIHRoaXMub3V0Vmlld2VyRXZlbnQuZW1pdCgnc2hvdycpO1xuXG4gICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuS0VZX01FU1NBR0VfTU9EQUwsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ29wZW4nLFxuICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgIGlkT3ZlcmxheTogdGhpcy5pZE92ZXJsYXksXG4gICAgICAgICAgdGltZUxpdmVVcGRhdGU6IGRheWpzKCkudW5peCgpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuXG4gICAgICB0aGlzLmlkSW50ZXJ2YWwuc2V0KChzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGRhdGEucmVzcG9uc2UudGltZUxpdmVVcGRhdGUgPSBkYXlqcygpLnVuaXgoKTtcblxuICAgICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcbiAgICAgIH0sIDIwMDApIGFzIHVua25vd24pIGFzIG51bWJlcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUVycm9yKGU6IEVycm9yRXZlbnQsIGltYWdlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgY29uc3QgZXZlbnQgPSBlIGFzIElFdmVudDtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaW1hZ2VbJ2lzRXJyb3InXSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlUG9wdXAoKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmlkSW50ZXJ2YWwoKSk7XG4gICAgaWYgKHRoaXMudmlld2VyUmVmKSB7XG4gICAgICB0aGlzLm91dFZpZXdlckV2ZW50LmVtaXQoJ3JlbW92ZScpO1xuICAgICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgdHlwZTogVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLktFWV9NRVNTQUdFX01PREFMLFxuICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiAnY2xvc2UnLFxuICAgICAgICAgICAgc3RhdGU6IGZhbHNlLFxuICAgICAgICAgICAgaWRPdmVybGF5OiB0aGlzLmlkT3ZlcmxheVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50LnJlbW92ZSh0aGlzLnZpZXdlclJlZik7XG4gICAgdGhpcy52aWV3ZXJSZWYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyB2aWV3ZXJSZWY6IHRoaXMuVmlld2VyUmVmLCBvcGVuOiAoaW1hZ2VTZWxlY3RlZDogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdGhpcy5oYW5kbGVyU2VsZWN0SW1hZ2UodW5kZWZpbmVkLCBpbWFnZVNlbGVjdGVkKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IFZpZXdlclJlZigpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3ZXJSZWY7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnZpZXdlclJlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xuICB9XG59XG4iLCJAaWYgKGltYWdlcygpKSB7XG4gIDxkaXYgY2xhc3M9XCJmbGV4IG5vd3JhcCB3LTEwMCBoLTEwMFwiPlxuICAgIEBmb3IgKGltYWdlIG9mIGltYWdlc0Rpc3BsYXkoKTsgdHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHJlbGF0aXZlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgW2NsYXNzLm1yLVsxMnB4XV09XCIhbGFzdFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVyU2VsZWN0SW1hZ2UoJGV2ZW50LCBpbWFnZSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICBAaWYgKCFpbWFnZVsnaXNFcnJvciddKSB7XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV1cIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggbGlicy11aXBlcmNlbnQtbWF4LWhlaWdodC0xMDAgbGlicy11aXBlcmNlbnQtbWF4LXdpZHRoLTEwMCBtLWF1dG9cIlxuICAgICAgICAgICAgICAoZXJyb3IpPSdoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGltYWdlKScgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChpbWFnZVsnaXNFcnJvciddKSB7XG4gICAgICAgICAgICA8ZGl2ICpuZ0NvbXBvbmVudE91dGxldD1cIidpbWFnZS1kZWZhdWx0JyB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luY1wiPjwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAobGFzdCAmJiBpbWFnZXMoKS5sZW5ndGggPiBlbmQoKSAmJiAhaWdub3JlT3ZlcmxheUNvdW50SW1hZ2UoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1bIzAwMF0gb3BhY2l0eS01XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGgtZnVsbCBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oM3MgbGlicy11aS1mb250LXNpemUtMjBweCB0ZXh0LVsjZmZmZmZmXVwiPisge3sgaW1hZ2VzKCkubGVuZ3RoIC0gZW5kKCkgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|
|
@@ -25,6 +25,7 @@ class LibsUiComponentsGalleryComponent {
|
|
|
25
25
|
imageArrayStringConvert = input(); // sử dụng trong 1 số trường hợp images là Array<string>
|
|
26
26
|
/* OUTPUT */
|
|
27
27
|
outFunctionsControl = output();
|
|
28
|
+
outViewerEvent = output();
|
|
28
29
|
/* INJECT */
|
|
29
30
|
dynamicComponent = inject(LibsUiDynamicComponentService);
|
|
30
31
|
constructor() {
|
|
@@ -64,6 +65,7 @@ class LibsUiComponentsGalleryComponent {
|
|
|
64
65
|
this.closePopup();
|
|
65
66
|
});
|
|
66
67
|
this.dynamicComponent.addToBody(this.viewerRef);
|
|
68
|
+
this.outViewerEvent.emit('show');
|
|
67
69
|
if (isEmbedFrame()) {
|
|
68
70
|
const data = {
|
|
69
71
|
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
@@ -88,20 +90,23 @@ class LibsUiComponentsGalleryComponent {
|
|
|
88
90
|
}
|
|
89
91
|
closePopup() {
|
|
90
92
|
clearInterval(this.idInterval());
|
|
93
|
+
if (this.viewerRef) {
|
|
94
|
+
this.outViewerEvent.emit('remove');
|
|
95
|
+
if (isEmbedFrame()) {
|
|
96
|
+
const data = {
|
|
97
|
+
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
98
|
+
response: {
|
|
99
|
+
message: 'close',
|
|
100
|
+
state: false,
|
|
101
|
+
idOverlay: this.idOverlay
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
UtilsCommunicateMicro.PostMessageToParent(data);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
91
107
|
this.dynamicComponent.remove(this.viewerRef);
|
|
92
108
|
this.viewerRef = undefined;
|
|
93
109
|
this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected) => this.handlerSelectImage(undefined, imageSelected) });
|
|
94
|
-
if (isEmbedFrame()) {
|
|
95
|
-
const data = {
|
|
96
|
-
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
97
|
-
response: {
|
|
98
|
-
message: 'close',
|
|
99
|
-
state: false,
|
|
100
|
-
idOverlay: this.idOverlay
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
UtilsCommunicateMicro.PostMessageToParent(data);
|
|
104
|
-
}
|
|
105
110
|
}
|
|
106
111
|
get ViewerRef() {
|
|
107
112
|
return this.viewerRef;
|
|
@@ -111,7 +116,7 @@ class LibsUiComponentsGalleryComponent {
|
|
|
111
116
|
this.closePopup();
|
|
112
117
|
}
|
|
113
118
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
114
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryComponent, isStandalone: true, selector: "libs_ui-components-gallery", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: false, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: false, transformFunction: null }, ignoreOverlayCountImage: { classPropertyName: "ignoreOverlayCountImage", publicName: "ignoreOverlayCountImage", isSignal: true, isRequired: false, transformFunction: null }, imageArrayStringConvert: { classPropertyName: "imageArrayStringConvert", publicName: "imageArrayStringConvert", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { images: "imagesChange", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "@if (images()) {\n <div class=\"flex nowrap w-100 h-100\">\n @for (image of imagesDisplay(); track $index; let last = $last) {\n <div class=\"w-full h-full libs-ui-border-general relative cursor-pointer\"\n [class.mr-[12px]]=\"!last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex libs-uipercent-max-height-100 libs-uipercent-max-width-100 m-auto\"\n (error)='handlerImageError($event, image)' />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async\"></div>\n }\n </div>\n @if (last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-[#000] opacity-5\">\n </div>\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center\">\n <span class=\"libs-ui-font-h3s libs-ui-font-size-20px text-[#ffffff]\">+ {{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
119
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryComponent, isStandalone: true, selector: "libs_ui-components-gallery", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: false, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: false, transformFunction: null }, ignoreOverlayCountImage: { classPropertyName: "ignoreOverlayCountImage", publicName: "ignoreOverlayCountImage", isSignal: true, isRequired: false, transformFunction: null }, imageArrayStringConvert: { classPropertyName: "imageArrayStringConvert", publicName: "imageArrayStringConvert", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { images: "imagesChange", outFunctionsControl: "outFunctionsControl", outViewerEvent: "outViewerEvent" }, ngImport: i0, template: "@if (images()) {\n <div class=\"flex nowrap w-100 h-100\">\n @for (image of imagesDisplay(); track $index; let last = $last) {\n <div class=\"w-full h-full libs-ui-border-general relative cursor-pointer\"\n [class.mr-[12px]]=\"!last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex libs-uipercent-max-height-100 libs-uipercent-max-width-100 m-auto\"\n (error)='handlerImageError($event, image)' />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async\"></div>\n }\n </div>\n @if (last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-[#000] opacity-5\">\n </div>\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center\">\n <span class=\"libs-ui-font-h3s libs-ui-font-size-20px text-[#ffffff]\">+ {{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
115
120
|
}
|
|
116
121
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryComponent, decorators: [{
|
|
117
122
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-gallery.mjs","sources":["../../../../../libs-ui/components/gallery/src/gallery.component.ts","../../../../../libs-ui/components/gallery/src/gallery.component.html","../../../../../libs-ui/components/gallery/src/libs-ui-components-gallery.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ComponentRef, computed, effect, inject, input, model, OnDestroy, OnInit, output, signal } from '@angular/core';\nimport { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { isEmbedFrame, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport dayjs from 'dayjs';\nimport { IGalleryFunctionsControlEvent } from './interfaces/functions-control-event.interface';\nimport { LibsUiComponentsGalleryViewerComponent } from './viewer/viewer.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-gallery',\n templateUrl: './gallery.component.html',\n styleUrls: ['./gallery.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgComponentOutlet, AsyncPipe,\n LibsUiIconsGetIconComponentPipe\n ]\n})\nexport class LibsUiComponentsGalleryComponent implements OnInit, OnDestroy {\n /* PROPERTY */\n protected imagesDisplay = computed(() => {\n return this.images().slice(this.start(), this.end());\n });\n\n private idOverlay = signal<string>(uuid());\n private idInterval = signal<number | undefined>(undefined);\n private viewerRef: ComponentRef<LibsUiComponentsGalleryViewerComponent> | undefined;\n\n /* INPUT */\n readonly images = model.required<Array<Record<string, any>>>();\n readonly start = input<number>(0);\n readonly end = input<number>(3);\n readonly zIndex = input<number>(1200);\n readonly fieldDisplaySrcImage = input<string>('url');\n readonly ignoreOverlayCountImage = input<boolean>();\n readonly imageArrayStringConvert = input<Array<string>>(); // sử dụng trong 1 số trường hợp images là Array<string>\n\n /* OUTPUT */\n readonly outFunctionsControl = output<IGalleryFunctionsControlEvent>();\n\n /* INJECT */\n private dynamicComponent = inject(LibsUiDynamicComponentService);\n\n constructor() {\n effect(() => {\n if (this.imageArrayStringConvert()?.length && this.fieldDisplaySrcImage()) {\n const convertedImages = this.imageArrayStringConvert()?.map(item => {\n return {\n [this.fieldDisplaySrcImage()]: item\n } as Record<string, any>;\n }) || [];\n\n this.images.set(convertedImages);\n }\n }, { allowSignalWrites: true });\n }\n\n ngOnInit() {\n this.outFunctionsControl.emit({\n open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected),\n viewerRef: this.ViewerRef\n })\n }\n\n /* FUNCTIONS */\n protected async handlerSelectImage(event: MouseEvent | undefined, imageSelected: Record<string, any>) {\n event?.stopPropagation();\n\n if (this.viewerRef) {\n return;\n }\n\n const viewerComponent = await import('./viewer/viewer.component').then(c => c.LibsUiComponentsGalleryViewerComponent);\n\n this.viewerRef = this.dynamicComponent.resolveComponentFactory(viewerComponent);\n\n this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected) });\n\n this.viewerRef.setInput('fieldDisplaySrcImage', this.fieldDisplaySrcImage());\n this.viewerRef.setInput('images', this.images());\n this.viewerRef.setInput('imageSelected', imageSelected);\n this.viewerRef.setInput('zIndex', this.zIndex());\n this.viewerRef.setInput('singleImage', this.images().length <= 1);\n\n const sub = this.viewerRef.instance.outClose.subscribe(() => {\n sub.unsubscribe();\n this.closePopup();\n });\n\n this.dynamicComponent.addToBody(this.viewerRef);\n\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay,\n timeLiveUpdate: dayjs().unix()\n }\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n this.idInterval.set((setInterval(() => {\n data.response.timeLiveUpdate = dayjs().unix();\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }, 2000) as unknown) as number);\n }\n }\n\n protected handlerImageError(e: ErrorEvent, image: Record<string, any>) {\n const event = e as IEvent;\n\n event.stopPropagation();\n\n image['isError'] = true;\n }\n\n private closePopup() {\n clearInterval(this.idInterval());\n this.dynamicComponent.remove(this.viewerRef);\n this.viewerRef = undefined;\n this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected) });\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay\n }\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n\n private get ViewerRef() {\n return this.viewerRef;\n }\n\n ngOnDestroy() {\n this.viewerRef?.destroy();\n this.closePopup();\n }\n}\n","@if (images()) {\n <div class=\"flex nowrap w-100 h-100\">\n @for (image of imagesDisplay(); track $index; let last = $last) {\n <div class=\"w-full h-full libs-ui-border-general relative cursor-pointer\"\n [class.mr-[12px]]=\"!last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex libs-uipercent-max-height-100 libs-uipercent-max-width-100 m-auto\"\n (error)='handlerImageError($event, image)' />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async\"></div>\n }\n </div>\n @if (last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-[#000] opacity-5\">\n </div>\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center\">\n <span class=\"libs-ui-font-h3s libs-ui-font-size-20px text-[#ffffff]\">+ {{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-gallery.mjs","sources":["../../../../../libs-ui/components/gallery/src/gallery.component.ts","../../../../../libs-ui/components/gallery/src/gallery.component.html","../../../../../libs-ui/components/gallery/src/libs-ui-components-gallery.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ComponentRef, computed, effect, inject, input, model, OnDestroy, OnInit, output, signal } from '@angular/core';\nimport { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { isEmbedFrame, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport dayjs from 'dayjs';\nimport { IGalleryFunctionsControlEvent } from './interfaces/functions-control-event.interface';\nimport { LibsUiComponentsGalleryViewerComponent } from './viewer/viewer.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-gallery',\n templateUrl: './gallery.component.html',\n styleUrls: ['./gallery.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgComponentOutlet, AsyncPipe,\n LibsUiIconsGetIconComponentPipe\n ]\n})\nexport class LibsUiComponentsGalleryComponent implements OnInit, OnDestroy {\n /* PROPERTY */\n protected imagesDisplay = computed(() => {\n return this.images().slice(this.start(), this.end());\n });\n\n private idOverlay = signal<string>(uuid());\n private idInterval = signal<number | undefined>(undefined);\n private viewerRef: ComponentRef<LibsUiComponentsGalleryViewerComponent> | undefined;\n\n /* INPUT */\n readonly images = model.required<Array<Record<string, any>>>();\n readonly start = input<number>(0);\n readonly end = input<number>(3);\n readonly zIndex = input<number>(1200);\n readonly fieldDisplaySrcImage = input<string>('url');\n readonly ignoreOverlayCountImage = input<boolean>();\n readonly imageArrayStringConvert = input<Array<string>>(); // sử dụng trong 1 số trường hợp images là Array<string>\n\n /* OUTPUT */\n readonly outFunctionsControl = output<IGalleryFunctionsControlEvent>();\n readonly outViewerEvent = output<'show' | 'remove'>();\n\n /* INJECT */\n private dynamicComponent = inject(LibsUiDynamicComponentService);\n\n constructor() {\n effect(() => {\n if (this.imageArrayStringConvert()?.length && this.fieldDisplaySrcImage()) {\n const convertedImages = this.imageArrayStringConvert()?.map(item => {\n return {\n [this.fieldDisplaySrcImage()]: item\n } as Record<string, any>;\n }) || [];\n\n this.images.set(convertedImages);\n }\n }, { allowSignalWrites: true });\n }\n\n ngOnInit() {\n this.outFunctionsControl.emit({\n open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected),\n viewerRef: this.ViewerRef\n })\n }\n\n /* FUNCTIONS */\n protected async handlerSelectImage(event: MouseEvent | undefined, imageSelected: Record<string, any>) {\n event?.stopPropagation();\n\n if (this.viewerRef) {\n return;\n }\n\n const viewerComponent = await import('./viewer/viewer.component').then(c => c.LibsUiComponentsGalleryViewerComponent);\n\n this.viewerRef = this.dynamicComponent.resolveComponentFactory(viewerComponent);\n this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected) });\n\n this.viewerRef.setInput('fieldDisplaySrcImage', this.fieldDisplaySrcImage());\n this.viewerRef.setInput('images', this.images());\n this.viewerRef.setInput('imageSelected', imageSelected);\n this.viewerRef.setInput('zIndex', this.zIndex());\n this.viewerRef.setInput('singleImage', this.images().length <= 1);\n\n const sub = this.viewerRef.instance.outClose.subscribe(() => {\n sub.unsubscribe();\n this.closePopup();\n });\n\n this.dynamicComponent.addToBody(this.viewerRef);\n this.outViewerEvent.emit('show');\n\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay,\n timeLiveUpdate: dayjs().unix()\n }\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n this.idInterval.set((setInterval(() => {\n data.response.timeLiveUpdate = dayjs().unix();\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }, 2000) as unknown) as number);\n }\n }\n\n protected handlerImageError(e: ErrorEvent, image: Record<string, any>) {\n const event = e as IEvent;\n\n event.stopPropagation();\n\n image['isError'] = true;\n }\n\n private closePopup() {\n clearInterval(this.idInterval());\n if (this.viewerRef) {\n this.outViewerEvent.emit('remove');\n if (isEmbedFrame()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay\n }\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n this.dynamicComponent.remove(this.viewerRef);\n this.viewerRef = undefined;\n this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected: Record<string, any>) => this.handlerSelectImage(undefined, imageSelected) });\n }\n\n private get ViewerRef() {\n return this.viewerRef;\n }\n\n ngOnDestroy() {\n this.viewerRef?.destroy();\n this.closePopup();\n }\n}\n","@if (images()) {\n <div class=\"flex nowrap w-100 h-100\">\n @for (image of imagesDisplay(); track $index; let last = $last) {\n <div class=\"w-full h-full libs-ui-border-general relative cursor-pointer\"\n [class.mr-[12px]]=\"!last\"\n (click)=\"handlerSelectImage($event, image)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n @if (!image['isError']) {\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex libs-uipercent-max-height-100 libs-uipercent-max-width-100 m-auto\"\n (error)='handlerImageError($event, image)' />\n }\n @if (image['isError']) {\n <div *ngComponentOutlet=\"'image-default' | LibsUiIconsGetIconComponentPipe | async\"></div>\n }\n </div>\n @if (last && images().length > end() && !ignoreOverlayCountImage()) {\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center bg-[#000] opacity-5\">\n </div>\n <div class=\"flex w-full h-full absolute top-0 left-0 items-center justify-center\">\n <span class=\"libs-ui-font-h3s libs-ui-font-size-20px text-[#ffffff]\">+ {{ images().length - end() }}</span>\n </div>\n }\n </div>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/gallery.component.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class LibsUiComponentsGalleryComponent implements OnInit, OnDestr
|
|
|
14
14
|
readonly ignoreOverlayCountImage: import("@angular/core").InputSignal<boolean | undefined>;
|
|
15
15
|
readonly imageArrayStringConvert: import("@angular/core").InputSignal<string[] | undefined>;
|
|
16
16
|
readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IGalleryFunctionsControlEvent>;
|
|
17
|
+
readonly outViewerEvent: import("@angular/core").OutputEmitterRef<"show" | "remove">;
|
|
17
18
|
private dynamicComponent;
|
|
18
19
|
constructor();
|
|
19
20
|
ngOnInit(): void;
|
|
@@ -23,5 +24,5 @@ export declare class LibsUiComponentsGalleryComponent implements OnInit, OnDestr
|
|
|
23
24
|
private get ViewerRef();
|
|
24
25
|
ngOnDestroy(): void;
|
|
25
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsGalleryComponent, never>;
|
|
26
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsGalleryComponent, "libs_ui-components-gallery", never, { "images": { "alias": "images"; "required": true; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "fieldDisplaySrcImage": { "alias": "fieldDisplaySrcImage"; "required": false; "isSignal": true; }; "ignoreOverlayCountImage": { "alias": "ignoreOverlayCountImage"; "required": false; "isSignal": true; }; "imageArrayStringConvert": { "alias": "imageArrayStringConvert"; "required": false; "isSignal": true; }; }, { "images": "imagesChange"; "outFunctionsControl": "outFunctionsControl"; }, never, never, true, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsGalleryComponent, "libs_ui-components-gallery", never, { "images": { "alias": "images"; "required": true; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "fieldDisplaySrcImage": { "alias": "fieldDisplaySrcImage"; "required": false; "isSignal": true; }; "ignoreOverlayCountImage": { "alias": "ignoreOverlayCountImage"; "required": false; "isSignal": true; }; "imageArrayStringConvert": { "alias": "imageArrayStringConvert"; "required": false; "isSignal": true; }; }, { "images": "imagesChange"; "outFunctionsControl": "outFunctionsControl"; "outViewerEvent": "outViewerEvent"; }, never, never, true, never>;
|
|
27
28
|
}
|