@logo-software/tree
Version:
A tree view represents a hierarchical view of information, where each item can have a number of subitems.
192 lines • 40.4 kB
JavaScript
/**
* @license
* Copyright LOGO YAZILIM SANAYİ VE TİCARET A.Ş. All Rights Reserved.
*
* Save to the extent permitted by law, you may not use, copy, modify,
* distribute or create derivative works of this material or any part
* of it without the prior written consent of LOGO YAZILIM SANAYİ VE TİCARET A.Ş. Limited.
* Any reproduction of this material must contain this notice.
*/
import { Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';
import { HttpClient } from '@angular/common/http';
/**
* Almost anything can be represented in a tree structure. Examples include directories, organization hierarchies, biological classifications, countries, etc. The Tree component is a way of representing the hierarchical relationship between these things. You can also expand, collapse, and select a treeNode within a Tree.
*
* Add the below code to your code stack and give initializer parameters.
*
* <sub>app.component.html</sub>
*
* ```html
* <logo-tree [items]="items" [start]="0" [iconClasses]=""></logo-tree>
* ```
*/
export class TreeComponent {
/**
* Give HttpClient to the component. First import HttpClientModule to main Module of the app. For example.
* ```typescript
* @NgModule({ imports: [
* BrowserModule,
* HttpClientModule, // Add HttpClientModule
* ]
* })
* export class AppModule {
* }
* ```
* @param http
*/
constructor(elem, http) {
this.elem = elem;
this.http = http;
/**
* group
*/
this.group = false;
/**
* Specifies one or more CSS classes to be used by the element. When set, this class will also be used by all child elements that don't have their own class.
*/
this.classes = '';
/**
* Specifies one or more CSS classes to be used by the element's icons. When set, this class will also be used by all child elements icons that don't have their own class.
*/
this.iconClasses = '';
/**
* Menu items to show
*/
this.items = [];
/**
* It indicates the starting level of the items to be displayed
*/
this.start = 0;
/**
* Specifies the amount of indentation, in pixels, used to offset successive menu leaf levels in a hierarchy. The default value is 10 pixels.
*/
this.paddingLeft = 30;
/**
* Role information about which authorized people can view this menu item. Example: roles: ['ROLE_ADMIN', 'ROLE_DEVELOPER']
*/
this.roles = [];
/**
* Item click event trigger. When clicked on any item this event will be called and pushes the item information to the given method.
*/
this.itemClick = new EventEmitter();
/**
* Category click event trigger. When clicked on any category item, this event will be called and pushes the item information to the given method.
*/
this.categoryClick = new EventEmitter();
/**
* The Matched router is activated this method will be triggered. It will push the tree item to the given method.
*/
this.routeItemActivated = new EventEmitter();
/**
* Item checkbox status change trigger. When clicked, clicked item will be emited
*/
this.itemCheckChange = new EventEmitter();
this._level = 0;
}
get level() {
return this._level;
}
set level(level) {
++level;
this._level = level;
}
ngOnInit() {
if (!this.elementId) {
this.elementId = this.generateElementId();
}
}
generateElementId() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 97)
+ Math.random().toString(16).slice(2)
+ Date.now().toString(16).slice(4);
}
open(routerLinkActive) {
this.recursiveParent(routerLinkActive.element.nativeElement);
}
recursiveParent(element) {
const parent = element.closest('ul').closest('li');
if (parent) {
const input = parent.querySelector('input');
input.checked = true;
// if (!(element as any).closest('ul.top-level-accordion')) {
this.recursiveParent(parent);
// }
}
}
getMenuList() {
this.http.request(this.request).subscribe((response) => this.onSuccessHandler(response));
}
onSuccessHandler(response) {
this.items = response.body.children;
}
htmlItemOnClick(item, $event) {
if (event) {
event.cancelBubble = true;
event.stopPropagation();
}
this.$onItemClick(item);
}
$onItemClick(item) {
this.itemClick.emit(item);
}
$onItemCheckChange(item) {
this.itemCheckChange.emit(item);
}
htmlCategoryOnClick(item, $event) {
if (event) {
event.cancelBubble = true;
event.stopPropagation();
}
this.$onCategoryClick(item);
}
$onCategoryClick(item) {
this.categoryClick.emit(item);
}
htmlSetPadding(level, start) {
const val = Number(level) - (this.group ? 1 : 0);
const padding = val <= 0 ? 0 : val * this.paddingLeft + 'px';
return level >= start ? padding : this.paddingLeft + 'px';
}
componentSetPadding(level, start) {
const currentPadding = this.htmlSetPadding(level, start).toString().replace('px', '');
return Math.floor(Number(currentPadding)) + 'px';
}
onRouteItemActivated(item) {
this.routeItemActivated.emit(item);
}
/**
* set left padding size programmatically for collapsed menus.
* @param value
*/
setPadding(value = 0) {
this.paddingLeft = value;
}
}
TreeComponent.decorators = [
{ type: Component, args: [{
selector: 'logo-tree',
template: "<!--\n/**\n * @license\n * Copyright LOGO YAZILIM SANAY\u0130 VE T\u0130CARET A.\u015E. All Rights Reserved.\n *\n * Save to the extent permitted by law, you may not use, copy, modify,\n * distribute or create derivative works of this material or any part\n * of it without the prior written consent of LOGO YAZILIM SANAY\u0130 VE T\u0130CARET A.\u015E. Limited.\n * Any reproduction of this material must contain this notice.\n */\n-->\n<ul [ngClass]=\"{'top-level-tree' : level == start}\">\n <ng-container *ngFor=\"let item of items; let i = index; let lst=last\">\n <!--div class=\"emitter\">emit</div-->\n <ng-container *ngIf=\"item.children && item.children.length >= 0;\">\n <li class=\"level-{{level}} tree-category {{classes}} {{item.group ? 'group': ''}}\">\n <ng-container *ngIf=\"level >= start\">\n <input [checked]=\"item.isOpen\" hidden class=\"opener\" id=\"{{elementId}}{{i}}\" type=\"checkbox\"/>\n <div class=\"label label-category{{item.group ? ' label-group': ''}}{{item.isActive ? ' router-link-active':''}}\" [style.paddingLeft]=\"htmlSetPadding(level, start)\">\n <div class=\"arrow ghost primary small le-chevron_right\" (click)=\"htmlCategoryOnClick(item)\"></div>\n <div class=\"label-items\" (click)=\"htmlItemOnClick(item)\">\n <input\n *ngIf=\"item.optional\"\n [checked]=\"false\"\n disabled\n id=\"tree-option-{{elementId}}-{{i}}\"\n type=\"checkbox\"\n />\n <span *ngIf=\"!!item.iconPath && !item.optional\" [ngClass]=\"item.iconClasses\" class=\"{{iconClasses}} item-icon\">\n <img *ngIf=\"!!item.iconPath && !item.optional\" src=\"{{item.iconPath}}\"/>\n </span>\n <span class=\"title\">{{item.name}}</span>\n </div>\n <label\n [style.paddingLeft]=\"htmlSetPadding(level, start)\"\n for=\"{{elementId}}{{i}}\"\n >\n </label>\n </div>\n </ng-container>\n <logo-tree\n (categoryClick)=\"$onCategoryClick($event)\"\n (itemClick)=\"$onItemClick($event)\"\n (routeItemActivated)=\"onRouteItemActivated($event)\"\n [classes]=\"classes\"\n [group]=\"item.group\"\n [iconClasses]=\"iconClasses\"\n [items]=\"item.children\"\n [level]=\"level + (item.group ? 1 : 0)\"\n [ngClass]=\"{'show': level < start}\"\n [paddingLeft]=\"paddingLeft\"\n [request]=\"request\"\n [roles]=\"roles\"\n [start]=\"level\"\n class=\"children\"\n >\n </logo-tree>\n </li>\n </ng-container>\n <ng-container *ngIf=\"!item.children\">\n <li class=\"tree-link {{classes}}\">\n <input *ngIf=\"item.optional\" (change)=\"$onItemCheckChange(item)\" class=\"selector\" id=\"option-{{elementId}}-{{i}}\" type=\"checkbox\">\n <label\n (click)=\"htmlItemOnClick(item)\"\n class=\"label label-link\"\n for=\"{{elementId}}{{i}}\"\n [style.paddingLeft]=\"htmlSetPadding(level, start)\"\n [ngClass]=\"{'check-active': item.optional, 'router-link-active': item.isActive }\"\n >\n <div class=\"arrow ghost small le-chevron_right no-children-item\"></div>\n <span *ngIf=\"!!item.iconPath && !item.optional\" [ngClass]=\"item.iconClasses\" class=\"{{iconClasses}} item-icon\">\n <img *ngIf=\"!!item.iconPath\" src=\"{{item.iconPath}}\"/>\n </span>\n <ng-container *ngIf=\"item.noLink; else withLink\">\n <a\n [fragment]=\"item.fragment? item.fragment : ''\"\n [queryParams]=\"item.params ? item.params: {}\"\n [routerLink]=\"item.link ? [item.link] : []\"\n class=\"none\"\n ></a>\n <span class=\"title\">{{item.name}}</span>\n </ng-container>\n <ng-template #withLink>\n <a\n [fragment]=\"item.fragment? item.fragment : ''\"\n [queryParams]=\"item.params ? item.params: {}\"\n [routerLink]=\"item.link ? [item.link] : []\"\n >\n {{item.name}}\n </a>\n </ng-template>\n </label>\n </li>\n </ng-container>\n </ng-container>\n</ul>\n\n",
styles: ["[class*=\" le-\"],[class^=le-]{position:relative;height:100%}[class*=\" le-\"]:before,[class^=le-]:before{height:100%;top:0;-webkit-mask-size:14px;mask-size:14px}.le-arrow_right:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='currentColor' xmlns='http://www.w3.org/2000/svg'%3E %3Cg id='arrow_right'%3E %3Cpath id='Shape' fill-rule='evenodd' clip-rule='evenodd' d='M14.5713 12C14.5713 11.8762 14.5351 11.7657 14.4628 11.6686L14.4017 11.5982L10.4017 7.59823C10.2886 7.48514 10.1547 7.42859 9.9999 7.42859C9.84513 7.42859 9.7112 7.48514 9.59811 7.59823C9.50763 7.68871 9.45335 7.79252 9.43525 7.90966L9.42847 8.00002V16C9.42847 16.1548 9.48501 16.2887 9.59811 16.4018C9.7112 16.5149 9.84513 16.5714 9.9999 16.5714C10.1237 16.5714 10.2342 16.5353 10.3313 16.4629L10.4017 16.4018L14.4017 12.4018C14.5148 12.2887 14.5713 12.1548 14.5713 12Z' fill='%235A5A5A'/%3E %3C/g%3E %3C/svg%3E\");-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;display:inline-block;content:\"\";position:absolute;background:currentColor}.dotted{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logo-tooltip .tip.on-bottom:after,.logo-tooltip .tip.on-top:after{border-left:7px solid transparent;border-right:7px solid transparent}.logo-tooltip .tip.on-left:after,.logo-tooltip .tip.on-right:after{border-top:7px solid transparent;border-bottom:7px solid transparent}.logo-tooltip{position:relative;color:#e94a34;cursor:pointer}.logo-tooltip .tip{position:absolute;width:180px;color:#fff;font-size:14px;font-style:normal;line-height:1.4;text-align:center;border-radius:3px;background:#333;padding:8px 12px;box-sizing:border-box;cursor:auto;z-index:10;opacity:0;visibility:hidden;transition:all .25s ease-in}.logo-tooltip .tip:after{position:absolute;width:0;height:0;content:\"\"}.logo-tooltip .tip.on-top{bottom:25px;left:0}.logo-tooltip .tip.on-top:after{bottom:-7px;left:10px;border-top:7px solid #333}.logo-tooltip .tip.on-right{top:-5px;left:103%}.logo-tooltip .tip.on-right:after{top:37%;left:-7px;border-right:7px solid #333}.logo-tooltip .tip.on-bottom{top:25px;left:0}.logo-tooltip .tip.on-bottom:after{top:-7px;left:10px;border-bottom:7px solid #333}.logo-tooltip .tip.on-left{top:-100%;right:103%}.logo-tooltip .tip.on-left:after{top:37%;right:-7px;border-left:7px solid #333}.logo-tooltip:hover .tip{opacity:1;visibility:visible}.logo-tooltip:hover .tip.on-top{transform:translateY(-15px)}.logo-tooltip:hover .tip.on-right{transform:translateX(15px)}.logo-tooltip:hover .tip.on-bottom{transform:translateY(15px)}.logo-tooltip:hover .tip.on-left{transform:translateX(-15px)}.test{content:\"a\";content:\"ba\";content:\"aa\";content:\"aade\";content:\"abde\"}:root .basic,:root .gray,:root .secondary{color:var(--leds-contrast-90pct)}:root .danger,:root .info,:root .success,:root .warning{color:var(--white)}:root .outline.primary,:root .outline.primary:active,:root .outline.primary:focus,:root .outline.primary:hover{border-color:var(--light-600)}:root .outline.primary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--primary)}:root .outline.primary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--primary)}:root .outline.primary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--primary)}:root .outline.secondary{color:var(--leds-contrast-90pct)}:root .outline.secondary,:root .outline.secondary:active,:root .outline.secondary:focus,:root .outline.secondary:hover{border-color:var(--light-600)}:root .outline.secondary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--leds-contrast-90pct)}:root .outline.secondary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .outline.secondary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .outline.basic{color:var(--leds-contrast-90pct)}:root .outline.basic,:root .outline.basic:active,:root .outline.basic:focus,:root .outline.basic:hover{border-color:var(--light-600)}:root .outline.basic:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--leds-contrast-90pct)}:root .outline.basic:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .outline.basic:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .outline.neutral,:root .outline.neutral:active,:root .outline.neutral:focus,:root .outline.neutral:hover{border-color:var(--light-600)}:root .outline.neutral:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--neutral)}:root .outline.neutral:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--neutral)}:root .outline.neutral:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--neutral)}:root .outline.light{border-color:rgba(var(--light-rgb),.5)}:root .outline.light:active,:root .outline.light:focus,:root .outline.light:hover{border-color:var(--light)}:root .outline.light:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--white)}:root .outline.light:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--white)}:root .outline.light:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--white)}:root .outline.dark,:root .outline.dark:active,:root .outline.dark:focus,:root .outline.dark:hover{border-color:var(--light-600)}:root .outline.dark:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--dark)}:root .outline.dark:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--dark)}:root .outline.dark:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--dark)}:root .outline.gray{color:var(--leds-contrast-90pct)}:root .outline.gray,:root .outline.gray:active,:root .outline.gray:focus,:root .outline.gray:hover{border-color:var(--light-600)}:root .outline.gray:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--leds-contrast-90pct)}:root .outline.gray:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .outline.gray:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .outline.info{color:var(--info)}:root .outline.info,:root .outline.info:active,:root .outline.info:focus,:root .outline.info:hover{border-color:var(--light-600)}:root .outline.info:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--info)}:root .outline.info:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--info)}:root .outline.info:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--info)}:root .outline.danger{color:var(--danger)}:root .outline.danger,:root .outline.danger:active,:root .outline.danger:focus,:root .outline.danger:hover{border-color:var(--light-600)}:root .outline.danger:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--danger)}:root .outline.danger:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--danger)}:root .outline.danger:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--danger)}:root .outline.warning{color:var(--warning)}:root .outline.warning,:root .outline.warning:active,:root .outline.warning:focus,:root .outline.warning:hover{border-color:var(--light-600)}:root .outline.warning:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--warning)}:root .outline.warning:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--warning)}:root .outline.warning:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--warning)}:root .outline.success{color:var(--success)}:root .outline.success,:root .outline.success:active,:root .outline.success:focus,:root .outline.success:hover{border-color:var(--light-600)}:root .outline.success:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--success)}:root .outline.success:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--success)}:root .outline.success:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--success)}:root .ghost.primary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--primary)}:root .ghost.primary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--primary)}:root .ghost.primary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--primary)}:root .ghost.secondary,:root .ghost.secondary:hover{color:var(--leds-contrast-90pct)}:root .ghost.secondary:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover))}:root .ghost.secondary:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .ghost.secondary:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus))}:root .ghost.basic,:root .ghost.basic:hover,:root .ghost.secondary:focus{color:var(--leds-contrast-90pct)}:root .ghost.basic:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover))}:root .ghost.basic:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .ghost.basic:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .ghost.neutral:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--neutral)}:root .ghost.neutral:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--neutral)}:root .ghost.neutral:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--neutral)}:root .ghost.light:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--white)}:root .ghost.light:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--white)}:root .ghost.light:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--white)}:root .ghost.dark:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--dark)}:root .ghost.dark:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--dark)}:root .ghost.dark:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--dark)}:root .ghost.gray,:root .ghost.gray:hover{color:var(--leds-contrast-90pct)}:root .ghost.gray:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover))}:root .ghost.gray:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--leds-contrast-90pct)}:root .ghost.gray:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--leds-contrast-90pct)}:root .ghost.info{color:var(--info)}:root .ghost.info:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--info)}:root .ghost.info:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--info)}:root .ghost.info:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--info)}:root .ghost.danger{color:var(--danger)}:root .ghost.danger:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--danger)}:root .ghost.danger:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--danger)}:root .ghost.danger:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--danger)}:root .ghost.warning{color:var(--warning)}:root .ghost.warning:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--warning)}:root .ghost.warning:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--warning)}:root .ghost.warning:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--warning)}:root .ghost.success{color:var(--success)}:root .ghost.success:hover{background-color:rgba(var(--neutral-500-rgb),var(--ghost-hover));color:var(--success)}:root .ghost.success:active{background-color:rgba(var(--neutral-500-rgb),var(--ghost-active));color:var(--success)}:root .ghost.success:focus{background-color:rgba(var(--neutral-500-rgb),var(--ghost-focus));color:var(--success)}::ng-deep :root{--tree-font-color:var(--leds-contrast-90pct);--tree-item-active-background-color:var(--leds-contrast-5pct);--tree-item-hover-background-color:var(--leds-contrast-5pct);--tree-item-focus-background-color:var(--leds-contrast-5pct)}:host{display:block;padding:0;margin:0;font-family:Nunito Sans!important;opacity:1;transition:all .5s ease-out;overflow-y:auto;overflow-x:hidden;height:100%;box-sizing:border-box}:host ul{list-style:none;padding:0}:host ul li{position:relative;box-sizing:border-box}:host ul li.group .label-group{background-color:var(--leds-contrast-5pct)}:host ul li .selector{position:absolute;z-index:1;top:8px}:host ul li .label{display:flex;color:var(--leds-contrast-90pct);padding:4px;font-size:16px!important;min-height:38px;box-sizing:border-box;align-items:center;border-radius:4px;justify-content:space-between;cursor:auto;position:relative}:host ul li .label:focus,:host ul li .label:focus-within,:host ul li .label:hover{background-color:var(--leds-contrast-5pct);transition:color .1s ease-in}:host ul li .label.router-link-active{background-color:var(--leds-contrast-5pct)}:host ul li .label.router-link-active a{font-weight:700!important}:host ul li .label.check-active a{margin-left:15px}:host ul li .label .arrow{margin-left:4px;border-radius:4px}:host ul li .label .arrow:before{top:-1px}:host ul li .label .arrow.no-children-item{opacity:.15}:host ul li .label .label-items{display:flex;align-items:center;justify-content:flex-start;flex-grow:1;padding-left:4px;cursor:pointer}:host ul li .label .label-items .title{display:block;text-overflow:ellipsis;overflow:hidden;margin-top:0}:host ul li .label a{width:100%;color:var(--leds-contrast-90pct);text-decoration:none;padding-left:4px;cursor:pointer;line-height:normal;font-size:16px!important}:host ul li .label a.none{position:absolute;display:inline-block;width:0;height:0;overflow:hidden;opacity:0;visibility:hidden;top:0;left:0}:host ul li .label label{position:absolute;z-index:1;display:inline-block;width:36px;height:36px;top:1px;left:0}:host ul li logo-tree{height:100%;max-height:0;opacity:0;transition:all .5s ease-out;overflow:hidden}:host ul li logo-tree.show{max-height:max-content;opacity:1;padding-left:0;transition:all .5s ease-out}:host ul li .opener[type=checkbox]:checked+.label>div.arrow{transform:rotate(90deg)}:host ul li .opener[type=checkbox]:checked+.label+logo-tree{max-height:max-content;opacity:1;transition:all .5s ease-out}:host .emitter{background:rgba(200,20,20,.1);width:100%;height:48px}:host .item-icon{border-radius:8px;-moz-border-radius:8px;-webkit-border-radius:8px;display:inline-block;width:30px;height:30px}"]
},] }
];
TreeComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: HttpClient }
];
TreeComponent.propDecorators = {
group: [{ type: Input }],
classes: [{ type: Input }],
iconClasses: [{ type: Input }],
items: [{ type: Input }],
start: [{ type: Input }],
paddingLeft: [{ type: Input }],
request: [{ type: Input }],
roles: [{ type: Input }],
itemClick: [{ type: Output }],
categoryClick: [{ type: Output }],
routeItemActivated: [{ type: Output }],
itemCheckChange: [{ type: Output }],
elementId: [{ type: Input }],
level: [{ type: Input, args: ['level',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2dvLXNvZnR3YXJlL3RyZWUvc3JjL2xpYi90cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQTZCLE1BQU0sc0JBQXNCLENBQUM7QUFLN0U7Ozs7Ozs7Ozs7R0FVRztBQU1ILE1BQU0sT0FBTyxhQUFhO0lBbUR4Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxZQUFvQixJQUFnQixFQUFVLElBQWlCO1FBQTNDLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFhO1FBL0QvRDs7V0FFRztRQUNNLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDaEM7O1dBRUc7UUFDTSxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQzlCOztXQUVHO1FBQ00sZ0JBQVcsR0FBWSxFQUFFLENBQUM7UUFDbkM7O1dBRUc7UUFDYSxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25DOztXQUVHO1FBQ2EsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUMxQjs7V0FFRztRQUNhLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBS3pDOztXQUVHO1FBQ00sVUFBSyxHQUFhLEVBQUUsQ0FBQztRQUM5Qjs7V0FFRztRQUNjLGNBQVMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUMxRTs7V0FFRztRQUNjLGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDOUU7O1dBRUc7UUFDYyx1QkFBa0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNuRjs7V0FFRztRQUNjLG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFPLENB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QUlMLEtBQUs7b0JBSUwsS0FBSztvQkFJTCxLQUFLOzBCQUlMLEtBQUs7c0JBSUwsS0FBSztvQkFJTCxLQUFLO3dCQUlMLE1BQU07NEJBSU4sTUFBTTtpQ0FJTixNQUFNOzhCQUlOLE1BQU07d0JBQ04sS0FBSztvQkF3QkwsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTE9HTyBZQVpJTElNIFNBTkFZxLAgVkUgVMSwQ0FSRVQgQS7Fni4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBTYXZlIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdywgeW91IG1heSBub3QgdXNlLCBjb3B5LCBtb2RpZnksXG4gKiBkaXN0cmlidXRlIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoaXMgbWF0ZXJpYWwgb3IgYW55IHBhcnRcbiAqIG9mIGl0IHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBMT0dPIFlBWklMSU0gU0FOQVnEsCBWRSBUxLBDQVJFVCBBLsWeLiBMaW1pdGVkLlxuICogQW55IHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIG11c3QgY29udGFpbiB0aGlzIG5vdGljZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUm91dGVyTGlua0FjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IFRyZWUgfSBmcm9tICcuL3RyZWUnO1xuXG4vKipcbiAqIEFsbW9zdCBhbnl0aGluZyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHN0cnVjdHVyZS4gRXhhbXBsZXMgaW5jbHVkZSBkaXJlY3Rvcmllcywgb3JnYW5pemF0aW9uIGhpZXJhcmNoaWVzLCBiaW9sb2dpY2FsIGNsYXNzaWZpY2F0aW9ucywgY291bnRyaWVzLCBldGMuIFRoZSBUcmVlIGNvbXBvbmVudCBpcyBhIHdheSBvZiByZXByZXNlbnRpbmcgdGhlIGhpZXJhcmNoaWNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0aGluZ3MuIFlvdSBjYW4gYWxzbyBleHBhbmQsIGNvbGxhcHNlLCBhbmQgc2VsZWN0IGEgdHJlZU5vZGUgd2l0aGluIGEgVHJlZS5cbiAqXG4gKiBBZGQgdGhlIGJlbG93IGNvZGUgdG8geW91ciBjb2RlIHN0YWNrIGFuZCBnaXZlIGluaXRpYWxpemVyIHBhcmFtZXRlcnMuXG4gKlxuICogPHN1Yj5hcHAuY29tcG9uZW50Lmh0bWw8L3N1Yj5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bG9nby10cmVlIFtpdGVtc109XCJpdGVtc1wiIFtzdGFydF09XCIwXCIgW2ljb25DbGFzc2VzXT1cIlwiPjwvbG9nby10cmVlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xvZ28tdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIGdyb3VwXG4gICAqL1xuICBASW5wdXQoKSBncm91cDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogU3BlY2lmaWVzIG9uZSBvciBtb3JlIENTUyBjbGFzc2VzIHRvIGJlIHVzZWQgYnkgdGhlIGVsZW1lbnQuIFdoZW4gc2V0LCB0aGlzIGNsYXNzIHdpbGwgYWxzbyBiZSB1c2VkIGJ5IGFsbCBjaGlsZCBlbGVtZW50cyB0aGF0IGRvbid0IGhhdmUgdGhlaXIgb3duIGNsYXNzLlxuICAgKi9cbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nID0gJyc7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgb25lIG9yIG1vcmUgQ1NTIGNsYXNzZXMgdG8gYmUgdXNlZCBieSB0aGUgZWxlbWVudCdzIGljb25zLiBXaGVuIHNldCwgdGhpcyBjbGFzcyB3aWxsIGFsc28gYmUgdXNlZCBieSBhbGwgY2hpbGQgZWxlbWVudHMgaWNvbnMgdGhhdCBkb24ndCBoYXZlIHRoZWlyIG93biBjbGFzcy5cbiAgICovXG4gIEBJbnB1dCgpIGljb25DbGFzc2VzPzogc3RyaW5nID0gJyc7XG4gIC8qKlxuICAgKiBNZW51IGl0ZW1zIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogVHJlZVtdID0gW107XG4gIC8qKlxuICAgKiBJdCBpbmRpY2F0ZXMgdGhlIHN0YXJ0aW5nIGxldmVsIG9mIHRoZSBpdGVtcyB0byBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGFydCA9IDA7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBpbmRlbnRhdGlvbiwgaW4gcGl4ZWxzLCB1c2VkIHRvIG9mZnNldCBzdWNjZXNzaXZlIG1lbnUgbGVhZiBsZXZlbHMgaW4gYSBoaWVyYXJjaHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwIHBpeGVscy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWRkaW5nTGVmdDogbnVtYmVyID0gMzA7XG4gIC8qKlxuICAgKiBodHRwIHJlcXVlc3Qgd2lsbCBiZSBnZXQgaXRlbXMgZnJvbSBzZXJ2ZXIgZm9yIGVhY2ggY2F0ZWdvcnkgb3BlbmVkXG4gICAqL1xuICBASW5wdXQoKSByZXF1ZXN0PzogSHR0cFJlcXVlc3Q8YW55PjtcbiAgLyoqXG4gICAqIFJvbGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggYXV0aG9yaXplZCBwZW9wbGUgY2FuIHZpZXcgdGhpcyBtZW51IGl0ZW0uIEV4YW1wbGU6IHJvbGVzOiBbJ1JPTEVfQURNSU4nLCAnUk9MRV9ERVZFTE9QRVInXVxuICAgKi9cbiAgQElucHV0KCkgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBJdGVtIGNsaWNrIGV2ZW50IHRyaWdnZXIuIFdoZW4gY2xpY2tlZCBvbiBhbnkgaXRlbSB0aGlzIGV2ZW50IHdpbGwgYmUgY2FsbGVkIGFuZCBwdXNoZXMgdGhlIGl0ZW0gaW5mb3JtYXRpb24gdG8gdGhlIGdpdmVuIG1ldGhvZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgaXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8VHJlZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWU+KCk7XG4gIC8qKlxuICAgKiBDYXRlZ29yeSBjbGljayBldmVudCB0cmlnZ2VyLiBXaGVuIGNsaWNrZWQgb24gYW55IGNhdGVnb3J5IGl0ZW0sIHRoaXMgZXZlbnQgd2lsbCBiZSBjYWxsZWQgYW5kIHB1c2hlcyB0aGUgaXRlbSBpbmZvcm1hdGlvbiB0byB0aGUgZ2l2ZW4gbWV0aG9kLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBjYXRlZ29yeUNsaWNrOiBFdmVudEVtaXR0ZXI8VHJlZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWU+KCk7XG4gIC8qKlxuICAgKiBUaGUgTWF0Y2hlZCByb3V0ZXIgaXMgYWN0aXZhdGVkIHRoaXMgbWV0aG9kIHdpbGwgYmUgdHJpZ2dlcmVkLiBJdCB3aWxsIHB1c2ggdGhlIHRyZWUgaXRlbSB0byB0aGUgZ2l2ZW4gbWV0aG9kLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyByb3V0ZUl0ZW1BY3RpdmF0ZWQ6IEV2ZW50RW1pdHRlcjxUcmVlPiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZT4oKTtcbiAgLyoqXG4gICAqIEl0ZW0gY2hlY2tib3ggc3RhdHVzIGNoYW5nZSB0cmlnZ2VyLiBXaGVuIGNsaWNrZWQsIGNsaWNrZWQgaXRlbSB3aWxsIGJlIGVtaXRlZFxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtQ2hlY2tDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIHB1YmxpYyBlbGVtZW50SWQ7XG5cbiAgLyoqXG4gICAqIEdpdmUgSHR0cENsaWVudCB0byB0aGUgY29tcG9uZW50LiBGaXJzdCBpbXBvcnQgSHR0cENsaWVudE1vZHVsZSB0byBtYWluIE1vZHVsZSBvZiB0aGUgYXBwLiBGb3IgZXhhbXBsZS5cbiAgICogIGBgYHR5cGVzY3JpcHRcbiAgICogQE5nTW9kdWxlKHsgaW1wb3J0czogW1xuICAgKiAgIEJyb3dzZXJNb2R1bGUsXG4gICAqICAgSHR0cENsaWVudE1vZHVsZSwgLy8gQWRkIEh0dHBDbGllbnRNb2R1bGVcbiAgICogXVxuICAgKiB9KVxuICAgKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHtcbiAgICogfVxuICAgKiBgYGBcbiAgICogQHBhcmFtIGh0dHBcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbTogRWxlbWVudFJlZiwgcHJpdmF0ZSBodHRwPzogSHR0cENsaWVudCkge1xuICB9XG5cbiAgcHJpdmF0ZSBfbGV2ZWwgPSAwO1xuXG4gIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgQElucHV0KCdsZXZlbCcpXG4gIHB1YmxpYyBzZXQgbGV2ZWwobGV2ZWw6IGFueSkge1xuICAgICsrbGV2ZWw7XG4gICAgdGhpcy5fbGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5lbGVtZW50SWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudElkID0gdGhpcy5nZW5lcmF0ZUVsZW1lbnRJZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlRWxlbWVudElkKCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI2KSArIDk3KVxuICAgICAgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zbGljZSgyKVxuICAgICAgKyBEYXRlLm5vdygpLnRvU3RyaW5nKDE2KS5zbGljZSg0KTtcbiAgfVxuXG4gIG9wZW4ocm91dGVyTGlua0FjdGl2ZTogUm91dGVyTGlua0FjdGl2ZSkge1xuICAgIHRoaXMucmVjdXJzaXZlUGFyZW50KChyb3V0ZXJMaW5rQWN0aXZlIGFzIGFueSkuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHJlY3Vyc2l2ZVBhcmVudChlbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50ID0gKGVsZW1lbnQgYXMgYW55KS5jbG9zZXN0KCd1bCcpLmNsb3Nlc3QoJ2xpJyk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgY29uc3QgaW5wdXQgPSBwYXJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgLy8gaWYgKCEoZWxlbWVudCBhcyBhbnkpLmNsb3Nlc3QoJ3VsLnRvcC1sZXZlbC1hY2NvcmRpb24nKSkge1xuICAgICAgdGhpcy5yZWN1cnNpdmVQYXJlbnQocGFyZW50KTtcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cblxuICBnZXRNZW51TGlzdCgpIHtcbiAgICB0aGlzLmh0dHAucmVxdWVzdCh0aGlzLnJlcXVlc3QpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZTogSHR0cFJlc3BvbnNlPFRyZWU+KSA9PiB0aGlzLm9uU3VjY2Vzc0hhbmRsZXIocmVzcG9uc2UpLFxuICAgICk7XG4gIH1cblxuICBvblN1Y2Nlc3NIYW5kbGVyKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8VHJlZT4pIHtcbiAgICB0aGlzLml0ZW1zID0gcmVzcG9uc2UuYm9keS5jaGlsZHJlbjtcbiAgfVxuXG4gIGh0bWxJdGVtT25DbGljayhpdGVtOiBUcmVlLCAkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuJG9uSXRlbUNsaWNrKGl0ZW0pO1xuICB9XG5cbiAgJG9uSXRlbUNsaWNrKGl0ZW06IFRyZWUpIHtcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgJG9uSXRlbUNoZWNrQ2hhbmdlKGl0ZW06IGFueSkge1xuICAgIHRoaXMuaXRlbUNoZWNrQ2hhbmdlLmVtaXQoaXRlbSk7XG4gIH1cblxuICBodG1sQ2F0ZWdvcnlPbkNsaWNrKGl0ZW06IFRyZWUsICRldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy4kb25DYXRlZ29yeUNsaWNrKGl0ZW0pO1xuICB9XG5cbiAgJG9uQ2F0ZWdvcnlDbGljayhpdGVtOiBUcmVlKSB7XG4gICAgdGhpcy5jYXRlZ29yeUNsaWNrLmVtaXQoaXRlbSk7XG4gIH1cblxuICBodG1sU2V0UGFkZGluZyhsZXZlbCwgc3RhcnQpIHtcbiAgICBjb25zdCB2YWwgPSBOdW1iZXIobGV2ZWwpIC0gKHRoaXMuZ3JvdXAgPyAxIDogMCk7XG4gICAgY29uc3QgcGFkZGluZyA9IHZhbCA8PSAwID8gMCA6IHZhbCAqIHRoaXMucGFkZGluZ0xlZnQgKyAncHgnO1xuICAgIHJldHVybiBsZXZlbCA+PSBzdGFydCA/IHBhZGRpbmcgOiB0aGlzLnBhZGRpbmdMZWZ0ICsgJ3B4JztcbiAgfVxuXG4gIGNvbXBvbmVudFNldFBhZGRpbmcobGV2ZWwsIHN0YXJ0KSB7XG4gICAgY29uc3QgY3VycmVudFBhZGRpbmcgPSB0aGlzLmh0bWxTZXRQYWRkaW5nKGxldmVsLCBzdGFydCkudG9TdHJpbmcoKS5yZXBsYWNlKCdweCcsICcnKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihOdW1iZXIoY3VycmVudFBhZGRpbmcpKSArICdweCc7XG4gIH1cblxuICBvblJvdXRlSXRlbUFjdGl2YXRlZChpdGVtKSB7XG4gICAgdGhpcy5yb3V0ZUl0ZW1BY3RpdmF0ZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgbGVmdCBwYWRkaW5nIHNpemUgcHJvZ3JhbW1hdGljYWxseSBmb3IgY29sbGFwc2VkIG1lbnVzLlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHNldFBhZGRpbmcodmFsdWU6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gdmFsdWU7XG4gIH1cblxuICAvKm5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVMaW5rID0gKHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbCcpO1xuICAgIGFjdGl2ZUxpbmsuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYoaXRlbS5jbGFzc05hbWUuaW5jbHVkZXMoJ3JvdXRlci1saW5rLWFjdGl2ZScpKSB7XG4gICAgICAgIHRoaXMucmVjdXJzaXZlUGFyZW50KGl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9Ki9cbn1cbiJdfQ==