@senx/warpview
Version:
WarpView Elements
253 lines • 49.4 kB
JavaScript
/*
* Copyright 2021 SenX S.A.S.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import { Component, ElementRef, EventEmitter, Input, NgZone, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';
import { WarpViewComponent } from '../warp-view-component';
import { GTSLib } from '../../utils/gts.lib';
import { SizeService } from '../../services/resize.service';
import { Logger } from '../../utils/logger';
import { Subject } from 'rxjs';
import { ColorLib } from '../../utils/color-lib';
import { ChartLib } from '../../utils/chart-lib';
import * as i0 from "@angular/core";
import * as i1 from "../../services/resize.service";
export class WarpViewGtsTreeComponent extends WarpViewComponent {
constructor(el, renderer, sizeService, ngZone) {
super(el, renderer, sizeService, ngZone);
this.el = el;
this.renderer = renderer;
this.sizeService = sizeService;
this.ngZone = ngZone;
this.kbdLastKeyPressed = [];
this.inPlot = false;
this.warpViewSelectedGTS = new EventEmitter();
this._gtsFilter = 'x';
this.gtsList = [];
this.params = [];
this.initOpen = new Subject();
this.LOG = new Logger(WarpViewGtsTreeComponent, this._debug);
}
set gtsFilter(gtsFilter) {
this._gtsFilter = gtsFilter;
}
get gtsFilter() {
return this._gtsFilter;
}
set hiddenData(hiddenData) {
this.LOG.debug(['hiddenData'], hiddenData, this.gtsList);
this._hiddenData = hiddenData;
(this.dataList || []).forEach(item => {
(this._hiddenData || []).some(id => item.gid === id) ? this.hideChip(item) : this.showChip(item);
});
}
get hiddenData() {
return this._hiddenData;
}
ngAfterViewInit() {
this.LOG.debug(['componentDidLoad', 'data'], this._data);
if (this._data) {
this.doRender();
}
}
update(options, refresh) {
this.doRender();
}
doRender() {
this.LOG.debug(['doRender', 'gtsList'], this._data);
if (!this._data) {
return;
}
this._options = ChartLib.mergeDeep(this.defOptions, this._options);
const d = GTSLib.flattenGtsIdArray(GTSLib.getData(this._data).data, 0).res;
this.dataList = this.generateData(this.inPlot ? d : [d]);
this.addOrphans();
this.params = this._data.params || [];
this.LOG.debug(['doRender', 'gtsList', 'dataList'], this.dataList);
this.chartDraw.emit();
}
convert(data) {
return [];
}
resize(layout) {
//
}
orphans() {
return this.dataList.filter(item => !item.parent);
}
hasChildren(parentId) {
return this.dataList.some(item => item.parent === parentId);
}
getChildren(parentId) {
return this.dataList.filter(item => item.parent === parentId);
}
switchPlotState(evt) {
console.log('evt', evt);
}
generateListItem(item) {
const li = this.renderer.createElement('li');
li.id = 'item-' + item.id;
if (this.hasChildren(item.id)) {
const a = this.renderer.createElement('a');
a.href = '#';
a.textContent = `${item.name}`;
a.classList.add('plus');
a.addEventListener('click', e => this.toggle(e, a, li));
this.renderer.appendChild(li, a);
const loader = this.renderer.createElement('div');
loader.classList.add('loader');
loader.classList.add('hidden');
this.renderer.appendChild(li, loader);
}
else {
const span = this.renderer.createElement('span');
const color = ColorLib.getColor(item.gid, this._options.scheme);
span.innerHTML = `<i class="chip"
style="background-color: ${this._hiddenData.some(id => id === item.gid) ? 'transparent' : color};border: 2px solid ${color};"></i>
${GTSLib.formatLabel(item.name)}`;
span.addEventListener('click', e => this.select(item.id));
this.renderer.appendChild(li, span);
}
return li;
}
toggle(event, a, parentLi) {
event.preventDefault();
event.stopPropagation();
if (a.classList.contains('plus')) {
const loader = parentLi.querySelector('.loader');
this.renderer.removeClass(loader, 'hidden');
a.classList.remove('plus');
a.classList.add('minus');
const ul = this.renderer.createElement('ul');
parentLi.appendChild(ul);
setTimeout(() => {
(() => new Promise(resolve => {
const id = parentLi.id.replace('item-', '');
const kids = this.getChildren(id);
const size = kids.length;
for (let i = 0; i < size; i++) {
ul.appendChild(this.generateListItem(kids[i]));
}
resolve();
}))().then(() => {
this.renderer.addClass(loader, 'hidden');
});
});
}
else {
const ul = parentLi.querySelector('ul');
parentLi.removeChild(ul);
a.classList.remove('minus');
a.classList.add('plus');
}
}
addOrphans() {
const root = this.tree.nativeElement;
if (root.hasChildNodes()) {
for (let i = 0; i < root.childElementCount; i++) {
root.children.item(i).remove();
}
}
const orphansArray = this.orphans();
if (orphansArray.length) {
const items = orphansArray.map(this.generateListItem.bind(this));
const ul = this.renderer.createElement('ul');
items.forEach(li => ul.appendChild(li));
root.appendChild(ul);
}
}
generateData(res, parent) {
let root = [];
res.forEach(item => {
if (GTSLib.isGts(item)) {
root.push({
id: GTSLib.uuidv4(),
name: GTSLib.serializeGtsMetadata(item),
gid: item.id,
parent
});
}
else if (GTSLib.isArray(item)) {
const p = GTSLib.uuidv4();
root.push({
id: p,
name: `List of ${item.length} element${item.length > 1 ? 's' : ''}`,
parent
});
root = root.concat(this.generateData(item, p));
}
});
return root;
}
select(id) {
const selected = this.dataList.find(g => g.id === id);
const inActive = this._hiddenData.some(i => i === selected.gid);
if (inActive) {
this._hiddenData = this._hiddenData.filter(i => i === selected.gid);
this.showChip(selected);
}
else {
this._hiddenData.push(selected.gid);
this.hideChip(selected);
}
this.warpViewSelectedGTS.emit({ selected: inActive, gts: { id: selected.gid, name: selected.name } });
}
hideChip(item) {
const li = this.tree.nativeElement.querySelector('#item-' + item.id);
if (!!li) {
const chip = li.querySelector('.chip');
if (chip) {
this.renderer.setStyle(chip, 'background-color', 'transparent');
}
}
}
showChip(item) {
const li = this.tree.nativeElement.querySelector('#item-' + item.id);
if (!!li) {
const chip = li.querySelector('.chip');
if (chip) {
this.renderer.setStyle(chip, 'background-color', ColorLib.getColor(item.gid, this._options.scheme));
}
}
}
}
WarpViewGtsTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WarpViewGtsTreeComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.SizeService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
WarpViewGtsTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: WarpViewGtsTreeComponent, selector: "warpview-gts-tree", inputs: { kbdLastKeyPressed: "kbdLastKeyPressed", inPlot: "inPlot", gtsFilter: "gtsFilter", hiddenData: "hiddenData" }, outputs: { warpViewSelectedGTS: "warpViewSelectedGTS" }, viewQueries: [{ propertyName: "root", first: true, predicate: ["root"], descendants: true, static: true }, { propertyName: "tree", first: true, predicate: ["tree"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\n ~ Copyright 2021 SenX S.A.S.\n ~\n ~ Licensed under the Apache License, Version 2.0 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" BASIS,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n ~\n -->\n\n\n<div class=\"wrapper\"><div #tree></div></div>\n", styles: [":root{--warp-view-chart-width: 100%;--warp-view-chart-height: 100%;--warp-view-datagrid-cell-padding: 5px;--warp-view-map-margin: 0;--warp-view-switch-height: 30px;--warp-view-switch-width: 100px;--warp-view-switch-radius: 18px;--warp-view-plot-chart-height: 100%;--warp-view-slider-pointer-size: 65px;--warp-view-resize-handle-height: 10px;--warp-view-tile-width: 100%;--warp-view-tile-height: 100%;--warp-view-font-color: #000000;--warp-view-bar-color: #dc3545;--warp-view-datagrid-odd-bg-color: #ffffff;--warp-view-datagrid-odd-color: #404040;--warp-view-datagrid-even-bg-color: #c0c0c0;--warp-view-datagrid-even-color: #000000;--warp-view-pagination-border-color: #c0c0c0;--warp-view-pagination-bg-color: #ffffff;--warp-view-pagination-active-bg-color: #4CAF50;--warp-view-pagination-active-color: #ffffff;--warp-view-pagination-active-border-color: #4CAF50;--warp-view-pagination-hover-bg-color: #c0c0c0;--warp-view-pagination-hover-color: #000000;--warp-view-pagination-hover-border-color: #c0c0c0;--warp-view-pagination-disabled-color: #c0c0c0;--warp-view-switch-inset-color: #c0c0c0;--warp-view-switch-inset-checked-color: #00cd00;--warp-view-switch-handle-color: radial-gradient(#ffffff 15%, #c0c0c0 100%);--warp-view-switch-handle-checked-color: radial-gradient(#ffffff 15%, #00cd00 100%);--warp-view-resize-handle-color: #c0c0c0;--warp-view-chart-legend-bg: #ffffff;--warp-view-chart-legend-color: #404040;--gts-classname-font-color: #004eff;--gts-labelname-font-color: #19A979;--gts-attrname-font-color: #ED4A7B;--gts-separator-font-color: #a0a0a0;--gts-labelvalue-font-color: #000000;--gts-attrvalue-font-color: #000000;--gts-stack-font-color: #000000;--gts-tree-expanded-icon: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7klEQVQ4T82TMW7CQBBF/0g+QOpINEkVCmpaLoBm5COk5QYoaeAY3MDSei2LGu4QKakiBA1tCpTK8kS2sLVe2xSh8XSrnf9m/s4s4c6gO/UYGEBEXlT1bK396bFGIjIJguA7iqJLkVNbYOZXItoQ0QHAzBhz9CCFeAVgCeAjy7Jpmqa/NUBEEgDzktqGuOKKO47j+KsGhGH4lOf5HsDIg5ycyqVYVd+steuGheLAzM9EtPMgW1VdVGWJ6N0YU1gpozVGH+K+gy/uBHR1crXUqNzbQXXhduJ69sd7cxOZ+UFVH5Mk+exb+YGt8n9+5h8up1sReYC0WAAAAABJRU5ErkJggg==);--gts-tree-collapsed-icon: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA0UlEQVQ4T6WTUW7CQAxEPQdozxYb9Qb94Aj9gQSoVCp6lMr21doDZFCQiFCU3YDY//d2PeOFPHnwJC+zAlVdA/jp+/6YmZ+1S0qCPxF5HUAAO3fvSpKS4ENEvm6gfUS0c5JiBma2Ibm/QiQPmbmdSqohquoA7GqSxRaapmkBjBkAeHP336t0UWBmHcnb+VcR4XcJpjDJLjPHkS4tleqZubmNiDHU6gumDQDYuvvh7hpV9V9EXgaA5Ka2jbMjmNk7yZOIfEfE8eFVfuSDLda4JDsD3FNdEckTC0YAAAAASUVORK5CYII=);--warp-view-popup-bg-color: #ffffff;--warp-view-popup-border-color: rgba(0, 0, 0, .2);--warp-view-popup-header-bg-color: #c0c0c0;--warp-view-popup-title-color: #404040;--warp-view-popup-close-color: #404040;--warp-view-popup-body-bg-color: #ffffff;--warp-view-popup-body-color: #000000;--warp-view-annotationtooltip-value-font-color: #004eff;--warp-view-annotationtooltip-font-color: #404040;--warp-view-spinner-color: #ff9900;--warp-view-tooltip-bg: #ffffff;--warp-view-tooltip-color: #000000;--warp-slider-connect-color: #ff9900;--warp-slider-handle-bg-color: #ffffff;--warp-slider-handle-color: #004eff;--warp-slider-handle-shadow: inset 0 0 1px #ffffff, inset 0 1px 7px #c0c0c0, 0 3px 6px -3px #a0a0a0}.noData{width:100%;text-align:center;color:var(--warp-view-chart-legend-color);position:relative}.js-plotly-plot .plotly .cursor-ew-resize{cursor:default!important}/*!\n * Copyright 2021 SenX S.A.S.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */.gts-classname{color:var(--gts-classname-font-color)}.gts-labelname{color:var(--gts-labelname-font-color)}.gts-attrname{color:var(--gts-attrname-font-color)}.gts-separator{color:var(--gts-separator-font-color)}.gts-labelvalue{color:var(--gts-labelvalue-font-color);font-style:italic}.gts-attrvalue{color:var(--gts-attrvalue-font-color);font-style:italic}:host .wrapper{text-align:left;min-height:0!important}:host .chip{border-radius:50%;background-color:#bbb;display:inline-block;width:5px;height:5px;border:2px solid #454545;margin-top:auto;margin-bottom:auto;vertical-align:middle;cursor:pointer}:host .stack-level{font-size:1em;padding-top:5px;cursor:pointer;color:var(--gts-stack-font-color)}:host .stack-level+div{padding-left:25px}:host .expanded{padding:1px 10px;margin-right:5px;background-image:var(--gts-tree-expanded-icon);background-position:center left;background-repeat:no-repeat}:host .collapsed{padding:1px 10px;margin-right:5px;background-image:var(--gts-tree-collapsed-icon);background-repeat:no-repeat;background-position:center left}:host ul{list-style:none;padding-left:1.75em}:host ul li{font-size:1em;cursor:pointer;color:var(--gts-stack-font-color)}:host ul li a{margin-right:5px;background-position:center left;background-repeat:no-repeat;padding:5px 10px 1px 20px;color:var(--gts-stack-font-color);text-decoration:none}:host ul li a.plus{background-image:var(--gts-tree-collapsed-icon)}:host ul li a.minus{background-image:var(--gts-tree-expanded-icon)}:host ul li a:active{top:1px}:host .loader{font-size:10px;display:inline-block;text-indent:-9999em;width:12px;height:11px;border-radius:50%;background:var(--warp-view-spinner-color, #ff9900);background:linear-gradient(to right,var(--warp-view-spinner-color, #ff9900) 10%,rgba(0,0,0,0) 42%);position:relative;animation:load3 1.4s infinite linear;transform:translateZ(0)}:host .loader:before{width:50%;height:50%;background:var(--warp-view-spinner-color, #ff9900);border-radius:100% 0 0;position:absolute;top:0;left:0;content:\"\"}:host .loader:after{background:#ffffff;width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}:host .loader.hidden{display:none}@keyframes load3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], encapsulation: i0.ViewEncapsulation.ShadowDom });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: WarpViewGtsTreeComponent, decorators: [{
type: Component,
args: [{ selector: 'warpview-gts-tree', encapsulation: ViewEncapsulation.ShadowDom, template: "<!--\n ~ Copyright 2021 SenX S.A.S.\n ~\n ~ Licensed under the Apache License, Version 2.0 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" BASIS,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n ~\n -->\n\n\n<div class=\"wrapper\"><div #tree></div></div>\n", styles: [":root{--warp-view-chart-width: 100%;--warp-view-chart-height: 100%;--warp-view-datagrid-cell-padding: 5px;--warp-view-map-margin: 0;--warp-view-switch-height: 30px;--warp-view-switch-width: 100px;--warp-view-switch-radius: 18px;--warp-view-plot-chart-height: 100%;--warp-view-slider-pointer-size: 65px;--warp-view-resize-handle-height: 10px;--warp-view-tile-width: 100%;--warp-view-tile-height: 100%;--warp-view-font-color: #000000;--warp-view-bar-color: #dc3545;--warp-view-datagrid-odd-bg-color: #ffffff;--warp-view-datagrid-odd-color: #404040;--warp-view-datagrid-even-bg-color: #c0c0c0;--warp-view-datagrid-even-color: #000000;--warp-view-pagination-border-color: #c0c0c0;--warp-view-pagination-bg-color: #ffffff;--warp-view-pagination-active-bg-color: #4CAF50;--warp-view-pagination-active-color: #ffffff;--warp-view-pagination-active-border-color: #4CAF50;--warp-view-pagination-hover-bg-color: #c0c0c0;--warp-view-pagination-hover-color: #000000;--warp-view-pagination-hover-border-color: #c0c0c0;--warp-view-pagination-disabled-color: #c0c0c0;--warp-view-switch-inset-color: #c0c0c0;--warp-view-switch-inset-checked-color: #00cd00;--warp-view-switch-handle-color: radial-gradient(#ffffff 15%, #c0c0c0 100%);--warp-view-switch-handle-checked-color: radial-gradient(#ffffff 15%, #00cd00 100%);--warp-view-resize-handle-color: #c0c0c0;--warp-view-chart-legend-bg: #ffffff;--warp-view-chart-legend-color: #404040;--gts-classname-font-color: #004eff;--gts-labelname-font-color: #19A979;--gts-attrname-font-color: #ED4A7B;--gts-separator-font-color: #a0a0a0;--gts-labelvalue-font-color: #000000;--gts-attrvalue-font-color: #000000;--gts-stack-font-color: #000000;--gts-tree-expanded-icon: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7klEQVQ4T82TMW7CQBBF/0g+QOpINEkVCmpaLoBm5COk5QYoaeAY3MDSei2LGu4QKakiBA1tCpTK8kS2sLVe2xSh8XSrnf9m/s4s4c6gO/UYGEBEXlT1bK396bFGIjIJguA7iqJLkVNbYOZXItoQ0QHAzBhz9CCFeAVgCeAjy7Jpmqa/NUBEEgDzktqGuOKKO47j+KsGhGH4lOf5HsDIg5ycyqVYVd+steuGheLAzM9EtPMgW1VdVGWJ6N0YU1gpozVGH+K+gy/uBHR1crXUqNzbQXXhduJ69sd7cxOZ+UFVH5Mk+exb+YGt8n9+5h8up1sReYC0WAAAAABJRU5ErkJggg==);--gts-tree-collapsed-icon: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA0UlEQVQ4T6WTUW7CQAxEPQdozxYb9Qb94Aj9gQSoVCp6lMr21doDZFCQiFCU3YDY//d2PeOFPHnwJC+zAlVdA/jp+/6YmZ+1S0qCPxF5HUAAO3fvSpKS4ENEvm6gfUS0c5JiBma2Ibm/QiQPmbmdSqohquoA7GqSxRaapmkBjBkAeHP336t0UWBmHcnb+VcR4XcJpjDJLjPHkS4tleqZubmNiDHU6gumDQDYuvvh7hpV9V9EXgaA5Ka2jbMjmNk7yZOIfEfE8eFVfuSDLda4JDsD3FNdEckTC0YAAAAASUVORK5CYII=);--warp-view-popup-bg-color: #ffffff;--warp-view-popup-border-color: rgba(0, 0, 0, .2);--warp-view-popup-header-bg-color: #c0c0c0;--warp-view-popup-title-color: #404040;--warp-view-popup-close-color: #404040;--warp-view-popup-body-bg-color: #ffffff;--warp-view-popup-body-color: #000000;--warp-view-annotationtooltip-value-font-color: #004eff;--warp-view-annotationtooltip-font-color: #404040;--warp-view-spinner-color: #ff9900;--warp-view-tooltip-bg: #ffffff;--warp-view-tooltip-color: #000000;--warp-slider-connect-color: #ff9900;--warp-slider-handle-bg-color: #ffffff;--warp-slider-handle-color: #004eff;--warp-slider-handle-shadow: inset 0 0 1px #ffffff, inset 0 1px 7px #c0c0c0, 0 3px 6px -3px #a0a0a0}.noData{width:100%;text-align:center;color:var(--warp-view-chart-legend-color);position:relative}.js-plotly-plot .plotly .cursor-ew-resize{cursor:default!important}/*!\n * Copyright 2021 SenX S.A.S.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */.gts-classname{color:var(--gts-classname-font-color)}.gts-labelname{color:var(--gts-labelname-font-color)}.gts-attrname{color:var(--gts-attrname-font-color)}.gts-separator{color:var(--gts-separator-font-color)}.gts-labelvalue{color:var(--gts-labelvalue-font-color);font-style:italic}.gts-attrvalue{color:var(--gts-attrvalue-font-color);font-style:italic}:host .wrapper{text-align:left;min-height:0!important}:host .chip{border-radius:50%;background-color:#bbb;display:inline-block;width:5px;height:5px;border:2px solid #454545;margin-top:auto;margin-bottom:auto;vertical-align:middle;cursor:pointer}:host .stack-level{font-size:1em;padding-top:5px;cursor:pointer;color:var(--gts-stack-font-color)}:host .stack-level+div{padding-left:25px}:host .expanded{padding:1px 10px;margin-right:5px;background-image:var(--gts-tree-expanded-icon);background-position:center left;background-repeat:no-repeat}:host .collapsed{padding:1px 10px;margin-right:5px;background-image:var(--gts-tree-collapsed-icon);background-repeat:no-repeat;background-position:center left}:host ul{list-style:none;padding-left:1.75em}:host ul li{font-size:1em;cursor:pointer;color:var(--gts-stack-font-color)}:host ul li a{margin-right:5px;background-position:center left;background-repeat:no-repeat;padding:5px 10px 1px 20px;color:var(--gts-stack-font-color);text-decoration:none}:host ul li a.plus{background-image:var(--gts-tree-collapsed-icon)}:host ul li a.minus{background-image:var(--gts-tree-expanded-icon)}:host ul li a:active{top:1px}:host .loader{font-size:10px;display:inline-block;text-indent:-9999em;width:12px;height:11px;border-radius:50%;background:var(--warp-view-spinner-color, #ff9900);background:linear-gradient(to right,var(--warp-view-spinner-color, #ff9900) 10%,rgba(0,0,0,0) 42%);position:relative;animation:load3 1.4s infinite linear;transform:translateZ(0)}:host .loader:before{width:50%;height:50%;background:var(--warp-view-spinner-color, #ff9900);border-radius:100% 0 0;position:absolute;top:0;left:0;content:\"\"}:host .loader:after{background:#ffffff;width:75%;height:75%;border-radius:50%;content:\"\";margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}:host .loader.hidden{display:none}@keyframes load3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.SizeService }, { type: i0.NgZone }]; }, propDecorators: { root: [{
type: ViewChild,
args: ['root', { static: true }]
}], tree: [{
type: ViewChild,
args: ['tree', { static: true }]
}], kbdLastKeyPressed: [{
type: Input,
args: ['kbdLastKeyPressed']
}], inPlot: [{
type: Input,
args: ['inPlot']
}], gtsFilter: [{
type: Input,
args: ['gtsFilter']
}], hiddenData: [{
type: Input,
args: ['hiddenData']
}], warpViewSelectedGTS: [{
type: Output,
args: ['warpViewSelectedGTS']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FycC12aWV3LWd0cy10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcnB2aWV3LW5nL3NyYy9saWIvZWxlbWVudHMvd2FycC12aWV3LWd0cy10cmVlL3dhcnAtdmlldy1ndHMtdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXJwdmlldy1uZy9zcmMvbGliL2VsZW1lbnRzL3dhcnAtdmlldy1ndHMtdHJlZS93YXJwLXZpZXctZ3RzLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUzQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBUS9DLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxpQkFBaUI7SUFvQzdELFlBQ1MsRUFBYyxFQUNkLFFBQW1CLEVBQ25CLFdBQXdCLEVBQ3hCLE1BQWM7UUFFckIsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVB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eUdBQXhCLHdCQUF3QiwwY0M3Q3JDLDJyQkFtQkE7MkZEMEJhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxtQkFBbUIsaUJBR2QsaUJBQWlCLENBQUMsU0FBUzt3S0FHUCxJQUFJO3NCQUF0QyxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0UsSUFBSTtzQkFBdEMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUVMLGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ1QsTUFBTTtzQkFBdEIsS0FBSzt1QkFBQyxRQUFRO2dCQUVTLFNBQVM7c0JBQWhDLEtBQUs7dUJBQUMsV0FBVztnQkFTTyxVQUFVO3NCQUFsQyxLQUFLO3VCQUFDLFlBQVk7Z0JBWVksbUJBQW1CO3NCQUFqRCxNQUFNO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiAgQ29weXJpZ2h0IDIwMjEgIFNlblggUy5BLlMuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXYXJwVmlld0NvbXBvbmVudH0gZnJvbSAnLi4vd2FycC12aWV3LWNvbXBvbmVudCc7XG5pbXBvcnQge1BhcmFtfSBmcm9tICcuLi8uLi9tb2RlbC9wYXJhbSc7XG5pbXBvcnQge0dUU0xpYn0gZnJvbSAnLi4vLi4vdXRpbHMvZ3RzLmxpYic7XG5pbXBvcnQge0RhdGFNb2RlbH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YU1vZGVsJztcbmltcG9ydCB7U2l6ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc2l6ZS5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29sb3JMaWJ9IGZyb20gJy4uLy4uL3V0aWxzL2NvbG9yLWxpYic7XG5pbXBvcnQge0NoYXJ0TGlifSBmcm9tICcuLi8uLi91dGlscy9jaGFydC1saWInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3YXJwdmlldy1ndHMtdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi93YXJwLXZpZXctZ3RzLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93YXJwLXZpZXctZ3RzLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tXG59KVxuZXhwb3J0IGNsYXNzIFdhcnBWaWV3R3RzVHJlZUNvbXBvbmVudCBleHRlbmRzIFdhcnBWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Jvb3QnLCB7c3RhdGljOiB0cnVlfSkgcm9vdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJlZScsIHtzdGF0aWM6IHRydWV9KSB0cmVlOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgna2JkTGFzdEtleVByZXNzZWQnKSBrYmRMYXN0S2V5UHJlc3NlZDogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCdpblBsb3QnKSBpblBsb3QgPSBmYWxzZTtcblxuICBASW5wdXQoJ2d0c0ZpbHRlcicpIHNldCBndHNGaWx0ZXIoZ3RzRmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9ndHNGaWx0ZXIgPSBndHNGaWx0ZXI7XG4gIH1cblxuICBnZXQgZ3RzRmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9ndHNGaWx0ZXI7XG4gIH1cblxuXG4gIEBJbnB1dCgnaGlkZGVuRGF0YScpIHNldCBoaWRkZW5EYXRhKGhpZGRlbkRhdGE6IG51bWJlcltdKSB7XG4gICAgdGhpcy5MT0cuZGVidWcoWydoaWRkZW5EYXRhJ10sIGhpZGRlbkRhdGEsIHRoaXMuZ3RzTGlzdCk7XG4gICAgdGhpcy5faGlkZGVuRGF0YSA9IGhpZGRlbkRhdGE7XG4gICAgKHRoaXMuZGF0YUxpc3QgfHwgW10pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAodGhpcy5faGlkZGVuRGF0YSB8fCBbXSkuc29tZShpZCA9PiBpdGVtLmdpZCA9PT0gaWQpID8gdGhpcy5oaWRlQ2hpcChpdGVtKSA6IHRoaXMuc2hvd0NoaXAoaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGlkZGVuRGF0YSgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGRlbkRhdGE7XG4gIH1cblxuICBAT3V0cHV0KCd3YXJwVmlld1NlbGVjdGVkR1RTJykgd2FycFZpZXdTZWxlY3RlZEdUUyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgX2d0c0ZpbHRlciA9ICd4JztcbiAgcHJpdmF0ZSBkYXRhTGlzdDogYW55W107XG4gIGd0c0xpc3Q6IGFueVtdID0gW107XG4gIHBhcmFtczogUGFyYW1bXSA9IFtdIGFzIFBhcmFtW107XG4gIGluaXRPcGVuOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHVibGljIHNpemVTZXJ2aWNlOiBTaXplU2VydmljZSxcbiAgICBwdWJsaWMgbmdab25lOiBOZ1pvbmUsXG4gICkge1xuICAgIHN1cGVyKGVsLCByZW5kZXJlciwgc2l6ZVNlcnZpY2UsIG5nWm9uZSk7XG4gICAgdGhpcy5MT0cgPSBuZXcgTG9nZ2VyKFdhcnBWaWV3R3RzVHJlZUNvbXBvbmVudCwgdGhpcy5fZGVidWcpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuTE9HLmRlYnVnKFsnY29tcG9uZW50RGlkTG9hZCcsICdkYXRhJ10sIHRoaXMuX2RhdGEpO1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICB0aGlzLmRvUmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKG9wdGlvbnM6IFBhcmFtLCByZWZyZXNoOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kb1JlbmRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb1JlbmRlcigpIHtcbiAgICB0aGlzLkxPRy5kZWJ1ZyhbJ2RvUmVuZGVyJywgJ2d0c0xpc3QnXSwgdGhpcy5fZGF0YSk7XG4gICAgaWYgKCF0aGlzLl9kYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX29wdGlvbnMgPSBDaGFydExpYi5tZXJnZURlZXAodGhpcy5kZWZPcHRpb25zLCB0aGlzLl9vcHRpb25zKSBhcyBQYXJhbTtcbiAgICBjb25zdCBkID0gR1RTTGliLmZsYXR0ZW5HdHNJZEFycmF5KEdUU0xpYi5nZXREYXRhKHRoaXMuX2RhdGEpLmRhdGEgYXMgYW55IFtdLCAwKS5yZXM7XG4gICAgdGhpcy5kYXRhTGlzdCA9IHRoaXMuZ2VuZXJhdGVEYXRhKHRoaXMuaW5QbG90ID8gZCA6IFtkXSk7XG4gICAgdGhpcy5hZGRPcnBoYW5zKCk7XG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLl9kYXRhLnBhcmFtcyB8fCBbXTtcbiAgICB0aGlzLkxPRy5kZWJ1ZyhbJ2RvUmVuZGVyJywgJ2d0c0xpc3QnLCAnZGF0YUxpc3QnXSwgdGhpcy5kYXRhTGlzdCk7XG4gICAgdGhpcy5jaGFydERyYXcuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnZlcnQoZGF0YTogRGF0YU1vZGVsKTogYW55W10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHB1YmxpYyByZXNpemUobGF5b3V0OiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogYW55IH0pIHtcbiAgICAvL1xuICB9XG5cbiAgb3JwaGFucygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhTGlzdC5maWx0ZXIoaXRlbSA9PiAhaXRlbS5wYXJlbnQpO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4ocGFyZW50SWQpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhTGlzdC5zb21lKGl0ZW0gPT4gaXRlbS5wYXJlbnQgPT09IHBhcmVudElkKTtcbiAgfVxuXG4gIGdldENoaWxkcmVuKHBhcmVudElkKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wYXJlbnQgPT09IHBhcmVudElkKTtcbiAgfVxuXG4gIHN3aXRjaFBsb3RTdGF0ZShldnQpIHtcbiAgICBjb25zb2xlLmxvZygnZXZ0JywgZXZ0KTtcbiAgfVxuXG4gIGdlbmVyYXRlTGlzdEl0ZW0oaXRlbSkge1xuICAgIGNvbnN0IGxpID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGxpLmlkID0gJ2l0ZW0tJyArIGl0ZW0uaWQ7XG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRyZW4oaXRlbS5pZCkpIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9ICcjJztcbiAgICAgIGEudGV4dENvbnRlbnQgPSBgJHtpdGVtLm5hbWV9YDtcbiAgICAgIGEuY2xhc3NMaXN0LmFkZCgncGx1cycpO1xuICAgICAgYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4gdGhpcy50b2dnbGUoZSwgYSwgbGkpKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQobGksIGEpO1xuICAgICAgY29uc3QgbG9hZGVyID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGxvYWRlci5jbGFzc0xpc3QuYWRkKCdsb2FkZXInKTtcbiAgICAgIGxvYWRlci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQobGksIGxvYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICBjb25zdCBjb2xvciA9IENvbG9yTGliLmdldENvbG9yKGl0ZW0uZ2lkLCB0aGlzLl9vcHRpb25zLnNjaGVtZSk7XG4gICAgICBzcGFuLmlubmVySFRNTCA9IGA8aSBjbGFzcz1cImNoaXBcIlxuc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMuX2hpZGRlbkRhdGEuc29tZShpZCA9PiBpZCA9PT0gaXRlbS5naWQpID8gJ3RyYW5zcGFyZW50JyA6IGNvbG9yfTtib3JkZXI6IDJweCBzb2xpZCAke2NvbG9yfTtcIj48L2k+XG4mbmJzcDske0dUU0xpYi5mb3JtYXRMYWJlbChpdGVtLm5hbWUpfWA7XG4gICAgICBzcGFuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB0aGlzLnNlbGVjdChpdGVtLmlkKSk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGxpLCBzcGFuKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGUoZXZlbnQsIGE6IEhUTUxBbmNob3JFbGVtZW50LCBwYXJlbnRMaTogSFRNTExJRWxlbWVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGEuY2xhc3NMaXN0LmNvbnRhaW5zKCdwbHVzJykpIHtcbiAgICAgIGNvbnN0IGxvYWRlciA9IHBhcmVudExpLnF1ZXJ5U2VsZWN0b3IoJy5sb2FkZXInKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MobG9hZGVyLCAnaGlkZGVuJyk7XG4gICAgICBhLmNsYXNzTGlzdC5yZW1vdmUoJ3BsdXMnKTtcbiAgICAgIGEuY2xhc3NMaXN0LmFkZCgnbWludXMnKTtcbiAgICAgIGNvbnN0IHVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgICAgcGFyZW50TGkuYXBwZW5kQ2hpbGQodWwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICgoKSA9PiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IHBhcmVudExpLmlkLnJlcGxhY2UoJ2l0ZW0tJywgJycpO1xuICAgICAgICAgIGNvbnN0IGtpZHMgPSB0aGlzLmdldENoaWxkcmVuKGlkKTtcbiAgICAgICAgICBjb25zdCBzaXplID0ga2lkcy5sZW5ndGg7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgIHVsLmFwcGVuZENoaWxkKHRoaXMuZ2VuZXJhdGVMaXN0SXRlbShraWRzW2ldIGFzIEhUTUxMSUVsZW1lbnQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KSkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGxvYWRlciwgJ2hpZGRlbicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1bCA9IHBhcmVudExpLnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XG4gICAgICBwYXJlbnRMaS5yZW1vdmVDaGlsZCh1bCk7XG4gICAgICBhLmNsYXNzTGlzdC5yZW1vdmUoJ21pbnVzJyk7XG4gICAgICBhLmNsYXNzTGlzdC5hZGQoJ3BsdXMnKTtcbiAgICB9XG4gIH1cblxuICBhZGRPcnBoYW5zKCkge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnRyZWUubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICBpZiAocm9vdC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm9vdC5jaGlsZEVsZW1lbnRDb3VudDsgaSsrKSB7XG4gICAgICAgIHJvb3QuY2hpbGRyZW4uaXRlbShpKS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3JwaGFuc0FycmF5ID0gdGhpcy5vcnBoYW5zKCk7XG4gICAgaWYgKG9ycGhhbnNBcnJheS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gb3JwaGFuc0FycmF5Lm1hcCh0aGlzLmdlbmVyYXRlTGlzdEl0ZW0uYmluZCh0aGlzKSk7XG4gICAgICBjb25zdCB1bCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgndWwnKTtcbiAgICAgIGl0ZW1zLmZvckVhY2gobGkgPT4gdWwuYXBwZW5kQ2hpbGQobGkgYXMgTm9kZSkpO1xuICAgICAgcm9vdC5hcHBlbmRDaGlsZCh1bCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZURhdGEocmVzOiBhbnlbXSwgcGFyZW50PzogYW55KSB7XG4gICAgbGV0IHJvb3QgPSBbXTtcbiAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChHVFNMaWIuaXNHdHMoaXRlbSkpIHtcbiAgICAgICAgcm9vdC5wdXNoKHtcbiAgICAgICAgICBpZDogR1RTTGliLnV1aWR2NCgpLFxuICAgICAgICAgIG5hbWU6IEdUU0xpYi5zZXJpYWxpemVHdHNNZXRhZGF0YShpdGVtKSxcbiAgICAgICAgICBnaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgcGFyZW50XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChHVFNMaWIuaXNBcnJheShpdGVtKSkge1xuICAgICAgICBjb25zdCBwID0gR1RTTGliLnV1aWR2NCgpO1xuICAgICAgICByb290LnB1c2goe1xuICAgICAgICAgIGlkOiBwLFxuICAgICAgICAgIG5hbWU6IGBMaXN0IG9mICR7aXRlbS5sZW5ndGh9IGVsZW1lbnQke2l0ZW0ubGVuZ3RoID4gMSA/ICdzJyA6ICcnfWAsXG4gICAgICAgICAgcGFyZW50XG4gICAgICAgIH0pO1xuICAgICAgICByb290ID0gcm9vdC5jb25jYXQodGhpcy5nZW5lcmF0ZURhdGEoaXRlbSwgcCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3QoaWQpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGF0YUxpc3QuZmluZChnID0+IGcuaWQgPT09IGlkKTtcbiAgICBjb25zdCBpbkFjdGl2ZSA9IHRoaXMuX2hpZGRlbkRhdGEuc29tZShpID0+IGkgPT09IHNlbGVjdGVkLmdpZCk7XG4gICAgaWYgKGluQWN0aXZlKSB7XG4gICAgICB0aGlzLl9oaWRkZW5EYXRhID0gdGhpcy5faGlkZGVuRGF0YS5maWx0ZXIoaSA9PiBpID09PSBzZWxlY3RlZC5naWQpO1xuICAgICAgdGhpcy5zaG93Q2hpcChzZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hpZGRlbkRhdGEucHVzaChzZWxlY3RlZC5naWQpO1xuICAgICAgdGhpcy5oaWRlQ2hpcChzZWxlY3RlZCk7XG4gICAgfVxuICAgIHRoaXMud2FycFZpZXdTZWxlY3RlZEdUUy5lbWl0KHtzZWxlY3RlZDogaW5BY3RpdmUsIGd0czoge2lkOiBzZWxlY3RlZC5naWQsIG5hbWU6IHNlbGVjdGVkLm5hbWV9fSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVDaGlwKGl0ZW0pIHtcbiAgICBjb25zdCBsaSA9IHRoaXMudHJlZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNpdGVtLScgKyBpdGVtLmlkKTtcbiAgICBpZiAoISFsaSkge1xuICAgICAgY29uc3QgY2hpcCA9IGxpLnF1ZXJ5U2VsZWN0b3IoJy5jaGlwJyk7XG4gICAgICBpZiAoY2hpcCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNoaXAsICdiYWNrZ3JvdW5kLWNvbG9yJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93Q2hpcChpdGVtKSB7XG4gICAgY29uc3QgbGkgPSB0aGlzLnRyZWUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjaXRlbS0nICsgaXRlbS5pZCk7XG4gICAgaWYgKCEhbGkpIHtcbiAgICAgIGNvbnN0IGNoaXAgPSBsaS5xdWVyeVNlbGVjdG9yKCcuY2hpcCcpO1xuICAgICAgaWYgKGNoaXApIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjaGlwLCAnYmFja2dyb3VuZC1jb2xvcicsIENvbG9yTGliLmdldENvbG9yKGl0ZW0uZ2lkLCB0aGlzLl9vcHRpb25zLnNjaGVtZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPCEtLVxuICB+ICBDb3B5cmlnaHQgMjAyMSAgU2VuWCBTLkEuUy5cbiAgflxuICB+ICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+ICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gIH5cbiAgfiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIH4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+ICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICB+XG4gIC0tPlxuXG5cbjxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+PGRpdiAjdHJlZT48L2Rpdj48L2Rpdj5cbiJdfQ==