UNPKG

ng-devui

Version:

DevUI components based on Angular

147 lines 28.4 kB
import { animate, state, style, transition, trigger } from '@angular/animations'; import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, Renderer2, TemplateRef } from '@angular/core'; import { PositionService } from 'ng-devui/position'; import { fromEvent, Subscription } 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 ReadTipComponent { get display() { return this.content ? 'block' : 'none'; } get class() { return 'devui-popover ' + this.currentPosition + ' ' + this.connectionBias; } get state() { return this.animateState; } get template() { return this.content instanceof TemplateRef ? this.content : null; } constructor(renderer, positionService, elementRef, cdr) { this.renderer = renderer; this.positionService = positionService; this.elementRef = elementRef; this.cdr = cdr; this.position = 'top'; this.showAnimate = false; this.zIndex = 1060; this.subs = new Subscription(); this.SCROLL_REFRESH_INTERVAL = 100; this.animateState = this.showAnimate ? 'void' : ''; } ngOnInit() { this.elementRef.nativeElement.style.zIndex = this.zIndex; } ngAfterViewInit() { setTimeout(() => { this.updatePosition(); }); if (this.appendToBody) { if (!this.scrollElement) { 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(); })); } } ngAfterContentChecked() { this.updatePosition(); } show() { this.animateState = 'visible'; } hide() { this.animateState = 'void'; } onHidden() { } onAnimationEnd(event) { if (event.toState === 'void') { this.onHidden(); } } ngOnDestroy() { if (this.subs) { this.subs.unsubscribe(); } } updatePosition() { const rect = this.positionService.positionElements(this.triggerElementRef.nativeElement, this.elementRef.nativeElement, this.position, this.appendToBody); this.currentPosition = rect.placementPrimary; 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`); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReadTipComponent, deps: [{ token: i0.Renderer2 }, { token: i1.PositionService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ReadTipComponent, selector: "d-read-tip", inputs: { triggerElementRef: "triggerElementRef", position: "position", content: "content", customData: "customData", title: "title", showAnimate: "showAnimate", scrollElement: "scrollElement", appendToBody: "appendToBody", zIndex: "zIndex", popMaxWidth: "popMaxWidth", overlayClassName: "overlayClassName" }, host: { listeners: { "@state.done": "onAnimationEnd($event)" }, properties: { "style.display": "this.display", "class": "this.class", "@state": "this.state" } }, ngImport: i0, template: "<div class=\"arrow\"></div>\n<div class=\"devui-popover-content {{ overlayClassName }}\" [style.maxWidth.px]=\"popMaxWidth\">\n <ng-template [ngTemplateOutlet]=\"template || defaultTemplate\" [ngTemplateOutletContext]=\"{ $implicit: customData }\"> </ng-template>\n <ng-template #defaultTemplate>\n <div class=\"read-tip-container\">\n <div class=\"title\">\n {{ title }}\n </div>\n <div class=\"content\">\n {{ content }}\n </div>\n </div>\n </ng-template>\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.devui-popover{font-size:var(--devui-font-size, 12px);position:absolute;top:0;left:0;line-height:1.5;border:none;border-radius:var(--devui-border-radius-feedback, 4px);z-index:var(--devui-z-index-pop-up, 1060);background-color:var(--devui-feedback-overlay-bg, #333333);color:var(--devui-feedback-overlay-text, #f0f0f0);overflow-wrap:break-word}:host.devui-popover>.arrow{border-width:8px}:host.devui-popover>.arrow,:host.devui-popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}:host.devui-popover>.arrow:after{content:\"\"}:host.devui-popover.top>.arrow{transform:translate(-50%);border-bottom-width:0;border-top-color:var(--devui-feedback-overlay-bg, #333333);bottom:-8px}:host.devui-popover.right>.arrow{left:-8px;margin-top:-8px;border-left-width:0;border-right-color:var(--devui-feedback-overlay-bg, #333333)}:host.devui-popover.bottom>.arrow{transform:translate(-50%);border-top-width:0;border-bottom-color:var(--devui-feedback-overlay-bg, #333333);top:-8px}:host.devui-popover.left>.arrow{right:-8px;margin-top:-8px;border-right-width:0;border-left-color:var(--devui-feedback-overlay-bg, #333333)}:host.devui-popover.bias-left>.arrow{left:14px}:host.devui-popover.bias-right>.arrow{right:14px}:host.devui-popover.bias-top>.arrow{top:13px}:host.devui-popover.bias-bottom>.arrow{bottom:5px}:host.devui-popover.bias-horizontal-center>.arrow{left:50%}:host.devui-popover.bias-vertical-center>.arrow{top:50%}:host.devui-popover.top{margin-top:-8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover.bottom{margin-top:8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover.left{margin-left:-8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover.right{margin-left:8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}.devui-popover-content .read-tip-container .title{font-size:var(--devui-font-size-page-title, 16px)}.devui-popover-content .read-tip-container .content{font-size:var(--devui-font-size, 12px)}.devui-popover-icon{display:block;position:absolute;left:10px;top:6px}.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)}.devui-popover-content{padding:4px 12px}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [ trigger('state', [ state('void', style({ opacity: 0 })), state('visible', style({ opacity: 1 })), transition('* => visible', animate('150ms cubic-bezier(0.0, 0.0, 0.2, 1)')), transition('visible => *', animate('150ms cubic-bezier(0.4, 0.0, 1, 1)')), ]), ] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReadTipComponent, decorators: [{ type: Component, args: [{ selector: 'd-read-tip', animations: [ trigger('state', [ state('void', style({ opacity: 0 })), state('visible', style({ opacity: 1 })), transition('* => visible', animate('150ms cubic-bezier(0.0, 0.0, 0.2, 1)')), transition('visible => *', animate('150ms cubic-bezier(0.4, 0.0, 1, 1)')), ]), ], template: "<div class=\"arrow\"></div>\n<div class=\"devui-popover-content {{ overlayClassName }}\" [style.maxWidth.px]=\"popMaxWidth\">\n <ng-template [ngTemplateOutlet]=\"template || defaultTemplate\" [ngTemplateOutletContext]=\"{ $implicit: customData }\"> </ng-template>\n <ng-template #defaultTemplate>\n <div class=\"read-tip-container\">\n <div class=\"title\">\n {{ title }}\n </div>\n <div class=\"content\">\n {{ content }}\n </div>\n </div>\n </ng-template>\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.devui-popover{font-size:var(--devui-font-size, 12px);position:absolute;top:0;left:0;line-height:1.5;border:none;border-radius:var(--devui-border-radius-feedback, 4px);z-index:var(--devui-z-index-pop-up, 1060);background-color:var(--devui-feedback-overlay-bg, #333333);color:var(--devui-feedback-overlay-text, #f0f0f0);overflow-wrap:break-word}:host.devui-popover>.arrow{border-width:8px}:host.devui-popover>.arrow,:host.devui-popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}:host.devui-popover>.arrow:after{content:\"\"}:host.devui-popover.top>.arrow{transform:translate(-50%);border-bottom-width:0;border-top-color:var(--devui-feedback-overlay-bg, #333333);bottom:-8px}:host.devui-popover.right>.arrow{left:-8px;margin-top:-8px;border-left-width:0;border-right-color:var(--devui-feedback-overlay-bg, #333333)}:host.devui-popover.bottom>.arrow{transform:translate(-50%);border-top-width:0;border-bottom-color:var(--devui-feedback-overlay-bg, #333333);top:-8px}:host.devui-popover.left>.arrow{right:-8px;margin-top:-8px;border-right-width:0;border-left-color:var(--devui-feedback-overlay-bg, #333333)}:host.devui-popover.bias-left>.arrow{left:14px}:host.devui-popover.bias-right>.arrow{right:14px}:host.devui-popover.bias-top>.arrow{top:13px}:host.devui-popover.bias-bottom>.arrow{bottom:5px}:host.devui-popover.bias-horizontal-center>.arrow{left:50%}:host.devui-popover.bias-vertical-center>.arrow{top:50%}:host.devui-popover.top{margin-top:-8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover.bottom{margin-top:8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover.left{margin-left:-8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}:host.devui-popover.right{margin-left:8px;box-shadow:var(--devui-shadow-length-feedback-overlay, 0 8px 24px 0) var(--devui-shadow, rgba(0, 0, 0, .16))}.devui-popover-content .read-tip-container .title{font-size:var(--devui-font-size-page-title, 16px)}.devui-popover-content .read-tip-container .content{font-size:var(--devui-font-size, 12px)}.devui-popover-icon{display:block;position:absolute;left:10px;top:6px}.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)}.devui-popover-content{padding:4px 12px}\n"] }] }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.PositionService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { triggerElementRef: [{ type: Input }], position: [{ type: Input }], content: [{ type: Input }], customData: [{ type: Input }], title: [{ type: Input }], showAnimate: [{ type: Input }], scrollElement: [{ type: Input }], appendToBody: [{ type: Input }], zIndex: [{ type: Input }], popMaxWidth: [{ type: Input }], overlayClassName: [{ type: Input }], display: [{ type: HostBinding, args: ['style.display'] }], class: [{ type: HostBinding, args: ['class'] }], state: [{ type: HostBinding, args: ['@state'] }], onAnimationEnd: [{ type: HostListener, args: ['@state.done', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC10aXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvcmVhZC10aXAvcmVhZC10aXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvcmVhZC10aXAvcmVhZC10aXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsU0FBUyxFQUNULFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBZTlDLE1BQU0sT0FBTyxnQkFBZ0I7SUFtQjNCLElBQWtDLE9BQU87UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBQ0QsSUFBMEIsS0FBSztRQUM3QixPQUFPLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQTJCLEtBQUs7UUFDOUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMs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TyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7YUFDMUUsQ0FBQztTQUNIOzs0RkFFVSxnQkFBZ0I7a0JBYjVCLFNBQVM7K0JBQ0UsWUFBWSxjQUdWO3dCQUNWLE9BQU8sQ0FBQyxPQUFPLEVBQUU7NEJBQ2YsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDcEMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDdkMsVUFBVSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQzs0QkFDM0UsVUFBVSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsb0NBQW9DLENBQUMsQ0FBQzt5QkFDMUUsQ0FBQztxQkFDSDtxS0FHUSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVE0QixPQUFPO3NCQUF4QyxXQUFXO3VCQUFDLGVBQWU7Z0JBR0YsS0FBSztzQkFBOUIsV0FBVzt1QkFBQyxPQUFPO2dCQUlPLEtBQUs7c0JBQS9CLFdBQVc7dUJBQUMsUUFBUTtnQkE0RHJCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvc2l0aW9uU2VydmljZSB9IGZyb20gJ25nLWRldnVpL3Bvc2l0aW9uJztcbmltcG9ydCB7IFBvc2l0aW9uVHlwZSB9IGZyb20gJ25nLWRldnVpL3Rvb2x0aXAnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZC1yZWFkLXRpcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWFkLXRpcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlYWQtdGlwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzdGF0ZScsIFtcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKSxcbiAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdmlzaWJsZScsIGFuaW1hdGUoJzE1MG1zIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKScpKSxcbiAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gKicsIGFuaW1hdGUoJzE1MG1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSknKSksXG4gICAgXSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRUaXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHRyaWdnZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBwb3NpdGlvbjogUG9zaXRpb25UeXBlIHwgUG9zaXRpb25UeXBlW10gPSAndG9wJztcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBjdXN0b21EYXRhOiBhbnk7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgQElucHV0KCkgc2hvd0FuaW1hdGUgPSBmYWxzZTtcbiAgQElucHV0KCkgc2Nyb2xsRWxlbWVudDogRWxlbWVudDtcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKSB6SW5kZXggPSAxMDYwO1xuICBASW5wdXQoKSBwb3BNYXhXaWR0aDogbnVtYmVyO1xuICBASW5wdXQoKSBvdmVybGF5Q2xhc3NOYW1lOiBzdHJpbmc7XG5cbiAgc3ViczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBTQ1JPTExfUkVGUkVTSF9JTlRFUlZBTCA9IDEwMDtcbiAgY3VycmVudFBvc2l0aW9uOiBQb3NpdGlvblR5cGU7XG4gIGNvbm5lY3Rpb25CaWFzOiBzdHJpbmc7XG4gIGFuaW1hdGVTdGF0ZTogc3RyaW5nID0gdGhpcy5zaG93QW5pbWF0ZSA/ICd2b2lkJyA6ICcnO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpIGdldCBkaXNwbGF5KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQgPyAnYmxvY2snIDogJ25vbmUnO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgY2xhc3MoKSB7XG4gICAgcmV0dXJuICdkZXZ1aS1wb3BvdmVyICcgKyB0aGlzLmN1cnJlbnRQb3NpdGlvbiArICcgJyArIHRoaXMuY29ubmVjdGlvbkJpYXM7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ0BzdGF0ZScpIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hbmltYXRlU3RhdGU7XG4gIH1cblxuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmID8gdGhpcy5jb250ZW50IDogbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHBvc2l0aW9uU2VydmljZTogUG9zaXRpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuekluZGV4ID0gdGhpcy56SW5kZXg7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgIGlmICghdGhpcy5zY3JvbGxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsRWxlbWVudCA9IHRoaXMucG9zaXRpb25TZXJ2aWNlLmdldFNjcm9sbFBhcmVudCh0aGlzLnRyaWdnZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWJzLmFkZChcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuc2Nyb2xsRWxlbWVudCB8fCB3aW5kb3csICdzY3JvbGwnKVxuICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLlNDUk9MTF9SRUZSRVNIX0lOVEVSVkFMKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuc3Vicy5hZGQoXG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLlNDUk9MTF9SRUZSRVNIX0lOVEVSVkFMKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmFuaW1hdGVTdGF0ZSA9ICd2aXNpYmxlJztcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5hbmltYXRlU3RhdGUgPSAndm9pZCc7XG4gIH1cblxuICBvbkhpZGRlbigpIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignQHN0YXRlLmRvbmUnLCBbJyRldmVudCddKVxuICBvbkFuaW1hdGlvbkVuZChldmVudCkge1xuICAgIGlmIChldmVudC50b1N0YXRlID09PSAndm9pZCcpIHtcbiAgICAgIHRoaXMub25IaWRkZW4oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzKSB7XG4gICAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5wb3NpdGlvblNlcnZpY2UucG9zaXRpb25FbGVtZW50cyhcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5wb3NpdGlvbixcbiAgICAgIHRoaXMuYXBwZW5kVG9Cb2R5XG4gICAgKTtcbiAgICB0aGlzLmN1cnJlbnRQb3NpdGlvbiA9IHJlY3QucGxhY2VtZW50UHJpbWFyeTtcbiAgICB0aGlzLmNvbm5lY3Rpb25CaWFzID0gYGJpYXMtJHtyZWN0LnBsYWNlbWVudFNlY29uZGFyeX1gO1xuICAgIGlmIChyZWN0LnBsYWNlbWVudFNlY29uZGFyeSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIGlmIChyZWN0LnBsYWNlbWVudFByaW1hcnkgPT09ICdsZWZ0JyB8fCByZWN0LnBsYWNlbWVudFByaW1hcnkgPT09ICdyaWdodCcpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uQmlhcyA9ICdiaWFzLXZlcnRpY2FsLWNlbnRlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25CaWFzID0gJ2JpYXMtaG9yaXpvbnRhbC1jZW50ZXInO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3JlY3QubGVmdH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd0b3AnLCBgJHtyZWN0LnRvcH1weGApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj5cbjxkaXYgY2xhc3M9XCJkZXZ1aS1wb3BvdmVyLWNvbnRlbnQge3sgb3ZlcmxheUNsYXNzTmFtZSB9fVwiIFtzdHlsZS5tYXhXaWR0aC5weF09XCJwb3BNYXhXaWR0aFwiPlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGUgfHwgZGVmYXVsdFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjdXN0b21EYXRhIH1cIj4gPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cInJlYWQtdGlwLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgIHt7IHRpdGxlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgIHt7IGNvbnRlbnQgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=