UNPKG

@clr/angular

Version:

Angular components for Clarity

136 lines 15.8 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { Component, Input, Optional } from '@angular/core'; import { ClrAbstractContainer } from '../common/abstract-container'; import { IfControlStateService } from '../common/if-control-state/if-control-state.service'; import { ControlClassService } from '../common/providers/control-class.service'; import { ControlIdService } from '../common/providers/control-id.service'; import { NgControlService } from '../common/providers/ng-control.service'; import * as i0 from "@angular/core"; import * as i1 from "../common/providers/layout.service"; import * as i2 from "../common/providers/control-class.service"; import * as i3 from "../common/providers/ng-control.service"; import * as i4 from "../common/providers/control-id.service"; import * as i5 from "../common/if-control-state/if-control-state.service"; import * as i6 from "@angular/common"; import * as i7 from "../common/label"; import * as i8 from "../../icon/icon"; export class ClrRangeContainer extends ClrAbstractContainer { constructor(layoutService, controlClassService, ngControlService, renderer, idService, ifControlStateService) { super(ifControlStateService, layoutService, controlClassService, ngControlService); this.renderer = renderer; this.idService = idService; this.ifControlStateService = ifControlStateService; this._hasProgress = false; } get hasProgress() { return this._hasProgress; } set hasProgress(val) { const valBool = !!val; if (valBool !== this._hasProgress) { this._hasProgress = valBool; } } getRangeProgressFillWidth() { const input = this.selectRangeElement(); if (!input) { return this.lastRangeProgressFillWidth; } const inputWidth = input.offsetWidth; const inputMinValue = +input.min; let inputMaxValue = +input.max; if (inputMinValue === 0 && inputMaxValue === 0) { inputMaxValue = 100; } const inputMiddle = (inputMinValue + inputMaxValue) / 2; const inputValue = !!this.control && this.control.value !== undefined ? this.control.value : inputMiddle; const valueAsPercent = ((inputValue - inputMinValue) * 100) / (inputMaxValue - inputMinValue); this.lastRangeProgressFillWidth = (valueAsPercent * inputWidth) / 100 + 'px'; return this.lastRangeProgressFillWidth; } selectRangeElement() { try { return this.renderer.selectRootElement('[clrRange]#' + this.idService.id); } catch { return undefined; } } } ClrRangeContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrRangeContainer, deps: [{ token: i1.LayoutService, optional: true }, { token: i2.ControlClassService }, { token: i3.NgControlService }, { token: i0.Renderer2 }, { token: i4.ControlIdService }, { token: i5.IfControlStateService }], target: i0.ɵɵFactoryTarget.Component }); ClrRangeContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrRangeContainer, selector: "clr-range-container", inputs: { hasProgress: ["clrRangeHasProgress", "hasProgress"] }, host: { properties: { "class.clr-form-control": "true", "class.clr-form-control-disabled": "control?.disabled", "class.clr-row": "addGrid()" } }, providers: [IfControlStateService, NgControlService, ControlIdService, ControlClassService], usesInheritance: true, ngImport: i0, template: ` <ng-content select="label"></ng-content> <label *ngIf="!label && addGrid()"></label> <div class="clr-control-container" [ngClass]="controlClass()"> <div class="clr-range-wrapper" [class.progress-fill]="hasProgress"> <ng-content select="[clrRange]"></ng-content> <span *ngIf="hasProgress" class="fill-input" [style.width]="getRangeProgressFillWidth()"></span> <cds-icon *ngIf="showInvalid" class="clr-validate-icon" shape="exclamation-circle" status="danger" aria-hidden="true" ></cds-icon> <cds-icon *ngIf="showValid" class="clr-validate-icon" shape="check-circle" status="success" aria-hidden="true" ></cds-icon> </div> <ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content> <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content> <ng-content select="clr-control-success" *ngIf="showValid"></ng-content> </div> `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i8.CdsIconCustomTag, selector: "cds-icon" }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrRangeContainer, decorators: [{ type: Component, args: [{ selector: 'clr-range-container', template: ` <ng-content select="label"></ng-content> <label *ngIf="!label && addGrid()"></label> <div class="clr-control-container" [ngClass]="controlClass()"> <div class="clr-range-wrapper" [class.progress-fill]="hasProgress"> <ng-content select="[clrRange]"></ng-content> <span *ngIf="hasProgress" class="fill-input" [style.width]="getRangeProgressFillWidth()"></span> <cds-icon *ngIf="showInvalid" class="clr-validate-icon" shape="exclamation-circle" status="danger" aria-hidden="true" ></cds-icon> <cds-icon *ngIf="showValid" class="clr-validate-icon" shape="check-circle" status="success" aria-hidden="true" ></cds-icon> </div> <ng-content select="clr-control-helper" *ngIf="showHelper"></ng-content> <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content> <ng-content select="clr-control-success" *ngIf="showValid"></ng-content> </div> `, host: { '[class.clr-form-control]': 'true', '[class.clr-form-control-disabled]': 'control?.disabled', '[class.clr-row]': 'addGrid()', }, providers: [IfControlStateService, NgControlService, ControlIdService, ControlClassService], }] }], ctorParameters: function () { return [{ type: i1.LayoutService, decorators: [{ type: Optional }] }, { type: i2.ControlClassService }, { type: i3.NgControlService }, { type: i0.Renderer2 }, { type: i4.ControlIdService }, { type: i5.IfControlStateService }]; }, propDecorators: { hasProgress: [{ type: Input, args: ['clrRangeHasProgress'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvcmFuZ2UvcmFuZ2UtY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7QUFzQzFFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxvQkFBb0I7SUFJekQsWUFDYyxhQUE0QixFQUN4QyxtQkFBd0MsRUFDeEMsZ0JBQWtDLEVBQzFCLFFBQW1CLEVBQ25CLFNBQTJCLEVBQ2hCLHFCQUE0QztRQUUvRCxLQUFLLENBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFKM0UsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUNoQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBVHpELGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBWTdCLENBQUM7SUFFRCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEdBQVk7UUFDMUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN0QixJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUV4QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUM7U0FDeEM7UUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNqQyxJQUFJLGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFL0IsSUFBSSxhQUFhLEtBQUssQ0FBQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7WUFDOUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztTQUNyQjtRQUVELE1BQU0sV0FBVyxHQUFHLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDekcsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUU5RixJQUFJLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUU3RSxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQztJQUN6QyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0U7UUFBQyxNQUFNO1lBQ04sT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDOzs4R0F4RFUsaUJBQWlCO2tHQUFqQixpQkFBaUIsaVFBRmpCLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsaURBaENqRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQ7MkZBUVUsaUJBQWlCO2tCQXBDN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUO29CQUNELElBQUksRUFBRTt3QkFDSiwwQkFBMEIsRUFBRSxNQUFNO3dCQUNsQyxtQ0FBbUMsRUFBRSxtQkFBbUI7d0JBQ3hELGlCQUFpQixFQUFFLFdBQVc7cUJBQy9CO29CQUNELFNBQVMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2lCQUM1Rjs7MEJBTUksUUFBUTt3TUFXUCxXQUFXO3NCQURkLEtBQUs7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIzIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPcHRpb25hbCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENsckFic3RyYWN0Q29udGFpbmVyIH0gZnJvbSAnLi4vY29tbW9uL2Fic3RyYWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgeyBJZkNvbnRyb2xTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vaWYtY29udHJvbC1zdGF0ZS9pZi1jb250cm9sLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udHJvbENsYXNzU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9wcm92aWRlcnMvY29udHJvbC1jbGFzcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRyb2xJZFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vcHJvdmlkZXJzL2NvbnRyb2wtaWQuc2VydmljZSc7XG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3Byb3ZpZGVycy9sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3Byb3ZpZGVycy9uZy1jb250cm9sLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItcmFuZ2UtY29udGFpbmVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJsYWJlbFwiPjwvbmctY29udGVudD5cbiAgICA8bGFiZWwgKm5nSWY9XCIhbGFiZWwgJiYgYWRkR3JpZCgpXCI+PC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiY2xyLWNvbnRyb2wtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiY29udHJvbENsYXNzKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjbHItcmFuZ2Utd3JhcHBlclwiIFtjbGFzcy5wcm9ncmVzcy1maWxsXT1cImhhc1Byb2dyZXNzXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjbHJSYW5nZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzUHJvZ3Jlc3NcIiBjbGFzcz1cImZpbGwtaW5wdXRcIiBbc3R5bGUud2lkdGhdPVwiZ2V0UmFuZ2VQcm9ncmVzc0ZpbGxXaWR0aCgpXCI+PC9zcGFuPlxuICAgICAgICA8Y2RzLWljb25cbiAgICAgICAgICAqbmdJZj1cInNob3dJbnZhbGlkXCJcbiAgICAgICAgICBjbGFzcz1cImNsci12YWxpZGF0ZS1pY29uXCJcbiAgICAgICAgICBzaGFwZT1cImV4Y2xhbWF0aW9uLWNpcmNsZVwiXG4gICAgICAgICAgc3RhdHVzPVwiZGFuZ2VyXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+PC9jZHMtaWNvbj5cbiAgICAgICAgPGNkcy1pY29uXG4gICAgICAgICAgKm5nSWY9XCJzaG93VmFsaWRcIlxuICAgICAgICAgIGNsYXNzPVwiY2xyLXZhbGlkYXRlLWljb25cIlxuICAgICAgICAgIHNoYXBlPVwiY2hlY2stY2lyY2xlXCJcbiAgICAgICAgICBzdGF0dXM9XCJzdWNjZXNzXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+PC9jZHMtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2xyLWNvbnRyb2wtaGVscGVyXCIgKm5nSWY9XCJzaG93SGVscGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2xyLWNvbnRyb2wtZXJyb3JcIiAqbmdJZj1cInNob3dJbnZhbGlkXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2xyLWNvbnRyb2wtc3VjY2Vzc1wiICpuZ0lmPVwic2hvd1ZhbGlkXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5jbHItZm9ybS1jb250cm9sXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWRdJzogJ2NvbnRyb2w/LmRpc2FibGVkJyxcbiAgICAnW2NsYXNzLmNsci1yb3ddJzogJ2FkZEdyaWQoKScsXG4gIH0sXG4gIHByb3ZpZGVyczogW0lmQ29udHJvbFN0YXRlU2VydmljZSwgTmdDb250cm9sU2VydmljZSwgQ29udHJvbElkU2VydmljZSwgQ29udHJvbENsYXNzU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENsclJhbmdlQ29udGFpbmVyIGV4dGVuZHMgQ2xyQWJzdHJhY3RDb250YWluZXIge1xuICBwcml2YXRlIF9oYXNQcm9ncmVzcyA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RSYW5nZVByb2dyZXNzRmlsbFdpZHRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcbiAgICBjb250cm9sQ2xhc3NTZXJ2aWNlOiBDb250cm9sQ2xhc3NTZXJ2aWNlLFxuICAgIG5nQ29udHJvbFNlcnZpY2U6IE5nQ29udHJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgaWRTZXJ2aWNlOiBDb250cm9sSWRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBpZkNvbnRyb2xTdGF0ZVNlcnZpY2U6IElmQ29udHJvbFN0YXRlU2VydmljZVxuICApIHtcbiAgICBzdXBlcihpZkNvbnRyb2xTdGF0ZVNlcnZpY2UsIGxheW91dFNlcnZpY2UsIGNvbnRyb2xDbGFzc1NlcnZpY2UsIG5nQ29udHJvbFNlcnZpY2UpO1xuICB9XG5cbiAgQElucHV0KCdjbHJSYW5nZUhhc1Byb2dyZXNzJylcbiAgZ2V0IGhhc1Byb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNQcm9ncmVzcztcbiAgfVxuICBzZXQgaGFzUHJvZ3Jlc3ModmFsOiBib29sZWFuKSB7XG4gICAgY29uc3QgdmFsQm9vbCA9ICEhdmFsO1xuICAgIGlmICh2YWxCb29sICE9PSB0aGlzLl9oYXNQcm9ncmVzcykge1xuICAgICAgdGhpcy5faGFzUHJvZ3Jlc3MgPSB2YWxCb29sO1xuICAgIH1cbiAgfVxuXG4gIGdldFJhbmdlUHJvZ3Jlc3NGaWxsV2lkdGgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuc2VsZWN0UmFuZ2VFbGVtZW50KCk7XG5cbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0UmFuZ2VQcm9ncmVzc0ZpbGxXaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFdpZHRoID0gaW5wdXQub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgaW5wdXRNaW5WYWx1ZSA9ICtpbnB1dC5taW47XG4gICAgbGV0IGlucHV0TWF4VmFsdWUgPSAraW5wdXQubWF4O1xuXG4gICAgaWYgKGlucHV0TWluVmFsdWUgPT09IDAgJiYgaW5wdXRNYXhWYWx1ZSA9PT0gMCkge1xuICAgICAgaW5wdXRNYXhWYWx1ZSA9IDEwMDtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dE1pZGRsZSA9IChpbnB1dE1pblZhbHVlICsgaW5wdXRNYXhWYWx1ZSkgLyAyO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSAhIXRoaXMuY29udHJvbCAmJiB0aGlzLmNvbnRyb2wudmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMuY29udHJvbC52YWx1ZSA6IGlucHV0TWlkZGxlO1xuICAgIGNvbnN0IHZhbHVlQXNQZXJjZW50ID0gKChpbnB1dFZhbHVlIC0gaW5wdXRNaW5WYWx1ZSkgKiAxMDApIC8gKGlucHV0TWF4VmFsdWUgLSBpbnB1dE1pblZhbHVlKTtcblxuICAgIHRoaXMubGFzdFJhbmdlUHJvZ3Jlc3NGaWxsV2lkdGggPSAodmFsdWVBc1BlcmNlbnQgKiBpbnB1dFdpZHRoKSAvIDEwMCArICdweCc7XG5cbiAgICByZXR1cm4gdGhpcy5sYXN0UmFuZ2VQcm9ncmVzc0ZpbGxXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0UmFuZ2VFbGVtZW50KCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCgnW2NsclJhbmdlXSMnICsgdGhpcy5pZFNlcnZpY2UuaWQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==