@libs-ui/components-gallery 0.2.30 → 0.2.31
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.
|
@@ -3,7 +3,7 @@ import { AsyncPipe, NgComponentOutlet } from '@angular/common';
|
|
|
3
3
|
import { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, output, signal } from '@angular/core';
|
|
4
4
|
import { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';
|
|
5
5
|
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
6
|
-
import { isEmbedFrame, UtilsCommunicateMicro, uuid } from '@libs-ui/utils';
|
|
6
|
+
import { isEmbedFrame, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';
|
|
7
7
|
import dayjs from 'dayjs';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export class LibsUiComponentsGalleryComponent {
|
|
@@ -65,7 +65,7 @@ export class LibsUiComponentsGalleryComponent {
|
|
|
65
65
|
this.dynamicComponent.addToBody(this.viewerRef);
|
|
66
66
|
if (isEmbedFrame()) {
|
|
67
67
|
const data = {
|
|
68
|
-
type:
|
|
68
|
+
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
69
69
|
response: {
|
|
70
70
|
message: 'open',
|
|
71
71
|
state: true,
|
|
@@ -92,7 +92,7 @@ export class LibsUiComponentsGalleryComponent {
|
|
|
92
92
|
this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected) => this.handlerSelectImage(undefined, imageSelected) });
|
|
93
93
|
if (isEmbedFrame()) {
|
|
94
94
|
const data = {
|
|
95
|
-
type:
|
|
95
|
+
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
96
96
|
response: {
|
|
97
97
|
message: 'close',
|
|
98
98
|
state: false,
|
|
@@ -110,13 +110,13 @@ export class LibsUiComponentsGalleryComponent {
|
|
|
110
110
|
this.closePopup();
|
|
111
111
|
}
|
|
112
112
|
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
|
|
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 });
|
|
114
114
|
}
|
|
115
115
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryComponent, decorators: [{
|
|
116
116
|
type: Component,
|
|
117
117
|
args: [{ selector: 'libs_ui-components-gallery', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
118
118
|
NgComponentOutlet, AsyncPipe,
|
|
119
119
|
LibsUiIconsGetIconComponentPipe
|
|
120
|
-
], template: "@if(images()) {\n<div class=\"flex nowrap w-100 h-100\">\n
|
|
120
|
+
], 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
121
|
}], ctorParameters: () => [] });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUosT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7O0FBZ0IxQixNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLGNBQWM7SUFDSixhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUssU0FBUyxHQUFHLE1BQU0sQ0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLFVBQVUsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELFNB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LElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxpQkFBaUIsRUFBRSxTQUFTO3dCQUM1QiwrQkFBK0I7cUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfSBmcm9tICdAbGlicy11aS9pY29ucyc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNFbWJlZEZyYW1lLCBVdGlsc0NvbW11bmljYXRlTWljcm8sIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgSUdhbGxlcnlGdW5jdGlvbnNDb250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb25zLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNHYWxsZXJ5Vmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi92aWV3ZXIvdmlld2VyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1nYWxsZXJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dhbGxlcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDb21wb25lbnRPdXRsZXQsIEFzeW5jUGlwZSxcbiAgICBMaWJzVWlJY29uc0dldEljb25Db21wb25lbnRQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBpbWFnZXNEaXNwbGF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmltYWdlcygpLnNsaWNlKHRoaXMuc3RhcnQoKSwgdGhpcy5lbmQoKSk7XG4gIH0pO1xuXG4gIHByaXZhdGUgaWRPdmVybGF5ID0gc2lnbmFsPHN0cmluZz4odXVpZCgpKTtcbiAgcHJpdmF0ZSBpZEludGVydmFsID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB2aWV3ZXJSZWY6IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgaW1hZ2VzID0gbW9kZWwucmVxdWlyZWQ8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+KCk7XG4gIHJlYWRvbmx5IHN0YXJ0ID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgZW5kID0gaW5wdXQ8bnVtYmVyPigzKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgZmllbGREaXNwbGF5U3JjSW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCd1cmwnKTtcbiAgcmVhZG9ubHkgaWdub3JlT3ZlcmxheUNvdW50SW1hZ2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpbWFnZUFycmF5U3RyaW5nQ29udmVydCA9IGlucHV0PEFycmF5PHN0cmluZz4+KCk7IC8vIHPhu60gZOG7pW5nIHRyb25nIDEgc+G7kSB0csaw4budbmcgaOG7o3AgaW1hZ2VzIGzDoCBBcnJheTxzdHJpbmc+XG5cbiAgLyogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUdhbGxlcnlGdW5jdGlvbnNDb250cm9sRXZlbnQ+KCk7XG5cbiAgLyogSU5KRUNUICovXG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudCA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmltYWdlQXJyYXlTdHJpbmdDb252ZXJ0KCk/Lmxlbmd0aCAmJiB0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCkpIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkSW1hZ2VzID0gdGhpcy5pbWFnZUFycmF5U3RyaW5nQ29udmVydCgpPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldOiBpdGVtXG4gICAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICB0aGlzLmltYWdlcy5zZXQoY29udmVydGVkSW1hZ2VzKTtcbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgb3BlbjogKGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHRoaXMuaGFuZGxlclNlbGVjdEltYWdlKHVuZGVmaW5lZCwgaW1hZ2VTZWxlY3RlZCksXG4gICAgICB2aWV3ZXJSZWY6IHRoaXMuVmlld2VyUmVmXG4gICAgfSlcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNlbGVjdEltYWdlKGV2ZW50OiBNb3VzZUV2ZW50IHwgdW5kZWZpbmVkLCBpbWFnZVNlbGVjdGVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMudmlld2VyUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld2VyQ29tcG9uZW50ID0gYXdhaXQgaW1wb3J0KCcuL3ZpZXdlci92aWV3ZXIuY29tcG9uZW50JykudGhlbihjID0+IGMuTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQpO1xuXG4gICAgdGhpcy52aWV3ZXJSZWYgPSB0aGlzLmR5bmFtaWNDb21wb25lbnQucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkodmlld2VyQ29tcG9uZW50KTtcblxuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgdmlld2VyUmVmOiB0aGlzLlZpZXdlclJlZiwgb3BlbjogKGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHRoaXMuaGFuZGxlclNlbGVjdEltYWdlKHVuZGVmaW5lZCwgaW1hZ2VTZWxlY3RlZCkgfSk7XG5cbiAgICB0aGlzLnZpZXdlclJlZi5zZXRJbnB1dCgnZmllbGREaXNwbGF5U3JjSW1hZ2UnLCB0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCkpO1xuICAgIHRoaXMudmlld2VyUmVmLnNldElucHV0KCdpbWFnZXMnLCB0aGlzLmltYWdlcygpKTtcbiAgICB0aGlzLnZpZXdlclJlZi5zZXRJbnB1dCgnaW1hZ2VTZWxlY3RlZCcsIGltYWdlU2VsZWN0ZWQpO1xuICAgIHRoaXMudmlld2VyUmVmLnNldElucHV0KCd6SW5kZXgnLCB0aGlzLnpJbmRleCgpKTtcbiAgICB0aGlzLnZpZXdlclJlZi5zZXRJbnB1dCgnc2luZ2xlSW1hZ2UnLCB0aGlzLmltYWdlcygpLmxlbmd0aCA8PSAxKTtcblxuICAgIGNvbnN0IHN1YiA9IHRoaXMudmlld2VyUmVmLmluc3RhbmNlLm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50LmFkZFRvQm9keSh0aGlzLnZpZXdlclJlZik7XG5cbiAgICBpZiAoaXNFbWJlZEZyYW1lKCkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIHR5cGU6IFwiTUlDUk9fU0lURV9NT0RBTF9FVkVOVFwiLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdvcGVuJyxcbiAgICAgICAgICBzdGF0ZTogdHJ1ZSxcbiAgICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5LFxuICAgICAgICAgIHRpbWVMaXZlVXBkYXRlOiBkYXlqcygpLnVuaXgoKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcblxuICAgICAgdGhpcy5pZEludGVydmFsLnNldCgoc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBkYXRhLnJlc3BvbnNlLnRpbWVMaXZlVXBkYXRlID0gZGF5anMoKS51bml4KCk7XG5cbiAgICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gICAgICB9LCAyMDAwKSBhcyB1bmtub3duKSBhcyBudW1iZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VFcnJvcihlOiBFcnJvckV2ZW50LCBpbWFnZTogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IGV2ZW50ID0gZSBhcyBJRXZlbnQ7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGltYWdlWydpc0Vycm9yJ10gPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVBvcHVwKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pZEludGVydmFsKCkpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudC5yZW1vdmUodGhpcy52aWV3ZXJSZWYpO1xuICAgIHRoaXMudmlld2VyUmVmID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgdmlld2VyUmVmOiB0aGlzLlZpZXdlclJlZiwgb3BlbjogKGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHRoaXMuaGFuZGxlclNlbGVjdEltYWdlKHVuZGVmaW5lZCwgaW1hZ2VTZWxlY3RlZCkgfSk7XG4gICAgaWYgKGlzRW1iZWRGcmFtZSgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBcIk1JQ1JPX1NJVEVfTU9EQUxfRVZFTlRcIixcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnY2xvc2UnLFxuICAgICAgICAgIHN0YXRlOiBmYWxzZSxcbiAgICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IFZpZXdlclJlZigpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3ZXJSZWY7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnZpZXdlclJlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xuICB9XG59XG4iLCJAaWYoaW1hZ2VzKCkpIHtcbjxkaXYgY2xhc3M9XCJmbGV4IG5vd3JhcCB3LTEwMCBoLTEwMFwiPlxuICBAZm9yIChpbWFnZSBvZiBpbWFnZXNEaXNwbGF5KCk7IHRyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHJlbGF0aXZlIGN1cnNvci1wb2ludGVyXCJcbiAgICBbY2xhc3MubXItWzEycHhdXT1cIiFsYXN0XCJcbiAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEltYWdlKCRldmVudCwgaW1hZ2UpXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgIEBpZighaW1hZ2VbJ2lzRXJyb3InXSkge1xuICAgICAgPGltZyBbc3JjXT1cImltYWdlW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IG1vLWxpYi1wZXJjZW50LW1heC1oZWlnaHQtMTAwIG1vLWxpYi1wZXJjZW50LW1heC13aWR0aC0xMDAgbS1hdXRvXCJcbiAgICAgICAgKGVycm9yKT0naGFuZGxlckltYWdlRXJyb3IoJGV2ZW50LCBpbWFnZSknIC8+XG4gICAgICB9XG4gICAgICBAaWYoaW1hZ2VbJ2lzRXJyb3InXSkge1xuICAgICAgPGRpdiAqbmdDb21wb25lbnRPdXRsZXQ9XCInaW1hZ2UtZGVmYXVsdCcgfCBMaWJzVWlJY29uc0dldEljb25Db21wb25lbnRQaXBlIHwgYXN5bmNcIj48L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICBAaWYobGFzdCAmJiBpbWFnZXMoKS5sZW5ndGggPiBlbmQoKSAmJiAhaWdub3JlT3ZlcmxheUNvdW50SW1hZ2UoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1bIzAwMF0gb3BhY2l0eS01XCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGgtZnVsbCBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oM3MgbGlicy11aS1mb250LXNpemUtMjBweCB0ZXh0LVsjZmZmZmZmXVwiPisge3tpbWFnZXMoKS5sZW5ndGggLSBlbmQoKX19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIH1cbjwvZGl2PlxufSJdfQ==
|
|
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
|
|
@@ -3,7 +3,7 @@ import * as i0 from '@angular/core';
|
|
|
3
3
|
import { computed, signal, model, input, output, inject, effect, Component, ChangeDetectionStrategy } from '@angular/core';
|
|
4
4
|
import { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';
|
|
5
5
|
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
6
|
-
import { uuid, isEmbedFrame, UtilsCommunicateMicro } from '@libs-ui/utils';
|
|
6
|
+
import { uuid, isEmbedFrame, UtilsCommunicateMicroKeyGlobal, UtilsCommunicateMicro } from '@libs-ui/utils';
|
|
7
7
|
import dayjs from 'dayjs';
|
|
8
8
|
|
|
9
9
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
@@ -66,7 +66,7 @@ class LibsUiComponentsGalleryComponent {
|
|
|
66
66
|
this.dynamicComponent.addToBody(this.viewerRef);
|
|
67
67
|
if (isEmbedFrame()) {
|
|
68
68
|
const data = {
|
|
69
|
-
type:
|
|
69
|
+
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
70
70
|
response: {
|
|
71
71
|
message: 'open',
|
|
72
72
|
state: true,
|
|
@@ -93,7 +93,7 @@ class LibsUiComponentsGalleryComponent {
|
|
|
93
93
|
this.outFunctionsControl.emit({ viewerRef: this.ViewerRef, open: (imageSelected) => this.handlerSelectImage(undefined, imageSelected) });
|
|
94
94
|
if (isEmbedFrame()) {
|
|
95
95
|
const data = {
|
|
96
|
-
type:
|
|
96
|
+
type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
|
|
97
97
|
response: {
|
|
98
98
|
message: 'close',
|
|
99
99
|
state: false,
|
|
@@ -111,14 +111,14 @@ class LibsUiComponentsGalleryComponent {
|
|
|
111
111
|
this.closePopup();
|
|
112
112
|
}
|
|
113
113
|
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
|
|
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 });
|
|
115
115
|
}
|
|
116
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryComponent, decorators: [{
|
|
117
117
|
type: Component,
|
|
118
118
|
args: [{ selector: 'libs_ui-components-gallery', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
119
119
|
NgComponentOutlet, AsyncPipe,
|
|
120
120
|
LibsUiIconsGetIconComponentPipe
|
|
121
|
-
], template: "@if(images()) {\n<div class=\"flex nowrap w-100 h-100\">\n
|
|
121
|
+
], 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" }]
|
|
122
122
|
}], ctorParameters: () => [] });
|
|
123
123
|
|
|
124
124
|
/**
|
|
@@ -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, 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: \"MICRO_SITE_MODAL_EVENT\",\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: \"MICRO_SITE_MODAL_EVENT\",\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 mo-lib-percent-max-height-100 mo-lib-percent-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 * 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\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":";;;;;;;;AAAA;MAuBa,gCAAgC,CAAA;;AAEjC,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACtD,KAAC,CAAC;AAEM,IAAA,SAAS,GAAG,MAAM,CAAS,IAAI,EAAE,CAAC;AAClC,IAAA,UAAU,GAAG,MAAM,CAAqB,SAAS,CAAC;AAClD,IAAA,SAAS;;AAGR,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA8B;AACrD,IAAA,KAAK,GAAG,KAAK,CAAS,CAAC,CAAC;AACxB,IAAA,GAAG,GAAG,KAAK,CAAS,CAAC,CAAC;AACtB,IAAA,MAAM,GAAG,KAAK,CAAS,IAAI,CAAC;AAC5B,IAAA,oBAAoB,GAAG,KAAK,CAAS,KAAK,CAAC;IAC3C,uBAAuB,GAAG,KAAK,EAAW;AAC1C,IAAA,uBAAuB,GAAG,KAAK,EAAiB,CAAC;;IAGjD,mBAAmB,GAAG,MAAM,EAAiC;;AAG9D,IAAA,gBAAgB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAEhE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBACzE,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,GAAG,CAAC,IAAI,IAAG;oBACjE,OAAO;AACL,wBAAA,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG;qBACT;iBACzB,CAAC,IAAI,EAAE;AAER,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;;AAEpC,SAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;;IAGjC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,EAAE,CAAC,aAAkC,KAAK,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC;YAC/F,SAAS,EAAE,IAAI,CAAC;AACjB,SAAA,CAAC;;;AAIM,IAAA,MAAM,kBAAkB,CAAC,KAA6B,EAAE,aAAkC,EAAA;QAClG,KAAK,EAAE,eAAe,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB;;AAGF,QAAA,MAAM,eAAe,GAAG,MAAM,OAAO,4DAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sCAAsC,CAAC;QAErH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,eAAe,CAAC;AAE/E,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,aAAkC,KAAK,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;AAE7J,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;AAEjE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAK;YAC1D,GAAG,CAAC,WAAW,EAAE;YACjB,IAAI,CAAC,UAAU,EAAE;AACnB,SAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;QAE/C,IAAI,YAAY,EAAE,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,8BAA8B,CAAC,iBAAiB;AACtD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,KAAK,EAAE,IAAI;oBACX,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,cAAc,EAAE,KAAK,EAAE,CAAC,IAAI;AAC7B;aACF;AAED,YAAA,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAE/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,WAAW,CAAC,MAAK;gBACpC,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE;AAE7C,gBAAA,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC;AACjD,aAAC,EAAE,IAAI,CAAuB,CAAC;;;IAIzB,iBAAiB,CAAC,CAAa,EAAE,KAA0B,EAAA;QACnE,MAAM,KAAK,GAAG,CAAW;QAEzB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI;;IAGjB,UAAU,GAAA;AAChB,QAAA,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,aAAkC,KAAK,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;QAC7J,IAAI,YAAY,EAAE,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,8BAA8B,CAAC,iBAAiB;AACtD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,KAAK,EAAE,KAAK;oBACZ,SAAS,EAAE,IAAI,CAAC;AACjB;aACF;AAED,YAAA,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC;;;AAInD,IAAA,IAAY,SAAS,GAAA;QACnB,OAAO,IAAI,CAAC,SAAS;;IAGvB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;QACzB,IAAI,CAAC,UAAU,EAAE;;wGA/HR,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,mpCCvB7C,iyCA2BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDRI,iBAAiB,EAAE,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,kCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,yCAC5B,+BAA+B,EAAA,IAAA,EAAA,iCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGtB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAZ5C,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,cAG1B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;AACP,wBAAA,iBAAiB,EAAE,SAAS;wBAC5B;AACD,qBAAA,EAAA,QAAA,EAAA,iyCAAA,EAAA;;;AErBH;;AAEG;;;;"}
|