ng-devui
Version:
DevUI components based on Angular
257 lines • 64.8 kB
JavaScript
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
import { isEqual } from 'lodash-es';
import { Subject } from 'rxjs';
import { throttleTime } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "ng-devui/utils";
export class ToastComponent {
constructor() {
this.appendUpperLimit = 0;
this.lifeMode = 'global';
this.closeEvent = new EventEmitter();
this.valueChange = new EventEmitter();
this.zIndex = 1060;
this.timeoutArr = [];
this.clickSub = new Subject();
}
set value(val) {
if (val?.length) {
this._value = this.appendUpperLimit > 0 ? [...val, ...this._value].slice(0, this.appendUpperLimit) : val;
this.rest = this._value;
if (this.container) {
this.handleValueChange();
}
}
else {
this._value = [];
this.rest = [];
this.onHidden();
}
}
get value() {
return this._value;
}
get _life() {
if (this.life) {
return this.life;
}
else {
if (this.value && this.value.length > 0) {
return this.severityDelay(this.value[0]);
}
else {
return 5000;
}
}
}
ngOnInit() {
this.subItem = this.clickSub
.pipe(throttleTime(250, undefined, { leading: true, trailing: false }))
.subscribe((obj) => this.remove(obj.index, obj.dom));
}
ngAfterViewInit() {
this.container = this.containerViewChild.nativeElement;
}
ngOnDestroy() {
if (!this.sticky) {
if (this.lifeMode === 'single') {
this.timeoutArr.forEach((item) => item && clearTimeout(item));
}
else {
clearTimeout(this.timeout);
}
}
if (this.subItem) {
this.subItem.unsubscribe();
}
}
severityDelay(item) {
switch (item.severity) {
case 'warn':
case 'error':
return 10000;
default:
// common | success | info | default
return 5000;
}
}
show() {
if (!this.container) {
this.container = this.containerViewChild.nativeElement;
}
this.handleValueChange();
}
// Will overwrite this method in toast service
close() { }
// Will overwrite this method in toast service
onHidden() { }
handleValueChange() {
this.zIndex++;
const doms = this.container.children;
setTimeout(() => this._value.forEach((v, i) => v && doms[i]?.classList.add('slide-in')));
if (!this.sticky) {
if (this.timeout) {
clearTimeout(this.timeout);
}
if (this.timeoutArr.length > 0) {
this.timeoutArr.forEach((item) => item && clearTimeout(item));
this.timeoutArr = [];
}
this.timestamp = new Date().getTime();
if (this.lifeMode === 'single') {
setTimeout(() => {
this._value.forEach((v, i) => {
this.timeoutArr[i] = setTimeout(() => this.singleModeRemove(v, doms[i]), v.life || this.severityDelay(v));
});
});
}
else {
this.timeout = setTimeout(() => {
this.removeAll();
}, this._life);
}
}
}
singleModeRemove(msg, msgItem) {
let dom = msgItem;
// 当点击关闭某个后,重新渲染导致原来赋予的dom失效,需要重新获取
if (!msgItem) {
const index = this._value.findIndex((item) => item === msg);
const doms = this.container.children;
dom = doms[index];
}
if (dom) {
dom.classList.remove('slide-in');
}
setTimeout(() => {
dom.style.display = 'none';
this.closeEvent.emit({ message: msg });
if (this.container.querySelectorAll('.slide-in').length === 0) {
this.value = [];
this.valueChange.emit(this.value);
this.onHidden();
}
else {
this.rest = this.rest.filter((item) => item !== msg);
this.valueChange.emit(this.rest);
}
}, 300);
}
interrupt(index, msgItem) {
// 避免正在动画中的toast触发方法
if (msgItem.className.indexOf('slide-in') === -1) {
return;
}
if (this.lifeMode === 'single') {
if (this.timeoutArr[index]) {
clearTimeout(this.timeoutArr[index]);
}
}
else {
this.resetDelay(() => {
const otherToasts = this._value.slice(0);
otherToasts.splice(index, 1, undefined);
const doms = this.container.children;
otherToasts.forEach((v, i) => v && doms[i]?.classList.remove('slide-in'));
});
}
}
resetDelay(fn) {
if (!this.sticky && this.timeout) {
clearTimeout(this.timeout);
const remainTime = this._life - (new Date().getTime() - this.timestamp);
this.timeout = setTimeout(() => fn(), remainTime);
}
}
remove(index, msgItem) {
if (this.lifeMode === 'single' && this.timeoutArr[index]) {
clearTimeout(this.timeoutArr[index]);
this.timeoutArr.splice(index, 1);
}
msgItem.classList.remove('slide-in');
setTimeout(() => {
this.closeEvent.emit({ message: this.value[index] });
this._value = this.value.filter((val, i) => i !== index);
this.valueChange.emit(this._value);
if (this.container.querySelectorAll('.slide-in').length === 0) {
this.onHidden();
}
if (this.lifeMode === 'global') {
this.removeReset();
}
}, 300);
}
removeAll() {
if (this.value && this.value.length) {
const doms = this.container.children;
this._value.forEach((v, i) => v && doms[i]?.classList.remove('slide-in'));
setTimeout(() => {
this.value.forEach((msg, index) => this.closeEvent.emit({ message: this.value[index] }));
this.value = [];
this.valueChange.emit(this.value);
}, 300);
}
}
removeThrottle(index, msgItem) {
this.clickSub.next({ index: index, dom: msgItem });
}
removeIndexThrottle(index) {
const doms = this.container.children;
if (index < doms.length) {
this.clickSub.next({ index: index, dom: doms[index] });
}
}
removeMsgThrottle(msg) {
const doms = this.container.children;
const index = this._value.findIndex((item) => {
return isEqual(item, msg);
});
if (index < doms.length && index > -1) {
this.clickSub.next({ index: index, dom: doms[index] });
}
}
removeReset(index, msgItem, msg) {
// 避免点击关闭但正在动画中或自动消失正在动画中的toast触发重置方法
const removed = this._value.findIndex((item) => item === msg) === -1;
if (removed || msgItem.className.indexOf('slide-in') === -1) {
return;
}
if (this.lifeMode === 'single') {
const msgLife = msg.life || this.severityDelay(msg);
const remainTime = msgLife - (new Date().getTime() - this.timestamp);
this.timeoutArr[index] = setTimeout(() => this.singleModeRemove(msg, msgItem), remainTime);
}
else {
this.resetDelay(() => this.removeAll());
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ToastComponent, selector: "d-toast", inputs: { value: "value", sticky: "sticky", life: "life", style: "style", styleClass: "styleClass", appendUpperLimit: "appendUpperLimit", lifeMode: "lifeMode" }, outputs: { closeEvent: "closeEvent", valueChange: "valueChange" }, viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true, static: true }], ngImport: i0, template: "<div #container [ngClass]=\"'devui-toast'\" [style.zIndex]=\"zIndex\" [ngStyle]=\"style\" [class]=\"styleClass\">\n <div\n #msgItem\n *ngFor=\"let msg of value; let i = index\"\n class=\"devui-toast-item-container\"\n aria-live=\"polite\"\n [ngClass]=\"{\n 'devui-toast-message-info': msg.severity == 'info',\n 'devui-toast-message-warn': msg.severity == 'warn',\n 'devui-toast-message-error': msg.severity == 'error',\n 'devui-toast-message-success': msg.severity == 'success',\n 'devui-toast-message-common': msg.severity == 'common'\n }\"\n (mouseenter)=\"interrupt(i, msgItem)\"\n (mouseleave)=\"removeReset(i, msgItem, msg)\"\n >\n <div class=\"devui-toast-item\" [ngSwitch]=\"msg.severity\">\n <div *ngIf=\"!(!msg.summary && life)\" class=\"devui-toast-icon-close\" (click)=\"removeThrottle(i, msgItem)\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 14 14\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <polygon\n class=\"devui-toast-close-icon\"\n points=\"8.07106781 6.65685425 10.8994949 3.82842712 12.3137085 5.24264069 9.48528137 8.07106781 12.3137085 10.8994949 10.8994949 12.3137085 8.07106781 9.48528137 5.24264069 12.3137085 3.82842712 10.8994949 6.65685425 8.07106781 3.82842712 5.24264069 5.24264069 3.82842712\"\n ></polygon>\n </svg>\n </div>\n <span\n class=\"devui-toast-image\"\n [ngClass]=\"{\n 'devui-toast-image-info': msg.severity === 'info',\n 'devui-toast-image-warning': msg.severity === 'warn',\n 'devui-toast-image-error': msg.severity === 'error',\n 'devui-toast-image-success': msg.severity === 'success'\n }\"\n *ngIf=\"msg.severity !== 'common'\"\n >\n <ng-container *ngSwitchCase=\"'info'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g id=\"info\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path class=\"devui-toast-image-info-path\" d=\"M7,13 L7,6 L9,6 L9,13 L7,13 Z M7,5 L7,3 L9,3 L9,5 L7,5 Z\" id=\"info\"></path>\n </g>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'warn'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path\n class=\"devui-icon-warning-outer\"\n d=\"M8.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 C8.70423071,0.228333932 8.8605922,0.383286648 8.96244623,0.57254229 Z\"\n ></path>\n <path\n class=\"devui-icon-warning-inner\"\n stroke-width=\"0.3\"\n fill-rule=\"nonzero\"\n d=\"M8.87894737,13 L7.08947368,13 L7.08947368,11.2105263 L8.87894737,11.2105263 L8.87894737,13 Z M8.62102372,9.86842105 L7.32800539,9.86842105 L7,4.5 L8.96842105,4.5 L8.62102372,9.86842105 Z\"\n ></path>\n </g>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'error'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"8\"></circle>\n <path\n class=\"devui-toast-image-error-path\"\n d=\"M11.5355339,4.46446609 C11.9260582,4.85499039 11.9260582,5.48815536 11.5355339,5.87867966 L9.41421356,8 L11.5355339,10.1213203 C11.9260582,10.5118446 11.9260582,11.1450096 11.5355339,11.5355339 C11.1450096,11.9260582 10.5118446,11.9260582 10.1213203,11.5355339 L8,9.41421356 L5.87867966,11.5355339 C5.48815536,11.9260582 4.85499039,11.9260582 4.46446609,11.5355339 C4.0739418,11.1450096 4.0739418,10.5118446 4.46446609,10.1213203 L6.58578644,8 L4.46446609,5.87867966 C4.0739418,5.48815536 4.0739418,4.85499039 4.46446609,4.46446609 C4.85499039,4.0739418 5.48815536,4.0739418 5.87867966,4.46446609 L8,6.58578644 L10.1213203,4.46446609 C10.5118446,4.0739418 11.1450096,4.0739418 11.5355339,4.46446609 Z\"\n ></path>\n </g>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'success'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <defs>\n <polygon\n id=\"path-s\"\n points=\"6.53553391 9.77817459 12.1923882 4.12132034 13.6066017 5.53553391 6.53553391 12.6066017 3 9.07106781 4.41421356 7.65685425 6.53553391 9.77817459\"\n ></polygon>\n </defs>\n <g id=\"correct\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <mask id=\"mask-2\" fill=\"white\">\n <use xlink:href=\"#path-s\"></use>\n </mask>\n <use id=\"Mask\" class=\"devui-toast-image-success-path\" xlink:href=\"#path-s\"></use>\n </g>\n </svg>\n </ng-container>\n </span>\n <div class=\"devui-toast-message\">\n <span *ngIf=\"!!msg.summary\" class=\"devui-toast-title\">{{ msg.summary }}</span>\n <ng-template\n *ngIf=\"msg.content; else detailTemplate\"\n [ngTemplateOutlet]=\"msg.content | dIsTemplatePipe : plainText\"\n [ngTemplateOutletContext]=\"{ msg: msg }\"\n ></ng-template>\n <ng-template #plainText>\n <p [style.marginTop]=\"msg.summary ? '4px' : '0'\">{{ msg.content }}</p>\n </ng-template>\n <ng-template #detailTemplate>\n <p *ngIf=\"msg.detail\" [style.marginTop]=\"msg.summary ? '4px' : '0'\" [innerHTML]=\"msg.detail | safe : 'html'\"></p>\n </ng-template>\n </div>\n </div>\n </div>\n</div>\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::ng-deep a:link,:host::ng-deep a:visited{color:var(--devui-link-light, #6b9bfa)}:host::ng-deep a:hover,:host::ng-deep a:active{color:var(--devui-link-light-active, #9dbdfc)}.devui-toast{position:fixed;top:50px;right:20px;width:20em;word-break:normal;word-wrap:break-word}.devui-toast-item-container{position:relative;left:150%;margin:0 0 8px;opacity:.95;filter:alpha(opacity=95);box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16));border-radius:var(--devui-border-radius-feedback, 4px);color:var(--devui-feedback-overlay-text, #f0f0f0);transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1));background-color:var(--devui-feedback-overlay-bg, #333333)}.devui-toast-item-container.slide-in{left:0}.devui-toast-item{position:relative;display:block;padding:12px 16px}.devui-toast-item p{padding:0;margin:0}.devui-toast-icon-close{position:absolute;top:7px;right:10px;cursor:pointer}.devui-toast-icon-close .devui-toast-close-icon{fill:var(--devui-light-text, #ffffff)}.devui-toast-title{font-size:var(--devui-font-size-lg, 14px);padding:0 0 4px;display:block;font-weight:700}.devui-toast-image{position:absolute;display:inline-block;width:16px;height:16px;border-radius:50%;left:16px;top:14px;padding:0}.devui-toast-image.devui-toast-image-warning path.devui-icon-warning-outer{fill:var(--devui-warning-line, #f4840c)}.devui-toast-image.devui-toast-image-warning path.devui-icon-warning-inner{fill:var(--devui-light-text, #ffffff);stroke:var(--devui-light-text, #ffffff)}.devui-toast-image.devui-toast-image-info{background-color:var(--devui-info, #0a59f7)}.devui-toast-image.devui-toast-image-error{background-color:var(--devui-danger, #e02128)}.devui-toast-image.devui-toast-image-success{background-color:var(--devui-success, #058358)}.devui-toast-image .devui-toast-image-info-path,.devui-toast-image .devui-toast-image-error-path,.devui-toast-image .devui-toast-image-success-path{fill:var(--devui-light-text, #ffffff)}.devui-toast-message{margin-left:20px;word-break:break-all;word-wrap:break-word}.devui-toast-message p{padding:0 8px 0 4px}.devui-toast-message span.devui-toast-title+p{padding:0}.devui-toast-message-common .devui-toast-message{margin-left:0}.devui-toast-message p{font-size:var(--devui-font-size, 12px);margin-top:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i2.IsTemplatePipe, name: "dIsTemplatePipe" }, { kind: "pipe", type: i2.SafePipe, name: "safe" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToastComponent, decorators: [{
type: Component,
args: [{ selector: 'd-toast', preserveWhitespaces: false, template: "<div #container [ngClass]=\"'devui-toast'\" [style.zIndex]=\"zIndex\" [ngStyle]=\"style\" [class]=\"styleClass\">\n <div\n #msgItem\n *ngFor=\"let msg of value; let i = index\"\n class=\"devui-toast-item-container\"\n aria-live=\"polite\"\n [ngClass]=\"{\n 'devui-toast-message-info': msg.severity == 'info',\n 'devui-toast-message-warn': msg.severity == 'warn',\n 'devui-toast-message-error': msg.severity == 'error',\n 'devui-toast-message-success': msg.severity == 'success',\n 'devui-toast-message-common': msg.severity == 'common'\n }\"\n (mouseenter)=\"interrupt(i, msgItem)\"\n (mouseleave)=\"removeReset(i, msgItem, msg)\"\n >\n <div class=\"devui-toast-item\" [ngSwitch]=\"msg.severity\">\n <div *ngIf=\"!(!msg.summary && life)\" class=\"devui-toast-icon-close\" (click)=\"removeThrottle(i, msgItem)\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 14 14\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <polygon\n class=\"devui-toast-close-icon\"\n points=\"8.07106781 6.65685425 10.8994949 3.82842712 12.3137085 5.24264069 9.48528137 8.07106781 12.3137085 10.8994949 10.8994949 12.3137085 8.07106781 9.48528137 5.24264069 12.3137085 3.82842712 10.8994949 6.65685425 8.07106781 3.82842712 5.24264069 5.24264069 3.82842712\"\n ></polygon>\n </svg>\n </div>\n <span\n class=\"devui-toast-image\"\n [ngClass]=\"{\n 'devui-toast-image-info': msg.severity === 'info',\n 'devui-toast-image-warning': msg.severity === 'warn',\n 'devui-toast-image-error': msg.severity === 'error',\n 'devui-toast-image-success': msg.severity === 'success'\n }\"\n *ngIf=\"msg.severity !== 'common'\"\n >\n <ng-container *ngSwitchCase=\"'info'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g id=\"info\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path class=\"devui-toast-image-info-path\" d=\"M7,13 L7,6 L9,6 L9,13 L7,13 Z M7,5 L7,3 L9,3 L9,5 L7,5 Z\" id=\"info\"></path>\n </g>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'warn'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path\n class=\"devui-icon-warning-outer\"\n d=\"M8.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 C8.70423071,0.228333932 8.8605922,0.383286648 8.96244623,0.57254229 Z\"\n ></path>\n <path\n class=\"devui-icon-warning-inner\"\n stroke-width=\"0.3\"\n fill-rule=\"nonzero\"\n d=\"M8.87894737,13 L7.08947368,13 L7.08947368,11.2105263 L8.87894737,11.2105263 L8.87894737,13 Z M8.62102372,9.86842105 L7.32800539,9.86842105 L7,4.5 L8.96842105,4.5 L8.62102372,9.86842105 Z\"\n ></path>\n </g>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'error'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"8\"></circle>\n <path\n class=\"devui-toast-image-error-path\"\n d=\"M11.5355339,4.46446609 C11.9260582,4.85499039 11.9260582,5.48815536 11.5355339,5.87867966 L9.41421356,8 L11.5355339,10.1213203 C11.9260582,10.5118446 11.9260582,11.1450096 11.5355339,11.5355339 C11.1450096,11.9260582 10.5118446,11.9260582 10.1213203,11.5355339 L8,9.41421356 L5.87867966,11.5355339 C5.48815536,11.9260582 4.85499039,11.9260582 4.46446609,11.5355339 C4.0739418,11.1450096 4.0739418,10.5118446 4.46446609,10.1213203 L6.58578644,8 L4.46446609,5.87867966 C4.0739418,5.48815536 4.0739418,4.85499039 4.46446609,4.46446609 C4.85499039,4.0739418 5.48815536,4.0739418 5.87867966,4.46446609 L8,6.58578644 L10.1213203,4.46446609 C10.5118446,4.0739418 11.1450096,4.0739418 11.5355339,4.46446609 Z\"\n ></path>\n </g>\n </svg>\n </ng-container>\n <ng-container *ngSwitchCase=\"'success'\">\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 16 16\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <defs>\n <polygon\n id=\"path-s\"\n points=\"6.53553391 9.77817459 12.1923882 4.12132034 13.6066017 5.53553391 6.53553391 12.6066017 3 9.07106781 4.41421356 7.65685425 6.53553391 9.77817459\"\n ></polygon>\n </defs>\n <g id=\"correct\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <mask id=\"mask-2\" fill=\"white\">\n <use xlink:href=\"#path-s\"></use>\n </mask>\n <use id=\"Mask\" class=\"devui-toast-image-success-path\" xlink:href=\"#path-s\"></use>\n </g>\n </svg>\n </ng-container>\n </span>\n <div class=\"devui-toast-message\">\n <span *ngIf=\"!!msg.summary\" class=\"devui-toast-title\">{{ msg.summary }}</span>\n <ng-template\n *ngIf=\"msg.content; else detailTemplate\"\n [ngTemplateOutlet]=\"msg.content | dIsTemplatePipe : plainText\"\n [ngTemplateOutletContext]=\"{ msg: msg }\"\n ></ng-template>\n <ng-template #plainText>\n <p [style.marginTop]=\"msg.summary ? '4px' : '0'\">{{ msg.content }}</p>\n </ng-template>\n <ng-template #detailTemplate>\n <p *ngIf=\"msg.detail\" [style.marginTop]=\"msg.summary ? '4px' : '0'\" [innerHTML]=\"msg.detail | safe : 'html'\"></p>\n </ng-template>\n </div>\n </div>\n </div>\n</div>\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::ng-deep a:link,:host::ng-deep a:visited{color:var(--devui-link-light, #6b9bfa)}:host::ng-deep a:hover,:host::ng-deep a:active{color:var(--devui-link-light-active, #9dbdfc)}.devui-toast{position:fixed;top:50px;right:20px;width:20em;word-break:normal;word-wrap:break-word}.devui-toast-item-container{position:relative;left:150%;margin:0 0 8px;opacity:.95;filter:alpha(opacity=95);box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16));border-radius:var(--devui-border-radius-feedback, 4px);color:var(--devui-feedback-overlay-text, #f0f0f0);transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1));background-color:var(--devui-feedback-overlay-bg, #333333)}.devui-toast-item-container.slide-in{left:0}.devui-toast-item{position:relative;display:block;padding:12px 16px}.devui-toast-item p{padding:0;margin:0}.devui-toast-icon-close{position:absolute;top:7px;right:10px;cursor:pointer}.devui-toast-icon-close .devui-toast-close-icon{fill:var(--devui-light-text, #ffffff)}.devui-toast-title{font-size:var(--devui-font-size-lg, 14px);padding:0 0 4px;display:block;font-weight:700}.devui-toast-image{position:absolute;display:inline-block;width:16px;height:16px;border-radius:50%;left:16px;top:14px;padding:0}.devui-toast-image.devui-toast-image-warning path.devui-icon-warning-outer{fill:var(--devui-warning-line, #f4840c)}.devui-toast-image.devui-toast-image-warning path.devui-icon-warning-inner{fill:var(--devui-light-text, #ffffff);stroke:var(--devui-light-text, #ffffff)}.devui-toast-image.devui-toast-image-info{background-color:var(--devui-info, #0a59f7)}.devui-toast-image.devui-toast-image-error{background-color:var(--devui-danger, #e02128)}.devui-toast-image.devui-toast-image-success{background-color:var(--devui-success, #058358)}.devui-toast-image .devui-toast-image-info-path,.devui-toast-image .devui-toast-image-error-path,.devui-toast-image .devui-toast-image-success-path{fill:var(--devui-light-text, #ffffff)}.devui-toast-message{margin-left:20px;word-break:break-all;word-wrap:break-word}.devui-toast-message p{padding:0 8px 0 4px}.devui-toast-message span.devui-toast-title+p{padding:0}.devui-toast-message-common .devui-toast-message{margin-left:0}.devui-toast-message p{font-size:var(--devui-font-size, 12px);margin-top:4px}\n"] }]
}], propDecorators: { containerViewChild: [{
type: ViewChild,
args: ['container', { static: true }]
}], value: [{
type: Input
}], sticky: [{
type: Input
}], life: [{
type: Input
}], style: [{
type: Input
}], styleClass: [{
type: Input
}], appendUpperLimit: [{
type: Input
}], lifeMode: [{
type: Input
}], closeEvent: [{
type: Output
}], valueChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvdG9hc3QvdG9hc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvdG9hc3QvdG9hc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBaUI5QyxNQUFNLE9BQU8sY0FBYztJQU4zQjtRQThCVyxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDckIsYUFBUSxHQUF3QixRQUFRLENBQUM7UUFDeEMsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3hELGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7UUFJL0UsV0FBTSxHQUFHLElBQUksQ0FBQztRQUdkLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7S0FnTjFCO0lBbFBDLElBQWEsS0FBSyxDQUFDLEdBQW1CO1FBQ3BDLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFD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Q0FBQyxRQUFRLENBQUM7Z0JBQ3JDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM1RSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQVk7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWEsRUFBRSxPQUFZO1FBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pELFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtB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QTNELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDM0IsS0FBSztzQkFBakIsS0FBSztnQkFrQkcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xyXG4gIHNldmVyaXR5Pzogc3RyaW5nO1xyXG4gIHN1bW1hcnk/OiBzdHJpbmc7XHJcbiAgZGV0YWlsPzogc3RyaW5nO1xyXG4gIGNvbnRlbnQ/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIGxpZmU/OiBudW1iZXI7XHJcbiAgaWQ/OiBhbnk7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC10b2FzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvYXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90b2FzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9hc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyVmlld0NoaWxkOiBFbGVtZW50UmVmO1xyXG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWw6IEFycmF5PE1lc3NhZ2U+KSB7XHJcbiAgICBpZiAodmFsPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmFwcGVuZFVwcGVyTGltaXQgPiAwID8gWy4uLnZhbCwgLi4udGhpcy5fdmFsdWVdLnNsaWNlKDAsIHRoaXMuYXBwZW5kVXBwZXJMaW1pdCkgOiB2YWw7XHJcbiAgICAgIHRoaXMucmVzdCA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gW107XHJcbiAgICAgIHRoaXMucmVzdCA9IFtdO1xyXG4gICAgICB0aGlzLm9uSGlkZGVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsdWUoKTogQXJyYXk8TWVzc2FnZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc3RpY2t5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxpZmU6IG51bWJlcjtcclxuICBASW5wdXQoKSBzdHlsZTogb2JqZWN0O1xyXG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBhcHBlbmRVcHBlckxpbWl0ID0gMDtcclxuICBASW5wdXQoKSBsaWZlTW9kZTogJ3NpbmdsZScgfCAnZ2xvYmFsJyA9ICdnbG9iYWwnO1xyXG4gIEBPdXRwdXQoKSBjbG9zZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPE1lc3NhZ2VbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPE1lc3NhZ2VbXT4oKTtcclxuXHJcbiAgX3ZhbHVlOiBBcnJheTxNZXNzYWdlPjtcclxuICByZXN0OiBBcnJheTxNZXNzYWdlPjsgLy8g5Y2V5LiqdG9hc3TmtojlpLHlkI7pnIDopoHkv53mjIHkuIrkuIvkvY3nva7kuI3og73ku45fdmFsdWXkuK3np7vpmaTvvIzku45yZXN05Lit56e76Zmk5bm25Y+R6YCBdmFsdWVDaGFuZ2VcclxuICB6SW5kZXggPSAxMDYwO1xyXG4gIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XHJcbiAgdGltZW91dDogYW55O1xyXG4gIHRpbWVvdXRBcnIgPSBbXTtcclxuICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICBjbGlja1N1YiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgc3ViSXRlbTogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBnZXQgX2xpZmUoKSB7XHJcbiAgICBpZiAodGhpcy5saWZlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxpZmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXZlcml0eURlbGF5KHRoaXMudmFsdWVbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiA1MDAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3ViSXRlbSA9IHRoaXMuY2xpY2tTdWJcclxuICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDI1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiBmYWxzZSB9KSlcclxuICAgICAgLnN1YnNjcmliZSgob2JqOiBhbnkpID0+IHRoaXMucmVtb3ZlKG9iai5pbmRleCwgb2JqLmRvbSkpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb250YWluZXIgPSA8SFRNTERpdkVsZW1lbnQ+dGhpcy5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKCF0aGlzLnN0aWNreSkge1xyXG4gICAgICBpZiAodGhpcy5saWZlTW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICB0aGlzLnRpbWVvdXRBcnIuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbSAmJiBjbGVhclRpbWVvdXQoaXRlbSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdWJJdGVtKSB7XHJcbiAgICAgIHRoaXMuc3ViSXRlbS51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V2ZXJpdHlEZWxheShpdGVtOiBNZXNzYWdlKSB7XHJcbiAgICBzd2l0Y2ggKGl0ZW0uc2V2ZXJpdHkpIHtcclxuICAgIGNhc2UgJ3dhcm4nOlxyXG4gICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICByZXR1cm4gMTAwMDA7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICAvLyBjb21tb24gfCBzdWNjZXNzIHwgaW5mbyB8IGRlZmF1bHRcclxuICAgICAgcmV0dXJuIDUwMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLmNvbnRhaW5lciA9IDxIVE1MRGl2RWxlbWVudD50aGlzLmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gV2lsbCBvdmVyd3JpdGUgdGhpcyBtZXRob2QgaW4gdG9hc3Qgc2VydmljZVxyXG4gIGNsb3NlKCkge31cclxuXHJcbiAgLy8gV2lsbCBvdmVyd3JpdGUgdGhpcyBtZXRob2QgaW4gdG9hc3Qgc2VydmljZVxyXG4gIG9uSGlkZGVuKCkge31cclxuXHJcbiAgaGFuZGxlVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnpJbmRleCsrO1xyXG4gICAgY29uc3QgZG9tcyA9IHRoaXMuY29udGFpbmVyLmNoaWxkcmVuO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl92YWx1ZS5mb3JFYWNoKCh2LCBpKSA9PiB2ICYmIGRvbXNbaV0/LmNsYXNzTGlzdC5hZGQoJ3NsaWRlLWluJykpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuc3RpY2t5KSB7XHJcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50aW1lb3V0QXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnRpbWVvdXRBcnIuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbSAmJiBjbGVhclRpbWVvdXQoaXRlbSkpO1xyXG4gICAgICAgIHRoaXMudGltZW91dEFyciA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgIGlmICh0aGlzLmxpZmVNb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fdmFsdWUuZm9yRWFjaCgodiwgaSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRBcnJbaV0gPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2luZ2xlTW9kZVJlbW92ZSh2LCBkb21zW2ldKSwgdi5saWZlIHx8IHRoaXMuc2V2ZXJpdHlEZWxheSh2KSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsKCk7XHJcbiAgICAgICAgfSwgdGhpcy5fbGlmZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNpbmdsZU1vZGVSZW1vdmUobXNnOiBNZXNzYWdlLCBtc2dJdGVtOiBhbnkpIHtcclxuICAgIGxldCBkb20gPSBtc2dJdGVtO1xyXG4gICAgLy8g5b2T54K55Ye75YWz6Zet5p+Q5Liq5ZCO77yM6YeN5paw5riy5p+T5a+86Ie05Y6f5p2l6LWL5LqI55qEZG9t5aSx5pWI77yM6ZyA6KaB6YeN5paw6I635Y+WXHJcbiAgICBpZiAoIW1zZ0l0ZW0pIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl92YWx1ZS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09IG1zZyk7XHJcbiAgICAgIGNvbnN0IGRvbXMgPS