theme-lib
Version:
This is a simple example Angular Library published to npm.
369 lines • 26.3 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 { filter, takeWhile } from 'rxjs/operators';
import { createContainer, NbAdjustment, NbOverlayService, NbPosition, NbPositionBuilderService, NbTrigger, NbTriggerStrategyBuilder, patch, } from '../cdk';
import { NbContextMenuComponent } from './context-menu.component';
import { NbMenuService } from '../menu/menu.service';
import { NB_DOCUMENT } from '../../theme.options';
/*
* Full featured context menu directive.
*
* @stacked-example(Showcase, context-menu/context-menu-showcase.component)
*
* Just pass menu items array:
*
* ```html
* <button [nbContextMenu]="items"></button>
* ...
* items = [{ title: 'Profile' }, { title: 'Log out' }];
* ```
* ### Installation
*
* Import `NbContextMenuModule` to your feature module.
* ```ts
* @NgModule({
* imports: [
* // ...
* NbContextMenuModule,
* ],
* })
* export class PageModule { }
* ```
* ### Usage
*
* If you want to handle context menu clicks you have to pass `nbContextMenuTag`
* param and register to events using NbMenuService.
* `NbContextMenu` renders plain `NbMenu` inside, so
* you have to work with it just like with `NbMenu` component:
*
* @stacked-example(Menu item click, context-menu/context-menu-click.component)
*
* Context menu has different placements, such as: top, bottom, left and right
* which can be used as following:
*
* ```html
* <button [nbContextMenu]="items" nbContextMenuPlacement="right"></button>
* ```
*
* ```ts
* items = [{ title: 'Profile' }, { title: 'Log out' }];
* ```
*
* By default context menu will try to adjust itself to maximally fit viewport
* and provide the best user experience. It will try to change position of the context menu.
* If you wanna disable this behaviour just set it falsy value.
*
* ```html
* <button [nbContextMenu]="items" nbContextMenuAdjustment="counterclockwise"></button>
* ```
*
* ```ts
* items = [{ title: 'Profile' }, { title: 'Log out' }];
* ```
* */
var NbContextMenuDirective = /** @class */ (function () {
function NbContextMenuDirective(document, menuService, hostRef, positionBuilder, overlay, componentFactoryResolver) {
this.document = document;
this.menuService = menuService;
this.hostRef = hostRef;
this.positionBuilder = positionBuilder;
this.overlay = overlay;
this.componentFactoryResolver = componentFactoryResolver;
/*
* Position will be calculated relatively host element based on the position.
* Can be top, right, bottom and left.
* */
this.position = NbPosition.BOTTOM;
/*
* 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;
this.items = [];
}
Object.defineProperty(NbContextMenuDirective.prototype, "setItems", {
/*
* Basic menu items, will be passed to the internal NbMenuComponent.
* */
set: /*
* Basic menu items, will be passed to the internal NbMenuComponent.
* */
/**
* @param {?} items
* @return {?}
*/
function (items) {
this.validateItems(items);
this.items = items;
},
enumerable: true,
configurable: true
});
;
/**
* @return {?}
*/
NbContextMenuDirective.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();
this.subscribeOnItemClick();
};
/**
* @return {?}
*/
NbContextMenuDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.alive = false;
this.hide();
};
/**
* @return {?}
*/
NbContextMenuDirective.prototype.show = /**
* @return {?}
*/
function () {
this.container = createContainer(this.ref, NbContextMenuComponent, {
position: this.position,
items: this.items,
tag: this.tag,
}, this.componentFactoryResolver);
};
/**
* @return {?}
*/
NbContextMenuDirective.prototype.hide = /**
* @return {?}
*/
function () {
this.ref.detach();
this.container = null;
};
/**
* @return {?}
*/
NbContextMenuDirective.prototype.toggle = /**
* @return {?}
*/
function () {
if (this.ref && this.ref.hasAttached()) {
this.hide();
}
else {
this.show();
}
};
/**
* @protected
* @return {?}
*/
NbContextMenuDirective.prototype.createPositionStrategy = /**
* @protected
* @return {?}
*/
function () {
return this.positionBuilder
.connectedTo(this.hostRef)
.position(this.position)
.adjustment(this.adjustment);
};
/**
* @protected
* @return {?}
*/
NbContextMenuDirective.prototype.createTriggerStrategy = /**
* @protected
* @return {?}
*/
function () {
var _this = this;
return new NbTriggerStrategyBuilder()
.document(this.document)
.trigger(NbTrigger.CLICK)
.host(this.hostRef.nativeElement)
.container(function () { return _this.container; })
.build();
};
/**
* @protected
* @return {?}
*/
NbContextMenuDirective.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 {?}
*/
NbContextMenuDirective.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(); });
};
/*
* NbMenuComponent will crash if don't pass menu items to it.
* So, we just validating them and throw custom obvious error.
* */
/*
* NbMenuComponent will crash if don't pass menu items to it.
* So, we just validating them and throw custom obvious error.
* */
/**
* @private
* @param {?} items
* @return {?}
*/
NbContextMenuDirective.prototype.validateItems = /*
* NbMenuComponent will crash if don't pass menu items to it.
* So, we just validating them and throw custom obvious error.
* */
/**
* @private
* @param {?} items
* @return {?}
*/
function (items) {
if (!items || !items.length) {
throw Error("List of menu items expected, but given: " + items);
}
};
/**
* @private
* @return {?}
*/
NbContextMenuDirective.prototype.subscribeOnItemClick = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.menuService.onItemClick()
.pipe(takeWhile(function () { return _this.alive; }), filter(function (_a) {
var tag = _a.tag;
return tag === _this.tag;
}))
.subscribe(function () { return _this.hide(); });
};
NbContextMenuDirective.decorators = [
{ type: Directive, args: [{ selector: '[nbContextMenu]' },] }
];
/** @nocollapse */
NbContextMenuDirective.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [NB_DOCUMENT,] }] },
{ type: NbMenuService },
{ type: ElementRef },
{ type: NbPositionBuilderService },
{ type: NbOverlayService },
{ type: ComponentFactoryResolver }
]; };
NbContextMenuDirective.propDecorators = {
position: [{ type: Input, args: ['nbContextMenuPlacement',] }],
adjustment: [{ type: Input, args: ['nbContextMenuAdjustment',] }],
tag: [{ type: Input, args: ['nbContextMenuTag',] }],
setItems: [{ type: Input, args: ['nbContextMenu',] }]
};
return NbContextMenuDirective;
}());
export { NbContextMenuDirective };
if (false) {
/** @type {?} */
NbContextMenuDirective.prototype.position;
/** @type {?} */
NbContextMenuDirective.prototype.adjustment;
/** @type {?} */
NbContextMenuDirective.prototype.tag;
/**
* @type {?}
* @protected
*/
NbContextMenuDirective.prototype.ref;
/**
* @type {?}
* @protected
*/
NbContextMenuDirective.prototype.container;
/**
* @type {?}
* @protected
*/
NbContextMenuDirective.prototype.positionStrategy;
/**
* @type {?}
* @protected
*/
NbContextMenuDirective.prototype.triggerStrategy;
/**
* @type {?}
* @protected
*/
NbContextMenuDirective.prototype.alive;
/**
* @type {?}
* @private
*/
NbContextMenuDirective.prototype.items;
/**
* @type {?}
* @protected
*/
NbContextMenuDirective.prototype.document;
/**
* @type {?}
* @private
*/
NbContextMenuDirective.prototype.menuService;
/**
* @type {?}
* @private
*/
NbContextMenuDirective.prototype.hostRef;
/**
* @type {?}
* @private
*/
NbContextMenuDirective.prototype.positionBuilder;
/**
* @type {?}
* @private
*/
NbContextMenuDirective.prototype.overlay;
/**
* @type {?}
* @private
*/
NbContextMenuDirective.prototype.componentFactoryResolver;
/* Skipping unhandled member: ;*/
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFFTCx3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGVBQWUsRUFFZixZQUFZLEVBRVosZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsU0FBUyxFQUVULHdCQUF3QixFQUN4QixLQUFLLEdBQ04sTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFjLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMERsRDtJQXdDRSxnQ0FBMkMsUUFBUSxFQUMvQixXQUEwQixFQUMxQixPQUFtQixFQUNuQixlQUF5QyxFQUN6QyxPQUF5QixFQUN6Qix3QkFBa0Q7UUFMM0IsYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUMvQixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUMxQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtRQUN6QyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCOzs7OztRQXJDdEUsYUFBUSxHQUFlLFVBQVUs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QU87Z0JBQUwsWUFBRztZQUFPLE9BQUEsR0FBRyxLQUFLLEtBQUksQ0FBQyxHQUFHO1FBQWhCLENBQWdCLENBQUMsQ0FDdEM7YUFDQSxTQUFTLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxJQUFJLEVBQUUsRUFBWCxDQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDOztnQkFuSUYsU0FBUyxTQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFOzs7O2dEQXdDM0IsTUFBTSxTQUFDLFdBQVc7Z0JBbkdaLGFBQWE7Z0JBckJoQyxVQUFVO2dCQWNWLHdCQUF3QjtnQkFGeEIsZ0JBQWdCO2dCQWZoQix3QkFBd0I7OzsyQkEwRnZCLEtBQUssU0FBQyx3QkFBd0I7NkJBUTlCLEtBQUssU0FBQyx5QkFBeUI7c0JBTS9CLEtBQUssU0FBQyxrQkFBa0I7MkJBTXhCLEtBQUssU0FBQyxlQUFlOztJQXlHeEIsNkJBQUM7Q0FBQSxBQXBJRCxJQW9JQztTQW5JWSxzQkFBc0I7OztJQU1qQywwQ0FDeUM7O0lBT3pDLDRDQUNrRDs7SUFLbEQscUNBQ1k7Ozs7O0lBV1oscUNBQTRCOzs7OztJQUM1QiwyQ0FBdUM7Ozs7O0lBQ3ZDLGtEQUFrRTs7Ozs7SUFDbEUsaURBQTZDOzs7OztJQUM3Qyx1Q0FBZ0M7Ozs7O0lBQ2hDLHVDQUFpQzs7Ozs7SUFFckIsMENBQXVDOzs7OztJQUN2Qyw2Q0FBa0M7Ozs7O0lBQ2xDLHlDQUEyQjs7Ozs7SUFDM0IsaURBQWlEOzs7OztJQUNqRCx5Q0FBaUM7Ozs7O0lBQ2pDLDBEQUEwRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgY3JlYXRlQ29udGFpbmVyLFxyXG4gIE5iQWRqdXN0YWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgTmJBZGp1c3RtZW50LFxyXG4gIE5iT3ZlcmxheVJlZixcclxuICBOYk92ZXJsYXlTZXJ2aWNlLFxyXG4gIE5iUG9zaXRpb24sXHJcbiAgTmJQb3NpdGlvbkJ1aWxkZXJTZXJ2aWNlLFxyXG4gIE5iVHJpZ2dlcixcclxuICBOYlRyaWdnZXJTdHJhdGVneSxcclxuICBOYlRyaWdnZXJTdHJhdGVneUJ1aWxkZXIsXHJcbiAgcGF0Y2gsXHJcbn0gZnJvbSAnLi4vY2RrJztcclxuaW1wb3J0IHsgTmJDb250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29udGV4dC1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5iTWVudUl0ZW0sIE5iTWVudVNlcnZpY2UgfSBmcm9tICcuLi9tZW51L21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IE5CX0RPQ1VNRU5UIH0gZnJvbSAnLi4vLi4vdGhlbWUub3B0aW9ucyc7XHJcblxyXG4vKlxyXG4gKiBGdWxsIGZlYXR1cmVkIGNvbnRleHQgbWVudSBkaXJlY3RpdmUuXHJcbiAqXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoU2hvd2Nhc2UsIGNvbnRleHQtbWVudS9jb250ZXh0LW1lbnUtc2hvd2Nhc2UuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBKdXN0IHBhc3MgbWVudSBpdGVtcyBhcnJheTpcclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8YnV0dG9uIFtuYkNvbnRleHRNZW51XT1cIml0ZW1zXCI+PC9idXR0b24+XHJcbiAqIC4uLlxyXG4gKiBpdGVtcyA9IFt7IHRpdGxlOiAnUHJvZmlsZScgfSwgeyB0aXRsZTogJ0xvZyBvdXQnIH1dO1xyXG4gKiBgYGBcclxuICogIyMjIEluc3RhbGxhdGlvblxyXG4gKlxyXG4gKiBJbXBvcnQgYE5iQ29udGV4dE1lbnVNb2R1bGVgIHRvIHlvdXIgZmVhdHVyZSBtb2R1bGUuXHJcbiAqIGBgYHRzXHJcbiAqIEBOZ01vZHVsZSh7XHJcbiAqICAgaW1wb3J0czogW1xyXG4gKiAgIFx0Ly8gLi4uXHJcbiAqICAgICBOYkNvbnRleHRNZW51TW9kdWxlLFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBQYWdlTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICogIyMjIFVzYWdlXHJcbiAqXHJcbiAqIElmIHlvdSB3YW50IHRvIGhhbmRsZSBjb250ZXh0IG1lbnUgY2xpY2tzIHlvdSBoYXZlIHRvIHBhc3MgYG5iQ29udGV4dE1lbnVUYWdgXHJcbiAqIHBhcmFtIGFuZCByZWdpc3RlciB0byBldmVudHMgdXNpbmcgTmJNZW51U2VydmljZS5cclxuICogYE5iQ29udGV4dE1lbnVgIHJlbmRlcnMgcGxhaW4gYE5iTWVudWAgaW5zaWRlLCBzb1xyXG4gKiB5b3UgaGF2ZSB0byB3b3JrIHdpdGggaXQganVzdCBsaWtlIHdpdGggYE5iTWVudWAgY29tcG9uZW50OlxyXG4gKlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKE1lbnUgaXRlbSBjbGljaywgY29udGV4dC1tZW51L2NvbnRleHQtbWVudS1jbGljay5jb21wb25lbnQpXHJcbiAqXHJcbiAqIENvbnRleHQgbWVudSBoYXMgZGlmZmVyZW50IHBsYWNlbWVudHMsIHN1Y2ggYXM6IHRvcCwgYm90dG9tLCBsZWZ0IGFuZCByaWdodFxyXG4gKiB3aGljaCBjYW4gYmUgdXNlZCBhcyBmb2xsb3dpbmc6XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGJ1dHRvbiBbbmJDb250ZXh0TWVudV09XCJpdGVtc1wiIG5iQ29udGV4dE1lbnVQbGFjZW1lbnQ9XCJyaWdodFwiPjwvYnV0dG9uPlxyXG4gKiBgYGBcclxuICpcclxuICogYGBgdHNcclxuICogaXRlbXMgPSBbeyB0aXRsZTogJ1Byb2ZpbGUnIH0sIHsgdGl0bGU6ICdMb2cgb3V0JyB9XTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEJ5IGRlZmF1bHQgY29udGV4dCBtZW51IHdpbGwgdHJ5IHRvIGFkanVzdCBpdHNlbGYgdG8gbWF4aW1hbGx5IGZpdCB2aWV3cG9ydFxyXG4gKiBhbmQgcHJvdmlkZSB0aGUgYmVzdCB1c2VyIGV4cGVyaWVuY2UuIEl0IHdpbGwgdHJ5IHRvIGNoYW5nZSBwb3NpdGlvbiBvZiB0aGUgY29udGV4dCBtZW51LlxyXG4gKiBJZiB5b3Ugd2FubmEgZGlzYWJsZSB0aGlzIGJlaGF2aW91ciBqdXN0IHNldCBpdCBmYWxzeSB2YWx1ZS5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8YnV0dG9uIFtuYkNvbnRleHRNZW51XT1cIml0ZW1zXCIgbmJDb250ZXh0TWVudUFkanVzdG1lbnQ9XCJjb3VudGVyY2xvY2t3aXNlXCI+PC9idXR0b24+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBgYGB0c1xyXG4gKiBpdGVtcyA9IFt7IHRpdGxlOiAnUHJvZmlsZScgfSwgeyB0aXRsZTogJ0xvZyBvdXQnIH1dO1xyXG4gKiBgYGBcclxuICogKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25iQ29udGV4dE1lbnVdJyB9KVxyXG5leHBvcnQgY2xhc3MgTmJDb250ZXh0TWVudURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qXHJcbiAgICogUG9zaXRpb24gd2lsbCBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlbHkgaG9zdCBlbGVtZW50IGJhc2VkIG9uIHRoZSBwb3NpdGlvbi5cclxuICAgKiBDYW4gYmUgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0LlxyXG4gICAqICovXHJcbiAgQElucHV0KCduYkNvbnRleHRNZW51UGxhY2VtZW50JylcclxuICBwb3NpdGlvbjogTmJQb3NpdGlvbiA9IE5iUG9zaXRpb24uQk9UVE9NO1xyXG5cclxuICAvKlxyXG4gICAqIENvbnRhaW5lciBwb3NpdGlvbiB3aWxsIGJlIGNoYW5nZXMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGlzIHN0cmF0ZWd5IGlmIGNvbnRhaW5lciBjYW4ndCBmaXQgdmlldyBwb3J0LlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGFueSBmYWxzeSB2YWx1ZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGF1dG9tYXRpY2FsbHkgYWRqdXN0bWVudC5cclxuICAgKiBBdmFpbGFibGUgdmFsdWVzOiBjbG9ja3dpc2UsIGNvdW50ZXJjbG9ja3dpc2UuXHJcbiAgICogKi9cclxuICBASW5wdXQoJ25iQ29udGV4dE1lbnVBZGp1c3RtZW50JylcclxuICBhZGp1c3RtZW50OiBOYkFkanVzdG1lbnQgPSBOYkFkanVzdG1lbnQuQ0xPQ0tXSVNFO1xyXG5cclxuICAvKlxyXG4gICAqIFNldCBOYk1lbnUgdGFnLCB3aGljaCBoZWxwcyBpZGVudGlmeSBtZW51IHdoZW4gd29ya2luZyB3aXRoIE5iTWVudVNlcnZpY2UuXHJcbiAgICogKi9cclxuICBASW5wdXQoJ25iQ29udGV4dE1lbnVUYWcnKVxyXG4gIHRhZzogc3RyaW5nO1xyXG5cclxuICAvKlxyXG4gICAqIEJhc2ljIG1lbnUgaXRlbXMsIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBpbnRlcm5hbCBOYk1lbnVDb21wb25lbnQuXHJcbiAgICogKi9cclxuICBASW5wdXQoJ25iQ29udGV4dE1lbnUnKVxyXG4gIHNldCBzZXRJdGVtcyhpdGVtczogTmJNZW51SXRlbVtdKSB7XHJcbiAgICB0aGlzLnZhbGlkYXRlSXRlbXMoaXRlbXMpO1xyXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCByZWY6IE5iT3ZlcmxheVJlZjtcclxuICBwcm90ZWN0ZWQgY29udGFpbmVyOiBDb21wb25lbnRSZWY8YW55PjtcclxuICBwcm90ZWN0ZWQgcG9zaXRpb25TdHJhdGVneTogTmJBZGp1c3RhYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICBwcm90ZWN0ZWQgdHJpZ2dlclN0cmF0ZWd5OiBOYlRyaWdnZXJTdHJhdGVneTtcclxuICBwcm90ZWN0ZWQgYWxpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgaXRlbXM6IE5iTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5CX0RPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBtZW51U2VydmljZTogTmJNZW51U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwb3NpdGlvbkJ1aWxkZXI6IE5iUG9zaXRpb25CdWlsZGVyU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE5iT3ZlcmxheVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5wb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCk7XHJcbiAgICB0aGlzLnJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJpZ2dlclN0cmF0ZWd5ID0gdGhpcy5jcmVhdGVUcmlnZ2VyU3RyYXRlZ3koKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZU9uVHJpZ2dlcnMoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlT25Qb3NpdGlvbkNoYW5nZSgpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVPbkl0ZW1DbGljaygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmFsaXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcih0aGlzLnJlZiwgTmJDb250ZXh0TWVudUNvbXBvbmVudCwge1xyXG4gICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcclxuICAgICAgaXRlbXM6IHRoaXMuaXRlbXMsXHJcbiAgICAgIHRhZzogdGhpcy50YWcsXHJcbiAgICB9LCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgdGhpcy5yZWYuZGV0YWNoKCk7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IG51bGw7XHJcbiAgfVxyXG5cclxuICB0b2dnbGUoKSB7XHJcbiAgICBpZiAodGhpcy5yZWYgJiYgdGhpcy5yZWYuaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLmhpZGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKTogTmJBZGp1c3RhYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbkJ1aWxkZXJcclxuICAgICAgLmNvbm5lY3RlZFRvKHRoaXMuaG9zdFJlZilcclxuICAgICAgLnBvc2l0aW9uKHRoaXMucG9zaXRpb24pXHJcbiAgICAgIC5hZGp1c3RtZW50KHRoaXMuYWRqdXN0bWVudCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgY3JlYXRlVHJpZ2dlclN0cmF0ZWd5KCk6IE5iVHJpZ2dlclN0cmF0ZWd5IHtcclxuICAgIHJldHVybiBuZXcgTmJUcmlnZ2VyU3RyYXRlZ3lCdWlsZGVyKClcclxuICAgICAgLmRvY3VtZW50KHRoaXMuZG9jdW1lbnQpXHJcbiAgICAgIC50cmlnZ2VyKE5iVHJpZ2dlci5DTElDSylcclxuICAgICAgLmhvc3QodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgIC5jb250YWluZXIoKCkgPT4gdGhpcy5jb250YWluZXIpXHJcbiAgICAgIC5idWlsZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHN1YnNjcmliZU9uUG9zaXRpb25DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VcclxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwb3NpdGlvbjogTmJQb3NpdGlvbikgPT4gcGF0Y2godGhpcy5jb250YWluZXIsIHsgcG9zaXRpb24gfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHN1YnNjcmliZU9uVHJpZ2dlcnMoKSB7XHJcbiAgICB0aGlzLnRyaWdnZXJTdHJhdGVneS5zaG93JC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvdygpKTtcclxuICAgIHRoaXMudHJpZ2dlclN0cmF0ZWd5LmhpZGUkLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oaWRlKCkpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBOYk1lbnVDb21wb25lbnQgd2lsbCBjcmFzaCBpZiBkb24ndCBwYXNzIG1lbnUgaXRlbXMgdG8gaXQuXHJcbiAgICogU28sIHdlIGp1c3QgdmFsaWRhdGluZyB0aGVtIGFuZCB0aHJvdyBjdXN0b20gb2J2aW91cyBlcnJvci5cclxuICAgKiAqL1xyXG4gIHByaXZhdGUgdmFsaWRhdGVJdGVtcyhpdGVtczogTmJNZW51SXRlbVtdKSB7XHJcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoYExpc3Qgb2YgbWVudSBpdGVtcyBleHBlY3RlZCwgYnV0IGdpdmVuOiAke2l0ZW1zfWApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZU9uSXRlbUNsaWNrKCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5vbkl0ZW1DbGljaygpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSxcclxuICAgICAgICBmaWx0ZXIoKHsgdGFnIH0pID0+IHRhZyA9PT0gdGhpcy50YWcpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oaWRlKCkpO1xyXG4gIH1cclxufVxyXG4iXX0=