UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

359 lines (357 loc) 61.2 kB
/* MIT License Copyright (c) 2019 Temainfo Sistemas Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { Component, ViewChild, } from '@angular/core'; import { trigger, transition, style, animate } from '@angular/animations'; import { Subject } from 'rxjs'; import { debounceTime, distinctUntilChanged, filter } from 'rxjs/internal/operators'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; import * as i3 from "../../../blockui/blockui"; import * as i4 from "@angular/forms"; export class TlAdvancedRootMenu { constructor(change, router) { this.change = change; this.router = router; this.icon = ''; this.label = ''; this.subItem = ''; this.items = []; this.docked = false; this.width = ''; this.dockWidth = ''; this.group = ''; this.charsToSearch = 0; this.topDislocation = 0; this.titleMenu = ''; this.anchorElements = []; this.widthRootMenu = ''; this.visibilityMenu = false; this.operationMode = ''; this.topPosition = ''; this.filterEmptyMessage = ''; this.inputPlaceholder = ''; this.itemHeight = ''; this.rootItemHeight = ''; this.groups = []; this.innerScrollWrapper = 0; this.maxHeight = ''; this.callBack = Function(); this.nothingFound = false; this.onRootMenuLoad = new Subject(); this.onChangeItems = new Subject(); this.modelChanged = new Subject(); this.filteredMenu = []; this.index = 0; this.link = ''; this.modelChanged.pipe(debounceTime(200), distinctUntilChanged((oldValue, newValue) => oldValue === newValue), filter((searchTerm) => { if (this.isTermGreaterThanChars(searchTerm)) { return true; } else if (this.isTermLengthEqualsZero(searchTerm)) { this.rebuildMenu(); return false; } return false; })).subscribe(model => this.filterMenuItem(model)); } ngAfterContentInit() { this.onRootMenuLoad.next(true); this.setTopPosition(); this.getListMenuElements(); } setDataSubMenu(items) { this.items = items; this.filterCategory(this.items); this.change.detectChanges(); } setProperties(properties) { Object.keys(properties).forEach((item) => { this[item] = properties[item]; }); } getListMenuElements() { this.listMenuElements = this.subMenuList.nativeElement.getElementsByClassName('ng-trigger-rootElementList'); } isTermLengthEqualsZero(searchTerm) { return String(searchTerm).length === 0; } isTermGreaterThanChars(searchTerm) { return String(searchTerm).length >= this.charsToSearch; } filterCategory(array) { this.groups = []; array.forEach((value) => { if (!this.existGroup(value.category)) { this.groups.push({ group: value.category, items: this.getItemsCategory(value.category, array) }); } }); } changeInputValue(value) { this.modelChanged.next(value.trim()); } filterMenuItem(value) { this.filteredMenu = []; this.items.forEach((menu) => { if (this.mathWithTerm(menu, value) && !menu[this.subItem]) { this.filteredMenu.push(menu); } if (menu[this.subItem]) { this.filterSubItem(menu[this.subItem], value, menu); } }); this.handleDataFiltered(); } handleDataFiltered() { this.nothingFound = this.hasDataFound(); this.filterCategory(this.filteredMenu); this.change.detectChanges(); } mathWithTerm(menu, value) { return menu[this.label].toLowerCase().substr(0, value.length).includes(value.toLowerCase()); } hasDataFound() { return this.filteredMenu.length === 0; } close() { this.visibilityMenu = false; } rebuildMenu() { this.nothingFound = false; this.subMenuService.resetAdvancedMenu(); this.subMenuService.createAdvancedMenu(); this.setDataSubMenu(this.items); this.onChangeItems.next(true); this.setInputFocus(); } onArrowDown($event) { $event.preventDefault(); if (this.isFocusInput()) { this.index = 0; this.setFocusElement(); return; } if (this.existListElement(this.index + 1)) { this.index++; this.setFocusElement(); } } onArrowLeft($event) { $event.preventDefault(); } onArrowRight($event, element) { $event.stopPropagation(); if (this.isContentMath(element).length > 0) { this.isContentMath(element)[0].subMenu.toggleVisibility(); } } onArrowUp($event) { $event.preventDefault(); if (this.isFocusInput()) { return; } if (this.existListElement(this.index - 1)) { this.index--; return this.listMenuElements[this.index].focus(); } this.setInputFocus(); } onScrollWrapper() { this.innerScrollWrapper = this.wrapperItemsList.nativeElement.scrollTop; this.closeAllSubMenus(); } onHoverSubMenu(element) { if (!this.isOperationModeHover()) { return; } const mathContent = this.isContentMath(element); if (mathContent.length > 0) { mathContent[0].subMenu.setPosition(); mathContent[0].subMenu.visibilitySubMenu = true; } } onLeaveSubMenu(element) { if (!this.isOperationModeHover()) { return; } const mathContent = this.isContentMath(element); if (mathContent.length > 0) { mathContent[0].subMenu.setPosition(); mathContent[0].subMenu.visibilitySubMenu = false; } } isOperationModeHover() { return this.operationMode === 'hover'; } closeAllSubMenus() { this.subMenuService.getSubMenus().forEach((item) => { item.instance.close(); }); } setFocusElement() { this.listMenuElements[this.index].focus(); } existListElement(index) { return this.listMenuElements[index]; } isFocusInput() { return document.activeElement === this.inputElement.nativeElement; } callbackListElement($event, item) { $event.stopPropagation(); if (item[this.link]) { this.visibilityMenu = false; return this.router.navigate([item[this.link]], { queryParams: item['queryParams'] }); } this.handleCallbackItem(item, $event); } handleCallbackItem(item, $event) { if (item['callBack']) { this.callBack = item['callBack']; this.callBack($event); this.visibilityMenu = false; } } filterSubItem(array, value, menu) { array.forEach((submenu) => { if (this.mathWithTerm(submenu, value) && !submenu[this.subItem]) { this.filteredMenu.push(submenu); } if (submenu[this.subItem]) { this.filterSubItem(submenu[this.subItem], value, menu); } }); } getItemsCategory(category, array) { return array.filter((value2) => { return value2.category === category; }); } existGroup(category) { for (const item of this.groups) { if (item.group === category) { return true; } } return false; } setAnchorElement(item, element) { if (item[this.subItem] && this.alreadyTaken(element).length === 0) { this.anchorElements.push({ 'rootElement': element, 'subItems': item[this.subItem], 'subMenu': null }); } } toggleSubMenu(element, subItem, $event) { if (!subItem) { return; } if (this.isTargetEqualsElement(element, $event.target) || this.isTargetListElement(element, $event.target)) { this.closeAllSubMenus(); this.isContentMath(element)[0].subMenu.toggleVisibility(); } } isTargetEqualsElement(element, target) { return element === target; } isContentMath(element) { return this.anchorElements.filter((value, index, array) => { return value['rootElement'] === element; }); } isTargetListElement(element, target) { for (const item of element.children) { if (item === target) { return true; } } return false; } alreadyTaken(element) { return this.anchorElements.filter((value) => { return value.rootElement === element; }); } setMenuServiceInstance(menuService) { this.subMenuService = menuService; } setInputFocus() { setTimeout(() => { this.inputElement.nativeElement.focus(); }, 100); } getWidth() { const border = 1; return Math.round(parseInt(this.width, 10) + border) + 'px'; } toggleVisibility() { this.visibilityMenu = !this.visibilityMenu; if (this.visibilityMenu) { this.setInputFocus(); } } setTopPosition() { this.topPosition = '-' + this.topDislocation + 'px'; } } /** @nocollapse */ TlAdvancedRootMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlAdvancedRootMenu, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TlAdvancedRootMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlAdvancedRootMenu, selector: "tl-advanced-root-menu", viewQueries: [{ propertyName: "subMenuList", first: true, predicate: ["subMenuList"], descendants: true, static: true }, { propertyName: "wrapperItemsList", first: true, predicate: ["wrapperItemsList"], descendants: true, static: true }, { propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "wrapperItems", first: true, predicate: ["wrapperItems"], descendants: true, static: true }], ngImport: i0, template: "<ul #list class=\"ui-advanced-sub-menu-list\" [@rootElementList]=\"true\"\n [style.visibility]=\"visibilityMenu ? 'visible' : 'hidden'\"\n [style.opacity]=\"visibilityMenu ? '1' : '0'\"\n (click)=\"$event.stopPropagation()\"\n [ngClass]=\"{'docked': docked}\"\n [style.left]=\"getWidth()\"\n [style.maxHeight]=\"maxHeight\"\n [style.width]=\"widthRootMenu\"\n [style.top]=\"topPosition\" #subMenuList>\n\n <div class=\"header-advanced-menu\">\n <div class=\"ui-header-title\">\n <i class=\"fas fa-bars icon-header\"></i>\n <span class=\"title-header\">{{titleMenu}}</span>\n </div>\n <div class=\"wrapper-search-input\">\n <span><i class=\"ion ion-ios-search\"></i></span>\n <input #input type=\"text\"\n (keydown.arrowdown)=\"onArrowDown($event)\"\n (keydown.escape)=\"close()\"\n (keydown.arrowup)=\"onArrowUp($event)\"\n [ngModel]=\"model\" (keyup)=\"changeInputValue($event.target.value)\" [placeholder]=\"inputPlaceholder\">\n </div>\n </div>\n\n <div class=\"ui-wrapper-not-found\"\n *ngIf=\"nothingFound\"\n [tlBlockui]=\"nothingFound\"\n [blockuiConfig]=\"{'spin': false, 'icon': 'ion ion-md-sad', 'message': filterEmptyMessage}\">\n </div>\n\n <div class=\"ui-wrapper-items\"\n [style.width]=\"widthRootMenu\"\n (scroll)=\"onScrollWrapper()\"\n [style.maxHeight]=\"'calc(' + maxHeight + ' - 100px)'\" #wrapperItemsList>\n <div class=\"ui-subitem-group\" *ngFor=\"let itemGroup of groups\">\n <div class=\"ui-label-group\" (click)=\"$event.stopPropagation()\"\n *ngIf=\"itemGroup.group\">{{itemGroup.group}}\n </div>\n <div class=\"ui-label-group\" (click)=\"$event.stopPropagation()\" *ngIf=\"!itemGroup.group\">Outros</div>\n <li #elementList\n [@rootElementList]=\"true\"\n (keydown.arrowdown)=\"onArrowDown($event)\"\n (keydown.arrowup)=\"onArrowUp($event)\"\n (keydown.arrowleft)=\"onArrowLeft($event)\"\n (keydown.arrowright)=\"onArrowRight($event, elementList)\"\n tabindex=\"-1\"\n [ngClass]=\"{'ui-advanced-submenu-selected': isContentMath(elementList)[0]?.subMenu?.visibilitySubMenu && item[subItem] }\"\n class=\"ui-advanced-list-item\"\n (keydown.enter)=\"callbackListElement($event, item)\"\n (mouseover)=\"onHoverSubMenu(elementList)\"\n (mouseleave)=\"onLeaveSubMenu(elementList)\"\n (click)=\"toggleSubMenu(elementList, item[subItem], $event); callbackListElement($event, item)\"\n [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" *ngFor=\"let item of itemGroup.items\">\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" [class]=\"'icon ' + item[icon]\"></i>\n <span [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" class=\"label\">{{item[label]}}</span>\n\n <div class=\"icon-sub-menu\" *ngIf=\"item[subItem]\"\n [ngClass]=\"{'ui-advanced-submenu-opened' : isContentMath(elementList)[0]?.subMenu?.visibilitySubMenu }\">\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" *ngIf=\"item[subItem]\"\n [ngClass]=\"{'anchor': setAnchorElement(item, elementList)}\"\n class=\"ion ion-ios-arrow-forward icon\"></i>\n </div>\n </li>\n </div>\n </div>\n</ul>\n", styles: [":host{width:auto;grid-column-end:span 4;visibility:hidden}.header-advanced-menu{height:100px;padding:5px;box-sizing:border-box}.header-advanced-menu .ui-header-title{display:grid;grid-template-columns:40px 1fr 40px}.header-advanced-menu .ui-header-title>.icon-header{font-size:1.2em;text-align:center;line-height:50px;padding:2px}.header-advanced-menu .ui-header-title>.title-header{line-height:50px;padding:2px;font-size:1.1em}.header-advanced-menu .wrapper-search-input{display:grid;grid-template-columns:25px 1fr;height:30px}.header-advanced-menu .wrapper-search-input span{height:30px;line-height:30px;text-align:center}.header-advanced-menu .wrapper-search-input input{height:30px;line-height:30px;font-family:Lato,sans-serif;padding-left:5px;outline:none;width:100%;box-sizing:border-box}.header-advanced-menu .wrapper-search-input input::placeholder{font-size:.9em}.ui-wrapper-not-found{width:100%;height:250px}.ui-advanced-sub-menu-list{font-family:Lato,sans-serif;list-style:none;margin:0;padding:0;position:absolute;z-index:100;-webkit-user-select:none;user-select:none;box-sizing:content-box;transition:all .15s ease-in-out}.ui-advanced-sub-menu-list>.ui-wrapper-items{overflow-x:hidden;overflow-y:auto}.ui-advanced-sub-menu-list>.ui-wrapper-items::-webkit-scrollbar{width:7px}.ui-advanced-sub-menu-list>.ui-wrapper-items::-webkit-scrollbar-thumb{-webkit-border-radius:5px}.ui-advanced-sub-menu-list>.ui-label-nothing-found{font-size:1em;text-align:center;width:100%}.ui-advanced-sub-menu-list .ui-label-group{font-family:Lato,sans-serif;font-size:1em;margin:0;height:30px;padding-left:15px;width:100%;font-weight:400}.ui-advanced-list-item{position:static;font-family:Lato,sans-serif;font-size:1em;display:grid;cursor:pointer;text-decoration:none;height:40px;line-height:40px;padding:0 5px;grid-template-columns:40px 1fr 25px;box-sizing:content-box}.ui-advanced-list-item>.icon{text-align:center;font-size:1.1em}.ui-advanced-list-item>.icon-sub-menu{text-align:center;width:10px;left:15px;position:relative}.ui-advanced-list-item>.label{padding:0;font-style:normal;font-size:1em;text-align:left;font-weight:400;height:40px;line-height:40px}.ui-advanced-list-item>.category{font-family:Lato,sans-serif;font-size:16px}.ui-advanced-list-item:focus{outline:none}.ui-advanced-list-item:last-child{margin-bottom:1px}.ui-list-category{height:30px!important;line-height:30px!important;padding-left:10px;font-weight:800}.ui-list-category>.icon{height:30px!important;line-height:30px!important}.ui-list-category>.label{height:30px!important;line-height:30px!important}.ui-subitem-group .ui-advanced-list-item:first-of-type{border-top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.TlBlockUI, selector: "[tlBlockui]", inputs: ["tlBlockui", "dimensionsFrom", "blockuiConfig"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], animations: [ trigger('rootElementList', [ transition(':enter', [ style({ transform: 'translateY(5%)', opacity: 0 }), animate('250ms', style({ transform: 'translateY(0)', opacity: 1 })) ]), transition(':leave', [ style({ transform: 'translateY(0)', opacity: 1 }), animate('250ms', style({ transform: 'translateY(100%)', opacity: 0 })) ]) ]) ] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlAdvancedRootMenu, decorators: [{ type: Component, args: [{ selector: 'tl-advanced-root-menu', animations: [ trigger('rootElementList', [ transition(':enter', [ style({ transform: 'translateY(5%)', opacity: 0 }), animate('250ms', style({ transform: 'translateY(0)', opacity: 1 })) ]), transition(':leave', [ style({ transform: 'translateY(0)', opacity: 1 }), animate('250ms', style({ transform: 'translateY(100%)', opacity: 0 })) ]) ]) ], template: "<ul #list class=\"ui-advanced-sub-menu-list\" [@rootElementList]=\"true\"\n [style.visibility]=\"visibilityMenu ? 'visible' : 'hidden'\"\n [style.opacity]=\"visibilityMenu ? '1' : '0'\"\n (click)=\"$event.stopPropagation()\"\n [ngClass]=\"{'docked': docked}\"\n [style.left]=\"getWidth()\"\n [style.maxHeight]=\"maxHeight\"\n [style.width]=\"widthRootMenu\"\n [style.top]=\"topPosition\" #subMenuList>\n\n <div class=\"header-advanced-menu\">\n <div class=\"ui-header-title\">\n <i class=\"fas fa-bars icon-header\"></i>\n <span class=\"title-header\">{{titleMenu}}</span>\n </div>\n <div class=\"wrapper-search-input\">\n <span><i class=\"ion ion-ios-search\"></i></span>\n <input #input type=\"text\"\n (keydown.arrowdown)=\"onArrowDown($event)\"\n (keydown.escape)=\"close()\"\n (keydown.arrowup)=\"onArrowUp($event)\"\n [ngModel]=\"model\" (keyup)=\"changeInputValue($event.target.value)\" [placeholder]=\"inputPlaceholder\">\n </div>\n </div>\n\n <div class=\"ui-wrapper-not-found\"\n *ngIf=\"nothingFound\"\n [tlBlockui]=\"nothingFound\"\n [blockuiConfig]=\"{'spin': false, 'icon': 'ion ion-md-sad', 'message': filterEmptyMessage}\">\n </div>\n\n <div class=\"ui-wrapper-items\"\n [style.width]=\"widthRootMenu\"\n (scroll)=\"onScrollWrapper()\"\n [style.maxHeight]=\"'calc(' + maxHeight + ' - 100px)'\" #wrapperItemsList>\n <div class=\"ui-subitem-group\" *ngFor=\"let itemGroup of groups\">\n <div class=\"ui-label-group\" (click)=\"$event.stopPropagation()\"\n *ngIf=\"itemGroup.group\">{{itemGroup.group}}\n </div>\n <div class=\"ui-label-group\" (click)=\"$event.stopPropagation()\" *ngIf=\"!itemGroup.group\">Outros</div>\n <li #elementList\n [@rootElementList]=\"true\"\n (keydown.arrowdown)=\"onArrowDown($event)\"\n (keydown.arrowup)=\"onArrowUp($event)\"\n (keydown.arrowleft)=\"onArrowLeft($event)\"\n (keydown.arrowright)=\"onArrowRight($event, elementList)\"\n tabindex=\"-1\"\n [ngClass]=\"{'ui-advanced-submenu-selected': isContentMath(elementList)[0]?.subMenu?.visibilitySubMenu && item[subItem] }\"\n class=\"ui-advanced-list-item\"\n (keydown.enter)=\"callbackListElement($event, item)\"\n (mouseover)=\"onHoverSubMenu(elementList)\"\n (mouseleave)=\"onLeaveSubMenu(elementList)\"\n (click)=\"toggleSubMenu(elementList, item[subItem], $event); callbackListElement($event, item)\"\n [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" *ngFor=\"let item of itemGroup.items\">\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" [class]=\"'icon ' + item[icon]\"></i>\n <span [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" class=\"label\">{{item[label]}}</span>\n\n <div class=\"icon-sub-menu\" *ngIf=\"item[subItem]\"\n [ngClass]=\"{'ui-advanced-submenu-opened' : isContentMath(elementList)[0]?.subMenu?.visibilitySubMenu }\">\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" *ngIf=\"item[subItem]\"\n [ngClass]=\"{'anchor': setAnchorElement(item, elementList)}\"\n class=\"ion ion-ios-arrow-forward icon\"></i>\n </div>\n </li>\n </div>\n </div>\n</ul>\n", styles: [":host{width:auto;grid-column-end:span 4;visibility:hidden}.header-advanced-menu{height:100px;padding:5px;box-sizing:border-box}.header-advanced-menu .ui-header-title{display:grid;grid-template-columns:40px 1fr 40px}.header-advanced-menu .ui-header-title>.icon-header{font-size:1.2em;text-align:center;line-height:50px;padding:2px}.header-advanced-menu .ui-header-title>.title-header{line-height:50px;padding:2px;font-size:1.1em}.header-advanced-menu .wrapper-search-input{display:grid;grid-template-columns:25px 1fr;height:30px}.header-advanced-menu .wrapper-search-input span{height:30px;line-height:30px;text-align:center}.header-advanced-menu .wrapper-search-input input{height:30px;line-height:30px;font-family:Lato,sans-serif;padding-left:5px;outline:none;width:100%;box-sizing:border-box}.header-advanced-menu .wrapper-search-input input::placeholder{font-size:.9em}.ui-wrapper-not-found{width:100%;height:250px}.ui-advanced-sub-menu-list{font-family:Lato,sans-serif;list-style:none;margin:0;padding:0;position:absolute;z-index:100;-webkit-user-select:none;user-select:none;box-sizing:content-box;transition:all .15s ease-in-out}.ui-advanced-sub-menu-list>.ui-wrapper-items{overflow-x:hidden;overflow-y:auto}.ui-advanced-sub-menu-list>.ui-wrapper-items::-webkit-scrollbar{width:7px}.ui-advanced-sub-menu-list>.ui-wrapper-items::-webkit-scrollbar-thumb{-webkit-border-radius:5px}.ui-advanced-sub-menu-list>.ui-label-nothing-found{font-size:1em;text-align:center;width:100%}.ui-advanced-sub-menu-list .ui-label-group{font-family:Lato,sans-serif;font-size:1em;margin:0;height:30px;padding-left:15px;width:100%;font-weight:400}.ui-advanced-list-item{position:static;font-family:Lato,sans-serif;font-size:1em;display:grid;cursor:pointer;text-decoration:none;height:40px;line-height:40px;padding:0 5px;grid-template-columns:40px 1fr 25px;box-sizing:content-box}.ui-advanced-list-item>.icon{text-align:center;font-size:1.1em}.ui-advanced-list-item>.icon-sub-menu{text-align:center;width:10px;left:15px;position:relative}.ui-advanced-list-item>.label{padding:0;font-style:normal;font-size:1em;text-align:left;font-weight:400;height:40px;line-height:40px}.ui-advanced-list-item>.category{font-family:Lato,sans-serif;font-size:16px}.ui-advanced-list-item:focus{outline:none}.ui-advanced-list-item:last-child{margin-bottom:1px}.ui-list-category{height:30px!important;line-height:30px!important;padding-left:10px;font-weight:800}.ui-list-category>.icon{height:30px!important;line-height:30px!important}.ui-list-category>.label{height:30px!important;line-height:30px!important}.ui-subitem-group .ui-advanced-list-item:first-of-type{border-top:0}\n"] }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }]; }, propDecorators: { subMenuList: [{ type: ViewChild, args: ['subMenuList', { static: true }] }], wrapperItemsList: [{ type: ViewChild, args: ['wrapperItemsList', { static: true }] }], inputElement: [{ type: ViewChild, args: ['input', { static: true }] }], wrapperItems: [{ type: ViewChild, args: ['wrapperItems', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtcm9vdC1tZW51LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvbWVudS9wYXJ0cy9hZHZhbmNlZC9hZHZhbmNlZC1yb290LW1lbnUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnVseS11aS9zcmMvY29tcG9uZW50cy9tZW51L3BhcnRzL2FkdmFuY2VkL2FkdmFuY2VkLXJvb3QtbWVudS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE9BQU8sRUFDTCxTQUFTLEVBQWMsU0FBUyxHQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUsvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUF1QnJGLE1BQU0sT0FBTyxrQkFBa0I7SUE4RTdCLFlBQXFCLE1BQXlCLEVBQVUsTUFBYztRQUFqRCxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUE1RS9ELFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWYsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFFZixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFFbEIsbUJBQWMsR0FB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RUFBQztnQkFFVSxZQUFZO3NCQUF4RCxTQUFTO3VCQUFFLGNBQWMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIE1JVCBMaWNlbnNlXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTkgVGVtYWluZm8gU2lzdGVtYXNcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IHRyaWdnZXIsIHRyYW5zaXRpb24sIHN0eWxlLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cblxuXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGxBZHZhbmNlZFN1Yk1lbnUgfSBmcm9tICcuL3BhcnRzL2FkdmFuY2VkLXN1Yi1tZW51JztcbmltcG9ydCB7Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0fSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuQENvbXBvbmVudCgge1xuICBzZWxlY3RvcjogJ3RsLWFkdmFuY2VkLXJvb3QtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1yb290LW1lbnUuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9hZHZhbmNlZC1yb290LW1lbnUuc2NzcycgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoXG4gICAgICAncm9vdEVsZW1lbnRMaXN0JywgW1xuICAgICAgICB0cmFuc2l0aW9uKCAnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKCB7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoNSUpJywgb3BhY2l0eTogMCB9ICksXG4gICAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6IDF9KSlcbiAgICAgICAgXSApLFxuICAgICAgICB0cmFuc2l0aW9uKCAnOmxlYXZlJywgW1xuICAgICAgICAgIHN0eWxlKCB7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAxIH0gKSxcbiAgICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJywgb3BhY2l0eTogMH0pKVxuICAgICAgICBdIClcbiAgICAgIF1cbiAgICApXG4gIF0sXG59IClcbmV4cG9ydCBjbGFzcyBUbEFkdmFuY2VkUm9vdE1lbnUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcblxuICBwdWJsaWMgaWNvbiA9ICcnO1xuXG4gIHB1YmxpYyBsYWJlbCA9ICcnO1xuXG4gIHB1YmxpYyBzdWJJdGVtID0gJyc7XG5cbiAgcHVibGljIGl0ZW1zID0gW107XG5cbiAgcHVibGljIGRvY2tlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyB3aWR0aCA9ICcnO1xuXG4gIHB1YmxpYyBkb2NrV2lkdGggPSAnJztcblxuICBwdWJsaWMgZ3JvdXAgPSAnJztcblxuICBwdWJsaWMgY2hhcnNUb1NlYXJjaCA9IDA7XG5cbiAgcHVibGljIHRvcERpc2xvY2F0aW9uID0gMDtcblxuICBwdWJsaWMgdGl0bGVNZW51ID0gJyc7XG5cbiAgcHVibGljIGFuY2hvckVsZW1lbnRzID0gW107XG5cbiAgcHVibGljIHdpZHRoUm9vdE1lbnUgPSAnJztcblxuICBwdWJsaWMgdmlzaWJpbGl0eU1lbnUgPSBmYWxzZTtcblxuICBwdWJsaWMgb3BlcmF0aW9uTW9kZSA9ICcnO1xuXG4gIHB1YmxpYyB0b3BQb3NpdGlvbiA9ICcnO1xuXG4gIHB1YmxpYyBmaWx0ZXJFbXB0eU1lc3NhZ2UgPSAnJztcblxuICBwdWJsaWMgaW5wdXRQbGFjZWhvbGRlciA9ICcnO1xuXG4gIHB1YmxpYyBpdGVtSGVpZ2h0ID0gJyc7XG5cbiAgcHVibGljIHJvb3RJdGVtSGVpZ2h0ID0gJyc7XG5cbiAgcHVibGljIGdyb3VwcyA9IFtdO1xuXG4gIHB1YmxpYyBtb2RlbDogc3RyaW5nO1xuXG4gIHB1YmxpYyBpbm5lclNjcm9sbFdyYXBwZXIgPSAwO1xuXG4gIHB1YmxpYyBtYXhIZWlnaHQgPSAnJztcblxuICBwdWJsaWMgY2FsbEJhY2sgPSBGdW5jdGlvbigpO1xuXG4gIHB1YmxpYyBub3RoaW5nRm91bmQgPSBmYWxzZTtcblxuICBwdWJsaWMgb25Sb290TWVudUxvYWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHB1YmxpYyBvbkNoYW5nZUl0ZW1zOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIG1vZGVsQ2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgZmlsdGVyZWRNZW51ID0gW107XG5cbiAgcHJpdmF0ZSBzdWJNZW51U2VydmljZTtcblxuICBwcml2YXRlIGluZGV4ID0gMDtcblxuICBwcml2YXRlIGxpbmsgPSAnJztcblxuICBwcml2YXRlIGxpc3RNZW51RWxlbWVudHM7XG5cbiAgQFZpZXdDaGlsZCggJ3N1Yk1lbnVMaXN0Jywge3N0YXRpYzogdHJ1ZX0gKSBzdWJNZW51TGlzdDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCAnd3JhcHBlckl0ZW1zTGlzdCcsIHtzdGF0aWM6IHRydWV9ICkgd3JhcHBlckl0ZW1zTGlzdDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCAnaW5wdXQnLCB7c3RhdGljOiB0cnVlfSApIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCAnd3JhcHBlckl0ZW1zJywge3N0YXRpYzogdHJ1ZX0gKSB3cmFwcGVySXRlbXM6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoIHByaXZhdGUgY2hhbmdlOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciApIHtcbiAgICB0aGlzLm1vZGVsQ2hhbmdlZC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKCAyMDAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCAoIG9sZFZhbHVlLCBuZXdWYWx1ZSApID0+IG9sZFZhbHVlID09PSBuZXdWYWx1ZSApLFxuICAgICAgZmlsdGVyKCAoIHNlYXJjaFRlcm0gKSA9PiB7XG4gICAgICAgIGlmICggdGhpcy5pc1Rlcm1HcmVhdGVyVGhhbkNoYXJzKCBzZWFyY2hUZXJtICkgKSB7IHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLmlzVGVybUxlbmd0aEVxdWFsc1plcm8oIHNlYXJjaFRlcm0gKSApIHtcbiAgICAgICAgICB0aGlzLnJlYnVpbGRNZW51KCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pLFxuICAgICkuc3Vic2NyaWJlKCBtb2RlbCA9PiB0aGlzLmZpbHRlck1lbnVJdGVtKCBtb2RlbCApICk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5vblJvb3RNZW51TG9hZC5uZXh0KCB0cnVlICk7XG4gICAgdGhpcy5zZXRUb3BQb3NpdGlvbigpO1xuICAgIHRoaXMuZ2V0TGlzdE1lbnVFbGVtZW50cygpO1xuICB9XG5cbiAgc2V0RGF0YVN1Yk1lbnUoIGl0ZW1zICkge1xuICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLmZpbHRlckNhdGVnb3J5KCB0aGlzLml0ZW1zICk7XG4gICAgdGhpcy5jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2V0UHJvcGVydGllcyggcHJvcGVydGllcyApIHtcbiAgICBPYmplY3Qua2V5cyggcHJvcGVydGllcyApLmZvckVhY2goICggaXRlbSApID0+IHtcbiAgICAgIHRoaXNbIGl0ZW0gXSA9IHByb3BlcnRpZXNbIGl0ZW0gXTtcbiAgICB9ICk7XG4gIH1cblxuICBnZXRMaXN0TWVudUVsZW1lbnRzKCkge1xuICAgIHRoaXMubGlzdE1lbnVFbGVtZW50cyA9IHRoaXMuc3ViTWVudUxpc3QubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCAnbmctdHJpZ2dlci1yb290RWxlbWVudExpc3QnICk7XG4gIH1cblxuICBpc1Rlcm1MZW5ndGhFcXVhbHNaZXJvKCBzZWFyY2hUZXJtICkge1xuICAgIHJldHVybiBTdHJpbmcoIHNlYXJjaFRlcm0gKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBpc1Rlcm1HcmVhdGVyVGhhbkNoYXJzKCBzZWFyY2hUZXJtICkge1xuICAgIHJldHVybiBTdHJpbmcoIHNlYXJjaFRlcm0gKS5sZW5ndGggPj0gdGhpcy5jaGFyc1RvU2VhcmNoO1xuICB9XG5cbiAgZmlsdGVyQ2F0ZWdvcnkoIGFycmF5ICkge1xuICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCggKCB2YWx1ZSApID0+IHtcbiAgICAgIGlmICggIXRoaXMuZXhpc3RHcm91cCggdmFsdWUuY2F0ZWdvcnkgKSApIHtcbiAgICAgICAgdGhpcy5ncm91cHMucHVzaCggeyBncm91cDogdmFsdWUuY2F0ZWdvcnksIGl0ZW1zOiB0aGlzLmdldEl0ZW1zQ2F0ZWdvcnkoIHZhbHVlLmNhdGVnb3J5LCBhcnJheSApIH0gKTtcbiAgICAgIH1cbiAgICB9ICk7XG4gIH1cblxuICBjaGFuZ2VJbnB1dFZhbHVlKCB2YWx1ZSApIHtcbiAgICB0aGlzLm1vZGVsQ2hhbmdlZC5uZXh0KCB2YWx1ZS50cmltKCkgKTtcbiAgfVxuXG4gIGZpbHRlck1lbnVJdGVtKCB2YWx1ZSApIHtcbiAgICB0aGlzLmZpbHRlcmVkTWVudSA9IFtdO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCggKCBtZW51ICkgPT4ge1xuICAgICAgaWYgKCB0aGlzLm1hdGhXaXRoVGVybSggbWVudSwgdmFsdWUgKSAmJiAhbWVudVsgdGhpcy5zdWJJdGVtIF0gKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRNZW51LnB1c2goIG1lbnUgKTtcbiAgICAgIH1cbiAgICAgIGlmICggbWVudVsgdGhpcy5zdWJJdGVtIF0gKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyU3ViSXRlbSggbWVudVsgdGhpcy5zdWJJdGVtIF0sIHZhbHVlLCBtZW51ICk7XG4gICAgICB9XG4gICAgfSApO1xuICAgIHRoaXMuaGFuZGxlRGF0YUZpbHRlcmVkKCk7XG4gIH1cblxuICBoYW5kbGVEYXRhRmlsdGVyZWQoKSB7XG4gICAgdGhpcy5ub3RoaW5nRm91bmQgPSB0aGlzLmhhc0RhdGFGb3VuZCgpO1xuICAgIHRoaXMuZmlsdGVyQ2F0ZWdvcnkoIHRoaXMuZmlsdGVyZWRNZW51ICk7XG4gICAgdGhpcy5jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbWF0aFdpdGhUZXJtKCBtZW51LCB2YWx1ZSApIHtcbiAgICByZXR1cm4gbWVudVsgdGhpcy5sYWJlbCBdLnRvTG93ZXJDYXNlKCkuc3Vic3RyKCAwLCB2YWx1ZS5sZW5ndGggKS5pbmNsdWRlcyggdmFsdWUudG9Mb3dlckNhc2UoKSApO1xuICB9XG5cbiAgaGFzRGF0YUZvdW5kKCkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkTWVudS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLnZpc2liaWxpdHlNZW51ID0gZmFsc2U7XG4gIH1cblxuICByZWJ1aWxkTWVudSgpIHtcbiAgICB0aGlzLm5vdGhpbmdGb3VuZCA9IGZhbHNlO1xuICAgIHRoaXMuc3ViTWVudVNlcnZpY2UucmVzZXRBZHZhbmNlZE1lbnUoKTtcbiAgICB0aGlzLnN1Yk1lbnVTZXJ2aWNlLmNyZWF0ZUFkdmFuY2VkTWVudSgpO1xuICAgIHRoaXMuc2V0RGF0YVN1Yk1lbnUoIHRoaXMuaXRlbXMgKTtcbiAgICB0aGlzLm9uQ2hhbmdlSXRlbXMubmV4dCggdHJ1ZSApO1xuICAgIHRoaXMuc2V0SW5wdXRGb2N1cygpO1xuICB9XG5cbiAgb25BcnJvd0Rvd24oICRldmVudCApIHtcbiAgICAkZXZl