UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

85 lines 21.4 kB
import { NgIf } from '@angular/common'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, inject, Input, Output, } from '@angular/core'; import { TuiExpand } from '@taiga-ui/core/components/expand'; import { TuiIcon } from '@taiga-ui/core/components/icon'; import { TuiChevron } from '@taiga-ui/kit/directives'; import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus'; import { TuiAccordionItemContent } from './accordion-item-content.directive'; import { TuiAccordionItemEagerContent } from './accordion-item-eager-content.directive'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/core/components/expand"; class TuiAccordionItem { constructor() { this.cdr = inject(ChangeDetectorRef); this.noPadding = false; this.showArrow = true; this.borders = 'all'; this.size = 'm'; this.disabled = false; this.disableHover = false; this.open = false; this.async = false; this.openChange = new EventEmitter(); } close() { this.updateOpen(false); this.cdr.markForCheck(); } onRowToggle() { if (!this.disabled) { this.updateOpen(!this.open); } } onItemKeyDownEsc(event) { if (!this.open) { return; } event.stopPropagation(); this.updateOpen(false); } updateOpen(open) { if (this.open === open) { return; } this.open = open; this.openChange.emit(open); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiAccordionItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiAccordionItem, isStandalone: true, selector: "tui-accordion-item", inputs: { noPadding: "noPadding", showArrow: "showArrow", borders: "borders", size: "size", disabled: "disabled", disableHover: "disableHover", open: "open", async: "async" }, outputs: { openChange: "openChange" }, host: { properties: { "class._no-padding": "noPadding", "class._has-arrow": "showArrow", "attr.data-borders": "borders", "attr.data-size": "size", "class._disabled": "disabled" } }, queries: [{ propertyName: "eagerContent", first: true, predicate: TuiAccordionItemEagerContent, descendants: true }, { propertyName: "lazyContent", first: true, predicate: TuiAccordionItemContent, descendants: true }], ngImport: i0, template: "<div\n automation-id=\"tui-accordion__item-wrapper\"\n class=\"t-wrapper\"\n>\n <button\n automation-id=\"tui-accordion__item-header\"\n type=\"button\"\n class=\"t-header\"\n [class.t-header_hoverable]=\"!disableHover\"\n [class.t-header_open]=\"open\"\n [disabled]=\"disabled\"\n (click)=\"onRowToggle()\"\n (keydown.esc)=\"onItemKeyDownEsc($event)\"\n >\n <span\n automation-id=\"tui-accordion__item-title\"\n class=\"t-title\"\n >\n <ng-content />\n </span>\n <ng-container *ngIf=\"showArrow\">\n <tui-icon\n class=\"t-icon\"\n [tuiChevron]=\"open\"\n />\n </ng-container>\n </button>\n <tui-expand\n [async]=\"async\"\n [expanded]=\"open\"\n >\n <ng-template tuiExpandContent>\n <div\n *ngIf=\"lazyContent\"\n automation-id=\"tui-accordion__item-content\"\n class=\"t-content\"\n >\n <ng-container *polymorpheusOutlet=\"lazyContent as text\">\n {{ text }}\n </ng-container>\n </div>\n </ng-template>\n <div\n *ngIf=\"eagerContent\"\n class=\"t-content\"\n >\n <ng-content select=\"[tuiAccordionItemContent]:not(ng-template)\" />\n </div>\n </tui-expand>\n</div>\n", styles: [":host{position:relative;display:block;overflow:hidden;border-radius:var(--tui-radius-l)}:host[data-borders=top-bottom]{border-radius:0!important}::ng-deep tui-accordion{inline-size:100%}.t-wrapper{position:relative;border-radius:inherit}.t-wrapper:after{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;content:\"\";box-sizing:border-box;border-radius:inherit;border:1px solid var(--tui-border-normal);pointer-events:none}:host:not([data-borders]) .t-wrapper:after{border-width:0}:host[data-borders=all] .t-wrapper:after{border-width:1px}:host[data-borders=top-bottom] .t-wrapper:after{border-inline-start-width:0;border-inline-end-width:0}:host[data-borders=top] .t-wrapper:after{border-inline-start-width:0;border-inline-end-width:0;border-block-end-width:0}:host[data-borders=bottom] .t-wrapper:after{border-inline-start-width:0;border-inline-end-width:0;border-block-start-width:0}.t-header{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:flex;inline-size:100%;font:var(--tui-font-text-l);align-items:center;box-sizing:border-box;border-block-end:1px solid var(--tui-border-normal);min-block-size:var(--tui-height-l);padding:.75rem 1.25rem;color:var(--tui-text-primary);cursor:pointer;text-align:start;outline:none}.t-header:focus-visible{box-shadow:inset 0 0 0 2px var(--tui-border-focus)}:host:not([data-borders]) .t-header{border-block-end-width:0}:host._has-arrow .t-header{padding-inline-end:.75rem}:host-context([tuiTheme=\"dark\"]) .t-header_open{background:var(--tui-background-neutral-1)}:host[data-size=s] .t-header{font:var(--tui-font-text-m);min-block-size:var(--tui-height-m);padding:.625rem .75rem .625rem 1rem}:host._no-padding .t-header{padding-inline-start:0;padding-inline-end:0}:host._disabled .t-header{cursor:default}.t-wrapper:hover>.t-header_hoverable{background:var(--tui-background-base-alt)}.t-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-inline-end:0;flex-grow:1}:host._has-arrow .t-title{margin-inline-end:.5rem}.t-icon{transition-property:color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;margin-inline-start:auto;border-width:.25rem;color:var(--tui-text-tertiary)}:host:hover .t-icon{color:var(--tui-text-secondary)}.t-content{font:var(--tui-font-text-m);padding:1.25rem;overflow-wrap:break-word}:host[data-size=s] .t-content{font:var(--tui-font-text-s);padding:1rem}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i1.TuiExpandComponent, selector: "tui-expand", inputs: ["async", "expanded"] }, { kind: "directive", type: i1.TuiExpandContent, selector: "[tuiExpandContent]" }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } export { TuiAccordionItem }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiAccordionItem, decorators: [{ type: Component, args: [{ standalone: true, selector: 'tui-accordion-item', imports: [NgIf, PolymorpheusOutlet, TuiChevron, TuiExpand, TuiIcon], changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class._no-padding]': 'noPadding', '[class._has-arrow]': 'showArrow', '[attr.data-borders]': 'borders', '[attr.data-size]': 'size', '[class._disabled]': 'disabled', }, template: "<div\n automation-id=\"tui-accordion__item-wrapper\"\n class=\"t-wrapper\"\n>\n <button\n automation-id=\"tui-accordion__item-header\"\n type=\"button\"\n class=\"t-header\"\n [class.t-header_hoverable]=\"!disableHover\"\n [class.t-header_open]=\"open\"\n [disabled]=\"disabled\"\n (click)=\"onRowToggle()\"\n (keydown.esc)=\"onItemKeyDownEsc($event)\"\n >\n <span\n automation-id=\"tui-accordion__item-title\"\n class=\"t-title\"\n >\n <ng-content />\n </span>\n <ng-container *ngIf=\"showArrow\">\n <tui-icon\n class=\"t-icon\"\n [tuiChevron]=\"open\"\n />\n </ng-container>\n </button>\n <tui-expand\n [async]=\"async\"\n [expanded]=\"open\"\n >\n <ng-template tuiExpandContent>\n <div\n *ngIf=\"lazyContent\"\n automation-id=\"tui-accordion__item-content\"\n class=\"t-content\"\n >\n <ng-container *polymorpheusOutlet=\"lazyContent as text\">\n {{ text }}\n </ng-container>\n </div>\n </ng-template>\n <div\n *ngIf=\"eagerContent\"\n class=\"t-content\"\n >\n <ng-content select=\"[tuiAccordionItemContent]:not(ng-template)\" />\n </div>\n </tui-expand>\n</div>\n", styles: [":host{position:relative;display:block;overflow:hidden;border-radius:var(--tui-radius-l)}:host[data-borders=top-bottom]{border-radius:0!important}::ng-deep tui-accordion{inline-size:100%}.t-wrapper{position:relative;border-radius:inherit}.t-wrapper:after{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;content:\"\";box-sizing:border-box;border-radius:inherit;border:1px solid var(--tui-border-normal);pointer-events:none}:host:not([data-borders]) .t-wrapper:after{border-width:0}:host[data-borders=all] .t-wrapper:after{border-width:1px}:host[data-borders=top-bottom] .t-wrapper:after{border-inline-start-width:0;border-inline-end-width:0}:host[data-borders=top] .t-wrapper:after{border-inline-start-width:0;border-inline-end-width:0;border-block-end-width:0}:host[data-borders=bottom] .t-wrapper:after{border-inline-start-width:0;border-inline-end-width:0;border-block-start-width:0}.t-header{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:flex;inline-size:100%;font:var(--tui-font-text-l);align-items:center;box-sizing:border-box;border-block-end:1px solid var(--tui-border-normal);min-block-size:var(--tui-height-l);padding:.75rem 1.25rem;color:var(--tui-text-primary);cursor:pointer;text-align:start;outline:none}.t-header:focus-visible{box-shadow:inset 0 0 0 2px var(--tui-border-focus)}:host:not([data-borders]) .t-header{border-block-end-width:0}:host._has-arrow .t-header{padding-inline-end:.75rem}:host-context([tuiTheme=\"dark\"]) .t-header_open{background:var(--tui-background-neutral-1)}:host[data-size=s] .t-header{font:var(--tui-font-text-m);min-block-size:var(--tui-height-m);padding:.625rem .75rem .625rem 1rem}:host._no-padding .t-header{padding-inline-start:0;padding-inline-end:0}:host._disabled .t-header{cursor:default}.t-wrapper:hover>.t-header_hoverable{background:var(--tui-background-base-alt)}.t-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-inline-end:0;flex-grow:1}:host._has-arrow .t-title{margin-inline-end:.5rem}.t-icon{transition-property:color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;margin-inline-start:auto;border-width:.25rem;color:var(--tui-text-tertiary)}:host:hover .t-icon{color:var(--tui-text-secondary)}.t-content{font:var(--tui-font-text-m);padding:1.25rem;overflow-wrap:break-word}:host[data-size=s] .t-content{font:var(--tui-font-text-s);padding:1rem}\n"] }] }], propDecorators: { eagerContent: [{ type: ContentChild, args: [TuiAccordionItemEagerContent] }], lazyContent: [{ type: ContentChild, args: [TuiAccordionItemContent] }], noPadding: [{ type: Input }], showArrow: [{ type: Input }], borders: [{ type: Input }], size: [{ type: Input }], disabled: [{ type: Input }], disableHover: [{ type: Input }], open: [{ type: Input }], async: [{ type: Input }], openChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvYWNjb3JkaW9uL2FjY29yZGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL2FjY29yZGlvbi9hY2NvcmRpb24taXRlbS50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDM0QsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRXZELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQzs7O0FBRXRGLE1BZWEsZ0JBQWdCO0lBZjdCO1FBZ0JxQixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFTMUMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLFlBQU8sR0FBZ0MsS0FBSyxDQUFDO1FBRzdDLFNBQUksR0FBYSxHQUFHLENBQUM7UUFHckIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdqQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBR2IsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUdMLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0tBOEI1RDtJQTVCVSxLQUFLO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFUyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRVMsZ0JBQWdCLENBQUMsS0FBWTtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLE9BQU87U0FDVjtRQUVELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBYTtRQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3BCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBL0RRLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHFnQkFHWCw0QkFBNEIsOEVBRzVCLHVCQUF1QixnREN6Q3pDLHU4Q0FrREEsc2xGRDNCYyxJQUFJLDZGQUFFLGtCQUFrQiw4SEFBRSxVQUFVLDhRQUFhLE9BQU87O1NBWXpELGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQWY1QixTQUFTO2lDQUNNLElBQUksWUFDTixvQkFBb0IsV0FDckIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsbUJBR2xELHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YscUJBQXFCLEVBQUUsV0FBVzt3QkFDbEMsb0JBQW9CLEVBQUUsV0FBVzt3QkFDakMscUJBQXFCLEVBQUUsU0FBUzt3QkFDaEMsa0JBQWtCLEVBQUUsTUFBTTt3QkFDMUIsbUJBQW1CLEVBQUUsVUFBVTtxQkFDbEM7OEJBTWtCLFlBQVk7c0JBRDlCLFlBQVk7dUJBQUMsNEJBQTRCO2dCQUl2QixXQUFXO3NCQUQ3QixZQUFZO3VCQUFDLHVCQUF1QjtnQkFJOUIsU0FBUztzQkFEZixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSVUsVUFBVTtzQkFEekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1R1aUV4cGFuZH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9leHBhbmQnO1xuaW1wb3J0IHtUdWlJY29ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHR5cGUge1R1aVNpemVTfSBmcm9tICdAdGFpZ2EtdWkvY29yZS90eXBlcyc7XG5pbXBvcnQge1R1aUNoZXZyb259IGZyb20gJ0B0YWlnYS11aS9raXQvZGlyZWN0aXZlcyc7XG5pbXBvcnQge1BvbHltb3JwaGV1c091dGxldH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5cbmltcG9ydCB7VHVpQWNjb3JkaW9uSXRlbUNvbnRlbnR9IGZyb20gJy4vYWNjb3JkaW9uLWl0ZW0tY29udGVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtUdWlBY2NvcmRpb25JdGVtRWFnZXJDb250ZW50fSBmcm9tICcuL2FjY29yZGlvbi1pdGVtLWVhZ2VyLWNvbnRlbnQuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3R1aS1hY2NvcmRpb24taXRlbScsXG4gICAgaW1wb3J0czogW05nSWYsIFBvbHltb3JwaGV1c091dGxldCwgVHVpQ2hldnJvbiwgVHVpRXhwYW5kLCBUdWlJY29uXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWNjb3JkaW9uLWl0ZW0udGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWNjb3JkaW9uLWl0ZW0uc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5fbm8tcGFkZGluZ10nOiAnbm9QYWRkaW5nJyxcbiAgICAgICAgJ1tjbGFzcy5faGFzLWFycm93XSc6ICdzaG93QXJyb3cnLFxuICAgICAgICAnW2F0dHIuZGF0YS1ib3JkZXJzXSc6ICdib3JkZXJzJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtc2l6ZV0nOiAnc2l6ZScsXG4gICAgICAgICdbY2xhc3MuX2Rpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpQWNjb3JkaW9uSXRlbSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgQENvbnRlbnRDaGlsZChUdWlBY2NvcmRpb25JdGVtRWFnZXJDb250ZW50KVxuICAgIHByb3RlY3RlZCByZWFkb25seSBlYWdlckNvbnRlbnQ/OiBUdWlBY2NvcmRpb25JdGVtRWFnZXJDb250ZW50O1xuXG4gICAgQENvbnRlbnRDaGlsZChUdWlBY2NvcmRpb25JdGVtQ29udGVudClcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGF6eUNvbnRlbnQ/OiBUdWlBY2NvcmRpb25JdGVtQ29udGVudDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5vUGFkZGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0Fycm93ID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJvcmRlcnM6ICdhbGwnIHwgJ3RvcC1ib3R0b20nIHwgbnVsbCA9ICdhbGwnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2l6ZTogVHVpU2l6ZVMgPSAnbSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZUhvdmVyID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvcGVuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhc3luYyA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlT3BlbihmYWxzZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblJvd1RvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wZW4oIXRoaXMub3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25JdGVtS2V5RG93bkVzYyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnVwZGF0ZU9wZW4oZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9wZW4gPT09IG9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlbiA9IG9wZW47XG4gICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBhdXRvbWF0aW9uLWlkPVwidHVpLWFjY29yZGlvbl9faXRlbS13cmFwcGVyXCJcbiAgICBjbGFzcz1cInQtd3JhcHBlclwiXG4+XG4gICAgPGJ1dHRvblxuICAgICAgICBhdXRvbWF0aW9uLWlkPVwidHVpLWFjY29yZGlvbl9faXRlbS1oZWFkZXJcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJ0LWhlYWRlclwiXG4gICAgICAgIFtjbGFzcy50LWhlYWRlcl9ob3ZlcmFibGVdPVwiIWRpc2FibGVIb3ZlclwiXG4gICAgICAgIFtjbGFzcy50LWhlYWRlcl9vcGVuXT1cIm9wZW5cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib25Sb3dUb2dnbGUoKVwiXG4gICAgICAgIChrZXlkb3duLmVzYyk9XCJvbkl0ZW1LZXlEb3duRXNjKCRldmVudClcIlxuICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGF1dG9tYXRpb24taWQ9XCJ0dWktYWNjb3JkaW9uX19pdGVtLXRpdGxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwidC10aXRsZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dBcnJvd1wiPlxuICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICAgICAgICAgIFt0dWlDaGV2cm9uXT1cIm9wZW5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG4gICAgPHR1aS1leHBhbmRcbiAgICAgICAgW2FzeW5jXT1cImFzeW5jXCJcbiAgICAgICAgW2V4cGFuZGVkXT1cIm9wZW5cIlxuICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHR1aUV4cGFuZENvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsYXp5Q29udGVudFwiXG4gICAgICAgICAgICAgICAgYXV0b21hdGlvbi1pZD1cInR1aS1hY2NvcmRpb25fX2l0ZW0tY29udGVudFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbnRlbnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnBvbHltb3JwaGV1c091dGxldD1cImxhenlDb250ZW50IGFzIHRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiZWFnZXJDb250ZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1jb250ZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3R1aUFjY29yZGlvbkl0ZW1Db250ZW50XTpub3QobmctdGVtcGxhdGUpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC90dWktZXhwYW5kPlxuPC9kaXY+XG4iXX0=