UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

483 lines • 29.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ChangeDetectorRef, EventEmitter, HostBinding, Input, Output, ContentChild, forwardRef, } from '@angular/core'; import { AnimationBuilder, useAnimation } from '@angular/animations'; import { growVerOut, growVerIn } from '../animations/main'; import { IgxExpansionPanelBodyComponent } from './expansion-panel-body.component'; import { IgxExpansionPanelHeaderComponent } from './expansion-panel-header.component'; import { IGX_EXPANSION_PANEL_COMPONENT } from './expansion-panel.common'; /** @type {?} */ var NEXT_ID = 0; /** * @record */ export function AnimationSettings() { } if (false) { /** @type {?} */ AnimationSettings.prototype.openAnimation; /** @type {?} */ AnimationSettings.prototype.closeAnimation; } var IgxExpansionPanelComponent = /** @class */ (function () { function IgxExpansionPanelComponent(cdr, builder) { this.cdr = cdr; this.builder = builder; /** * Sets/gets the animation settings of the expansion panel component * Open and Close animation should be passed * * Get * ```typescript * const currentAnimations = this.panel.animationSettings; * ``` * Set * ```typescript * import { slideInLeft, slideOutRight } from 'igniteui-angular'; * ... * this.panel.animationsSettings = { * openAnimation: slideInLeft, * closeAnimation: slideOutRight * }; * ``` * or via template * ```typescript * import { slideInLeft, slideOutRight } from 'igniteui-angular'; * ... * myCustomAnimationObject = { * openAnimation: slideInLeft, * closeAnimation: slideOutRight * }; * ```html * <igx-expansion-panel [animationSettings]='myCustomAnimationObject'> * ... * </igx-expansion-panel> * ``` */ this.animationSettings = { openAnimation: growVerIn, closeAnimation: growVerOut }; /** * Sets/gets the `id` of the expansion panel component. * If not set, `id` will have value `"igx-expansion-panel-0"`; * ```html * <igx-expansion-panel id = "my-first-expansion-panel"></igx-expansion-panel> * ``` * ```typescript * let panelId = this.panel.id; * ``` * \@memberof IgxExpansionPanelComponent */ this.id = "igx-expansion-panel-" + NEXT_ID++; /** * @hidden */ this.cssClass = 'igx-expansion-panel'; /** * Gets/sets whether the component is collapsed (its content is hidden) * Get * ```typescript * const myPanelState: boolean = this.panel.collapsed; * ``` * Set * ```html * this.panel.collapsed = true; * ``` */ this.collapsed = true; /** * Emitted when the expansion panel finishes collapsing * ```typescript * handleCollapsed(event: { * panel: IgxExpansionPanelComponent, * event: Event * }) * ``` * ```html * <igx-expansion-panel (onCollapsed)="handleCollapsed($event)"> * ... * </igx-expansion-panel> * ``` */ this.onCollapsed = new EventEmitter(); /** * Emitted when the expansion panel finishes expanding * ```typescript * handleExpanded(event: { * panel: IgxExpansionPanelComponent, * event: Event * }) * ``` * ```html * <igx-expansion-panel (onExpanded)="handleExpanded($event)"> * ... * </igx-expansion-panel> * ``` */ this.onExpanded = new EventEmitter(); } Object.defineProperty(IgxExpansionPanelComponent.prototype, "headerId", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this.header ? this.id + "-header" : ''; }, enumerable: true, configurable: true }); /** * @private * @param {?} cb * @return {?} */ IgxExpansionPanelComponent.prototype.playOpenAnimation = /** * @private * @param {?} cb * @return {?} */ function (cb) { if (!this.body) { // if not body element is passed, there is nothing to animate return; } /** @type {?} */ var animation = useAnimation(this.animationSettings.openAnimation); /** @type {?} */ var animationBuilder = this.builder.build(animation); /** @type {?} */ var openAnimationPlayer = animationBuilder.create(this.body.element.nativeElement); openAnimationPlayer.onDone(function () { cb(); openAnimationPlayer.reset(); }); openAnimationPlayer.play(); }; /** * @private * @param {?} cb * @return {?} */ IgxExpansionPanelComponent.prototype.playCloseAnimation = /** * @private * @param {?} cb * @return {?} */ function (cb) { if (!this.body) { // if not body element is passed, there is nothing to animate return; } /** @type {?} */ var animation = useAnimation(this.animationSettings.closeAnimation); /** @type {?} */ var animationBuilder = this.builder.build(animation); /** @type {?} */ var closeAnimationPlayer = animationBuilder.create(this.body.element.nativeElement); closeAnimationPlayer.onDone(function () { cb(); closeAnimationPlayer.reset(); }); closeAnimationPlayer.play(); }; /** * Collapses the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.collapse($event)">Collpase Panel</button> * ``` */ /** * Collapses the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.collapse($event)">Collpase Panel</button> * ``` * @param {?=} evt * @return {?} */ IgxExpansionPanelComponent.prototype.collapse = /** * Collapses the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.collapse($event)">Collpase Panel</button> * ``` * @param {?=} evt * @return {?} */ function (evt) { var _this = this; if (this.collapsed) { // If expansion panel is already collapsed, do nothing return; } this.playCloseAnimation(function () { _this.onCollapsed.emit({ event: evt, panel: _this }); _this.collapsed = true; }); }; /** * Expands the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.expand($event)">Expand Panel</button> * ``` */ /** * Expands the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.expand($event)">Expand Panel</button> * ``` * @param {?=} evt * @return {?} */ IgxExpansionPanelComponent.prototype.expand = /** * Expands the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.expand($event)">Expand Panel</button> * ``` * @param {?=} evt * @return {?} */ function (evt) { var _this = this; if (!this.collapsed) { // If the panel is already opened, do nothing return; } this.collapsed = false; this.cdr.detectChanges(); this.playOpenAnimation(function () { _this.onExpanded.emit({ event: evt, panel: _this }); }); }; /** * Toggles the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.toggle($event)">Expand Panel</button> * ``` */ /** * Toggles the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.toggle($event)">Expand Panel</button> * ``` * @param {?=} evt * @return {?} */ IgxExpansionPanelComponent.prototype.toggle = /** * Toggles the panel * * ```html * <igx-expansion-panel #myPanel> * ... * </igx-expansion-panel> * <button (click)="myPanel.toggle($event)">Expand Panel</button> * ``` * @param {?=} evt * @return {?} */ function (evt) { if (this.collapsed) { this.open(evt); } else { this.close(evt); } }; /** * @param {?=} evt * @return {?} */ IgxExpansionPanelComponent.prototype.open = /** * @param {?=} evt * @return {?} */ function (evt) { this.expand(evt); }; /** * @param {?=} evt * @return {?} */ IgxExpansionPanelComponent.prototype.close = /** * @param {?=} evt * @return {?} */ function (evt) { this.collapse(evt); }; IgxExpansionPanelComponent.decorators = [ { type: Component, args: [{ selector: 'igx-expansion-panel', template: "<ng-content select=\"igx-expansion-panel-header\"></ng-content>\n<ng-content *ngIf=\"!collapsed\" select=\"igx-expansion-panel-body\"></ng-content>\n", providers: [{ provide: IGX_EXPANSION_PANEL_COMPONENT, useExisting: IgxExpansionPanelComponent }] }] } ]; /** @nocollapse */ IgxExpansionPanelComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef }, { type: AnimationBuilder } ]; }; IgxExpansionPanelComponent.propDecorators = { animationSettings: [{ type: Input }], id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }], cssClass: [{ type: HostBinding, args: ['class.igx-expansion-panel',] }], collapsed: [{ type: Input }], onCollapsed: [{ type: Output }], onExpanded: [{ type: Output }], body: [{ type: ContentChild, args: [forwardRef(function () { return IgxExpansionPanelBodyComponent; }), { read: forwardRef(function () { return IgxExpansionPanelBodyComponent; }) },] }], header: [{ type: ContentChild, args: [forwardRef(function () { return IgxExpansionPanelHeaderComponent; }), { read: forwardRef(function () { return IgxExpansionPanelHeaderComponent; }) },] }] }; return IgxExpansionPanelComponent; }()); export { IgxExpansionPanelComponent }; if (false) { /** * Sets/gets the animation settings of the expansion panel component * Open and Close animation should be passed * * Get * ```typescript * const currentAnimations = this.panel.animationSettings; * ``` * Set * ```typescript * import { slideInLeft, slideOutRight } from 'igniteui-angular'; * ... * this.panel.animationsSettings = { * openAnimation: slideInLeft, * closeAnimation: slideOutRight * }; * ``` * or via template * ```typescript * import { slideInLeft, slideOutRight } from 'igniteui-angular'; * ... * myCustomAnimationObject = { * openAnimation: slideInLeft, * closeAnimation: slideOutRight * }; * ```html * <igx-expansion-panel [animationSettings]='myCustomAnimationObject'> * ... * </igx-expansion-panel> * ``` * @type {?} */ IgxExpansionPanelComponent.prototype.animationSettings; /** * Sets/gets the `id` of the expansion panel component. * If not set, `id` will have value `"igx-expansion-panel-0"`; * ```html * <igx-expansion-panel id = "my-first-expansion-panel"></igx-expansion-panel> * ``` * ```typescript * let panelId = this.panel.id; * ``` * \@memberof IgxExpansionPanelComponent * @type {?} */ IgxExpansionPanelComponent.prototype.id; /** * @hidden * @type {?} */ IgxExpansionPanelComponent.prototype.cssClass; /** * Gets/sets whether the component is collapsed (its content is hidden) * Get * ```typescript * const myPanelState: boolean = this.panel.collapsed; * ``` * Set * ```html * this.panel.collapsed = true; * ``` * @type {?} */ IgxExpansionPanelComponent.prototype.collapsed; /** * Emitted when the expansion panel finishes collapsing * ```typescript * handleCollapsed(event: { * panel: IgxExpansionPanelComponent, * event: Event * }) * ``` * ```html * <igx-expansion-panel (onCollapsed)="handleCollapsed($event)"> * ... * </igx-expansion-panel> * ``` * @type {?} */ IgxExpansionPanelComponent.prototype.onCollapsed; /** * Emitted when the expansion panel finishes expanding * ```typescript * handleExpanded(event: { * panel: IgxExpansionPanelComponent, * event: Event * }) * ``` * ```html * <igx-expansion-panel (onExpanded)="handleExpanded($event)"> * ... * </igx-expansion-panel> * ``` * @type {?} */ IgxExpansionPanelComponent.prototype.onExpanded; /** * @hidden * @type {?} */ IgxExpansionPanelComponent.prototype.body; /** * @hidden * @type {?} */ IgxExpansionPanelComponent.prototype.header; /** * @type {?} * @private */ IgxExpansionPanelComponent.prototype.cdr; /** * @type {?} * @private */ IgxExpansionPanelComponent.prototype.builder; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFFWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBOEIsWUFBWSxFQUErQixNQUFNLHFCQUFxQixDQUFDO0FBQzlILE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEYsT0FBTyxFQUFFLDZCQUE2QixFQUFtRCxNQUFNLDBCQUEwQixDQUFDOztJQUV0SCxPQUFPLEdBQUcsQ0FBQzs7OztBQUVmLHVDQUdDOzs7SUFGRywwQ0FBMEM7O0lBQzFDLDJDQUEyQzs7QUFFL0M7SUF1SEksb0NBQW9CLEdBQXNCLEVBQVUsT0FBeUI7UUFBekQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFoRnRFLHNCQUFpQixHQUFzQjtZQUMxQyxhQUFhLEVBQUUsU0FBUztZQUN4QixjQUFjLEVBQUUsVUFBVTtTQUM3QixDQUFDOzs7Ozs7Ozs7Ozs7UUFlSyxPQUFFLEdBQUcseUJBQXVCLE9BQU8sRUFBSSxDQUFDOzs7O1FBTXhDLGFBQVEsR0FBRyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O1FBY2pDLGNBQVMsR0FBRyxJQUFJLENBQUM7Ozs7Ozs7Ozs7Ozs7OztRQWlCakIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O1FBaUIzRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFRZ0IsQ0FBQztJQUhsRixzQkFBVyxnREFBUTtRQUhuQjs7V0FFRzs7Ozs7UUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUksSUFBSSxDQUFDLEVBQUUsWUFBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEQsQ0FBQzs7O09BQUE7Ozs7OztJQWdCTyxzREFBaUI7Ozs7O0lBQXpCLFVBQTBCLEVBQWM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSw2REFBNkQ7WUFDM0UsT0FBTztTQUNWOztZQUNLLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQzs7WUFDOUQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDOztZQUNoRCxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBRXBGLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztZQUN2QixFQUFFLEVBQUUsQ0FBQztZQUNMLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7Ozs7O0lBRU8sdURBQWtCOzs7OztJQUExQixVQUEyQixFQUFjO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsNkRBQTZEO1lBQzNFLE9BQU87U0FDVjs7WUFDSyxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7O1lBQy9ELGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQzs7WUFDaEQsb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNyRixvQkFBb0IsQ0FBQyxNQUFNLENBQUM7WUFDeEIsRUFBRSxFQUFFLENBQUM7WUFDTCxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7Ozs7Ozs7Ozs7Ozs7SUFDSCw2Q0FBUTs7Ozs7Ozs7Ozs7O0lBQVIsVUFBUyxHQUFXO1FBQXBCLGlCQVVDO1FBVEcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsc0RBQXNEO1lBQ3hFLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FDbkI7WUFDSSxLQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUksRUFBRSxDQUFDLENBQUM7WUFDbkQsS0FBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHOzs7Ozs7Ozs7Ozs7O0lBQ0gsMkNBQU07Ozs7Ozs7Ozs7OztJQUFOLFVBQU8sR0FBVztRQUFsQixpQkFXQztRQVZHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsNkNBQTZDO1lBQ2hFLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUNsQjtZQUNJLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7Ozs7Ozs7Ozs7Ozs7SUFDSCwyQ0FBTTs7Ozs7Ozs7Ozs7O0lBQU4sVUFBTyxHQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEI7YUFBTTtZQUNILElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkI7SUFDTCxDQUFDOzs7OztJQUVELHlDQUFJOzs7O0lBQUosVUFBSyxHQUFXO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDOzs7OztJQUNELDBDQUFLOzs7O0lBQUwsVUFBTSxHQUFXO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDOztnQkF6T0osU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLGlLQUE2QztvQkFDN0MsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFLENBQUM7aUJBQ25HOzs7O2dCQXpCRyxpQkFBaUI7Z0JBU1osZ0JBQWdCOzs7b0NBa0RwQixLQUFLO3FCQWlCTCxXQUFXLFNBQUMsU0FBUyxjQUNyQixLQUFLOzJCQU1MLFdBQVcsU0FBQywyQkFBMkI7NEJBY3ZDLEtBQUs7OEJBaUJMLE1BQU07NkJBaUJOLE1BQU07dUJBY04sWUFBWSxTQUFDLFVBQVUsQ0FBQyxjQUFNLE9BQUEsOEJBQThCLEVBQTlCLENBQThCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLDhCQUE4QixFQUE5QixDQUE4QixDQUFDLEVBQUU7eUJBTXpILFlBQVksU0FBQyxVQUFVLENBQUMsY0FBTSxPQUFBLGdDQUFnQyxFQUFoQyxDQUFnQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLGNBQU0sT0FBQSxnQ0FBZ0MsRUFBaEMsQ0FBZ0MsQ0FBQyxFQUFFOztJQXlHbEksaUNBQUM7Q0FBQSxBQTNPRCxJQTJPQztTQXRPWSwwQkFBMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQ25DLHVEQUlFOzs7Ozs7Ozs7Ozs7O0lBYUYsd0NBRStDOzs7OztJQUsvQyw4Q0FDd0M7Ozs7Ozs7Ozs7Ozs7SUFheEMsK0NBQ3dCOzs7Ozs7Ozs7Ozs7Ozs7O0lBZ0J4QixpREFDa0U7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQmxFLGdEQUNpRTs7Ozs7SUFhakUsMENBQzRDOzs7OztJQUs1Qyw0Q0FDZ0Q7Ozs7O0lBWnBDLHlDQUE4Qjs7Ozs7SUFBRSw2Q0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEsIHVzZUFuaW1hdGlvbiwgQW5pbWF0aW9uQW5pbWF0ZVJlZk1ldGFkYXRhIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBncm93VmVyT3V0LCBncm93VmVySW4gfSBmcm9tICcuLi9hbmltYXRpb25zL21haW4nO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi9leHBhbnNpb24tcGFuZWwtYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElHWF9FWFBBTlNJT05fUEFORUxfQ09NUE9ORU5ULCBJZ3hFeHBhbnNpb25QYW5lbEJhc2UsIElFeHBhbnNpb25QYW5lbEV2ZW50QXJncyB9IGZyb20gJy4vZXhwYW5zaW9uLXBhbmVsLmNvbW1vbic7XG5cbmxldCBORVhUX0lEID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgb3BlbkFuaW1hdGlvbjogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGE7XG4gICAgY2xvc2VBbmltYXRpb246IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhO1xufVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhwYW5zaW9uLXBhbmVsJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJR1hfRVhQQU5TSU9OX1BBTkVMX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IH1dXG59KVxuZXhwb3J0IGNsYXNzIElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgSWd4RXhwYW5zaW9uUGFuZWxCYXNlIHtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYW5pbWF0aW9uIHNldHRpbmdzIG9mIHRoZSBleHBhbnNpb24gcGFuZWwgY29tcG9uZW50XG4gICAgICogT3BlbiBhbmQgQ2xvc2UgYW5pbWF0aW9uIHNob3VsZCBiZSBwYXNzZWRcbiAgICAgKlxuICAgICAqIEdldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY3VycmVudEFuaW1hdGlvbnMgPSB0aGlzLnBhbmVsLmFuaW1hdGlvblNldHRpbmdzO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaW1wb3J0IHsgc2xpZGVJbkxlZnQsIHNsaWRlT3V0UmlnaHQgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyJztcbiAgICAgKiAgLi4uXG4gICAgICogIHRoaXMucGFuZWwuYW5pbWF0aW9uc1NldHRpbmdzID0ge1xuICAgICAqICAgICAgb3BlbkFuaW1hdGlvbjogc2xpZGVJbkxlZnQsXG4gICAgICogICAgICBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRSaWdodFxuICAgICAqIH07XG4gICAgICogYGBgXG4gICAgICogb3IgdmlhIHRlbXBsYXRlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBpbXBvcnQgeyBzbGlkZUluTGVmdCwgc2xpZGVPdXRSaWdodCB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXInO1xuICAgICAqICAuLi5cbiAgICAgKiAgbXlDdXN0b21BbmltYXRpb25PYmplY3QgPSB7XG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiBzbGlkZUluTGVmdCxcbiAgICAgKiAgICAgIGNsb3NlQW5pbWF0aW9uOiBzbGlkZU91dFJpZ2h0XG4gICAgICogfTtcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsIFthbmltYXRpb25TZXR0aW5nc109J215Q3VzdG9tQW5pbWF0aW9uT2JqZWN0Jz5cbiAgICAgKiAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbmltYXRpb25TZXR0aW5nczogQW5pbWF0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIG9wZW5BbmltYXRpb246IGdyb3dWZXJJbixcbiAgICAgICAgY2xvc2VBbmltYXRpb246IGdyb3dWZXJPdXRcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBleHBhbnNpb24gcGFuZWwgY29tcG9uZW50LlxuICAgICAqIElmIG5vdCBzZXQsIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1leHBhbnNpb24tcGFuZWwtMFwiYDtcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1leHBhbnNpb24tcGFuZWwgaWQgPSBcIm15LWZpcnN0LWV4cGFuc2lvbi1wYW5lbFwiPjwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHBhbmVsSWQgPSAgdGhpcy5wYW5lbC5pZDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1leHBhbnNpb24tcGFuZWwtJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leHBhbnNpb24tcGFuZWwnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtZXhwYW5zaW9uLXBhbmVsJztcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgY29sbGFwc2VkIChpdHMgY29udGVudCBpcyBoaWRkZW4pXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBteVBhbmVsU3RhdGU6IGJvb2xlYW4gPSB0aGlzLnBhbmVsLmNvbGxhcHNlZDtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGBodG1sXG4gICAgICogIHRoaXMucGFuZWwuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2xsYXBzZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBleHBhbnNpb24gcGFuZWwgZmluaXNoZXMgY29sbGFwc2luZ1xuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaGFuZGxlQ29sbGFwc2VkKGV2ZW50OiB7XG4gICAgICogIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCxcbiAgICAgKiAgZXZlbnQ6IEV2ZW50XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsIChvbkNvbGxhcHNlZCk9XCJoYW5kbGVDb2xsYXBzZWQoJGV2ZW50KVwiPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Db2xsYXBzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElFeHBhbnNpb25QYW5lbEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZXhwYW5zaW9uIHBhbmVsIGZpbmlzaGVzIGV4cGFuZGluZ1xuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaGFuZGxlRXhwYW5kZWQoZXZlbnQ6IHtcbiAgICAgKiAgcGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50LFxuICAgICAqICBldmVudDogRXZlbnRcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwgKG9uRXhwYW5kZWQpPVwiaGFuZGxlRXhwYW5kZWQoJGV2ZW50KVwiPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25FeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVySWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlciA/IGAke3RoaXMuaWR9LWhlYWRlcmAgOiAnJztcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQpLCB7IHJlYWQ6IGZvcndhcmRSZWYoKCkgPT4gSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50KSB9KVxuICAgIHB1YmxpYyBib2R5OiBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50KSwgeyByZWFkOiBmb3J3YXJkUmVmKCgpID0+IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50KSB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50O1xuXG5cbiAgICBwcml2YXRlIHBsYXlPcGVuQW5pbWF0aW9uKGNiOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5ib2R5KSB7IC8vIGlmIG5vdCBib2R5IGVsZW1lbnQgaXMgcGFzc2VkLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFuaW1hdGVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmltYXRpb24gPSB1c2VBbmltYXRpb24odGhpcy5hbmltYXRpb25TZXR0aW5ncy5vcGVuQW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChhbmltYXRpb24pO1xuICAgICAgICBjb25zdCBvcGVuQW5pbWF0aW9uUGxheWVyID0gYW5pbWF0aW9uQnVpbGRlci5jcmVhdGUodGhpcy5ib2R5LmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgb3BlbkFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIG9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb3BlbkFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5Q2xvc2VBbmltYXRpb24oY2I6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvZHkpIHsgLy8gaWYgbm90IGJvZHkgZWxlbWVudCBpcyBwYXNzZWQsIHRoZXJlIGlzIG5vdGhpbmcgdG8gYW5pbWF0ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IHVzZUFuaW1hdGlvbih0aGlzLmFuaW1hdGlvblNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChhbmltYXRpb24pO1xuICAgICAgICBjb25zdCBjbG9zZUFuaW1hdGlvblBsYXllciA9IGFuaW1hdGlvbkJ1aWxkZXIuY3JlYXRlKHRoaXMuYm9keS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjbG9zZUFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsb3NlQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC5jb2xsYXBzZSgkZXZlbnQpXCI+Q29sbHBhc2UgUGFuZWw8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2xsYXBzZShldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHsgLy8gSWYgZXhwYW5zaW9uIHBhbmVsIGlzIGFscmVhZHkgY29sbGFwc2VkLCBkbyBub3RoaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNlZC5lbWl0KHsgZXZlbnQ6IGV2dCwgcGFuZWw6IHRoaXMgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC5leHBhbmQoJGV2ZW50KVwiPkV4cGFuZCBQYW5lbDwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cGFuZChldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7IC8vIElmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IG9wZW5lZCwgZG8gbm90aGluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXhwYW5kZWQuZW1pdCh7IGV2ZW50OiBldnQsIHBhbmVsOiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC50b2dnbGUoJGV2ZW50KVwiPkV4cGFuZCBQYW5lbDwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRvZ2dsZShldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbihldnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZShldnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbihldnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLmV4cGFuZChldnQpO1xuICAgIH1cbiAgICBjbG9zZShldnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlKGV2dCk7XG4gICAgfVxuXG59XG4iXX0=