UNPKG

igniteui-angular

Version:

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

382 lines • 25.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ChangeDetectorRef, ElementRef, HostBinding, HostListener, Input, Host, EventEmitter, Output, ContentChild, Inject } from '@angular/core'; import { IgxExpansionPanelIconDirective } from './expansion-panel.directives'; import { IGX_EXPANSION_PANEL_COMPONENT } from './expansion-panel.common'; /** @enum {string} */ var ICON_POSITION = { LEFT: 'left', NONE: 'none', RIGHT: 'right', }; export { ICON_POSITION }; var IgxExpansionPanelHeaderComponent = /** @class */ (function () { function IgxExpansionPanelHeaderComponent(panel, cdr, elementRef) { this.panel = panel; this.cdr = cdr; this.elementRef = elementRef; // properties section this._iconTemplate = false; /** * Sets/gets the `id` of the expansion panel header. * ```typescript * let panelHeaderId = this.panel.header.id; * ``` * \@memberof IgxExpansionPanelComponent */ this.id = ''; /** * Gets/sets the `aria-level` attribute of the header * Get * ```typescript * const currentAriaLevel = this.panel.header.lv; * ``` * Set * ```typescript * this.panel.header.lv = '5'; * ``` * ```html * <igx-expansion-panel-header [lv]="myCustomLevel"></igx-expansion-panel-header> * ``` */ this.lv = '3'; /** * Gets/sets the `role` attribute of the header * Get * ```typescript * const currentRole = this.panel.header.role; * ``` * Set * ```typescript * this.panel.header.role = '5'; * ``` * ```html * <igx-expansion-panel-header [role]="'custom'"></igx-expansion-panel-header> * ``` */ this.role = 'heading'; /** * Gets/sets the position of the expansion-panel-header expand/collapse icon * Accepts `left`, `right` or `none` * ```typescript * const currentIconPosition = this.panel.header.iconPosition; * ``` * Set * ```typescript * this.panel.header.iconPosition = 'left'; * ``` * ```html * <igx-expansion-panel-header [iconPosition]="'right'"></igx-expansion-panel-header> * ``` */ this.iconPosition = ICON_POSITION.LEFT; /** * Emitted whenever a user interacts with the header host * ```typescript * handleInteraction(event: IExpansionPanelEventArgs) { * ... * } * ``` * ```html * <igx-expansion-panel-header (onInteraction)="handleInteraction($event)"> * ... * </igx-expansion-panel-header> * ``` */ this.onInteraction = new EventEmitter(); /** * @hidden */ this.cssClass = 'igx-expansion-panel__header'; /** * Gets/sets the whether the header is disabled * When disabled, the header will not handle user events and will stop their propagation * * ```typescript * const isDisabled = this.panel.header.disabled; * ``` * Set * ```typescript * this.panel.header.disabled = true; * ``` * ```html * <igx-expansion-panel-header [disabled]="true"> * ... * </igx-expansion-panel-header> * ``` */ this.disabled = false; this.id = this.panel.id + "-header"; } Object.defineProperty(IgxExpansionPanelHeaderComponent.prototype, "iconTemplate", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this._iconTemplate; }, /** * @hidden */ set: /** * @hidden * @param {?} val * @return {?} */ function (val) { this._iconTemplate = (/** @type {?} */ (val)); }, enumerable: true, configurable: true }); Object.defineProperty(IgxExpansionPanelHeaderComponent.prototype, "controls", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this.panel.id; }, enumerable: true, configurable: true }); Object.defineProperty(IgxExpansionPanelHeaderComponent.prototype, "isExpanded", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return !this.panel.collapsed; }, enumerable: true, configurable: true }); /** * @hidden */ /** * @hidden * @param {?=} evt * @return {?} */ IgxExpansionPanelHeaderComponent.prototype.onAction = /** * @hidden * @param {?=} evt * @return {?} */ function (evt) { if (this.disabled) { evt.stopPropagation(); return; } this.onInteraction.emit({ event: evt, panel: this.panel }); this.panel.toggle(evt); evt.preventDefault(); }; /** @hidden @internal */ /** * @hidden \@internal * @param {?} event * @return {?} */ IgxExpansionPanelHeaderComponent.prototype.openPanel = /** * @hidden \@internal * @param {?} event * @return {?} */ function (event) { if (event.altKey) { this.panel.expand(event); this.onInteraction.emit({ event: event, panel: this.panel }); } }; /** @hidden @internal */ /** * @hidden \@internal * @param {?} event * @return {?} */ IgxExpansionPanelHeaderComponent.prototype.closePanel = /** * @hidden \@internal * @param {?} event * @return {?} */ function (event) { if (event.altKey) { this.panel.collapse(event); this.onInteraction.emit({ event: event, panel: this.panel }); } }; Object.defineProperty(IgxExpansionPanelHeaderComponent.prototype, "iconPositionClass", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { switch (this.iconPosition) { case (ICON_POSITION.LEFT): return "igx-expansion-panel__header-icon--start"; case (ICON_POSITION.RIGHT): return "igx-expansion-panel__header-icon--end"; case (ICON_POSITION.NONE): return "igx-expansion-panel__header-icon--none"; default: return ''; } }, enumerable: true, configurable: true }); IgxExpansionPanelHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'igx-expansion-panel-header', template: "<div class=\"igx-expansion-panel__header-inner\" tabindex=\"0\" role=\"button\" [attr.id]=\"id\"\n[attr.aria-disabled]=\"disabled\" [attr.aria-expanded]=\"isExpanded\" [attr.aria-controls]=\"controls\">\n <div class=\"igx-expansion-panel__title-wrapper\">\n <ng-content select=\"igx-expansion-panel-title\"></ng-content>\n <ng-content select=\"igx-expansion-panel-description\"></ng-content>\n </div>\n <ng-content></ng-content>\n <div [class]=\"iconPositionClass\">\n <ng-content *ngIf=\"iconTemplate\" select=\"igx-expansion-panel-icon\"></ng-content>\n <igx-icon *ngIf=\"!iconTemplate\" fontSet=\"material\">\n {{panel.collapsed? 'expand_more':'expand_less'}}\n </igx-icon>\n </div>\n</div>\n" }] } ]; /** @nocollapse */ IgxExpansionPanelHeaderComponent.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Host }, { type: Inject, args: [IGX_EXPANSION_PANEL_COMPONENT,] }] }, { type: ChangeDetectorRef }, { type: ElementRef } ]; }; IgxExpansionPanelHeaderComponent.propDecorators = { iconTemplate: [{ type: ContentChild, args: [IgxExpansionPanelIconDirective,] }], lv: [{ type: HostBinding, args: ['attr.aria-level',] }, { type: Input }], role: [{ type: HostBinding, args: ['attr.role',] }, { type: Input }], iconPosition: [{ type: Input }], onInteraction: [{ type: Output }], cssClass: [{ type: HostBinding, args: ['class.igx-expansion-panel__header',] }], isExpanded: [{ type: HostBinding, args: ['class.igx-expansion-panel__header--expanded',] }], disabled: [{ type: Input }, { type: HostBinding, args: ['class.igx-expansion-panel--disabled',] }], onAction: [{ type: HostListener, args: ['keydown.Enter', ['$event'],] }, { type: HostListener, args: ['keydown.Space', ['$event'],] }, { type: HostListener, args: ['keydown.Spacebar', ['$event'],] }, { type: HostListener, args: ['click', ['$event'],] }], openPanel: [{ type: HostListener, args: ['keydown.Alt.ArrowDown', ['$event'],] }], closePanel: [{ type: HostListener, args: ['keydown.Alt.ArrowUp', ['$event'],] }] }; return IgxExpansionPanelHeaderComponent; }()); export { IgxExpansionPanelHeaderComponent }; if (false) { /** * @type {?} * @private */ IgxExpansionPanelHeaderComponent.prototype._iconTemplate; /** * Sets/gets the `id` of the expansion panel header. * ```typescript * let panelHeaderId = this.panel.header.id; * ``` * \@memberof IgxExpansionPanelComponent * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.id; /** * Gets/sets the `aria-level` attribute of the header * Get * ```typescript * const currentAriaLevel = this.panel.header.lv; * ``` * Set * ```typescript * this.panel.header.lv = '5'; * ``` * ```html * <igx-expansion-panel-header [lv]="myCustomLevel"></igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.lv; /** * Gets/sets the `role` attribute of the header * Get * ```typescript * const currentRole = this.panel.header.role; * ``` * Set * ```typescript * this.panel.header.role = '5'; * ``` * ```html * <igx-expansion-panel-header [role]="'custom'"></igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.role; /** * Gets/sets the position of the expansion-panel-header expand/collapse icon * Accepts `left`, `right` or `none` * ```typescript * const currentIconPosition = this.panel.header.iconPosition; * ``` * Set * ```typescript * this.panel.header.iconPosition = 'left'; * ``` * ```html * <igx-expansion-panel-header [iconPosition]="'right'"></igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.iconPosition; /** * Emitted whenever a user interacts with the header host * ```typescript * handleInteraction(event: IExpansionPanelEventArgs) { * ... * } * ``` * ```html * <igx-expansion-panel-header (onInteraction)="handleInteraction($event)"> * ... * </igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.onInteraction; /** * @hidden * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.cssClass; /** * Gets/sets the whether the header is disabled * When disabled, the header will not handle user events and will stop their propagation * * ```typescript * const isDisabled = this.panel.header.disabled; * ``` * Set * ```typescript * this.panel.header.disabled = true; * ``` * ```html * <igx-expansion-panel-header [disabled]="true"> * ... * </igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.disabled; /** @type {?} */ IgxExpansionPanelHeaderComponent.prototype.panel; /** @type {?} */ IgxExpansionPanelHeaderComponent.prototype.cdr; /** @type {?} */ IgxExpansionPanelHeaderComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLElBQUksRUFDSixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUUsT0FBTyxFQUE0Qiw2QkFBNkIsRUFBeUIsTUFBTSwwQkFBMEIsQ0FBQzs7O0lBTXRILE1BQU8sTUFBTTtJQUNiLE1BQU8sTUFBTTtJQUNiLE9BQVEsT0FBTzs7O0FBSW5CO0lBOElJLDBDQUFrRSxLQUE0QixFQUFTLEdBQXNCLEVBQ3JILFVBQXNCO1FBRG9DLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckgsZUFBVSxHQUFWLFVBQVUsQ0FBWTs7UUF6SXRCLGtCQUFhLEdBQUcsS0FBSyxDQUFDOzs7Ozs7OztRQVF2QixPQUFFLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7UUFpQ1IsT0FBRSxHQUFHLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O1FBa0JULFNBQUksR0FBRyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7OztRQXdCakIsaUJBQVksR0FBa0IsYUFBYSxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7UUFnQmpELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7Ozs7UUFNNUQsYUFBUSxHQUFHLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7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QyxXQUFXLGNBQ3ZCLEtBQUs7K0JBd0JMLEtBQUs7Z0NBZ0JMLE1BQU07MkJBTUwsV0FBVyxTQUFDLG1DQUFtQzs2QkFNL0MsV0FBVyxTQUFDLDZDQUE2QzsyQkFzQjFELEtBQUssWUFDTCxXQUFXLFNBQUMscUNBQXFDOzJCQVdoRCxZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQ3hDLFlBQVksU0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FDeEMsWUFBWSxTQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLGNBQzNDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7NEJBWWpDLFlBQVksU0FBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs2QkFTL0MsWUFBWSxTQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDOztJQXVCcEQsdUNBQUM7Q0FBQSxBQXJNRCxJQXFNQztTQWpNWSxnQ0FBZ0M7Ozs7OztJQUV6Qyx5REFBOEI7Ozs7Ozs7OztJQVE5Qiw4Q0FBZTs7Ozs7Ozs7Ozs7Ozs7OztJQStCZiw4Q0FFZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQmhCLGdEQUV3Qjs7Ozs7Ozs7Ozs7Ozs7OztJQXVCeEIsd0RBQ3dEOzs7Ozs7Ozs7Ozs7Ozs7SUFleEQseURBQ29FOzs7OztJQUtuRSxvREFDZ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEyQmpELG9EQUV3Qjs7SUFFWixpREFBa0Y7O0lBQUUsK0NBQTZCOztJQUM1SCxzREFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBIb3N0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsSWNvbkRpcmVjdGl2ZSB9IGZyb20gJy4vZXhwYW5zaW9uLXBhbmVsLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzLCBJR1hfRVhQQU5TSU9OX1BBTkVMX0NPTVBPTkVOVCwgSWd4RXhwYW5zaW9uUGFuZWxCYXNlIH0gZnJvbSAnLi9leHBhbnNpb24tcGFuZWwuY29tbW9uJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBlbnVtIElDT05fUE9TSVRJT04ge1xuICAgIExFRlQgPSAnbGVmdCcsXG4gICAgTk9ORSA9ICdub25lJyxcbiAgICBSSUdIVCA9ICdyaWdodCdcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2V4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50IHtcbiAgICAgLy8gcHJvcGVydGllcyBzZWN0aW9uXG4gICAgcHJpdmF0ZSBfaWNvblRlbXBsYXRlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBleHBhbnNpb24gcGFuZWwgaGVhZGVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcGFuZWxIZWFkZXJJZCA9ICB0aGlzLnBhbmVsLmhlYWRlci5pZDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaWQgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneEV4cGFuc2lvblBhbmVsSWNvbkRpcmVjdGl2ZSlcbiAgICBwdWJsaWMgc2V0IGljb25UZW1wbGF0ZSh2YWw6IGFueSkge1xuICAgICAgICB0aGlzLl9pY29uVGVtcGxhdGUgPSA8Ym9vbGVhbj52YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaWNvblRlbXBsYXRlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBgYXJpYS1sZXZlbGAgYXR0cmlidXRlIG9mIHRoZSBoZWFkZXJcbiAgICAgKiBHZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IGN1cnJlbnRBcmlhTGV2ZWwgPSB0aGlzLnBhbmVsLmhlYWRlci5sdjtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIHRoaXMucGFuZWwuaGVhZGVyLmx2ID0gJzUnO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFtsdl09XCJteUN1c3RvbUxldmVsXCI+PC9pZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sZXZlbCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbHYgPSAnMyc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGhlYWRlclxuICAgICAqIEdldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY3VycmVudFJvbGUgPSB0aGlzLnBhbmVsLmhlYWRlci5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgdGhpcy5wYW5lbC5oZWFkZXIucm9sZSA9ICc1JztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBbcm9sZV09XCInY3VzdG9tJ1wiPjwvaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvbGUgPSAnaGVhZGluZyc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250cm9scyAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZWwuaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBleHBhbmQvY29sbGFwc2UgaWNvblxuICAgICAqIEFjY2VwdHMgYGxlZnRgLCBgcmlnaHRgIG9yIGBub25lYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY3VycmVudEljb25Qb3NpdGlvbiA9IHRoaXMucGFuZWwuaGVhZGVyLmljb25Qb3NpdGlvbjtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIHRoaXMucGFuZWwuaGVhZGVyLmljb25Qb3NpdGlvbiA9ICdsZWZ0JztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBbaWNvblBvc2l0aW9uXT1cIidyaWdodCdcIj48L2lneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGljb25Qb3NpdGlvbjogSUNPTl9QT1NJVElPTiA9IElDT05fUE9TSVRJT04uTEVGVDtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbmV2ZXIgYSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBoZWFkZXIgaG9zdFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaGFuZGxlSW50ZXJhY3Rpb24oZXZlbnQ6IElFeHBhbnNpb25QYW5lbEV2ZW50QXJncykge1xuICAgICAqICAuLi5cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgKG9uSW50ZXJhY3Rpb24pPVwiaGFuZGxlSW50ZXJhY3Rpb24oJGV2ZW50KVwiPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSW50ZXJhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPElFeHBhbnNpb25QYW5lbEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhwYW5zaW9uLXBhbmVsX19oZWFkZXInKVxuICAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWV4cGFuc2lvbi1wYW5lbF9faGVhZGVyJztcblxuICAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4cGFuc2lvbi1wYW5lbF9faGVhZGVyLS1leHBhbmRlZCcpXG4gICAgIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCAoKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMucGFuZWwuY29sbGFwc2VkO1xuICAgICAgICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSB3aGV0aGVyIHRoZSBoZWFkZXIgaXMgZGlzYWJsZWRcbiAgICAgKiBXaGVuIGRpc2FibGVkLCB0aGUgaGVhZGVyIHdpbGwgbm90IGhhbmRsZSB1c2VyIGV2ZW50cyBhbmQgd2lsbCBzdG9wIHRoZWlyIHByb3BhZ2F0aW9uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IGlzRGlzYWJsZWQgPSB0aGlzLnBhbmVsLmhlYWRlci5kaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIHRoaXMucGFuZWwuaGVhZGVyLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAqICAgICAuLi5cbiAgICAgKiAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4cGFuc2lvbi1wYW5lbC0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBASW5qZWN0KElHWF9FWFBBTlNJT05fUEFORUxfQ09NUE9ORU5UKSBwdWJsaWMgcGFuZWw6IElneEV4cGFuc2lvblBhbmVsQmFzZSwgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgICAgICB0aGlzLmlkID0gYCR7dGhpcy5wYW5lbC5pZH0taGVhZGVyYDtcbiAgICAgfVxuXG4gICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5FbnRlcicsIFsnJGV2ZW50J10pXG4gICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uU3BhY2UnLCBbJyRldmVudCddKVxuICAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLlNwYWNlYmFyJywgWyckZXZlbnQnXSlcbiAgICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgICBwdWJsaWMgb25BY3Rpb24oZXZ0PzogRXZlbnQpIHtcbiAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICB0aGlzLm9uSW50ZXJhY3Rpb24uZW1pdCh7IGV2ZW50OiBldnQsIHBhbmVsOiB0aGlzLnBhbmVsIH0pO1xuICAgICAgICAgdGhpcy5wYW5lbC50b2dnbGUoZXZ0KTtcbiAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvcGVuUGFuZWwoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgdGhpcy5wYW5lbC5leHBhbmQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5vbkludGVyYWN0aW9uLmVtaXQoeyBldmVudDogZXZlbnQsIHBhbmVsOiB0aGlzLnBhbmVsIH0pO1xuICAgICAgICB9XG4gICAgIH1cblxuICAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BbHQuQXJyb3dVcCcsIFsnJGV2ZW50J10pXG4gICAgIHB1YmxpYyBjbG9zZVBhbmVsKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWwuY29sbGFwc2UoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5vbkludGVyYWN0aW9uLmVtaXQoeyBldmVudDogZXZlbnQsIHBhbmVsOiB0aGlzLnBhbmVsIH0pO1xuICAgICAgICB9XG4gICAgIH1cblxuICAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgIHB1YmxpYyBnZXQgaWNvblBvc2l0aW9uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmljb25Qb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSAoSUNPTl9QT1NJVElPTi5MRUZUKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYGlneC1leHBhbnNpb24tcGFuZWxfX2hlYWRlci1pY29uLS1zdGFydGA7XG4gICAgICAgICAgICBjYXNlIChJQ09OX1BPU0lUSU9OLlJJR0hUKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYGlneC1leHBhbnNpb24tcGFuZWxfX2hlYWRlci1pY29uLS1lbmRgO1xuICAgICAgICAgICAgY2FzZSAoSUNPTl9QT1NJVElPTi5OT05FKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYGlneC1leHBhbnNpb24tcGFuZWxfX2hlYWRlci1pY29uLS1ub25lYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgIH1cbn1cbiJdfQ==