UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

319 lines 24.5 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 { NbAdjustment, NbOverlayService, NbPosition, NbPositionBuilderService, NbTrigger, NbTriggerStrategyBuilder, patch, createContainer, } from '../cdk'; import { NB_DOCUMENT } from '../../theme.options'; import { NbPopoverComponent } from './popover.component'; /* * Powerful popover directive, which provides the best UX for your users. * * @stacked-example(Showcase, popover/popover-showcase.component) * * Popover can accept different content such as: * TemplateRef * * ```html * <button [nbPopover]="templateRef"></button> * <ng-template #templateRef> * <span>Hello, Popover!</span> * </ng-template> * ``` * ### Installation * * Import `NbPopoverModule` to your feature module. * ```ts * @NgModule({ * imports: [ * // ... * NbPopoverModule, * ], * }) * export class PageModule { } * ``` * ### Usage * * Custom components * * ```html * <button [nbPopover]="MyPopoverComponent"></button> * ``` * * Both custom components and templateRef popovers can receive *contentContext* property * that will be passed to the content props. * * Primitive types * * ```html * <button nbPopover="Hello, Popover!"></button> * ``` * * Popover has different placements, such as: top, bottom, left, right, start and end * which can be used as following: * * @stacked-example(Placements, popover/popover-placements.component) * * By default popover will try to adjust itself to maximally fit viewport * and provide the best user experience. It will try to change position of the popover container. * If you wanna disable this behaviour just set it falsy value. * * ```html * <button nbPopover="Hello, Popover!" [nbPopoverAdjust]="false"></button> * ``` * * Also popover has some different modes which provides capability show$ and hide$ popover in different ways: * * - Click mode popover shows when a user clicking on the host element and hides when the user clicks * somewhere on the document except popover. * - Hint mode provides capability show$ popover when the user hovers on the host element * and hide$ popover when user hovers out of the host. * - Hover mode works like hint mode with one exception - when the user moves mouse from host element to * the container element popover will not be hidden. * * @stacked-example(Available Modes, popover/popover-modes.component.html) * * @additional-example(Template Ref, popover/popover-template-ref.component) * @additional-example(Custom Component, popover/popover-custom-component.component) * */ var NbPopoverDirective = /** @class */ (function () { function NbPopoverDirective(document, hostRef, positionBuilder, overlay, componentFactoryResolver) { this.document = document; this.hostRef = hostRef; this.positionBuilder = positionBuilder; this.overlay = overlay; this.componentFactoryResolver = componentFactoryResolver; /* * Container content context. Will be applied to the rendered component. * */ 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; /* * Describes when the container will be shown. * Available options: click, hover and hint * */ this.mode = NbTrigger.CLICK; this.alive = true; } /** * @return {?} */ NbPopoverDirective.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 {?} */ NbPopoverDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.alive = false; this.hide(); }; /** * @return {?} */ NbPopoverDirective.prototype.show = /** * @return {?} */ function () { this.container = createContainer(this.ref, NbPopoverComponent, { position: this.position, content: this.content, context: this.context, cfr: this.componentFactoryResolver, }, this.componentFactoryResolver); }; /** * @return {?} */ NbPopoverDirective.prototype.hide = /** * @return {?} */ function () { this.ref.detach(); this.container = null; }; /** * @return {?} */ NbPopoverDirective.prototype.toggle = /** * @return {?} */ function () { if (this.ref && this.ref.hasAttached()) { this.hide(); } else { this.show(); } }; /** * @protected * @return {?} */ NbPopoverDirective.prototype.createPositionStrategy = /** * @protected * @return {?} */ function () { return this.positionBuilder .connectedTo(this.hostRef) .position(this.position) .adjustment(this.adjustment); }; /** * @protected * @return {?} */ NbPopoverDirective.prototype.createTriggerStrategy = /** * @protected * @return {?} */ function () { var _this = this; return new NbTriggerStrategyBuilder() .document(this.document) .trigger(this.mode) .host(this.hostRef.nativeElement) .container(function () { return _this.container; }) .build(); }; /** * @protected * @return {?} */ NbPopoverDirective.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 {?} */ NbPopoverDirective.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(); }); }; NbPopoverDirective.decorators = [ { type: Directive, args: [{ selector: '[nbPopover]' },] } ]; /** @nocollapse */ NbPopoverDirective.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [NB_DOCUMENT,] }] }, { type: ElementRef }, { type: NbPositionBuilderService }, { type: NbOverlayService }, { type: ComponentFactoryResolver } ]; }; NbPopoverDirective.propDecorators = { content: [{ type: Input, args: ['nbPopover',] }], context: [{ type: Input, args: ['nbPopoverContext',] }], position: [{ type: Input, args: ['nbPopoverPlacement',] }], adjustment: [{ type: Input, args: ['nbPopoverAdjustment',] }], mode: [{ type: Input, args: ['nbPopoverMode',] }] }; return NbPopoverDirective; }()); export { NbPopoverDirective }; if (false) { /** @type {?} */ NbPopoverDirective.prototype.content; /** @type {?} */ NbPopoverDirective.prototype.context; /** @type {?} */ NbPopoverDirective.prototype.position; /** @type {?} */ NbPopoverDirective.prototype.adjustment; /** @type {?} */ NbPopoverDirective.prototype.mode; /** * @type {?} * @protected */ NbPopoverDirective.prototype.ref; /** * @type {?} * @protected */ NbPopoverDirective.prototype.container; /** * @type {?} * @protected */ NbPopoverDirective.prototype.positionStrategy; /** * @type {?} * @protected */ NbPopoverDirective.prototype.triggerStrategy; /** * @type {?} * @protected */ NbPopoverDirective.prototype.alive; /** * @type {?} * @protected */ NbPopoverDirective.prototype.document; /** * @type {?} * @private */ NbPopoverDirective.prototype.hostRef; /** * @type {?} * @private */ NbPopoverDirective.prototype.positionBuilder; /** * @type {?} * @private */ NbPopoverDirective.prototype.overlay; /** * @type {?} * @private */ NbPopoverDirective.prototype.componentFactoryResolver; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFFTCx3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBRUwsWUFBWSxFQUdaLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysd0JBQXdCLEVBQ3hCLFNBQVMsRUFFVCx3QkFBd0IsRUFDeEIsS0FBSyxFQUNMLGVBQWUsR0FDaEIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlFekQ7SUE0Q0UsNEJBQTJDLFFBQVEsRUFDL0IsT0FBbUIsRUFDbkIsZUFBeUMsRUFDekMsT0FBeUIsRUFDekIsd0JBQWtEO1FBSjNCLGFBQVEsR0FBUixRQUFRLENBQUE7UUFDL0IsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixvQkFBZSxHQUFmLGVBQWUsQ0FBMEI7UUFDekMsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFDekIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjs7OztRQWxDdEUsWUFBTyxHQUFXLEVBQUUsQ0FBQzs7Ozs7UUFPckIsYUFBUSxHQUFlLFVBQVUsQ0FBQyxHQUFHLENBQUM7Ozs7OztRQVF0QyxlQUFVLEdBQWlCLFlBQVksQ0FBQyxTQUFTLENBQUM7Ozs7O1FB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Q29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBOYkFkanVzdGFibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxyXG4gIE5iQWRqdXN0bWVudCxcclxuICBOYk92ZXJsYXlDb250ZW50LFxyXG4gIE5iT3ZlcmxheVJlZixcclxuICBOYk92ZXJsYXlTZXJ2aWNlLFxyXG4gIE5iUG9zaXRpb24sXHJcbiAgTmJQb3NpdGlvbkJ1aWxkZXJTZXJ2aWNlLFxyXG4gIE5iVHJpZ2dlcixcclxuICBOYlRyaWdnZXJTdHJhdGVneSxcclxuICBOYlRyaWdnZXJTdHJhdGVneUJ1aWxkZXIsXHJcbiAgcGF0Y2gsXHJcbiAgY3JlYXRlQ29udGFpbmVyLFxyXG59IGZyb20gJy4uL2Nkayc7XHJcbmltcG9ydCB7IE5CX0RPQ1VNRU5UIH0gZnJvbSAnLi4vLi4vdGhlbWUub3B0aW9ucyc7XHJcbmltcG9ydCB7IE5iUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xyXG5cclxuXHJcbi8qXHJcbiAqIFBvd2VyZnVsIHBvcG92ZXIgZGlyZWN0aXZlLCB3aGljaCBwcm92aWRlcyB0aGUgYmVzdCBVWCBmb3IgeW91ciB1c2Vycy5cclxuICpcclxuICogQHN0YWNrZWQtZXhhbXBsZShTaG93Y2FzZSwgcG9wb3Zlci9wb3BvdmVyLXNob3djYXNlLmNvbXBvbmVudClcclxuICpcclxuICogUG9wb3ZlciBjYW4gYWNjZXB0IGRpZmZlcmVudCBjb250ZW50IHN1Y2ggYXM6XHJcbiAqIFRlbXBsYXRlUmVmXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGJ1dHRvbiBbbmJQb3BvdmVyXT1cInRlbXBsYXRlUmVmXCI+PC9idXR0b24+XHJcbiAqIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+XHJcbiAqICAgPHNwYW4+SGVsbG8sIFBvcG92ZXIhPC9zcGFuPlxyXG4gKiA8L25nLXRlbXBsYXRlPlxyXG4gKiBgYGBcclxuICogIyMjIEluc3RhbGxhdGlvblxyXG4gKlxyXG4gKiBJbXBvcnQgYE5iUG9wb3Zlck1vZHVsZWAgdG8geW91ciBmZWF0dXJlIG1vZHVsZS5cclxuICogYGBgdHNcclxuICogQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbXHJcbiAqICAgXHQvLyAuLi5cclxuICogICAgIE5iUG9wb3Zlck1vZHVsZSxcclxuICogICBdLFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgUGFnZU1vZHVsZSB7IH1cclxuICogYGBgXHJcbiAqICMjIyBVc2FnZVxyXG4gKlxyXG4gKiBDdXN0b20gY29tcG9uZW50c1xyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxidXR0b24gW25iUG9wb3Zlcl09XCJNeVBvcG92ZXJDb21wb25lbnRcIj48L2J1dHRvbj5cclxuICogYGBgXHJcbiAqXHJcbiAqIEJvdGggY3VzdG9tIGNvbXBvbmVudHMgYW5kIHRlbXBsYXRlUmVmIHBvcG92ZXJzIGNhbiByZWNlaXZlICpjb250ZW50Q29udGV4dCogcHJvcGVydHlcclxuICogdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29udGVudCBwcm9wcy5cclxuICpcclxuICogUHJpbWl0aXZlIHR5cGVzXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGJ1dHRvbiBuYlBvcG92ZXI9XCJIZWxsbywgUG9wb3ZlciFcIj48L2J1dHRvbj5cclxuICogYGBgXHJcbiAqXHJcbiAqIFBvcG92ZXIgaGFzIGRpZmZlcmVudCBwbGFjZW1lbnRzLCBzdWNoIGFzOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQsIHN0YXJ0IGFuZCBlbmRcclxuICogd2hpY2ggY2FuIGJlIHVzZWQgYXMgZm9sbG93aW5nOlxyXG4gKlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKFBsYWNlbWVudHMsIHBvcG92ZXIvcG9wb3Zlci1wbGFjZW1lbnRzLmNvbXBvbmVudClcclxuICpcclxuICogQnkgZGVmYXVsdCBwb3BvdmVyIHdpbGwgdHJ5IHRvIGFkanVzdCBpdHNlbGYgdG8gbWF4aW1hbGx5IGZpdCB2aWV3cG9ydFxyXG4gKiBhbmQgcHJvdmlkZSB0aGUgYmVzdCB1c2VyIGV4cGVyaWVuY2UuIEl0IHdpbGwgdHJ5IHRvIGNoYW5nZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3ZlciBjb250YWluZXIuXHJcbiAqIElmIHlvdSB3YW5uYSBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyIGp1c3Qgc2V0IGl0IGZhbHN5IHZhbHVlLlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxidXR0b24gbmJQb3BvdmVyPVwiSGVsbG8sIFBvcG92ZXIhXCIgW25iUG9wb3ZlckFkanVzdF09XCJmYWxzZVwiPjwvYnV0dG9uPlxyXG4gKiBgYGBcclxuICpcclxuICogQWxzbyBwb3BvdmVyIGhhcyBzb21lIGRpZmZlcmVudCBtb2RlcyB3aGljaCBwcm92aWRlcyBjYXBhYmlsaXR5IHNob3ckIGFuZCBoaWRlJCBwb3BvdmVyIGluIGRpZmZlcmVudCB3YXlzOlxyXG4gKlxyXG4gKiAtIENsaWNrIG1vZGUgcG9wb3ZlciBzaG93cyB3aGVuIGEgdXNlciBjbGlja2luZyBvbiB0aGUgaG9zdCBlbGVtZW50IGFuZCBoaWRlcyB3aGVuIHRoZSB1c2VyIGNsaWNrc1xyXG4gKiBzb21ld2hlcmUgb24gdGhlIGRvY3VtZW50IGV4Y2VwdCBwb3BvdmVyLlxyXG4gKiAtIEhpbnQgbW9kZSBwcm92aWRlcyBjYXBhYmlsaXR5IHNob3ckIHBvcG92ZXIgd2hlbiB0aGUgdXNlciBob3ZlcnMgb24gdGhlIGhvc3QgZWxlbWVudFxyXG4gKiBhbmQgaGlkZSQgcG9wb3ZlciB3aGVuIHVzZXIgaG92ZXJzIG91dCBvZiB0aGUgaG9zdC5cclxuICogLSBIb3ZlciBtb2RlIHdvcmtzIGxpa2UgaGludCBtb2RlIHdpdGggb25lIGV4Y2VwdGlvbiAtIHdoZW4gdGhlIHVzZXIgbW92ZXMgbW91c2UgZnJvbSBob3N0IGVsZW1lbnQgdG9cclxuICogdGhlIGNvbnRhaW5lciBlbGVtZW50IHBvcG92ZXIgd2lsbCBub3QgYmUgaGlkZGVuLlxyXG4gKlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKEF2YWlsYWJsZSBNb2RlcywgcG9wb3Zlci9wb3BvdmVyLW1vZGVzLmNvbXBvbmVudC5odG1sKVxyXG4gKlxyXG4gKiBAYWRkaXRpb25hbC1leGFtcGxlKFRlbXBsYXRlIFJlZiwgcG9wb3Zlci9wb3BvdmVyLXRlbXBsYXRlLXJlZi5jb21wb25lbnQpXHJcbiAqIEBhZGRpdGlvbmFsLWV4YW1wbGUoQ3VzdG9tIENvbXBvbmVudCwgcG9wb3Zlci9wb3BvdmVyLWN1c3RvbS1jb21wb25lbnQuY29tcG9uZW50KVxyXG4gKiAqL1xyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmJQb3BvdmVyXScgfSlcclxuZXhwb3J0IGNsYXNzIE5iUG9wb3ZlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qXHJcbiAgICogUG9wb3ZlciBjb250ZW50IHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgaW4gTmJBcnJvd2VkT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudC5cclxuICAgKiBBdmFpbGFibGUgY29udGVudDogdGVtcGxhdGUgcmVmLCBjb21wb25lbnQgYW5kIGFueSBwcmltaXRpdmUuXHJcbiAgICogKi9cclxuICBASW5wdXQoJ25iUG9wb3ZlcicpXHJcbiAgY29udGVudDogTmJPdmVybGF5Q29udGVudDtcclxuXHJcbiAgLypcclxuICAgKiBDb250YWluZXIgY29udGVudCBjb250ZXh0LiBXaWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJlbmRlcmVkIGNvbXBvbmVudC5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgnbmJQb3BvdmVyQ29udGV4dCcpXHJcbiAgY29udGV4dDogT2JqZWN0ID0ge307XHJcblxyXG4gIC8qXHJcbiAgICogUG9zaXRpb24gd2lsbCBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlbHkgaG9zdCBlbGVtZW50IGJhc2VkIG9uIHRoZSBwb3NpdGlvbi5cclxuICAgKiBDYW4gYmUgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCBvciBlbmQuXHJcbiAgICogKi9cclxuICBASW5wdXQoJ25iUG9wb3ZlclBsYWNlbWVudCcpXHJcbiAgcG9zaXRpb246IE5iUG9zaXRpb24gPSBOYlBvc2l0aW9uLlRPUDtcclxuXHJcbiAgLypcclxuICAgKiBDb250YWluZXIgcG9zaXRpb24gd2lsbCBiZSBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhpcyBzdHJhdGVneSBpZiBjb250YWluZXIgY2FuJ3QgZml0IHZpZXcgcG9ydC5cclxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBhbnkgZmFsc3kgdmFsdWUgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBhdXRvbWF0aWNhbGx5IGFkanVzdG1lbnQuXHJcbiAgICogQXZhaWxhYmxlIHZhbHVlczogY2xvY2t3aXNlLCBjb3VudGVyY2xvY2t3aXNlLlxyXG4gICAqICovXHJcbiAgQElucHV0KCduYlBvcG92ZXJBZGp1c3RtZW50JylcclxuICBhZGp1c3RtZW50OiBOYkFkanVzdG1lbnQgPSBOYkFkanVzdG1lbnQuQ0xPQ0tXSVNFO1xyXG5cclxuICAvKlxyXG4gICAqIERlc2NyaWJlcyB3aGVuIHRoZSBjb250YWluZXIgd2lsbCBiZSBzaG93bi5cclxuICAgKiBBdmFpbGFibGUgb3B0aW9uczogY2xpY2ssIGhvdmVyIGFuZCBoaW50XHJcbiAgICogKi9cclxuICBASW5wdXQoJ25iUG9wb3Zlck1vZGUnKVxyXG4gIG1vZGU6IE5iVHJpZ2dlciA9IE5iVHJpZ2dlci5DTElDSztcclxuXHJcbiAgcHJvdGVjdGVkIHJlZjogTmJPdmVybGF5UmVmO1xyXG4gIHByb3RlY3RlZCBjb250YWluZXI6IENvbXBvbmVudFJlZjxhbnk+O1xyXG4gIHByb3RlY3RlZCBwb3NpdGlvblN0cmF0ZWd5OiBOYkFkanVzdGFibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xyXG4gIHByb3RlY3RlZCB0cmlnZ2VyU3RyYXRlZ3k6IE5iVHJpZ2dlclN0cmF0ZWd5O1xyXG4gIHByb3RlY3RlZCBhbGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTkJfRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudCxcclxuICAgICAgICAgICAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwb3NpdGlvbkJ1aWxkZXI6IE5iUG9zaXRpb25CdWlsZGVyU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE5iT3ZlcmxheVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5wb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCk7XHJcbiAgICB0aGlzLnJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJpZ2dlclN0cmF0ZWd5ID0gdGhpcy5jcmVhdGVUcmlnZ2VyU3RyYXRlZ3koKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZU9uVHJpZ2dlcnMoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlT25Qb3NpdGlvbkNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmFsaXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcih0aGlzLnJlZiwgTmJQb3BvdmVyQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQsXHJcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dCxcclxuICAgICAgY2ZyOiB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIH0sIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtcclxuICB9XHJcblxyXG4gIGhpZGUoKSB7XHJcbiAgICB0aGlzLnJlZi5kZXRhY2goKTtcclxuICAgIHRoaXMuY29udGFpbmVyID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpIHtcclxuICAgIGlmICh0aGlzLnJlZiAmJiB0aGlzLnJlZi5oYXNBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpOiBOYkFkanVzdGFibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcclxuICAgIHJldHVybiB0aGlzLnBvc2l0aW9uQnVpbGRlclxyXG4gICAgICAuY29ubmVjdGVkVG8odGhpcy5ob3N0UmVmKVxyXG4gICAgICAucG9zaXRpb24odGhpcy5wb3NpdGlvbilcclxuICAgICAgLmFkanVzdG1lbnQodGhpcy5hZGp1c3RtZW50KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjcmVhdGVUcmlnZ2VyU3RyYXRlZ3koKTogTmJUcmlnZ2VyU3RyYXRlZ3kge1xyXG4gICAgcmV0dXJuIG5ldyBOYlRyaWdnZXJTdHJhdGVneUJ1aWxkZXIoKVxyXG4gICAgICAuZG9jdW1lbnQodGhpcy5kb2N1bWVudClcclxuICAgICAgLnRyaWdnZXIodGhpcy5tb2RlKVxyXG4gICAgICAuaG9zdCh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcclxuICAgICAgLmNvbnRhaW5lcigoKSA9PiB0aGlzLmNvbnRhaW5lcilcclxuICAgICAgLmJ1aWxkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25Qb3NpdGlvbkNoYW5nZSgpIHtcclxuICAgIHRoaXMucG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHBvc2l0aW9uOiBOYlBvc2l0aW9uKSA9PiBwYXRjaCh0aGlzLmNvbnRhaW5lciwgeyBwb3NpdGlvbiB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25UcmlnZ2VycygpIHtcclxuICAgIHRoaXMudHJpZ2dlclN0cmF0ZWd5LnNob3ckLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zaG93KCkpO1xyXG4gICAgdGhpcy50cmlnZ2VyU3RyYXRlZ3kuaGlkZSQucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhpZGUoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==