UNPKG

@junte/ui

Version:

Quality Angular UI components kit

212 lines 24.9 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2Zvcm1zL3JhZGlvL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYs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QUFNLENBQUMsS0FBSztZQUNaLE1BQU0sQ0FBQyxHQUFHO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNkLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTTtLQUN2QixDQUFDO0lBQ0QsS0FBSyxFQUFFOzs7a0RBR1A7QUFhRDtJQVBDLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSxvQ0FBb0M7UUFDakQsSUFBSSxFQUFFLFlBQVk7UUFDbEIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUMzQixDQUFDO0lBQ0QsV0FBVyxDQUFDLG9CQUFvQixDQUFDO0lBQ2pDLEtBQUssRUFBRTs7cURBQ2lCO0FBR3pCO0lBREMsZUFBZSxDQUFDLGNBQWMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQzs4QkFDN0MsU0FBUzttREFBaUI7QUFNWjtJQUFyQixZQUFZLENBQUMsTUFBTSxDQUFDOzttREFBaUM7QUEzRzNDLG1CQUFtQjtJQVovQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLG1wREFBOEM7UUFDOUMsU0FBUyxFQUFFO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGO0tBQ0YsQ0FBQztxQ0ErR3dCLFdBQVc7UUFDUCxTQUFTO1FBQ0wsaUJBQWlCO1FBQ3pCLGlCQUFpQjtHQWhIOUIsbUJBQW1CLENBbUsvQjtTQW5LWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQgeyBtZXJnZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFByb3BlcnR5QXBpIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBCcmVha3BvaW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9icmVha3BvaW50JztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW1zL2ZlYXR1cmUnO1xuaW1wb3J0IHsgRmxleEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9mbGV4JztcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bXMvZ3V0dGVyJztcbmltcG9ydCB7IE9yaWVudGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9vcmllbnRhdGlvbic7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9zaXplJztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy91aSc7XG5pbXBvcnQgeyBCcmVha3BvaW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xheW91dC9yZXNwb25zaXZlL2JyZWFrcG9pbnQuc2VydmljZSc7XG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uL3JhZGlvLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1yYWRpby1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1ncm91cC5lbmNhcHN1bGF0ZWQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFkaW9Hcm91cENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIFJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgdWkgPSBVSTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpXG4gIHJlYWRvbmx5IGhvc3QgPSAnam50LXJhZGlvLWdyb3VwLWhvc3QnO1xuXG4gIF9vcmllbnRhdGlvbjogT3JpZW50YXRpb24gPSBPcmllbnRhdGlvbi52ZXJ0aWNhbDtcbiAgX3NwYWNpbmc6IEd1dHRlciA9IEd1dHRlci5zbWFsbDtcbiAgX2FsaWduOiBGbGV4QWxpZ24gPSBGbGV4QWxpZ24uc3RhcnQ7XG5cbiAgcHJpdmF0ZSBfc2l6ZSA9IFNpemUubm9ybWFsO1xuICBzZWxlY3RlZDogYW55O1xuXG4gIHJhZGlvc0NvbnRyb2wgPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIHJhZGlvczogdGhpcy5yYWRpb3NDb250cm9sXG4gIH0pO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdEZWZpbmVkIG1haW4gYXhpcyBvZiBlbGVtZW50cyBhbGlnbicsXG4gICAgcGF0aDogJ3VpLm9yaWVudGF0aW9uJyxcbiAgICBkZWZhdWx0OiBPcmllbnRhdGlvbi52ZXJ0aWNhbCxcbiAgICBvcHRpb25zOiBbT3JpZW50YXRpb24udmVydGljYWwsIE9yaWVudGF0aW9uLmhvcml6b250YWxdXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBvcmllbnRhdGlvbihvcmllbnRhdGlvbjogT3JpZW50YXRpb24pIHtcbiAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uIHx8IE9yaWVudGF0aW9uLnZlcnRpY2FsO1xuICB9XG5cbiAgZ2V0IG9yaWVudGF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJyZWFrcG9pbnQuY3VycmVudCA9PT0gQnJlYWtwb2ludC5tb2JpbGUgJiYgdGhpcy5mZWF0dXJlcz8uaW5jbHVkZXMoRmVhdHVyZS5hZGFwdGVkKSA/XG4gICAgICBPcmllbnRhdGlvbi52ZXJ0aWNhbCA6IHRoaXMuX29yaWVudGF0aW9uO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0FsaWduIGluIHJhZGlvIGdyb3VwJyxcbiAgICBwYXRoOiAndWkuYWxpZ24nXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBhbGlnbihhbGlnbjogRmxleEFsaWduKSB7XG4gICAgdGhpcy5fYWxpZ24gPSBhbGlnbiB8fCBGbGV4QWxpZ24uc3RhcnQ7XG4gIH1cblxuICBnZXQgYWxpZ24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWduO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvdW50IG9mIGNvbHMgaW4gcmFkaW8gZ3JvdXAnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IDFcbiAgfSlcbiAgQElucHV0KClcbiAgY29scyA9IDE7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1NpemUgZm9yIHJhZGlvIGluIHJhZGlvIGdyb3VwJyxcbiAgICBwYXRoOiAndWkuc2l6ZScsXG4gICAgb3B0aW9uczogW1NpemUudGlueSwgU2l6ZS5zbWFsbCwgU2l6ZS5ub3JtYWwsIFNpemUubGFyZ2VdLFxuICAgIGRlZmF1bHQ6IFNpemUubm9ybWFsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBzaXplKHNpemU6IFNpemUpIHtcbiAgICB0aGlzLl9zaXplID0gc2l6ZSB8fCBTaXplLm5vcm1hbDtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1NwYWNpbmcgYmV0d2VlbiByYWRpbyBpdGVtJyxcbiAgICBwYXRoOiAndWkuZ3V0dGVyJyxcbiAgICBvcHRpb25zOiBbR3V0dGVyLnRpbnksXG4gICAgICBHdXR0ZXIuc21hbGwsXG4gICAgICBHdXR0ZXIubm9ybWFsLFxuICAgICAgR3V0dGVyLmxhcmdlLFxuICAgICAgR3V0dGVyLmJpZyxcbiAgICAgIEd1dHRlci5odWdlXSxcbiAgICBkZWZhdWx0OiBHdXR0ZXIubm9ybWFsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBzcGFjaW5nKHNwYWNpbmc6IEd1dHRlcikge1xuICAgIHRoaXMuX3NwYWNpbmcgPSBzcGFjaW5nIHx8IEd1dHRlci5zbWFsbDtcbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkYXB0ZWQgcmFkaW8gZ3JvdXAgb24gbW9iaWxlIHZpZXcnLFxuICAgIHBhdGg6ICd1aS5mZWF0dXJlJyxcbiAgICBvcHRpb25zOiBbRmVhdHVyZS5hZGFwdGVkXVxuICB9KVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1mZWF0dXJlcycpXG4gIEBJbnB1dCgpXG4gIGZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcblxuICBAQ29udGVudENoaWxkcmVuKFJhZGlvQ29tcG9uZW50LCB7ZGVzY2VuZGFudHM6IHRydWV9KVxuICByYWRpb3M6IFF1ZXJ5TGlzdDxSYWRpb0NvbXBvbmVudD47XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4gdGhpcy5sb2dnZXIuZXJyb3IoJ3ZhbHVlIGFjY2Vzc29yIGlzIG5vdCByZWdpc3RlcmVkJyk7XG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHRoaXMubG9nZ2VyLmVycm9yKCd2YWx1ZSBhY2Nlc3NvciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICByZWdpc3Rlck9uQ2hhbmdlID0gZm4gPT4gdGhpcy5vbkNoYW5nZSA9IGZuO1xuICByZWdpc3Rlck9uVG91Y2hlZCA9IGZuID0+IHRoaXMub25Ub3VjaGVkID0gZm47XG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBvbkJsdXIgPSAoKSA9PiB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgICAgICAgICAgICBwcml2YXRlIGJyZWFrcG9pbnQ6IEJyZWFrcG9pbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGxldCBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5yYWRpb3MuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzdWJzY3JpYmUoKSB7XG4gICAgcmV0dXJuIG1lcmdlKC4uLnRoaXMucmFkaW9zQ29udHJvbC5jb250cm9scy5tYXAoKGNvbnRyb2wsIGluZGV4KSA9PlxuICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlKSxcbiAgICAgICAgbWFwKCgpID0+ICh7Y29udHJvbCwgaW5kZXh9KSlcbiAgICAgICkpKS5zdWJzY3JpYmUoKHtjb250cm9sLCBpbmRleH0pID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnJhZGlvcy50b0FycmF5KClbaW5kZXhdLnZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIHRoaXMucmFkaW9zQ29udHJvbC5yZXNldChbXSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUodHJ1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAoISF0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3NDb250cm9sLnJlc2V0KFtdLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8sIGkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9zQ29udHJvbC5sZW5ndGggPCBpICsgMSkge1xuICAgICAgICAgIHRoaXMucmFkaW9zQ29udHJvbC5wdXNoKHRoaXMuZmIuY29udHJvbCh0aGlzLnNlbGVjdGVkID09PSByYWRpby52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmFkaW9zQ29udHJvbC5nZXQoaS50b1N0cmluZygpKVxuICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWQgPT09IHJhZGlvLnZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgaXNEaXNhYmxlZCA/IHRoaXMucmFkaW9zQ29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSlcbiAgICAgIDogdGhpcy5yYWRpb3NDb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICB9XG59XG4iXX0=