carbon-components-angular
Version:
Next generation components
216 lines • 16.7 kB
JavaScript
import { Component, Input, HostBinding, Output, EventEmitter } from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
import { RadioChange } from "./radio-change.class";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
/**
* class: Radio (extends Checkbox)
*
* selector: `n-radio`
*
* source: `src/forms/radio.component.ts`
*
* ```html
* <cds-radio [(ngModel)]="radioState">Radio</cds-radio>
* ```
*
* Also see: [`RadioGroup`](#cds-radio-group)
*/
export class Radio {
constructor() {
this.checked = false;
this.name = "";
this.disabled = false;
this.labelPlacement = "right";
/**
* Sets the HTML required attribute
*/
this.required = false;
/**
* Set to `true` for a loading table.
*/
this.skeleton = false;
/**
* The id for the `Radio`.
*/
this.id = `radio-${Radio.radioCount++}`;
/**
* emits when the state of the radio changes
*/
this.change = new EventEmitter();
this.hostClass = true;
/**
* Reflects whether or not the input is disabled at `RadioGroup` level.
*/
this.disabledFromGroup = false;
this._labelledby = "";
/**
* Handler provided by the `RadioGroup` to bubble events up
*/
this.radioChangeHandler = (event) => { };
}
set ariaLabelledby(value) {
this._labelledby = value;
}
get ariaLabelledby() {
if (this._labelledby) {
return this._labelledby;
}
return `label-${this.id}`;
}
get hasDecorator() {
return !!this.decorator;
}
get labelLeft() {
return this.labelPlacement === "left";
}
/**
* Synchronizes with the `RadioGroup` in the event of a changed `Radio`.
* Emits the changes of both the `RadioGroup` and `Radio`.
*/
onChange(event) {
event.stopPropagation();
}
onClick(event) {
this.checked = event.target.checked;
const radioEvent = new RadioChange(this, this.value);
this.change.emit(radioEvent);
this.radioChangeHandler(radioEvent);
}
/**
* Method called by `RadioGroup` with a callback function to bubble `RadioChange` events
* @param fn callback that expects a `RadioChange` as an argument
*/
registerRadioChangeHandler(fn) {
this.radioChangeHandler = fn;
}
setDisabledFromGroup(disabled) {
this.disabledFromGroup = disabled;
}
}
/**
* Used to dynamically create unique ids for the `Radio`.
*/
Radio.radioCount = 0;
Radio.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Radio, deps: [], target: i0.ɵɵFactoryTarget.Component });
Radio.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Radio, selector: "cds-radio, ibm-radio", inputs: { checked: "checked", name: "name", disabled: "disabled", labelPlacement: "labelPlacement", ariaLabelledby: "ariaLabelledby", ariaLabel: "ariaLabel", required: "required", value: "value", skeleton: "skeleton", id: "id", decorator: "decorator" }, outputs: { change: "change" }, host: { properties: { "class.cds--radio-button-wrapper": "this.hostClass", "class.cds--radio-button-wrapper--decorator": "this.hasDecorator", "class.cds--radio-button-wrapper--label-left": "this.labelLeft" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: Radio,
multi: true
}
], ngImport: i0, template: `
<input
*ngIf="!skeleton"
class="cds--radio-button"
type="radio"
[checked]="checked"
[disabled]="disabled || disabledFromGroup"
[name]="name"
[id]="id"
[required]="required"
[attr.value]="value"
[attr.aria-labelledby]="ariaLabelledby"
(change)="onChange($event)"
(click)="onClick($event)">
<div *ngIf="skeleton" class="cds--radio-button cds--skeleton"></div>
<label
class="cds--radio-button__label"
[attr.aria-label]="ariaLabel"
[ngClass]="{
'cds--skeleton': skeleton
}"
[for]="id"
id="label-{{id}}">
<span class="cds--radio-button__appearance"></span>
<span class="cds--radio-button__label-text">
<ng-content></ng-content>
<ng-container *ngIf="decorator">
<div class="cds--radio-button-wrapper-inner--decorator">
<ng-template [ngTemplateOutlet]="decorator"></ng-template>
</div>
</ng-container>
</span>
</label>
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Radio, decorators: [{
type: Component,
args: [{
selector: "cds-radio, ibm-radio",
template: `
<input
*ngIf="!skeleton"
class="cds--radio-button"
type="radio"
[checked]="checked"
[disabled]="disabled || disabledFromGroup"
[name]="name"
[id]="id"
[required]="required"
[attr.value]="value"
[attr.aria-labelledby]="ariaLabelledby"
(change)="onChange($event)"
(click)="onClick($event)">
<div *ngIf="skeleton" class="cds--radio-button cds--skeleton"></div>
<label
class="cds--radio-button__label"
[attr.aria-label]="ariaLabel"
[ngClass]="{
'cds--skeleton': skeleton
}"
[for]="id"
id="label-{{id}}">
<span class="cds--radio-button__appearance"></span>
<span class="cds--radio-button__label-text">
<ng-content></ng-content>
<ng-container *ngIf="decorator">
<div class="cds--radio-button-wrapper-inner--decorator">
<ng-template [ngTemplateOutlet]="decorator"></ng-template>
</div>
</ng-container>
</span>
</label>
`,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: Radio,
multi: true
}
]
}]
}], propDecorators: { checked: [{
type: Input
}], name: [{
type: Input
}], disabled: [{
type: Input
}], labelPlacement: [{
type: Input
}], ariaLabelledby: [{
type: Input
}], ariaLabel: [{
type: Input
}], required: [{
type: Input
}], value: [{
type: Input
}], skeleton: [{
type: Input
}], id: [{
type: Input
}], change: [{
type: Output
}], hostClass: [{
type: HostBinding,
args: ["class.cds--radio-button-wrapper"]
}], hasDecorator: [{
type: HostBinding,
args: ["class.cds--radio-button-wrapper--decorator"]
}], labelLeft: [{
type: HostBinding,
args: ["class.cds--radio-button-wrapper--label-left"]
}], decorator: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JhZGlvL3JhZGlvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFlBQVksRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUVuRDs7Ozs7Ozs7Ozs7O0dBWUc7QUE2Q0gsTUFBTSxPQUFPLEtBQUs7SUE1Q2xCO1FBa0RVLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsbUJBQWMsR0FBc0IsT0FBTyxDQUFDO1FBa0JyRDs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFLMUI7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCOztXQUVHO1FBQ00sT0FBRSxHQUFHLFNBQVMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDNUM7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUVILGNBQVMsR0FBRyxJQUFJLENBQUM7UUFlakU7O1dBRUc7UUFDSCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFM0I7O1dBRUc7UUFDSCx1QkFBa0IsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztLQTRCaEQ7SUExRkEsSUFBYSxjQUFjLENBQUMsS0FBYTtRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDeEI7UUFDRCxPQUFPLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUE4QkQsSUFBK0QsWUFBWTtRQUMxRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFnRSxTQUFTO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUM7SUFDdkMsQ0FBQztJQW1CRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBWTtRQUNwQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFZO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDO1FBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCwwQkFBMEIsQ0FBQyxFQUFnQztRQUMxRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxRQUFpQjtRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO0lBQ25DLENBQUM7O0FBdEdEOztHQUVHO0FBQ0ksZ0JBQVUsR0FBRyxDQUFDLENBQUM7a0dBSlYsS0FBSztzRkFBTCxLQUFLLCtoQkFSTjtRQUNWO1lBQ0MsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsS0FBSztZQUNsQixLQUFLLEVBQUUsSUFBSTtTQUNYO0tBQ0QsMEJBeENTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ1Q7MkZBU1csS0FBSztrQkE1Q2pCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ1Q7b0JBQ0QsU0FBUyxFQUFFO3dCQUNWOzRCQUNDLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsT0FBTzs0QkFDbEIsS0FBSyxFQUFFLElBQUk7eUJBQ1g7cUJBQ0Q7aUJBQ0Q7OEJBT1MsT0FBTztzQkFBZixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRU8sY0FBYztzQkFBMUIsS0FBSztnQkFjRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsRUFBRTtzQkFBVixLQUFLO2dCQUlJLE1BQU07c0JBQWYsTUFBTTtnQkFFeUMsU0FBUztzQkFBeEQsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBRWlCLFlBQVk7c0JBQTFFLFdBQVc7dUJBQUMsNENBQTRDO2dCQUlPLFNBQVM7c0JBQXhFLFdBQVc7dUJBQUMsNkNBQTZDO2dCQU9qRCxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0SG9zdEJpbmRpbmcsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRUZW1wbGF0ZVJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFJhZGlvQ2hhbmdlIH0gZnJvbSBcIi4vcmFkaW8tY2hhbmdlLmNsYXNzXCI7XG5cbi8qKlxuICogY2xhc3M6IFJhZGlvIChleHRlbmRzIENoZWNrYm94KVxuICpcbiAqIHNlbGVjdG9yOiBgbi1yYWRpb2BcbiAqXG4gKiBzb3VyY2U6IGBzcmMvZm9ybXMvcmFkaW8uY29tcG9uZW50LnRzYFxuICpcbiAqIGBgYGh0bWxcbiAqXHQ8Y2RzLXJhZGlvIFsobmdNb2RlbCldPVwicmFkaW9TdGF0ZVwiPlJhZGlvPC9jZHMtcmFkaW8+XG4gKiBgYGBcbiAqXG4gKiBBbHNvIHNlZTogW2BSYWRpb0dyb3VwYF0oI2Nkcy1yYWRpby1ncm91cClcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1yYWRpbywgaWJtLXJhZGlvXCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGlucHV0XG5cdFx0XHQqbmdJZj1cIiFza2VsZXRvblwiXG5cdFx0XHRjbGFzcz1cImNkcy0tcmFkaW8tYnV0dG9uXCJcblx0XHRcdHR5cGU9XCJyYWRpb1wiXG5cdFx0XHRbY2hlY2tlZF09XCJjaGVja2VkXCJcblx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBkaXNhYmxlZEZyb21Hcm91cFwiXG5cdFx0XHRbbmFtZV09XCJuYW1lXCJcblx0XHRcdFtpZF09XCJpZFwiXG5cdFx0XHRbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuXHRcdFx0W2F0dHIudmFsdWVdPVwidmFsdWVcIlxuXHRcdFx0W2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZGJ5XCJcblx0XHRcdChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG5cdFx0XHQoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCI+XG5cdFx0PGRpdiAqbmdJZj1cInNrZWxldG9uXCIgY2xhc3M9XCJjZHMtLXJhZGlvLWJ1dHRvbiBjZHMtLXNrZWxldG9uXCI+PC9kaXY+XG5cdFx0PGxhYmVsXG5cdFx0XHRjbGFzcz1cImNkcy0tcmFkaW8tYnV0dG9uX19sYWJlbFwiXG5cdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCdjZHMtLXNrZWxldG9uJzogc2tlbGV0b25cblx0XHRcdH1cIlxuXHRcdFx0W2Zvcl09XCJpZFwiXG5cdFx0XHRpZD1cImxhYmVsLXt7aWR9fVwiPlxuXHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLXJhZGlvLWJ1dHRvbl9fYXBwZWFyYW5jZVwiPjwvc3Bhbj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1yYWRpby1idXR0b25fX2xhYmVsLXRleHRcIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZGVjb3JhdG9yXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tcmFkaW8tYnV0dG9uLXdyYXBwZXItaW5uZXItLWRlY29yYXRvclwiPlxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRlY29yYXRvclwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0PC9zcGFuPlxuXHRcdDwvbGFiZWw+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IFJhZGlvLFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgUmFkaW8ge1xuXHQvKipcblx0ICogVXNlZCB0byBkeW5hbWljYWxseSBjcmVhdGUgdW5pcXVlIGlkcyBmb3IgdGhlIGBSYWRpb2AuXG5cdCAqL1xuXHRzdGF0aWMgcmFkaW9Db3VudCA9IDA7XG5cblx0QElucHV0KCkgY2hlY2tlZCA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIG5hbWUgPSBcIlwiO1xuXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgbGFiZWxQbGFjZW1lbnQ6IFwicmlnaHRcIiB8IFwibGVmdFwiID0gIFwicmlnaHRcIjtcblxuXHRASW5wdXQoKSBzZXQgYXJpYUxhYmVsbGVkYnkodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMuX2xhYmVsbGVkYnkgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBhcmlhTGFiZWxsZWRieSgpIHtcblx0XHRpZiAodGhpcy5fbGFiZWxsZWRieSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2xhYmVsbGVkYnk7XG5cdFx0fVxuXHRcdHJldHVybiBgbGFiZWwtJHt0aGlzLmlkfWA7XG5cdH1cblxuXHQvKipcblx0ICogVXNlZCB0byBzZXQgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGxhYmVsLlxuXHQgKi9cblx0QElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIEhUTUwgcmVxdWlyZWQgYXR0cmlidXRlXG5cdCAqL1xuXHRASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVGhlIHZhbHVlIG9mIHRoZSBgUmFkaW9gLlxuXHQgKi9cblx0QElucHV0KCkgdmFsdWU7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIGxvYWRpbmcgdGFibGUuXG5cdCAqL1xuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXHQvKipcblx0ICogVGhlIGlkIGZvciB0aGUgYFJhZGlvYC5cblx0ICovXG5cdEBJbnB1dCgpIGlkID0gYHJhZGlvLSR7UmFkaW8ucmFkaW9Db3VudCsrfWA7XG5cdC8qKlxuXHQgKiBlbWl0cyB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcmFkaW8gY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmFkaW9DaGFuZ2U+KCk7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1yYWRpby1idXR0b24td3JhcHBlclwiKSBob3N0Q2xhc3MgPSB0cnVlO1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tcmFkaW8tYnV0dG9uLXdyYXBwZXItLWRlY29yYXRvclwiKSBnZXQgaGFzRGVjb3JhdG9yKCkge1xuXHRcdHJldHVybiAhIXRoaXMuZGVjb3JhdG9yO1xuXHR9XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1yYWRpby1idXR0b24td3JhcHBlci0tbGFiZWwtbGVmdFwiKSBnZXQgbGFiZWxMZWZ0KCkge1xuXHRcdHJldHVybiB0aGlzLmxhYmVsUGxhY2VtZW50ID09PSBcImxlZnRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiAqKkV4cGVyaW1lbnRhbCoqOiBPcHRpb25hbCBkZWNvcmF0b3IgKGUuZy4gQUkgbGFiZWwpLlxuXHQgKi9cblx0QElucHV0KCkgZGVjb3JhdG9yOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdC8qKlxuXHQgKiBSZWZsZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgZGlzYWJsZWQgYXQgYFJhZGlvR3JvdXBgIGxldmVsLlxuXHQgKi9cblx0ZGlzYWJsZWRGcm9tR3JvdXAgPSBmYWxzZTtcblxuXHRwcm90ZWN0ZWQgX2xhYmVsbGVkYnkgPSBcIlwiO1xuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHByb3ZpZGVkIGJ5IHRoZSBgUmFkaW9Hcm91cGAgdG8gYnViYmxlIGV2ZW50cyB1cFxuXHQgKi9cblx0cmFkaW9DaGFuZ2VIYW5kbGVyID0gKGV2ZW50OiBSYWRpb0NoYW5nZSkgPT4ge307XG5cblx0LyoqXG5cdCAqIFN5bmNocm9uaXplcyB3aXRoIHRoZSBgUmFkaW9Hcm91cGAgaW4gdGhlIGV2ZW50IG9mIGEgY2hhbmdlZCBgUmFkaW9gLlxuXHQgKiBFbWl0cyB0aGUgY2hhbmdlcyBvZiBib3RoIHRoZSBgUmFkaW9Hcm91cGAgYW5kIGBSYWRpb2AuXG5cdCAqL1xuXHRvbkNoYW5nZShldmVudDogRXZlbnQpIHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxuXG5cdG9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG5cdFx0dGhpcy5jaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuXHRcdGNvbnN0IHJhZGlvRXZlbnQgPSBuZXcgUmFkaW9DaGFuZ2UodGhpcywgdGhpcy52YWx1ZSk7XG5cdFx0dGhpcy5jaGFuZ2UuZW1pdChyYWRpb0V2ZW50KTtcblx0XHR0aGlzLnJhZGlvQ2hhbmdlSGFuZGxlcihyYWRpb0V2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIGJ5IGBSYWRpb0dyb3VwYCB3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYnViYmxlIGBSYWRpb0NoYW5nZWAgZXZlbnRzXG5cdCAqIEBwYXJhbSBmbiBjYWxsYmFjayB0aGF0IGV4cGVjdHMgYSBgUmFkaW9DaGFuZ2VgIGFzIGFuIGFyZ3VtZW50XG5cdCAqL1xuXHRyZWdpc3RlclJhZGlvQ2hhbmdlSGFuZGxlcihmbjogKGV2ZW50OiBSYWRpb0NoYW5nZSkgPT4gdm9pZCkge1xuXHRcdHRoaXMucmFkaW9DaGFuZ2VIYW5kbGVyID0gZm47XG5cdH1cblxuXHRzZXREaXNhYmxlZEZyb21Hcm91cChkaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuZGlzYWJsZWRGcm9tR3JvdXAgPSBkaXNhYmxlZDtcblx0fVxufVxuIl19