@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
236 lines • 22.6 kB
JavaScript
/**
* Copyright (c) 2025 Visa, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**/
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { AppReadyService } from '../_utilities/services/app-stable-check.service';
import { UUIDService } from '../_utilities/services/uuid.service';
import { BaseInteractiveDirective } from '../_utilities/angular-specific-directives/base-interactive.directive';
import * as i0 from "@angular/core";
import * as i1 from "../_utilities/services/uuid.service";
import * as i2 from "../_utilities/services/app-stable-check.service";
export class RadioDirective extends BaseInteractiveDirective {
get hostValue() {
return this.radioValue;
}
get hostId() {
return this.id;
}
get hostName() {
if (this.name || this.formName) {
return this.name || this.formName;
}
}
get hostClasses() {
return [this.class, 'v-radio'].join(' ');
}
get hostType() {
return 'radio';
}
/**
* Sets radio as disabled when true.
* @default false
*/
get disabled() {
return this._disabled;
}
set disabled(value) {
this._disabled = coerceBooleanProperty(value);
this._disabledEmitter.emit();
}
get hostDisabled() {
return this.disabled ? 'disabled' : null;
}
/** Fires when a formControl's disabled state updates. */
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
/**
* Marks radio as invalid when true.
* @default false
*/
get invalid() {
return this._invalid;
}
set invalid(value) {
this._invalid = coerceBooleanProperty(value);
this._invalidEmitter.emit();
}
get hostAriaInvalid() {
return this.invalid;
}
/**
* Marks component as required when true.
* @default false
*/
get required() {
return this._required;
}
set required(value) {
this._required = coerceBooleanProperty(value);
}
get hostRequired() {
return this.required ? 'required' : null;
}
/**
* Sets checked state of component.
* @default false
*/
get checked() {
return this._checked;
}
set checked(value) {
this._checked = coerceBooleanProperty(value);
}
get hostStyle() {
return this._isToggle ? 'fixed' : 'unset';
}
set value(value) {
this.val = value;
this.onChange(value);
}
handleChange(event) {
if (this.appReadyService.isBrowserAndDomAvailable()) {
this.onChange(this.radioValue);
this.checked = this.el.nativeElement.checked;
}
}
handleFocus(event) {
this.onTouched('');
}
handleBlur(event) { }
constructor(el, uuidService, appReadyService) {
super(el);
this.uuidService = uuidService;
this.appReadyService = appReadyService;
this._disabledEmitter = new EventEmitter();
this._invalidEmitter = new EventEmitter();
/**
* Sets custom id.
* @default uuidService.getUUID('v-radio-')
* @builtin true
*/
this.id = this.uuidService.getUUID('v-radio-');
/**
* Provides custom class(es) for custom styling.
* @default .v-radio
*/
this.class = ''; // override the standard class attr with a new one.
this._disabled = false;
this._invalid = false;
this._required = false;
this._checked = false;
this.val = '';
this.onChange = (_) => { };
this.onTouched = (_) => { };
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
writeValue(value) {
this.val = value;
this.checked = this.radioValue === value;
if (this.appReadyService.isBrowserAndDomAvailable()) {
this.el.nativeElement.checked = this.checked;
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioDirective, deps: [{ token: i0.ElementRef }, { token: i1.UUIDService }, { token: i2.AppReadyService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: RadioDirective, isStandalone: true, selector: "[v-radio]", inputs: { radioValue: ["value", "radioValue"], id: "id", formName: ["formControlName", "formName"], name: "name", class: "class", disabled: "disabled", invalid: "invalid", required: "required", checked: "checked" }, host: { listeners: { "change": "handleChange($event)", "focus": "handleFocus($event)", "blur": "handleBlur($event)" }, properties: { "attr.value": "this.hostValue", "value": "this.hostValue", "attr.id": "this.hostId", "name": "this.hostName", "class": "this.hostClasses", "type": "this.hostType", "attr.disabled": "this.hostDisabled", "attr.aria-invalid": "this.hostAriaInvalid", "attr.required": "this.hostRequired", "style.position": "this.hostStyle" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RadioDirective),
multi: true
}
], usesInheritance: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[v-radio]',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RadioDirective),
multi: true
}
]
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.UUIDService }, { type: i2.AppReadyService }], propDecorators: { radioValue: [{
type: Input,
args: ['value']
}], hostValue: [{
type: HostBinding,
args: ['attr.value']
}, {
type: HostBinding,
args: ['value']
}], id: [{
type: Input
}], hostId: [{
type: HostBinding,
args: ['attr.id']
}], formName: [{
type: Input,
args: ['formControlName']
}], name: [{
type: Input
}], hostName: [{
type: HostBinding,
args: ['name']
}], class: [{
type: Input
}], hostClasses: [{
type: HostBinding,
args: ['class']
}], hostType: [{
type: HostBinding,
args: ['type']
}], disabled: [{
type: Input
}], hostDisabled: [{
type: HostBinding,
args: ['attr.disabled']
}], invalid: [{
type: Input
}], hostAriaInvalid: [{
type: HostBinding,
args: ['attr.aria-invalid']
}], required: [{
type: Input
}], hostRequired: [{
type: HostBinding,
args: ['attr.required']
}], checked: [{
type: Input
}], hostStyle: [{
type: HostBinding,
args: ['style.position']
}], handleChange: [{
type: HostListener,
args: ['change', ['$event']]
}], handleFocus: [{
type: HostListener,
args: ['focus', ['$event']]
}], handleBlur: [{
type: HostListener,
args: ['blur', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ub3ZhLWxpYi9zcmMvbGliL3JhZGlvL3JhZGlvLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0lBZUk7QUFDSixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQzs7OztBQWFoSCxNQUFNLE9BQU8sY0FBZSxTQUFRLHdCQUF3QjtJQU8xRCxJQUVJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQVFELElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBV0QsSUFDSSxRQUFRO1FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQU9ELElBQ0ksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lB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LFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMjUgVmlzYSwgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICoqL1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBcHBSZWFkeVNlcnZpY2UgfSBmcm9tICcuLi9fdXRpbGl0aWVzL3NlcnZpY2VzL2FwcC1zdGFibGUtY2hlY2suc2VydmljZSc7XG5pbXBvcnQgeyBVVUlEU2VydmljZSB9IGZyb20gJy4uL191dGlsaXRpZXMvc2VydmljZXMvdXVpZC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VJbnRlcmFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uL191dGlsaXRpZXMvYW5ndWxhci1zcGVjaWZpYy1kaXJlY3RpdmVzL2Jhc2UtaW50ZXJhY3RpdmUuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW3YtcmFkaW9dJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYWRpb0RpcmVjdGl2ZSksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0RpcmVjdGl2ZSBleHRlbmRzIEJhc2VJbnRlcmFjdGl2ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgX2Rpc2FibGVkRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBfaW52YWxpZEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHJhZGlvIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCd2YWx1ZScpIHJhZGlvVmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnZhbHVlJylcbiAgQEhvc3RCaW5kaW5nKCd2YWx1ZScpXG4gIGdldCBob3N0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFkaW9WYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGN1c3RvbSBpZC5cbiAgICogQGRlZmF1bHQgdXVpZFNlcnZpY2UuZ2V0VVVJRCgndi1yYWRpby0nKVxuICAgKiBAYnVpbHRpbiB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBpZDogc3RyaW5nID0gdGhpcy51dWlkU2VydmljZS5nZXRVVUlEKCd2LXJhZGlvLScpO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICBnZXQgaG9zdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvLyBAVE9ETzogY291bGQgYXZvaWQgdGhpcyBieSBleHRlbmRpbmcgUmFkaW9Db250cm9sVmFsdWVBY2Nlc3Nvcj9cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBJbnB1dCgnZm9ybUNvbnRyb2xOYW1lJykgZm9ybU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcbiAgQEhvc3RCaW5kaW5nKCduYW1lJylcbiAgZ2V0IGhvc3ROYW1lKCk6IHN0cmluZyB8IHZvaWQge1xuICAgIGlmICh0aGlzLm5hbWUgfHwgdGhpcy5mb3JtTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZSB8fCB0aGlzLmZvcm1OYW1lO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBjdXN0b20gY2xhc3MmIzQwO2VzJiM0MTsgZm9yIGN1c3RvbSBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAudi1yYWRpb1xuICAgKi9cbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnOyAvLyBvdmVycmlkZSB0aGUgc3RhbmRhcmQgY2xhc3MgYXR0ciB3aXRoIGEgbmV3IG9uZS5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbdGhpcy5jbGFzcywgJ3YtcmFkaW8nXS5qb2luKCcgJyk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3R5cGUnKVxuICBnZXQgaG9zdFR5cGUoKSB7XG4gICAgcmV0dXJuICdyYWRpbyc7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyByYWRpbyBhcyBkaXNhYmxlZCB3aGVuIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX2Rpc2FibGVkRW1pdHRlci5lbWl0KCk7XG4gIH1cbiAgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gIGdldCBob3N0RGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbDtcbiAgfVxuICAvKiogRmlyZXMgd2hlbiBhIGZvcm1Db250cm9sJ3MgZGlzYWJsZWQgc3RhdGUgdXBkYXRlcy4gICovXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHJhZGlvIGFzIGludmFsaWQgd2hlbiB0cnVlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ludmFsaWQ7XG4gIH1cbiAgc2V0IGludmFsaWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2ludmFsaWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX2ludmFsaWRFbWl0dGVyLmVtaXQoKTtcbiAgfVxuICBfaW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1pbnZhbGlkJylcbiAgZ2V0IGhvc3RBcmlhSW52YWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIGNvbXBvbmVudCBhcyByZXF1aXJlZCB3aGVuIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG4gIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIF9yZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucmVxdWlyZWQnKVxuICBnZXQgaG9zdFJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkID8gJ3JlcXVpcmVkJyA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjaGVja2VkIHN0YXRlIG9mIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xuICB9XG4gIHNldCBjaGVja2VkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9jaGVja2VkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBfY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBASG9zdEJpbmRpbmcoJ2F0dHIuY2hlY2tlZCcpXG4gIC8vIEBIb3N0QmluZGluZygnY2hlY2tlZCcpXG4gIC8vIGdldCBob3N0Q2hlY2tlZCgpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5jaGVja2VkID8gJ2NoZWNrZWQnIDogbnVsbDtcbiAgLy8gfVxuXG4gIC8vIHByZXZlbnQgdG9nZ2xlIGZyb20gYWRkaW5nIGV4dHJhIHNjcm9sbFxuICBfaXNUb2dnbGU6IGJvb2xlYW47XG4gIEBIb3N0QmluZGluZygnc3R5bGUucG9zaXRpb24nKVxuICBnZXQgaG9zdFN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RvZ2dsZSA/ICdmaXhlZCcgOiAndW5zZXQnO1xuICB9XG5cbiAgdmFsOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gJyc7XG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy52YWwgPSB2YWx1ZTtcblxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmFwcFJlYWR5U2VydmljZS5pc0Jyb3dzZXJBbmREb21BdmFpbGFibGUoKSkge1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnJhZGlvVmFsdWUpO1xuICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxuICBoYW5kbGVGb2N1cyhldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgnJyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlQmx1cihldmVudDogRXZlbnQpIHt9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB1dWlkU2VydmljZTogVVVJRFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBSZWFkeVNlcnZpY2U6IEFwcFJlYWR5U2VydmljZVxuICApIHtcbiAgICBzdXBlcihlbCk7XG4gIH1cblxuICBvbkNoYW5nZSA9IChfOiBzdHJpbmcgfCBudW1iZXIpID0+IHt9O1xuXG4gIG9uVG91Y2hlZCA9IChfOiBzdHJpbmcgfCBudW1iZXIpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy52YWwgPSB2YWx1ZTtcbiAgICB0aGlzLmNoZWNrZWQgPSB0aGlzLnJhZGlvVmFsdWUgPT09IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuYXBwUmVhZHlTZXJ2aWNlLmlzQnJvd3NlckFuZERvbUF2YWlsYWJsZSgpKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==