ng-devui
Version:
DevUI components based on Angular
223 lines • 54.3 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Inject, Input, Renderer2, TemplateRef, } from '@angular/core';
import { PositionService } from 'ng-devui/position';
import { directionFadeInOut } from 'ng-devui/utils';
import { Subscription, fromEvent } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/position";
import * as i2 from "@angular/common";
export class PopoverComponent {
get position() {
return this._position;
}
set position(pos) {
this._position = pos;
this.currentPosition = Array.isArray(pos) ? pos[0] : pos;
}
/**
* @deprecated Use mouseLeaveDelay to replace.
*/
set hoverDelayTime(delayTime) {
this.mouseLeaveDelay = delayTime;
}
get display() {
return this.content ? 'block' : 'none';
}
get class() {
return 'devui-popover ' + this.currentPosition + ' ' + this.connectionBias + ' devui-popover-' + this.popType;
}
get state() {
return this.showAnimation && this.animateState;
}
get disabled() {
return !this.showAnimation;
}
get template() {
return this.content instanceof TemplateRef ? this.content : null;
}
constructor(renderer, positionService, elementRef, cdr, doc) {
this.renderer = renderer;
this.positionService = positionService;
this.elementRef = elementRef;
this.cdr = cdr;
this.doc = doc;
this.currentPosition = 'top';
this._position = ['top', 'left', 'bottom', 'right'];
this.showAnimation = true;
this.autoHideCoefficient = 0;
this.zIndex = 1060;
// 防止每次鼠标不小心经过目标元素就会显示出PopOver的内容,所以增加适当的延迟。
this.mouseEnterDelay = 150;
// 因为鼠标移出之后如果立刻消失会很突然,所以增加略小一些的延迟,使得既不突然也反应灵敏
this.mouseLeaveDelay = 100;
this.hasSetScrollElement = false;
this.subs = new Subscription();
this.SCROLL_REFRESH_INTERVAL = 100;
this.document = this.doc;
}
ngOnInit() {
this.elementRef.nativeElement.style.zIndex = this.zIndex;
}
ngAfterViewInit() {
this.updatePosition();
if (this.appendToBody) {
if (this.scrollElement) {
this.hasSetScrollElement = this.autoHideCoefficient >= 0;
}
else {
this.scrollElement = this.positionService.getScrollParent(this.triggerElementRef.nativeElement);
}
this.subs.add(fromEvent(this.scrollElement || window, 'scroll')
.pipe(debounceTime(this.SCROLL_REFRESH_INTERVAL))
.subscribe(() => {
this.updatePosition();
}));
this.subs.add(fromEvent(window, 'resize')
.pipe(debounceTime(this.SCROLL_REFRESH_INTERVAL))
.subscribe(() => {
this.updatePosition();
}));
}
}
ngOnChanges(changes) {
if (changes.content) {
if (this.content !== undefined) {
this.updatePosition();
}
}
}
show() { }
hide() {
this.animateState = 'void';
}
// will be overwrite by directive
onHidden() { }
onAnimationEnd(event) {
if (event.toState === 'void') {
this.onHidden();
}
}
ngOnDestroy() {
if (this.subs) {
this.subs.unsubscribe();
}
}
updatePosition() {
this.renderer.setStyle(this.elementRef.nativeElement, 'visibility', 'hidden');
this.renderer.setStyle(this.elementRef.nativeElement, 'transform', 'translate(0, -99999px)');
const rect = this.positionService.positionElements(this.triggerElementRef.nativeElement, this.elementRef.nativeElement, this.position, this.appendToBody);
setTimeout(() => {
this.currentPosition = rect.placementPrimary;
if (this.checkBounds(rect)) {
return;
}
this.animateState = this.currentPosition;
this.connectionBias = `bias-${rect.placementSecondary}`;
if (rect.placementSecondary === 'center') {
if (rect.placementPrimary === 'left' || rect.placementPrimary === 'right') {
this.connectionBias = 'bias-vertical-center';
}
else {
this.connectionBias = 'bias-horizontal-center';
}
}
this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${rect.left}px`);
this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${rect.top}px`);
// 移除样式
this.renderer.removeStyle(this.elementRef.nativeElement, 'visibility');
this.renderer.removeStyle(this.elementRef.nativeElement, 'transform');
});
}
checkBounds(rect) {
// 手动设置了scrollElement才执行自动隐藏逻辑,位置信息及判断排列顺序都遵循上右下左
if (this.hasSetScrollElement) {
const docElement = this.document.documentElement ? this.document.documentElement : this.document.body;
const { scrollLeft, scrollTop } = docElement;
const containerRect = this.scrollElement.getBoundingClientRect();
const rectFix = {
...rect,
top: rect.top + rect.height * this.autoHideCoefficient,
right: rect.right - rect.width * this.autoHideCoefficient,
bottom: rect.bottom - rect.height * this.autoHideCoefficient,
left: rect.left + rect.width * this.autoHideCoefficient,
};
const positionFix = {
top: [rectFix.height, 0, 0, 0],
right: [0, -1 * rectFix.width, 0, 0],
bottom: [0, 0, -1 * rectFix.height, 0],
left: [0, 0, 0, rectFix.width],
};
const positionKeyword = this.currentPosition.split('-')[0];
const positionFixArr = positionFix[positionKeyword] ?? [0, 0, 0, 0];
const bounds = [
Math.round(rectFix.top + positionFixArr[0]) >= Math.round(containerRect.top + scrollTop),
Math.round(rectFix.right + positionFixArr[1]) <= Math.round(containerRect.left + containerRect.width + scrollLeft),
Math.round(rectFix.bottom + positionFixArr[2]) <= Math.round(containerRect.top + containerRect.height + scrollTop),
Math.round(rectFix.left + positionFixArr[3]) >= Math.round(containerRect.left + scrollLeft),
];
if (bounds.includes(false)) {
this.animateState = 'void';
return true;
}
}
return false;
}
updatePositionAndDetectChange() {
this.updatePosition();
this.cdr.detectChanges();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.Renderer2 }, { token: i1.PositionService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PopoverComponent, selector: "d-popover", inputs: { triggerElementRef: "triggerElementRef", position: "position", content: "content", showAnimation: "showAnimation", scrollElement: "scrollElement", autoHideCoefficient: "autoHideCoefficient", appendToBody: "appendToBody", zIndex: "zIndex", popType: "popType", popMaxWidth: "popMaxWidth", popoverStyle: "popoverStyle", hoverDelayTime: "hoverDelayTime", mouseEnterDelay: "mouseEnterDelay", mouseLeaveDelay: "mouseLeaveDelay" }, host: { listeners: { "@directionFadeInOut.done": "onAnimationEnd($event)" }, properties: { "style.display": "this.display", "class": "this.class", "@directionFadeInOut": "this.state", "@.disabled": "this.disabled" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"arrow\" [ngStyle]=\"{ backgroundColor: popoverStyle?.backgroundColor ? popoverStyle.backgroundColor : '' }\"></div>\r\n<div\r\n class=\"devui-popover-content\"\r\n [style.maxWidth.px]=\"popMaxWidth\"\r\n [style.width]=\"popMaxWidth ? 'fit-content' : 'auto'\"\r\n [ngStyle]=\"popoverStyle\"\r\n>\r\n <span class=\"devui-popover-icon\" *ngIf=\"popType && popType !== 'default'\">\r\n <svg\r\n *ngIf=\"popType === 'success'\"\r\n class=\"devui-icon devui-icon-success\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\r\n <path d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z\" fill-rule=\"nonzero\"></path>\r\n <polygon\r\n stroke-width=\"0.4\"\r\n fill-rule=\"nonzero\"\r\n points=\"8.16 10.48 7.32 11.32 6.48 10.48 6.48 10.48 3.6 7.68 4.44 6.84 7.28 9.68 11.52 5.44 12.36 6.28\"\r\n ></polygon>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'warning'\"\r\n class=\"devui-icon devui-icon-warning\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <polygon\r\n points=\"7.5 1.74501946 1.39184847 13.5954649 7.08947368 14.2207621 13.9973698 13.5954649 10.9383683 5.61273879 8.40084114 1.27624313\"\r\n ></polygon>\r\n <path\r\n d=\"M8.51325441,0.127397589 C8.70423071,0.228333932 8.8605922,0.383286648 8.96244623,0.57254229 L15.8714442,13.4101975 C16.1549662,13.9370117 15.9538562,14.5918482 15.4222523,14.8728158 C15.2642579,14.9563203 15.0879506,15 14.9088903,15 L1.09089441,15 C0.488410063,15 0,14.5159904 0,13.9189343 C0,13.7414873 0.0440768395,13.5667684 0.128340519,13.4101975 L7.03733844,0.57254229 C7.32086049,0.0457280838 7.98165058,-0.153569987 8.51325441,0.127397589 Z M8.87894737,11.2105263 L7.08947368,11.2105263 L7.08947368,13 L8.87894737,13 L8.87894737,11.2105263 Z M8.96842105,4.5 L7,4.5 L7.08947368,9.86842105 L8.87894737,9.86842105 L8.96842105,4.5 Z\"\r\n ></path>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'info'\"\r\n class=\"devui-icon devui-icon-info\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\r\n <g stroke-width=\"1\">\r\n <path\r\n d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z M9,5 L7,5 L7,3 L9,3 L9,5 Z M9,12.6 L7,12.6 L7,6.6 L9,6.6 L9,12.6 Z\"\r\n ></path>\r\n </g>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'error'\"\r\n class=\"devui-icon devui-icon-error\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"\u6E05\u7A7A\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M5.87867966,5.17157288 C5.68341751,4.97631073 5.36683502,4.97631073 5.17157288,5.17157288 C4.99800652,5.34513923 4.97872137,5.61456363 5.11371742,5.80943177 L5.17157288,5.87867966 L7.29218611,7.99929289 L5.17157288,10.1213203 C4.97631073,10.3165825 4.97631073,10.633165 5.17157288,10.8284271 C5.34513923,11.0019935 5.61456363,11.0212786 5.80943177,10.8862826 L5.87867966,10.8284271 L7.99929289,8.70639967 L10.1213203,10.8284271 C10.3165825,11.0236893 10.633165,11.0236893 10.8284271,10.8284271 C11.0019935,10.6548608 11.0212786,10.3854364 10.8862826,10.1905682 L10.8284271,10.1213203 L8.70710678,8 L10.8284271,5.87867966 C11.0236893,5.68341751 11.0236893,5.36683502 10.8284271,5.17157288 C10.6548608,4.99800652 10.3854364,4.97872137 10.1905682,5.11371742 L10.1213203,5.17157288 L8,7.29289322 L5.87867966,5.17157288 Z\"\r\n fill-rule=\"nonzero\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </span>\r\n <ng-template [ngTemplateOutlet]=\"template || defaultTemplate\"> </ng-template>\r\n <ng-template #defaultTemplate>\r\n <div class=\"devui-popover-main-content\" [ngClass]=\"{ 'with-icon': popType && popType !== 'default' }\" [innerHTML]=\"content\"></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-popover{font-size:var(--devui-font-size, 12px);top:0;left:0;line-height:1.5;border:none;z-index:var(--devui-z-index-pop-up, 1060);color:var(--devui-feedback-overlay-text, #f0f0f0);overflow-wrap:break-word}:host.devui-popover,:host.devui-popover>.arrow{position:absolute;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover,:host.devui-popover>.devui-popover-content{border-radius:var(--devui-border-radius-feedback, 4px)}:host.devui-popover>.arrow{width:8px;height:8px;transform:rotate(45deg);display:block;z-index:-1}:host.devui-popover.top>.arrow{margin-left:-4px;bottom:-4px}:host.devui-popover.right>.arrow{left:-4px;margin-top:-4px}:host.devui-popover.bottom>.arrow{margin-left:-4px;top:-4px}:host.devui-popover.left>.arrow{right:-4px;margin-top:-4px}:host.devui-popover.bias-left>.arrow{left:16px}:host.devui-popover.bias-right>.arrow{right:16px}:host.devui-popover.bias-top>.arrow{top:13px}:host.devui-popover.bias-bottom>.arrow{bottom:7px}:host.devui-popover.bias-horizontal-center>.arrow{left:50%}:host.devui-popover.bias-vertical-center>.arrow{top:50%}:host.devui-popover.top{margin-top:-7px}:host.devui-popover.bottom{margin-top:7px}:host.devui-popover.left{margin-left:-7px}:host.devui-popover.right{margin-left:7px}.devui-popover-content,.arrow{background-color:var(--devui-feedback-overlay-bg, #333333)}.devui-popover-content{padding:5px 14px}.devui-popover-icon{display:block;position:absolute;left:10px;top:7px}.devui-popover-icon svg.devui-icon{width:16px;height:16px}.devui-popover-main-content.with-icon{text-indent:20px}.devui-icon.devui-icon-success>g>path{fill:var(--devui-success, #058358)}.devui-icon.devui-icon-success>g>circle,.devui-icon.devui-icon-success>g>polygon{fill:var(--devui-light-text, #ffffff)}.devui-icon.devui-icon-warning>g>polygon{fill:var(--devui-light-text, #ffffff)}.devui-icon.devui-icon-warning>g>path{fill:var(--devui-warning, #fcc800)}.devui-icon.devui-icon-info>g>g{fill:var(--devui-info, #0a59f7)}.devui-icon.devui-icon-info>g>circle{fill:var(--devui-light-text, #ffffff)}.devui-icon.devui-icon-error>g>path{fill:var(--devui-danger, #e02128)}.devui-icon.devui-icon-error>g>circle{fill:var(--devui-light-text, #ffffff)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], animations: [directionFadeInOut] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, decorators: [{
type: Component,
args: [{ selector: 'd-popover', animations: [directionFadeInOut], template: "<div class=\"arrow\" [ngStyle]=\"{ backgroundColor: popoverStyle?.backgroundColor ? popoverStyle.backgroundColor : '' }\"></div>\r\n<div\r\n class=\"devui-popover-content\"\r\n [style.maxWidth.px]=\"popMaxWidth\"\r\n [style.width]=\"popMaxWidth ? 'fit-content' : 'auto'\"\r\n [ngStyle]=\"popoverStyle\"\r\n>\r\n <span class=\"devui-popover-icon\" *ngIf=\"popType && popType !== 'default'\">\r\n <svg\r\n *ngIf=\"popType === 'success'\"\r\n class=\"devui-icon devui-icon-success\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\r\n <path d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z\" fill-rule=\"nonzero\"></path>\r\n <polygon\r\n stroke-width=\"0.4\"\r\n fill-rule=\"nonzero\"\r\n points=\"8.16 10.48 7.32 11.32 6.48 10.48 6.48 10.48 3.6 7.68 4.44 6.84 7.28 9.68 11.52 5.44 12.36 6.28\"\r\n ></polygon>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'warning'\"\r\n class=\"devui-icon devui-icon-warning\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <polygon\r\n points=\"7.5 1.74501946 1.39184847 13.5954649 7.08947368 14.2207621 13.9973698 13.5954649 10.9383683 5.61273879 8.40084114 1.27624313\"\r\n ></polygon>\r\n <path\r\n d=\"M8.51325441,0.127397589 C8.70423071,0.228333932 8.8605922,0.383286648 8.96244623,0.57254229 L15.8714442,13.4101975 C16.1549662,13.9370117 15.9538562,14.5918482 15.4222523,14.8728158 C15.2642579,14.9563203 15.0879506,15 14.9088903,15 L1.09089441,15 C0.488410063,15 0,14.5159904 0,13.9189343 C0,13.7414873 0.0440768395,13.5667684 0.128340519,13.4101975 L7.03733844,0.57254229 C7.32086049,0.0457280838 7.98165058,-0.153569987 8.51325441,0.127397589 Z M8.87894737,11.2105263 L7.08947368,11.2105263 L7.08947368,13 L8.87894737,13 L8.87894737,11.2105263 Z M8.96842105,4.5 L7,4.5 L7.08947368,9.86842105 L8.87894737,9.86842105 L8.96842105,4.5 Z\"\r\n ></path>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'info'\"\r\n class=\"devui-icon devui-icon-info\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\"></circle>\r\n <g stroke-width=\"1\">\r\n <path\r\n d=\"M8,0 C3.6,0 0,3.6 0,8 C0,12.4 3.6,16 8,16 C12.4,16 16,12.4 16,8 C16,3.6 12.4,0 8,0 Z M9,5 L7,5 L7,3 L9,3 L9,5 Z M9,12.6 L7,12.6 L7,6.6 L9,6.6 L9,12.6 Z\"\r\n ></path>\r\n </g>\r\n </g>\r\n </svg>\r\n <svg\r\n *ngIf=\"popType === 'error'\"\r\n class=\"devui-icon devui-icon-error\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"\u6E05\u7A7A\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M5.87867966,5.17157288 C5.68341751,4.97631073 5.36683502,4.97631073 5.17157288,5.17157288 C4.99800652,5.34513923 4.97872137,5.61456363 5.11371742,5.80943177 L5.17157288,5.87867966 L7.29218611,7.99929289 L5.17157288,10.1213203 C4.97631073,10.3165825 4.97631073,10.633165 5.17157288,10.8284271 C5.34513923,11.0019935 5.61456363,11.0212786 5.80943177,10.8862826 L5.87867966,10.8284271 L7.99929289,8.70639967 L10.1213203,10.8284271 C10.3165825,11.0236893 10.633165,11.0236893 10.8284271,10.8284271 C11.0019935,10.6548608 11.0212786,10.3854364 10.8862826,10.1905682 L10.8284271,10.1213203 L8.70710678,8 L10.8284271,5.87867966 C11.0236893,5.68341751 11.0236893,5.36683502 10.8284271,5.17157288 C10.6548608,4.99800652 10.3854364,4.97872137 10.1905682,5.11371742 L10.1213203,5.17157288 L8,7.29289322 L5.87867966,5.17157288 Z\"\r\n fill-rule=\"nonzero\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </span>\r\n <ng-template [ngTemplateOutlet]=\"template || defaultTemplate\"> </ng-template>\r\n <ng-template #defaultTemplate>\r\n <div class=\"devui-popover-main-content\" [ngClass]=\"{ 'with-icon': popType && popType !== 'default' }\" [innerHTML]=\"content\"></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-popover{font-size:var(--devui-font-size, 12px);top:0;left:0;line-height:1.5;border:none;z-index:var(--devui-z-index-pop-up, 1060);color:var(--devui-feedback-overlay-text, #f0f0f0);overflow-wrap:break-word}:host.devui-popover,:host.devui-popover>.arrow{position:absolute;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover,:host.devui-popover>.devui-popover-content{border-radius:var(--devui-border-radius-feedback, 4px)}:host.devui-popover>.arrow{width:8px;height:8px;transform:rotate(45deg);display:block;z-index:-1}:host.devui-popover.top>.arrow{margin-left:-4px;bottom:-4px}:host.devui-popover.right>.arrow{left:-4px;margin-top:-4px}:host.devui-popover.bottom>.arrow{margin-left:-4px;top:-4px}:host.devui-popover.left>.arrow{right:-4px;margin-top:-4px}:host.devui-popover.bias-left>.arrow{left:16px}:host.devui-popover.bias-right>.arrow{right:16px}:host.devui-popover.bias-top>.arrow{top:13px}:host.devui-popover.bias-bottom>.arrow{bottom:7px}:host.devui-popover.bias-horizontal-center>.arrow{left:50%}:host.devui-popover.bias-vertical-center>.arrow{top:50%}:host.devui-popover.top{margin-top:-7px}:host.devui-popover.bottom{margin-top:7px}:host.devui-popover.left{margin-left:-7px}:host.devui-popover.right{margin-left:7px}.devui-popover-content,.arrow{background-color:var(--devui-feedback-overlay-bg, #333333)}.devui-popover-content{padding:5px 14px}.devui-popover-icon{display:block;position:absolute;left:10px;top:7px}.devui-popover-icon svg.devui-icon{width:16px;height:16px}.devui-popover-main-content.with-icon{text-indent:20px}.devui-icon.devui-icon-success>g>path{fill:var(--devui-success, #058358)}.devui-icon.devui-icon-success>g>circle,.devui-icon.devui-icon-success>g>polygon{fill:var(--devui-light-text, #ffffff)}.devui-icon.devui-icon-warning>g>polygon{fill:var(--devui-light-text, #ffffff)}.devui-icon.devui-icon-warning>g>path{fill:var(--devui-warning, #fcc800)}.devui-icon.devui-icon-info>g>g{fill:var(--devui-info, #0a59f7)}.devui-icon.devui-icon-info>g>circle{fill:var(--devui-light-text, #ffffff)}.devui-icon.devui-icon-error>g>path{fill:var(--devui-danger, #e02128)}.devui-icon.devui-icon-error>g>circle{fill:var(--devui-light-text, #ffffff)}\n"] }]
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.PositionService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }], propDecorators: { triggerElementRef: [{
type: Input
}], position: [{
type: Input
}], content: [{
type: Input
}], showAnimation: [{
type: Input
}], scrollElement: [{
type: Input
}], autoHideCoefficient: [{
type: Input
}], appendToBody: [{
type: Input
}], zIndex: [{
type: Input
}], popType: [{
type: Input
}], popMaxWidth: [{
type: Input
}], popoverStyle: [{
type: Input
}], hoverDelayTime: [{
type: Input
}], mouseEnterDelay: [{
type: Input
}], mouseLeaveDelay: [{
type: Input
}], display: [{
type: HostBinding,
args: ['style.display']
}], class: [{
type: HostBinding,
args: ['class']
}], state: [{
type: HostBinding,
args: ['@directionFadeInOut']
}], disabled: [{
type: HostBinding,
args: ['@.disabled']
}], onAnimationEnd: [{
type: HostListener,
args: ['@directionFadeInOut.done', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFNBQVMsRUFFVCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWE5QyxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLElBQWEsUUFBUTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEdBQUc7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNELENBQUM7SUFXRDs7T0FFRztJQUNILElBQWEsY0FBYyxDQUFDLFNBQWM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQVNELElBQWtD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QyxxQkFBcUI7Z0JBR0gsUUFBUTtzQkFBdEMsV0FBVzt1QkFBQyxZQUFZO2dCQXFFekIsY0FBYztzQkFEYixZQUFZO3VCQUFDLDBCQUEwQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnbmctZGV2dWkvcG9zaXRpb24nO1xyXG5pbXBvcnQgeyBkaXJlY3Rpb25GYWRlSW5PdXQgfSBmcm9tICduZy1kZXZ1aS91dGlscyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUG9wb3ZlclR5cGUsIFBvc2l0aW9uVHlwZSB9IGZyb20gJy4vcG9wb3Zlci50eXBlcyc7XHJcblxyXG5pbnRlcmZhY2UgUG9wb3ZlclN0eWxlIHtcclxuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1wb3BvdmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbYC4vcG9wb3Zlci5jb21wb25lbnQuc2Nzc2BdLFxyXG4gIGFuaW1hdGlvbnM6IFtkaXJlY3Rpb25GYWRlSW5PdXRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHRyaWdnZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xyXG4gIGN1cnJlbnRQb3NpdGlvbjogUG9zaXRpb25UeXBlID0gJ3RvcCc7XHJcbiAgY29ubmVjdGlvbkJpYXM6IHN0cmluZztcclxuICBfcG9zaXRpb246IFBvc2l0aW9uVHlwZSB8IFBvc2l0aW9uVHlwZVtdID0gWyd0b3AnLCAnbGVmdCcsICdib3R0b20nLCAncmlnaHQnXTtcclxuICBASW5wdXQoKSBnZXQgcG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XHJcbiAgfVxyXG4gIHNldCBwb3NpdGlvbihwb3MpIHtcclxuICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zO1xyXG4gICAgdGhpcy5jdXJyZW50UG9zaXRpb24gPSBBcnJheS5pc0FycmF5KHBvcykgPyBwb3NbMF0gOiBwb3M7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGNvbnRlbnQ6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBzaG93QW5pbWF0aW9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzY3JvbGxFbGVtZW50OiBFbGVtZW50O1xyXG4gIEBJbnB1dCgpIGF1dG9IaWRlQ29lZmZpY2llbnQgPSAwO1xyXG4gIEBJbnB1dCgpIGFwcGVuZFRvQm9keTogYm9vbGVhbjtcclxuICBASW5wdXQoKSB6SW5kZXggPSAxMDYwO1xyXG4gIEBJbnB1dCgpIHBvcFR5cGU6IFBvcG92ZXJUeXBlO1xyXG4gIEBJbnB1dCgpIHBvcE1heFdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcG9wb3ZlclN0eWxlOiBQb3BvdmVyU3R5bGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSBtb3VzZUxlYXZlRGVsYXkgdG8gcmVwbGFjZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgaG92ZXJEZWxheVRpbWUoZGVsYXlUaW1lOiBhbnkpIHtcclxuICAgIHRoaXMubW91c2VMZWF2ZURlbGF5ID0gZGVsYXlUaW1lO1xyXG4gIH1cclxuXHJcbiAgLy8g6Ziy5q2i5q+P5qyh6byg5qCH5LiN5bCP5b+D57uP6L+H55uu5qCH5YWD57Sg5bCx5Lya5pi+56S65Ye6UG9wT3ZlcueahOWGheWuue+8jOaJgOS7peWinuWKoOmAguW9k+eahOW7tui/n+OAglxyXG4gIEBJbnB1dCgpIG1vdXNlRW50ZXJEZWxheSA9IDE1MDtcclxuXHJcbiAgLy8g5Zug5Li66byg5qCH56e75Ye65LmL5ZCO5aaC5p6c56uL5Yi75raI5aSx5Lya5b6I56qB54S277yM5omA5Lul5aKe5Yqg55Wl5bCP5LiA5Lqb55qE5bu26L+f77yM5L2/5b6X5pei5LiN56qB54S25Lmf5Y+N5bqU54G15pWPXHJcbiAgQElucHV0KCkgbW91c2VMZWF2ZURlbGF5ID0gMTAwO1xyXG4gIGFuaW1hdGVTdGF0ZTogc3RyaW5nO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBnZXQgZGlzcGxheSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQgPyAnYmxvY2snIDogJ25vbmUnO1xyXG4gIH1cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGNsYXNzKCkge1xyXG4gICAgcmV0dXJuICdkZXZ1aS1wb3BvdmVyICcgKyB0aGlzLmN1cnJlbnRQb3NpdGlvbiArICcgJyArIHRoaXMuY29ubmVjdGlvbkJpYXMgKyAnIGRldnVpLXBvcG92ZXItJyArIHRoaXMucG9wVHlwZTtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdAZGlyZWN0aW9uRmFkZUluT3V0JykgZ2V0IHN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0FuaW1hdGlvbiAmJiB0aGlzLmFuaW1hdGVTdGF0ZTtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdALmRpc2FibGVkJykgZ2V0IGRpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnNob3dBbmltYXRpb247XHJcbiAgfVxyXG4gIGdldCB0ZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiA/IHRoaXMuY29udGVudCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBkb2N1bWVudDogRG9jdW1lbnQ7XHJcbiAgaGFzU2V0U2Nyb2xsRWxlbWVudCA9IGZhbHNlO1xyXG4gIHN1YnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBTQ1JPTExfUkVGUkVTSF9JTlRFUlZBTCA9IDEwMDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHBvc2l0aW9uU2VydmljZTogUG9zaXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmRvY3VtZW50ID0gdGhpcy5kb2M7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnpJbmRleCA9IHRoaXMuekluZGV4O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XHJcbiAgICAgIGlmICh0aGlzLnNjcm9sbEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmhhc1NldFNjcm9sbEVsZW1lbnQgPSB0aGlzLmF1dG9IaWRlQ29lZmZpY2llbnQgPj0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNjcm9sbEVsZW1lbnQgPSB0aGlzLnBvc2l0aW9uU2VydmljZS5nZXRTY3JvbGxQYXJlbnQodGhpcy50cmlnZ2VyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN1YnMuYWRkKFxyXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnNjcm9sbEVsZW1lbnQgfHwgd2luZG93LCAnc2Nyb2xsJylcclxuICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLlNDUk9MTF9SRUZSRVNIX0lOVEVSVkFMKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnN1YnMuYWRkKFxyXG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuU0NST0xMX1JFRlJFU0hfSU5URVJWQUwpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcy5jb250ZW50KSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvdygpIHt9XHJcblxyXG4gIGhpZGUoKSB7XHJcbiAgICB0aGlzLmFuaW1hdGVTdGF0ZSA9ICd2b2lkJztcclxuICB9XHJcblxyXG4gIC8vIHdpbGwgYmUgb3ZlcndyaXRlIGJ5IGRpcmVjdGl2ZVxyXG4gIG9uSGlkZGVuKCkge31cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignQGRpcmVjdGlvbkZhZGVJbk91dC5kb25lJywgWyckZXZlbnQnXSlcclxuICBvbkFuaW1hdGlvbkVuZChldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2b2lkJykge1xyXG4gICAgICB0aGlzLm9uSGlkZGVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnMpIHtcclxuICAgICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQb3NpdGlvbigpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwgLTk5OTk5cHgpJyk7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5wb3NpdGlvblNlcnZpY2UucG9zaXRpb25FbGVtZW50cyhcclxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgdGhpcy5wb3NpdGlvbixcclxuICAgICAgdGhpcy5hcHBlbmRUb0JvZHlcclxuICAgICk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UG9zaXRpb24gPSByZWN0LnBsYWNlbWVudFByaW1hcnk7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrQm91bmRzKHJlY3QpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYW5pbWF0ZVN0YXRlID0gdGhpcy5jdXJyZW50UG9zaXRpb247XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvbkJpYXMgPSBgYmlhcy0ke3JlY3QucGxhY2VtZW50U2Vjb25kYXJ5fWA7XHJcbiAgICAgIGlmIChyZWN0LnBsYWNlbWVudFNlY29uZGFyeSA9PT0gJ2NlbnRlcicpIHtcclxuICAgICAgICBpZiAocmVjdC5wbGFjZW1lbnRQcmltYXJ5ID09PSAnbGVmdCcgfHwgcmVjdC5wbGFjZW1lbnRQcmltYXJ5ID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25CaWFzID0gJ2JpYXMtdmVydGljYWwtY2VudGVyJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uQmlhcyA9ICdiaWFzLWhvcml6b250YWwtY2VudGVyJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBgJHtyZWN0LmxlZnR9cHhgKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3JlY3QudG9wfXB4YCk7XHJcbiAgICAgIC8vIOenu+mZpOagt+W8j1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmlzaWJpbGl0eScpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrQm91bmRzKHJlY3Q6IERPTVJlY3QpOiBib29sZWFuIHtcclxuICAgIC8vIOaJi+WKqOiuvue9ruS6hnNjcm9sbEVsZW1lbnTmiY3miafooYzoh6rliqjpmpDol4/pgLvovpHvvIzkvY3nva7kv6Hmga/lj4rliKTmlq3mjpLliJfpobrluo/pg73pgbXlvqrkuIrlj7PkuIvlt6ZcclxuICAgIGlmICh0aGlzLmhhc1NldFNjcm9sbEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgZG9jRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ID8gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiB0aGlzLmRvY3VtZW50LmJvZHk7XHJcbiAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSBkb2NFbGVtZW50O1xyXG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5zY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBjb25zdCByZWN0Rml4ID0ge1xyXG4gICAgICAgIC4uLnJlY3QsXHJcbiAgICAgICAgdG9wOiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0ICogdGhpcy5hdXRvSGlkZUNvZWZmaWNpZW50LFxyXG4gICAgICAgIHJpZ2h0OiByZWN0LnJpZ2h0IC0gcmVjdC53aWR0aCAqIHRoaXMuYXV0b0hpZGVDb2VmZmljaWVudCxcclxuICAgICAgICBib3R0b206IHJlY3QuYm90dG9tIC0gcmVjdC5oZWlnaHQgKiB0aGlzLmF1dG9IaWRlQ29lZmZpY2llbnQsXHJcbiAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAqIHRoaXMuYXV0b0hpZGVDb2VmZmljaWVudCxcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcG9zaXRpb25GaXggPSB7XHJcbiAgICAgICAgdG9wOiBbcmVjdEZpeC5oZWlnaHQsIDAsIDAsIDBdLFxyXG4gICAgICAgIHJpZ2h0OiBbMCwgLTEgKiByZWN0Rml4LndpZHRoLCAwLCAwXSxcclxuICAgICAgICBib3R0b206IFswLCAwLCAtMSAqIHJlY3RGaXguaGVpZ2h0LCAwXSxcclxuICAgICAgICBsZWZ0OiBbMCwgMCwgMCwgcmVjdEZpeC53aWR0aF0sXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uS2V5d29yZCA9IHRoaXMuY3VycmVudFBvc2l0aW9uLnNwbGl0KCctJylbMF07XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uRml4QXJyID0gcG9zaXRpb25GaXhbcG9zaXRpb25LZXl3b3JkXSA/PyBbMCwgMCwgMCwgMF07XHJcbiAgICAgIGNvbnN0IGJvdW5kcyA9IFtcclxuICAgICAgICBNYXRoLnJvdW5kKHJlY3RGaXgudG9wICsgcG9zaXRpb25GaXhBcnJbMF0pID49IE1hdGgucm91bmQoY29udGFpbmVyUmVjdC50b3AgKyBzY3JvbGxUb3ApLFxyXG4gICAgICAgIE1hdGgucm91bmQocmVjdEZpeC5yaWdodCArIHBvc2l0aW9uRml4QXJyWzFdKSA8PSBNYXRoLnJvdW5kKGNvbnRhaW5lclJlY3QubGVmdCArIGNvbnRhaW5lclJlY3Qud2lkdGggKyBzY3JvbGxMZWZ0KSxcclxuICAgICAgICBNYXRoLnJvdW5kKHJlY3RGaXguYm90dG9tICsgcG9zaXRpb25GaXhBcnJbMl0pIDw9IE1hdGgucm91bmQoY29udGFpbmVyUmVjdC50b3AgKyBjb250YWluZXJSZWN0LmhlaWdodCArIHNjcm9sbFRvcCksXHJcbiAgICAgICAgTWF0aC5yb3VuZChyZWN0Rml4LmxlZnQgKyBwb3NpdGlvbkZpeEFyclszXSkgPj0gTWF0aC5yb3VuZChjb250YWluZXJSZWN0LmxlZnQgKyBzY3JvbGxMZWZ0KSxcclxuICAgICAgXTtcclxuICAgICAgaWYgKGJvdW5kcy5pbmNsdWRlcyhmYWxzZSkpIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGVTdGF0ZSA9ICd2b2lkJztcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uQW5kRGV0ZWN0Q2hhbmdlKCkge1xyXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYXJyb3dcIiBbbmdTdHlsZV09XCJ7IGJhY2tncm91bmRDb2xvcjogcG9wb3ZlclN0eWxlPy5iYWNrZ3JvdW5kQ29sb3IgPyBwb3BvdmVyU3R5bGUuYmFja2dyb3VuZENvbG9yIDogJycgfVwiPjwvZGl2PlxyXG48ZGl2XHJcbiAgY2xhc3M9XCJkZXZ1aS1wb3BvdmVyLWNvbnRlbnRcIlxyXG4gIFtzdHlsZS5tYXhXaWR0aC5weF09XCJwb3BNYXhXaWR0aFwiXHJcbiAgW3N0eWxlLndpZHRoXT1cInBvcE1heFdpZHRoID8gJ2ZpdC1jb250ZW50JyA6ICdhdXRvJ1wiXHJcbiAgW25nU3R5bGVdPVwicG9wb3ZlclN0eWxlXCJcclxuPlxyXG4gIDxzcGFuIGNsYXNzPVwiZGV2dWktcG9wb3Zlci1pY29uXCIgKm5nSWY9XCJwb3BUeXBlICYmIHBvcFR5cGUgIT09ICdkZWZhdWx0J1wiPlxyXG4gICAgPHN2Z1xyXG4gICAgICAqbmdJZj1cInBvcFR5cGUgPT09ICdzdWNjZXNzJ1wiXHJcbiAgICAgIGNsYXNzPVwiZGV2dWktaWNvbiBkZXZ1aS1pY29uLXN1Y2Nlc3NcIlxyXG4gICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgdmVyc2lvbj1cIjEuMVwiXHJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgPlxyXG4gICAgICA8ZyBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI4XCIgcj1cIjdcIj48L2NpcmNsZT5cclxuICAgICAgICA8cGF0aCBkPVwiTTgsMCBDMy42LDAgMCwzLjYgMCw4IEMwLDEyLjQgMy42LDE2IDgsMTYgQzEyLjQsMTYgMTYsMTIuNCAxNiw4IEMxNiwzLjYgMTIuNCwwIDgsMCBaXCIgZmlsbC1ydWxlPVwibm9uemVyb1wiPjwvcGF0aD5cclxuICAgICAgICA8cG9seWdvblxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMC40XCJcclxuICAgICAgICAgIGZpbGwtcnVsZT1cIm5vbnplcm9cIlxyXG4gICAgICAgICAgcG9pbnRzPVwiOC4xNiAxMC40OCA3LjMyIDExLjMyIDYuNDggMTAuNDggNi40OCAxMC40OCAzLjYgNy42OCA0LjQ0IDYuODQgNy4yOCA5LjY4IDExLjUyIDUuNDQgMTIuMzYgNi4yOFwiXHJcbiAgICAgICAgPjwvcG9seWdvbj5cclxuICAgICAgPC9nPlxyXG4gICAgPC9zdmc+XHJcbiAgICA8c3ZnXHJcbiAgICAgICpuZ0lmPVwicG9wVHlwZSA9PT0gJ3dhcm5pbmcnXCJcclxuICAgICAgY2xhc3M9XCJkZXZ1aS1pY29uIGRldnVpLWljb24td2FybmluZ1wiXHJcbiAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICB2ZXJzaW9uPVwiMS4xXCJcclxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHJcbiAgICA+XHJcbiAgICAgIDxnIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgPHBvbHlnb25cclxuICAgICAgICAgIHBvaW50cz1cIjcuNSAxLjc0NTAxOTQ2IDEuMzkxODQ4NDcgMTMuNTk1NDY0OSA3LjA4OTQ3MzY4IDE0LjIyMDc2MjEgMTMuOTk3MzY5OCAxMy41OTU0NjQ5IDEwLjkzODM2ODMgNS42MTI3Mzg3OSA4LjQwMDg0MTE0IDEuMjc2MjQzMTNcIlxyXG4gICAgICAgID48L3BvbHlnb24+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNOC41MTMyNTQ0MSwwLjEyNzM5NzU4OSBDOC43MDQyMzA3MSwwLjIyODMzMzkzMiA4Ljg2MDU5MjIsMC4zODMyODY2NDggOC45NjI0NDYyMywwLjU3MjU0MjI5IEwxNS44NzE0NDQyLDEzLjQxMDE5NzUgQzE2LjE1NDk2NjIsMTMuOTM3MDExNyAxNS