UNPKG

carbon-components-angular

Version:
216 lines 16.7 kB
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