ng-devui
Version:
DevUI components based on Angular
314 lines • 64.2 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { CdkConnectedOverlay, CdkOverlayOrigin, ScrollStrategyOptions, } from '@angular/cdk/overlay';
import { DOCUMENT } from '@angular/common';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, HostListener, Inject, Input, NgZone, Output, Renderer2, ViewChild, } from '@angular/core';
import { AppendToBodyDirectionsConfig, DevConfigService, WithConfig, addClassToOrigin, fadeInOut, formWithDropDown, removeClassFromOrigin, } from 'ng-devui/utils';
import { WindowRef } from 'ng-devui/window-ref';
import { ToggleMenuListComponent } from './toggle-menu-list.component';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/window-ref";
import * as i2 from "ng-devui/utils";
import * as i3 from "@angular/cdk/overlay";
import * as i4 from "@angular/common";
export class ToggleMenuContainerComponent {
set isOpen(value) {
if (this._isOpen === value) {
// 如果toggle-container自身触发开关,父级组件的isOpen随toggleChange改变,会通过input再次返回导致重复触发,通过值是否变化屏蔽该次触发
return;
}
this._isOpen = value;
this.toggleChange.emit(value);
this.setDocumentClickListener();
if (this.selectWrapper) {
this.dropDownWidth = this.width ? this.width : this.selectWrapper.nativeElement.offsetWidth;
}
if (value) {
addClassToOrigin(this.selectWrapper);
setTimeout(() => {
this.startAnimation = true;
this.changeDetectorRef.detectChanges();
});
}
else {
removeClassFromOrigin(this.selectWrapper);
}
}
get isOpen() {
return this._isOpen;
}
constructor(doc, element, windowRef, ngZone, renderer, changeDetectorRef, devConfigService, scrollStrategyOption) {
this.doc = doc;
this.element = element;
this.windowRef = windowRef;
this.ngZone = ngZone;
this.renderer = renderer;
this.changeDetectorRef = changeDetectorRef;
this.devConfigService = devConfigService;
this.scrollStrategyOption = scrollStrategyOption;
/**
* 【可选】是否appendToBody
*/
this.appendToBody = false;
this.appendToBodyDirections = ['rightDown', 'leftDown', 'rightUp', 'leftUp'];
/**
* 【可选】是否禁用下拉框
*/
this.disabled = false;
/**
* 【可选】暂停使用下拉功能,不添加禁用效果
*/
this.paused = false;
/**
* 【可选】是否展示动效
*/
this.showAnimation = true;
/**
* 【可选】是否支持聚焦自动展开下拉
*/
this.toggleOnFocus = false;
this.closeScope = 'all';
this.direction = 'down';
/**
* select下拉toggle事件,值为true或false
*/
this.toggleChange = new EventEmitter();
this.passEvent = new EventEmitter();
this._isOpen = false;
this.isInit = true;
this.isMouseEvent = false;
this.startAnimation = false;
this.labelMinHeight = 20; // position.top小于20px时候,表示光标在第一行
this.popDirection = 'bottom';
this.menuPosition = 'bottom';
this.onDocumentClick = (event) => {
if (this.listInstance && this.isOpen && this.selectBoxElement && !this.selectBoxElement.nativeElement.contains(event.target)) {
this.isOpen = false;
this.listInstance.selectIndex = this.listInstance.activeIndex ? this.listInstance.activeIndex : -1;
this.changeDetectorRef.detectChanges();
}
};
this.document = this.doc;
this.scrollStrategy = this.scrollStrategyOption.reposition();
}
ngOnInit() {
this.isInit = false;
this.setPositions();
}
ngOnChanges(changes) {
const { appendToBodyDirections, appendToBodyScrollStrategy } = changes;
const globalScrollStrategy = this.devConfigService.getConfigForApi('appendToBodyScrollStrategy');
if (appendToBodyDirections) {
this.setPositions();
}
if (this.appendToBodyScrollStrategy && (appendToBodyScrollStrategy || globalScrollStrategy)) {
const func = this.scrollStrategyOption[this.appendToBodyScrollStrategy];
this.scrollStrategy = func();
}
}
animationEnd() {
if (!this.isOpen && this.selectMenuElement && this.showAnimation) {
const targetElement = this.selectMenuElement.nativeElement;
this.startAnimation = false;
setTimeout(() => {
// 动画会覆盖导致display还是block, 所以要等动画覆盖完
this.renderer.setStyle(targetElement, 'display', 'none');
});
}
}
setPositions() {
if (this.appendToBodyDirections && this.appendToBodyDirections.length > 0) {
this.overlayPositions = this.appendToBodyDirections
.map((position) => {
if (typeof position === 'string') {
return AppendToBodyDirectionsConfig[position];
}
else {
return position;
}
})
.filter((position) => position !== undefined);
}
else {
this.overlayPositions = undefined;
}
}
updatePosition() {
if (this.appendToBody) {
setTimeout(() => {
if (this.connectedOverlay && this.connectedOverlay.overlayRef) {
this.connectedOverlay.overlayRef.updatePosition();
}
});
}
}
setPassEvent(event, type) {
if (this.isOpen || this.paused) {
this.passEvent.emit({ event, type });
}
}
onPositionChange(position) {
this.menuPosition = position.connectionPair.originY;
}
setDocumentClickListener() {
this.ngZone.runOutsideAngular(() => {
if (this.isOpen) {
this.document.addEventListener('click', this.onDocumentClick);
}
else {
this.document.removeEventListener('click', this.onDocumentClick);
}
});
}
// mousedown mouseup解决focus与click冲突问题
setMouseEventTrue(event) {
this.isMouseEvent = true;
}
setMouseEventFalse(event) {
this.isMouseEvent = false;
}
autoToggle(event) {
event.preventDefault();
event.stopPropagation();
if (this.toggleOnFocus && !this.disabled && !this.paused && !this.isOpen && !this.isMouseEvent) {
this.toggle();
}
}
toggle(event) {
if (this.disabled || this.paused) {
this.isOpen = false;
return;
}
if (!this.isOpen) {
if (!this.appendToBody) {
let direction = '';
switch (this.direction) {
case 'auto':
direction = this.isBottomRectEnough() ? 'bottom' : 'top';
break;
case 'down':
direction = 'bottom';
break;
case 'up':
direction = 'top';
break;
default:
direction = 'bottom';
}
this.popDirection = direction;
}
else {
this.updateCdkConnectedOverlayOrigin();
}
}
else {
if (!this.showAnimation) {
this.startAnimation = false;
}
if (this.closeScope === 'none' || (this.closeScope === 'blank' && this.element.nativeElement.contains(event.target))) {
return;
}
}
this.isOpen = !this.isOpen;
}
isBottomRectEnough() {
const selectMenuElement = this.selectWrapper.nativeElement;
const selectInputElement = this.selectBoxElement;
const displayStyle = selectMenuElement.style.display || window.getComputedStyle(selectMenuElement).display;
let tempStyle;
if (displayStyle === 'none') {
// 必要, 否则首次展开必有问题, 如果animationEnd之后设置为none也会有问题
tempStyle = {
visibility: selectMenuElement.style.visibility,
display: selectMenuElement.style.display,
transform: selectMenuElement.style.transform,
};
this.renderer.setStyle(selectMenuElement, 'visibility', 'hidden');
this.renderer.setStyle(selectMenuElement, 'display', 'block');
this.renderer.setStyle(selectMenuElement, 'transform', 'translate(0, -9999)');
}
const elementHeight = selectMenuElement.offsetHeight;
const bottomDistance = this.windowRef.innerHeight - selectInputElement.nativeElement.getBoundingClientRect().bottom;
const isBottomEnough = bottomDistance >= elementHeight;
if (displayStyle === 'none') {
this.renderer.setStyle(selectMenuElement, 'visibility', tempStyle.visibility);
this.renderer.setStyle(selectMenuElement, 'display', tempStyle.display);
this.renderer.setStyle(selectMenuElement, 'transform', tempStyle.transform);
}
return isBottomEnough;
}
updateCdkConnectedOverlayOrigin() {
if (this.selectWrapper?.nativeElement) {
this.cdkConnectedOverlayOrigin = new CdkOverlayOrigin(formWithDropDown(this.selectWrapper) || this.selectWrapper.nativeElement);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToggleMenuContainerComponent, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i1.WindowRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i2.DevConfigService }, { token: i3.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ToggleMenuContainerComponent, selector: "d-toggle-menu-container", inputs: { isOpen: "isOpen", appendToBody: "appendToBody", appendToBodyDirections: "appendToBodyDirections", appendToBodyScrollStrategy: "appendToBodyScrollStrategy", width: "width", size: "size", overview: "overview", position: "position", disabled: "disabled", paused: "paused", showAnimation: "showAnimation", toggleOnFocus: "toggleOnFocus", closeScope: "closeScope", direction: "direction", selectWrapper: "selectWrapper" }, outputs: { toggleChange: "toggleChange", passEvent: "passEvent" }, host: { listeners: { "mousedown": "setMouseEventTrue($event)", "mouseup": "setMouseEventFalse($event)" } }, queries: [{ propertyName: "listInstance", first: true, predicate: ToggleMenuListComponent, descendants: true }], viewQueries: [{ propertyName: "selectBoxElement", first: true, predicate: ["selectBox"], descendants: true, static: true }, { propertyName: "selectMenuElement", first: true, predicate: ["selectMenu"], descendants: true, static: true }, { propertyName: "connectedOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n #selectBox\r\n class=\"devui-toggle-menu-container devui-toggle-menu{{ size ? '-' + size : '' }} {{ disabled ? 'disabled' : '' }}\"\r\n [tabindex]=\"0\"\r\n (click)=\"toggle($event)\"\r\n (focus)=\"autoToggle($event); setPassEvent($event, 'focus')\"\r\n (blur)=\"setPassEvent($event, 'blur')\"\r\n (keydown.esc)=\"setPassEvent($event, 'keydown.esc')\"\r\n (keydown.ArrowUp)=\"setPassEvent($event, 'keydown.ArrowUp')\"\r\n (keydown.ArrowDown)=\"setPassEvent($event, 'keydown.ArrowDown')\"\r\n (keydown.enter)=\"setPassEvent($event, 'keydown.enter')\"\r\n (keydown)=\"setPassEvent($event, 'keydown')\"\r\n>\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"appendToBody; else selectDropdownTpl\">\r\n <ng-template\r\n cdk-connected-overlay\r\n [cdkConnectedOverlayOrigin]=\"cdkConnectedOverlayOrigin\"\r\n [cdkConnectedOverlayWidth]=\"dropDownWidth\"\r\n [cdkConnectedOverlayOpen]=\"isOpen\"\r\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\r\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\r\n (positionChange)=\"onPositionChange($event)\"\r\n (backdropClick)=\"isOpen = false\"\r\n (detach)=\"isOpen && (isOpen = false)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"selectDropdownTpl\"></ng-template>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #selectDropdownTpl>\r\n <div\r\n #selectMenu\r\n class=\"devui-dropdown-menu\"\r\n [ngClass]=\"{\r\n 'devui-dropdown-menu-cdk': appendToBody,\r\n 'devui-custom-right': listInstance?.customViewDirection === 'right',\r\n 'devui-custom-left': listInstance?.customViewDirection === 'left',\r\n 'devui-custom-top': listInstance?.customViewDirection === 'top',\r\n 'devui-dropdown-menu-multiple': listInstance?.multiple\r\n }\"\r\n [@fadeInOut]=\"isOpen && startAnimation ? (appendToBody ? menuPosition : popDirection) : 'void'\"\r\n (@fadeInOut.done)=\"animationEnd()\"\r\n [@.disabled]=\"!showAnimation\"\r\n >\r\n <ng-content select=\"d-toggle-menu-list\"></ng-content>\r\n </div>\r\n </ng-template>\r\n</div>\r\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host .devui-toggle-menu-container{padding:0;width:100%;height:auto;outline:none;display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-radius:var(--devui-border-radius, 2px);border:solid 1px var(--devui-form-control-line, #dbdbdb);background-color:var(--devui-base-bg, #ffffff)}:host .devui-toggle-menu-container.disabled{color:var(--devui-disabled-text, #c2c2c2);border-color:var(--devui-disabled-line, #e6e6e6);background-color:var(--devui-disabled-bg, #f3f3f3)}:host ::ng-deep d-toggle-menu-label{max-width:100%}:host ::ng-deep .devui-toggle-menu{font-size:var(--devui-font-size-md, 12px);min-height:26px}:host ::ng-deep .devui-toggle-menu d-toggle-menu-input,:host ::ng-deep .devui-toggle-menu d-toggle-menu-placeholder,:host ::ng-deep .devui-toggle-menu d-toggle-menu-search{font-size:var(--devui-font-size-md, 12px);min-height:26px;line-height:18px}:host ::ng-deep .devui-toggle-menu-lg{font-size:var(--devui-font-size-lg, 14px);min-height:46px}:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-input,:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-placeholder,:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-search{font-size:var(--devui-font-size-lg, 14px);min-height:46px;line-height:46px}:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-list-item{font-size:var(--devui-font-size-lg, 14px);min-height:40px;line-height:28px}:host ::ng-deep .devui-toggle-menu-sm{font-size:var(--devui-font-size-sm, 12px);min-height:24px}:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-input,:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-placeholder,:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-search,:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-list-item{font-size:var(--devui-font-size-sm, 12px);min-height:24px;line-height:14px}:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-list-item{min-height:26px}.devui-dropdown-menu{width:100%;padding-bottom:0}.devui-dropdown-menu:not(.devui-dropdown-menu-cdk){width:calc(100% + 2px);left:-1px;margin:4px 0}.devui-dropdown-menu-cdk{position:static;display:block;width:100%}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk{font-size:var(--devui-font-size-md, 12px);min-height:26px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk d-toggle-menu-input,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk d-toggle-menu-placeholder,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk d-toggle-menu-search{font-size:var(--devui-font-size-md, 12px);min-height:26px;line-height:18px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg{font-size:var(--devui-font-size-lg, 14px);min-height:46px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-input,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-placeholder,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-search{font-size:var(--devui-font-size-lg, 14px);min-height:46px;line-height:46px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-list-item{font-size:var(--devui-font-size-lg, 14px);min-height:40px;line-height:28px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm{font-size:var(--devui-font-size-sm, 12px);min-height:24px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-input,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-placeholder,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-search,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-list-item{font-size:var(--devui-font-size-sm, 12px);min-height:24px;line-height:14px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-list-item{min-height:26px}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list{width:100%;display:flex!important}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list .devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list .devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list .devui-dropdown-menu-wrap{display:inline-block}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list .devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list .devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list .devui-select-custom-area{display:inline-block;overflow:auto}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list:not(.devui-custom-top)>.devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list:not(.devui-custom-top)>.devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list:not(.devui-custom-top)>.devui-dropdown-menu-wrap{width:calc(50% - 1px)}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area{width:50%}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area>.devui-select-custom-area:before,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area>.devui-select-custom-area:before,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area>.devui-select-custom-area:before{display:none}::ng-deep .devui-dropdown-menu.devui-custom-top{flex-direction:column-reverse}::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list .devui-select-custom-area{border-right:1px solid var(--devui-dividing-line, #f0f0f0);order:-1}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list .devui-select-custom-area{border-left:1px solid var(--devui-dividing-line, #f0f0f0)}::ng-deep .devui-dropdown-menu.devui-custom-top>.devui-select-custom-area{border-bottom:1px solid var(--devui-dividing-line, #f0f0f0)}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }], animations: [fadeInOut], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
__decorate([
WithConfig(),
__metadata("design:type", String)
], ToggleMenuContainerComponent.prototype, "appendToBodyScrollStrategy", void 0);
__decorate([
WithConfig(),
__metadata("design:type", Object)
], ToggleMenuContainerComponent.prototype, "showAnimation", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToggleMenuContainerComponent, decorators: [{
type: Component,
args: [{ selector: 'd-toggle-menu-container', animations: [fadeInOut], changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<div\r\n #selectBox\r\n class=\"devui-toggle-menu-container devui-toggle-menu{{ size ? '-' + size : '' }} {{ disabled ? 'disabled' : '' }}\"\r\n [tabindex]=\"0\"\r\n (click)=\"toggle($event)\"\r\n (focus)=\"autoToggle($event); setPassEvent($event, 'focus')\"\r\n (blur)=\"setPassEvent($event, 'blur')\"\r\n (keydown.esc)=\"setPassEvent($event, 'keydown.esc')\"\r\n (keydown.ArrowUp)=\"setPassEvent($event, 'keydown.ArrowUp')\"\r\n (keydown.ArrowDown)=\"setPassEvent($event, 'keydown.ArrowDown')\"\r\n (keydown.enter)=\"setPassEvent($event, 'keydown.enter')\"\r\n (keydown)=\"setPassEvent($event, 'keydown')\"\r\n>\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"appendToBody; else selectDropdownTpl\">\r\n <ng-template\r\n cdk-connected-overlay\r\n [cdkConnectedOverlayOrigin]=\"cdkConnectedOverlayOrigin\"\r\n [cdkConnectedOverlayWidth]=\"dropDownWidth\"\r\n [cdkConnectedOverlayOpen]=\"isOpen\"\r\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\r\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\r\n (positionChange)=\"onPositionChange($event)\"\r\n (backdropClick)=\"isOpen = false\"\r\n (detach)=\"isOpen && (isOpen = false)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"selectDropdownTpl\"></ng-template>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #selectDropdownTpl>\r\n <div\r\n #selectMenu\r\n class=\"devui-dropdown-menu\"\r\n [ngClass]=\"{\r\n 'devui-dropdown-menu-cdk': appendToBody,\r\n 'devui-custom-right': listInstance?.customViewDirection === 'right',\r\n 'devui-custom-left': listInstance?.customViewDirection === 'left',\r\n 'devui-custom-top': listInstance?.customViewDirection === 'top',\r\n 'devui-dropdown-menu-multiple': listInstance?.multiple\r\n }\"\r\n [@fadeInOut]=\"isOpen && startAnimation ? (appendToBody ? menuPosition : popDirection) : 'void'\"\r\n (@fadeInOut.done)=\"animationEnd()\"\r\n [@.disabled]=\"!showAnimation\"\r\n >\r\n <ng-content select=\"d-toggle-menu-list\"></ng-content>\r\n </div>\r\n </ng-template>\r\n</div>\r\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host .devui-toggle-menu-container{padding:0;width:100%;height:auto;outline:none;display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-radius:var(--devui-border-radius, 2px);border:solid 1px var(--devui-form-control-line, #dbdbdb);background-color:var(--devui-base-bg, #ffffff)}:host .devui-toggle-menu-container.disabled{color:var(--devui-disabled-text, #c2c2c2);border-color:var(--devui-disabled-line, #e6e6e6);background-color:var(--devui-disabled-bg, #f3f3f3)}:host ::ng-deep d-toggle-menu-label{max-width:100%}:host ::ng-deep .devui-toggle-menu{font-size:var(--devui-font-size-md, 12px);min-height:26px}:host ::ng-deep .devui-toggle-menu d-toggle-menu-input,:host ::ng-deep .devui-toggle-menu d-toggle-menu-placeholder,:host ::ng-deep .devui-toggle-menu d-toggle-menu-search{font-size:var(--devui-font-size-md, 12px);min-height:26px;line-height:18px}:host ::ng-deep .devui-toggle-menu-lg{font-size:var(--devui-font-size-lg, 14px);min-height:46px}:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-input,:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-placeholder,:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-search{font-size:var(--devui-font-size-lg, 14px);min-height:46px;line-height:46px}:host ::ng-deep .devui-toggle-menu-lg d-toggle-menu-list-item{font-size:var(--devui-font-size-lg, 14px);min-height:40px;line-height:28px}:host ::ng-deep .devui-toggle-menu-sm{font-size:var(--devui-font-size-sm, 12px);min-height:24px}:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-input,:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-placeholder,:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-search,:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-list-item{font-size:var(--devui-font-size-sm, 12px);min-height:24px;line-height:14px}:host ::ng-deep .devui-toggle-menu-sm d-toggle-menu-list-item{min-height:26px}.devui-dropdown-menu{width:100%;padding-bottom:0}.devui-dropdown-menu:not(.devui-dropdown-menu-cdk){width:calc(100% + 2px);left:-1px;margin:4px 0}.devui-dropdown-menu-cdk{position:static;display:block;width:100%}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk{font-size:var(--devui-font-size-md, 12px);min-height:26px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk d-toggle-menu-input,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk d-toggle-menu-placeholder,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk d-toggle-menu-search{font-size:var(--devui-font-size-md, 12px);min-height:26px;line-height:18px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg{font-size:var(--devui-font-size-lg, 14px);min-height:46px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-input,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-placeholder,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-search{font-size:var(--devui-font-size-lg, 14px);min-height:46px;line-height:46px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-lg d-toggle-menu-list-item{font-size:var(--devui-font-size-lg, 14px);min-height:40px;line-height:28px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm{font-size:var(--devui-font-size-sm, 12px);min-height:24px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-input,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-placeholder,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-search,::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-list-item{font-size:var(--devui-font-size-sm, 12px);min-height:24px;line-height:14px}::ng-deep .devui-dropdown-menu.devui-dropdown-menu-cdk-sm d-toggle-menu-list-item{min-height:26px}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list{width:100%;display:flex!important}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list .devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list .devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list .devui-dropdown-menu-wrap{display:inline-block}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list .devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list .devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list .devui-select-custom-area{display:inline-block;overflow:auto}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list:not(.devui-custom-top)>.devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list:not(.devui-custom-top)>.devui-dropdown-menu-wrap,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list:not(.devui-custom-top)>.devui-dropdown-menu-wrap{width:calc(50% - 1px)}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area{width:50%}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area>.devui-select-custom-area:before,::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area>.devui-select-custom-area:before,::ng-deep .devui-dropdown-menu.devui-custom-top d-toggle-menu-list:not(.devui-custom-top)>.devui-select-custom-area>.devui-select-custom-area:before{display:none}::ng-deep .devui-dropdown-menu.devui-custom-top{flex-direction:column-reverse}::ng-deep .devui-dropdown-menu.devui-custom-left d-toggle-menu-list .devui-select-custom-area{border-right:1px solid var(--devui-dividing-line, #f0f0f0);order:-1}::ng-deep .devui-dropdown-menu.devui-custom-right d-toggle-menu-list .devui-select-custom-area{border-left:1px solid var(--devui-dividing-line, #f0f0f0)}::ng-deep .devui-dropdown-menu.devui-custom-top>.devui-select-custom-area{border-bottom:1px solid var(--devui-dividing-line, #f0f0f0)}\n"] }]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: i0.ElementRef }, { type: i1.WindowRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2.DevConfigService }, { type: i3.ScrollStrategyOptions }], propDecorators: { isOpen: [{
type: Input
}], appendToBody: [{
type: Input
}], appendToBodyDirections: [{
type: Input
}], appendToBodyScrollStrategy: [{
type: Input
}], width: [{
type: Input
}], size: [{
type: Input
}], overview: [{
type: Input
}], position: [{
type: Input
}], disabled: [{
type: Input
}], paused: [{
type: Input
}], showAnimation: [{
type: Input
}], toggleOnFocus: [{
type: Input
}], closeScope: [{
type: Input
}], direction: [{
type: Input
}], selectWrapper: [{
type: Input
}], toggleChange: [{
type: Output
}], passEvent: [{
type: Output
}], selectBoxElement: [{
type: ViewChild,
args: ['selectBox', { static: true }]
}], selectMenuElement: [{
type: ViewChild,
args: ['selectMenu', { static: true }]
}], connectedOverlay: [{
type: ViewChild,
args: [CdkConnectedOverlay]
}], listInstance: [{
type: ContentChild,
args: [ToggleMenuListComponent]
}], setMouseEventTrue: [{
type: HostListener,
args: ['mousedown', ['$event']]
}], setMouseEventFalse: [{
type: HostListener,
args: ['mouseup', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLW1lbnUtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL3RvZ2dsZS1tZW51L3RvZ2dsZS1tZW51LWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9kZXZ1aS90b2dnbGUtbWVudS90b2dnbGUtbWVudS1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBSWhCLHFCQUFxQixHQUV0QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBRVQsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCw0QkFBNEIsRUFFNUIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGdCQUFnQixFQUNoQixxQkFBcUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQVV2RSxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLElBQWEsTUFBTSxDQUFDLEtBQUs7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzNCLHVGQUF1RjtZQUN2RixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JC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QyxTQUFTLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSx1QkFDMUIsS0FBSzs7MEJBd0Z2QixNQUFNOzJCQUFDLFFBQVE7ME9BckZMLE1BQU07c0JBQWxCLEtBQUs7Z0JBNEJHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNpQiwwQkFBMEI7c0JBQWhELEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSWlCLGFBQWE7c0JBQW5DLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFLSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ21DLGdCQUFnQjtzQkFBekQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLGlCQUFpQjtzQkFBM0QsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNULGdCQUFnQjtzQkFBL0MsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ1MsWUFBWTtzQkFBbEQsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBaUg5QixpQkFBaUI7c0JBRHZCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUs5QixrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDZGtDb25uZWN0ZWRPdmVybGF5LFxyXG4gIENka092ZXJsYXlPcmlnaW4sXHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLFxyXG4gIENvbm5lY3RlZFBvc2l0aW9uLFxyXG4gIFNjcm9sbFN0cmF0ZWd5LFxyXG4gIFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyxcclxuICBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwZW5kVG9Cb2R5RGlyZWN0aW9uLFxyXG4gIEFwcGVuZFRvQm9keURpcmVjdGlvbnNDb25maWcsXHJcbiAgQXBwZW5kVG9Cb2R5U2Nyb2xsU3RyYXRlZ3lUeXBlLFxyXG4gIERldkNvbmZpZ1NlcnZpY2UsXHJcbiAgV2l0aENvbmZpZyxcclxuICBhZGRDbGFzc1RvT3JpZ2luLFxyXG4gIGZhZGVJbk91dCxcclxuICBmb3JtV2l0aERyb3BEb3duLFxyXG4gIHJlbW92ZUNsYXNzRnJvbU9yaWdpbixcclxufSBmcm9tICduZy1kZXZ1aS91dGlscyc7XHJcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ25nLWRldnVpL3dpbmRvdy1yZWYnO1xyXG5pbXBvcnQgeyBUb2dnbGVNZW51TGlzdENvbXBvbmVudCB9IGZyb20gJy4vdG9nZ2xlLW1lbnUtbGlzdC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLXRvZ2dsZS1tZW51LWNvbnRhaW5lcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvZ2dsZS1tZW51LWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbYC4vdG9nZ2xlLW1lbnUtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzYF0sXHJcbiAgYW5pbWF0aW9uczogW2ZhZGVJbk91dF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2dnbGVNZW51Q29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHNldCBpc09wZW4odmFsdWUpIHtcclxuICAgIGlmICh0aGlzLl9pc09wZW4gPT09IHZhbHVlKSB7XHJcbiAgICAgIC8vIOWmguaenHRvZ2dsZS1jb250YWluZXLoh6rouqvop6blj5HlvIDlhbPvvIzniLbnuqfnu4Tku7bnmoRpc09wZW7pmo90b2dnbGVDaGFuZ2XmlLnlj5jvvIzkvJrpgJrov4dpbnB1dOWGjeasoei/lOWbnuWvvOiHtOmHjeWkjeinpuWPke+8jOmAmui/h+WAvOaYr+WQpuWPmOWMluWxj+iUveivpeasoeinpuWPkVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc09wZW4gPSB2YWx1ZTtcclxuICAgIHRoaXMudG9nZ2xlQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgdGhpcy5zZXREb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdFdyYXBwZXIpIHtcclxuICAgICAgdGhpcy5kcm9wRG93bldpZHRoID0gdGhpcy53aWR0aCA/IHRoaXMud2lkdGggOiB0aGlzLnNlbGVjdFdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBhZGRDbGFzc1RvT3JpZ2luKHRoaXMuc2VsZWN0V3JhcHBlcik7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhcnRBbmltYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlbW92ZUNsYXNzRnJvbU9yaWdpbih0aGlzLnNlbGVjdFdyYXBwZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzT3BlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc09wZW47XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOOAkOWPr+mAieOAkeaYr+WQpmFwcGVuZFRvQm9keVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFwcGVuZFRvQm9keSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFwcGVuZFRvQm9keURpcmVjdGlvbnM6IEFycmF5PEFwcGVuZFRvQm9keURpcmVjdGlvbiB8IENvbm5lY3RlZFBvc2l0aW9uPiA9IFsncmlnaHREb3duJywgJ2xlZnREb3duJywgJ3JpZ2h0VXAnLCAnbGVmdFVwJ107XHJcbiAgQElucHV0KCkgQFdpdGhDb25maWcoKSBhcHBlbmRUb0JvZHlTY3JvbGxTdHJhdGVneTogQXBwZW5kVG9Cb2R5U2Nyb2xsU3RyYXRlZ3lUeXBlO1xyXG4gIC8qKlxyXG4gICAqIOOAkOWPr+mAieOAkWNka+aooeW8j29yaWdpbiB3aWR0aFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZTogJycgfCAnc20nIHwgJ2xnJztcclxuICAvKipcclxuICAgKiBhdXRvLWNvbXBsZXRlIOWPguaVsFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG92ZXJ2aWV3OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcG9zaXRpb246IGFueTtcclxuICAvKipcc