UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

131 lines 16.3 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { VIRTUAL_SCROLL_STRATEGY, } from "@angular/cdk/scrolling"; import { Directive, forwardRef, Input } from "@angular/core"; import { TableVirtualScrollLinearStrategy, // eslint-disable-next-line import/no-deprecated TableVirtualScrollStrategy, } from "./table-virtual-scroll-strategy"; import * as i0 from "@angular/core"; export const DEFAULT_TABLE_HEADER_OFFSET = 40; export const TABLE_ROW_HEIGHT = 24; export function complexScrollStrategyFactory(scroll) { return scroll.scrollStrategy; } export class TableVirtualScrollLinearDirective { constructor() { /** Height of table row. */ this.rowHeight = TABLE_ROW_HEIGHT; // Converting parameters to numbers here to avoid inputs become strings in case user sets rowHeight and offset // without square brackets in the template this.scrollStrategy = new TableVirtualScrollLinearStrategy(+this.rowHeight); } ngOnChanges(changes) { this.scrollStrategy.setRowHeight(+this.rowHeight); if (changes.rowCount) { this.updateDataLength(this.rowCount); } } /** * Updates the size of the items in the virtually scrolling list. * @param length */ updateDataLength(length) { this.scrollStrategy.setDataLength(length); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableVirtualScrollLinearDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TableVirtualScrollLinearDirective, selector: "[tableVirtualScroll]:not([offset])", inputs: { rowHeight: "rowHeight", rowCount: "rowCount" }, providers: [ { provide: VIRTUAL_SCROLL_STRATEGY, useFactory: complexScrollStrategyFactory, deps: [forwardRef(() => TableVirtualScrollLinearDirective)], }, ], usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableVirtualScrollLinearDirective, decorators: [{ type: Directive, args: [{ selector: "[tableVirtualScroll]:not([offset])", providers: [ { provide: VIRTUAL_SCROLL_STRATEGY, useFactory: complexScrollStrategyFactory, deps: [forwardRef(() => TableVirtualScrollLinearDirective)], }, ], }] }], propDecorators: { rowHeight: [{ type: Input }], rowCount: [{ type: Input }] } }); /** * @deprecated in v11 - Use tableVirtualScroll with 'rowCount' attribute instead of 'offset' attribute - Removal: NUI-5796 */ export class TableVirtualScrollDirective { constructor() { /** Height of table row. */ this.rowHeight = TABLE_ROW_HEIGHT; /** Space to be saved for the header. Will be assigned to headerOffset value inside custom strategy */ this.offset = DEFAULT_TABLE_HEADER_OFFSET; // Converting parameters to numbers here to avoid inputs become strings in case user sets rowHeight and offset // without square brackets in the template // eslint-disable-next-line import/no-deprecated this.scrollStrategy = new TableVirtualScrollStrategy(+this.rowHeight, +this.offset); } ngOnChanges() { this.scrollStrategy.setScrollHeight(+this.rowHeight, +this.offset); } /** * Updates the size of the items in the virtually scrolling list. * @param length */ updateDataLength(length) { this.scrollStrategy.setDataLength(length); } setMaxItems(maxItems) { this.scrollStrategy.maxItems = maxItems; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableVirtualScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TableVirtualScrollDirective, selector: "[tableVirtualScroll]:not([rowCount])", inputs: { rowHeight: "rowHeight", offset: "offset" }, providers: [ { provide: VIRTUAL_SCROLL_STRATEGY, useFactory: complexScrollStrategyFactory, deps: [forwardRef(() => TableVirtualScrollDirective)], }, ], usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableVirtualScrollDirective, decorators: [{ type: Directive, args: [{ selector: "[tableVirtualScroll]:not([rowCount])", providers: [ { provide: VIRTUAL_SCROLL_STRATEGY, useFactory: complexScrollStrategyFactory, deps: [forwardRef(() => TableVirtualScrollDirective)], }, ], }] }], propDecorators: { rowHeight: [{ type: Input }], offset: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdmlydHVhbC1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90YWJsZS90YWJsZS12aXJ0dWFsLXNjcm9sbC90YWJsZS12aXJ0dWFsLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFFSCx1QkFBdUIsR0FDMUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFeEUsT0FBTyxFQUNILGdDQUFnQztBQUNoQyxnREFBZ0Q7QUFDaEQsMEJBQTBCLEdBQzdCLE1BQU0saUNBQWlDLENBQUM7O0FBR3pDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFFbkMsTUFBTSxVQUFVLDRCQUE0QixDQUN4QyxNQUF1RTtJQUV2RSxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDakMsQ0FBQztBQVlELE1BQU0sT0FBTyxpQ0FBaUM7SUFWOUM7UUFXSSwyQkFBMkI7UUFDbEIsY0FBUyxHQUFXLGdCQUFnQixDQUFDO1FBSzlDLDhHQUE4RztRQUM5RywwQ0FBMEM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLGdDQUFnQyxDQUN4RCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ2xCLENBQUM7S0FtQkw7SUFqQlUsV0FBVyxDQUNkLE9BQTREO1FBRTVELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWxELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLE1BQWM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQzsrR0E3QlEsaUNBQWlDO21HQUFqQyxpQ0FBaUMsdUhBUi9CO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLHVCQUF1QjtnQkFDaEMsVUFBVSxFQUFFLDRCQUE0QjtnQkFDeEMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7YUFDOUQ7U0FDSjs7NEZBRVEsaUNBQWlDO2tCQVY3QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQ0FBb0M7b0JBQzlDLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsdUJBQXVCOzRCQUNoQyxVQUFVLEVBQUUsNEJBQTRCOzRCQUN4QyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7eUJBQzlEO3FCQUNKO2lCQUNKOzhCQUdZLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSzs7QUEyQlY7O0dBRUc7QUFXSCxNQUFNLE9BQU8sMkJBQTJCO0lBVnhDO1FBV0ksMkJBQTJCO1FBQ2xCLGNBQVMsR0FBVyxnQkFBZ0IsQ0FBQztRQUU5Qyx1R0FBdUc7UUFDOUYsV0FBTSxHQUFXLDJCQUEyQixDQUFDO1FBRXRELDhHQUE4RztRQUM5RywwQ0FBMEM7UUFDMUMsZ0RBQWdEO1FBQ3pDLG1CQUFjLEdBQUcsSUFBSSwwQkFBMEIsQ0FDbEQsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUNmLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDZixDQUFDO0tBaUJMO0lBZlUsV0FBVztRQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQWdCO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM1QyxDQUFDOytHQTdCUSwyQkFBMkI7bUdBQTNCLDJCQUEyQixxSEFSekI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxVQUFVLEVBQUUsNEJBQTRCO2dCQUN4QyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsQ0FBQzthQUN4RDtTQUNKOzs0RkFFUSwyQkFBMkI7a0JBVnZDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHNDQUFzQztvQkFDaEQsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSx1QkFBdUI7NEJBQ2hDLFVBQVUsRUFBRSw0QkFBNEI7NEJBQ3hDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUMsQ0FBQzt5QkFDeEQ7cUJBQ0o7aUJBQ0o7OEJBR1ksU0FBUztzQkFBakIsS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgICBWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3ksXG4gICAgVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksXG59IGZyb20gXCJAYW5ndWxhci9jZGsvc2Nyb2xsaW5nXCI7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQge1xuICAgIFRhYmxlVmlydHVhbFNjcm9sbExpbmVhclN0cmF0ZWd5LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZGVwcmVjYXRlZFxuICAgIFRhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5LFxufSBmcm9tIFwiLi90YWJsZS12aXJ0dWFsLXNjcm9sbC1zdHJhdGVneVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50Q2hhbmdlcyB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UQUJMRV9IRUFERVJfT0ZGU0VUID0gNDA7XG5leHBvcnQgY29uc3QgVEFCTEVfUk9XX0hFSUdIVCA9IDI0O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFNjcm9sbFN0cmF0ZWd5RmFjdG9yeShcbiAgICBzY3JvbGw6IFRhYmxlVmlydHVhbFNjcm9sbERpcmVjdGl2ZSB8IFRhYmxlVmlydHVhbFNjcm9sbExpbmVhckRpcmVjdGl2ZVxuKTogVmlydHVhbFNjcm9sbFN0cmF0ZWd5IHtcbiAgICByZXR1cm4gc2Nyb2xsLnNjcm9sbFN0cmF0ZWd5O1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbdGFibGVWaXJ0dWFsU2Nyb2xsXTpub3QoW29mZnNldF0pXCIsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogY29tcGxleFNjcm9sbFN0cmF0ZWd5RmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtmb3J3YXJkUmVmKCgpID0+IFRhYmxlVmlydHVhbFNjcm9sbExpbmVhckRpcmVjdGl2ZSldLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlVmlydHVhbFNjcm9sbExpbmVhckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgLyoqIEhlaWdodCBvZiB0YWJsZSByb3cuICovXG4gICAgQElucHV0KCkgcm93SGVpZ2h0OiBudW1iZXIgPSBUQUJMRV9ST1dfSEVJR0hUO1xuXG4gICAgLyoqIE51bWJlciBvZiByb3dzIGxvYWRlZCBpbnRvIG1lbW9yeSAqL1xuICAgIEBJbnB1dCgpIHJvd0NvdW50OiBudW1iZXI7XG5cbiAgICAvLyBDb252ZXJ0aW5nIHBhcmFtZXRlcnMgdG8gbnVtYmVycyBoZXJlIHRvIGF2b2lkIGlucHV0cyBiZWNvbWUgc3RyaW5ncyBpbiBjYXNlIHVzZXIgc2V0cyByb3dIZWlnaHQgYW5kIG9mZnNldFxuICAgIC8vIHdpdGhvdXQgc3F1YXJlIGJyYWNrZXRzIGluIHRoZSB0ZW1wbGF0ZVxuICAgIHB1YmxpYyBzY3JvbGxTdHJhdGVneSA9IG5ldyBUYWJsZVZpcnR1YWxTY3JvbGxMaW5lYXJTdHJhdGVneShcbiAgICAgICAgK3RoaXMucm93SGVpZ2h0XG4gICAgKTtcblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhcbiAgICAgICAgY2hhbmdlczogQ29tcG9uZW50Q2hhbmdlczxUYWJsZVZpcnR1YWxTY3JvbGxMaW5lYXJEaXJlY3RpdmU+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc2V0Um93SGVpZ2h0KCt0aGlzLnJvd0hlaWdodCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMucm93Q291bnQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YUxlbmd0aCh0aGlzLnJvd0NvdW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHNpemUgb2YgdGhlIGl0ZW1zIGluIHRoZSB2aXJ0dWFsbHkgc2Nyb2xsaW5nIGxpc3QuXG4gICAgICogQHBhcmFtIGxlbmd0aFxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVEYXRhTGVuZ3RoKGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc2V0RGF0YUxlbmd0aChsZW5ndGgpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBpbiB2MTEgLSBVc2UgdGFibGVWaXJ0dWFsU2Nyb2xsIHdpdGggJ3Jvd0NvdW50JyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAnb2Zmc2V0JyBhdHRyaWJ1dGUgLSBSZW1vdmFsOiBOVUktNTc5NlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbdGFibGVWaXJ0dWFsU2Nyb2xsXTpub3QoW3Jvd0NvdW50XSlcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBjb21wbGV4U2Nyb2xsU3RyYXRlZ3lGYWN0b3J5LFxuICAgICAgICAgICAgZGVwczogW2ZvcndhcmRSZWYoKCkgPT4gVGFibGVWaXJ0dWFsU2Nyb2xsRGlyZWN0aXZlKV0sXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVWaXJ0dWFsU2Nyb2xsRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICAvKiogSGVpZ2h0IG9mIHRhYmxlIHJvdy4gKi9cbiAgICBASW5wdXQoKSByb3dIZWlnaHQ6IG51bWJlciA9IFRBQkxFX1JPV19IRUlHSFQ7XG5cbiAgICAvKiogIFNwYWNlIHRvIGJlIHNhdmVkIGZvciB0aGUgaGVhZGVyLiBXaWxsIGJlIGFzc2lnbmVkIHRvIGhlYWRlck9mZnNldCB2YWx1ZSBpbnNpZGUgY3VzdG9tIHN0cmF0ZWd5ICovXG4gICAgQElucHV0KCkgb2Zmc2V0OiBudW1iZXIgPSBERUZBVUxUX1RBQkxFX0hFQURFUl9PRkZTRVQ7XG5cbiAgICAvLyBDb252ZXJ0aW5nIHBhcmFtZXRlcnMgdG8gbnVtYmVycyBoZXJlIHRvIGF2b2lkIGlucHV0cyBiZWNvbWUgc3RyaW5ncyBpbiBjYXNlIHVzZXIgc2V0cyByb3dIZWlnaHQgYW5kIG9mZnNldFxuICAgIC8vIHdpdGhvdXQgc3F1YXJlIGJyYWNrZXRzIGluIHRoZSB0ZW1wbGF0ZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZGVwcmVjYXRlZFxuICAgIHB1YmxpYyBzY3JvbGxTdHJhdGVneSA9IG5ldyBUYWJsZVZpcnR1YWxTY3JvbGxTdHJhdGVneShcbiAgICAgICAgK3RoaXMucm93SGVpZ2h0LFxuICAgICAgICArdGhpcy5vZmZzZXRcbiAgICApO1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LnNldFNjcm9sbEhlaWdodCgrdGhpcy5yb3dIZWlnaHQsICt0aGlzLm9mZnNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgc2l6ZSBvZiB0aGUgaXRlbXMgaW4gdGhlIHZpcnR1YWxseSBzY3JvbGxpbmcgbGlzdC5cbiAgICAgKiBAcGFyYW0gbGVuZ3RoXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZURhdGFMZW5ndGgobGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneS5zZXREYXRhTGVuZ3RoKGxlbmd0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1heEl0ZW1zKG1heEl0ZW1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneS5tYXhJdGVtcyA9IG1heEl0ZW1zO1xuICAgIH1cbn1cbiJdfQ==