angular-bootstrap-md
Version:
Bootstrap 4 & Angular 15 UI KIT - 700+ components, MIT license, simple installation.
199 lines • 24.5 kB
JavaScript
import { coerceBooleanProperty, coerceNumberProperty, } from '@angular/cdk/coercion';
import { Component, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild, ChangeDetectionStrategy, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { Subject, timer } from 'rxjs';
import { take } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export const CHECKBOX_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
// eslint-disable-next-line @typescript-eslint/no-use-before-define
useExisting: forwardRef(() => CheckboxComponent),
multi: true,
};
let defaultIdNumber = 0;
export class MdbCheckboxChange {
}
export class CheckboxComponent {
constructor(_cdRef) {
this._cdRef = _cdRef;
this.defaultId = `mdb-checkbox-${++defaultIdNumber}`;
this.checkboxId = this.defaultId;
this._required = false;
this._checked = false;
this._filledIn = false;
this._indeterminate = false;
this._disabled = false;
this._rounded = false;
this.checkboxPosition = 'left';
this._default = false;
this._inline = false;
// eslint-disable-next-line @angular-eslint/no-output-native
this.change = new EventEmitter();
this.checkboxClicked = new Subject();
// Control Value Accessor Methods
this.onChange = (_) => { };
this.onTouched = () => { };
}
get required() {
return this._required;
}
set required(value) {
this._required = coerceBooleanProperty(value);
}
get checked() {
return this._checked;
}
set checked(value) {
this._checked = coerceBooleanProperty(value);
}
get filledIn() {
return this._filledIn;
}
set filledIn(value) {
this._filledIn = coerceBooleanProperty(value);
}
get indeterminate() {
return this._indeterminate;
}
set indeterminate(value) {
this._indeterminate = coerceBooleanProperty(value);
}
get disabled() {
return this._disabled;
}
set disabled(value) {
this._disabled = coerceBooleanProperty(value);
}
get rounded() {
return this._rounded;
}
set rounded(value) {
this._rounded = coerceBooleanProperty(value);
}
get default() {
return this._default;
}
set default(value) {
this._default = coerceBooleanProperty(value);
}
get inline() {
return this._inline;
}
set inline(value) {
this._inline = coerceBooleanProperty(value);
}
get tabIndex() {
return this._tabIndex;
}
set tabIndex(value) {
this._tabIndex = coerceNumberProperty(value);
}
onLabelClick(event) {
event.stopPropagation();
this.checkboxClicked.next(true);
}
onDocumentClick() {
this.checkboxClicked.next(false);
}
ngOnInit() {
if (this.indeterminate && !this.filledIn && !this.rounded) {
this.inputEl.indeterminate = true;
}
}
ngOnChanges(changes) {
if (changes.hasOwnProperty('checked')) {
this.checked = changes.checked.currentValue;
}
}
get changeEvent() {
const newChangeEvent = new MdbCheckboxChange();
newChangeEvent.element = this;
newChangeEvent.checked = this.checked;
return newChangeEvent;
}
toggle() {
if (this.disabled) {
return;
}
this.checked = !this.checked;
this.indeterminate = false;
this.onChange(this.checked);
this._cdRef.markForCheck();
}
onCheckboxClick(event) {
event.stopPropagation();
this.toggle();
}
onCheckboxChange(event) {
event.stopPropagation();
timer(0).subscribe(() => this.change.emit(this.changeEvent));
}
onBlur() {
this.checkboxClicked.pipe(take(1)).subscribe((val) => {
if (!val) {
this.onTouched();
}
});
}
writeValue(value) {
this.value = value;
this.checked = !!value;
this._cdRef.markForCheck();
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
}
CheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: CheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
CheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: CheckboxComponent, selector: "mdb-checkbox", inputs: { class: "class", checkboxId: "checkboxId", required: "required", name: "name", value: "value", checked: "checked", filledIn: "filledIn", indeterminate: "indeterminate", disabled: "disabled", rounded: "rounded", checkboxPosition: "checkboxPosition", default: "default", inline: "inline", tabIndex: "tabIndex" }, outputs: { change: "change" }, host: { listeners: { "click": "onLabelClick($event)", "document:click": "onDocumentClick()" } }, providers: [CHECKBOX_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [ngClass]=\"{\n 'custom-control custom-checkbox': default,\n 'form-check': !default,\n 'custom-control-inline': inline,\n 'form-check-inline': inline && !default }\">\n <input\n #input\n type=\"checkbox\"\n class=\"custom-control-input\"\n [ngClass]=\"{\n 'filled-in': filledIn || rounded,\n 'custom-control-input': default,\n 'form-check-input': !default }\"\n [id]=\"checkboxId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [indeterminate]=\"indeterminate\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [tabIndex]=\"tabIndex\"\n (blur)=\"onBlur()\"\n (click)=\"onCheckboxClick($event)\"\n (change)=\"onCheckboxChange($event)\">\n <label\n [ngClass]=\"{\n 'custom-control-label': default,\n 'form-check-label': !default,\n 'label-before': checkboxPosition === 'right',\n 'checkbox-rounded': rounded,\n 'disabled': disabled }\"\n [attr.for]=\"checkboxId\">\n <ng-content></ng-content>\n </label>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: CheckboxComponent, decorators: [{
type: Component,
args: [{ selector: 'mdb-checkbox', providers: [CHECKBOX_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [ngClass]=\"{\n 'custom-control custom-checkbox': default,\n 'form-check': !default,\n 'custom-control-inline': inline,\n 'form-check-inline': inline && !default }\">\n <input\n #input\n type=\"checkbox\"\n class=\"custom-control-input\"\n [ngClass]=\"{\n 'filled-in': filledIn || rounded,\n 'custom-control-input': default,\n 'form-check-input': !default }\"\n [id]=\"checkboxId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [indeterminate]=\"indeterminate\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [tabIndex]=\"tabIndex\"\n (blur)=\"onBlur()\"\n (click)=\"onCheckboxClick($event)\"\n (change)=\"onCheckboxChange($event)\">\n <label\n [ngClass]=\"{\n 'custom-control-label': default,\n 'form-check-label': !default,\n 'label-before': checkboxPosition === 'right',\n 'checkbox-rounded': rounded,\n 'disabled': disabled }\"\n [attr.for]=\"checkboxId\">\n <ng-content></ng-content>\n </label>\n</div>\n" }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { inputEl: [{
type: ViewChild,
args: ['input', { static: true }]
}], class: [{
type: Input
}], checkboxId: [{
type: Input
}], required: [{
type: Input
}], name: [{
type: Input
}], value: [{
type: Input
}], checked: [{
type: Input
}], filledIn: [{
type: Input
}], indeterminate: [{
type: Input
}], disabled: [{
type: Input
}], rounded: [{
type: Input
}], checkboxPosition: [{
type: Input
}], default: [{
type: Input
}], inline: [{
type: Input
}], tabIndex: [{
type: Input
}], change: [{
type: Output
}], onLabelClick: [{
type: HostListener,
args: ['click', ['$event']]
}], onDocumentClick: [{
type: HostListener,
args: ['document:click']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1ib290c3RyYXAtbWQvc3JjL2xpYi9mcmVlL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYm9vdHN0cmFwLW1kL3NyYy9saWIvZnJlZS9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUVyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsdUJBQXVCLEdBRXhCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXRDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFRO0lBQzFDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsbUVBQW1FO0lBQ25FLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRXhCLE1BQU0sT0FBTyxpQkFBaUI7Q0FHN0I7QUFRRCxNQUFNLE9BQU8saUJBQWlCO0lBbUc1QixZQUFvQixNQUF5QjtRQUF6QixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQWhHckMsY0FBUyxHQUFHLGdCQUFn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dEMsK2hDQW9DQTsyRkRRYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsY0FBYyxhQUViLENBQUMsdUJBQXVCLENBQUMsbUJBQ25CLHVCQUF1QixDQUFDLE1BQU07d0dBR1QsT0FBTztzQkFBNUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkzQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBU0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFTRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0YsT0FBTztzQkFEVixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBVUksTUFBTTtzQkFBZixNQUFNO2dCQU9QLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT2pDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCb29sZWFuSW5wdXQsXG4gIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSxcbiAgY29lcmNlTnVtYmVyUHJvcGVydHksXG4gIE51bWJlcklucHV0LFxufSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBDSEVDS0JPWF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxubGV0IGRlZmF1bHRJZE51bWJlciA9IDA7XG5cbmV4cG9ydCBjbGFzcyBNZGJDaGVja2JveENoYW5nZSB7XG4gIGVsZW1lbnQ6IENoZWNrYm94Q29tcG9uZW50O1xuICBjaGVja2VkOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZGItY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtDSEVDS0JPWF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dEVsOiBhbnk7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0SWQgPSBgbWRiLWNoZWNrYm94LSR7KytkZWZhdWx0SWROdW1iZXJ9YDtcblxuICBASW5wdXQoKSBjbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBjaGVja2JveElkOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRJZDtcblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG4gIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xuICB9XG4gIHNldCBjaGVja2VkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9jaGVja2VkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9jaGVja2VkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGZpbGxlZEluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWxsZWRJbjtcbiAgfVxuICBzZXQgZmlsbGVkSW4odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2ZpbGxlZEluID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9maWxsZWRJbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbmRldGVybWluYXRlO1xuICB9XG4gIHNldCBpbmRldGVybWluYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9pbmRldGVybWluYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9pbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCByb3VuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZGVkO1xuICB9XG4gIHNldCByb3VuZGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9yb3VuZGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9yb3VuZGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgY2hlY2tib3hQb3NpdGlvbiA9ICdsZWZ0JztcblxuICBASW5wdXQoKVxuICBnZXQgZGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdDtcbiAgfVxuICBzZXQgZGVmYXVsdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZGVmYXVsdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZGVmYXVsdCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lubGluZTtcbiAgfVxuICBzZXQgaW5saW5lKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9pbmxpbmUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2lubGluZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJJbmRleDtcbiAgfVxuICBzZXQgdGFiSW5kZXgodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fdGFiSW5kZXggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfdGFiSW5kZXg6IG51bWJlcjtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPE1kYkNoZWNrYm94Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8TWRiQ2hlY2tib3hDaGFuZ2U+KCk7XG5cbiAgcHJpdmF0ZSBjaGVja2JveENsaWNrZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uTGFiZWxDbGljayhldmVudDogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jaGVja2JveENsaWNrZWQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgb25Eb2N1bWVudENsaWNrKCkge1xuICAgIHRoaXMuY2hlY2tib3hDbGlja2VkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5maWxsZWRJbiAmJiAhdGhpcy5yb3VuZGVkKSB7XG4gICAgICB0aGlzLmlucHV0RWwuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdjaGVja2VkJykpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IGNoYW5nZXMuY2hlY2tlZC5jdXJyZW50VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNoYW5nZUV2ZW50KCkge1xuICAgIGNvbnN0IG5ld0NoYW5nZUV2ZW50ID0gbmV3IE1kYkNoZWNrYm94Q2hhbmdlKCk7XG4gICAgbmV3Q2hhbmdlRXZlbnQuZWxlbWVudCA9IHRoaXM7XG4gICAgbmV3Q2hhbmdlRXZlbnQuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICByZXR1cm4gbmV3Q2hhbmdlRXZlbnQ7XG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY2hlY2tlZCk7XG5cbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ2hlY2tib3hDbGljayhldmVudDogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIG9uQ2hlY2tib3hDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuY2hhbmdlRXZlbnQpKTtcbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLmNoZWNrYm94Q2xpY2tlZC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICBpZiAoIXZhbCkge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ29udHJvbCBWYWx1ZSBBY2Nlc3NvciBNZXRob2RzXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNoZWNrZWQgPSAhIXZhbHVlO1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iLCI8ZGl2XG4gIFtuZ0NsYXNzXT1cIntcbiAgJ2N1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveCc6IGRlZmF1bHQsXG4gICdmb3JtLWNoZWNrJzogIWRlZmF1bHQsXG4gICdjdXN0b20tY29udHJvbC1pbmxpbmUnOiBpbmxpbmUsXG4gICdmb3JtLWNoZWNrLWlubGluZSc6IGlubGluZSAmJiAhZGVmYXVsdCB9XCI+XG4gIDxpbnB1dFxuICAgICNpbnB1dFxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2ZpbGxlZC1pbic6IGZpbGxlZEluIHx8IHJvdW5kZWQsXG4gICAgICAnY3VzdG9tLWNvbnRyb2wtaW5wdXQnOiBkZWZhdWx0LFxuICAgICAgJ2Zvcm0tY2hlY2staW5wdXQnOiAhZGVmYXVsdCB9XCJcbiAgICBbaWRdPVwiY2hlY2tib3hJZFwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgIChjbGljayk9XCJvbkNoZWNrYm94Q2xpY2soJGV2ZW50KVwiXG4gICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIj5cbiAgPGxhYmVsXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2N1c3RvbS1jb250cm9sLWxhYmVsJzogZGVmYXVsdCxcbiAgICAgICdmb3JtLWNoZWNrLWxhYmVsJzogIWRlZmF1bHQsXG4gICAgICAnbGFiZWwtYmVmb3JlJzogY2hlY2tib3hQb3NpdGlvbiA9PT0gJ3JpZ2h0JyxcbiAgICAgICdjaGVja2JveC1yb3VuZGVkJzogcm91bmRlZCxcbiAgICAgICdkaXNhYmxlZCc6IGRpc2FibGVkIH1cIlxuICAgIFthdHRyLmZvcl09XCJjaGVja2JveElkXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2xhYmVsPlxuPC9kaXY+XG4iXX0=