@bimeister/pupakit.kit
Version:
PupaKit is an open source collection of Angular components based on an atomic approach to building interfaces, which guarantees better performance and greater development flexibility.
120 lines • 16.1 kB
JavaScript
import { Directive, ElementRef, Input } from '@angular/core';
import { isTabletDevice } from '@bimeister/pupakit.common';
import { filterFalsy, isNil } from '@bimeister/utilities';
import { fromEvent, Subscription } from 'rxjs';
import { delay, filter, switchMap, take, tap } from 'rxjs/operators';
import { TOOLTIP_SERVICE_TOKEN } from '../../../declarations/tokens/tooltip-service.token';
import { TooltipService } from '../services/tooltip.service';
import * as i0 from "@angular/core";
import * as i1 from "../services/tooltip.service";
export class PupaTooltipDirective {
constructor(tooltipService, triggerRef) {
this.tooltipService = tooltipService;
this.triggerRef = triggerRef;
this.tooltipHideOnHover = true;
this.tooltipDisabled = false;
this.tooltipDelayMs = 0;
this.pupaTooltip = null;
this.tooltipContentTemplate = null;
this.isOpened$ = this.tooltipService.isOpened$;
this.isDisabled$ = this.tooltipService.isDisabled$;
this.triggerMouseEnter$ = fromEvent(this.triggerRef.nativeElement, 'mouseenter');
this.triggerMouseLeave$ = fromEvent(this.triggerRef.nativeElement, 'mouseleave');
this.isMouseOverElement = false;
this.subscription = new Subscription();
}
ngAfterViewInit() {
this.registerTooltipTriggerRef();
this.subscription.add(this.processTriggerMouseEnterEvent());
this.subscription.add(this.processTriggerMouseLeaveEvent());
}
ngOnChanges(changes) {
this.processDisabledChanges(changes?.tooltipDisabled);
this.processHideOnTooltipHoverChanges(changes?.tooltipHideOnHover);
this.processTooltipContentChanges(changes?.pupaTooltip);
this.processTooltipContentTemplateChanges(changes?.tooltipContentTemplate);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
processDisabledChanges(change) {
if (isNil(change)) {
return;
}
this.tooltipService.setDisabledState(change.currentValue);
}
processHideOnTooltipHoverChanges(change) {
if (isNil(change)) {
return;
}
this.tooltipService.setTooltipHideOnHoverState(change.currentValue);
}
processTooltipContentChanges(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.tooltipService.setTooltipContentState(updatedValue);
}
processTooltipContentTemplateChanges(change) {
const updatedValue = change?.currentValue;
if (isNil(updatedValue)) {
return;
}
this.tooltipService.setTooltipContentTemplateState(updatedValue);
}
registerTooltipTriggerRef() {
this.tooltipService.registerTooltipTriggerRef(this.triggerRef);
}
processTriggerMouseEnterEvent() {
return this.triggerMouseEnter$
.pipe(tap(() => {
this.isMouseOverElement = true;
}), delay(this.tooltipDelayMs), filter(() => this.isMouseOverElement), switchMap(() => this.isDisabled$.pipe(take(1), filterFalsy(), filter(() => !Boolean(isTabletDevice())))))
.subscribe(() => {
this.tooltipService.processTriggerMouseEnter();
});
}
processTriggerMouseLeaveEvent() {
return this.triggerMouseLeave$
.pipe(tap(() => {
this.isMouseOverElement = false;
}))
.subscribe(() => {
this.tooltipService.processTriggerMouseLeave();
});
}
}
PupaTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PupaTooltipDirective, deps: [{ token: i1.TooltipService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
PupaTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: PupaTooltipDirective, selector: "[pupaTooltip]", inputs: { tooltipHideOnHover: "tooltipHideOnHover", tooltipDisabled: "tooltipDisabled", tooltipDelayMs: "tooltipDelayMs", pupaTooltip: "pupaTooltip", tooltipContentTemplate: "tooltipContentTemplate" }, providers: [
TooltipService,
{
provide: TOOLTIP_SERVICE_TOKEN,
useExisting: TooltipService,
},
], exportAs: ["pupaTooltip"], usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PupaTooltipDirective, decorators: [{
type: Directive,
args: [{
selector: '[pupaTooltip]',
providers: [
TooltipService,
{
provide: TOOLTIP_SERVICE_TOKEN,
useExisting: TooltipService,
},
],
exportAs: 'pupaTooltip',
}]
}], ctorParameters: function () { return [{ type: i1.TooltipService }, { type: i0.ElementRef }]; }, propDecorators: { tooltipHideOnHover: [{
type: Input
}], tooltipDisabled: [{
type: Input
}], tooltipDelayMs: [{
type: Input
}], pupaTooltip: [{
type: Input
}], tooltipContentTemplate: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90b29sdGlwL2RpcmVjdGl2ZXMvdG9vbHRpcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUMsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFxQyxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFhN0QsTUFBTSxPQUFPLG9CQUFvQjtJQXVCL0IsWUFBNkIsY0FBOEIsRUFBa0IsVUFBbUM7UUFBbkYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQWtCLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBdEJoRyx1QkFBa0IsR0FBWSxJQUFJLENBQUM7UUFDbkMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFFM0IsZ0JBQVcsR0FBcUIsSUFBSSxDQUFDO1FBQ3JDLDJCQUFzQixHQUFtQyxJQUFJLENBQUM7UUFFOUQsY0FBUyxHQUF3QixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUM5RCxnQkFBVyxHQUF3QixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztRQUVuRSx1QkFBa0IsR0FBMkIsU0FBUyxDQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsWUFBWSxDQUNiLENBQUM7UUFDZSx1QkFBa0IsR0FBMkIsU0FBUyxDQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsWUFBWSxDQUNiLENBQUM7UUFFTSx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFM0IsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNrRCxDQUFDO0lBRTdHLGVBQWU7UUFDcEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBK0I7UUFDaEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsb0NBQW9DLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBc0M7UUFDbkUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLE1BQXNDO1FBQzdFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxNQUFxQztRQUN4RSxNQUFNLFlBQVksR0FBdUIsTUFBTSxFQUFFLFlBQVksQ0FBQztRQUU5RCxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxvQ0FBb0MsQ0FBQyxNQUFtRDtRQUM5RixNQUFNLFlBQVksR0FBcUMsTUFBTSxFQUFFLFlBQVksQ0FBQztRQUU1RSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLDZCQUE2QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxrQkFBa0I7YUFDM0IsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQzFCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsV0FBVyxFQUFFLEVBQ2IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FDekMsQ0FDRixDQUNGO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsT0FBTyxJQUFJLENBQUMsa0JBQWtCO2FBQzNCLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztrSEE5R1Usb0JBQW9CO3NHQUFwQixvQkFBb0Isa1BBVHBCO1FBQ1QsY0FBYztRQUNkO1lBQ0UsT0FBTyxFQUFFLHFCQUFxQjtZQUM5QixXQUFXLEVBQUUsY0FBYztTQUM1QjtLQUNGOzRGQUdVLG9CQUFvQjtrQkFYaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsU0FBUyxFQUFFO3dCQUNULGNBQWM7d0JBQ2Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsV0FBVyxFQUFFLGNBQWM7eUJBQzVCO3FCQUNGO29CQUNELFFBQVEsRUFBRSxhQUFhO2lCQUN4Qjs4SEFFaUIsa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFFVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLHNCQUFzQjtzQkFBckMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q2hhbmdlLCBDb21wb25lbnRDaGFuZ2VzLCBpc1RhYmxldERldmljZSB9IGZyb20gJ0BiaW1laXN0ZXIvcHVwYWtpdC5jb21tb24nO1xuaW1wb3J0IHsgZmlsdGVyRmFsc3ksIGlzTmlsLCBOdWxsYWJsZSB9IGZyb20gJ0BiaW1laXN0ZXIvdXRpbGl0aWVzJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRPT0xUSVBfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uLy4uLy4uL2RlY2xhcmF0aW9ucy90b2tlbnMvdG9vbHRpcC1zZXJ2aWNlLnRva2VuJztcbmltcG9ydCB7IFRvb2x0aXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdG9vbHRpcC5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3B1cGFUb29sdGlwXScsXG4gIHByb3ZpZGVyczogW1xuICAgIFRvb2x0aXBTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRPT0xUSVBfU0VSVklDRV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBUb29sdGlwU2VydmljZSxcbiAgICB9LFxuICBdLFxuICBleHBvcnRBczogJ3B1cGFUb29sdGlwJyxcbn0pXG5leHBvcnQgY2xhc3MgUHVwYVRvb2x0aXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHB1YmxpYyB0b29sdGlwSGlkZU9uSG92ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgdG9vbHRpcERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyB0b29sdGlwRGVsYXlNczogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBwdWJsaWMgcHVwYVRvb2x0aXA6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgdG9vbHRpcENvbnRlbnRUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4+ID0gbnVsbDtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNPcGVuZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy50b29sdGlwU2VydmljZS5pc09wZW5lZCQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNEaXNhYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnRvb2x0aXBTZXJ2aWNlLmlzRGlzYWJsZWQkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJpZ2dlck1vdXNlRW50ZXIkOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+ID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KFxuICAgIHRoaXMudHJpZ2dlclJlZi5uYXRpdmVFbGVtZW50LFxuICAgICdtb3VzZWVudGVyJ1xuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJNb3VzZUxlYXZlJDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihcbiAgICB0aGlzLnRyaWdnZXJSZWYubmF0aXZlRWxlbWVudCxcbiAgICAnbW91c2VsZWF2ZSdcbiAgKTtcblxuICBwcml2YXRlIGlzTW91c2VPdmVyRWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdG9vbHRpcFNlcnZpY2U6IFRvb2x0aXBTZXJ2aWNlLCBwdWJsaWMgcmVhZG9ubHkgdHJpZ2dlclJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyVG9vbHRpcFRyaWdnZXJSZWYoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnByb2Nlc3NUcmlnZ2VyTW91c2VFbnRlckV2ZW50KCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnByb2Nlc3NUcmlnZ2VyTW91c2VMZWF2ZUV2ZW50KCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IENvbXBvbmVudENoYW5nZXM8dGhpcz4pOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZENoYW5nZXMoY2hhbmdlcz8udG9vbHRpcERpc2FibGVkKTtcbiAgICB0aGlzLnByb2Nlc3NIaWRlT25Ub29sdGlwSG92ZXJDaGFuZ2VzKGNoYW5nZXM/LnRvb2x0aXBIaWRlT25Ib3Zlcik7XG4gICAgdGhpcy5wcm9jZXNzVG9vbHRpcENvbnRlbnRDaGFuZ2VzKGNoYW5nZXM/LnB1cGFUb29sdGlwKTtcbiAgICB0aGlzLnByb2Nlc3NUb29sdGlwQ29udGVudFRlbXBsYXRlQ2hhbmdlcyhjaGFuZ2VzPy50b29sdGlwQ29udGVudFRlbXBsYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRGlzYWJsZWRDaGFuZ2VzKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKGNoYW5nZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5zZXREaXNhYmxlZFN0YXRlKGNoYW5nZS5jdXJyZW50VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSGlkZU9uVG9vbHRpcEhvdmVyQ2hhbmdlcyhjaGFuZ2U6IENvbXBvbmVudENoYW5nZTx0aGlzLCBib29sZWFuPik6IHZvaWQge1xuICAgIGlmIChpc05pbChjaGFuZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9vbHRpcFNlcnZpY2Uuc2V0VG9vbHRpcEhpZGVPbkhvdmVyU3RhdGUoY2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NUb29sdGlwQ29udGVudENoYW5nZXMoY2hhbmdlOiBDb21wb25lbnRDaGFuZ2U8dGhpcywgc3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gY2hhbmdlPy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZiAoaXNOaWwodXBkYXRlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLnNldFRvb2x0aXBDb250ZW50U3RhdGUodXBkYXRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1Rvb2x0aXBDb250ZW50VGVtcGxhdGVDaGFuZ2VzKGNoYW5nZTogQ29tcG9uZW50Q2hhbmdlPHRoaXMsIFRlbXBsYXRlUmVmPHVua25vd24+Pik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQgPSBjaGFuZ2U/LmN1cnJlbnRWYWx1ZTtcblxuICAgIGlmIChpc05pbCh1cGRhdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudG9vbHRpcFNlcnZpY2Uuc2V0VG9vbHRpcENvbnRlbnRUZW1wbGF0ZVN0YXRlKHVwZGF0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyVG9vbHRpcFRyaWdnZXJSZWYoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5yZWdpc3RlclRvb2x0aXBUcmlnZ2VyUmVmKHRoaXMudHJpZ2dlclJlZik7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NUcmlnZ2VyTW91c2VFbnRlckV2ZW50KCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlck1vdXNlRW50ZXIkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTW91c2VPdmVyRWxlbWVudCA9IHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgICBkZWxheSh0aGlzLnRvb2x0aXBEZWxheU1zKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNNb3VzZU92ZXJFbGVtZW50KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgdGhpcy5pc0Rpc2FibGVkJC5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIGZpbHRlckZhbHN5KCksXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIUJvb2xlYW4oaXNUYWJsZXREZXZpY2UoKSkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwU2VydmljZS5wcm9jZXNzVHJpZ2dlck1vdXNlRW50ZXIoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzVHJpZ2dlck1vdXNlTGVhdmVFdmVudCgpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXJNb3VzZUxlYXZlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc01vdXNlT3ZlckVsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLnByb2Nlc3NUcmlnZ2VyTW91c2VMZWF2ZSgpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==