UNPKG

carbon-components-angular

Version:
206 lines 16.8 kB
import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core"; import { BaseIconButton } from "./base-icon-button.component"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "carbon-components-angular/tooltip"; import * as i3 from "./button.directive"; /** * Get started with importing the module: * * ```typescript * import { ButtonModule } from 'carbon-components-angular'; * ``` * * [See demo](../../?path=/story/components-button-icon-button--basic) */ export class IconButton extends BaseIconButton { constructor(renderer) { super(); this.renderer = renderer; /** * Override id */ this.buttonId = `icon-btn-${IconButton.iconButtonCounter++}`; /** * Sets the button type. */ this.kind = "primary"; /** * Specify the size of the button. */ this.size = "lg"; /** * Set button type, `button` by default */ this.type = "button"; /** * Set to `true` to make button expressive */ this.isExpressive = false; /** * Set to `true` to disable button */ this.disabled = false; /** * Common button events */ this.click = new EventEmitter(); this.focus = new EventEmitter(); this.blur = new EventEmitter(); /** * Event to emit when click event is fired from tooltip */ this.tooltipClick = new EventEmitter(); this.classList = {}; this.attributeList = {}; } /** * Pass global carbon classes to icon button */ set buttonNgClass(obj) { this.classList = Object.assign({ "cds--btn--disabled": this.disabled }, obj); } get buttonNgClass() { return this.classList; } /** * @param obj: { [key: string]: string * User can pass additional button attributes if component property does not already exist * Key is the attribute name & value is the attribute value for the button */ set buttonAttributes(obj) { if (this.button) { // Remove old attributes Object.keys(this.attributeList).forEach((key) => { this.renderer.removeAttribute(this.button.nativeElement, key); }); // Set new attributes Object.keys(obj).forEach((key) => { this.renderer.setAttribute(this.button.nativeElement, key, obj[key]); }); } // Set new attributes this.attributeList = obj; } get buttonAttributes() { return this.buttonAttributes; } ngAfterViewInit() { // Set attributes once element is found this.buttonAttributes = this.attributeList; } /** * Stop propogation of click event * Else double fires (click) event */ emitClickEvent(event, element = "button") { event.preventDefault(); event.stopPropagation(); // Prevents (click) event from bubbling since it would appear user clicked the `button` if (element === "tooltip") { this.tooltipClick.emit(event); return; } this.click.emit(event); } } IconButton.iconButtonCounter = 0; IconButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IconButton, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); IconButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: { buttonNgClass: "buttonNgClass", buttonAttributes: "buttonAttributes", buttonId: "buttonId", kind: "kind", size: "size", type: "type", isExpressive: "isExpressive", disabled: "disabled", description: "description" }, outputs: { click: "click", focus: "focus", blur: "blur", tooltipClick: "tooltipClick" }, viewQueries: [{ propertyName: "button", first: true, predicate: ["button"], descendants: true }], usesInheritance: true, ngImport: i0, template: ` <cds-tooltip class="cds--icon-tooltip" [description]="description" [disabled]="disabled" [caret]="caret" [dropShadow]="dropShadow" [highContrast]="highContrast" [isOpen]="isOpen" [align]="align" [autoAlign]="autoAlign" [enterDelayMs]="enterDelayMs" [leaveDelayMs]="leaveDelayMs" (click)="emitClickEvent($event, 'tooltip')"> <button #button [id]="buttonId" [disabled]="disabled" [attr.type]="type" [iconOnly]="true" [ngClass]="buttonNgClass" [cdsButton]="kind" [size]="size" [isExpressive]="isExpressive" (click)="emitClickEvent($event)" (focus)="focus.emit($event)" (blur)="blur.emit($event)"> <ng-content></ng-content> </button> </cds-tooltip> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IconButton, decorators: [{ type: Component, args: [{ selector: "cds-icon-button, ibm-icon-button", template: ` <cds-tooltip class="cds--icon-tooltip" [description]="description" [disabled]="disabled" [caret]="caret" [dropShadow]="dropShadow" [highContrast]="highContrast" [isOpen]="isOpen" [align]="align" [autoAlign]="autoAlign" [enterDelayMs]="enterDelayMs" [leaveDelayMs]="leaveDelayMs" (click)="emitClickEvent($event, 'tooltip')"> <button #button [id]="buttonId" [disabled]="disabled" [attr.type]="type" [iconOnly]="true" [ngClass]="buttonNgClass" [cdsButton]="kind" [size]="size" [isExpressive]="isExpressive" (click)="emitClickEvent($event)" (focus)="focus.emit($event)" (blur)="blur.emit($event)"> <ng-content></ng-content> </button> </cds-tooltip> ` }] }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { buttonNgClass: [{ type: Input }], buttonAttributes: [{ type: Input }], button: [{ type: ViewChild, args: ["button"] }], buttonId: [{ type: Input }], kind: [{ type: Input }], size: [{ type: Input }], type: [{ type: Input }], isExpressive: [{ type: Input }], disabled: [{ type: Input }], description: [{ type: Input }], click: [{ type: Output }], focus: [{ type: Output }], blur: [{ type: Output }], tooltipClick: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1dHRvbi9pY29uLWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQUc5RDs7Ozs7Ozs7R0FRRztBQW1DSCxNQUFNLE9BQU8sVUFBVyxTQUFRLGNBQWM7SUFtRjdDLFlBQW9CLFFBQW1CO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRFcsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQTNDdkM7O1dBRUc7UUFDTSxhQUFRLEdBQUcsWUFBWSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1FBQ2pFOztXQUVHO1FBQ00sU0FBSSxHQUFlLFNBQVMsQ0FBQztRQUN0Qzs7V0FFRztRQUNNLFNBQUksR0FBZSxJQUFJLENBQUM7UUFDakM7O1dBRUc7UUFDTSxTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3pCOztXQUVHO1FBQ00saUJBQVksR0FBRyxLQUFLLENBQUM7UUFDOUI7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBTTFCOztXQUVHO1FBQ08sVUFBSyxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDbEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDbEMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDM0M7O1dBRUc7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFFM0MsY0FBUyxHQUErQixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBOEIsRUFBRSxDQUFDO0lBSXRELENBQUM7SUFwRkQ7O09BRUc7SUFDSCxJQUFhLGFBQWEsQ0FBQyxHQUErQjtRQUN6RCxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELElBQUksYUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFhLGdCQUFnQixDQUFDLEdBQThCO1FBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQix3QkFBd0I7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELENBQUMsQ0FBQyxDQUFDO1lBQ0gscUJBQXFCO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQztTQUNIO1FBQ0QscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUM5QixDQUFDO0lBcURELGVBQWU7UUFDZCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBZ0MsUUFBUTtRQUM3RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLHVGQUF1RjtRQUN2RixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsT0FBTztTQUNQO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQzs7QUFyRU0sNEJBQWlCLEdBQUcsQ0FBQyxDQUFDO3VHQXBDakIsVUFBVTsyRkFBVixVQUFVLDRmQWhDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEJUOzJGQUVXLFVBQVU7a0JBbEN0QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxrQ0FBa0M7b0JBQzVDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEJUO2lCQUNEO2dHQUthLGFBQWE7c0JBQXpCLEtBQUs7Z0JBYU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQXFCZSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBS1YsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFLSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFJRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRFdmVudEVtaXR0ZXIsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdFJlbmRlcmVyMixcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQmFzZUljb25CdXR0b24gfSBmcm9tIFwiLi9iYXNlLWljb24tYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQnV0dG9uU2l6ZSwgQnV0dG9uVHlwZSB9IGZyb20gXCIuL2J1dHRvbi50eXBlc1wiO1xuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWJ1dHRvbi1pY29uLWJ1dHRvbi0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtaWNvbi1idXR0b24sIGlibS1pY29uLWJ1dHRvblwiLFxuXHR0ZW1wbGF0ZTogYFxuXHQ8Y2RzLXRvb2x0aXBcblx0XHRjbGFzcz1cImNkcy0taWNvbi10b29sdGlwXCJcblx0XHRbZGVzY3JpcHRpb25dPVwiZGVzY3JpcHRpb25cIlxuXHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0W2NhcmV0XT1cImNhcmV0XCJcblx0XHRbZHJvcFNoYWRvd109XCJkcm9wU2hhZG93XCJcblx0XHRbaGlnaENvbnRyYXN0XT1cImhpZ2hDb250cmFzdFwiXG5cdFx0W2lzT3Blbl09XCJpc09wZW5cIlxuXHRcdFthbGlnbl09XCJhbGlnblwiXG5cdFx0W2F1dG9BbGlnbl09XCJhdXRvQWxpZ25cIlxuXHRcdFtlbnRlckRlbGF5TXNdPVwiZW50ZXJEZWxheU1zXCJcblx0XHRbbGVhdmVEZWxheU1zXT1cImxlYXZlRGVsYXlNc1wiXG5cdFx0KGNsaWNrKT1cImVtaXRDbGlja0V2ZW50KCRldmVudCwgJ3Rvb2x0aXAnKVwiPlxuXHRcdDxidXR0b25cblx0XHRcdCNidXR0b25cblx0XHRcdFtpZF09XCJidXR0b25JZFwiXG5cdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0W2F0dHIudHlwZV09XCJ0eXBlXCJcblx0XHRcdFtpY29uT25seV09XCJ0cnVlXCJcblx0XHRcdFtuZ0NsYXNzXT1cImJ1dHRvbk5nQ2xhc3NcIlxuXHRcdFx0W2Nkc0J1dHRvbl09XCJraW5kXCJcblx0XHRcdFtzaXplXT1cInNpemVcIlxuXHRcdFx0W2lzRXhwcmVzc2l2ZV09XCJpc0V4cHJlc3NpdmVcIlxuXHRcdFx0KGNsaWNrKT1cImVtaXRDbGlja0V2ZW50KCRldmVudClcIlxuXHRcdFx0KGZvY3VzKT1cImZvY3VzLmVtaXQoJGV2ZW50KVwiXG5cdFx0XHQoYmx1cik9XCJibHVyLmVtaXQoJGV2ZW50KVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdDwvYnV0dG9uPlxuXHQ8L2Nkcy10b29sdGlwPlxuXHRgXG59KVxuZXhwb3J0IGNsYXNzIEljb25CdXR0b24gZXh0ZW5kcyBCYXNlSWNvbkJ1dHRvbiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXHQvKipcblx0ICogUGFzcyBnbG9iYWwgY2FyYm9uIGNsYXNzZXMgdG8gaWNvbiBidXR0b25cblx0ICovXG5cdEBJbnB1dCgpIHNldCBidXR0b25OZ0NsYXNzKG9iajogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcblx0XHR0aGlzLmNsYXNzTGlzdCA9IE9iamVjdC5hc3NpZ24oeyBcImNkcy0tYnRuLS1kaXNhYmxlZFwiOiB0aGlzLmRpc2FibGVkIH0sIG9iaik7XG5cdH1cblxuXHRnZXQgYnV0dG9uTmdDbGFzcygpIHtcblx0XHRyZXR1cm4gdGhpcy5jbGFzc0xpc3Q7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIG9iajogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdcblx0ICogVXNlciBjYW4gcGFzcyBhZGRpdGlvbmFsIGJ1dHRvbiBhdHRyaWJ1dGVzIGlmIGNvbXBvbmVudCBwcm9wZXJ0eSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0XG5cdCAqIEtleSBpcyB0aGUgYXR0cmlidXRlIG5hbWUgJiB2YWx1ZSBpcyB0aGUgYXR0cmlidXRlIHZhbHVlIGZvciB0aGUgYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgYnV0dG9uQXR0cmlidXRlcyhvYmo6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcblx0XHRpZiAodGhpcy5idXR0b24pIHtcblx0XHRcdC8vIFJlbW92ZSBvbGQgYXR0cmlidXRlc1xuXHRcdFx0T2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVMaXN0KS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHR0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LCBrZXkpO1xuXHRcdFx0fSk7XG5cdFx0XHQvLyBTZXQgbmV3IGF0dHJpYnV0ZXNcblx0XHRcdE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5idXR0b24ubmF0aXZlRWxlbWVudCwga2V5LCBvYmpba2V5XSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gU2V0IG5ldyBhdHRyaWJ1dGVzXG5cdFx0dGhpcy5hdHRyaWJ1dGVMaXN0ID0gb2JqO1xuXHR9XG5cblx0Z2V0IGJ1dHRvbkF0dHJpYnV0ZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnV0dG9uQXR0cmlidXRlcztcblx0fVxuXG5cdHN0YXRpYyBpY29uQnV0dG9uQ291bnRlciA9IDA7XG5cblx0QFZpZXdDaGlsZChcImJ1dHRvblwiKSBidXR0b246IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIGlkXG5cdCAqL1xuXHRASW5wdXQoKSBidXR0b25JZCA9IGBpY29uLWJ0bi0ke0ljb25CdXR0b24uaWNvbkJ1dHRvbkNvdW50ZXIrK31gO1xuXHQvKipcblx0ICogU2V0cyB0aGUgYnV0dG9uIHR5cGUuXG5cdCAqL1xuXHRASW5wdXQoKSBraW5kOiBCdXR0b25UeXBlID0gXCJwcmltYXJ5XCI7XG5cdC8qKlxuXHQgKiBTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBidXR0b24uXG5cdCAqL1xuXHRASW5wdXQoKSBzaXplOiBCdXR0b25TaXplID0gXCJsZ1wiO1xuXHQvKipcblx0ICogU2V0IGJ1dHRvbiB0eXBlLCBgYnV0dG9uYCBieSBkZWZhdWx0XG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlID0gXCJidXR0b25cIjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gbWFrZSBidXR0b24gZXhwcmVzc2l2ZVxuXHQgKi9cblx0QElucHV0KCkgaXNFeHByZXNzaXZlID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGRpc2FibGUgYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVGhlIHN0cmluZyBvciB0ZW1wbGF0ZSBjb250ZW50IHRvIGJlIGV4cG9zZWQgYnkgdGhlIHRvb2x0aXAuXG5cdCAqL1xuXHRASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHQvKipcblx0ICogQ29tbW9uIGJ1dHRvbiBldmVudHNcblx0ICovXG5cdEBPdXRwdXQoKSBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cdEBPdXRwdXQoKSBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cdEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblx0LyoqXG5cdCAqIEV2ZW50IHRvIGVtaXQgd2hlbiBjbGljayBldmVudCBpcyBmaXJlZCBmcm9tIHRvb2x0aXBcblx0ICovXG5cdEBPdXRwdXQoKSB0b29sdGlwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG5cdHByaXZhdGUgY2xhc3NMaXN0OiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXHRwcml2YXRlIGF0dHJpYnV0ZUxpc3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdC8vIFNldCBhdHRyaWJ1dGVzIG9uY2UgZWxlbWVudCBpcyBmb3VuZFxuXHRcdHRoaXMuYnV0dG9uQXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlTGlzdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9wIHByb3BvZ2F0aW9uIG9mIGNsaWNrIGV2ZW50XG5cdCAqIEVsc2UgZG91YmxlIGZpcmVzIChjbGljaykgZXZlbnRcblx0ICovXG5cdGVtaXRDbGlja0V2ZW50KGV2ZW50LCBlbGVtZW50OiBcInRvb2x0aXBcIiB8IFwiYnV0dG9uXCIgPSBcImJ1dHRvblwiKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHQvLyBQcmV2ZW50cyAoY2xpY2spIGV2ZW50IGZyb20gYnViYmxpbmcgc2luY2UgaXQgd291bGQgYXBwZWFyIHVzZXIgY2xpY2tlZCB0aGUgYGJ1dHRvbmBcblx0XHRpZiAoZWxlbWVudCA9PT0gXCJ0b29sdGlwXCIpIHtcblx0XHRcdHRoaXMudG9vbHRpcENsaWNrLmVtaXQoZXZlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmNsaWNrLmVtaXQoZXZlbnQpO1xuXHR9XG59XG4iXX0=