UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

104 lines 19.6 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { NuiFormFieldControl } from "../form-field/public-api"; import * as i0 from "@angular/core"; /** * <example-url>./../examples/index.html#/switch</example-url> */ export class SwitchComponent { constructor() { /** * Input to set aria label text */ this.ariaLabel = "Switch"; this.valueChange = new EventEmitter(); } toggle() { if (this.disabled) { return; } const toggledValue = !this.value; this.valueChange.emit(toggledValue); // this is here because of a bug in reactive forms, // that causes the UI not to update when a value is updated on the FormControl // https://github.com/angular/angular/issues/13792 this.value = toggledValue; this.onChange(toggledValue); this.onTouched(); } onChange(value) { } onTouched() { } writeValue(value) { if (value !== undefined) { this.value = !!value; } } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; } ngOnInit() { this.value = !!this.value; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SwitchComponent, selector: "nui-switch", inputs: { value: "value", disabled: "disabled", ariaLabel: "ariaLabel" }, outputs: { valueChange: "valueChange" }, providers: [ { provide: NuiFormFieldControl, useExisting: forwardRef(() => SwitchComponent), multi: true, }, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SwitchComponent), multi: true, }, ], ngImport: i0, template: "<div\n class=\"nui-switch\"\n [class.nui-switched]=\"value\"\n [class.nui-disabled]=\"disabled\"\n [attr.disabled]=\"disabled\"\n>\n <div class=\"nui-switch__container\">\n <div\n class=\"nui-switch__bar\"\n (click)=\"toggle()\"\n (keyup.enter)=\"toggle()\"\n (keyup.space)=\"toggle()\"\n tabindex=\"{{ disabled ? -1 : 0 }}\"\n role=\"checkbox\"\n [attr.aria-checked]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n >\n <div class=\"nui-switch__on\">\n <svg\n aria-hidden=\"true\"\n class=\"nui-switch__svg\"\n viewBox=\"0 0 7.1 6.7\"\n >\n <polyline\n class=\"nui-switch__icon-on\"\n points=\"0.6,2.9 3.2,4.8 7.2,1.0 \"\n />\n </svg>\n </div>\n <div class=\"nui-switch__thumb\">\n <svg\n aria-hidden=\"true\"\n class=\"nui-switch__svg\"\n viewBox=\"0 0 7.1 6.7\"\n ></svg>\n </div>\n </div>\n <label class=\"nui-switch__label\">\n <ng-content></ng-content>\n </label>\n </div>\n</div>\n", styles: [":host .nui-switch{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}:host .nui-switch[disabled=true]{cursor:default;pointer-events:none;opacity:.4;filter:alpha(opacity=40)}:host .nui-switch:focus{outline:none}:host .nui-switch.nui-switched .nui-switch__bar{background-color:var(--nui-color-on,#00a753)}:host .nui-switch.nui-switched .nui-switch__thumb{transform:translate(20px)}:host .nui-switch__container{display:inline-block}:host .nui-switch__label{margin:0 0 0 10px}:host .nui-switch__bar{cursor:pointer;height:20px;width:40px;border-radius:10px;background-color:var(--nui-color-off,#4d4d4d);position:relative;float:left;transition:background-color ease .3s}:host .nui-switch__bar:focus{outline:none;z-index:500;box-shadow:0 0 0 2px #00c4d280}:host .nui-switch__on,:host .nui-switch__off,:host .nui-switch__thumb{width:14px;height:14px;text-align:center;position:relative;top:3px}:host .nui-switch__thumb{width:14px;height:14px;border-radius:10px;background-color:var(--nui-color-bg-light,#fff);position:absolute;left:3px;top:3px;transition:transform ease .3s}:host .nui-switch__svg{width:10px;height:10px;display:block;margin:1px 6px}:host .nui-switch__icon-on{fill:none;stroke:var(--nui-color-line-inverse,#fff);stroke-width:1;stroke-miterlimit:10}:host .nui-switch__icon-off{fill:none;stroke:var(--nui-color-line-inverse,#fff);stroke-width:1;stroke-miterlimit:10}:host .nui-switch__icon-thumb{fill:none;stroke:var(--nui-color-line-default,#d9d9d9);stroke-miterlimit:10}:host .nui-switch__label:focus{outline:none}\n"] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwitchComponent, decorators: [{ type: Component, args: [{ selector: "nui-switch", providers: [ { provide: NuiFormFieldControl, useExisting: forwardRef(() => SwitchComponent), multi: true, }, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SwitchComponent), multi: true, }, ], encapsulation: ViewEncapsulation.Emulated, template: "<div\n class=\"nui-switch\"\n [class.nui-switched]=\"value\"\n [class.nui-disabled]=\"disabled\"\n [attr.disabled]=\"disabled\"\n>\n <div class=\"nui-switch__container\">\n <div\n class=\"nui-switch__bar\"\n (click)=\"toggle()\"\n (keyup.enter)=\"toggle()\"\n (keyup.space)=\"toggle()\"\n tabindex=\"{{ disabled ? -1 : 0 }}\"\n role=\"checkbox\"\n [attr.aria-checked]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n >\n <div class=\"nui-switch__on\">\n <svg\n aria-hidden=\"true\"\n class=\"nui-switch__svg\"\n viewBox=\"0 0 7.1 6.7\"\n >\n <polyline\n class=\"nui-switch__icon-on\"\n points=\"0.6,2.9 3.2,4.8 7.2,1.0 \"\n />\n </svg>\n </div>\n <div class=\"nui-switch__thumb\">\n <svg\n aria-hidden=\"true\"\n class=\"nui-switch__svg\"\n viewBox=\"0 0 7.1 6.7\"\n ></svg>\n </div>\n </div>\n <label class=\"nui-switch__label\">\n <ng-content></ng-content>\n </label>\n </div>\n</div>\n", styles: [":host .nui-switch{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}:host .nui-switch[disabled=true]{cursor:default;pointer-events:none;opacity:.4;filter:alpha(opacity=40)}:host .nui-switch:focus{outline:none}:host .nui-switch.nui-switched .nui-switch__bar{background-color:var(--nui-color-on,#00a753)}:host .nui-switch.nui-switched .nui-switch__thumb{transform:translate(20px)}:host .nui-switch__container{display:inline-block}:host .nui-switch__label{margin:0 0 0 10px}:host .nui-switch__bar{cursor:pointer;height:20px;width:40px;border-radius:10px;background-color:var(--nui-color-off,#4d4d4d);position:relative;float:left;transition:background-color ease .3s}:host .nui-switch__bar:focus{outline:none;z-index:500;box-shadow:0 0 0 2px #00c4d280}:host .nui-switch__on,:host .nui-switch__off,:host .nui-switch__thumb{width:14px;height:14px;text-align:center;position:relative;top:3px}:host .nui-switch__thumb{width:14px;height:14px;border-radius:10px;background-color:var(--nui-color-bg-light,#fff);position:absolute;left:3px;top:3px;transition:transform ease .3s}:host .nui-switch__svg{width:10px;height:10px;display:block;margin:1px 6px}:host .nui-switch__icon-on{fill:none;stroke:var(--nui-color-line-inverse,#fff);stroke-width:1;stroke-miterlimit:10}:host .nui-switch__icon-off{fill:none;stroke:var(--nui-color-line-inverse,#fff);stroke-width:1;stroke-miterlimit:10}:host .nui-switch__icon-thumb{fill:none;stroke:var(--nui-color-line-default,#d9d9d9);stroke-miterlimit:10}:host .nui-switch__label:focus{outline:none}\n"] }] }], propDecorators: { value: [{ type: Input }], disabled: [{ type: Input }], ariaLabel: [{ type: Input }], valueChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc3dpdGNoL3N3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3N3aXRjaC9zd2l0Y2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRS9EOztHQUVHO0FBbUJILE1BQU0sT0FBTyxlQUFlO0lBbEI1QjtRQXNCSTs7V0FFRztRQUNhLGNBQVMsR0FBVyxRQUFRLENBQUM7UUFFbkMsZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztLQTRDOUU7SUExQ0csTUFBTTtRQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE9BQU87U0FDVjtRQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVwQyxtREFBbUQ7UUFDbkQsOEVBQThFO1FBQzlFLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUUxQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVUsSUFBUyxDQUFDO0lBRTdCLFNBQVMsS0FBVSxDQUFDO0lBRXBCLFVBQVUsQ0FBQyxLQUFVO1FBQ2pCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBd0I7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDOytHQXBEUSxlQUFlO21HQUFmLGVBQWUsd0pBZmI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDZDtZQUNEO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osMEJDbERMLDQwQ0EwQ0E7OzRGRFlhLGVBQWU7a0JBbEIzQixTQUFTOytCQUNJLFlBQVksYUFFWDt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQzs0QkFDOUMsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKLGlCQUVjLGlCQUFpQixDQUFDLFFBQVE7OEJBR3pCLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5pbXBvcnQgeyBOdWlGb3JtRmllbGRDb250cm9sIH0gZnJvbSBcIi4uL2Zvcm0tZmllbGQvcHVibGljLWFwaVwiO1xuXG4vKipcbiAqIDxleGFtcGxlLXVybD4uLy4uL2V4YW1wbGVzL2luZGV4Lmh0bWwjL3N3aXRjaDwvZXhhbXBsZS11cmw+XG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm51aS1zd2l0Y2hcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3N3aXRjaC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOdWlGb3JtRmllbGRDb250cm9sLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3dpdGNoQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN3aXRjaENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIHN0eWxlVXJsczogW1wiLi9zd2l0Y2guY29tcG9uZW50Lmxlc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG59KVxuZXhwb3J0IGNsYXNzIFN3aXRjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJbnB1dCB0byBzZXQgYXJpYSBsYWJlbCB0ZXh0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nID0gXCJTd2l0Y2hcIjtcblxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9nZ2xlZFZhbHVlID0gIXRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0b2dnbGVkVmFsdWUpO1xuXG4gICAgICAgIC8vIHRoaXMgaXMgaGVyZSBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0aXZlIGZvcm1zLFxuICAgICAgICAvLyB0aGF0IGNhdXNlcyB0aGUgVUkgbm90IHRvIHVwZGF0ZSB3aGVuIGEgdmFsdWUgaXMgdXBkYXRlZCBvbiB0aGUgRm9ybUNvbnRyb2xcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM3OTJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRvZ2dsZWRWYWx1ZTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRvZ2dsZWRWYWx1ZSk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge31cblxuICAgIG9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSAhIXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9ICEhdGhpcy52YWx1ZTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJudWktc3dpdGNoXCJcbiAgICBbY2xhc3MubnVpLXN3aXRjaGVkXT1cInZhbHVlXCJcbiAgICBbY2xhc3MubnVpLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4+XG4gICAgPGRpdiBjbGFzcz1cIm51aS1zd2l0Y2hfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm51aS1zd2l0Y2hfX2JhclwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInRvZ2dsZSgpXCJcbiAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJ0b2dnbGUoKVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cInt7IGRpc2FibGVkID8gLTEgOiAwIH19XCJcbiAgICAgICAgICAgIHJvbGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwidmFsdWVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnVpLXN3aXRjaF9fb25cIj5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibnVpLXN3aXRjaF9fc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA3LjEgNi43XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwb2x5bGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJudWktc3dpdGNoX19pY29uLW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cz1cIjAuNiwyLjkgMy4yLDQuOCA3LjIsMS4wIFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJudWktc3dpdGNoX190aHVtYlwiPlxuICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJudWktc3dpdGNoX19zdmdcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDcuMSA2LjdcIlxuICAgICAgICAgICAgICAgID48L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibnVpLXN3aXRjaF9fbGFiZWxcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19