UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

71 lines 16.2 kB
import { NgForOf } from '@angular/common'; import { ChangeDetectionStrategy, Component, computed, inject, Input, ViewChildren, ViewEncapsulation, } from '@angular/core'; import { FormsModule, NgControl, Validators } from '@angular/forms'; import { tuiAsControl, TuiControl } from '@taiga-ui/cdk/classes'; import { EMPTY_QUERY, TUI_DEFAULT_IDENTITY_MATCHER, TUI_FALSE_HANDLER, } from '@taiga-ui/cdk/constants'; import { TuiValidator } from '@taiga-ui/cdk/directives/validator'; import { TuiIdService } from '@taiga-ui/cdk/services'; import { TuiRadio } from '@taiga-ui/kit/components/radio'; import { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "@taiga-ui/kit/components/radio"; const ERROR = () => ({ error: 'Invalid' }); class TuiRadioList extends TuiControl { constructor() { super(...arguments); this.controls = EMPTY_QUERY; this.id = inject(TuiIdService).generate(); this.validator = computed(() => this.invalid() ? ERROR : Validators.nullValidator); this.items = []; this.size = 'm'; this.identityMatcher = TUI_DEFAULT_IDENTITY_MATCHER; this.disabledItemHandler = TUI_FALSE_HANDLER; this.itemContent = ({ $implicit }) => String($implicit); } get name() { return `${this.control.name}-${this.id}`; } onFocusOut() { this.controls.forEach((control) => control.control?.markAsTouched()); if (!this.touched()) { this.onTouched(); } } itemIsActive(item) { return this.value() === null ? item === null : this.identityMatcher(this.value(), item); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRadioList, deps: null, target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRadioList, isStandalone: true, selector: "tui-radio-list", inputs: { items: "items", size: "size", identityMatcher: "identityMatcher", disabledItemHandler: "disabledItemHandler", itemContent: "itemContent" }, host: { listeners: { "focusout": "onFocusOut()" }, properties: { "attr.data-size": "size" } }, providers: [tuiAsControl(TuiRadioList)], viewQueries: [{ propertyName: "controls", predicate: NgControl, descendants: true }], usesInheritance: true, ngImport: i0, template: "<label\n *ngFor=\"let item of items; index as index\"\n class=\"t-item\"\n [class.t-item_disabled]=\"disabled() || disabledItemHandler(item)\"\n>\n <input\n tuiRadio\n type=\"radio\"\n [disabled]=\"disabled() || disabledItemHandler(item)\"\n [identityMatcher]=\"identityMatcher\"\n [name]=\"name\"\n [ngModel]=\"value()\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tuiValidator]=\"validator()\"\n [value]=\"item\"\n (ngModelChange)=\"onChange($event)\"\n />\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: {$implicit: item, active: itemIsActive(item)}\">\n {{ text }}\n </ng-container>\n</label>\n", styles: ["tui-radio-list{display:flex;flex-direction:column;align-items:flex-start;gap:.75rem 1.5rem;font:var(--tui-font-text-m)}tui-radio-list[data-size=s],tui-radio-list[data-size=s] [tuiTitle]{font:var(--tui-font-text-ui-s)}tui-radio-list[data-size=s] [tuiSubtitle],tui-radio-list[data-size=s] [tuiTitle] [tuiSubtitle]{font:var(--tui-font-text-xs)}tui-radio-list[data-size=s]>.t-item,tui-radio-list[data-size=s] [tuiTitle]>.t-item{gap:.5rem}tui-radio-list [tuiTitle]{font:var(--tui-font-text-m)}tui-radio-list [tuiSubtitle]{color:var(--tui-text-tertiary)}tui-radio-list>.t-item{display:flex;gap:.75rem}tui-radio-list>.t-item_disabled{opacity:var(--tui-disabled-opacity)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: i2.TuiRadioComponent, selector: "input[type=\"radio\"][tuiRadio]", inputs: ["size"] }, { kind: "directive", type: i2.TuiRadioDirective, selector: "input[type=\"radio\"][tuiRadio][identityMatcher]", inputs: ["identityMatcher"] }, { kind: "directive", type: TuiValidator, selector: "[tuiValidator]", inputs: ["tuiValidator"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } export { TuiRadioList }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRadioList, decorators: [{ type: Component, args: [{ standalone: true, selector: 'tui-radio-list', imports: [ FormsModule, NgForOf, PolymorpheusOutlet, PolymorpheusTemplate, TuiRadio, TuiValidator, ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiAsControl(TuiRadioList)], host: { '[attr.data-size]': 'size', '(focusout)': 'onFocusOut()', }, template: "<label\n *ngFor=\"let item of items; index as index\"\n class=\"t-item\"\n [class.t-item_disabled]=\"disabled() || disabledItemHandler(item)\"\n>\n <input\n tuiRadio\n type=\"radio\"\n [disabled]=\"disabled() || disabledItemHandler(item)\"\n [identityMatcher]=\"identityMatcher\"\n [name]=\"name\"\n [ngModel]=\"value()\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tuiValidator]=\"validator()\"\n [value]=\"item\"\n (ngModelChange)=\"onChange($event)\"\n />\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: {$implicit: item, active: itemIsActive(item)}\">\n {{ text }}\n </ng-container>\n</label>\n", styles: ["tui-radio-list{display:flex;flex-direction:column;align-items:flex-start;gap:.75rem 1.5rem;font:var(--tui-font-text-m)}tui-radio-list[data-size=s],tui-radio-list[data-size=s] [tuiTitle]{font:var(--tui-font-text-ui-s)}tui-radio-list[data-size=s] [tuiSubtitle],tui-radio-list[data-size=s] [tuiTitle] [tuiSubtitle]{font:var(--tui-font-text-xs)}tui-radio-list[data-size=s]>.t-item,tui-radio-list[data-size=s] [tuiTitle]>.t-item{gap:.5rem}tui-radio-list [tuiTitle]{font:var(--tui-font-text-m)}tui-radio-list [tuiSubtitle]{color:var(--tui-text-tertiary)}tui-radio-list>.t-item{display:flex;gap:.75rem}tui-radio-list>.t-item_disabled{opacity:var(--tui-disabled-opacity)}\n"] }] }], propDecorators: { controls: [{ type: ViewChildren, args: [NgControl] }], items: [{ type: Input }], size: [{ type: Input }], identityMatcher: [{ type: Input }], disabledItemHandler: [{ type: Input }], itemContent: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9yYWRpby1saXN0L3JhZGlvLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvcmFkaW8tbGlzdC9yYWRpby1saXN0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXhDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQ0gsV0FBVyxFQUNYLDRCQUE0QixFQUM1QixpQkFBaUIsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR3BELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUVoRixNQUFNLEtBQUssR0FBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO0FBRXRELE1BcUJhLFlBQWdCLFNBQVEsVUFBYTtJQXJCbEQ7O1FBdUJxQixhQUFRLEdBQXlCLFdBQVcsQ0FBQztRQUU3QyxPQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUNwRCxDQUFDO1FBR0ssVUFBSyxHQUFpQixFQUFFLENBQUM7UUFHekIsU0FBSSxHQUFhLEdBQUcsQ0FBQztRQUdyQixvQkFBZSxHQUEwQiw0QkFBNEIsQ0FBQztRQUd0RSx3QkFBbUIsR0FBeUIsaUJBQWlCLENBQUM7UUFHOUQsZ0JBQVcsR0FBbUQsQ0FBQyxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUUsQ0FDakYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBbUJ6QjtJQWpCRyxJQUFjLElBQUk7UUFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFUyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRVMsWUFBWSxDQUFDLElBQU87UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSTtZQUN4QixDQUFDLENBQUMsSUFBSSxLQUFLLElBQUk7WUFDZixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0ExQ1EsWUFBWTttR0FBWixZQUFZLGtUQU5WLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLHVEQU96QixTQUFTLHVFQ25EM0Isd3VCQXNCQSxrdEJEV1EsV0FBVyxrMEJBQ1gsT0FBTyxtSEFDUCxrQkFBa0IsOFhBR2xCLFlBQVk7O1NBWVAsWUFBWTs0RkFBWixZQUFZO2tCQXJCeEIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sZ0JBQWdCLFdBQ2pCO3dCQUNMLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsUUFBUTt3QkFDUixZQUFZO3FCQUNmLGlCQUdjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxZQUFZLGNBQWMsQ0FBQyxRQUNqQzt3QkFDRixrQkFBa0IsRUFBRSxNQUFNO3dCQUMxQixZQUFZLEVBQUUsY0FBYztxQkFDL0I7OEJBSWdCLFFBQVE7c0JBRHhCLFlBQVk7dUJBQUMsU0FBUztnQkFVaEIsS0FBSztzQkFEWCxLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFJQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ0Zvck9mfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHR5cGUge1F1ZXJ5TGlzdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtWYWxpZGF0b3JGbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZSwgTmdDb250cm9sLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge3R1aUFzQ29udHJvbCwgVHVpQ29udHJvbH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7XG4gICAgRU1QVFlfUVVFUlksXG4gICAgVFVJX0RFRkFVTFRfSURFTlRJVFlfTUFUQ0hFUixcbiAgICBUVUlfRkFMU0VfSEFORExFUixcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuaW1wb3J0IHtUdWlWYWxpZGF0b3J9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy92YWxpZGF0b3InO1xuaW1wb3J0IHtUdWlJZFNlcnZpY2V9IGZyb20gJ0B0YWlnYS11aS9jZGsvc2VydmljZXMnO1xuaW1wb3J0IHR5cGUge1R1aUJvb2xlYW5IYW5kbGVyLCBUdWlJZGVudGl0eU1hdGNoZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1R1aVNpemVTLCBUdWlWYWx1ZUNvbnRlbnRDb250ZXh0fSBmcm9tICdAdGFpZ2EtdWkvY29yZS90eXBlcyc7XG5pbXBvcnQge1R1aVJhZGlvfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvcmFkaW8nO1xuaW1wb3J0IHR5cGUge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNPdXRsZXQsIFBvbHltb3JwaGV1c1RlbXBsYXRlfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcblxuY29uc3QgRVJST1I6IFZhbGlkYXRvckZuID0gKCkgPT4gKHtlcnJvcjogJ0ludmFsaWQnfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0dWktcmFkaW8tbGlzdCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdGb3JPZixcbiAgICAgICAgUG9seW1vcnBoZXVzT3V0bGV0LFxuICAgICAgICBQb2x5bW9ycGhldXNUZW1wbGF0ZSxcbiAgICAgICAgVHVpUmFkaW8sXG4gICAgICAgIFR1aVZhbGlkYXRvcixcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1saXN0LnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3JhZGlvLWxpc3Quc3R5bGUubGVzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbdHVpQXNDb250cm9sKFR1aVJhZGlvTGlzdCldLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmRhdGEtc2l6ZV0nOiAnc2l6ZScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ29uRm9jdXNPdXQoKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpUmFkaW9MaXN0PFQ+IGV4dGVuZHMgVHVpQ29udHJvbDxUPiB7XG4gICAgQFZpZXdDaGlsZHJlbihOZ0NvbnRyb2wpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sczogUXVlcnlMaXN0PE5nQ29udHJvbD4gPSBFTVBUWV9RVUVSWTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWQgPSBpbmplY3QoVHVpSWRTZXJ2aWNlKS5nZW5lcmF0ZSgpO1xuXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvciA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuaW52YWxpZCgpID8gRVJST1IgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IsXG4gICAgKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGl0ZW1zOiByZWFkb25seSBUW10gPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNpemU6IFR1aVNpemVTID0gJ20nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWRlbnRpdHlNYXRjaGVyOiBUdWlJZGVudGl0eU1hdGNoZXI8VD4gPSBUVUlfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWRJdGVtSGFuZGxlcjogVHVpQm9vbGVhbkhhbmRsZXI8VD4gPSBUVUlfRkFMU0VfSEFORExFUjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGl0ZW1Db250ZW50OiBQb2x5bW9ycGhldXNDb250ZW50PFR1aVZhbHVlQ29udGVudENvbnRleHQ8VD4+ID0gKHskaW1wbGljaXR9KSA9PlxuICAgICAgICBTdHJpbmcoJGltcGxpY2l0KTtcblxuICAgIHByb3RlY3RlZCBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb250cm9sLm5hbWV9LSR7dGhpcy5pZH1gO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkZvY3VzT3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IGNvbnRyb2wuY29udHJvbD8ubWFya0FzVG91Y2hlZCgpKTtcblxuICAgICAgICBpZiAoIXRoaXMudG91Y2hlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGl0ZW1Jc0FjdGl2ZShpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlKCkgPT09IG51bGxcbiAgICAgICAgICAgID8gaXRlbSA9PT0gbnVsbFxuICAgICAgICAgICAgOiB0aGlzLmlkZW50aXR5TWF0Y2hlcih0aGlzLnZhbHVlKCksIGl0ZW0pO1xuICAgIH1cbn1cbiIsIjxsYWJlbFxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBpbmRleCBhcyBpbmRleFwiXG4gICAgY2xhc3M9XCJ0LWl0ZW1cIlxuICAgIFtjbGFzcy50LWl0ZW1fZGlzYWJsZWRdPVwiZGlzYWJsZWQoKSB8fCBkaXNhYmxlZEl0ZW1IYW5kbGVyKGl0ZW0pXCJcbj5cbiAgICA8aW5wdXRcbiAgICAgICAgdHVpUmFkaW9cbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgZGlzYWJsZWRJdGVtSGFuZGxlcihpdGVtKVwiXG4gICAgICAgIFtpZGVudGl0eU1hdGNoZXJdPVwiaWRlbnRpdHlNYXRjaGVyXCJcbiAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgIFtuZ01vZGVsXT1cInZhbHVlKClcIlxuICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgIFt0dWlWYWxpZGF0b3JdPVwidmFsaWRhdG9yKClcIlxuICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgIC8+XG4gICAgPG5nLWNvbnRhaW5lciAqcG9seW1vcnBoZXVzT3V0bGV0PVwiaXRlbUNvbnRlbnQgYXMgdGV4dDsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbSwgYWN0aXZlOiBpdGVtSXNBY3RpdmUoaXRlbSl9XCI+XG4gICAgICAgIHt7IHRleHQgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbGFiZWw+XG4iXX0=