igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
483 lines • 29.8 kB
JavaScript
/**
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFFWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBOEIsWUFBWSxFQUErQixNQUFNLHFCQUFxQixDQUFDO0FBQzlILE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEYsT0FBTyxFQUFFLDZCQUE2QixFQUFtRCxNQUFNLDBCQUEwQixDQUFDOztJQUV0SCxPQUFPLEdBQUcsQ0FBQzs7OztBQUVmLHVDQUdDOzs7SUFGRywwQ0FBMEM7O0lBQzFDLDJDQUEyQzs7QUFFL0M7SUF1SEksb0NBQW9CLEdBQXNCLEVBQVUsT0FBeUI7UUFBekQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFoRnRFLHNCQUFpQixHQUFzQjtZQUMxQyxhQUFhLEVBQUUsU0FBUztZQUN4QixjQUFjLEVBQUUsVUFBVTtTQUM3QixDQUFDOzs7Ozs7Ozs7Ozs7UUFlSyxPQUFFLEdBQUcseUJBQXVCLE9BQU8sRUFBSSxDQUFDOzs7O1FBTXhDLGFBQVEsR0FBRyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O1FBY2pDLGNBQVMsR0FB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QUFJLEVBQUUsVUFBVSxDQUFDLGNBQU0sT0FBQSxnQ0FBZ0MsRUFBaEMsQ0FBZ0MsQ0FBQyxFQUFFOztJQXlHbEksaUNBQUM7Q0FBQSxBQTNPRCxJQTJPQztTQXRPWSwwQkFBMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQ25DLHVEQUlFOzs7Ozs7Ozs7Ozs7O0lBYUYsd0NBRStDOzs7OztJQUsvQyw4Q0FDd0M7Ozs7Ozs7Ozs7Ozs7SUFheEMsK0NBQ3dCOzs7Ozs7Ozs7Ozs7Ozs7O0lBZ0J4QixpREFDa0U7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQmxFLGdEQUNpRTs7Ozs7SUFhakUsMENBQzRDOzs7OztJQUs1Qyw0Q0FDZ0Q7Ozs7O0lBWnBDLHlDQUE4Qjs7Ozs7SUFBRSw2Q0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEsIHVzZUFuaW1hdGlvbiwgQW5pbWF0aW9uQW5pbWF0ZVJlZk1ldGFkYXRhIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBncm93VmVyT3V0LCBncm93VmVySW4gfSBmcm9tICcuLi9hbmltYXRpb25zL21haW4nO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi9leHBhbnNpb24tcGFuZWwtYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElHWF9FWFBBTlNJT05fUEFORUxfQ09NUE9ORU5ULCBJZ3hFeHBhbnNpb25QYW5lbEJhc2UsIElFeHBhbnNpb25QYW5lbEV2ZW50QXJncyB9IGZyb20gJy4vZXhwYW5zaW9uLXBhbmVsLmNvbW1vbic7XG5cbmxldCBORVhUX0lEID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgb3BlbkFuaW1hdGlvbjogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGE7XG4gICAgY2xvc2VBbmltYXRpb246IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhO1xufVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhwYW5zaW9uLXBhbmVsJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJR1hfRVhQQU5TSU9OX1BBTkVMX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IH1dXG59KVxuZXhwb3J0IGNsYXNzIElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgSWd4RXhwYW5zaW9uUGFuZWxCYXNlIHtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYW5pbWF0aW9uIHNldHRpbmdzIG9mIHRoZSBleHBhbnNpb24gcGFuZWwgY29tcG9uZW50XG4gICAgICogT3BlbiBhbmQgQ2xvc2UgYW5pbWF0aW9uIHNob3VsZCBiZSBwYXNzZWRcbiAgICAgKlxuICAgICAqIEdldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY3VycmVudEFuaW1hdGlvbnMgPSB0aGlzLnBhbmVsLmFuaW1hdGlvblNldHRpbmdzO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaW1wb3J0IHsgc2xpZGVJbkxlZnQsIHNsaWRlT3V0UmlnaHQgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyJztcbiAgICAgKiAgLi4uXG4gICAgICogIHRoaXMucGFuZWwuYW5pbWF0aW9uc1NldHRpbmdzID0ge1xuICAgICAqICAgICAgb3BlbkFuaW1hdGlvbjogc2xpZGVJbkxlZnQsXG4gICAgICogICAgICBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRSaWdodFxuICAgICAqIH07XG4gICAgICogYGBgXG4gICAgICogb3IgdmlhIHRlbXBsYXRlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBpbXBvcnQgeyBzbGlkZUluTGVmdCwgc2xpZGVPdXRSaWdodCB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXInO1xuICAgICAqICAuLi5cbiAgICAgKiAgbXlDdXN0b21BbmltYXRpb25PYmplY3QgPSB7XG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiBzbGlkZUluTGVmdCxcbiAgICAgKiAgICAgIGNsb3NlQW5pbWF0aW9uOiBzbGlkZU91dFJpZ2h0XG4gICAgICogfTtcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsIFthbmltYXRpb25TZXR0aW5nc109J215Q3VzdG9tQW5pbWF0aW9uT2JqZWN0Jz5cbiAgICAgKiAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbmltYXRpb25TZXR0aW5nczogQW5pbWF0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIG9wZW5BbmltYXRpb246IGdyb3dWZXJJbixcbiAgICAgICAgY2xvc2VBbmltYXRpb246IGdyb3dWZXJPdXRcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBleHBhbnNpb24gcGFuZWwgY29tcG9uZW50LlxuICAgICAqIElmIG5vdCBzZXQsIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1leHBhbnNpb24tcGFuZWwtMFwiYDtcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1leHBhbnNpb24tcGFuZWwgaWQgPSBcIm15LWZpcnN0LWV4cGFuc2lvbi1wYW5lbFwiPjwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHBhbmVsSWQgPSAgdGhpcy5wYW5lbC5pZDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1leHBhbnNpb24tcGFuZWwtJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leHBhbnNpb24tcGFuZWwnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtZXhwYW5zaW9uLXBhbmVsJztcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgY29sbGFwc2VkIChpdHMgY29udGVudCBpcyBoaWRkZW4pXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBteVBhbmVsU3RhdGU6IGJvb2xlYW4gPSB0aGlzLnBhbmVsLmNvbGxhcHNlZDtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGBodG1sXG4gICAgICogIHRoaXMucGFuZWwuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2xsYXBzZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBleHBhbnNpb24gcGFuZWwgZmluaXNoZXMgY29sbGFwc2luZ1xuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaGFuZGxlQ29sbGFwc2VkKGV2ZW50OiB7XG4gICAgICogIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCxcbiAgICAgKiAgZXZlbnQ6IEV2ZW50XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsIChvbkNvbGxhcHNlZCk9XCJoYW5kbGVDb2xsYXBzZWQoJGV2ZW50KVwiPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Db2xsYXBzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElFeHBhbnNpb25QYW5lbEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZXhwYW5zaW9uIHBhbmVsIGZpbmlzaGVzIGV4cGFuZGluZ1xuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaGFuZGxlRXhwYW5kZWQoZXZlbnQ6IHtcbiAgICAgKiAgcGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50LFxuICAgICAqICBldmVudDogRXZlbnRcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwgKG9uRXhwYW5kZWQpPVwiaGFuZGxlRXhwYW5kZWQoJGV2ZW50KVwiPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25FeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGVhZGVySWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlciA/IGAke3RoaXMuaWR9LWhlYWRlcmAgOiAnJztcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQpLCB7IHJlYWQ6IGZvcndhcmRSZWYoKCkgPT4gSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50KSB9KVxuICAgIHB1YmxpYyBib2R5OiBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50KSwgeyByZWFkOiBmb3J3YXJkUmVmKCgpID0+IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50KSB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50O1xuXG5cbiAgICBwcml2YXRlIHBsYXlPcGVuQW5pbWF0aW9uKGNiOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5ib2R5KSB7IC8vIGlmIG5vdCBib2R5IGVsZW1lbnQgaXMgcGFzc2VkLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFuaW1hdGVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmltYXRpb24gPSB1c2VBbmltYXRpb24odGhpcy5hbmltYXRpb25TZXR0aW5ncy5vcGVuQW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChhbmltYXRpb24pO1xuICAgICAgICBjb25zdCBvcGVuQW5pbWF0aW9uUGxheWVyID0gYW5pbWF0aW9uQnVpbGRlci5jcmVhdGUodGhpcy5ib2R5LmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgb3BlbkFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIG9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb3BlbkFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5Q2xvc2VBbmltYXRpb24oY2I6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvZHkpIHsgLy8gaWYgbm90IGJvZHkgZWxlbWVudCBpcyBwYXNzZWQsIHRoZXJlIGlzIG5vdGhpbmcgdG8gYW5pbWF0ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IHVzZUFuaW1hdGlvbih0aGlzLmFuaW1hdGlvblNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChhbmltYXRpb24pO1xuICAgICAgICBjb25zdCBjbG9zZUFuaW1hdGlvblBsYXllciA9IGFuaW1hdGlvbkJ1aWxkZXIuY3JlYXRlKHRoaXMuYm9keS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjbG9zZUFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsb3NlQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC5jb2xsYXBzZSgkZXZlbnQpXCI+Q29sbHBhc2UgUGFuZWw8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2xsYXBzZShldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHsgLy8gSWYgZXhwYW5zaW9uIHBhbmVsIGlzIGFscmVhZHkgY29sbGFwc2VkLCBkbyBub3RoaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNlZC5lbWl0KHsgZXZlbnQ6IGV2dCwgcGFuZWw6IHRoaXMgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC5leHBhbmQoJGV2ZW50KVwiPkV4cGFuZCBQYW5lbDwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cGFuZChldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7IC8vIElmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IG9wZW5lZCwgZG8gbm90aGluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXhwYW5kZWQuZW1pdCh7IGV2ZW50OiBldnQsIHBhbmVsOiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC50b2dnbGUoJGV2ZW50KVwiPkV4cGFuZCBQYW5lbDwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRvZ2dsZShldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbihldnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZShldnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbihldnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLmV4cGFuZChldnQpO1xuICAgIH1cbiAgICBjbG9zZShldnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlKGV2dCk7XG4gICAgfVxuXG59XG4iXX0=