UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

86 lines 22.5 kB
import { NgForOf, NgIf } from '@angular/common'; import { ChangeDetectionStrategy, Component, computed, EventEmitter, forwardRef, inject, Input, isSignal, Output, signal, ViewChild, ViewChildren, } from '@angular/core'; import { EMPTY_QUERY } from '@taiga-ui/cdk/constants'; import { TuiElement } from '@taiga-ui/cdk/directives/element'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiIsNativeFocused } from '@taiga-ui/cdk/utils/focus'; import { tuiIsPresent } from '@taiga-ui/cdk/utils/miscellaneous'; import { tuiAsDataListAccessor, TuiDataList, TuiDataListComponent, tuiInjectDataListSize, TuiOption, TuiOptionWithValue, } from '@taiga-ui/core/components/data-list'; import { TuiLoader } from '@taiga-ui/core/components/loader'; import { TUI_ITEMS_HANDLERS } from '@taiga-ui/core/directives/items-handlers'; import { TUI_ITEMS_HANDLERS as TUI_ITEMS_HANDLERS_LEGACY } from '@taiga-ui/kit/tokens'; import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/core/components/data-list"; class TuiDataListWrapperComponent { constructor() { this.datalist = signal(null); this.itemsHandlers = inject(TUI_ITEMS_HANDLERS); // TODO(v5): delete this.itemsHandlersLegacy = inject(TUI_ITEMS_HANDLERS_LEGACY); // TODO(v5): delete this.legacyOptionsQuery = EMPTY_QUERY; // TODO(v5): delete this.optionsQuery = EMPTY_QUERY; this.newOptionMode = tuiInjectElement().hasAttribute('new'); this.items = []; this.disabledItemHandler = this.newOptionMode ? this.itemsHandlers?.disabledItemHandler() : this.itemsHandlersLegacy.disabledItemHandler; this.size = tuiInjectDataListSize(); this.itemClick = new EventEmitter(); this.options = computed(() => this.datalist()?.options() ?? []); this.itemContent = ({ $implicit }) => this.newOptionMode ? this.itemsHandlers.stringify()($implicit) : this.itemsHandlersLegacy.stringify($implicit); } getContext($implicit, { nativeElement }) { return { $implicit, active: tuiIsNativeFocused(nativeElement) }; } // TODO(v5): delete getOptions(includeDisabled = false) { return [ ...this.legacyOptionsQuery, ...this.optionsQuery, ] .filter(({ disabled }) => includeDisabled || !disabled) .map(({ value }) => (isSignal(value) ? value() : value)) .filter(tuiIsPresent); } // TODO(v5): use signal `viewChild` set datalistSetter(x) { this.datalist.set(x); } $cast(items) { return items; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDataListWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDataListWrapperComponent, isStandalone: true, selector: "tui-data-list-wrapper:not([labels]), tui-data-list-wrapper:not([labels])[new]", inputs: { items: "items", disabledItemHandler: "disabledItemHandler", emptyContent: "emptyContent", size: "size", itemContent: "itemContent" }, outputs: { itemClick: "itemClick" }, providers: [tuiAsDataListAccessor(TuiDataListWrapperComponent)], viewQueries: [{ propertyName: "datalistSetter", first: true, predicate: TuiDataListComponent, descendants: true }, { propertyName: "legacyOptionsQuery", predicate: i0.forwardRef(function () { return TuiOption; }), descendants: true }, { propertyName: "optionsQuery", predicate: i0.forwardRef(function () { return TuiOptionWithValue; }), descendants: true }], ngImport: i0, template: "<tui-data-list\n *ngIf=\"items; else loading\"\n [emptyContent]=\"emptyContent\"\n [size]=\"size\"\n>\n <ng-container *ngIf=\"newOptionMode; else legacyOptionFallback\">\n <button\n *ngFor=\"let item of $cast(items)\"\n #elementRef=\"elementRef\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </button>\n </ng-container>\n\n <!-- TODO(v5): delete fallback -->\n <ng-template #legacyOptionFallback>\n <button\n *ngFor=\"let item of $cast(items)\"\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <span class=\"t-content\">\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </span>\n </button>\n </ng-template>\n</tui-data-list>\n<ng-template #loading>\n <tui-loader\n automation-id=\"tui-data-list-wrapper__loader\"\n class=\"t-loader\"\n />\n</ng-template>\n", styles: [":host{display:block}.t-content{flex:1;min-inline-size:0}.t-loader{margin:.75rem 0}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: i1.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i1.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: i1.TuiOptionNew, selector: "button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]", inputs: ["disabled"] }, { kind: "directive", type: i1.TuiOptionWithValue, selector: "button[tuiOption][value][new], a[tuiOption][value][new], label[tuiOption][value][new]", inputs: ["disabled", "value"] }, { kind: "directive", type: TuiElement, selector: "[tuiElement]", exportAs: ["elementRef"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } export { TuiDataListWrapperComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDataListWrapperComponent, decorators: [{ type: Component, args: [{ standalone: true, selector: 'tui-data-list-wrapper:not([labels]), tui-data-list-wrapper:not([labels])[new]', imports: [NgForOf, NgIf, PolymorpheusOutlet, TuiDataList, TuiElement, TuiLoader], changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiAsDataListAccessor(TuiDataListWrapperComponent)], template: "<tui-data-list\n *ngIf=\"items; else loading\"\n [emptyContent]=\"emptyContent\"\n [size]=\"size\"\n>\n <ng-container *ngIf=\"newOptionMode; else legacyOptionFallback\">\n <button\n *ngFor=\"let item of $cast(items)\"\n #elementRef=\"elementRef\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </button>\n </ng-container>\n\n <!-- TODO(v5): delete fallback -->\n <ng-template #legacyOptionFallback>\n <button\n *ngFor=\"let item of $cast(items)\"\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <span class=\"t-content\">\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </span>\n </button>\n </ng-template>\n</tui-data-list>\n<ng-template #loading>\n <tui-loader\n automation-id=\"tui-data-list-wrapper__loader\"\n class=\"t-loader\"\n />\n</ng-template>\n", styles: [":host{display:block}.t-content{flex:1;min-inline-size:0}.t-loader{margin:.75rem 0}\n"] }] }], propDecorators: { legacyOptionsQuery: [{ type: ViewChildren, args: [forwardRef(() => TuiOption)] }], optionsQuery: [{ type: ViewChildren, args: [forwardRef(() => TuiOptionWithValue)] }], items: [{ type: Input }], disabledItemHandler: [{ type: Input }], emptyContent: [{ type: Input }], size: [{ type: Input }], itemClick: [{ type: Output }], itemContent: [{ type: Input }], datalistSetter: [{ type: ViewChild, args: [TuiDataListComponent] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvZGF0YS1saXN0LXdyYXBwZXIvZGF0YS1saXN0LXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvZGF0YS1saXN0LXdyYXBwZXIvZGF0YS1saXN0LXdyYXBwZXIudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTVELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRCxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLFNBQVMsRUFDVCxrQkFBa0IsR0FDckIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFM0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMENBQTBDLENB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Q0FDTSxJQUFJLFlBRVosK0VBQStFLFdBQzFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxtQkFHL0QsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLHFCQUFxQiw2QkFBNkIsQ0FBQzs4QkFZNUMsa0JBQWtCO3NCQURwQyxZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBS3RCLFlBQVk7c0JBRDlCLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQU0zQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsbUJBQW1CO3NCQUR6QixLQUFLO2dCQU1DLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlVLFNBQVM7c0JBRHhCLE1BQU07Z0JBTUEsV0FBVztzQkFEakIsS0FBSztnQkEwQlEsY0FBYztzQkFEM0IsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nRm9yT2YsIE5nSWZ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7RWxlbWVudFJlZiwgUXVlcnlMaXN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBpc1NpZ25hbCxcbiAgICBPdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtFTVBUWV9RVUVSWX0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuaW1wb3J0IHtUdWlFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvZWxlbWVudCc7XG5pbXBvcnQgdHlwZSB7VHVpQm9vbGVhbkhhbmRsZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdHlwZXMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge3R1aUlzTmF0aXZlRm9jdXNlZH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9mb2N1cyc7XG5pbXBvcnQge3R1aUlzUHJlc2VudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB0eXBlIHtUdWlEYXRhTGlzdEFjY2Vzc29yfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2RhdGEtbGlzdCc7XG5pbXBvcnQge1xuICAgIHR1aUFzRGF0YUxpc3RBY2Nlc3NvcixcbiAgICBUdWlEYXRhTGlzdCxcbiAgICBUdWlEYXRhTGlzdENvbXBvbmVudCxcbiAgICB0dWlJbmplY3REYXRhTGlzdFNpemUsXG4gICAgVHVpT3B0aW9uLFxuICAgIFR1aU9wdGlvbldpdGhWYWx1ZSxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9kYXRhLWxpc3QnO1xuaW1wb3J0IHtUdWlMb2FkZXJ9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvbG9hZGVyJztcbmltcG9ydCB0eXBlIHtUdWlJdGVtc0hhbmRsZXJzfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2l0ZW1zLWhhbmRsZXJzJztcbmltcG9ydCB7VFVJX0lURU1TX0hBTkRMRVJTfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2l0ZW1zLWhhbmRsZXJzJztcbmltcG9ydCB0eXBlIHtUdWlWYWx1ZUNvbnRlbnRDb250ZXh0fSBmcm9tICdAdGFpZ2EtdWkvY29yZS90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VHVpSXRlbXNIYW5kbGVycyBhcyBUdWlJdGVtc0hhbmRsZXJzTGVnYWN5fSBmcm9tICdAdGFpZ2EtdWkva2l0L3Rva2Vucyc7XG5pbXBvcnQge1RVSV9JVEVNU19IQU5ETEVSUyBhcyBUVUlfSVRFTVNfSEFORExFUlNfTEVHQUNZfSBmcm9tICdAdGFpZ2EtdWkva2l0L3Rva2Vucyc7XG5pbXBvcnQgdHlwZSB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQge1BvbHltb3JwaGV1c091dGxldH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6XG4gICAgICAgICd0dWktZGF0YS1saXN0LXdyYXBwZXI6bm90KFtsYWJlbHNdKSwgdHVpLWRhdGEtbGlzdC13cmFwcGVyOm5vdChbbGFiZWxzXSlbbmV3XScsIC8vIFRPRE8odjUpOiByZW1vdmUgW25ld11cbiAgICBpbXBvcnRzOiBbTmdGb3JPZiwgTmdJZiwgUG9seW1vcnBoZXVzT3V0bGV0LCBUdWlEYXRhTGlzdCwgVHVpRWxlbWVudCwgVHVpTG9hZGVyXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1saXN0LXdyYXBwZXIudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0YS1saXN0LXdyYXBwZXIuc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3R1aUFzRGF0YUxpc3RBY2Nlc3NvcihUdWlEYXRhTGlzdFdyYXBwZXJDb21wb25lbnQpXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpRGF0YUxpc3RXcmFwcGVyQ29tcG9uZW50PFQsIEsgPSBUPiBpbXBsZW1lbnRzIFR1aURhdGFMaXN0QWNjZXNzb3I8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YWxpc3QgPSBzaWduYWw8VHVpRGF0YUxpc3RDb21wb25lbnQ8VD4gfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zSGFuZGxlcnM6IFR1aUl0ZW1zSGFuZGxlcnM8VD4gPSBpbmplY3QoVFVJX0lURU1TX0hBTkRMRVJTKTtcbiAgICAvLyBUT0RPKHY1KTogZGVsZXRlXG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtc0hhbmRsZXJzTGVnYWN5OiBUdWlJdGVtc0hhbmRsZXJzTGVnYWN5PFQ+ID0gaW5qZWN0KFxuICAgICAgICBUVUlfSVRFTVNfSEFORExFUlNfTEVHQUNZLFxuICAgICk7XG5cbiAgICAvLyBUT0RPKHY1KTogZGVsZXRlXG4gICAgQFZpZXdDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IFR1aU9wdGlvbikpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxlZ2FjeU9wdGlvbnNRdWVyeTogUXVlcnlMaXN0PFR1aU9wdGlvbjxUPj4gPSBFTVBUWV9RVUVSWTtcblxuICAgIC8vIFRPRE8odjUpOiBkZWxldGVcbiAgICBAVmlld0NoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVHVpT3B0aW9uV2l0aFZhbHVlKSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uc1F1ZXJ5OiBRdWVyeUxpc3Q8VHVpT3B0aW9uV2l0aFZhbHVlPFQ+PiA9IEVNUFRZX1FVRVJZO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5ld09wdGlvbk1vZGUgPSB0dWlJbmplY3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKCduZXcnKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGl0ZW1zOiByZWFkb25seSBLW10gfCBudWxsID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZEl0ZW1IYW5kbGVyOiBUdWlCb29sZWFuSGFuZGxlcjxUPiA9IHRoaXMubmV3T3B0aW9uTW9kZVxuICAgICAgICA/IHRoaXMuaXRlbXNIYW5kbGVycz8uZGlzYWJsZWRJdGVtSGFuZGxlcigpXG4gICAgICAgIDogdGhpcy5pdGVtc0hhbmRsZXJzTGVnYWN5LmRpc2FibGVkSXRlbUhhbmRsZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbXB0eUNvbnRlbnQ6IFBvbHltb3JwaGV1c0NvbnRlbnQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaXplID0gdHVpSW5qZWN0RGF0YUxpc3RTaXplKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGFsaXN0KCk/Lm9wdGlvbnMoKSA/PyBbXSk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtQ29udGVudDogUG9seW1vcnBoZXVzQ29udGVudDxUdWlWYWx1ZUNvbnRlbnRDb250ZXh0PFQ+PiA9ICh7JGltcGxpY2l0fSkgPT5cbiAgICAgICAgdGhpcy5uZXdPcHRpb25Nb2RlXG4gICAgICAgICAgICA/IHRoaXMuaXRlbXNIYW5kbGVycy5zdHJpbmdpZnkoKSgkaW1wbGljaXQpXG4gICAgICAgICAgICA6IHRoaXMuaXRlbXNIYW5kbGVyc0xlZ2FjeS5zdHJpbmdpZnkoJGltcGxpY2l0KTtcblxuICAgIHB1YmxpYyBnZXRDb250ZXh0KFxuICAgICAgICAkaW1wbGljaXQ6IFQsXG4gICAgICAgIHtuYXRpdmVFbGVtZW50fTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgKTogVHVpVmFsdWVDb250ZW50Q29udGV4dDxUPiB7XG4gICAgICAgIHJldHVybiB7JGltcGxpY2l0LCBhY3RpdmU6IHR1aUlzTmF0aXZlRm9jdXNlZChuYXRpdmVFbGVtZW50KX07XG4gICAgfVxuXG4gICAgLy8gVE9ETyh2NSk6IGRlbGV0ZVxuICAgIHB1YmxpYyBnZXRPcHRpb25zKGluY2x1ZGVEaXNhYmxlZCA9IGZhbHNlKTogcmVhZG9ubHkgVFtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMubGVnYWN5T3B0aW9uc1F1ZXJ5LCAvLyBUT0RPKHY1KTogZGVsZXRlXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNRdWVyeSxcbiAgICAgICAgXVxuICAgICAgICAgICAgLmZpbHRlcigoe2Rpc2FibGVkfSkgPT4gaW5jbHVkZURpc2FibGVkIHx8ICFkaXNhYmxlZClcbiAgICAgICAgICAgIC5tYXAoKHt2YWx1ZX0pID0+IChpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpKVxuICAgICAgICAgICAgLmZpbHRlcih0dWlJc1ByZXNlbnQpO1xuICAgIH1cblxuICAgIC8vIFRPRE8odjUpOiB1c2Ugc2lnbmFsIGB2aWV3Q2hpbGRgXG4gICAgQFZpZXdDaGlsZChUdWlEYXRhTGlzdENvbXBvbmVudClcbiAgICBwcm90ZWN0ZWQgc2V0IGRhdGFsaXN0U2V0dGVyKHg6IFR1aURhdGFMaXN0Q29tcG9uZW50PFQ+KSB7XG4gICAgICAgIHRoaXMuZGF0YWxpc3Quc2V0KHgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCAkY2FzdChpdGVtczogcmVhZG9ubHkgS1tdKTogcmVhZG9ubHkgVFtdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zIGFzIHVua25vd24gYXMgcmVhZG9ubHkgVFtdO1xuICAgIH1cbn1cbiIsIjx0dWktZGF0YS1saXN0XG4gICAgKm5nSWY9XCJpdGVtczsgZWxzZSBsb2FkaW5nXCJcbiAgICBbZW1wdHlDb250ZW50XT1cImVtcHR5Q29udGVudFwiXG4gICAgW3NpemVdPVwic2l6ZVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5ld09wdGlvbk1vZGU7IGVsc2UgbGVnYWN5T3B0aW9uRmFsbGJhY2tcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgJGNhc3QoaXRlbXMpXCJcbiAgICAgICAgICAgICNlbGVtZW50UmVmPVwiZWxlbWVudFJlZlwiXG4gICAgICAgICAgICBuZXdcbiAgICAgICAgICAgIHR1aUVsZW1lbnRcbiAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRJdGVtSGFuZGxlcihpdGVtKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAoY2xpY2suY2FwdHVyZSk9XCJpdGVtQ2xpY2suZW1pdChpdGVtKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW1Db250ZW50IGFzIHRleHQ7IGNvbnRleHQ6IGdldENvbnRleHQoaXRlbSwgZWxlbWVudFJlZilcIj5cbiAgICAgICAgICAgICAgICB7eyB0ZXh0IH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFRPRE8odjUpOiBkZWxldGUgZmFsbGJhY2sgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNsZWdhY3lPcHRpb25GYWxsYmFjaz5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgJGNhc3QoaXRlbXMpXCJcbiAgICAgICAgICAgICNlbGVtZW50UmVmPVwiZWxlbWVudFJlZlwiXG4gICAgICAgICAgICBhdXRvbWF0aW9uLWlkPVwidHVpLWRhdGEtbGlzdC13cmFwcGVyX19vcHRpb25cIlxuICAgICAgICAgICAgdHVpRWxlbWVudFxuICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEl0ZW1IYW5kbGVyKGl0ZW0pXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpdGVtQ2xpY2suZW1pdChpdGVtKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcG9seW1vcnBoZXVzT3V0bGV0PVwiaXRlbUNvbnRlbnQgYXMgdGV4dDsgY29udGV4dDogZ2V0Q29udGV4dChpdGVtLCBlbGVtZW50UmVmKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0IH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L3R1aS1kYXRhLWxpc3Q+XG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gICAgPHR1aS1sb2FkZXJcbiAgICAgICAgYXV0b21hdGlvbi1pZD1cInR1aS1kYXRhLWxpc3Qtd3JhcHBlcl9fbG9hZGVyXCJcbiAgICAgICAgY2xhc3M9XCJ0LWxvYWRlclwiXG4gICAgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=