@visa/nova-angular
Version:
Visa Product Design System Nova Angular library
236 lines • 22.6 kB
JavaScript
/**
* © 2025 Visa
*
* 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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LFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICAgICAgICAgICAgICDCqSAyMDI1IFZpc2FcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqKi9cbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXBwUmVhZHlTZXJ2aWNlIH0gZnJvbSAnLi4vX3V0aWxpdGllcy9zZXJ2aWNlcy9hcHAtc3RhYmxlLWNoZWNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgVVVJRFNlcnZpY2UgfSBmcm9tICcuLi9fdXRpbGl0aWVzL3NlcnZpY2VzL3V1aWQuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSW50ZXJhY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi9fdXRpbGl0aWVzL2FuZ3VsYXItc3BlY2lmaWMtZGlyZWN0aXZlcy9iYXNlLWludGVyYWN0aXZlLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1t2LXJhZGlvXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFkaW9EaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUmFkaW9EaXJlY3RpdmUgZXh0ZW5kcyBCYXNlSW50ZXJhY3RpdmVEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIF9kaXNhYmxlZEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgX2ludmFsaWRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiByYWRpbyBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgndmFsdWUnKSByYWRpb1ZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIEBIb3N0QmluZGluZygnYXR0ci52YWx1ZScpXG4gIEBIb3N0QmluZGluZygndmFsdWUnKVxuICBnZXQgaG9zdFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnJhZGlvVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjdXN0b20gaWQuXG4gICAqIEBkZWZhdWx0IHV1aWRTZXJ2aWNlLmdldFVVSUQoJ3YtcmFkaW8tJylcbiAgICogQGJ1aWx0aW4gdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9IHRoaXMudXVpZFNlcnZpY2UuZ2V0VVVJRCgndi1yYWRpby0nKTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgZ2V0IGhvc3RJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLy8gQFRPRE86IGNvdWxkIGF2b2lkIHRoaXMgYnkgZXh0ZW5kaW5nIFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3I/XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBASW5wdXQoJ2Zvcm1Db250cm9sTmFtZScpIGZvcm1OYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIEBIb3N0QmluZGluZygnbmFtZScpXG4gIGdldCBob3N0TmFtZSgpOiBzdHJpbmcgfCB2b2lkIHtcbiAgICBpZiAodGhpcy5uYW1lIHx8IHRoaXMuZm9ybU5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWUgfHwgdGhpcy5mb3JtTmFtZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgY3VzdG9tIGNsYXNzJiM0MDtlcyYjNDE7IGZvciBjdXN0b20gc3R5bGluZy5cbiAgICogQGRlZmF1bHQgLnYtcmFkaW9cbiAgICovXG4gIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJzsgLy8gb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGNsYXNzIGF0dHIgd2l0aCBhIG5ldyBvbmUuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW3RoaXMuY2xhc3MsICd2LXJhZGlvJ10uam9pbignICcpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCd0eXBlJylcbiAgZ2V0IGhvc3RUeXBlKCkge1xuICAgIHJldHVybiAncmFkaW8nO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcmFkaW8gYXMgZGlzYWJsZWQgd2hlbiB0cnVlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9kaXNhYmxlZEVtaXR0ZXIuZW1pdCgpO1xuICB9XG4gIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgaG9zdERpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gJ2Rpc2FibGVkJyA6IG51bGw7XG4gIH1cbiAgLyoqIEZpcmVzIHdoZW4gYSBmb3JtQ29udHJvbCdzIGRpc2FibGVkIHN0YXRlIHVwZGF0ZXMuICAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyByYWRpbyBhcyBpbnZhbGlkIHdoZW4gdHJ1ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbnZhbGlkO1xuICB9XG4gIHNldCBpbnZhbGlkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9pbnZhbGlkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9pbnZhbGlkRW1pdHRlci5lbWl0KCk7XG4gIH1cbiAgX2ludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpXG4gIGdldCBob3N0QXJpYUludmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wb25lbnQgYXMgcmVxdWlyZWQgd2hlbiB0cnVlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlcXVpcmVkJylcbiAgZ2V0IGhvc3RSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZCA/ICdyZXF1aXJlZCcgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgY2hlY2tlZCBzdGF0ZSBvZiBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgfVxuICBzZXQgY2hlY2tlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fY2hlY2tlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgX2NoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQEhvc3RCaW5kaW5nKCdhdHRyLmNoZWNrZWQnKVxuICAvLyBASG9zdEJpbmRpbmcoJ2NoZWNrZWQnKVxuICAvLyBnZXQgaG9zdENoZWNrZWQoKSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuY2hlY2tlZCA/ICdjaGVja2VkJyA6IG51bGw7XG4gIC8vIH1cblxuICAvLyBwcmV2ZW50IHRvZ2dsZSBmcm9tIGFkZGluZyBleHRyYSBzY3JvbGxcbiAgX2lzVG9nZ2xlOiBib29sZWFuO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvc2l0aW9uJylcbiAgZ2V0IGhvc3RTdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNUb2dnbGUgPyAnZml4ZWQnIDogJ3Vuc2V0JztcbiAgfVxuXG4gIHZhbDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9ICcnO1xuICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHRoaXMudmFsID0gdmFsdWU7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5hcHBSZWFkeVNlcnZpY2UuaXNCcm93c2VyQW5kRG9tQXZhaWxhYmxlKCkpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5yYWRpb1ZhbHVlKTtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jaGVja2VkO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlRm9jdXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5vblRvdWNoZWQoJycpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUJsdXIoZXZlbnQ6IEV2ZW50KSB7fVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdXVpZFNlcnZpY2U6IFVVSURTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwUmVhZHlTZXJ2aWNlOiBBcHBSZWFkeVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZWwpO1xuICB9XG5cbiAgb25DaGFuZ2UgPSAoXzogc3RyaW5nIHwgbnVtYmVyKSA9PiB7fTtcblxuICBvblRvdWNoZWQgPSAoXzogc3RyaW5nIHwgbnVtYmVyKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmFsID0gdmFsdWU7XG4gICAgdGhpcy5jaGVja2VkID0gdGhpcy5yYWRpb1ZhbHVlID09PSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmFwcFJlYWR5U2VydmljZS5pc0Jyb3dzZXJBbmREb21BdmFpbGFibGUoKSkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=