UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

158 lines 22.5 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 { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, QueryList, Renderer2, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import _remove from "lodash/remove"; import { CheckboxComponent } from "./checkbox.component"; import { NuiFormFieldControl } from "../form-field/public-api"; import * as i0 from "@angular/core"; /** * Component for combining of nui-checkbox components in to group * <example-url>./../examples/index.html#/checkbox-group</example-url> */ export class CheckboxGroupComponent { constructor(renderer) { this.renderer = renderer; /** * Is emitted when nui-checkbox is selected */ this.valuesChange = new EventEmitter(); /** * Input to set aria label text */ this.ariaLabel = "Checkbox Group"; /** * Input to set aria label text */ this.ariaLabeledby = ""; this.subscriptionsArray = new Array(); this.disabled = false; } /** * Subscribe to nui-checkbox-group children values change */ ngAfterViewInit() { this.children.toArray().forEach((child) => { this.renderer.setAttribute(child.inputViewContainer.element.nativeElement, "name", this.name); this.subscriptionsArray.push(this.subscribeToCheckboxEvent(child)); setTimeout(() => { child.checked = this.values.indexOf(child.value) > -1; child.disabled = child.disabled || this.disabled; }); }); this.children.changes.subscribe((checkboxComponentQueryList) => { // verify that there are no observers on checkboxes as we are creating new. this.subscriptionsArray.forEach((sub) => sub.unsubscribe()); checkboxComponentQueryList .toArray() .forEach((checkbox) => { this.renderer.setAttribute(checkbox.inputViewContainer.element.nativeElement, "name", this.name); this.subscriptionsArray.push(this.subscribeToCheckboxEvent(checkbox)); setTimeout(() => { checkbox.checked = this.values.indexOf(checkbox.value) > -1; checkbox.disabled = checkbox.disabled || this.disabled; }); }); }); } onChange(value) { } onTouched() { } writeValue(value) { this.values = value; } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; if (this.children) { this.children .toArray() .forEach((child) => (child.disabled = this.disabled)); } } /** * Unsubscribe from valuesChange event */ ngOnDestroy() { this.subscriptionsArray.forEach((sub) => sub.unsubscribe()); } subscribeToCheckboxEvent(checkbox) { return checkbox.valueChange.subscribe((event) => { if (event.target.checked) { this.values = [...this.values, event.target.value]; } else { _remove(this.values, (x) => x === event.target.value); } this.valuesChange.emit(this.values); this.onChange(this.values); this.onTouched(); this.writeValue(this.values); }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CheckboxGroupComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CheckboxGroupComponent, selector: "nui-checkbox-group", inputs: { name: "name", values: "values", ariaLabel: "ariaLabel", ariaLabeledby: "ariaLabeledby" }, outputs: { valuesChange: "valuesChange" }, host: { attributes: { "role": "group" } }, providers: [ { provide: NuiFormFieldControl, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true, }, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true, }, ], queries: [{ propertyName: "children", predicate: CheckboxComponent, descendants: true }], ngImport: i0, template: "<div\n class=\"nui-checkbox-group\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labeledby]=\"ariaLabeledby || null\"\n>\n <ng-content></ng-content>\n</div>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CheckboxGroupComponent, decorators: [{ type: Component, args: [{ selector: "nui-checkbox-group", changeDetection: ChangeDetectionStrategy.OnPush, providers: [ { provide: NuiFormFieldControl, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true, }, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true, }, ], host: { role: "group" }, template: "<div\n class=\"nui-checkbox-group\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labeledby]=\"ariaLabeledby || null\"\n>\n <ng-content></ng-content>\n</div>\n" }] }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { name: [{ type: Input }], values: [{ type: Input }], valuesChange: [{ type: Output }], children: [{ type: ContentChildren, args: [CheckboxComponent, { descendants: true }] }], ariaLabel: [{ type: Input }], ariaLabeledby: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jaGVja2JveC9jaGVja2JveC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2NoZWNrYm94L2NoZWNrYm94LWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUdwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFvQi9EOzs7R0FHRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFxQy9CLFlBQW9CLFFBQW1CO1FBQW5CLGFBQVEsR0FBUixRQUFRLENBQVc7UUF4QnZDOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBUTFEOztXQUVHO1FBQ2EsY0FB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RUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSixtREE0QmdCLGlCQUFpQixnRENwRnRDLHNMQU9BOzs0RkR3RGEsc0JBQXNCO2tCQXRCbEMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBRWIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKLFFBQ0ssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFOzhFQVlQLElBQUk7c0JBQW5CLEtBQUs7Z0JBS1UsTUFBTTtzQkFBckIsS0FBSztnQkFLVyxZQUFZO3NCQUE1QixNQUFNO2dCQU1DLFFBQVE7c0JBRGYsZUFBZTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBTXpDLFNBQVM7c0JBQXhCLEtBQUs7Z0JBS1UsYUFBYTtzQkFBNUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCBfcmVtb3ZlIGZyb20gXCJsb2Rhc2gvcmVtb3ZlXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gXCIuL2NoZWNrYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ2hlY2tib3hDaGFuZ2VFdmVudCwgSUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSBcIi4vcHVibGljLWFwaVwiO1xuaW1wb3J0IHsgTnVpRm9ybUZpZWxkQ29udHJvbCB9IGZyb20gXCIuLi9mb3JtLWZpZWxkL3B1YmxpYy1hcGlcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibnVpLWNoZWNrYm94LWdyb3VwXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9jaGVja2JveC1ncm91cC5jb21wb25lbnQuaHRtbFwiLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOdWlGb3JtRmllbGRDb250cm9sLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hHcm91cENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveEdyb3VwQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgaG9zdDogeyByb2xlOiBcImdyb3VwXCIgfSxcbn0pXG4vKipcbiAqIENvbXBvbmVudCBmb3IgY29tYmluaW5nIG9mIG51aS1jaGVja2JveCBjb21wb25lbnRzIGluIHRvIGdyb3VwXG4gKiA8ZXhhbXBsZS11cmw+Li8uLi9leGFtcGxlcy9pbmRleC5odG1sIy9jaGVja2JveC1ncm91cDwvZXhhbXBsZS11cmw+XG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja2JveEdyb3VwQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG57XG4gICAgLyoqXG4gICAgICogU2V0cyBcIm5hbWVcIiBhdHRyaWJ1dGUgZm9yIGlubmVyIGlucHV0IGVsZW1lbnQgb2YgbnVpLWNoZWNrYm94XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBudWktY2hlY2tib3hlcyBjaGlsZHJlbiBjb21wb25lbnRzXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbHVlczogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBJcyBlbWl0dGVkIHdoZW4gbnVpLWNoZWNrYm94IGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tib3hHcm91cENvbXBvbmVudCBjaGlsZHJlbiBhcnJheSBmcm9tIENoZWNrYm94Q29tcG9uZW50IGl0ZW1zXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihDaGVja2JveENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHByaXZhdGUgY2hpbGRyZW46IFF1ZXJ5TGlzdDxDaGVja2JveENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBJbnB1dCB0byBzZXQgYXJpYSBsYWJlbCB0ZXh0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGFyaWFMYWJlbCA9IFwiQ2hlY2tib3ggR3JvdXBcIjtcblxuICAgIC8qKlxuICAgICAqIElucHV0IHRvIHNldCBhcmlhIGxhYmVsIHRleHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYUxhYmVsZWRieSA9IFwiXCI7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnNBcnJheSA9IG5ldyBBcnJheTxTdWJzY3JpcHRpb24+KCk7XG4gICAgcHJpdmF0ZSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxuXG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlIHRvIG51aS1jaGVja2JveC1ncm91cCBjaGlsZHJlbiB2YWx1ZXMgY2hhbmdlXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi50b0FycmF5KCkuZm9yRWFjaCgoY2hpbGQ6IElDaGVja2JveENvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgY2hpbGQuaW5wdXRWaWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNBcnJheS5wdXNoKHRoaXMuc3Vic2NyaWJlVG9DaGVja2JveEV2ZW50KGNoaWxkKSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGlsZC5jaGVja2VkID0gdGhpcy52YWx1ZXMuaW5kZXhPZihjaGlsZC52YWx1ZSkgPiAtMTtcbiAgICAgICAgICAgICAgICBjaGlsZC5kaXNhYmxlZCA9IGNoaWxkLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAgIChjaGVja2JveENvbXBvbmVudFF1ZXJ5TGlzdDogUXVlcnlMaXN0PElDaGVja2JveENvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gb2JzZXJ2ZXJzIG9uIGNoZWNrYm94ZXMgYXMgd2UgYXJlIGNyZWF0aW5nIG5ldy5cbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNBcnJheS5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgICAgICBjaGVja2JveENvbXBvbmVudFF1ZXJ5TGlzdFxuICAgICAgICAgICAgICAgICAgICAudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChjaGVja2JveDogSUNoZWNrYm94Q29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5pbnB1dFZpZXdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc0FycmF5LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoZWNrYm94RXZlbnQoY2hlY2tib3gpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzLmluZGV4T2YoY2hlY2tib3gudmFsdWUpID4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZSh2YWx1ZTogYW55W10pOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgb25Ub3VjaGVkKCk6IHZvaWQge31cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGNoaWxkKSA9PiAoY2hpbGQuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnN1YnNjcmliZSBmcm9tIHZhbHVlc0NoYW5nZSBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zQXJyYXkuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0NoZWNrYm94RXZlbnQoXG4gICAgICAgIGNoZWNrYm94OiBJQ2hlY2tib3hDb21wb25lbnRcbiAgICApOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gY2hlY2tib3gudmFsdWVDaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogQ2hlY2tib3hDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbLi4udGhpcy52YWx1ZXMsIGV2ZW50LnRhcmdldC52YWx1ZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9yZW1vdmUodGhpcy52YWx1ZXMsICh4OiBhbnkpID0+IHggPT09IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHRoaXMudmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cIm51aS1jaGVja2JveC1ncm91cFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGVkYnldPVwiYXJpYUxhYmVsZWRieSB8fCBudWxsXCJcbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==