UNPKG

@crystalui/angular-lightbox

Version:

Angular library for viewing images in a pop-up window with touch screen support.

431 lines 55.5 kB
import { __decorate, __extends } from "tslib"; import { Component, Input, EventEmitter, OnInit, HostBinding, HostListener, ViewChild, ViewChildren, ElementRef, ChangeDetectorRef, ContentChildren, QueryList } from '@angular/core'; import { EventService } from './event.service'; import { LightboxCommonComponent } from './lightbox-common.component'; var LightboxComponent = /** @class */ (function (_super) { __extends(LightboxComponent, _super); function LightboxComponent(elementRef, ref, eventService) { var _this = _super.call(this, eventService) || this; _this.elementRef = elementRef; _this.ref = ref; _this.eventService = eventService; _this.spinnerHeight = 30; _this.minTimeout = 30; _this.preloaderTimeout = 100; _this.spinnerStyles = { transform: '' }; _this.configThumbnailPreloader = true; _this.events = new EventEmitter(); _this.hostShown = false; _this.hideControls = false; return _this; } Object.defineProperty(LightboxComponent.prototype, "simpleMode", { get: function () { return this.properties.simpleMode; }, enumerable: true, configurable: true }); Object.defineProperty(LightboxComponent.prototype, "hostLightTheme", { get: function () { return this.properties.backgroundColor === 'white'; }, enumerable: true, configurable: true }); Object.defineProperty(LightboxComponent.prototype, "currImagePath", { get: function () { var image = this.images[this.index]; var path; if (!image) { return false; } if (image.fullImage && image.fullImage.path) { path = image.fullImage.path; } else if (image.thumbnailImage && image.thumbnailImage.path) { path = image.thumbnailImage.path; } else if (image.path) { path = image.path; } return path; }, enumerable: true, configurable: true }); Object.defineProperty(LightboxComponent.prototype, "prevImagePath", { get: function () { return this.images[this.prevIndex]; }, set: function (value) { this.images[this.prevIndex] = value; }, enumerable: true, configurable: true }); Object.defineProperty(LightboxComponent.prototype, "isHiddenPrevArrow", { get: function () { return this.isFirstImage && !this.properties.loop || this.isZoomIn; }, enumerable: true, configurable: true }); Object.defineProperty(LightboxComponent.prototype, "isHiddenNextArrow", { get: function () { return this.isLastImage && !this.properties.loop || this.isZoomIn; }, enumerable: true, configurable: true }); Object.defineProperty(LightboxComponent.prototype, "isPreloader", { get: function () { return this.animationMode === 'zoom-preloader' && this.showState != 'animation-end' && this.currImageLoadingState === 'loading'; }, enumerable: true, configurable: true }); Object.defineProperty(LightboxComponent.prototype, "imageOrientation", { get: function () { if (this.thumbnailImage.naturalWidth > this.thumbnailImage.naturalHeight) { return 'horizontal'; } else { return 'vertical'; } }, enumerable: true, configurable: true }); LightboxComponent.prototype.scrolling = function () { if (this.showState === 'initial-thumbnail-image' || this.showState === 'initial-virtual-image' || this.closingState === 'animation') { this.updateThumbnailPosition(); } }; LightboxComponent.prototype.onKeyDown = function (event) { switch (event.key) { case 'ArrowLeft': this.prev(); break; case 'ArrowRight': this.next(); break; case 'Escape': this.closeLightbox(); break; } }; LightboxComponent.prototype.onMouseEnter = function (event) { this.hideControls = false; }; LightboxComponent.prototype.transitionEnd = function (event) { if (event.propertyName === "transform" && this.hostAnimation) { this.hostAnimation = false; } }; LightboxComponent.prototype.ngOnInit = function () { this.currentImageIndex = this.properties.index; this.initialLightbox(); }; LightboxComponent.prototype.ngAfterViewInit = function () { var _this = this; setTimeout(function () { if (_this.currImageLoadingState === 'not-loaded') { _this.currImageLoadingState = 'loading'; } }, this.preloaderTimeout); // Mode: default if (this.animationMode === 'default') { setTimeout(function () { _this.showLightboxAnimation(); }, this.minTimeout); } }; LightboxComponent.prototype.onImageLoaded = function () { var _this = this; // When opening lightbox if (this.animationMode === 'zoom-preloader' && this.showState === 'initial-thumbnail-image') { this.initialLightboxVirtualImage(); setTimeout(function () { _this.currImageLoadingState = 'uploaded'; _this.showLightboxAnimation(); if (_this.properties.hideThumbnail) { _this.hideThumbnailImage(); } }, this.minTimeout); } // When opening next / previous image if (this.showState === 'animation-end') { this.currImageLoadingState = 'uploaded'; if (this.properties.hideThumbnail) { this.hideThumbnailImage(); } } this.ref.detectChanges(); }; LightboxComponent.prototype.onImageError = function (event) { var _this = this; this.currImageLoadingState = 'error'; this.initialLightboxDefault(); setTimeout(function () { _this.showLightboxAnimation(); }, this.minTimeout); }; LightboxComponent.prototype.onContainerClick = function (event) { if (event.target === this.lightboxContainerElem.nativeElement || this.simpleMode) { this.closeLightbox(); } }; LightboxComponent.prototype.initialLightbox = function () { this.setMaxDimensions(); this.setAnimationDuration(); switch (this.animationMode) { case 'zoom-preloader': this.initialLightboxThumbnailImage(); break; case 'default': this.initialLightboxDefault(); break; } }; LightboxComponent.prototype.initialLightboxDefault = function () { this.showState = 'initial-default'; this.containerStyles = { transform: 'translate3d(0, 0, 0)', height: '100%', width: '100%', opacity: '0' }; // next step: AfterViewInit }; LightboxComponent.prototype.initialLightboxVirtualImage = function () { this.setShowState('initial-virtual-image'); this.containerStyles = { transform: this.containerInitialPosition, height: this.virtualImageDimension.height + 'px', width: this.virtualImageDimension.width + 'px' }; // next step: onImageLoaded() -> showLightboxAnimation() }; LightboxComponent.prototype.initialLightboxThumbnailImage = function () { this.setShowState('initial-thumbnail-image'); this.containerStyles = { transform: this.containerInitialPosition, height: this.thumbnailImagePosition.height + 'px', width: this.thumbnailImagePosition.width + 'px' }; // next step: onImageLoaded() }; LightboxComponent.prototype.showLightboxAnimation = function () { this.hostAnimation = true; this.setShowState('animation'); this.hostShown = true; this.setBackgroundColor(); this.setAnimationDuration(); // Mode: zoom preloader if (this.animationMode === 'zoom-preloader' && this.currImageLoadingState !== 'error') { this.containerStyles.transform = this.containerFullscreenPosition; } // Mode: default if (this.animationMode === 'default') { this.containerStyles.opacity = '1'; } // next step: handleLightboxTransitionEnd }; LightboxComponent.prototype.showLightboxAnimationEnd = function () { this.setShowState('animation-end'); this.containerStyles = { transform: 'translate3d(0, 0, 0)', height: '100%', width: '100%', }; }; LightboxComponent.prototype.closeLightbox = function () { this.setClosingState('initial'); this.hostShown = false; this.closeLightboxInitial(); }; LightboxComponent.prototype.closeLightboxInitial = function () { var _this = this; this.setClosingState('initial-styles'); // Mode: zoom preloader if (this.animationMode === 'zoom-preloader') { this.containerStyles = { transform: this.containerFullscreenPosition, height: this.virtualImageDimension.height + 'px', width: this.virtualImageDimension.width + 'px', }; } // Mode: default if (this.animationMode === 'default') { this.containerStyles.opacity = '1'; } setTimeout(function () { _this.closeLightboxAnimation(); }, this.minTimeout); }; LightboxComponent.prototype.closeLightboxAnimation = function () { this.setClosingState('animation'); // Mode: zoom preloader if (this.animationMode === 'zoom-preloader') { this.hostAnimation = true; this.containerStyles = { transform: this.containerInitialPosition, height: this.getContainerHeight(), width: this.getContainerWidth(), }; this.hostStyleBackgroundColor = ''; } // Mode: default if (this.animationMode === 'default') { this.hostAnimation = true; this.containerStyles.opacity = '0'; this.hostStyleBackgroundColor = ''; } this.setAnimationDuration(); // next step: handleLightboxTransitionEnd if (this.animationDuration === 0) { // in the future, change to a type conversion getter this.closeLightboxAnimationEnd(); } }; LightboxComponent.prototype.closeLightboxAnimationEnd = function () { this.setClosingState('animation-end'); this.events.emit({ type: 'close' }); // Mode: zoom preloader if (this.animationMode === 'zoom-preloader') { this.showThumbnailImage(); } }; /* * Transition End */ LightboxComponent.prototype.handleLightboxTransitionEnd = function (event) { if (this.showState === 'animation') { this.showLightboxAnimationEnd(); } // Last close step if (this.closingState === 'animation') { this.closeLightboxAnimationEnd(); } }; LightboxComponent.prototype.next = function () { var _this = this; if (this.animationMode === 'zoom-preloader') { this.showThumbnailImage(); } if (this.isLastImage) { if (this.properties.loop) { this.currentImageIndex = 0; } else { return; } } else { this.currentImageIndex++; this.currImageLoadingState = 'loading'; } setTimeout(function () { if (_this.currImageLoadingState !== 'uploaded') { _this.currImageLoadingState = 'loading'; } }, this.preloaderTimeout); }; LightboxComponent.prototype.prev = function () { var _this = this; if (this.animationMode === 'zoom-preloader') { this.showThumbnailImage(); } if (this.isFirstImage) { if (this.properties.loop) { this.currentImageIndex = this.latestImageIndex; } else { return; } } else { this.currentImageIndex--; this.currImageLoadingState = 'loading'; } setTimeout(function () { if (_this.currImageLoadingState !== 'uploaded') { _this.currImageLoadingState = 'loading'; } }, this.preloaderTimeout); }; LightboxComponent.prototype.setMaxDimensions = function () { this.lightboxImage.nativeElement.style.maxHeight = 'calc(' + this.properties.imageMaxHeight + ')'; this.lightboxImage.nativeElement.style.maxWidth = this.properties.imageMaxWidth; }; LightboxComponent.prototype.handlePinchZoomEvents = function (event) { if (event.type === "zoom-in") { this.isZoomIn = true; } if (event.type === "zoom-out") { this.isZoomIn = false; } }; LightboxComponent.prototype.getContainerWidth = function () { return this.thumbnailImagePosition.width / this.containerScale + 'px'; }; LightboxComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: ChangeDetectorRef }, { type: EventService } ]; }; __decorate([ HostBinding('class.lightbox-shown') ], LightboxComponent.prototype, "hostShown", void 0); __decorate([ HostBinding('class.lightbox-hide-controls') ], LightboxComponent.prototype, "hideControls", void 0); __decorate([ HostBinding('class.lightbox-animation') ], LightboxComponent.prototype, "hostAnimation", void 0); __decorate([ HostBinding('class.lightbox-simple-mode') ], LightboxComponent.prototype, "simpleMode", null); __decorate([ HostBinding('class.lightbox-light') ], LightboxComponent.prototype, "hostLightTheme", null); __decorate([ HostBinding('style.backgroundColor') ], LightboxComponent.prototype, "hostStyleBackgroundColor", void 0); __decorate([ ViewChild('prevImageElem', { static: true }) ], LightboxComponent.prototype, "prevImageElem", void 0); __decorate([ ViewChild('lightboxContainer', { static: true }) ], LightboxComponent.prototype, "lightboxContainerElem", void 0); __decorate([ HostListener('window:scroll') ], LightboxComponent.prototype, "scrolling", null); __decorate([ HostListener('window:keydown', ['$event']) ], LightboxComponent.prototype, "onKeyDown", null); __decorate([ HostListener("mouseenter", ['$event']) ], LightboxComponent.prototype, "onMouseEnter", null); __decorate([ HostListener('transitionend', ['$event']) ], LightboxComponent.prototype, "transitionEnd", null); LightboxComponent = __decorate([ Component({ selector: 'crystal-lightbox', template: "<div class=\"lightbox-counter\" *ngIf=\"properties.counter && images.length > 1\">{{counter}}</div>\n<div class=\"lightbox-close\" *ngIf=\"!simpleMode\" (click)=\"closeLightbox()\">{{closeButtonText}}</div>\n<div class=\"lightbox-spinner\" \n\t*ngIf=\"currImageLoadingState === 'loading' && showState === 'animation-end'\"></div>\n<div class=\"lightbox-container\" \n\t#lightboxContainer\n\t[ngStyle]=\"containerStyles\"\n\t(transitionend)=\"handleLightboxTransitionEnd($event)\"\n\t(click)=\"onContainerClick($event)\">\n\n\t<div class=\"lightbox-preloader\" *ngIf=\"isPreloader\">\n\t\t<div class=\"lightbox-spinner\"></div>\n\t</div>\n\n\t<div class=\"lightbox-error\" *ngIf=\"currImageLoadingState === 'error' && !closingState\">Failed to load image</div>\n\n\t<img class=\"lightbox-curr-image\" \n\t\t#lightboxImage\n\t\t[src]=\"currImagePath\" \n\t\t[class.lightbox-show]=\"currImageLoadingState === 'uploaded'\" \n\t\t(load)=\"onImageLoaded()\"\n\t\t(error)=\"onImageError($event)\" />\n</div>\n\n<div class=\"lightbox-prev\" [hidden]=\"isHiddenPrevArrow\" (click)=\"prev()\"></div>\n<div class=\"lightbox-next\" [hidden]=\"isHiddenNextArrow\" (click)=\"next()\"></div>", styles: [".lightbox-spinner,.lightbox-spinner:after,.lightbox-spinner:before{border-radius:50%;width:10px;height:10px;-webkit-animation:1.5s ease-in-out infinite lightbox-load;animation:1.5s ease-in-out infinite lightbox-load}.lightbox-spinner{color:#fff;font-size:10px;margin:0 auto 20px;position:relative;text-indent:-9999em;transform:translateZ(0);-webkit-animation-delay:-.16s;animation-delay:-.16s}.lightbox-spinner:after,.lightbox-spinner:before{content:\"\";position:absolute;top:0}.lightbox-spinner:before{left:-32px;-webkit-animation-delay:-.32s;animation-delay:-.32s}.lightbox-spinner:after{left:32px}@-webkit-keyframes lightbox-load{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}@keyframes lightbox-load{0%,100%,80%{box-shadow:0 10px 0 -1.3em}40%{box-shadow:0 10px 0 0}}:host.lightbox-shown{opacity:1}:host.lightbox-shown .lightbox-close,:host.lightbox-shown .lightbox-next,:host.lightbox-shown .lightbox-prev{opacity:.5;transition-delay:.1s}:host.lightbox-shown .lightbox-close:hover,:host.lightbox-shown .lightbox-next:hover,:host.lightbox-shown .lightbox-prev:hover{opacity:1;transition-delay:0}:host.lightbox-shown .lightbox-counter{opacity:1}:host.lightbox-hide-controls .lightbox-close,:host.lightbox-hide-controls .lightbox-next,:host.lightbox-hide-controls .lightbox-prev{opacity:0}:host.lightbox-simple-mode .lightbox-container{cursor:zoom-out}:host:not(.lightbox-animation) .lightbox-container{display:flex;align-items:center;justify-content:center;top:0;left:0;height:100%}:host.lightbox-light{color:#000;text-shadow:none}:host{position:fixed;top:0;left:0;width:100%;height:100%;color:#fff;text-shadow:0 0 1px rgba(0,0,0,.65);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:10000}:host img{opacity:1;max-width:100%;max-height:100%}:host img.lightbox-curr-image.lightbox-show{opacity:1}:host img.lightbox-curr-image{opacity:0;z-index:10}:host .lightbox-container.lightbox-hide{display:none}:host .lightbox-container{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transform-origin:top left}:host .lightbox-preloader{background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;width:100%;height:100%;position:absolute}:host .lightbox-spinner{position:absolute;top:51%;left:50%;margin-top:-15px;margin-left:-5px}:host .lightbox-preloader .lightbox-spinner{margin-top:-9px;margin-left:-3px}:host .lightbox-preloader .lightbox-spinner,:host .lightbox-preloader .lightbox-spinner:after,:host .lightbox-preloader .lightbox-spinner:before{width:6px;height:6px}:host .lightbox-preloader .lightbox-spinner:before{left:-21px}:host .lightbox-preloader .lightbox-spinner:after{left:21px}:host .lightbox-counter{text-align:left;position:absolute;left:22px;top:13px;font-size:14px;z-index:30}:host .lightbox-description{text-align:center;max-width:calc(100% - 200px);margin:0 auto;font-size:14px;line-height:43px;position:relative;z-index:50}:host .lightbox-error{color:rgba(255,255,255,.75);font-size:19px}:host .lightbox-close{position:absolute;top:0;right:0;padding:13px 22px;font-size:13px;text-transform:uppercase;cursor:pointer;opacity:.5;z-index:30;transition:opacity .1s ease-in-out}:host .lightbox-next,:host .lightbox-prev{width:100px;height:100%;position:absolute;top:0;cursor:pointer;opacity:.5;z-index:20;transition:opacity .1s ease-in-out;-webkit-tap-highlight-color:rgba(255,255,255,0)}:host .lightbox-prev{left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAiCAYAAABbXymAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjMzMTZCQzFERDgzMTExRTc5QUYxQTUxRDI5MkM5ODZCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjMzMTZCQzFFRDgzMTExRTc5QUYxQTUxRDI5MkM5ODZCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzMxNkJDMUJEODMxMTFFNzlBRjFBNTFEMjkyQzk4NkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzMxNkJDMUNEODMxMTFFNzlBRjFBNTFEMjkyQzk4NkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7VrwZKAAAClElEQVR42qzWSY8SQRgGYLoVHPeTXlwCiIwMArJGtiABNep4IGZi4oEfMJooLjePrnFGf5yJS0hYmq2b/aBxiQ6+lRRJdaUZq5vp5E2TLnioVFd9VZLN+iUxIdeMiW2fRVCmvz2DpJBVCk6X6SVBHQRLpVKb7Xb782g0Usrl8jM8W0P20+9YQn3JZPIhwN6MXoPBoI3nG8iKGZhF14A+AqrOmKtWq31F213kkOgQ69B0Ol0BqrFot9vV/H7/c7RfEoVZ1G+EdjqdvtfrfYn2K8gJkaHQodlstjIej/ssihdH0Ddov4acQo7QlycJo5PJhEc1j8fzmqJk2h1D7Lv1lkUv5nK5xzzaarWMUIcwms/nCTrgUbfbTdCrVtAAQafTqQ5VFEVdCi0UCk/Q0yGLNptN1el0vqLoaRHUxqPoKY/2KFo0g0r0ba4Wi8WnQEcs2mg0VAPULrJsZTqpNzDZ6yxar9dVl8tFVtR10SnFohJdgnZYuh9IkjSTZfknPn5DviO/kL/IjkgtIOhhJJ7JZF5gdU24hdDG6qqg/QJywEzlmg/FSTLhE4nE9nA4nHJFRvH5fJto94gOBfvyjtJxXI/H4x+A63re6/UUVDCCnzeDz6fbceQscjsWi703wFsM7hDBJQN8PRqNbmNn0OGapu0JfoviYx4PBAL30e5dCg+Hw0Z4e8/wfr/P451QKPRgaRzIFjDdksefsbjdKn5zER6JRMiwuP+3Ne2KB4PBLVVVR1xd+YK2O2bOFYvwd8CHbK/x/J6Zc8Ui/AZmxdtqtdrAwlFLpRLZrS/PYcnkEUuiY7hCS+g5sovT55+Qj7QS/jYD8zjp/UF6t9GS+oPed8zCLC5zJ0tSo//Q+8wKLHTw/ifAAMQVS4vHZR2VAAAAAElFTkSuQmCC) center left 22px no-repeat}:host .lightbox-next{right:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAiCAYAAABbXymAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjEyNDE3MDE1RDgzMTExRTc5NjM4QTIzQzI2Rjc2Qjg2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjEyNDE3MDE2RDgzMTExRTc5NjM4QTIzQzI2Rjc2Qjg2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTI0MTcwMTNEODMxMTFFNzk2MzhBMjNDMjZGNzZCODYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTI0MTcwMTREODMxMTFFNzk2MzhBMjNDMjZGNzZCODYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7zv5BKAAACl0lEQVR42rTW224SQRwGcHZb8FT1Sm88BJCiFAE5JpyCBNRE8coYEy94AGqi9XDXS0+JVh/CB/EhiFET5LjAclgWjaa1aazfJDM6u6LuLjrJl2124cd0duY/I9h+NoELabtcTLcFCon0bw+SRE4h28hn2xyNoIvISrlcfqAoSluSpLepVKqCe6cRB/2MYAXei1wfjUbSLm34gX4ymbyN+z6rOBmC/ciNer3+fpdrwGXgd8h/YwVn8Dm/37/e6/UGOnyQTqfXrOBsKI4g571e76Nutzv8De43gwv05S0hx5CLwJ/iBWrwyWQyzGazpnHyITtyCDlBcI/H8wS4ZlhUVbWMO/R4p9P5Bc/lcnfx/Ow8+AW32z0LH+Xz+X+Dt9ttmcen0ynDA1bx4wR3Op2PW62WrOv5uFAo3JsXL1K8r+v5LNxmZrb8wJvNpn5YlGKxeJ/WFruZBcRPxUsul2u90WhocCyqBqk3dLGJiwbgb/T6FflCSqkoiluCIGjqNGzWgQUz9YR8aQ9yBqtyDQtH0q1KNZPJPMTzOHKA4oaHwuPz+SooUm0eHY/H00QisUEWFHKUDYVRdBmVr9Lv9/WoGo/HX+J5iY7/QSMvj003hnb0aCwWe4HnV5GTyGEj002DDgYDDYqdRo1Goxu0p3pU+BvqDQQCqzPQCUWvzINKejQcDltHQ6HQLaBdHh0Oh5ZRO0OBaFD8iIL7z82ibGtyRyKR1T+gl82g/GZ6Dev/HY/KsqwEg0FLKL/93+R7C3QM9Nk8KDtiOWq12jb2s2XS01Kp9Kparb7G/TfIR2QT2TF6UBS42bBEi/UK/SIBPyCfkC0zKA+z6rWPXm30tLlJr6ZQ/ZmYDYnI1eEdejV9Thb+18H7uwADAOG/Wcm4x+knAAAAAElFTkSuQmCC) center right 22px no-repeat}:host .lightbox-close,:host .lightbox-counter,:host .lightbox-next,:host .lightbox-prev{opacity:0;transition:opacity 150ms cubic-bezier(.475,.105,.445,.945)}"] }) ], LightboxComponent); return LightboxComponent; }(LightboxCommonComponent)); export { LightboxComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNyeXN0YWx1aS9hbmd1bGFyLWxpZ2h0Ym94LyIsInNvdXJjZXMiOlsibGliL2xpZ2h0Ym94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdEwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBUXRFO0lBQXVDLHFDQUF1QjtJQWdIMUQsMkJBQ1ksVUFBc0IsRUFDdEIsR0FBc0IsRUFDdkIsWUFBMEI7UUFIckMsWUFJSSxrQkFBTSxZQUFZLENBQUMsU0FDdEI7UUFKVyxnQkFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixTQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN2QixrQkFBWSxHQUFaLFlBQVksQ0FBYztRQWpIckMsbUJBQWEsR0FBVyxFQUFFLENBQUM7UUFFM0IsZ0JBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsc0JBQWdCLEdBQVcsR0FBRyxDQUFDO1FBQy9CLG1CQUFhLEdBQVE7WUFDakIsU0FBUyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztRQUNGLDhCQUF3QixHQUFHLElBQUksQ0FBQztRQUNoQyxZQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVTLGVBQVMsR0FBWSxLQUFLLENBQUM7UUFDbkIsa0JBQVksR0FBWSxLQUFLLENBQUM7O0lBd0czRSxDQUFDO0lBckdELHNCQUFJLHlDQUFVO2FBQWQ7WUFDSSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3RD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QixvcUNBQXdDOztTQUUzQyxDQUFDO09BRVcsaUJBQWlCLENBZ1o3QjtJQUFELHdCQUFDO0NBQUEsQUFoWkQsQ0FBdUMsdUJBQXVCLEdBZ1o3RDtTQWhaWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlnaHRib3hEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNob3dTdGF0ZSwgQ2xvc2luZ1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBFdmVudFNlcnZpY2UgfSBmcm9tICcuL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlnaHRib3hDb21tb25Db21wb25lbnQgfSBmcm9tICcuL2xpZ2h0Ym94LWNvbW1vbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NyeXN0YWwtbGlnaHRib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saWdodGJveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY3NzL2xpZ2h0Ym94LmNvbXBvbmVudC5zYXNzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBMaWdodGJveENvbXBvbmVudCBleHRlbmRzIExpZ2h0Ym94Q29tbW9uQ29tcG9uZW50IHtcbiAgICBwcmV2SW5kZXg6IG51bWJlcjtcbiAgICBzcGlubmVySGVpZ2h0OiBudW1iZXIgPSAzMDtcbiAgICBpc1pvb21JbjogYm9vbGVhbjtcbiAgICBtaW5UaW1lb3V0OiBudW1iZXIgPSAzMDtcbiAgICBwcmVsb2FkZXJUaW1lb3V0OiBudW1iZXIgPSAxMDA7XG4gICAgc3Bpbm5lclN0eWxlczogYW55ID0ge1xuICAgICAgICB0cmFuc2Zvcm06ICcnXG4gICAgfTtcbiAgICBjb25maWdUaHVtYm5haWxQcmVsb2FkZXIgPSB0cnVlO1xuICAgIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubGlnaHRib3gtc2hvd24nKSBob3N0U2hvd246IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmxpZ2h0Ym94LWhpZGUtY29udHJvbHMnKSBoaWRlQ29udHJvbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmxpZ2h0Ym94LWFuaW1hdGlvbicpIGhvc3RBbmltYXRpb246IGJvb2xlYW47XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5saWdodGJveC1zaW1wbGUtbW9kZScpXG4gICAgZ2V0IHNpbXBsZU1vZGUoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5zaW1wbGVNb2RlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubGlnaHRib3gtbGlnaHQnKSBnZXQgaG9zdExpZ2h0VGhlbWUoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5iYWNrZ3JvdW5kQ29sb3IgPT09ICd3aGl0ZSc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5iYWNrZ3JvdW5kQ29sb3InKSBob3N0U3R5bGVCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcblxuICAgIEBWaWV3Q2hpbGQoJ3ByZXZJbWFnZUVsZW0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcmV2SW1hZ2VFbGVtOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2xpZ2h0Ym94Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgbGlnaHRib3hDb250YWluZXJFbGVtOiBFbGVtZW50UmVmO1xuXG4gICAgZ2V0IGN1cnJJbWFnZVBhdGgoKXtcbiAgICAgICAgbGV0IGltYWdlID0gdGhpcy5pbWFnZXNbdGhpcy5pbmRleF07XG4gICAgICAgIGxldCBwYXRoO1xuXG4gICAgICAgIGlmICghaW1hZ2Upe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGltYWdlLmZ1bGxJbWFnZSAmJiBpbWFnZS5mdWxsSW1hZ2UucGF0aCl7XG4gICAgICAgICAgICBwYXRoID0gIGltYWdlLmZ1bGxJbWFnZS5wYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlLnRodW1ibmFpbEltYWdlICYmIGltYWdlLnRodW1ibmFpbEltYWdlLnBhdGgpIHtcbiAgICAgICAgICAgIHBhdGggPSBpbWFnZS50aHVtYm5haWxJbWFnZS5wYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlLnBhdGgpe1xuICAgICAgICAgICAgcGF0aCA9IGltYWdlLnBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBnZXQgcHJldkltYWdlUGF0aCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXNbdGhpcy5wcmV2SW5kZXhdO1xuICAgIH1cblxuICAgIHNldCBwcmV2SW1hZ2VQYXRoKHZhbHVlOiBhbnkpe1xuICAgICAgICB0aGlzLmltYWdlc1t0aGlzLnByZXZJbmRleF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaXNIaWRkZW5QcmV2QXJyb3coKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaXJzdEltYWdlICYmICF0aGlzLnByb3BlcnRpZXMubG9vcCB8fCB0aGlzLmlzWm9vbUluO1xuICAgIH1cbiAgICBnZXQgaXNIaWRkZW5OZXh0QXJyb3coKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0SW1hZ2UgJiYgIXRoaXMucHJvcGVydGllcy5sb29wIHx8IHRoaXMuaXNab29tSW47XG4gICAgfVxuXG4gICAgZ2V0IGlzUHJlbG9hZGVyKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGlvbk1vZGUgPT09ICd6b29tLXByZWxvYWRlcicgJiYgXG4gICAgICAgICAgIHRoaXMuc2hvd1N0YXRlICE9ICdhbmltYXRpb24tZW5kJyAmJiBcbiAgICAgICAgICAgdGhpcy5jdXJySW1hZ2VMb2FkaW5nU3RhdGUgPT09ICdsb2FkaW5nJztcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VPcmllbnRhdGlvbigpOid2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWxJbWFnZS5uYXR1cmFsV2lkdGggPiB0aGlzLnRodW1ibmFpbEltYWdlLm5hdHVyYWxIZWlnaHQpe1xuICAgICAgICAgICAgcmV0dXJuICdob3Jpem9udGFsJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAndmVydGljYWwnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcpIHNjcm9sbGluZygpe1xuICAgICAgICBpZiAodGhpcy5zaG93U3RhdGUgPT09ICdpbml0aWFsLXRodW1ibmFpbC1pbWFnZScgfHxcbiAgICAgICAgICAgIHRoaXMuc2hvd1N0YXRlID09PSAnaW5pdGlhbC12aXJ0dWFsLWltYWdlJyB8fFxuICAgICAgICAgICAgdGhpcy5jbG9zaW5nU3RhdGUgPT09ICdhbmltYXRpb24nKXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGh1bWJuYWlsUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBvbktleURvd24oZXZlbnQ6IGFueSkge1xuICAgICAgICBzd2l0Y2goZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIHRoaXMucHJldigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMaWdodGJveCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgWyckZXZlbnQnXSlcbiAgICBvbk1vdXNlRW50ZXIoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmhpZGVDb250cm9scyA9IGZhbHNlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBbJyRldmVudCddKVxuICAgIHRyYW5zaXRpb25FbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIiAmJiB0aGlzLmhvc3RBbmltYXRpb24pe1xuICAgICAgICAgICAgdGhpcy5ob3N0QW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBcbiAgICAgICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2Upe1xuICAgICAgICBzdXBlcihldmVudFNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCl7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlSW5kZXggPSB0aGlzLnByb3BlcnRpZXMuaW5kZXg7XG4gICAgICAgIHRoaXMuaW5pdGlhbExpZ2h0Ym94KCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJJbWFnZUxvYWRpbmdTdGF0ZSA9PT0gJ25vdC1sb2FkZWQnKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJJbWFnZUxvYWRpbmdTdGF0ZSA9ICdsb2FkaW5nJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5wcmVsb2FkZXJUaW1lb3V0KTtcblxuICAgICAgICAvLyBNb2RlOiBkZWZhdWx0XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbk1vZGUgPT09ICdkZWZhdWx0Jyl7IFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TGlnaHRib3hBbmltYXRpb24oKTtcbiAgICAgICAgICAgIH0sIHRoaXMubWluVGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkltYWdlTG9hZGVkKCl7XG4gICAgICAgIC8vIFdoZW4gb3BlbmluZyBsaWdodGJveFxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25Nb2RlID09PSAnem9vbS1wcmVsb2FkZXInICYmIFxuICAgICAgICAgICAgdGhpcy5zaG93U3RhdGUgPT09ICdpbml0aWFsLXRodW1ibmFpbC1pbWFnZScpe1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsTGlnaHRib3hWaXJ0dWFsSW1hZ2UoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VyckltYWdlTG9hZGluZ1N0YXRlID0gJ3VwbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMaWdodGJveEFuaW1hdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMuaGlkZVRodW1ibmFpbCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVRodW1ibmFpbEltYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5taW5UaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdoZW4gb3BlbmluZyBuZXh0IC8gcHJldmlvdXMgaW1hZ2VcbiAgICAgICAgaWYgKHRoaXMuc2hvd1N0YXRlID09PSAnYW5pbWF0aW9uLWVuZCcpe1xuICAgICAgICAgICAgdGhpcy5jdXJySW1hZ2VMb2FkaW5nU3RhdGUgPSAndXBsb2FkZWQnO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5oaWRlVGh1bWJuYWlsKXtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVUaHVtYm5haWxJbWFnZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uSW1hZ2VFcnJvcihldmVudCl7XG4gICAgICAgIHRoaXMuY3VyckltYWdlTG9hZGluZ1N0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgdGhpcy5pbml0aWFsTGlnaHRib3hEZWZhdWx0KCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dMaWdodGJveEFuaW1hdGlvbigpO1xuICAgICAgICB9LCB0aGlzLm1pblRpbWVvdXQpO1xuICAgIH1cblxuICAgIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQpe1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLmxpZ2h0Ym94Q29udGFpbmVyRWxlbS5uYXRpdmVFbGVtZW50IHx8IHRoaXMuc2ltcGxlTW9kZSl7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTGlnaHRib3goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxMaWdodGJveCgpe1xuICAgICAgICB0aGlzLnNldE1heERpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5zZXRBbmltYXRpb25EdXJhdGlvbigpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5hbmltYXRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlICd6b29tLXByZWxvYWRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsTGlnaHRib3hUaHVtYm5haWxJbWFnZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsTGlnaHRib3hEZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0aWFsTGlnaHRib3hEZWZhdWx0KCl7XG4gICAgICAgIHRoaXMuc2hvd1N0YXRlID0gJ2luaXRpYWwtZGVmYXVsdCc7XG4gICAgICAgIHRoaXMuY29udGFpbmVyU3R5bGVzID0ge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMCwgMCknLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgb3BhY2l0eTogJzAnXG4gICAgICAgIH1cbiAgICAgICAgLy8gbmV4dCBzdGVwOiBBZnRlclZpZXdJbml0XG4gICAgfVxuXG4gICAgaW5pdGlhbExpZ2h0Ym94VmlydHVhbEltYWdlKCl7XG4gICAgICAgIHRoaXMuc2V0U2hvd1N0YXRlKCdpbml0aWFsLXZpcnR1YWwtaW1hZ2UnKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJTdHlsZXMgPSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMuY29udGFpbmVySW5pdGlhbFBvc2l0aW9uLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnZpcnR1YWxJbWFnZURpbWVuc2lvbi5oZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMudmlydHVhbEltYWdlRGltZW5zaW9uLndpZHRoICsgJ3B4J1xuICAgICAgICB9XG4gICAgICAgIC8vIG5leHQgc3RlcDogb25JbWFnZUxvYWRlZCgpIC0+IHNob3dMaWdodGJveEFuaW1hdGlvbigpXG4gICAgfVxuXG4gICAgaW5pdGlhbExpZ2h0Ym94VGh1bWJuYWlsSW1hZ2UoKXtcbiAgICAgICAgdGhpcy5zZXRTaG93U3RhdGUoJ2luaXRpYWwtdGh1bWJuYWlsLWltYWdlJyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyU3R5bGVzID0ge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0aGlzLmNvbnRhaW5lckluaXRpYWxQb3NpdGlvbixcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy50aHVtYm5haWxJbWFnZVBvc2l0aW9uLmhlaWdodCArICdweCcsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy50aHVtYm5haWxJbWFnZVBvc2l0aW9uLndpZHRoICsgJ3B4J1xuICAgICAgICB9XG4gICAgICAgIC8vIG5leHQgc3RlcDogb25JbWFnZUxvYWRlZCgpXG4gICAgfVxuXG4gICAgc2hvd0xpZ2h0Ym94QW5pbWF0aW9uKCl7XG4gICAgICAgIHRoaXMuaG9zdEFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0U2hvd1N0YXRlKCdhbmltYXRpb24nKTtcbiAgICAgICAgdGhpcy5ob3N0U2hvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcigpO1xuICAgICAgICB0aGlzLnNldEFuaW1hdGlvbkR1cmF0aW9uKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBNb2RlOiB6b29tIHByZWxvYWRlclxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25Nb2RlID09PSAnem9vbS1wcmVsb2FkZXInICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJJbWFnZUxvYWRpbmdTdGF0ZSAhPT0gJ2Vycm9yJyl7IFxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJTdHlsZXMudHJhbnNmb3JtID0gdGhpcy5jb250YWluZXJGdWxsc2NyZWVuUG9zaXRpb247XG4gICAgICAgIH0gXG5cbiAgICAgICAgLy8gTW9kZTogZGVmYXVsdFxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25Nb2RlID09PSAnZGVmYXVsdCcpe1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJTdHlsZXMub3BhY2l0eSA9ICcxJztcbiAgICAgICAgfVxuICAgICAgICAvLyBuZXh0IHN0ZXA6IGhhbmRsZUxpZ2h0Ym94VHJhbnNpdGlvbkVuZFxuICAgIH1cblxuICAgIHNob3dMaWdodGJveEFuaW1hdGlvbkVuZCgpe1xuICAgICAgICB0aGlzLnNldFNob3dTdGF0ZSgnYW5pbWF0aW9uLWVuZCcpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclN0eWxlcyA9IHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZTNkKDAsIDAsIDApJyxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb3NlTGlnaHRib3goKXtcbiAgICAgICAgdGhpcy5zZXRDbG9zaW5nU3RhdGUoJ2luaXRpYWwnKTtcbiAgICAgICAgdGhpcy5ob3N0U2hvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbG9zZUxpZ2h0Ym94SW5pdGlhbCgp