UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

306 lines 21.7 kB
/** * @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) * */ var NbTooltipDirective = /** @class */ (function () { function NbTooltipDirective(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; } Object.defineProperty(NbTooltipDirective.prototype, "icon", { /* * * @param {string} icon */ set: /* * * @param {string} icon */ /** * @param {?} icon * @return {?} */ function (icon) { this.context = Object.assign(this.context, { icon: icon }); }, enumerable: true, configurable: true }); Object.defineProperty(NbTooltipDirective.prototype, "status", { /* * * @param {string} status */ set: /* * * @param {string} status */ /** * @param {?} status * @return {?} */ function (status) { this.context = Object.assign(this.context, { status: status }); }, enumerable: true, configurable: true }); /** * @return {?} */ NbTooltipDirective.prototype.ngAfterViewInit = /** * @return {?} */ function () { 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 {?} */ NbTooltipDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.alive = false; }; /** * @return {?} */ NbTooltipDirective.prototype.show = /** * @return {?} */ function () { this.container = createContainer(this.ref, NbTooltipComponent, { position: this.position, content: this.content, context: this.context, cfr: this.componentFactoryResolver, }, this.componentFactoryResolver); }; /** * @return {?} */ NbTooltipDirective.prototype.hide = /** * @return {?} */ function () { this.ref.detach(); }; /** * @return {?} */ NbTooltipDirective.prototype.toggle = /** * @return {?} */ function () { if (this.ref && this.ref.hasAttached()) { this.hide(); } else { this.show(); } }; /** * @protected * @return {?} */ NbTooltipDirective.prototype.createPositionStrategy = /** * @protected * @return {?} */ function () { return this.positionBuilder .connectedTo(this.hostRef) .position(this.position) .adjustment(this.adjustment) .offset(8); }; /** * @protected * @return {?} */ NbTooltipDirective.prototype.createTriggerStrategy = /** * @protected * @return {?} */ function () { var _this = this; return new NbTriggerStrategyBuilder() .document(this.document) .trigger(NbTrigger.HINT) .host(this.hostRef.nativeElement) .container(function () { return _this.container; }) .build(); }; /** * @protected * @return {?} */ NbTooltipDirective.prototype.subscribeOnPositionChange = /** * @protected * @return {?} */ function () { var _this = this; this.positionStrategy.positionChange .pipe(takeWhile(function () { return _this.alive; })) .subscribe(function (position) { return patch(_this.container, { position: position }); }); }; /** * @protected * @return {?} */ NbTooltipDirective.prototype.subscribeOnTriggers = /** * @protected * @return {?} */ function () { var _this = this; this.triggerStrategy.show$.pipe(takeWhile(function () { return _this.alive; })).subscribe(function () { return _this.show(); }); this.triggerStrategy.hide$.pipe(takeWhile(function () { return _this.alive; })).subscribe(function () { return _this.hide(); }); }; NbTooltipDirective.decorators = [ { type: Directive, args: [{ selector: '[nbTooltip]' },] } ]; /** @nocollapse */ NbTooltipDirective.ctorParameters = function () { return [ { 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',] }] }; return NbTooltipDirective; }()); export { NbTooltipDirective }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFFTCx3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLFlBQVksRUFFWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLEtBQUssR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ3pEO0lBa0RFLDRCQUEyQyxRQUFRLEVBQy9CLE9BQW1CLEVBQ25CLGVBQXlDLEVBQ3pDLE9BQXlCLEVBQ3pCLHdCQUFrRDtRQUozQixhQUFRLEdBQVIsUUFBUSxDQUFBO1FBQy9CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBQ3pDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFuRHRFLFlBQU8sR0FBVyxFQUFFLENBQUM7Ozs7O1FBY3JCLGFBQVEsR0FBZSxVQUFVLENBQUMsR0FBRyxDQUFDOzs7Ozs7UUFPdEMsZUFBVSxHQUFpQixZQUFZLENBQUMsU0FBUyxDQUFDO1FBd0J4QyxVQUFLLEdBQVksSUFBSSxDQUFDO0lBT2hDLENBQUM7SUF6QkQsc0JBQ0ks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Qzs7SUFNdEMsd0NBQ2tEOzs7OztJQW9CbEQsaUNBQTRCOzs7OztJQUM1Qix1Q0FBdUM7Ozs7O0lBQ3ZDLDhDQUFrRTs7Ozs7SUFDbEUsNkNBQTZDOzs7OztJQUM3QyxtQ0FBZ0M7Ozs7O0lBRXBCLHNDQUF1Qzs7Ozs7SUFDdkMscUNBQTJCOzs7OztJQUMzQiw2Q0FBaUQ7Ozs7O0lBQ2pELHFDQUFpQzs7Ozs7SUFDakMsc0RBQTBEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgY3JlYXRlQ29udGFpbmVyLFxyXG4gIE5iQWRqdXN0YWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgTmJBZGp1c3RtZW50LFxyXG4gIE5iT3ZlcmxheVJlZixcclxuICBOYk92ZXJsYXlTZXJ2aWNlLFxyXG4gIE5iUG9zaXRpb24sXHJcbiAgTmJQb3NpdGlvbkJ1aWxkZXJTZXJ2aWNlLFxyXG4gIE5iVHJpZ2dlcixcclxuICBOYlRyaWdnZXJTdHJhdGVneSxcclxuICBOYlRyaWdnZXJTdHJhdGVneUJ1aWxkZXIsXHJcbiAgcGF0Y2gsXHJcbn0gZnJvbSAnLi4vY2RrJztcclxuaW1wb3J0IHsgTkJfRE9DVU1FTlQgfSBmcm9tICcuLi8uLi90aGVtZS5vcHRpb25zJztcclxuaW1wb3J0IHsgTmJUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwLmNvbXBvbmVudCc7XHJcblxyXG4vKlxyXG4gKlxyXG4gKiBUb29sdGlwIGRpcmVjdGl2ZSBmb3Igc21hbGwgdGV4dC9pY29uIGhpbnRzLlxyXG4gKlxyXG4gKiAjIyMgSW5zdGFsbGF0aW9uXHJcbiAqXHJcbiAqIEltcG9ydCBgTmJUb29sdGlwTW9kdWxlYCB0byB5b3VyIGZlYXR1cmUgbW9kdWxlLlxyXG4gKiBgYGB0c1xyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAgIGltcG9ydHM6IFtcclxuICogICBcdC8vIC4uLlxyXG4gKiAgICAgTmJUb29sdGlwTW9kdWxlLFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBQYWdlTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICogIyMjIFVzYWdlXHJcbiAqXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoU2hvd2Nhc2UsIHRvb2x0aXAvdG9vbHRpcC1zaG93Y2FzZS5jb21wb25lbnQpXHJcbiAqXHJcbiAqIFRvb2x0aXAgY2FuIGFjY2VwdCBhIGhpbnQgdGV4dCBhbmQvb3IgYW4gaWNvbjpcclxuICogQHN0YWNrZWQtZXhhbXBsZShXaXRoIEljb24sIHRvb2x0aXAvdG9vbHRpcC13aXRoLWljb24uY29tcG9uZW50KVxyXG4gKlxyXG4gKiBTYW1lIHdheSBhcyBQb3BvdmVyLCB0b29sdGlwIGNhbiBhY2NlcHQgcGxhY2VtZW50IHBvc2l0aW9uIHdpdGggYG5iVG9vbHRpcFBsYWNlbWVudGAgcHJvcHJldHk6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoUGxhY2VtZW50cywgdG9vbHRpcC90b29sdGlwLXBsYWNlbWVudHMuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdG9vbHRpcCBjb2xvciB1c2luZyBgbmJUb29sdGlwU3RhdHVzYCBwcm9wZXJ0eTpcclxuICogQHN0YWNrZWQtZXhhbXBsZShDb2xvcmVkIFRvb2x0aXBzLCB0b29sdGlwL3Rvb2x0aXAtY29sb3JzLmNvbXBvbmVudClcclxuICpcclxuICovXHJcbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tuYlRvb2x0aXBdJyB9KVxyXG5leHBvcnQgY2xhc3MgTmJUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgY29udGV4dDogT2JqZWN0ID0ge307XHJcblxyXG4gIC8qXHJcbiAgICogUG9wb3ZlciBjb250ZW50IHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgaW4gTmJUb29sdGlwQ29tcG9uZW50LlxyXG4gICAqIEF2YWlsYWJsZSBjb250ZW50OiB0ZW1wbGF0ZSByZWYsIGNvbXBvbmVudCBhbmQgYW55IHByaW1pdGl2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgnbmJUb29sdGlwJylcclxuICBjb250ZW50OiBzdHJpbmc7XHJcbiAgLypcclxuICAgKiBQb3NpdGlvbiB3aWxsIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmVseSBob3N0IGVsZW1lbnQgYmFzZWQgb24gdGhlIHBvc2l0aW9uLlxyXG4gICAqIENhbiBiZSB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0IG9yIGVuZC5cclxuICAgKi9cclxuICBASW5wdXQoJ25iVG9vbHRpcFBsYWNlbWVudCcpXHJcbiAgcG9zaXRpb246IE5iUG9zaXRpb24gPSBOYlBvc2l0aW9uLlRPUDtcclxuICAvKlxyXG4gICAqIENvbnRhaW5lciBwb3NpdGlvbiB3aWxsIGJlIGNoYW5nZXMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGlzIHN0cmF0ZWd5IGlmIGNvbnRhaW5lciBjYW4ndCBmaXQgdmlldyBwb3J0LlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGFueSBmYWxzeSB2YWx1ZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGF1dG9tYXRpY2FsbHkgYWRqdXN0bWVudC5cclxuICAgKiBBdmFpbGFibGUgdmFsdWVzOiBjbG9ja3dpc2UsIGNvdW50ZXJjbG9ja3dpc2UuXHJcbiAgICovXHJcbiAgQElucHV0KCduYlRvb2x0aXBBZGp1c3RtZW50JylcclxuICBhZGp1c3RtZW50OiBOYkFkanVzdG1lbnQgPSBOYkFkanVzdG1lbnQuQ0xPQ0tXSVNFO1xyXG5cclxuICAvKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGljb25cclxuICAgKi9cclxuICBASW5wdXQoJ25iVG9vbHRpcEljb24nKVxyXG4gIHNldCBpY29uKGljb246IHN0cmluZykge1xyXG4gICAgdGhpcy5jb250ZXh0ID0gT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRleHQsIHsgaWNvbiB9KTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdHVzXHJcbiAgICovXHJcbiAgQElucHV0KCduYlRvb2x0aXBTdGF0dXMnKVxyXG4gIHNldCBzdGF0dXMoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY29udGV4dCA9IE9iamVjdC5hc3NpZ24odGhpcy5jb250ZXh0LCB7IHN0YXR1cyB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWY6IE5iT3ZlcmxheVJlZjtcclxuICBwcm90ZWN0ZWQgY29udGFpbmVyOiBDb21wb25lbnRSZWY8YW55PjtcclxuICBwcm90ZWN0ZWQgcG9zaXRpb25TdHJhdGVneTogTmJBZGp1c3RhYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICBwcm90ZWN0ZWQgdHJpZ2dlclN0cmF0ZWd5OiBOYlRyaWdnZXJTdHJhdGVneTtcclxuICBwcm90ZWN0ZWQgYWxpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5CX0RPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcG9zaXRpb25CdWlsZGVyOiBOYlBvc2l0aW9uQnVpbGRlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBvdmVybGF5OiBOYk92ZXJsYXlTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucG9zaXRpb25TdHJhdGVneSA9IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpO1xyXG4gICAgdGhpcy5yZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5wb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyaWdnZXJTdHJhdGVneSA9IHRoaXMuY3JlYXRlVHJpZ2dlclN0cmF0ZWd5KCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVPblRyaWdnZXJzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZU9uUG9zaXRpb25DaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHRoaXMuY29udGFpbmVyID0gY3JlYXRlQ29udGFpbmVyKHRoaXMucmVmLCBOYlRvb2x0aXBDb21wb25lbnQsIHtcclxuICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXHJcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCxcclxuICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxyXG4gICAgICBjZnI6IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgfSwgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMucmVmLmRldGFjaCgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgaWYgKHRoaXMucmVmICYmIHRoaXMucmVmLmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCk6IE5iQWRqdXN0YWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgcmV0dXJuIHRoaXMucG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5jb25uZWN0ZWRUbyh0aGlzLmhvc3RSZWYpXHJcbiAgICAgIC5wb3NpdGlvbih0aGlzLnBvc2l0aW9uKVxyXG4gICAgICAuYWRqdXN0bWVudCh0aGlzLmFkanVzdG1lbnQpXHJcbiAgICAgIC5vZmZzZXQoOCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY3JlYXRlVHJpZ2dlclN0cmF0ZWd5KCk6IE5iVHJpZ2dlclN0cmF0ZWd5IHtcclxuICAgIHJldHVybiBuZXcgTmJUcmlnZ2VyU3RyYXRlZ3lCdWlsZGVyKClcclxuICAgICAgLmRvY3VtZW50KHRoaXMuZG9jdW1lbnQpXHJcbiAgICAgIC50cmlnZ2VyKE5iVHJpZ2dlci5ISU5UKVxyXG4gICAgICAuaG9zdCh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcclxuICAgICAgLmNvbnRhaW5lcigoKSA9PiB0aGlzLmNvbnRhaW5lcilcclxuICAgICAgLmJ1aWxkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25Qb3NpdGlvbkNoYW5nZSgpIHtcclxuICAgIHRoaXMucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHBvc2l0aW9uOiBOYlBvc2l0aW9uKSA9PiBwYXRjaCh0aGlzLmNvbnRhaW5lciwgeyBwb3NpdGlvbiB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25UcmlnZ2VycygpIHtcclxuICAgIHRoaXMudHJpZ2dlclN0cmF0ZWd5LnNob3ckLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zaG93KCkpO1xyXG4gICAgdGhpcy50cmlnZ2VyU3RyYXRlZ3kuaGlkZSQucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhpZGUoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==