UNPKG

carbon-components-angular

Version:
237 lines 18.2 kB
import { Component, HostBinding, Input, TemplateRef } from "@angular/core"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "carbon-components-angular/icon"; /** * Get started with importing the module: * * ```typescript * import { ProgressBarModule } from 'carbon-components-angular'; * ``` * * [See demo](../../?path=/story/components-progress-bar--basic) */ export class ProgressBar { constructor() { this.id = `progress-bar-${ProgressBar.progressBarCounter++}`; this.helperId = `progress-bar-helper-${ProgressBar.progressBarCounter}`; /** * Maximum value */ this.max = 100; /** * Alignment variant of the progress bar, default is `default` */ this.type = "default"; /** * Current status of the progress bar, default is `active` */ this.status = "active"; /** * Size of the progress bar, default is `big` */ this.size = "big"; this.defaultClass = true; this._value = undefined; } /** * Current value */ set value(num) { this._value = num; // Validate number if (num > this.max) { this._value = this.max; } if (num < 0) { this._value = 0; } // Set values based on current state if (this.isError) { this._value = 0; } else if (this.isFinished) { this._value = this.max; } } get value() { return this._value; } get percentage() { return `scaleX(${this.value / this.max})`; } // Size get bigBar() { return this.size === "big"; } get smallBar() { return this.size === "small"; } // Type get defaultType() { return this.type === "default"; } get indentedType() { return this.type === "indented"; } get inlineType() { return this.type === "inline"; } // Status get isFinished() { return this.status === "finished"; } get isError() { return this.status === "error"; } get indeterminate() { return this.value === undefined && !this.isFinished && !this.isError; } isTemplate(value) { return value instanceof TemplateRef; } } ProgressBar.progressBarCounter = 0; ProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); ProgressBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ProgressBar, selector: "cds-progress-bar, ibm-progress-bar", inputs: { value: "value", id: "id", label: "label", helperText: "helperText", max: "max", type: "type", status: "status", size: "size" }, host: { properties: { "class.cds--progress-bar--big": "this.bigBar", "class.cds--progress-bar--small": "this.smallBar", "class.cds--progress-bar--default": "this.defaultType", "class.cds--progress-bar--indented": "this.indentedType", "class.cds--progress-bar--inline": "this.inlineType", "class.cds--progress-bar--finished": "this.isFinished", "class.cds--progress-bar--error": "this.isError", "class.cds--progress-bar--indeterminate": "this.indeterminate", "class.cds--progress-bar": "this.defaultClass" } }, ngImport: i0, template: ` <div *ngIf="label" class="cds--progress-bar__label" [id]="id"> <span class="cds--progress-bar__label-text"> <ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container> <ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template> </span> <svg *ngIf="isFinished" fill="currentColor" cdsIcon="checkmark--filled" class="cds--progress-bar__status-icon"> </svg> <svg *ngIf="isError" fill="currentColor" cdsIcon="error--filled" class="cds--progress-bar__status-icon"> </svg> </div> <div class="cds--progress-bar__track" role="progressbar" [attr.aria-invalid]="isError" [attr.labelledby]="id" [attr.describedby]="helperText ? helperId: null" [attr.aria-valuemin]="!indeterminate ? 0 : null" [attr.aria-valuemax]="!indeterminate ? max : null" [attr.aria-valuenow]="!indeterminate ? value : null"> <div class="cds--progress-bar__bar" [ngStyle]="{ 'transform': !isFinished && !isError ? percentage : null }"> </div> </div> <div [id]="helperId" *ngIf="helperText" class="cds--progress-bar__helper-text"> <ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container> <ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template> </div> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgressBar, decorators: [{ type: Component, args: [{ selector: "cds-progress-bar, ibm-progress-bar", template: ` <div *ngIf="label" class="cds--progress-bar__label" [id]="id"> <span class="cds--progress-bar__label-text"> <ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container> <ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template> </span> <svg *ngIf="isFinished" fill="currentColor" cdsIcon="checkmark--filled" class="cds--progress-bar__status-icon"> </svg> <svg *ngIf="isError" fill="currentColor" cdsIcon="error--filled" class="cds--progress-bar__status-icon"> </svg> </div> <div class="cds--progress-bar__track" role="progressbar" [attr.aria-invalid]="isError" [attr.labelledby]="id" [attr.describedby]="helperText ? helperId: null" [attr.aria-valuemin]="!indeterminate ? 0 : null" [attr.aria-valuemax]="!indeterminate ? max : null" [attr.aria-valuenow]="!indeterminate ? value : null"> <div class="cds--progress-bar__bar" [ngStyle]="{ 'transform': !isFinished && !isError ? percentage : null }"> </div> </div> <div [id]="helperId" *ngIf="helperText" class="cds--progress-bar__helper-text"> <ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container> <ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template> </div> ` }] }], propDecorators: { value: [{ type: Input }], bigBar: [{ type: HostBinding, args: ["class.cds--progress-bar--big"] }], smallBar: [{ type: HostBinding, args: ["class.cds--progress-bar--small"] }], defaultType: [{ type: HostBinding, args: ["class.cds--progress-bar--default"] }], indentedType: [{ type: HostBinding, args: ["class.cds--progress-bar--indented"] }], inlineType: [{ type: HostBinding, args: ["class.cds--progress-bar--inline"] }], isFinished: [{ type: HostBinding, args: ["class.cds--progress-bar--finished"] }], isError: [{ type: HostBinding, args: ["class.cds--progress-bar--error"] }], indeterminate: [{ type: HostBinding, args: ["class.cds--progress-bar--indeterminate"] }], id: [{ type: Input }], label: [{ type: Input }], helperText: [{ type: Input }], max: [{ type: Input }], type: [{ type: Input }], status: [{ type: Input }], size: [{ type: Input }], defaultClass: [{ type: HostBinding, args: ["class.cds--progress-bar"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsV0FBVyxFQUNYLE1BQU0sZUFBZSxDQUFDOzs7O0FBRXZCOzs7Ozs7OztHQVFHO0FBa0RILE1BQU0sT0FBTyxXQUFXO0lBakR4QjtRQTBHVSxPQUFFLEdBQUcsZ0JBQWdCLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7UUFDakUsYUFBUSxHQUFHLHVCQUF1QixXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQVNuRTs7V0FFRztRQUNNLFFBQUcsR0FBRyxHQUFHLENBQUM7UUFDbkI7O1dBRUc7UUFDTSxTQUFJLEdBQXNDLFNBQVMsQ0FBQztRQUM3RDs7V0FFRztRQUNNLFdBQU0sR0FBb0MsUUFBUSxDQUFDO1FBQzVEOztXQUVHO1FBQ00sU0FBSSxHQUFvQixLQUFLLENBQUM7UUFFQyxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwRCxXQUFNLEdBQUcsU0FBUyxDQUFDO0tBSzNCO0lBekZBOztPQUVHO0lBQ0gsSUFBYSxLQUFLLENBQUMsR0FBdUI7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsa0JBQWtCO1FBQ2xCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDaEI7UUFDRCxvQ0FBb0M7UUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUN2QjtJQUNGLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNiLE9BQU8sVUFBVSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsT0FBTztJQUNQLElBQWlELE1BQU07UUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBbUQsUUFBUTtRQUMxRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPO0lBQ1AsSUFBcUQsV0FBVztRQUMvRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFzRCxZQUFZO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUNELElBQW9ELFVBQVU7UUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBQ0QsU0FBUztJQUNULElBQXNELFVBQVU7UUFDL0QsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBbUQsT0FBTztRQUN6RCxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUEyRCxhQUFhO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0RSxDQUFDO0lBaUNELFVBQVUsQ0FBQyxLQUFLO1FBQ2YsT0FBTyxLQUFLLFlBQVksV0FBVyxDQUFDO0lBQ3JDLENBQUM7O0FBbENNLDhCQUFrQixHQUFHLENBQUMsQ0FBQzt3R0F2RGxCLFdBQVc7NEZBQVgsV0FBVyxrdEJBL0NiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2Q1Q7MkZBRVcsV0FBVztrQkFqRHZCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2Q1Q7aUJBQ0Q7OEJBS2EsS0FBSztzQkFBakIsS0FBSztnQkF5QjJDLE1BQU07c0JBQXRELFdBQVc7dUJBQUMsOEJBQThCO2dCQUdRLFFBQVE7c0JBQTFELFdBQVc7dUJBQUMsZ0NBQWdDO2dCQUlRLFdBQVc7c0JBQS9ELFdBQVc7dUJBQUMsa0NBQWtDO2dCQUdPLFlBQVk7c0JBQWpFLFdBQVc7dUJBQUMsbUNBQW1DO2dCQUdJLFVBQVU7c0JBQTdELFdBQVc7dUJBQUMsaUNBQWlDO2dCQUlRLFVBQVU7c0JBQS9ELFdBQVc7dUJBQUMsbUNBQW1DO2dCQUdHLE9BQU87c0JBQXpELFdBQVc7dUJBQUMsZ0NBQWdDO2dCQUdjLGFBQWE7c0JBQXZFLFdBQVc7dUJBQUMsd0NBQXdDO2dCQUs1QyxFQUFFO3NCQUFWLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsR0FBRztzQkFBWCxLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUVrQyxZQUFZO3NCQUFuRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SG9zdEJpbmRpbmcsXG5cdElucHV0LFxuXHRUZW1wbGF0ZVJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgUHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtcHJvZ3Jlc3MtYmFyLS1iYXNpYylcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1wcm9ncmVzcy1iYXIsIGlibS1wcm9ncmVzcy1iYXJcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8ZGl2XG5cdFx0XHQqbmdJZj1cImxhYmVsXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1wcm9ncmVzcy1iYXJfX2xhYmVsXCJcblx0XHRcdFtpZF09XCJpZFwiPlxuXHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXByb2dyZXNzLWJhcl9fbGFiZWwtdGV4dFwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0PHN2Z1xuXHRcdFx0XHQqbmdJZj1cImlzRmluaXNoZWRcIlxuXHRcdFx0XHRmaWxsPVwiY3VycmVudENvbG9yXCJcblx0XHRcdFx0Y2RzSWNvbj1cImNoZWNrbWFyay0tZmlsbGVkXCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLXByb2dyZXNzLWJhcl9fc3RhdHVzLWljb25cIj5cblx0XHRcdDwvc3ZnPlxuXHRcdFx0PHN2Z1xuXHRcdFx0XHQqbmdJZj1cImlzRXJyb3JcIlxuXHRcdFx0XHRmaWxsPVwiY3VycmVudENvbG9yXCJcblx0XHRcdFx0Y2RzSWNvbj1cImVycm9yLS1maWxsZWRcIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tcHJvZ3Jlc3MtYmFyX19zdGF0dXMtaWNvblwiPlxuXHRcdFx0PC9zdmc+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3M9XCJjZHMtLXByb2dyZXNzLWJhcl9fdHJhY2tcIlxuXHRcdFx0cm9sZT1cInByb2dyZXNzYmFyXCJcblx0XHRcdFthdHRyLmFyaWEtaW52YWxpZF09XCJpc0Vycm9yXCJcblx0XHRcdFthdHRyLmxhYmVsbGVkYnldPVwiaWRcIlxuXHRcdFx0W2F0dHIuZGVzY3JpYmVkYnldPVwiaGVscGVyVGV4dCA/IGhlbHBlcklkOiBudWxsXCJcblx0XHRcdFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiIWluZGV0ZXJtaW5hdGUgPyAwIDogbnVsbFwiXG5cdFx0XHRbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIiFpbmRldGVybWluYXRlID8gbWF4IDogbnVsbFwiXG5cdFx0XHRbYXR0ci5hcmlhLXZhbHVlbm93XT1cIiFpbmRldGVybWluYXRlID8gdmFsdWUgOiBudWxsXCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1wcm9ncmVzcy1iYXJfX2JhclwiXG5cdFx0XHRcdFtuZ1N0eWxlXT1cIntcblx0XHRcdFx0XHQndHJhbnNmb3JtJzogIWlzRmluaXNoZWQgJiYgIWlzRXJyb3IgPyBwZXJjZW50YWdlIDogbnVsbFxuXHRcdFx0XHR9XCI+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2XG5cdFx0XHRbaWRdPVwiaGVscGVySWRcIlxuXHRcdFx0Km5nSWY9XCJoZWxwZXJUZXh0XCJcblx0XHRcdGNsYXNzPVwiY2RzLS1wcm9ncmVzcy1iYXJfX2hlbHBlci10ZXh0XCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaGVscGVyVGV4dClcIj57e2hlbHBlclRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlbHBlclRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdDwvZGl2PlxuXHRgXG59KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQmFyIHtcblx0LyoqXG5cdCAqIEN1cnJlbnQgdmFsdWVcblx0ICovXG5cdEBJbnB1dCgpIHNldCB2YWx1ZShudW06IG51bWJlciB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX3ZhbHVlID0gbnVtO1xuXHRcdC8vIFZhbGlkYXRlIG51bWJlclxuXHRcdGlmIChudW0gPiB0aGlzLm1heCkge1xuXHRcdFx0dGhpcy5fdmFsdWUgPSB0aGlzLm1heDtcblx0XHR9XG5cdFx0aWYgKG51bSA8IDApIHtcblx0XHRcdHRoaXMuX3ZhbHVlID0gMDtcblx0XHR9XG5cdFx0Ly8gU2V0IHZhbHVlcyBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG5cdFx0aWYgKHRoaXMuaXNFcnJvcikge1xuXHRcdFx0dGhpcy5fdmFsdWUgPSAwO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5pc0ZpbmlzaGVkKSB7XG5cdFx0XHR0aGlzLl92YWx1ZSA9IHRoaXMubWF4O1xuXHRcdH1cblx0fVxuXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmFsdWU7XG5cdH1cblxuXHRnZXQgcGVyY2VudGFnZSgpIHtcblx0XHRyZXR1cm4gYHNjYWxlWCgke3RoaXMudmFsdWUgLyB0aGlzLm1heH0pYDtcblx0fVxuXHQvLyBTaXplXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tcHJvZ3Jlc3MtYmFyLS1iaWdcIikgZ2V0IGJpZ0JhcigpIHtcblx0XHRyZXR1cm4gdGhpcy5zaXplID09PSBcImJpZ1wiO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tcHJvZ3Jlc3MtYmFyLS1zbWFsbFwiKSBnZXQgc21hbGxCYXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2l6ZSA9PT0gXCJzbWFsbFwiO1xuXHR9XG5cdC8vIFR5cGVcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1wcm9ncmVzcy1iYXItLWRlZmF1bHRcIikgZ2V0IGRlZmF1bHRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLnR5cGUgPT09IFwiZGVmYXVsdFwiO1xuXHR9XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tcHJvZ3Jlc3MtYmFyLS1pbmRlbnRlZFwiKSBnZXQgaW5kZW50ZWRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLnR5cGUgPT09IFwiaW5kZW50ZWRcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXByb2dyZXNzLWJhci0taW5saW5lXCIpIGdldCBpbmxpbmVUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLnR5cGUgPT09IFwiaW5saW5lXCI7XG5cdH1cblx0Ly8gU3RhdHVzXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tcHJvZ3Jlc3MtYmFyLS1maW5pc2hlZFwiKSBnZXQgaXNGaW5pc2hlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0dXMgPT09IFwiZmluaXNoZWRcIjtcblx0fVxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXByb2dyZXNzLWJhci0tZXJyb3JcIikgZ2V0IGlzRXJyb3IoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdHVzID09PSBcImVycm9yXCI7XG5cdH1cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1wcm9ncmVzcy1iYXItLWluZGV0ZXJtaW5hdGVcIikgZ2V0IGluZGV0ZXJtaW5hdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc0ZpbmlzaGVkICYmICF0aGlzLmlzRXJyb3I7XG5cdH1cblx0c3RhdGljIHByb2dyZXNzQmFyQ291bnRlciA9IDA7XG5cblx0QElucHV0KCkgaWQgPSBgcHJvZ3Jlc3MtYmFyLSR7UHJvZ3Jlc3NCYXIucHJvZ3Jlc3NCYXJDb3VudGVyKyt9YDtcblx0aGVscGVySWQgPSBgcHJvZ3Jlc3MtYmFyLWhlbHBlci0ke1Byb2dyZXNzQmFyLnByb2dyZXNzQmFyQ291bnRlcn1gO1xuXHQvKipcblx0ICogRGVzY3JpcHRpb24gb2YgdGhlIHByb2dyZXNzIGJhclxuXHQgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBDdXJyZW50IHByb2dyZXNzIHRleHR1YWwgcmVwcmVzZW50YXRpb25cblx0ICovXG5cdEBJbnB1dCgpIGhlbHBlclRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBNYXhpbXVtIHZhbHVlXG5cdCAqL1xuXHRASW5wdXQoKSBtYXggPSAxMDA7XG5cdC8qKlxuXHQgKiBBbGlnbm1lbnQgdmFyaWFudCBvZiB0aGUgcHJvZ3Jlc3MgYmFyLCBkZWZhdWx0IGlzIGBkZWZhdWx0YFxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJkZWZhdWx0XCIgfCBcImlubGluZVwiIHwgXCJpbmRlbnRlZFwiID0gXCJkZWZhdWx0XCI7XG5cdC8qKlxuXHQgKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgcHJvZ3Jlc3MgYmFyLCBkZWZhdWx0IGlzIGBhY3RpdmVgXG5cdCAqL1xuXHRASW5wdXQoKSBzdGF0dXM6IFwiYWN0aXZlXCIgfCBcImZpbmlzaGVkXCIgfCBcImVycm9yXCIgPSBcImFjdGl2ZVwiO1xuXHQvKipcblx0ICogU2l6ZSBvZiB0aGUgcHJvZ3Jlc3MgYmFyLCBkZWZhdWx0IGlzIGBiaWdgXG5cdCAqL1xuXHRASW5wdXQoKSBzaXplOiBcInNtYWxsXCIgfCBcImJpZ1wiID0gXCJiaWdcIjtcblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXByb2dyZXNzLWJhclwiKSBkZWZhdWx0Q2xhc3MgPSB0cnVlO1xuXHRwcml2YXRlIF92YWx1ZSA9IHVuZGVmaW5lZDtcblxuXHRpc1RlbXBsYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG5cdH1cbn1cbiJdfQ==