@junte/ui
Version:
Quality Angular UI components kit
212 lines • 24.9 kB
JavaScript
var RadioGroupComponent_1;
import { __decorate, __metadata } from "tslib";
import { AfterViewInit, ChangeDetectorRef, Component, ContentChildren, forwardRef, HostBinding, HostListener, Input, QueryList } from '@angular/core';
import { ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';
import { NGXLogger } from 'ngx-logger';
import { merge, Subscription } from 'rxjs';
import { filter, map } from 'rxjs/operators';
import { PropertyApi } from '../../../core/decorators/api';
import { Breakpoint } from '../../../core/enums/breakpoint';
import { Feature } from '../../../core/enums/feature';
import { FlexAlign } from '../../../core/enums/flex';
import { Gutter } from '../../../core/enums/gutter';
import { Orientation } from '../../../core/enums/orientation';
import { Size } from '../../../core/enums/size';
import { UI } from '../../../core/enums/ui';
import { BreakpointService } from '../../../layout/responsive/breakpoint.service';
import { RadioComponent } from '../radio.component';
let RadioGroupComponent = RadioGroupComponent_1 = class RadioGroupComponent {
constructor(fb, logger, breakpoint, cd) {
this.fb = fb;
this.logger = logger;
this.breakpoint = breakpoint;
this.cd = cd;
this.ui = UI;
this.host = 'jnt-radio-group-host';
this._orientation = Orientation.vertical;
this._spacing = Gutter.small;
this._align = FlexAlign.start;
this._size = Size.normal;
this.radiosControl = this.fb.array([]);
this.form = this.fb.group({
radios: this.radiosControl
});
this.cols = 1;
this.features = [];
this.onChange = () => this.logger.error('value accessor is not registered');
this.onTouched = () => this.logger.error('value accessor is not registered');
this.registerOnChange = fn => this.onChange = fn;
this.registerOnTouched = fn => this.onTouched = fn;
this.onBlur = () => this.onTouched();
}
set orientation(orientation) {
this._orientation = orientation || Orientation.vertical;
}
get orientation() {
var _a;
return this.breakpoint.current === Breakpoint.mobile && ((_a = this.features) === null || _a === void 0 ? void 0 : _a.includes(Feature.adapted)) ?
Orientation.vertical : this._orientation;
}
set align(align) {
this._align = align || FlexAlign.start;
}
get align() {
return this._align;
}
set size(size) {
this._size = size || Size.normal;
}
get size() {
return this._size;
}
set spacing(spacing) {
this._spacing = spacing || Gutter.small;
}
get spacing() {
return this._spacing;
}
ngAfterViewInit() {
let subscription = new Subscription();
this.radios.changes.subscribe(() => {
subscription.unsubscribe();
this.update();
subscription = this.subscribe();
});
this.update();
subscription = this.subscribe();
}
subscribe() {
return merge(...this.radiosControl.controls.map((control, index) => control.valueChanges.pipe(filter(value => value), map(() => ({ control, index }))))).subscribe(({ control, index }) => {
this.selected = this.radios.toArray()[index].value;
this.onChange(this.selected);
this.radiosControl.reset([], { emitEvent: false });
control.setValue(true, { emitEvent: false });
});
}
update() {
if (!!this.radios) {
this.radiosControl.reset([], { emitEvent: false });
this.radios.forEach((radio, i) => {
if (this.radiosControl.length < i + 1) {
this.radiosControl.push(this.fb.control(this.selected === radio.value));
}
else {
this.radiosControl.get(i.toString())
.setValue(this.selected === radio.value, { emitEvent: false });
}
});
this.cd.detectChanges();
}
}
writeValue(value) {
this.selected = value;
this.update();
}
setDisabledState(isDisabled) {
isDisabled ? this.radiosControl.disable({ emitEvent: false })
: this.radiosControl.enable({ emitEvent: false });
}
};
RadioGroupComponent.ctorParameters = () => [
{ type: FormBuilder },
{ type: NGXLogger },
{ type: BreakpointService },
{ type: ChangeDetectorRef }
];
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], RadioGroupComponent.prototype, "host", void 0);
__decorate([
PropertyApi({
description: 'Defined main axis of elements align',
path: 'ui.orientation',
default: Orientation.vertical,
options: [Orientation.vertical, Orientation.horizontal]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], RadioGroupComponent.prototype, "orientation", null);
__decorate([
PropertyApi({
description: 'Align in radio group',
path: 'ui.align'
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], RadioGroupComponent.prototype, "align", null);
__decorate([
PropertyApi({
description: 'Count of cols in radio group',
type: 'number',
default: 1
}),
Input(),
__metadata("design:type", Object)
], RadioGroupComponent.prototype, "cols", void 0);
__decorate([
PropertyApi({
description: 'Size for radio in radio group',
path: 'ui.size',
options: [Size.tiny, Size.small, Size.normal, Size.large],
default: Size.normal
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], RadioGroupComponent.prototype, "size", null);
__decorate([
PropertyApi({
description: 'Spacing between radio item',
path: 'ui.gutter',
options: [Gutter.tiny,
Gutter.small,
Gutter.normal,
Gutter.large,
Gutter.big,
Gutter.huge],
default: Gutter.normal
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], RadioGroupComponent.prototype, "spacing", null);
__decorate([
PropertyApi({
description: 'Adapted radio group on mobile view',
path: 'ui.feature',
options: [Feature.adapted]
}),
HostBinding('attr.data-features'),
Input(),
__metadata("design:type", Array)
], RadioGroupComponent.prototype, "features", void 0);
__decorate([
ContentChildren(RadioComponent, { descendants: true }),
__metadata("design:type", QueryList)
], RadioGroupComponent.prototype, "radios", void 0);
__decorate([
HostListener('blur'),
__metadata("design:type", Object)
], RadioGroupComponent.prototype, "onBlur", void 0);
RadioGroupComponent = RadioGroupComponent_1 = __decorate([
Component({
selector: 'jnt-radio-group',
template: "<form child-of=\"jnt-radio-group-host\" [formGroup]=\"form\">\n <ng-container formArrayName=\"radios\">\n <ng-template #radiosTemplate let-item=\"item\" let-i=\"i\">\n <jnt-radio child-of=\"jnt-radio-group-host\" [formControlName]=\"i\"\n [size]=\"size\"\n [label]=\"item.label\"\n [value]=\"item.value\">\n <ng-template *ngIf=\"!!item.labelTemplate\" #radioLabelTemplate>\n <ng-container *ngTemplateOutlet=\"item.labelTemplate\"></ng-container>\n </ng-template>\n </jnt-radio>\n </ng-template>\n <ng-container *ngIf=\"!!radiosControl.length\">\n <ng-container *ngIf=\"cols <= 1; else colTemplate\">\n <jnt-stack child-of=\"jnt-radio-group-host\" [gutter]=\"spacing\"\n [orientation]=\"orientation\"\n [spacing]=\"spacing\"\n [align]=\"orientation === ui.orientation.horizontal ? align: ui.align.start\">\n <ng-container *ngFor=\"let item of radios; let i = index\">\n <ng-container *ngTemplateOutlet=\"radiosTemplate; context:{item: item, i: i}\"></ng-container>\n </ng-container>\n </jnt-stack>\n </ng-container>\n <ng-template #colTemplate>\n <jnt-row child-of=\"jnt-radio-group-host\" [align]=\"align\">\n <jnt-col child-of=\"jnt-radio-group-host\" *ngFor=\"let item of radios; let i = index\" [tablet]=\"(12 / cols) | trunc\">\n <ng-container *ngTemplateOutlet=\"radiosTemplate; context:{item: item, i: i}\"></ng-container>\n </jnt-col>\n </jnt-row>\n </ng-template>\n </ng-container>\n </ng-container>\n</form>",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RadioGroupComponent_1),
multi: true
}
]
}),
__metadata("design:paramtypes", [FormBuilder,
NGXLogger,
BreakpointService,
ChangeDetectorRef])
], RadioGroupComponent);
export { RadioGroupComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBY3BELElBQWEsbUJBQW1CLDJCQUFoQyxNQUFhLG1CQUFtQjtJQTZHOUIsWUFBb0IsRUFBZSxFQUNmLE1BQWlCLEVBQ2pCLFVBQTZCLEVBQzdCLEVBQXFCO1FBSHJCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBOUd6QyxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBR0MsU0FBSSxHQUFHLHNCQUFzQixDQUFDO1FBRXZDLGlCQUFZLEdBQWdCLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDakQsYUFBUSxHQUFXLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEMsV0FBTSxHQUFjLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFFNUIsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFHNUIsa0JBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxTQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQzNCLENBQUMsQ0FBQztRQXFDSCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBNENULGFBQVEsR0FBYyxFQUFFLENBQUM7UUFLekIsYUFBUSxHQUF5QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzdGLGNBQVMsR0FBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3BGLHFCQUFnQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDNUMsc0JBQWlCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUN4QixXQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBTXRELENBQUM7SUF2RkQsSUFBSSxXQUFXLENBQUMsV0FBd0I7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxXQUFXOztRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLE1BQU0sV0FBSSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7WUFDaEcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QyxDQUFDO0lBT0QsSUFBSSxLQUFLLENBQUMsS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFpQkQsSUFBSSxJQUFJLENBQUMsSUFBVTtRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQWNELElBQUksT0FBTyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUEwQkQsZUFBZTtRQUNiLElBQUksWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNqRSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQ3RCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FDOUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDekU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3lCQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7aUJBQ2hFO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0YsQ0FBQTs7WUF0RHlCLFdBQVc7WUFDUCxTQUFTO1lBQ0wsaUJBQWlCO1lBQ3pCLGlCQUFpQjs7QUEzR3pDO0lBREMsV0FBVyxDQUFDLFdBQVcsQ0FBQzs7aURBQ2M7QUFxQnZDO0lBUEMsV0FBVyxDQUFDO1FBQ1gsV0FBVyxFQUFFLHFDQUFxQztRQUNsRCxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUTtRQUM3QixPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUM7S0FDeEQsQ0FBQztJQUNELEtBQUssRUFBRTs7O3NEQUdQO0FBWUQ7SUFMQyxXQUFXLENBQUM7UUFDWCxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLElBQUksRUFBRSxVQUFVO0tBQ2pCLENBQUM7SUFDRCxLQUFLLEVBQUU7OztnREFHUDtBQVlEO0lBTkMsV0FBVyxDQUFDO1FBQ1gsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxJQUFJLEVBQUUsUUFBUTtRQUNkLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQztJQUNELEtBQUssRUFBRTs7aURBQ0M7QUFTVDtJQVBDLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSwrQkFBK0I7UUFDNUMsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pELE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtLQUNyQixDQUFDO0lBQ0QsS0FBSyxFQUFFOzs7K0NBR1A7QUFrQkQ7SUFaQyxXQUFXLENBQUM7UUFDWCxXQUFXLEVBQUUsNEJBQTRCO1FBQ3pDLElBQUksRUFBRSxXQUFXO1FBQ2pCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQ25CLE1BQU0sQ0FBQyxLQUFLO1lBQ1osTUFBTSxDQUFDLE1BQU07WUFDYixNQUFNLENBQUMsS0FBSztZQUNaLE1BQU0sQ0FBQyxHQUFHO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNkLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTTtLQUN2QixDQUFDO0lBQ0QsS0FBSyxFQUFFOzs7a0RBR1A7QUFhRDtJQVBDLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSxvQ0FBb0M7UUFDakQsSUFBSSxFQUFFLFlBQVk7UUFDbEIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUMzQixDQUFDO0lBQ0QsV0FBVyxDQUFDLG9CQUFvQixDQUFDO0lBQ2pDLEtBQUssRUFBRTs7cURBQ2lCO0FBR3pCO0lBREMsZUFBZSxDQUFDLGNBQWMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQzs4QkFDN0MsU0FBUzttREFBaUI7QUFNWjtJQUFyQixZQUFZLENBQUMsTUFBTSxDQUFDOzttREFBaUM7QUEzRzNDLG1CQUFtQjtJQVovQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLG1wREFBOEM7UUFDOUMsU0FBUyxFQUFFO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGO0tBQ0YsQ0FBQztxQ0ErR3dCLFdBQVc7UUFDUCxTQUFTO1FBQ0wsaUJBQWlCO1FBQ3pCLGlCQUFpQjtHQWhIOUIsbUJBQW1CLENBbUsvQjtTQW5LWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQgeyBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFByb3BlcnR5QXBpIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBCcmVha3BvaW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9icmVha3BvaW50JztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW1zL2ZlYXR1cmUnO1xuaW1wb3J0IHsgRmxleEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9mbGV4JztcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bXMvZ3V0dGVyJztcbmltcG9ydCB7IE9yaWVudGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9vcmllbnRhdGlvbic7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9zaXplJztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy91aSc7XG5pbXBvcnQgeyBCcmVha3BvaW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xheW91dC9yZXNwb25zaXZlL2JyZWFrcG9pbnQuc2VydmljZSc7XG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uL3JhZGlvLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1yYWRpby1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1ncm91cC5lbmNhcHN1bGF0ZWQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFkaW9Hcm91cENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIFJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgdWkgPSBVSTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpXG4gIHJlYWRvbmx5IGhvc3QgPSAnam50LXJhZGlvLWdyb3VwLWhvc3QnO1xuXG4gIF9vcmllbnRhdGlvbjogT3JpZW50YXRpb24gPSBPcmllbnRhdGlvbi52ZXJ0aWNhbDtcbiAgX3NwYWNpbmc6IEd1dHRlciA9IEd1dHRlci5zbWFsbDtcbiAgX2FsaWduOiBGbGV4QWxpZ24gPSBGbGV4QWxpZ24uc3RhcnQ7XG5cbiAgcHJpdmF0ZSBfc2l6ZSA9IFNpemUubm9ybWFsO1xuICBzZWxlY3RlZDogYW55O1xuXG4gIHJhZGlvc0NvbnRyb2wgPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIHJhZGlvczogdGhpcy5yYWRpb3NDb250cm9sXG4gIH0pO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdEZWZpbmVkIG1haW4gYXhpcyBvZiBlbGVtZW50cyBhbGlnbicsXG4gICAgcGF0aDogJ3VpLm9yaWVudGF0aW9uJyxcbiAgICBkZWZhdWx0OiBPcmllbnRhdGlvbi52ZXJ0aWNhbCxcbiAgICBvcHRpb25zOiBbT3JpZW50YXRpb24udmVydGljYWwsIE9yaWVudGF0aW9uLmhvcml6b250YWxdXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBvcmllbnRhdGlvbihvcmllbnRhdGlvbjogT3JpZW50YXRpb24pIHtcbiAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uIHx8IE9yaWVudGF0aW9uLnZlcnRpY2FsO1xuICB9XG5cbiAgZ2V0IG9yaWVudGF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJyZWFrcG9pbnQuY3VycmVudCA9PT0gQnJlYWtwb2ludC5tb2JpbGUgJiYgdGhpcy5mZWF0dXJlcz8uaW5jbHVkZXMoRmVhdHVyZS5hZGFwdGVkKSA/XG4gICAgICBPcmllbnRhdGlvbi52ZXJ0aWNhbCA6IHRoaXMuX29yaWVudGF0aW9uO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0FsaWduIGluIHJhZGlvIGdyb3VwJyxcbiAgICBwYXRoOiAndWkuYWxpZ24nXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBhbGlnbihhbGlnbjogRmxleEFsaWduKSB7XG4gICAgdGhpcy5fYWxpZ24gPSBhbGlnbiB8fCBGbGV4QWxpZ24uc3RhcnQ7XG4gIH1cblxuICBnZXQgYWxpZ24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWduO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvdW50IG9mIGNvbHMgaW4gcmFkaW8gZ3JvdXAnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IDFcbiAgfSlcbiAgQElucHV0KClcbiAgY29scyA9IDE7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1NpemUgZm9yIHJhZGlvIGluIHJhZGlvIGdyb3VwJyxcbiAgICBwYXRoOiAndWkuc2l6ZScsXG4gICAgb3B0aW9uczogW1NpemUudGlueSwgU2l6ZS5zbWFsbCwgU2l6ZS5ub3JtYWwsIFNpemUubGFyZ2VdLFxuICAgIGRlZmF1bHQ6IFNpemUubm9ybWFsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBzaXplKHNpemU6IFNpemUpIHtcbiAgICB0aGlzLl9zaXplID0gc2l6ZSB8fCBTaXplLm5vcm1hbDtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1NwYWNpbmcgYmV0d2VlbiByYWRpbyBpdGVtJyxcbiAgICBwYXRoOiAndWkuZ3V0dGVyJyxcbiAgICBvcHRpb25zOiBbR3V0dGVyLnRpbnksXG4gICAgICBHdXR0ZXIuc21hbGwsXG4gICAgICBHdXR0ZXIubm9ybWFsLFxuICAgICAgR3V0dGVyLmxhcmdlLFxuICAgICAgR3V0dGVyLmJpZyxcbiAgICAgIEd1dHRlci5odWdlXSxcbiAgICBkZWZhdWx0OiBHdXR0ZXIubm9ybWFsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBzcGFjaW5nKHNwYWNpbmc6IEd1dHRlcikge1xuICAgIHRoaXMuX3NwYWNpbmcgPSBzcGFjaW5nIHx8IEd1dHRlci5zbWFsbDtcbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkYXB0ZWQgcmFkaW8gZ3JvdXAgb24gbW9iaWxlIHZpZXcnLFxuICAgIHBhdGg6ICd1aS5mZWF0dXJlJyxcbiAgICBvcHRpb25zOiBbRmVhdHVyZS5hZGFwdGVkXVxuICB9KVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1mZWF0dXJlcycpXG4gIEBJbnB1dCgpXG4gIGZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcblxuICBAQ29udGVudENoaWxkcmVuKFJhZGlvQ29tcG9uZW50LCB7ZGVzY2VuZGFudHM6IHRydWV9KVxuICByYWRpb3M6IFF1ZXJ5TGlzdDxSYWRpb0NvbXBvbmVudD47XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4gdGhpcy5sb2dnZXIuZXJyb3IoJ3ZhbHVlIGFjY2Vzc29yIGlzIG5vdCByZWdpc3RlcmVkJyk7XG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHRoaXMubG9nZ2VyLmVycm9yKCd2YWx1ZSBhY2Nlc3NvciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICByZWdpc3Rlck9uQ2hhbmdlID0gZm4gPT4gdGhpcy5vbkNoYW5nZSA9IGZuO1xuICByZWdpc3Rlck9uVG91Y2hlZCA9IGZuID0+IHRoaXMub25Ub3VjaGVkID0gZm47XG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBvbkJsdXIgPSAoKSA9PiB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgICAgICAgICAgICBwcml2YXRlIGJyZWFrcG9pbnQ6IEJyZWFrcG9pbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGxldCBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5yYWRpb3MuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzdWJzY3JpYmUoKSB7XG4gICAgcmV0dXJuIG1lcmdlKC4uLnRoaXMucmFkaW9zQ29udHJvbC5jb250cm9scy5tYXAoKGNvbnRyb2wsIGluZGV4KSA9PlxuICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlKSxcbiAgICAgICAgbWFwKCgpID0+ICh7Y29udHJvbCwgaW5kZXh9KSlcbiAgICAgICkpKS5zdWJzY3JpYmUoKHtjb250cm9sLCBpbmRleH0pID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnJhZGlvcy50b0FycmF5KClbaW5kZXhdLnZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIHRoaXMucmFkaW9zQ29udHJvbC5yZXNldChbXSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUodHJ1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAoISF0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3NDb250cm9sLnJlc2V0KFtdLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8sIGkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9zQ29udHJvbC5sZW5ndGggPCBpICsgMSkge1xuICAgICAgICAgIHRoaXMucmFkaW9zQ29udHJvbC5wdXNoKHRoaXMuZmIuY29udHJvbCh0aGlzLnNlbGVjdGVkID09PSByYWRpby52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmFkaW9zQ29udHJvbC5nZXQoaS50b1N0cmluZygpKVxuICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWQgPT09IHJhZGlvLnZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgaXNEaXNhYmxlZCA/IHRoaXMucmFkaW9zQ29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSlcbiAgICAgIDogdGhpcy5yYWRpb3NDb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICB9XG59XG4iXX0=