@mapaxe/ngx-pinch-zoom
Version:
Pinch zoom component for Angular 16.
334 lines • 44.2 kB
JavaScript
import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
import { defaultProperties, backwardCompatibilityProperties } from './properties';
import { IvyPinch } from './ivypinch';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export const _defaultComponentProperties = {
overflow: 'hidden',
disableZoomControl: 'auto',
backgroundColor: 'rgba(0,0,0,0.85)',
};
class PinchZoomComponent {
elementRef;
defaultComponentProperties;
pinchZoom;
_properties;
zoomControlPositionClass;
_transitionDuration;
_doubleTap;
_doubleTapScale;
_autoZoomOut;
_limitZoom;
set properties(value) {
if (value) {
this._properties = value;
}
}
get properties() {
return this._properties;
}
// transitionDuration
set transitionDurationBackwardCompatibility(value) {
if (value) {
this._transitionDuration = value;
}
}
set transitionDuration(value) {
if (value) {
this._transitionDuration = value;
}
}
get transitionDuration() {
return this._transitionDuration;
}
// doubleTap
set doubleTapBackwardCompatibility(value) {
if (value) {
this._doubleTap = value;
}
}
set doubleTap(value) {
if (value) {
this._doubleTap = value;
}
}
get doubleTap() {
return this._doubleTap;
}
// doubleTapScale
set doubleTapScaleBackwardCompatibility(value) {
if (value) {
this._doubleTapScale = value;
}
}
set doubleTapScale(value) {
if (value) {
this._doubleTapScale = value;
}
}
get doubleTapScale() {
return this._doubleTapScale;
}
// autoZoomOut
set autoZoomOutBackwardCompatibility(value) {
if (value) {
this._autoZoomOut = value;
}
}
set autoZoomOut(value) {
if (value) {
this._autoZoomOut = value;
}
}
get autoZoomOut() {
return this._autoZoomOut;
}
// limitZoom
set limitZoomBackwardCompatibility(value) {
if (value) {
this._limitZoom = value;
}
}
set limitZoom(value) {
if (value) {
this._limitZoom = value;
}
}
get limitZoom() {
return this._limitZoom;
}
disabled;
disablePan;
overflow;
zoomControlScale;
disableZoomControl;
backgroundColor;
limitPan;
minPanScale;
minScale;
listeners;
wheel;
autoHeight;
stepZoomFactor;
wheelZoomFactor;
draggableImage;
onZoomChange = new EventEmitter();
get hostOverflow() {
return this.properties['overflow'];
}
get hostBackgroundColor() {
return this.properties['backgroundColor'];
}
get isTouchScreen() {
var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
var mq = function (query) {
return window.matchMedia(query).matches;
};
if ('ontouchstart' in window) {
return true;
}
// include the 'heartz' as a way to have a non matching MQ to help terminate the join
// https://git.io/vznFH
var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');
return mq(query);
}
get isDragging() {
return this.pinchZoom ? this.pinchZoom.isDragging() : undefined;
}
get isDisabled() {
return this.properties['disabled'];
}
get scale() {
return this.pinchZoom.scale;
}
get isZoomedIn() {
return this.scale > 1;
}
get scaleLevel() {
return Math.round(this.scale / this._zoomControlScale);
}
get maxScale() {
return this.pinchZoom.maxScale;
}
get isZoomLimitReached() {
return this.scale >= this.maxScale;
}
get _zoomControlScale() {
return this.getPropertiesValue('zoomControlScale');
}
constructor(elementRef) {
this.elementRef = elementRef;
this.defaultComponentProperties = this.getDefaultComponentProperties();
this.applyPropertiesDefault(this.defaultComponentProperties, {});
}
ngOnInit() {
this.initPinchZoom();
/* Calls the method until the image size is available */
this.detectLimitZoom();
}
isControl() {
if (this.isDisabled) {
return false;
}
if (this.properties['disableZoomControl'] === 'disable') {
return false;
}
if (this.isTouchScreen && this.properties['disableZoomControl'] === 'auto') {
return false;
}
return true;
}
ngOnChanges(changes) {
let changedProperties = this.getProperties(changes);
changedProperties = this.renameProperties(changedProperties);
this.applyPropertiesDefault(this.defaultComponentProperties, changedProperties);
}
ngOnDestroy() {
this.destroy();
}
toggleZoom() {
this.pinchZoom.toggleZoom();
}
zoomPoint(point, scale) {
this.pinchZoom.zoomPoint(point, scale);
}
zoomIn() {
this.pinchZoom.stepZoom('IN');
}
zoomOut() {
this.pinchZoom.stepZoom('OUT');
}
resetZoom() {
this.pinchZoom.resetScale();
}
destroy() {
if (this.pinchZoom)
this.pinchZoom.destroy();
}
initPinchZoom() {
if (this.properties['disabled']) {
return;
}
this.properties['element'] = this.elementRef.nativeElement.querySelector('.pinch-zoom-content');
this.pinchZoom = new IvyPinch(this.properties, this.onZoomChange);
}
getProperties(changes) {
let properties = {};
for (var prop in changes) {
if (prop !== 'properties') {
properties[prop] = changes[prop].currentValue;
}
if (prop === 'properties') {
properties = changes[prop].currentValue;
}
}
return properties;
}
renameProperties(properties) {
for (var prop in properties) {
if (backwardCompatibilityProperties[prop]) {
properties[backwardCompatibilityProperties[prop]] = properties[prop];
delete properties[prop];
}
}
return properties;
}
applyPropertiesDefault(defaultProperties, properties) {
this.properties = Object.assign({}, defaultProperties, properties);
}
detectLimitZoom() {
if (this.pinchZoom) {
this.pinchZoom.detectLimitZoom();
}
}
getPropertiesValue(propertyName) {
if (this.properties && this.properties[propertyName]) {
return this.properties[propertyName];
}
else {
return this.defaultComponentProperties[propertyName];
}
}
getDefaultComponentProperties() {
return { ...defaultProperties, ..._defaultComponentProperties };
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PinchZoomComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: PinchZoomComponent, selector: "pinch-zoom, [pinch-zoom]", inputs: { properties: "properties", transitionDurationBackwardCompatibility: ["transition-duration", "transitionDurationBackwardCompatibility"], transitionDuration: "transitionDuration", doubleTapBackwardCompatibility: ["double-tap", "doubleTapBackwardCompatibility"], doubleTap: "doubleTap", doubleTapScaleBackwardCompatibility: ["double-tap-scale", "doubleTapScaleBackwardCompatibility"], doubleTapScale: "doubleTapScale", autoZoomOutBackwardCompatibility: ["auto-zoom-out", "autoZoomOutBackwardCompatibility"], autoZoomOut: "autoZoomOut", limitZoomBackwardCompatibility: ["limit-zoom", "limitZoomBackwardCompatibility"], limitZoom: "limitZoom", disabled: "disabled", disablePan: "disablePan", overflow: "overflow", zoomControlScale: "zoomControlScale", disableZoomControl: "disableZoomControl", backgroundColor: "backgroundColor", limitPan: "limitPan", minPanScale: "minPanScale", minScale: "minScale", listeners: "listeners", wheel: "wheel", autoHeight: "autoHeight", stepZoomFactor: "stepZoomFactor", wheelZoomFactor: "wheelZoomFactor", draggableImage: "draggableImage" }, outputs: { onZoomChange: "onZoomChange" }, host: { properties: { "style.overflow": "this.hostOverflow", "style.background-color": "this.hostBackgroundColor" } }, exportAs: ["pinchZoom"], usesOnChanges: true, ngImport: i0, template: "<div class=\"pinch-zoom-content\" [class.pz-dragging]=\"isDragging\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<!-- Control: one button -->\r\n<div\r\n class=\"pz-zoom-button pz-zoom-control-position-bottom\"\r\n [class.pz-zoom-button-out]=\"isZoomedIn\"\r\n *ngIf=\"isControl()\"\r\n (click)=\"toggleZoom()\"\r\n></div>\r\n", styles: [":host{position:relative;overflow:hidden;display:block}.pinch-zoom-content{height:inherit}.pz-dragging{cursor:all-scroll}.pz-zoom-button{position:absolute;z-index:1000;color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgc3R5bGU9IiI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6IiBpZD0ic3ZnXzEiIGNsYXNzPSIiIGZpbGw9IiNmZmZmZmYiIGZpbGwtb3BhY2l0eT0iMSIvPjxwYXRoIGQ9Ik0xMiAxMGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiIgaWQ9InN2Z18zIiBjbGFzcz0iIiBmaWxsPSIjZmZmZmZmIiBmaWxsLW9wYWNpdHk9IjEiLz48L2c+PC9zdmc+),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6TTcgOWg1djFIN3oiIGlkPSJzdmdfMiIgY2xhc3M9IiIgZmlsbD0iI2ZmZmZmZiIgZmlsbC1vcGFjaXR5PSIxIi8+PC9nPjwvc3ZnPg==);background-color:#000c;background-position:center,-1000px;background-repeat:no-repeat,no-repeat;background-size:40px;width:56px;height:56px;border-radius:4px;opacity:.5;cursor:pointer;transition:opacity .1s;-webkit-user-select:none;user-select:none}.pz-zoom-button-out{background-position:-1000px,center}.pz-zoom-button:hover{opacity:.7}.pz-zoom-button.pz-zoom-control-position-right{right:16px;top:50%;margin-top:-28px}.pz-zoom-button.pz-zoom-control-position-right-bottom{right:16px;bottom:32px}.pz-zoom-button.pz-zoom-control-position-bottom{bottom:16px;left:50%;margin-left:-28px}.pz-zoom-control{position:absolute;background-color:#000c;border-radius:4px;overflow:hidden}.pz-zoom-control.pz-zoom-control-position-right{right:16px;top:50%;margin-top:-48px}.pz-zoom-control.pz-zoom-control-position-right-bottom{right:16px;bottom:32px}.pz-zoom-control.pz-zoom-control-position-bottom{bottom:16px;left:50%;margin-left:-48px}.pz-zoom-in,.pz-zoom-out{width:48px;height:48px;background-position:center;background-repeat:no-repeat;opacity:1;cursor:pointer}.pz-zoom-in:hover,.pz-zoom-out:hover{background-color:#fff3}.pz-zoom-control-position-bottom .pz-zoom-in,.pz-zoom-control-position-bottom .pz-zoom-out{float:right}.pz-disabled{opacity:.5;cursor:default}.pz-disabled:hover{background-color:#fff0}.pz-zoom-in{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgc3R5bGU9IiI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiIGlkPSJzdmdfMSIgY2xhc3M9IiIgc3Ryb2tlPSJub25lIiBmaWxsPSIjZmZmZmZmIiBmaWxsLW9wYWNpdHk9IjEiLz48cGF0aCBkPSJNLTE1LjgzNjczNDQyMDQ2MTY1Myw0NC41MzU0MDkzMDY3MTAxOCBoNTguMjA0MDgwODI3NTkzMDkgdi02LjU3NjIyNjcyMzM2OTIyMTUgSC0xNS44MzY3MzQ0MjA0NjE2NTMgeiIgZmlsbD0ibm9uZSIgaWQ9InN2Z18yIiBjbGFzcz0iIiBzdHJva2U9Im5vbmUiLz48L2c+PC9zdmc+)}.pz-zoom-out{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE5IDEzSDV2LTJoMTR2MnoiIGlkPSJzdmdfMSIgY2xhc3M9IiIgZmlsbD0iI2ZmZmZmZiIgZmlsbC1vcGFjaXR5PSIxIi8+PC9nPjwvc3ZnPg==)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
}
export { PinchZoomComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PinchZoomComponent, decorators: [{
type: Component,
args: [{ selector: 'pinch-zoom, [pinch-zoom]', exportAs: 'pinchZoom', template: "<div class=\"pinch-zoom-content\" [class.pz-dragging]=\"isDragging\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<!-- Control: one button -->\r\n<div\r\n class=\"pz-zoom-button pz-zoom-control-position-bottom\"\r\n [class.pz-zoom-button-out]=\"isZoomedIn\"\r\n *ngIf=\"isControl()\"\r\n (click)=\"toggleZoom()\"\r\n></div>\r\n", styles: [":host{position:relative;overflow:hidden;display:block}.pinch-zoom-content{height:inherit}.pz-dragging{cursor:all-scroll}.pz-zoom-button{position:absolute;z-index:1000;color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgc3R5bGU9IiI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6IiBpZD0ic3ZnXzEiIGNsYXNzPSIiIGZpbGw9IiNmZmZmZmYiIGZpbGwtb3BhY2l0eT0iMSIvPjxwYXRoIGQ9Ik0xMiAxMGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiIgaWQ9InN2Z18zIiBjbGFzcz0iIiBmaWxsPSIjZmZmZmZmIiBmaWxsLW9wYWNpdHk9IjEiLz48L2c+PC9zdmc+),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6TTcgOWg1djFIN3oiIGlkPSJzdmdfMiIgY2xhc3M9IiIgZmlsbD0iI2ZmZmZmZiIgZmlsbC1vcGFjaXR5PSIxIi8+PC9nPjwvc3ZnPg==);background-color:#000c;background-position:center,-1000px;background-repeat:no-repeat,no-repeat;background-size:40px;width:56px;height:56px;border-radius:4px;opacity:.5;cursor:pointer;transition:opacity .1s;-webkit-user-select:none;user-select:none}.pz-zoom-button-out{background-position:-1000px,center}.pz-zoom-button:hover{opacity:.7}.pz-zoom-button.pz-zoom-control-position-right{right:16px;top:50%;margin-top:-28px}.pz-zoom-button.pz-zoom-control-position-right-bottom{right:16px;bottom:32px}.pz-zoom-button.pz-zoom-control-position-bottom{bottom:16px;left:50%;margin-left:-28px}.pz-zoom-control{position:absolute;background-color:#000c;border-radius:4px;overflow:hidden}.pz-zoom-control.pz-zoom-control-position-right{right:16px;top:50%;margin-top:-48px}.pz-zoom-control.pz-zoom-control-position-right-bottom{right:16px;bottom:32px}.pz-zoom-control.pz-zoom-control-position-bottom{bottom:16px;left:50%;margin-left:-48px}.pz-zoom-in,.pz-zoom-out{width:48px;height:48px;background-position:center;background-repeat:no-repeat;opacity:1;cursor:pointer}.pz-zoom-in:hover,.pz-zoom-out:hover{background-color:#fff3}.pz-zoom-control-position-bottom .pz-zoom-in,.pz-zoom-control-position-bottom .pz-zoom-out{float:right}.pz-disabled{opacity:.5;cursor:default}.pz-disabled:hover{background-color:#fff0}.pz-zoom-in{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgc3R5bGU9IiI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiIGlkPSJzdmdfMSIgY2xhc3M9IiIgc3Ryb2tlPSJub25lIiBmaWxsPSIjZmZmZmZmIiBmaWxsLW9wYWNpdHk9IjEiLz48cGF0aCBkPSJNLTE1LjgzNjczNDQyMDQ2MTY1Myw0NC41MzU0MDkzMDY3MTAxOCBoNTguMjA0MDgwODI3NTkzMDkgdi02LjU3NjIyNjcyMzM2OTIyMTUgSC0xNS44MzY3MzQ0MjA0NjE2NTMgeiIgZmlsbD0ibm9uZSIgaWQ9InN2Z18yIiBjbGFzcz0iIiBzdHJva2U9Im5vbmUiLz48L2c+PC9zdmc+)}.pz-zoom-out{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHJlY3QgaWQ9ImJhY2tncm91bmRyZWN0IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4PSIwIiB5PSIwIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiLz48ZyBjbGFzcz0iY3VycmVudExheWVyIiBzdHlsZT0iIj48dGl0bGU+TGF5ZXIgMTwvdGl0bGU+PHBhdGggZD0iTTE5IDEzSDV2LTJoMTR2MnoiIGlkPSJzdmdfMSIgY2xhc3M9IiIgZmlsbD0iI2ZmZmZmZiIgZmlsbC1vcGFjaXR5PSIxIi8+PC9nPjwvc3ZnPg==)}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { properties: [{
type: Input,
args: ['properties']
}], transitionDurationBackwardCompatibility: [{
type: Input,
args: ['transition-duration']
}], transitionDuration: [{
type: Input,
args: ['transitionDuration']
}], doubleTapBackwardCompatibility: [{
type: Input,
args: ['double-tap']
}], doubleTap: [{
type: Input,
args: ['doubleTap']
}], doubleTapScaleBackwardCompatibility: [{
type: Input,
args: ['double-tap-scale']
}], doubleTapScale: [{
type: Input,
args: ['doubleTapScale']
}], autoZoomOutBackwardCompatibility: [{
type: Input,
args: ['auto-zoom-out']
}], autoZoomOut: [{
type: Input,
args: ['autoZoomOut']
}], limitZoomBackwardCompatibility: [{
type: Input,
args: ['limit-zoom']
}], limitZoom: [{
type: Input,
args: ['limitZoom']
}], disabled: [{
type: Input
}], disablePan: [{
type: Input
}], overflow: [{
type: Input
}], zoomControlScale: [{
type: Input
}], disableZoomControl: [{
type: Input
}], backgroundColor: [{
type: Input
}], limitPan: [{
type: Input
}], minPanScale: [{
type: Input
}], minScale: [{
type: Input
}], listeners: [{
type: Input
}], wheel: [{
type: Input
}], autoHeight: [{
type: Input
}], stepZoomFactor: [{
type: Input
}], wheelZoomFactor: [{
type: Input
}], draggableImage: [{
type: Input
}], onZoomChange: [{
type: Output
}], hostOverflow: [{
type: HostBinding,
args: ['style.overflow']
}], hostBackgroundColor: [{
type: HostBinding,
args: ['style.background-color']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluY2gtem9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcGluY2gtem9vbS9zcmMvbGliL3BpbmNoLXpvb20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXBpbmNoLXpvb20vc3JjL2xpYi9waW5jaC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ2MsTUFBTSxFQUU1QixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBRXRDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUF3QjtJQUM1RCxRQUFRLEVBQUUsUUFBUTtJQUNsQixrQkFBa0IsRUFBRSxNQUFNO0lBQzFCLGVBQWUsRUFBRSxrQkFBa0I7Q0FDdEMsQ0FBQztBQUlGLE1BTWEsa0JBQWtCO0lBc0xQO0lBckxwQiwwQkFBMEIsQ0FBdUI7SUFDekMsU0FBUyxDQUFXO0lBQ3BCLFdBQVcsQ0FBdUI7SUFDbEMsd0JBQXdCLENBQXFCO0lBQzdDLG1CQUFtQixDQUFVO0lBQzdCLFVBQVUsQ0FBVztJQUNyQixlQUFlLENBQVU7SUFDekIsWUFBWSxDQUFXO0lBQ3ZCLFVBQVUsQ0FBa0M7SUFFcEQsSUFBeUIsVUFBVSxDQUFDLEtBQTBCO1FBQzFELElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsSUFBa0MsdUNBQXVDLENBQUMs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Z0JBR0gsWUFBWTtzQkFEZixXQUFXO3VCQUFDLGdCQUFnQjtnQkFNekIsbUJBQW1CO3NCQUR0QixXQUFXO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge01vdXNlWm9vbVBvaW50LCBQaW5jaFpvb21Qcm9wZXJ0aWVzLCBab29tRXZlbnR9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGRlZmF1bHRQcm9wZXJ0aWVzLCBiYWNrd2FyZENvbXBhdGliaWxpdHlQcm9wZXJ0aWVzIH0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHsgSXZ5UGluY2ggfSBmcm9tICcuL2l2eXBpbmNoJztcclxuXHJcbmV4cG9ydCBjb25zdCBfZGVmYXVsdENvbXBvbmVudFByb3BlcnRpZXM6IFBpbmNoWm9vbVByb3BlcnRpZXMgPSB7XHJcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXHJcbiAgICBkaXNhYmxlWm9vbUNvbnRyb2w6ICdhdXRvJyxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC44NSknLFxyXG59O1xyXG5cclxudHlwZSBQcm9wZXJ0eU5hbWUgPSBrZXlvZiBQaW5jaFpvb21Qcm9wZXJ0aWVzO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3BpbmNoLXpvb20sIFtwaW5jaC16b29tXScsXHJcbiAgICBleHBvcnRBczogJ3BpbmNoWm9vbScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGluY2gtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9waW5jaC16b29tLmNvbXBvbmVudC5zYXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaW5jaFpvb21Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBkZWZhdWx0Q29tcG9uZW50UHJvcGVydGllcyE6IFBpbmNoWm9vbVByb3BlcnRpZXM7XHJcbiAgICBwcml2YXRlIHBpbmNoWm9vbTogSXZ5UGluY2g7XHJcbiAgICBwcml2YXRlIF9wcm9wZXJ0aWVzITogUGluY2hab29tUHJvcGVydGllcztcclxuICAgIHByaXZhdGUgem9vbUNvbnRyb2xQb3NpdGlvbkNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBwcml2YXRlIF90cmFuc2l0aW9uRHVyYXRpb24hOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9kb3VibGVUYXAhOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfZG91YmxlVGFwU2NhbGUhOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9hdXRvWm9vbU91dCE6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9saW1pdFpvb20hOiBudW1iZXIgfCAnb3JpZ2luYWwgaW1hZ2Ugc2l6ZSc7XHJcblxyXG4gICAgQElucHV0KCdwcm9wZXJ0aWVzJykgc2V0IHByb3BlcnRpZXModmFsdWU6IFBpbmNoWm9vbVByb3BlcnRpZXMpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvcGVydGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllcztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0cmFuc2l0aW9uRHVyYXRpb25cclxuICAgIEBJbnB1dCgndHJhbnNpdGlvbi1kdXJhdGlvbicpIHNldCB0cmFuc2l0aW9uRHVyYXRpb25CYWNrd2FyZENvbXBhdGliaWxpdHkodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uRHVyYXRpb24gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCd0cmFuc2l0aW9uRHVyYXRpb24nKSBzZXQgdHJhbnNpdGlvbkR1cmF0aW9uKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbkR1cmF0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0cmFuc2l0aW9uRHVyYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25EdXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb3VibGVUYXBcclxuICAgIEBJbnB1dCgnZG91YmxlLXRhcCcpIHNldCBkb3VibGVUYXBCYWNrd2FyZENvbXBhdGliaWxpdHkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZG91YmxlVGFwID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgnZG91YmxlVGFwJykgc2V0IGRvdWJsZVRhcCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb3VibGVUYXAgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRvdWJsZVRhcCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG91YmxlVGFwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvdWJsZVRhcFNjYWxlXHJcbiAgICBASW5wdXQoJ2RvdWJsZS10YXAtc2NhbGUnKSBzZXQgZG91YmxlVGFwU2NhbGVCYWNrd2FyZENvbXBhdGliaWxpdHkodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb3VibGVUYXBTY2FsZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoJ2RvdWJsZVRhcFNjYWxlJykgc2V0IGRvdWJsZVRhcFNjYWxlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZG91YmxlVGFwU2NhbGUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRvdWJsZVRhcFNjYWxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb3VibGVUYXBTY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhdXRvWm9vbU91dFxyXG4gICAgQElucHV0KCdhdXRvLXpvb20tb3V0Jykgc2V0IGF1dG9ab29tT3V0QmFja3dhcmRDb21wYXRpYmlsaXR5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2F1dG9ab29tT3V0ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgnYXV0b1pvb21PdXQnKSBzZXQgYXV0b1pvb21PdXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fYXV0b1pvb21PdXQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGF1dG9ab29tT3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvWm9vbU91dDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsaW1pdFpvb21cclxuICAgIEBJbnB1dCgnbGltaXQtem9vbScpIHNldCBsaW1pdFpvb21CYWNrd2FyZENvbXBhdGliaWxpdHkodmFsdWU6IG51bWJlciB8ICdvcmlnaW5hbCBpbWFnZSBzaXplJykge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9saW1pdFpvb20gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCdsaW1pdFpvb20nKSBzZXQgbGltaXRab29tKHZhbHVlOiBudW1iZXIgfCAnb3JpZ2luYWwgaW1hZ2Ugc2l6ZScpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGltaXRab29tID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW1pdFpvb20oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpbWl0Wm9vbTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCE6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlUGFuITogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG92ZXJmbG93ITogJ2hpZGRlbicgfCAndmlzaWJsZSc7XHJcbiAgICBASW5wdXQoKSB6b29tQ29udHJvbFNjYWxlITogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZVpvb21Db250cm9sITogJ2Rpc2FibGUnIHwgJ25ldmVyJyB8ICdhdXRvJztcclxuICAgIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvciE6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGxpbWl0UGFuITogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG1pblBhblNjYWxlITogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgbWluU2NhbGUhOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnMhOiAnYXV0bycgfCAnbW91c2UgYW5kIHRvdWNoJztcclxuICAgIEBJbnB1dCgpIHdoZWVsITogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGF1dG9IZWlnaHQhOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgc3RlcFpvb21GYWN0b3IhOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSB3aGVlbFpvb21GYWN0b3IhOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBkcmFnZ2FibGVJbWFnZSE6IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpIG9uWm9vbUNoYW5nZTogRXZlbnRFbWl0dGVyPFpvb21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFpvb21FdmVudD4oKTtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm92ZXJmbG93JylcclxuICAgIGdldCBob3N0T3ZlcmZsb3coKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1snb3ZlcmZsb3cnXTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJhY2tncm91bmQtY29sb3InKVxyXG4gICAgZ2V0IGhvc3RCYWNrZ3JvdW5kQ29sb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1snYmFja2dyb3VuZENvbG9yJ107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzVG91Y2hTY3JlZW4oKSB7XHJcbiAgICAgICAgdmFyIHByZWZpeGVzID0gJyAtd2Via2l0LSAtbW96LSAtby0gLW1zLSAnLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgdmFyIG1xID0gZnVuY3Rpb24gKHF1ZXJ5OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpbmNsdWRlIHRoZSAnaGVhcnR6JyBhcyBhIHdheSB0byBoYXZlIGEgbm9uIG1hdGNoaW5nIE1RIHRvIGhlbHAgdGVybWluYXRlIHRoZSBqb2luXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXQuaW8vdnpuRkhcclxuICAgICAgICB2YXIgcXVlcnkgPSBbJygnLCBwcmVmaXhlcy5qb2luKCd0b3VjaC1lbmFibGVkKSwoJyksICdoZWFydHonLCAnKSddLmpvaW4oJycpO1xyXG4gICAgICAgIHJldHVybiBtcShxdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzRHJhZ2dpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGluY2hab29tID8gdGhpcy5waW5jaFpvb20uaXNEcmFnZ2luZygpIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0Rpc2FibGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbJ2Rpc2FibGVkJ107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjYWxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBpbmNoWm9vbS5zY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNab29tZWRJbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2FsZSA+IDE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjYWxlTGV2ZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5zY2FsZSAvIHRoaXMuX3pvb21Db250cm9sU2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtYXhTY2FsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waW5jaFpvb20ubWF4U2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzWm9vbUxpbWl0UmVhY2hlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2FsZSA+PSB0aGlzLm1heFNjYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfem9vbUNvbnRyb2xTY2FsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0aWVzVmFsdWUoJ3pvb21Db250cm9sU2NhbGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb21wb25lbnRQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWZhdWx0Q29tcG9uZW50UHJvcGVydGllcygpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlQcm9wZXJ0aWVzRGVmYXVsdCh0aGlzLmRlZmF1bHRDb21wb25lbnRQcm9wZXJ0aWVzLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0UGluY2hab29tKCk7XHJcblxyXG4gICAgICAgIC8qIENhbGxzIHRoZSBtZXRob2QgdW50aWwgdGhlIGltYWdlIHNpemUgaXMgYXZhaWxhYmxlICovXHJcbiAgICAgICAgdGhpcy5kZXRlY3RMaW1pdFpvb20oKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0NvbnRyb2woKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzWydkaXNhYmxlWm9vbUNvbnRyb2wnXSA9PT0gJ2Rpc2FibGUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVG91Y2hTY3JlZW4gJiYgdGhpcy5wcm9wZXJ0aWVzWydkaXNhYmxlWm9vbUNvbnRyb2wnXSA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBsZXQgY2hhbmdlZFByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMgPSB0aGlzLnJlbmFtZVByb3BlcnRpZXMoY2hhbmdlZFByb3BlcnRpZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5UHJvcGVydGllc0RlZmF1bHQodGhpcy5kZWZhdWx0Q29tcG9uZW50UHJvcGVydGllcywgY2hhbmdlZFByb3BlcnRpZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVpvb20oKSB7XHJcbiAgICAgICAgdGhpcy5waW5jaFpvb20udG9nZ2xlWm9vbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHpvb21Qb2ludChwb2ludDogTW91c2Vab29tUG9pbnQsIHNjYWxlPzogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5waW5jaFpvb20uem9vbVBvaW50KHBvaW50LCBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgem9vbUluKCkge1xyXG4gICAgICAgIHRoaXMucGluY2hab29tLnN0ZXBab29tKCdJTicpO1xyXG4gICAgfVxyXG5cclxuICAgIHpvb21PdXQoKSB7XHJcbiAgICAgICAgdGhpcy5waW5jaFpvb20uc3RlcFpvb20oJ09VVCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Wm9vbSgpIHtcclxuICAgICAgICB0aGlzLnBpbmNoWm9vbS5yZXNldFNjYWxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5waW5jaFpvb20pIHRoaXMucGluY2hab29tLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRQaW5jaFpvb20oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllc1snZGlzYWJsZWQnXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbJ2VsZW1lbnQnXSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5waW5jaC16b29tLWNvbnRlbnQnKTtcclxuICAgICAgICB0aGlzLnBpbmNoWm9vbSA9IG5ldyBJdnlQaW5jaCh0aGlzLnByb3BlcnRpZXMsIHRoaXMub25ab29tQ2hhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFByb3BlcnRpZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGxldCBwcm9wZXJ0aWVzOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wICE9PSAncHJvcGVydGllcycpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbcHJvcF0gPSBjaGFuZ2VzW3Byb3BdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ3Byb3BlcnRpZXMnKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gY2hhbmdlc1twcm9wXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW5hbWVQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSkge1xyXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICBpZiAoYmFja3dhcmRDb21wYXRpYmlsaXR5UHJvcGVydGllc1twcm9wXSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1tiYWNrd2FyZENvbXBhdGliaWxpdHlQcm9wZXJ0aWVzW3Byb3BdXSA9IHByb3BlcnRpZXNbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcHJvcGVydGllc1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseVByb3BlcnRpZXNEZWZhdWx0KGRlZmF1bHRQcm9wZXJ0aWVzOiBQaW5jaFpvb21Qcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzOiBQaW5jaFpvb21Qcm9wZXJ0aWVzKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFByb3BlcnRpZXMsIHByb3BlcnRpZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGV0ZWN0TGltaXRab29tKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBpbmNoWm9vbSkge1xyXG4gICAgICAgICAgICB0aGlzLnBpbmNoWm9vbS5kZXRlY3RMaW1pdFpvb20oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQcm9wZXJ0aWVzVmFsdWUocHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzICYmIHRoaXMucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29tcG9uZW50UHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERlZmF1bHRDb21wb25lbnRQcm9wZXJ0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLmRlZmF1bHRQcm9wZXJ0aWVzLCAuLi5fZGVmYXVsdENvbXBvbmVudFByb3BlcnRpZXMgfTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGluY2gtem9vbS1jb250ZW50XCIgW2NsYXNzLnB6LWRyYWdnaW5nXT1cImlzRHJhZ2dpbmdcIj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuPC9kaXY+XHJcblxyXG48IS0tIENvbnRyb2w6IG9uZSBidXR0b24gLS0+XHJcbjxkaXZcclxuICAgIGNsYXNzPVwicHotem9vbS1idXR0b24gcHotem9vbS1jb250cm9sLXBvc2l0aW9uLWJvdHRvbVwiXHJcbiAgICBbY2xhc3MucHotem9vbS1idXR0b24tb3V0XT1cImlzWm9vbWVkSW5cIlxyXG4gICAgKm5nSWY9XCJpc0NvbnRyb2woKVwiXHJcbiAgICAoY2xpY2spPVwidG9nZ2xlWm9vbSgpXCJcclxuPjwvZGl2PlxyXG4iXX0=