carbon-components-angular
Version:
Next generation components
206 lines • 16.8 kB
JavaScript
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"
[ ]="disabled"
[ ]="caret"
[ ]="dropShadow"
[ ]="highContrast"
[ ]="isOpen"
[ ]="align"
[ ]="autoAlign"
[ ]="enterDelayMs"
[ ]="leaveDelayMs"
(click)="emitClickEvent($event, 'tooltip')">
<button
[ ]="buttonId"
[ ]="disabled"
[ ]="type"
[ ]="true"
[ ]="buttonNgClass"
[ ]="kind"
[ ]="size"
[ ]="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"
[ ]="disabled"
[ ]="caret"
[ ]="dropShadow"
[ ]="highContrast"
[ ]="isOpen"
[ ]="align"
[ ]="autoAlign"
[ ]="enterDelayMs"
[ ]="leaveDelayMs"
(click)="emitClickEvent($event, 'tooltip')">
<button
[ ]="buttonId"
[ ]="disabled"
[ ]="type"
[ ]="true"
[ ]="buttonNgClass"
[ ]="kind"
[ ]="size"
[ ]="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=