UNPKG

@taiga-ui/addon-table

Version:

A library to display tabled data with filters, search, group actions, etc.

132 lines 18.8 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, EventEmitter, inject, Input, Output, signal, ViewEncapsulation, } from '@angular/core'; import { WA_INTERSECTION_ROOT_MARGIN } from '@ng-web-apis/intersection-observer'; import { tuiProvide, tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous'; import { tuiButtonOptionsProvider } from '@taiga-ui/core/components/button'; import { TUI_TEXTFIELD_OPTIONS } from '@taiga-ui/core/components/textfield'; import { tuiBadgeOptionsProvider } from '@taiga-ui/kit/components/badge'; import { tuiChipOptionsProvider } from '@taiga-ui/kit/components/chip'; import { tuiProgressOptionsProvider } from '@taiga-ui/kit/components/progress'; import { combineLatest, debounceTime, map, Subject } from 'rxjs'; import { TUI_TABLE_OPTIONS, TuiSortDirection } from '../table.options'; import { TuiStuck } from './stuck.directive'; import * as i0 from "@angular/core"; import * as i1 from "./stuck.directive"; class TuiTableStyles { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableStyles, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiTableStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-table" }, ngImport: i0, template: '', isInline: true, styles: ["table[tuiTable]{border-collapse:separate;border-spacing:0}table[tuiTable] [tuiCell]{padding:0}table[tuiTable] [tuiTitle]{white-space:nowrap}table[tuiTable] [tuiTitle] tui-icon{font-size:1rem}table[tuiTable] [tuiSubtitle]{color:var(--tui-text-secondary)}table[tuiTable] [tuiTh] [tuiCell],table[tuiTable] [tuiTh] [tuiTitle]{font:inherit;color:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableStyles, decorators: [{ type: Component, args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'tui-table', }, styles: ["table[tuiTable]{border-collapse:separate;border-spacing:0}table[tuiTable] [tuiCell]{padding:0}table[tuiTable] [tuiTitle]{white-space:nowrap}table[tuiTable] [tuiTitle] tui-icon{font-size:1rem}table[tuiTable] [tuiSubtitle]{color:var(--tui-text-secondary)}table[tuiTable] [tuiTh] [tuiCell],table[tuiTable] [tuiTh] [tuiTitle]{font:inherit;color:inherit}\n"] }] }] }); class TuiTableDirective { constructor() { this.options = inject(TUI_TABLE_OPTIONS); this.cdr = inject(ChangeDetectorRef); this.nothing = tuiWithStyles(TuiTableStyles); this.columns = []; this.direction = this.options.direction; /** * @deprecated: use sortChange */ this.directionChange = new EventEmitter(); /** * @deprecated: use sortChange */ this.sorterChange = new EventEmitter(); this.sortChange = combineLatest([ this.sorterChange, this.directionChange, ]).pipe(debounceTime(0), map(([sortComparator, sortDirection]) => ({ sortBy: sortComparator, orderBy: sortDirection, sortComparator, sortDirection, }))); this.appearance = signal('table'); this.size = signal(this.options.size); this.cleaner = signal(false); // TODO: refactor to signal inputs after Angular update this.change$ = new Subject(); this.sorter = () => 0; } set sizeSetter(size) { this.size.set(size); } updateSorterAndDirection(sorter) { if (this.sorter === sorter) { this.updateSorter(this.sorter, this.direction === TuiSortDirection.Asc ? TuiSortDirection.Desc : TuiSortDirection.Asc); } else { this.updateSorter(sorter); } } ngOnChanges() { this.change$.next(); } ngAfterViewInit() { this.cdr.detectChanges(); } updateSorter(sorter, direction = TuiSortDirection.Asc) { this.sorter = sorter || this.sorter; this.direction = direction; this.sorterChange.emit(sorter); this.directionChange.emit(this.direction); this.change$.next(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTableDirective, isStandalone: true, selector: "table[tuiTable]", inputs: { columns: "columns", direction: "direction", sizeSetter: ["size", "sizeSetter"], sorter: "sorter" }, outputs: { directionChange: "directionChange", sorterChange: "sorterChange", sortChange: "sortChange" }, host: { properties: { "attr.data-size": "size()" } }, providers: [ { provide: WA_INTERSECTION_ROOT_MARGIN, useValue: '10000px 10000px 10000px 0px', }, tuiProvide(TUI_TEXTFIELD_OPTIONS, TuiTableDirective), tuiButtonOptionsProvider({ size: 's' }), tuiBadgeOptionsProvider({ size: 'm', appearance: 'neutral' }), tuiChipOptionsProvider({ size: 'xxs', appearance: 'neutral' }), tuiProgressOptionsProvider({ size: 's', color: 'var(--tui-text-action)' }), ], usesOnChanges: true, hostDirectives: [{ directive: i1.TuiStuck }], ngImport: i0 }); } } export { TuiTableDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTableDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'table[tuiTable]', providers: [ { provide: WA_INTERSECTION_ROOT_MARGIN, useValue: '10000px 10000px 10000px 0px', }, tuiProvide(TUI_TEXTFIELD_OPTIONS, TuiTableDirective), tuiButtonOptionsProvider({ size: 's' }), tuiBadgeOptionsProvider({ size: 'm', appearance: 'neutral' }), tuiChipOptionsProvider({ size: 'xxs', appearance: 'neutral' }), tuiProgressOptionsProvider({ size: 's', color: 'var(--tui-text-action)' }), ], hostDirectives: [TuiStuck], host: { '[attr.data-size]': 'size()', }, }] }], propDecorators: { columns: [{ type: Input }], direction: [{ type: Input }], directionChange: [{ type: Output }], sorterChange: [{ type: Output }], sortChange: [{ type: Output }], sizeSetter: [{ type: Input, args: ['size'] }], sorter: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tdGFibGUvY29tcG9uZW50cy90YWJsZS9kaXJlY3RpdmVzL3RhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04saUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRS9FLE9BQU8sRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDNUUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFMUUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFMUUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFN0UsT0FBTyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUcvRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQyxNQVVNLGNBQWM7K0dBQWQsY0FBYzttR0FBZCxjQUFjLCtHQVJOLEVBQUU7OzRGQVFWLGNBQWM7a0JBVm5CLFNBQVM7aUNBQ00sSUFBSSxZQUNOLEVBQUUsaUJBRUcsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsV0FBVztxQkFDckI7O0FBSUwsTUFtQmEsaUJBQWlCO0lBbkI5QjtRQXNCcUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU5QixZQUFPLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBR3BELFlBQU8sR0FBb0MsRUFBRSxDQUFDO1FBRzlDLGNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUUxQzs7V0FFRztRQUVhLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFFdkU7O1dBRUc7UUFFYSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRzNELGVBQVUsR0FBc0MsYUFBYSxDQUFDO1lBQzFFLElBQUksQ0FBQyxZQUFZO1lBQ2pCLElBQUksQ0FBQyxlQUFlO1NBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQ0gsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLGNBQWM7WUFDZCxhQUFhO1NBQ2hCLENBQUMsQ0FBQyxDQUNOLENBQUM7UUFFYyxlQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLFNBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhDLHVEQUF1RDtRQUN2QyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVF2QyxXQUFNLEdBQXFCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztLQWlDN0M7SUF2Q0csSUFDVyxVQUFVLENBQUMsSUFBeUI7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUtNLHdCQUF3QixDQUFDLE1BQStCO1FBQzNELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FDYixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLENBQUMsR0FBRztnQkFDbkMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3ZCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQzdCLENBQUM7U0FDTDthQUFNO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sZUFBZTtRQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxZQUFZLENBQ2YsTUFBK0IsRUFDL0IsWUFBOEIsZ0JBQWdCLENBQUMsR0FBRztRQUVsRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBckZRLGlCQUFpQjttR0FBakIsaUJBQWlCLDJVQWhCZjtZQUNQO2dCQUNJLE9BQU8sRUFBRSwyQkFBMkI7Z0JBQ3BDLFFBQVEsRUFBRSw2QkFBNkI7YUFDMUM7WUFDRCxVQUFVLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUM7WUFDcEQsd0JBQXdCLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFDLENBQUM7WUFDckMsdUJBQXVCLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQztZQUMzRCxzQkFBc0IsQ0FBQyxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDO1lBQzVELDBCQUEwQixDQUFDLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUMsQ0FBQztTQUMzRTs7U0FNUSxpQkFBaUI7NEZBQWpCLGlCQUFpQjtrQkFuQjdCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsMkJBQTJCOzRCQUNwQyxRQUFRLEVBQUUsNkJBQTZCO3lCQUMxQzt3QkFDRCxVQUFVLENBQUMscUJBQXFCLG9CQUFvQjt3QkFDcEQsd0JBQXdCLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFDLENBQUM7d0JBQ3JDLHVCQUF1QixDQUFDLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUM7d0JBQzNELHNCQUFzQixDQUFDLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUM7d0JBQzVELDBCQUEwQixDQUFDLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUMsQ0FBQztxQkFDM0U7b0JBQ0QsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUMxQixJQUFJLEVBQUU7d0JBQ0Ysa0JBQWtCLEVBQUUsUUFBUTtxQkFDL0I7aUJBQ0o7OEJBVVUsT0FBTztzQkFEYixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFPVSxlQUFlO3NCQUQ5QixNQUFNO2dCQU9TLFlBQVk7c0JBRDNCLE1BQU07Z0JBSVMsVUFBVTtzQkFEekIsTUFBTTtnQkFzQkksVUFBVTtzQkFEcEIsS0FBSzt1QkFBQyxNQUFNO2dCQU1OLE1BQU07c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtBZnRlclZpZXdJbml0LCBPbkNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dBX0lOVEVSU0VDVElPTl9ST09UX01BUkdJTn0gZnJvbSAnQG5nLXdlYi1hcGlzL2ludGVyc2VjdGlvbi1vYnNlcnZlcic7XG5pbXBvcnQgdHlwZSB7VHVpQ29tcGFyYXRvcn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLXRhYmxlL3R5cGVzJztcbmltcG9ydCB7dHVpUHJvdmlkZSwgdHVpV2l0aFN0eWxlc30gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7dHVpQnV0dG9uT3B0aW9uc1Byb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgdHlwZSB7VHVpVGV4dGZpZWxkT3B0aW9uc30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtUVUlfVEVYVEZJRUxEX09QVElPTlN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvdGV4dGZpZWxkJztcbmltcG9ydCB0eXBlIHtUdWlTaXplTCwgVHVpU2l6ZVN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3R5cGVzJztcbmltcG9ydCB7dHVpQmFkZ2VPcHRpb25zUHJvdmlkZXJ9IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQge3R1aUNoaXBPcHRpb25zUHJvdmlkZXJ9IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9jaGlwJztcbmltcG9ydCB7dHVpUHJvZ3Jlc3NPcHRpb25zUHJvdmlkZXJ9IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9wcm9ncmVzcyc7XG5pbXBvcnQgdHlwZSB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgbWFwLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHR5cGUge1R1aVRhYmxlU29ydENoYW5nZX0gZnJvbSAnLi4vdGFibGUub3B0aW9ucyc7XG5pbXBvcnQge1RVSV9UQUJMRV9PUFRJT05TLCBUdWlTb3J0RGlyZWN0aW9ufSBmcm9tICcuLi90YWJsZS5vcHRpb25zJztcbmltcG9ydCB7VHVpU3R1Y2t9IGZyb20gJy4vc3R1Y2suZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuc3R5bGUubGVzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3R1aS10YWJsZScsXG4gICAgfSxcbn0pXG5jbGFzcyBUdWlUYWJsZVN0eWxlcyB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAndGFibGVbdHVpVGFibGVdJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogV0FfSU5URVJTRUNUSU9OX1JPT1RfTUFSR0lOLFxuICAgICAgICAgICAgdXNlVmFsdWU6ICcxMDAwMHB4IDEwMDAwcHggMTAwMDBweCAwcHgnLFxuICAgICAgICB9LFxuICAgICAgICB0dWlQcm92aWRlKFRVSV9URVhURklFTERfT1BUSU9OUywgVHVpVGFibGVEaXJlY3RpdmUpLFxuICAgICAgICB0dWlCdXR0b25PcHRpb25zUHJvdmlkZXIoe3NpemU6ICdzJ30pLFxuICAgICAgICB0dWlCYWRnZU9wdGlvbnNQcm92aWRlcih7c2l6ZTogJ20nLCBhcHBlYXJhbmNlOiAnbmV1dHJhbCd9KSxcbiAgICAgICAgdHVpQ2hpcE9wdGlvbnNQcm92aWRlcih7c2l6ZTogJ3h4cycsIGFwcGVhcmFuY2U6ICduZXV0cmFsJ30pLFxuICAgICAgICB0dWlQcm9ncmVzc09wdGlvbnNQcm92aWRlcih7c2l6ZTogJ3MnLCBjb2xvcjogJ3ZhcigtLXR1aS10ZXh0LWFjdGlvbiknfSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1R1aVN0dWNrXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5kYXRhLXNpemVdJzogJ3NpemUoKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpVGFibGVEaXJlY3RpdmU8VCBleHRlbmRzIFBhcnRpYWw8UmVjb3JkPGtleW9mIFQsIGFueT4+PlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgVHVpVGV4dGZpZWxkT3B0aW9ucywgT25DaGFuZ2VzXG57XG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zID0gaW5qZWN0KFRVSV9UQUJMRV9PUFRJT05TKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm90aGluZyA9IHR1aVdpdGhTdHlsZXMoVHVpVGFibGVTdHlsZXMpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sdW1uczogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBrZXlvZiBUPiA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkOiB1c2Ugc29ydENoYW5nZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBkaXJlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFR1aVNvcnREaXJlY3Rpb24+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZDogdXNlIHNvcnRDaGFuZ2VcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgc29ydGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUdWlDb21wYXJhdG9yPFQ+IHwgbnVsbD4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBzb3J0Q2hhbmdlOiBPYnNlcnZhYmxlPFR1aVRhYmxlU29ydENoYW5nZTxUPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5zb3J0ZXJDaGFuZ2UsXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uQ2hhbmdlLFxuICAgIF0pLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgbWFwKChbc29ydENvbXBhcmF0b3IsIHNvcnREaXJlY3Rpb25dKSA9PiAoe1xuICAgICAgICAgICAgc29ydEJ5OiBzb3J0Q29tcGFyYXRvcixcbiAgICAgICAgICAgIG9yZGVyQnk6IHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICBzb3J0Q29tcGFyYXRvcixcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGFwcGVhcmFuY2UgPSBzaWduYWwoJ3RhYmxlJyk7XG4gICAgcHVibGljIHJlYWRvbmx5IHNpemUgPSBzaWduYWwodGhpcy5vcHRpb25zLnNpemUpO1xuICAgIHB1YmxpYyByZWFkb25seSBjbGVhbmVyID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8vIFRPRE86IHJlZmFjdG9yIHRvIHNpZ25hbCBpbnB1dHMgYWZ0ZXIgQW5ndWxhciB1cGRhdGVcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBASW5wdXQoJ3NpemUnKVxuICAgIHB1YmxpYyBzZXQgc2l6ZVNldHRlcihzaXplOiBUdWlTaXplTCB8IFR1aVNpemVTKSB7XG4gICAgICAgIHRoaXMuc2l6ZS5zZXQoc2l6ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc29ydGVyOiBUdWlDb21wYXJhdG9yPFQ+ID0gKCkgPT4gMDtcblxuICAgIHB1YmxpYyB1cGRhdGVTb3J0ZXJBbmREaXJlY3Rpb24oc29ydGVyOiBUdWlDb21wYXJhdG9yPFQ+IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zb3J0ZXIgPT09IHNvcnRlcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTb3J0ZXIoXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0ZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPT09IFR1aVNvcnREaXJlY3Rpb24uQXNjXG4gICAgICAgICAgICAgICAgICAgID8gVHVpU29ydERpcmVjdGlvbi5EZXNjXG4gICAgICAgICAgICAgICAgICAgIDogVHVpU29ydERpcmVjdGlvbi5Bc2MsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTb3J0ZXIoc29ydGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2UkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVNvcnRlcihcbiAgICAgICAgc29ydGVyOiBUdWlDb21wYXJhdG9yPFQ+IHwgbnVsbCxcbiAgICAgICAgZGlyZWN0aW9uOiBUdWlTb3J0RGlyZWN0aW9uID0gVHVpU29ydERpcmVjdGlvbi5Bc2MsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc29ydGVyID0gc29ydGVyIHx8IHRoaXMuc29ydGVyO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgdGhpcy5zb3J0ZXJDaGFuZ2UuZW1pdChzb3J0ZXIpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuZGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jaGFuZ2UkLm5leHQoKTtcbiAgICB9XG59XG4iXX0=