theme-lib
Version:
This is a simple example Angular Library published to npm.
261 lines • 19.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { ComponentFactoryResolver, Directive, ElementRef, Inject, Input, } from '@angular/core';
import { takeWhile } from 'rxjs/operators';
import { createContainer, NbAdjustment, NbOverlayService, NbPosition, NbPositionBuilderService, NbTrigger, NbTriggerStrategyBuilder, patch, } from '../cdk';
import { NB_DOCUMENT } from '../../theme.options';
import { NbTooltipComponent } from './tooltip.component';
/*
*
* Tooltip directive for small text/icon hints.
*
* ### Installation
*
* Import `NbTooltipModule` to your feature module.
* ```ts
* @NgModule({
* imports: [
* // ...
* NbTooltipModule,
* ],
* })
* export class PageModule { }
* ```
* ### Usage
*
* @stacked-example(Showcase, tooltip/tooltip-showcase.component)
*
* Tooltip can accept a hint text and/or an icon:
* @stacked-example(With Icon, tooltip/tooltip-with-icon.component)
*
* Same way as Popover, tooltip can accept placement position with `nbTooltipPlacement` proprety:
* @stacked-example(Placements, tooltip/tooltip-placements.component)
*
* It is also possible to specify tooltip color using `nbTooltipStatus` property:
* @stacked-example(Colored Tooltips, tooltip/tooltip-colors.component)
*
*/
export class NbTooltipDirective {
/**
* @param {?} document
* @param {?} hostRef
* @param {?} positionBuilder
* @param {?} overlay
* @param {?} componentFactoryResolver
*/
constructor(document, hostRef, positionBuilder, overlay, componentFactoryResolver) {
this.document = document;
this.hostRef = hostRef;
this.positionBuilder = positionBuilder;
this.overlay = overlay;
this.componentFactoryResolver = componentFactoryResolver;
this.context = {};
/*
* Position will be calculated relatively host element based on the position.
* Can be top, right, bottom, left, start or end.
*/
this.position = NbPosition.TOP;
/*
* Container position will be changes automatically based on this strategy if container can't fit view port.
* Set this property to any falsy value if you want to disable automatically adjustment.
* Available values: clockwise, counterclockwise.
*/
this.adjustment = NbAdjustment.CLOCKWISE;
this.alive = true;
}
/*
*
* @param {string} icon
*/
/**
* @param {?} icon
* @return {?}
*/
set icon(icon) {
this.context = Object.assign(this.context, { icon });
}
/*
*
* @param {string} status
*/
/**
* @param {?} status
* @return {?}
*/
set status(status) {
this.context = Object.assign(this.context, { status });
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.positionStrategy = this.createPositionStrategy();
this.ref = this.overlay.create({
positionStrategy: this.positionStrategy,
scrollStrategy: this.overlay.scrollStrategies.reposition(),
});
this.triggerStrategy = this.createTriggerStrategy();
this.subscribeOnTriggers();
this.subscribeOnPositionChange();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.alive = false;
}
/**
* @return {?}
*/
show() {
this.container = createContainer(this.ref, NbTooltipComponent, {
position: this.position,
content: this.content,
context: this.context,
cfr: this.componentFactoryResolver,
}, this.componentFactoryResolver);
}
/**
* @return {?}
*/
hide() {
this.ref.detach();
}
/**
* @return {?}
*/
toggle() {
if (this.ref && this.ref.hasAttached()) {
this.hide();
}
else {
this.show();
}
}
/**
* @protected
* @return {?}
*/
createPositionStrategy() {
return this.positionBuilder
.connectedTo(this.hostRef)
.position(this.position)
.adjustment(this.adjustment)
.offset(8);
}
/**
* @protected
* @return {?}
*/
createTriggerStrategy() {
return new NbTriggerStrategyBuilder()
.document(this.document)
.trigger(NbTrigger.HINT)
.host(this.hostRef.nativeElement)
.container(() => this.container)
.build();
}
/**
* @protected
* @return {?}
*/
subscribeOnPositionChange() {
this.positionStrategy.positionChange
.pipe(takeWhile(() => this.alive))
.subscribe((position) => patch(this.container, { position }));
}
/**
* @protected
* @return {?}
*/
subscribeOnTriggers() {
this.triggerStrategy.show$.pipe(takeWhile(() => this.alive)).subscribe(() => this.show());
this.triggerStrategy.hide$.pipe(takeWhile(() => this.alive)).subscribe(() => this.hide());
}
}
NbTooltipDirective.decorators = [
{ type: Directive, args: [{ selector: '[nbTooltip]' },] }
];
/** @nocollapse */
NbTooltipDirective.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [NB_DOCUMENT,] }] },
{ type: ElementRef },
{ type: NbPositionBuilderService },
{ type: NbOverlayService },
{ type: ComponentFactoryResolver }
];
NbTooltipDirective.propDecorators = {
content: [{ type: Input, args: ['nbTooltip',] }],
position: [{ type: Input, args: ['nbTooltipPlacement',] }],
adjustment: [{ type: Input, args: ['nbTooltipAdjustment',] }],
icon: [{ type: Input, args: ['nbTooltipIcon',] }],
status: [{ type: Input, args: ['nbTooltipStatus',] }]
};
if (false) {
/** @type {?} */
NbTooltipDirective.prototype.context;
/** @type {?} */
NbTooltipDirective.prototype.content;
/** @type {?} */
NbTooltipDirective.prototype.position;
/** @type {?} */
NbTooltipDirective.prototype.adjustment;
/**
* @type {?}
* @protected
*/
NbTooltipDirective.prototype.ref;
/**
* @type {?}
* @protected
*/
NbTooltipDirective.prototype.container;
/**
* @type {?}
* @protected
*/
NbTooltipDirective.prototype.positionStrategy;
/**
* @type {?}
* @protected
*/
NbTooltipDirective.prototype.triggerStrategy;
/**
* @type {?}
* @protected
*/
NbTooltipDirective.prototype.alive;
/**
* @type {?}
* @protected
*/
NbTooltipDirective.prototype.document;
/**
* @type {?}
* @private
*/
NbTooltipDirective.prototype.hostRef;
/**
* @type {?}
* @private
*/
NbTooltipDirective.prototype.positionBuilder;
/**
* @type {?}
* @private
*/
NbTooltipDirective.prototype.overlay;
/**
* @type {?}
* @private
*/
NbTooltipDirective.prototype.componentFactoryResolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFFTCx3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLFlBQVksRUFFWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLEtBQUssR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ3pELE1BQU0sT0FBTyxrQkFBa0I7Ozs7Ozs7O0lBaUQ3QixZQUEyQyxRQUFRLEVBQy9CLE9BQW1CLEVBQ25CLGVBQXlDLEVBQ3pDLE9BQXlCLEVBQ3pCLHdCQUFrRDtRQUozQixhQUFRLEdBQVIsUUFBUSxDQUFBO1FBQy9CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBQ3pDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFuRHRFLFlBQU8sR0FBVyxFQUFFLENBQUM7Ozs7O1FBY3JCLGFBQVEsR0FBZSxVQUFVLENBQUMsR0FBRyxDQUFDOzs7Ozs7UUFPdEMsZUFBVSxHQUFpQixZQUFZLENBQUMsU0FBUyxDQUFDO1FBd0J4QyxVQUFLLEdBQVksSUFBSSxDQUFD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Q29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgY3JlYXRlQ29udGFpbmVyLFxyXG4gIE5iQWRqdXN0YWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgTmJBZGp1c3RtZW50LFxyXG4gIE5iT3ZlcmxheVJlZixcclxuICBOYk92ZXJsYXlTZXJ2aWNlLFxyXG4gIE5iUG9zaXRpb24sXHJcbiAgTmJQb3NpdGlvbkJ1aWxkZXJTZXJ2aWNlLFxyXG4gIE5iVHJpZ2dlcixcclxuICBOYlRyaWdnZXJTdHJhdGVneSxcclxuICBOYlRyaWdnZXJTdHJhdGVneUJ1aWxkZXIsXHJcbiAgcGF0Y2gsXHJcbn0gZnJvbSAnLi4vY2RrJztcclxuaW1wb3J0IHsgTkJfRE9DVU1FTlQgfSBmcm9tICcuLi8uLi90aGVtZS5vcHRpb25zJztcclxuaW1wb3J0IHsgTmJUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwLmNvbXBvbmVudCc7XHJcblxyXG4vKlxyXG4gKlxyXG4gKiBUb29sdGlwIGRpcmVjdGl2ZSBmb3Igc21hbGwgdGV4dC9pY29uIGhpbnRzLlxyXG4gKlxyXG4gKiAjIyMgSW5zdGFsbGF0aW9uXHJcbiAqXHJcbiAqIEltcG9ydCBgTmJUb29sdGlwTW9kdWxlYCB0byB5b3VyIGZlYXR1cmUgbW9kdWxlLlxyXG4gKiBgYGB0c1xyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAgIGltcG9ydHM6IFtcclxuICogICBcdC8vIC4uLlxyXG4gKiAgICAgTmJUb29sdGlwTW9kdWxlLFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBQYWdlTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICogIyMjIFVzYWdlXHJcbiAqXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoU2hvd2Nhc2UsIHRvb2x0aXAvdG9vbHRpcC1zaG93Y2FzZS5jb21wb25lbnQpXHJcbiAqXHJcbiAqIFRvb2x0aXAgY2FuIGFjY2VwdCBhIGhpbnQgdGV4dCBhbmQvb3IgYW4gaWNvbjpcclxuICogQHN0YWNrZWQtZXhhbXBsZShXaXRoIEljb24sIHRvb2x0aXAvdG9vbHRpcC13aXRoLWljb24uY29tcG9uZW50KVxyXG4gKlxyXG4gKiBTYW1lIHdheSBhcyBQb3BvdmVyLCB0b29sdGlwIGNhbiBhY2NlcHQgcGxhY2VtZW50IHBvc2l0aW9uIHdpdGggYG5iVG9vbHRpcFBsYWNlbWVudGAgcHJvcHJldHk6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoUGxhY2VtZW50cywgdG9vbHRpcC90b29sdGlwLXBsYWNlbWVudHMuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdG9vbHRpcCBjb2xvciB1c2luZyBgbmJUb29sdGlwU3RhdHVzYCBwcm9wZXJ0eTpcclxuICogQHN0YWNrZWQtZXhhbXBsZShDb2xvcmVkIFRvb2x0aXBzLCB0b29sdGlwL3Rvb2x0aXAtY29sb3JzLmNvbXBvbmVudClcclxuICpcclxuICovXHJcbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tuYlRvb2x0aXBdJyB9KVxyXG5leHBvcnQgY2xhc3MgTmJUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgY29udGV4dDogT2JqZWN0ID0ge307XHJcblxyXG4gIC8qXHJcbiAgICogUG9wb3ZlciBjb250ZW50IHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgaW4gTmJUb29sdGlwQ29tcG9uZW50LlxyXG4gICAqIEF2YWlsYWJsZSBjb250ZW50OiB0ZW1wbGF0ZSByZWYsIGNvbXBvbmVudCBhbmQgYW55IHByaW1pdGl2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgnbmJUb29sdGlwJylcclxuICBjb250ZW50OiBzdHJpbmc7XHJcbiAgLypcclxuICAgKiBQb3NpdGlvbiB3aWxsIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmVseSBob3N0IGVsZW1lbnQgYmFzZWQgb24gdGhlIHBvc2l0aW9uLlxyXG4gICAqIENhbiBiZSB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0IG9yIGVuZC5cclxuICAgKi9cclxuICBASW5wdXQoJ25iVG9vbHRpcFBsYWNlbWVudCcpXHJcbiAgcG9zaXRpb246IE5iUG9zaXRpb24gPSBOYlBvc2l0aW9uLlRPUDtcclxuICAvKlxyXG4gICAqIENvbnRhaW5lciBwb3NpdGlvbiB3aWxsIGJlIGNoYW5nZXMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGlzIHN0cmF0ZWd5IGlmIGNvbnRhaW5lciBjYW4ndCBmaXQgdmlldyBwb3J0LlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGFueSBmYWxzeSB2YWx1ZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGF1dG9tYXRpY2FsbHkgYWRqdXN0bWVudC5cclxuICAgKiBBdmFpbGFibGUgdmFsdWVzOiBjbG9ja3dpc2UsIGNvdW50ZXJjbG9ja3dpc2UuXHJcbiAgICovXHJcbiAgQElucHV0KCduYlRvb2x0aXBBZGp1c3RtZW50JylcclxuICBhZGp1c3RtZW50OiBOYkFkanVzdG1lbnQgPSBOYkFkanVzdG1lbnQuQ0xPQ0tXSVNFO1xyXG5cclxuICAvKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGljb25cclxuICAgKi9cclxuICBASW5wdXQoJ25iVG9vbHRpcEljb24nKVxyXG4gIHNldCBpY29uKGljb246IHN0cmluZykge1xyXG4gICAgdGhpcy5jb250ZXh0ID0gT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRleHQsIHsgaWNvbiB9KTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzXHJcbiAgICovXHJcbiAgQElucHV0KCduYlRvb2x0aXBTdGF0dXMnKVxyXG4gIHNldCBzdGF0dXMoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY29udGV4dCA9IE9iamVjdC5hc3NpZ24odGhpcy5jb250ZXh0LCB7IHN0YXR1cyB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWY6IE5iT3ZlcmxheVJlZjtcclxuICBwcm90ZWN0ZWQgY29udGFpbmVyOiBDb21wb25lbnRSZWY8YW55PjtcclxuICBwcm90ZWN0ZWQgcG9zaXRpb25TdHJhdGVneTogTmJBZGp1c3RhYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICBwcm90ZWN0ZWQgdHJpZ2dlclN0cmF0ZWd5OiBOYlRyaWdnZXJTdHJhdGVneTtcclxuICBwcm90ZWN0ZWQgYWxpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5CX0RPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcG9zaXRpb25CdWlsZGVyOiBOYlBvc2l0aW9uQnVpbGRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBvdmVybGF5OiBOYk92ZXJsYXlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucG9zaXRpb25TdHJhdGVneSA9IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpO1xyXG4gICAgdGhpcy5yZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5wb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyaWdnZXJTdHJhdGVneSA9IHRoaXMuY3JlYXRlVHJpZ2dlclN0cmF0ZWd5KCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVPblRyaWdnZXJzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZU9uUG9zaXRpb25DaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHRoaXMuY29udGFpbmVyID0gY3JlYXRlQ29udGFpbmVyKHRoaXMucmVmLCBOYlRvb2x0aXBDb21wb25lbnQsIHtcclxuICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXHJcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCxcclxuICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxyXG4gICAgICBjZnI6IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgfSwgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMucmVmLmRldGFjaCgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgaWYgKHRoaXMucmVmICYmIHRoaXMucmVmLmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCk6IE5iQWRqdXN0YWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgcmV0dXJuIHRoaXMucG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5jb25uZWN0ZWRUbyh0aGlzLmhvc3RSZWYpXHJcbiAgICAgIC5wb3NpdGlvbih0aGlzLnBvc2l0aW9uKVxyXG4gICAgICAuYWRqdXN0bWVudCh0aGlzLmFkanVzdG1lbnQpXHJcbiAgICAgIC5vZmZzZXQoOCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY3JlYXRlVHJpZ2dlclN0cmF0ZWd5KCk6IE5iVHJpZ2dlclN0cmF0ZWd5IHtcclxuICAgIHJldHVybiBuZXcgTmJUcmlnZ2VyU3RyYXRlZ3lCdWlsZGVyKClcclxuICAgICAgLmRvY3VtZW50KHRoaXMuZG9jdW1lbnQpXHJcbiAgICAgIC50cmlnZ2VyKE5iVHJpZ2dlci5ISU5UKVxyXG4gICAgICAuaG9zdCh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcclxuICAgICAgLmNvbnRhaW5lcigoKSA9PiB0aGlzLmNvbnRhaW5lcilcclxuICAgICAgLmJ1aWxkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25Qb3NpdGlvbkNoYW5nZSgpIHtcclxuICAgIHRoaXMucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHBvc2l0aW9uOiBOYlBvc2l0aW9uKSA9PiBwYXRjaCh0aGlzLmNvbnRhaW5lciwgeyBwb3NpdGlvbiB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25UcmlnZ2VycygpIHtcclxuICAgIHRoaXMudHJpZ2dlclN0cmF0ZWd5LnNob3ckLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zaG93KCkpO1xyXG4gICAgdGhpcy50cmlnZ2VyU3RyYXRlZ3kuaGlkZSQucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhpZGUoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==