@skyux/grids 13.11.5 → 13.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/skyux-grids.mjs.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skyux-grids.mjs","sources":["../tmp-esm2022/lib/modules/grid/grid-column.model.js","../tmp-esm2022/lib/modules/shared/sky-grids-resources.module.js","../tmp-esm2022/lib/modules/grid/grid-cell.component.js","../tmp-esm2022/lib/modules/grid/grid-column.component.js","../tmp-esm2022/lib/modules/grid/grid-adapter.service.js","../tmp-esm2022/lib/modules/grid/types/grid-message-type.js","../tmp-esm2022/lib/modules/grid/types/grid-selected-rows-source.js","../tmp-esm2022/lib/modules/grid/grid.component.js","../tmp-esm2022/lib/modules/grid/grid.module.js","../tmp-esm2022/skyux-grids.js"],"sourcesContent":["/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnModel {\n constructor(template, data) {\n this.isSortable = true;\n this.template = template;\n if (data) {\n this.id = data.id || data.field;\n this.type = data.type;\n this.field = data.field;\n this.heading = data.heading;\n this.inlineHelpPopover = data.inlineHelpPopover;\n this.width = data.width ? Number(data.width) : undefined;\n this.hidden = data.hidden;\n this.locked = data.locked;\n this.description = data.description;\n this.searchFunction = data.searchFunction;\n this.isSortable = data.isSortable;\n this.excludeFromHighlighting = data.excludeFromHighlighting;\n this.alignment = data.alignment;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2x1bW4ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC1jb2x1bW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBcUI3QixZQUFZLFFBQThCLEVBQUUsSUFBVTtRQVYvQyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBV3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztZQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUdyaWRDb2x1bW5BbGlnbm1lbnQgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWFsaWdubWVudCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgYFNreUdyaWRDb21wb25lbnRgIGFuZCBpdHMgZmVhdHVyZXMgYXJlIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgZGF0YSBncmlkIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZFxuICovXG5leHBvcnQgY2xhc3MgU2t5R3JpZENvbHVtbk1vZGVsIHtcbiAgcHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWVsZDogc3RyaW5nO1xuICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuICBwdWJsaWMgaW5saW5lSGVscFBvcG92ZXI6IGFueTtcbiAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgcHVibGljIHdpZHRoOiBudW1iZXI7XG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NrZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgaXNTb3J0YWJsZSA9IHRydWU7XG4gIHB1YmxpYyBleGNsdWRlRnJvbUhpZ2hsaWdodGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBjb2x1bW4ncyBkYXRhIGFuZCBoZWFkZXIuXG4gICAqL1xuICBwdWJsaWMgYWxpZ25tZW50OiBTa3lHcmlkQ29sdW1uQWxpZ25tZW50O1xuXG4gIHB1YmxpYyBzZWFyY2hGdW5jdGlvbjogKGRhdGE6IGFueSwgc2VhcmNoVGV4dDogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiwgZGF0YT86IGFueSkge1xuICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLmlkID0gZGF0YS5pZCB8fCBkYXRhLmZpZWxkO1xuICAgICAgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgICAgdGhpcy5maWVsZCA9IGRhdGEuZmllbGQ7XG4gICAgICB0aGlzLmhlYWRpbmcgPSBkYXRhLmhlYWRpbmc7XG4gICAgICB0aGlzLmlubGluZUhlbHBQb3BvdmVyID0gZGF0YS5pbmxpbmVIZWxwUG9wb3ZlcjtcbiAgICAgIHRoaXMud2lkdGggPSBkYXRhLndpZHRoID8gTnVtYmVyKGRhdGEud2lkdGgpIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5oaWRkZW4gPSBkYXRhLmhpZGRlbjtcbiAgICAgIHRoaXMubG9ja2VkID0gZGF0YS5sb2NrZWQ7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgIHRoaXMuc2VhcmNoRnVuY3Rpb24gPSBkYXRhLnNlYXJjaEZ1bmN0aW9uO1xuICAgICAgdGhpcy5pc1NvcnRhYmxlID0gZGF0YS5pc1NvcnRhYmxlO1xuICAgICAgdGhpcy5leGNsdWRlRnJvbUhpZ2hsaWdodGluZyA9IGRhdGEuZXhjbHVkZUZyb21IaWdobGlnaHRpbmc7XG4gICAgICB0aGlzLmFsaWdubWVudCA9IGRhdGEuYWxpZ25tZW50O1xuICAgIH1cbiAgfVxufVxuIl19","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-grids' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport { SkyI18nModule, SkyLibResourcesService, } from '@skyux/i18n';\nimport * as i0 from \"@angular/core\";\nconst RESOURCES = {\n 'EN-US': { skyux_grid_multiselect_select_row: { message: 'Select row' } },\n 'FR-CA': {\n skyux_grid_multiselect_select_row: { message: 'Sélectionner une ligne' },\n },\n};\nSkyLibResourcesService.addResources(RESOURCES);\n/**\n * Import into any component library module that needs to use resource strings.\n */\nexport class SkyGridsResourcesModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridsResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridsResourcesModule, exports: [SkyI18nModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridsResourcesModule, imports: [SkyI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridsResourcesModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyI18nModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LWdyaWRzLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktZ3JpZHMtcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBb0M7SUFDakQsT0FBTyxFQUFFLEVBQUUsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUU7SUFDekUsT0FBTyxFQUFFO1FBQ1AsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUU7S0FDekU7Q0FDRixDQUFDO0FBRUYsc0JBQXNCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRS9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLHVCQUF1QjsrR0FBdkIsdUJBQXVCO2dIQUF2Qix1QkFBdUIsWUFGeEIsYUFBYTtnSEFFWix1QkFBdUIsWUFGeEIsYUFBYTs7NEZBRVosdUJBQXVCO2tCQUhuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBOT1RJQ0U6IERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFIVxuICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5XG4gKiB0aGUgJ25nIGdlbmVyYXRlIEBza3l1eC9pMThuOmxpYi1yZXNvdXJjZXMtbW9kdWxlIGxpYi9tb2R1bGVzL3NoYXJlZC9za3ktZ3JpZHMnIHNjaGVtYXRpYy5cbiAqIFRvIHVwZGF0ZSB0aGlzIGZpbGUsIHNpbXBseSByZXJ1biB0aGUgY29tbWFuZC5cbiAqL1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNreUkxOG5Nb2R1bGUsXG4gIFNreUxpYlJlc291cmNlcyxcbiAgU2t5TGliUmVzb3VyY2VzU2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5jb25zdCBSRVNPVVJDRVM6IFJlY29yZDxzdHJpbmcsIFNreUxpYlJlc291cmNlcz4gPSB7XG4gICdFTi1VUyc6IHsgc2t5dXhfZ3JpZF9tdWx0aXNlbGVjdF9zZWxlY3Rfcm93OiB7IG1lc3NhZ2U6ICdTZWxlY3Qgcm93JyB9IH0sXG4gICdGUi1DQSc6IHtcbiAgICBza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3c6IHsgbWVzc2FnZTogJ1PDqWxlY3Rpb25uZXIgdW5lIGxpZ25lJyB9LFxuICB9LFxufTtcblxuU2t5TGliUmVzb3VyY2VzU2VydmljZS5hZGRSZXNvdXJjZXMoUkVTT1VSQ0VTKTtcblxuLyoqXG4gKiBJbXBvcnQgaW50byBhbnkgY29tcG9uZW50IGxpYnJhcnkgbW9kdWxlIHRoYXQgbmVlZHMgdG8gdXNlIHJlc291cmNlIHN0cmluZ3MuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtTa3lJMThuTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5R3JpZHNSZXNvdXJjZXNNb2R1bGUge31cbiJdfQ==","import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewContainerRef, } from '@angular/core';\nimport { getData } from '@skyux/list-builder-common';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridCellComponent {\n ngOnInit() {\n this.container.createEmbeddedView(this.template, this);\n }\n get row() {\n return this.item.data;\n }\n get value() {\n if (this.item.data && (this.fieldSelector || this.columnId)) {\n return getData(this.item.data, this.fieldSelector || this.columnId);\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.15\", type: SkyGridCellComponent, isStandalone: false, selector: \"sky-grid-cell\", inputs: { item: \"item\", columnId: \"columnId\", template: \"template\", fieldSelector: \"fieldSelector\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"cell\"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<ng-template #cell />', isInline: true, styles: [\":host{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:8px;min-height:35px}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridCellComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-grid-cell', template: '<ng-template #cell />', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [\":host{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:8px;min-height:35px}\\n\"] }]\n }], propDecorators: { item: [{\n type: Input\n }], columnId: [{\n type: Input\n }], template: [{\n type: Input\n }], fieldSelector: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: ['cell', {\n read: ViewContainerRef,\n static: true,\n }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9ncmlkcy9zcmMvbGliL21vZHVsZXMvZ3JpZC9ncmlkLWNlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFHTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRXBFOzs7R0FHRztBQVFILE1BQU0sT0FBTyxvQkFBb0I7SUFtQnhCLFFBQVE7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOytHQWpDVSxvQkFBb0I7bUdBQXBCLG9CQUFvQiw4UEFjdkIsZ0JBQWdCLDJDQW5CZCx1QkFBdUI7OzRGQUt0QixvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0UsZUFBZSxZQUNmLHVCQUF1QixtQkFFaEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxLQUFLOztzQkFHaEIsS0FBSzs7c0JBR0wsS0FBSzs7c0JBR0wsS0FBSzs7c0JBR0wsS0FBSzs7c0JBR0wsU0FBUzt1QkFBQyxNQUFNLEVBQUU7d0JBQ2pCLElBQUksRUFBRSxnQkFBZ0I7d0JBQ3RCLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaXN0SXRlbU1vZGVsLCBnZXREYXRhIH0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlcHJlY2F0ZWQgYFNreUdyaWRDb21wb25lbnRgIGFuZCBpdHMgZmVhdHVyZXMgYXJlIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgZGF0YSBncmlkIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZ3JpZC1jZWxsJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI2NlbGwgLz4nLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLWNlbGwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lHcmlkQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpdGVtOiBMaXN0SXRlbU1vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2x1bW5JZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpZWxkU2VsZWN0b3I6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdjZWxsJywge1xuICAgIHJlYWQ6IFZpZXdDb250YWluZXJSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUsIHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldCByb3coKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXRlbS5kYXRhICYmICh0aGlzLmZpZWxkU2VsZWN0b3IgfHwgdGhpcy5jb2x1bW5JZCkpIHtcbiAgICAgIHJldHVybiBnZXREYXRhKHRoaXMuaXRlbS5kYXRhLCB0aGlzLmZpZWxkU2VsZWN0b3IgfHwgdGhpcy5jb2x1bW5JZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19","import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, TemplateRef, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Specifies the column information.\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnComponent {\n constructor() {\n /**\n * The horizontal alignment of the column's data and header.\n * Options include: `\"left\"`, `\"center\"`, and `\"right\"`.\n * @default \"left\"\n */\n this.alignment = 'left';\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n this.isSortable = true;\n /**\n * The search function to apply for the specific column. By default,\n * the column executes a string compare on the column data.\n * @default (value, searchText) => value.toString().toLowerCase().indexOf(searchText) !== -1\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n this.searchFunction = this.search;\n this.descriptionChanges = new EventEmitter();\n this.descriptionModelChanges = new EventEmitter();\n this.headingChanges = new EventEmitter();\n this.headingModelChanges = new EventEmitter();\n this.inlineHelpPopoverModelChanges = new EventEmitter();\n }\n ngOnChanges(changes) {\n if (changes['heading'] && changes['heading'].firstChange === false) {\n this.headingChanges.emit(this.heading);\n this.headingModelChanges.emit({\n value: this.heading,\n id: this.id,\n field: this.field,\n });\n }\n if (changes['description'] &&\n changes['description'].firstChange === false) {\n this.descriptionChanges.emit(this.description);\n this.descriptionModelChanges.emit({\n value: this.description,\n id: this.id,\n field: this.field,\n });\n }\n if (changes['inlineHelpPopover'] &&\n changes['inlineHelpPopover'].firstChange === false) {\n this.inlineHelpPopoverModelChanges.emit({\n value: this.inlineHelpPopover,\n id: this.id,\n field: this.field,\n });\n }\n }\n get template() {\n if (this.templates.length > 0) {\n return this.templates.first;\n }\n return this.templateInput;\n }\n search(value, searchText) {\n if (value !== undefined && value !== null) {\n return value.toString().toLowerCase().indexOf(searchText) !== -1;\n }\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.15\", type: SkyGridColumnComponent, isStandalone: false, selector: \"sky-grid-column\", inputs: { alignment: \"alignment\", description: \"description\", excludeFromHighlighting: \"excludeFromHighlighting\", field: \"field\", heading: \"heading\", hidden: \"hidden\", id: \"id\", inlineHelpPopover: \"inlineHelpPopover\", isSortable: \"isSortable\", locked: \"locked\", searchFunction: [\"search\", \"searchFunction\"], type: \"type\", templateInput: [\"template\", \"templateInput\"], width: \"width\" }, queries: [{ propertyName: \"templates\", predicate: TemplateRef }], usesOnChanges: true, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridColumnComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'sky-grid-column',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n }]\n }], propDecorators: { alignment: [{\n type: Input\n }], description: [{\n type: Input\n }], excludeFromHighlighting: [{\n type: Input\n }], field: [{\n type: Input\n }], heading: [{\n type: Input\n }], hidden: [{\n type: Input\n }], id: [{\n type: Input\n }], inlineHelpPopover: [{\n type: Input\n }], isSortable: [{\n type: Input\n }], locked: [{\n type: Input\n }], searchFunction: [{\n type: Input,\n args: ['search']\n }], type: [{\n type: Input\n }], templateInput: [{\n type: Input,\n args: ['template']\n }], width: [{\n type: Input\n }], templates: [{\n type: ContentChildren,\n args: [TemplateRef]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2dyaWRzL3NyYy9saWIvbW9kdWxlcy9ncmlkL2dyaWQtY29sdW1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFJTCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7O0FBT3ZCOzs7R0FHRztBQU9ILE1BQU0sT0FBTyxzQkFBc0I7SUFObkM7UUFPRTs7OztXQUlHO1FBRUksY0FBUyxHQUEyQixNQUFNLENBQUM7UUFtRGxEOzs7V0FHRztRQUVJLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFXekI7Ozs7V0FJRztRQUNILDJEQUEyRDtRQUVwRCxtQkFBYyxHQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDO1FBMEJQLHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXRFLDRCQUF1QixHQUM1QixJQUFJLFlBQVksRUFBdUMsQ0FBQztRQUVuRCxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWxFLHdCQUFtQixHQUN4QixJQUFJLFlBQVksRUFBbUMsQ0FBQztRQUUvQyxrQ0FBNkIsR0FDbEMsSUFBSSxZQUFZLEVBQTZDLENBQUM7S0FvRGpFO0lBL0NRLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ25CLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQ0UsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN0QixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFDNUMsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFDRSxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFDbEQsQ0FBQztZQUNELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUM3QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBVSxFQUFFLFVBQWtCO1FBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7K0dBMUtVLHNCQUFzQjttR0FBdEIsc0JBQXNCLHdlQXlIaEIsV0FBVyxrREE3SGxCLGdCQUFnQjs7NEZBSWYsc0JBQXNCO2tCQU5sQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsS0FBSztpQkFDbEI7O3NCQU9FLEtBQUs7O3NCQU1MLEtBQUs7O3NCQU9MLEtBQUs7O3NCQVNMLEtBQUs7O3NCQU1MLEtBQUs7O3NCQU9MLEtBQUs7O3NCQVFMLEtBQUs7O3NCQU1MLEtBQUs7O3NCQU9MLEtBQUs7O3NCQVNMLEtBQUs7O3NCQVNMLEtBQUs7dUJBQUMsUUFBUTs7c0JBT2QsS0FBSzs7c0JBV0wsS0FBSzt1QkFBQyxVQUFVOztzQkFPaEIsS0FBSzs7c0JBZ0JMLGVBQWU7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkFsaWdubWVudCB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4tYWxpZ25tZW50JztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1kZXNjcmlwdGlvbi1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4taGVhZGluZy1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbklubGluZUhlbHBQb3BvdmVyTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWlubGluZS1oZWxwLXBvcG92ZXItbW9kZWwtY2hhbmdlJztcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbi5cbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWdyaWQtY29sdW1uJyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudCAvPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5R3JpZENvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbHVtbidzIGRhdGEgYW5kIGhlYWRlci5cbiAgICogT3B0aW9ucyBpbmNsdWRlOiBgXCJsZWZ0XCJgLCBgXCJjZW50ZXJcImAsIGFuZCBgXCJyaWdodFwiYC5cbiAgICogQGRlZmF1bHQgXCJsZWZ0XCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGlnbm1lbnQ6IFNreUdyaWRDb2x1bW5BbGlnbm1lbnQgPSAnbGVmdCc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIGhpZ2hsaWdodGluZyBvZiBzZWFyY2ggdGV4dCBpbiB0aGUgY29sdW1uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGV4Y2x1ZGVGcm9tSGlnaGxpZ2h0aW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgdG8gcmV0cmlldmUgY2VsbCBpbmZvcm1hdGlvbiBmcm9tIGFuIGVudHJ5IG9uIHRoZSBncmlkIGBkYXRhYCBhcnJheS5cbiAgICogWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgdGhlIGBpZGAgb3IgYGZpZWxkYCBwcm9wZXJ0eSBmb3IgZXZlcnkgY29sdW1uLFxuICAgKiBidXQgZG8gbm90IHByb3ZpZGUgYm90aC4gSWYgYGlkYCBkb2VzIG5vdCBleGlzdCBvbiBhIGNvbHVtbiwgdGhlbiBgZmllbGRgIGlzIHRoZSBlbnRyeVxuICAgKiBmb3IgdGhlIGdyaWQgYHNlbGVjdGVkQ29sdW1uSWRzYCBhcnJheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWVsZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGNvbHVtbiBoZWFkZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgaW5pdGlhbGx5IGhpZGRlbiB3aGVuIGdyaWQgYHNlbGVjdGVkQ29sdW1uSWRzYCBhcmUgbm90IHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBmb3IgdGhlIGNvbHVtbi4gWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgdGhlIGBpZGAgb3IgYGZpZWxkYCBwcm9wZXJ0eVxuICAgKiBmb3IgZXZlcnkgY29sdW1uLCBidXQgZG8gbm90IHByb3ZpZGUgYm90aC4gSWYgYGZpZWxkYCBkb2VzIG5vdCBleGlzdCBvbiBhIGNvbHVtbixcbiAgICogdGhlbiB0aGUgYGlkYCBwcm9wZXJ0eSByZXRyaWV2ZXMgY2VsbCBpbmZvcm1hdGlvbiBmcm9tIGFuIGVudHJ5IG9uIHRoZSBncmlkIGBkYXRhYCBhcnJheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gZGlzcGxheSBpbnNpZGUgYW4gaW5saW5lIGhlbHAgcG9wdXAgZm9yIHRoaXMgY29sdW1uLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZUhlbHBQb3BvdmVyOiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbHVtbiBzb3J0cyB0aGUgZ3JpZCB3aGVuIHVzZXJzIGNsaWNrIHRoZSBjb2x1bW4gaGVhZGVyLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXNTb3J0YWJsZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBsb2NrZWQuIFRoZSBpbnRlbnQgaXMgdG8gZGlzcGxheSBsb2NrZWQgY29sdW1ucyBmaXJzdFxuICAgKiBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBncmlkLiBJZiBzZXQgdG8gYHRydWVgLCB0aGVuIHVzZXJzIGNhbm5vdCBkcmFnIHRoZSBjb2x1bW5cbiAgICogdG8gYW5vdGhlciBwb3NpdGlvbiBhbmQgb3IgZHJhZyBvdGhlciBjb2x1bW5zIGJlZm9yZSB0aGUgbG9ja2VkIGNvbHVtbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2NrZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzZWFyY2ggZnVuY3Rpb24gdG8gYXBwbHkgZm9yIHRoZSBzcGVjaWZpYyBjb2x1bW4uIEJ5IGRlZmF1bHQsXG4gICAqIHRoZSBjb2x1bW4gZXhlY3V0ZXMgYSBzdHJpbmcgY29tcGFyZSBvbiB0aGUgY29sdW1uIGRhdGEuXG4gICAqIEBkZWZhdWx0ICh2YWx1ZSwgc2VhcmNoVGV4dCkgPT4gdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGV4dCkgIT09IC0xXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3NlYXJjaCcpXG4gIHB1YmxpYyBzZWFyY2hGdW5jdGlvbjogKHZhbHVlOiBhbnksIHNlYXJjaFRleHQ6IHN0cmluZykgPT4gYm9vbGVhbiA9XG4gICAgdGhpcy5zZWFyY2g7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZvciBhIGNvbHVtbi4gVGhpcyBjYW4gYmUgYXNzaWduZWQgYXMgYSByZWZlcmVuY2VcbiAgICogdG8gdGhlIGB0ZW1wbGF0ZWAgYXR0cmlidXRlLCBvciBpdCBjYW4gYmUgYXNzaWduZWQgYXMgYSBjaGlsZCBvZiB0aGUgYHRlbXBsYXRlYCBlbGVtZW50XG4gICAqIGluc2lkZSB0aGUgYHNreS1ncmlkLWNvbHVtbmAgY29tcG9uZW50LiBUaGUgdGVtcGxhdGUgaGFzIGFjY2VzcyB0byB0aGUgYHZhbHVlYCB2YXJpYWJsZSxcbiAgICogd2hpY2ggY29udGFpbnMgdGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgY29sdW1uLCBhbmQgdGhlIGByb3dgIHZhcmlhYmxlLCB3aGljaCBjb250YWluc1xuICAgKiB0aGUgZW50aXJlIHJvdyBkYXRhLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCd0ZW1wbGF0ZScpXG4gIHB1YmxpYyB0ZW1wbGF0ZUlucHV0OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gaW4gcGl4ZWxzLlxuICAgKiBJZiB1bmRlZmluZWQsIHRoZSBjb2x1bW4gd2lkdGggaXMgZXZlbmx5IGRpc3RyaWJ1dGVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHdpZHRoOiBudW1iZXI7XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uQ2hhbmdlczogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwdWJsaWMgZGVzY3JpcHRpb25Nb2RlbENoYW5nZXMgPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2U+KCk7XG5cbiAgcHVibGljIGhlYWRpbmdDaGFuZ2VzOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBoZWFkaW5nTW9kZWxDaGFuZ2VzID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2U+KCk7XG5cbiAgcHVibGljIGlubGluZUhlbHBQb3BvdmVyTW9kZWxDaGFuZ2VzID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVSZWYpXG4gIHByaXZhdGUgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8dW5rbm93bj4+O1xuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2hlYWRpbmcnXSAmJiBjaGFuZ2VzWydoZWFkaW5nJ10uZmlyc3RDaGFuZ2UgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmhlYWRpbmdDaGFuZ2VzLmVtaXQodGhpcy5oZWFkaW5nKTtcbiAgICAgIHRoaXMuaGVhZGluZ01vZGVsQ2hhbmdlcy5lbWl0KHtcbiAgICAgICAgdmFsdWU6IHRoaXMuaGVhZGluZyxcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbJ2Rlc2NyaXB0aW9uJ10gJiZcbiAgICAgIGNoYW5nZXNbJ2Rlc2NyaXB0aW9uJ10uZmlyc3RDaGFuZ2UgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uQ2hhbmdlcy5lbWl0KHRoaXMuZGVzY3JpcHRpb24pO1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbk1vZGVsQ2hhbmdlcy5lbWl0KHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWydpbmxpbmVIZWxwUG9wb3ZlciddICYmXG4gICAgICBjaGFuZ2VzWydpbmxpbmVIZWxwUG9wb3ZlciddLmZpcnN0Q2hhbmdlID09PSBmYWxzZVxuICAgICkge1xuICAgICAgdGhpcy5pbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlcy5lbWl0KHtcbiAgICAgICAgdmFsdWU6IHRoaXMuaW5saW5lSGVscFBvcG92ZXIsXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8dW5rbm93bj4ge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuZmlyc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVJbnB1dDtcbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoKHZhbHVlOiBhbnksIHNlYXJjaFRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGV4dCkgIT09IC0xO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19","import { Injectable, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nconst GRID_HEADER_DRAGGING_CLASS = 'sky-grid-header-dragging';\nconst GRID_HEADER_LOCKED_SELECTOR = '.sky-grid-header-locked';\nconst GRID_HEADER_RESIZE_HANDLE = '.sky-grid-resize-handle';\nconst GRID_ROW_DELETE_SELECTOR = '.sky-grid-row-delete-heading';\nconst GRID_MULTISELECT_SELECTOR = '.sky-grid-multiselect-cell';\n/**\n * @internal\n */\nexport class SkyGridAdapterService {\n constructor(rendererFactory) {\n this.rendererFactory = rendererFactory;\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n initializeDragAndDrop(dragulaGroupName, dragulaService, dropCallback) {\n dragulaService\n .drag(dragulaGroupName)\n .subscribe((args) => args.el.classList.add(GRID_HEADER_DRAGGING_CLASS));\n dragulaService\n .dragend(dragulaGroupName)\n .subscribe((args) => args.el.classList.remove(GRID_HEADER_DRAGGING_CLASS));\n dragulaService.drop(dragulaGroupName).subscribe((args) => {\n const columnIds = [];\n const nodes = Array.from(args.target.querySelectorAll(`th:not(${GRID_MULTISELECT_SELECTOR}):not(${GRID_ROW_DELETE_SELECTOR})`));\n for (const el of nodes) {\n const id = el.getAttribute('sky-cmp-id');\n columnIds.push(id);\n }\n dropCallback(columnIds);\n });\n dragulaService.createGroup(dragulaGroupName, {\n moves: (el, container, handle) => {\n const columns = container.querySelectorAll('th div');\n const isLeftOfLocked = this.isLeftOfLocked(handle, columns);\n return (!el.querySelector(GRID_HEADER_LOCKED_SELECTOR) &&\n handle !== undefined &&\n !handle.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !handle.matches(GRID_MULTISELECT_SELECTOR) &&\n !handle.matches(GRID_ROW_DELETE_SELECTOR) &&\n !isLeftOfLocked);\n },\n accepts: (el, target, source, sibling) => {\n if (sibling === undefined || !sibling) {\n return true;\n }\n const columns = source.querySelectorAll('th div');\n const siblingDiv = sibling.querySelector('div');\n const isLeftOfLocked = this.isLeftOfLocked(siblingDiv, columns);\n return (!sibling.matches(GRID_HEADER_LOCKED_SELECTOR) &&\n !sibling.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !isLeftOfLocked);\n },\n });\n }\n getRowHeight(el, index) {\n return (el.nativeElement.querySelectorAll('tbody tr')[index].scrollHeight + 'px');\n }\n setStyle(el, style, value) {\n if (el) {\n this.renderer.setStyle(el.nativeElement, style, value);\n }\n }\n isLeftOfLocked(handle, columns) {\n let sourceColumn = handle;\n for (const column of Array.from(columns)) {\n if (column.contains(handle)) {\n sourceColumn = column;\n }\n }\n for (let i = columns.length - 1; i >= 0; i--) {\n if (columns[i].classList.contains('sky-grid-header-locked')) {\n return true;\n }\n if (columns[i] === sourceColumn) {\n break;\n }\n }\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridAdapterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridAdapterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i0.RendererFactory2 }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLGVBQWUsQ0FBQzs7QUFJdkIsTUFBTSwwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztBQUM5RCxNQUFNLDJCQUEyQixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0seUJBQXlCLEdBQUcseUJBQXlCLENBQUM7QUFDNUQsTUFBTSx3QkFBd0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRSxNQUFNLHlCQUF5QixHQUFHLDRCQUE0QixDQUFDO0FBRS9EOztHQUVHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUdoQyxZQUFvQixlQUFpQztRQUFqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixnQkFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBOEM7UUFFOUMsY0FBYzthQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUN0QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7UUFFMUUsY0FBYzthQUNYLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMs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SSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztnQkFDNUQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsrR0E3R1UscUJBQXFCO21IQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbGVtZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEcmFndWxhU2VydmljZSB9IGZyb20gJ25nMi1kcmFndWxhJztcblxuY29uc3QgR1JJRF9IRUFERVJfRFJBR0dJTkdfQ0xBU1MgPSAnc2t5LWdyaWQtaGVhZGVyLWRyYWdnaW5nJztcbmNvbnN0IEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUiA9ICcuc2t5LWdyaWQtaGVhZGVyLWxvY2tlZCc7XG5jb25zdCBHUklEX0hFQURFUl9SRVNJWkVfSEFORExFID0gJy5za3ktZ3JpZC1yZXNpemUtaGFuZGxlJztcbmNvbnN0IEdSSURfUk9XX0RFTEVURV9TRUxFQ1RPUiA9ICcuc2t5LWdyaWQtcm93LWRlbGV0ZS1oZWFkaW5nJztcbmNvbnN0IEdSSURfTVVMVElTRUxFQ1RfU0VMRUNUT1IgPSAnLnNreS1ncmlkLW11bHRpc2VsZWN0LWNlbGwnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplRHJhZ0FuZERyb3AoXG4gICAgZHJhZ3VsYUdyb3VwTmFtZTogc3RyaW5nLFxuICAgIGRyYWd1bGFTZXJ2aWNlOiBEcmFndWxhU2VydmljZSxcbiAgICBkcm9wQ2FsbGJhY2s6IChuZXdDb2x1bW5JZHM6IHN0cmluZ1tdKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBkcmFndWxhU2VydmljZVxuICAgICAgLmRyYWcoZHJhZ3VsYUdyb3VwTmFtZSlcbiAgICAgIC5zdWJzY3JpYmUoKGFyZ3MpID0+IGFyZ3MuZWwuY2xhc3NMaXN0LmFkZChHUklEX0hFQURFUl9EUkFHR0lOR19DTEFTUykpO1xuXG4gICAgZHJhZ3VsYVNlcnZpY2VcbiAgICAgIC5kcmFnZW5kKGRyYWd1bGFHcm91cE5hbWUpXG4gICAgICAuc3Vic2NyaWJlKChhcmdzKSA9PlxuICAgICAgICBhcmdzLmVsLmNsYXNzTGlzdC5yZW1vdmUoR1JJRF9IRUFERVJfRFJBR0dJTkdfQ0xBU1MpLFxuICAgICAgKTtcblxuICAgIGRyYWd1bGFTZXJ2aWNlLmRyb3AoZHJhZ3VsYUdyb3VwTmFtZSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KFxuICAgICAgICBhcmdzLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgIGB0aDpub3QoJHtHUklEX01VTFRJU0VMRUNUX1NFTEVDVE9SfSk6bm90KCR7R1JJRF9ST1dfREVMRVRFX1NFTEVDVE9SfSlgLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZWwgb2Ygbm9kZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ3NreS1jbXAtaWQnKTtcbiAgICAgICAgY29sdW1uSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgICAgZHJvcENhbGxiYWNrKGNvbHVtbklkcyk7XG4gICAgfSk7XG5cbiAgICBkcmFndWxhU2VydmljZS5jcmVhdGVHcm91cChkcmFndWxhR3JvdXBOYW1lLCB7XG4gICAgICBtb3ZlczogKGVsOiBIVE1MRWxlbWVudCwgY29udGFpbmVyOiBIVE1MRWxlbWVudCwgaGFuZGxlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5zOiBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PiA9XG4gICAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoIGRpdicpO1xuICAgICAgICBjb25zdCBpc0xlZnRPZkxvY2tlZCA9IHRoaXMuaXNMZWZ0T2ZMb2NrZWQoaGFuZGxlLCBjb2x1bW5zKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFlbC5xdWVyeVNlbGVjdG9yKEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUikgJiZcbiAgICAgICAgICBoYW5kbGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX0hFQURFUl9SRVNJWkVfSEFORExFKSAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX01VTFRJU0VMRUNUX1NFTEVDVE9SKSAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX1JPV19ERUxFVEVfU0VMRUNUT1IpICYmXG4gICAgICAgICAgIWlzTGVmdE9mTG9ja2VkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYWNjZXB0czogKFxuICAgICAgICBlbDogSFRNTEVsZW1lbnQsXG4gICAgICAgIHRhcmdldDogSFRNTEVsZW1lbnQsXG4gICAgICAgIHNvdXJjZTogSFRNTEVsZW1lbnQsXG4gICAgICAgIHNpYmxpbmc6IEhUTUxFbGVtZW50LFxuICAgICAgKSA9PiB7XG4gICAgICAgIGlmIChzaWJsaW5nID09PSB1bmRlZmluZWQgfHwgIXNpYmxpbmcpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+ID1cbiAgICAgICAgICBzb3VyY2UucXVlcnlTZWxlY3RvckFsbCgndGggZGl2Jyk7XG4gICAgICAgIGNvbnN0IHNpYmxpbmdEaXYgPSBzaWJsaW5nLnF1ZXJ5U2VsZWN0b3IoJ2RpdicpO1xuICAgICAgICBjb25zdCBpc0xlZnRPZkxvY2tlZCA9IHRoaXMuaXNMZWZ0T2ZMb2NrZWQoc2libGluZ0RpdiwgY29sdW1ucyk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhc2libGluZy5tYXRjaGVzKEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUikgJiZcbiAgICAgICAgICAhc2libGluZy5tYXRjaGVzKEdSSURfSEVBREVSX1JFU0laRV9IQU5ETEUpICYmXG4gICAgICAgICAgIWlzTGVmdE9mTG9ja2VkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJvd0hlaWdodChlbDogRWxlbWVudFJlZiwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGJvZHkgdHInKVtpbmRleF0uc2Nyb2xsSGVpZ2h0ICsgJ3B4J1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGUoZWw6IEVsZW1lbnRSZWYsIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwubmF0aXZlRWxlbWVudCwgc3R5bGUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTGVmdE9mTG9ja2VkKFxuICAgIGhhbmRsZTogSFRNTEVsZW1lbnQsXG4gICAgY29sdW1uczogTm9kZUxpc3RPZjxIVE1MRWxlbWVudD4sXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBzb3VyY2VDb2x1bW4gPSBoYW5kbGU7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgQXJyYXkuZnJvbShjb2x1bW5zKSkge1xuICAgICAgaWYgKGNvbHVtbi5jb250YWlucyhoYW5kbGUpKSB7XG4gICAgICAgIHNvdXJjZUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gY29sdW1ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGNvbHVtbnNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdza3ktZ3JpZC1oZWFkZXItbG9ja2VkJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW5zW2ldID09PSBzb3VyY2VDb2x1bW4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=","/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport var SkyGridMessageType;\n(function (SkyGridMessageType) {\n /**\n * Selects the multiselect checkboxes for all rows in the grid.\n */\n SkyGridMessageType[SkyGridMessageType[\"SelectAll\"] = 0] = \"SelectAll\";\n /**\n * Clears the multiselect checkboxes for all rows in the grid.\n */\n SkyGridMessageType[SkyGridMessageType[\"ClearAll\"] = 1] = \"ClearAll\";\n /**\n * @internal\n */\n SkyGridMessageType[SkyGridMessageType[\"PromptDeleteRow\"] = 2] = \"PromptDeleteRow\";\n /**\n * @internal\n */\n SkyGridMessageType[SkyGridMessageType[\"AbortDeleteRow\"] = 3] = \"AbortDeleteRow\";\n})(SkyGridMessageType || (SkyGridMessageType = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tZXNzYWdlLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvdHlwZXMvZ3JpZC1tZXNzYWdlLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxrQkFvQlg7QUFwQkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCxxRUFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxtRUFBWSxDQUFBO0lBRVo7O09BRUc7SUFDSCxpRkFBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILCtFQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFwQlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQW9CN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuZXhwb3J0IGVudW0gU2t5R3JpZE1lc3NhZ2VUeXBlIHtcbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIG11bHRpc2VsZWN0IGNoZWNrYm94ZXMgZm9yIGFsbCByb3dzIGluIHRoZSBncmlkLlxuICAgKi9cbiAgU2VsZWN0QWxsID0gMCxcblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBtdWx0aXNlbGVjdCBjaGVja2JveGVzIGZvciBhbGwgcm93cyBpbiB0aGUgZ3JpZC5cbiAgICovXG4gIENsZWFyQWxsID0gMSxcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBQcm9tcHREZWxldGVSb3cgPSAyLFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEFib3J0RGVsZXRlUm93ID0gMyxcbn1cbiJdfQ==","/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport var SkyGridSelectedRowsSource;\n(function (SkyGridSelectedRowsSource) {\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"CheckboxChange\"] = 0] = \"CheckboxChange\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"ClearAll\"] = 1] = \"ClearAll\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"RowClick\"] = 2] = \"RowClick\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"SelectAll\"] = 3] = \"SelectAll\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"SelectedRowIdsChange\"] = 4] = \"SelectedRowIdsChange\";\n})(SkyGridSelectedRowsSource || (SkyGridSelectedRowsSource = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zZWxlY3RlZC1yb3dzLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9ncmlkcy9zcmMvbGliL21vZHVsZXMvZ3JpZC90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3Mtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sQ0FBTixJQUFZLHlCQU1YO0FBTkQsV0FBWSx5QkFBeUI7SUFDbkMsNkZBQWMsQ0FBQTtJQUNkLGlGQUFRLENBQUE7SUFDUixpRkFBUSxDQUFBO0lBQ1IsbUZBQVMsQ0FBQTtJQUNULHlHQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFOVyx5QkFBeUIsS0FBekIseUJBQXlCLFFBTXBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuZXhwb3J0IGVudW0gU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZSB7XG4gIENoZWNrYm94Q2hhbmdlLFxuICBDbGVhckFsbCxcbiAgUm93Q2xpY2ssXG4gIFNlbGVjdEFsbCxcbiAgU2VsZWN0ZWRSb3dJZHNDaGFuZ2UsXG59XG4iXX0=","import { ChangeDetectionStrategy, Component, ContentChildren, EnvironmentInjector, EventEmitter, HostListener, Input, Output, TemplateRef, ViewChild, ViewChildren, inject, } from '@angular/core';\nimport { SkyAffixAutoFitContext, } from '@skyux/core';\nimport { ListItemModel, } from '@skyux/list-builder-common';\nimport { DragulaService } from 'ng2-dragula';\nimport { BehaviorSubject, Subject, fromEvent, merge, } from 'rxjs';\nimport { distinctUntilChanged, map, take, takeUntil, takeWhile, } from 'rxjs/operators';\nimport { SkyGridAdapterService } from './grid-adapter.service';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridColumnModel } from './grid-column.model';\nimport { SkyGridMessageType } from './types/grid-message-type';\nimport { SkyGridSelectedRowsSource } from './types/grid-selected-rows-source';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/core\";\nimport * as i2 from \"ng2-dragula\";\nimport * as i3 from \"./grid-adapter.service\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@angular/forms\";\nimport * as i6 from \"@skyux/forms\";\nimport * as i7 from \"@skyux/help-inline\";\nimport * as i8 from \"@skyux/icon\";\nimport * as i9 from \"@skyux/layout\";\nimport * as i10 from \"@skyux/popovers\";\nimport * as i11 from \"@skyux/indicators\";\nimport * as i12 from \"./grid-cell.component\";\nimport * as i13 from \"@skyux/i18n\";\nlet nextId = 0;\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridComponent {\n /**\n * Columns and column properties for the grid.\n */\n set columns(newColumns) {\n const oldColumns = this.columns;\n this._columns = newColumns;\n if (oldColumns) {\n this.transferColumnWidths(oldColumns, this.columns);\n this.isResized = false;\n this.setDisplayedColumns(true);\n }\n this.changeDetector.markForCheck();\n }\n get columns() {\n return this._columns;\n }\n /**\n * The columns to display in the grid based on the `id` or `field` properties\n * of the columns. If no columns are specified, then the grid displays all columns.\n */\n set selectedColumnIds(value) {\n const currentIds = this._selectedColumnIds;\n this._selectedColumnIds = value;\n if (this.columns) {\n this.setDisplayedColumns();\n }\n // Ensure that the ids have changed.\n if (!currentIds || !value || !this.arraysEqual(value, currentIds)) {\n // This variable ensures that we do not set user config options or fire the change event\n // on the first time that the columns are set up\n if (this.selectedColumnIdsSet) {\n this.setUserConfig({\n selectedColumnIds: value,\n });\n this.selectedColumnIdsChange.emit(this._selectedColumnIds);\n if (this.isResized) {\n this.resetTableWidth();\n }\n }\n }\n this.selectedColumnIdsSet = true;\n }\n get selectedColumnIds() {\n return this._selectedColumnIds;\n }\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * The IDs match the `id` properties of the `data` objects.\n * Rows with IDs that are not included are de-selected in the grid.\n */\n set selectedRowIds(value) {\n if (value) {\n this._selectedRowIds = value;\n this.applySelectedRows();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectedRowIdsChange);\n }\n }\n get selectedRowIds() {\n return this._selectedRowIds;\n }\n get tableWidth() {\n return this.tableElementRef.nativeElement.offsetWidth;\n }\n #environmentInjector;\n constructor(affixService, changeDetector, dragulaService, gridAdapter, overlayService, skyWindow, uiConfigService, logger) {\n this.affixService = affixService;\n this.changeDetector = changeDetector;\n this.dragulaService = dragulaService;\n this.gridAdapter = gridAdapter;\n this.overlayService = overlayService;\n this.skyWindow = skyWindow;\n this.uiConfigService = uiConfigService;\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid. You can specify a unique ID with\n * the `multiselectRowId` property, but multiselect defaults to the `id` property on\n * the `data` object.\n * @default false\n */\n this.enableMultiselect = false;\n /**\n * How the grid fits to its parent. The valid options are `width`,\n * which fits the grid to the parent's full width, and `scroll`, which allows the grid\n * to exceed the parent's width. If the grid does not have enough columns to fill\n * the parent's width, it always stretches to the parent's full width.\n * @default \"width\"\n */\n this.fit = 'width';\n /**\n * Whether to display a toolbar with the grid.\n */\n this.hasToolbar = false;\n /**\n * The observable to send commands to the grid.\n */\n this.messageStream = new Subject();\n /**\n * Fires when the width of a column changes.\n */\n this.columnWidthChange = new EventEmitter();\n /**\n * Fires when the selection of multiselect checkboxes changes.\n * Emits an array of IDs for the selected rows based on the `multiselectRowId` property\n * that the consumer provides.\n */\n this.multiselectSelectionChange = new EventEmitter();\n /**\n * @internal\n */\n this.rowDeleteCancel = new EventEmitter();\n /**\n * @internal\n */\n this.rowDeleteConfirm = new EventEmitter();\n /**\n * Fires when the columns to display in the grid change or when the order of the columns changes.\n * The event emits an array of IDs for the displayed columns that reflects the column order.\n */\n this.selectedColumnIdsChange = new EventEmitter();\n /**\n * Fires when the active sort field changes.\n */\n this.sortFieldChange = new EventEmitter();\n this.columnResizeStep = 10;\n this.gridId = ++nextId;\n this.rowDeleteConfigs = [];\n this.maxColWidth = 9999; // This is an arbitrary number, as the input range picker won't work without a value.\n this.minColWidth = 50;\n this.showResizeBar = false;\n this.showTopScroll = false;\n this.isDraggingResizeHandle = false;\n this.isResized = false;\n this.ngUnsubscribe = new Subject();\n this.rowDeleteContents = {};\n this.subscriptions = [];\n this.scrollTriggered = false;\n this.selectedColumnIdsSet = false;\n this.#environmentInjector = inject(EnvironmentInjector);\n logger.deprecated('SkyGridComponent', {\n deprecationMajorVersion: 6,\n moreInfoUrl: 'https://developer.blackbaud.com/skyux/components/data-grid',\n replacementRecommendation: 'Use data grid instead.',\n });\n this.displayedColumns = new Array();\n this.items = new Array();\n this.currentSortField = new BehaviorSubject({\n fieldSelector: '',\n descending: false,\n });\n this.dragulaGroupName = `sky-grids-group-${this.gridId}`;\n }\n ngOnInit() {\n this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message) => {\n this.handleIncomingMessages(message);\n });\n }\n ngAfterContentInit() {\n if (this.settingsKey) {\n this.applyUserConfig().then(() => {\n this.initColumns();\n });\n }\n else {\n this.initColumns();\n }\n // Setup column drag-and-drop.\n this.gridAdapter.initializeDragAndDrop(this.dragulaGroupName, this.dragulaService, (selectedColumnIds) => {\n this.onHeaderDrop(selectedColumnIds);\n });\n this.applySelectedRows();\n }\n ngAfterViewInit() {\n this.checkUserColumnWidthsForScroll();\n }\n ngOnChanges(changes) {\n if (changes['columns'] && this.columns) {\n if (this.selectedColumnIds) {\n this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n });\n }\n this.setDisplayedColumns(true);\n }\n if (changes['data'] && this.data) {\n this.transformData();\n // This set timeout is necessary to ensure the data has rendered in the grid\n setTimeout(() => {\n // This cleans up any lingering row deletes for items that have been removed.\n Object.keys(this.rowDeleteContents).forEach((id) => {\n if (!this.data.find((item) => item.id === id)) {\n this.destroyRowDelete(id);\n }\n else {\n // The rows re-render thus messing up the affixers. We must reaffix them so that things\n // continue to render correctly.\n const rowElement = this.tableElementRef.nativeElement.querySelector('[sky-cmp-id=\"' + id + '\"]');\n this.rowDeleteContents[id].affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n }\n });\n this.checkUserColumnWidthsForScroll();\n });\n }\n if (changes['sortField']) {\n this.setSortHeaders();\n }\n }\n ngOnDestroy() {\n this.subscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n this.multiselectSelectionChange.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n Object.keys(this.rowDeleteContents).forEach((id) => {\n this.destroyRowDelete(id);\n });\n this.dragulaService.destroy(this.dragulaGroupName);\n }\n onWindowResize() {\n this.checkUserColumnWidthsForScroll();\n }\n getTopScrollWidth() {\n return this.tableElementRef.nativeElement.scrollWidth;\n }\n getTableClassNames() {\n const classNames = [];\n if (this.fit !== 'scroll') {\n classNames.push('sky-grid-fit');\n }\n if (this.hasToolbar) {\n classNames.push('sky-grid-has-toolbar');\n }\n return this.addDelimiter(classNames, ' ');\n }\n getTableHeaderClassNames(column) {\n const classNames = [];\n if (column && column.locked) {\n classNames.push('sky-grid-header-locked');\n }\n return this.addDelimiter(classNames, ' ');\n }\n getCaretIconNames(column) {\n const iconNames = [];\n this.getSortDirection(column.field).subscribe((sortDir) => {\n if (sortDir === 'asc') {\n iconNames.push('chevron-up');\n }\n if (sortDir === 'desc') {\n iconNames.push('chevron-down');\n }\n });\n return this.addDelimiter(iconNames, ' ');\n }\n onKeydown(event, column) {\n const key = event.key.toLowerCase();\n if (key === 'enter' || key === ' ') {\n this.sortByColumn(column);\n }\n }\n sortByColumn(column) {\n if (!this.isDraggingResizeHandle && column.isSortable) {\n this.currentSortField\n .pipe(take(1), map((field) => {\n let selector = {\n fieldSelector: column.field,\n descending: true,\n };\n if (field &&\n field.fieldSelector === column.field &&\n field.descending) {\n selector = {\n fieldSelector: column.field,\n descending: false,\n };\n }\n this.sortFieldChange.emit(selector);\n this.currentSortField.next(selector);\n }))\n .subscribe();\n }\n }\n getSortDirection(columnField) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === columnField\n ? field.descending\n ? 'desc'\n : 'asc'\n : undefined;\n }));\n }\n getAriaSortDirection(column) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === column.field\n ? field.descending\n ? 'descending'\n : 'ascending'\n : column.isSortable\n ? 'none'\n : undefined;\n }));\n }\n getCaretVisibility(columnField) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === columnField ? 'visible' : 'hidden';\n }));\n }\n getHelpInlineClass(columnField) {\n return this.getCaretVisibility(columnField).pipe(map((visibility) => {\n return visibility === 'hidden';\n }));\n }\n onMultiselectCheckboxChange() {\n this.emitSelectedRows(SkyGridSelectedRowsSource.CheckboxChange);\n }\n updateColumnHeading(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.heading = change.value;\n this.changeDetector.markForCheck();\n }\n }\n updateInlineHelpPopover(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.inlineHelpPopover = change.value;\n this.changeDetector.markForCheck();\n }\n }\n updateColumnDescription(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.description = change.value;\n this.changeDetector.markForCheck();\n }\n }\n onResizeColumnStart(event) {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n this.initializeResizeColumn(event);\n this.isDraggingResizeHandle = true;\n this.xPosStart = event.pageX;\n this.showResizeBar = true;\n // Show visual indicator of where mouse is dragging (resizeBar).\n this.changeDetector.detectChanges();\n this.setResizeBarPosition(event.pageX);\n event.preventDefault();\n event.stopPropagation();\n const mouseMoveEvent = fromEvent(document, 'mousemove');\n const touchMoveEvent = fromEvent(document, 'touchmove');\n merge(mouseMoveEvent, touchMoveEvent)\n .pipe(takeWhile(() => {\n return this.isDraggingResizeHandle;\n }))\n .subscribe((moveEvent) => {\n this.onResizeHandleMove(moveEvent);\n });\n const mouseUpEvent = fromEvent(document, 'mouseup');\n const touchEndEvent = fromEvent(document, 'touchend');\n merge(mouseUpEvent, touchEndEvent)\n .pipe(takeWhile(() => {\n return this.isDraggingResizeHandle;\n }))\n .subscribe((endEvent) => {\n this.onResizeHandleRelease(endEvent);\n });\n }\n onKeydownResizeCol(event) {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n this.initializeResizeColumn(event);\n }\n onInputChangeResizeCol(event) {\n const input = event.target;\n const newValue = Number(input.value);\n const deltaX = newValue - this.startColumnWidth;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newValue, deltaX);\n const left = input.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n onResizeHandleMove(event) {\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n if (newColWidth <= this.minColWidth) {\n event.stopPropagation();\n return;\n }\n const max = this.getMaxRangeByIndex(this.activeResizeColumnIndex);\n if (this.fit === 'width' && newColWidth > max) {\n event.stopPropagation();\n return;\n }\n this.setResizeBarPosition(event.pageX);\n }\n onResizeHandleBlur() {\n this.showResizeBar = false;\n }\n onResizeHandleFocus(event) {\n this.showResizeBar = true;\n this.changeDetector.detectChanges();\n const target = event.target;\n const left = target.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n onResizeHandleRelease(event) {\n this.showResizeBar = false;\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newColWidth, deltaX);\n this.isDraggingResizeHandle = false;\n this.activeResizeColumnIndex = undefined;\n event.stopPropagation();\n this.changeDetector.markForCheck();\n }\n onRowClick(event, selectedItem) {\n /* istanbul ignore else */\n if (this.enableMultiselect) {\n if (event.target === event.currentTarget ||\n !this.isInteractiveElement(event)) {\n selectedItem.isSelected = !selectedItem.isSelected;\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.RowClick);\n }\n }\n }\n isRowHighlighted(id) {\n if (this.rowHighlightedId) {\n return id === this.rowHighlightedId;\n }\n return false;\n }\n getRowHeight(index) {\n return this.gridAdapter.getRowHeight(this.tableElementRef, index);\n }\n cancelRowDelete(id) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter((config) => config.id !== id);\n this.rowDeleteCancel.emit({ id: id });\n this.destroyRowDelete(id);\n }\n confirmRowDelete(id) {\n this.rowDeleteConfigs.find((config) => config.id === id).pending = true;\n this.rowDeleteConfirm.emit({ id: id });\n }\n getRowDeleteItem(id) {\n return this.rowDeleteConfigs.find((rowDelete) => rowDelete.id === id);\n }\n // Prevent touch devices from inadvertently scrolling grid while dragging columns.\n onTouchMove(event) {\n event.preventDefault();\n }\n onTopScroll(event) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.tableContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.tableContainerElementRef.nativeElement.scrollLeft =\n this.topScrollContainerElementRef.nativeElement.scrollLeft;\n }\n else {\n this.scrollTriggered = true;\n }\n }\n }\n onGridScroll(event) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.topScrollContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.topScrollContainerElementRef.nativeElement.scrollLeft =\n this.tableContainerElementRef.nativeElement.scrollLeft;\n }\n else {\n this.scrollTriggered = true;\n }\n }\n }\n checkUserColumnWidthsForScroll() {\n if (!this.showTopScroll &&\n this.columnElementRefs &&\n this.columnElementRefs.length > 0) {\n let columnsWidthTotal = 0;\n const windowSize = this.skyWindow.nativeWindow.innerWidth;\n this.columnElementRefs.forEach((col) => {\n if (!this.showTopScroll) {\n const computedWidth = parseFloat(window.getComputedStyle(col.nativeElement).width);\n const offsetWidth = col.nativeElement.offsetWidth;\n const width = Math.max(computedWidth || offsetWidth, this.minColWidth);\n columnsWidthTotal = columnsWidthTotal + width;\n if (columnsWidthTotal > windowSize) {\n this.showTopScroll = true;\n setTimeout(() => {\n this.changeDetector.markForCheck();\n });\n }\n }\n });\n }\n }\n multiselectSelectAll() {\n for (const item of this.items) {\n item.isSelected = true;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectAll);\n }\n multiselectClearAll() {\n for (const item of this.items) {\n item.isSelected = false;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.ClearAll);\n }\n handleIncomingMessages(message) {\n switch (message.type) {\n case SkyGridMessageType.SelectAll:\n this.multiselectSelectAll();\n break;\n case SkyGridMessageType.ClearAll:\n this.multiselectClearAll();\n break;\n case SkyGridMessageType.PromptDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.promptDeleteRow) {\n const existingConfig = this.rowDeleteConfigs.find((config) => config.id === message.data.promptDeleteRow.id);\n if (existingConfig) {\n existingConfig.pending = false;\n }\n else {\n this.rowDeleteConfigs.push({\n id: message.data.promptDeleteRow.id,\n pending: false,\n });\n const overlay = this.overlayService.create({\n enableScroll: true,\n showBackdrop: false,\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n });\n overlay.attachTemplate(this.inlineDeleteTemplateRef, {\n $implicit: this.data.find((item) => item.id === message.data.promptDeleteRow.id),\n });\n /**\n * We are manually setting the z-index here because overlays will always be on top of\n * the omnibar. This manual setting is 1 less than the omnibar's z-index of 1000. We\n * discussed changing the overlay service to allow for this but decided against that\n * change at this time due to its niche nature.\n */\n overlay.componentRef.instance.zIndex = '999';\n setTimeout(() => {\n const inlineDeleteRef = this.inlineDeleteRefs\n .toArray()\n .find((elRef) => {\n return (elRef.nativeElement.id ===\n 'row-delete-ref-' + message.data.promptDeleteRow.id);\n });\n const affixer = this.affixService.createAffixer(inlineDeleteRef);\n const rowElement = this.tableElementRef.nativeElement.querySelector('[sky-cmp-id=\"' + message.data.promptDeleteRow.id + '\"]');\n affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n this.rowDeleteContents[message.data.promptDeleteRow.id] = {\n affixer: affixer,\n overlay: overlay,\n };\n });\n }\n }\n break;\n case SkyGridMessageType.AbortDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.abortDeleteRow) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter((config) => config.id !== message.data.abortDeleteRow.id);\n this.destroyRowDelete(message.data.abortDeleteRow.id);\n }\n break;\n }\n this.changeDetector.markForCheck();\n }\n onHeaderDrop(newColumnIds) {\n // update selected columnIds\n this.selectedColumnIdsSet = true;\n this.selectedColumnIds = newColumnIds;\n // mark for check because we are using ChangeDetectionStrategy.onPush\n this.changeDetector.markForCheck();\n }\n setDisplayedColumns(respectHidden = false) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.columns) {\n if (this.selectedColumnIds !== undefined) {\n // setup displayed columns\n this.displayedColumns = this.selectedColumnIds\n .filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n })\n .map((columnId) => {\n return this.columns.filter((column) => column.id === columnId)[0];\n });\n }\n else if (respectHidden) {\n this.displayedColumns = this.columns.filter((column) => {\n return !column.hidden;\n });\n }\n else {\n this.displayedColumns = this.columns;\n }\n }\n }\n transformData() {\n // Transform data into object with id and data properties\n if (this.data &&\n this.data.length > 0 &&\n this.data[0].id &&\n !this.data[0].data) {\n if (this.multiselectRowId) {\n this.items = this.getGridDataWithSelectedRows();\n }\n else {\n this.items = this.data.map((item) => new ListItemModel(item.id, item));\n }\n }\n else {\n this.items = this.data;\n }\n }\n getGridDataWithSelectedRows() {\n const selectedRows = this.getSelectedRows();\n return this.data.map((item) => {\n let checked;\n if (Object.prototype.hasOwnProperty.call(item, this.multiselectRowId)) {\n checked = selectedRows.indexOf(item[this.multiselectRowId]) > -1;\n }\n else {\n checked = selectedRows.indexOf(item.id) > -1;\n }\n return new ListItemModel(item.id, item, checked);\n });\n }\n applySelectedRows() {\n if (this.items && this.items.length > 0 && this.selectedRowIds) {\n for (const item of this.items) {\n item.isSelected = this.selectedRowIds.indexOf(item.id) > -1;\n }\n this.changeDetector.markForCheck();\n }\n }\n setSortHeaders() {\n this.currentSortField.next(this.sortField || { fieldSelector: '', descending: false });\n }\n getColumnsFromComponent() {\n this.columns = this.columnComponents.map((columnComponent) => {\n return new SkyGridColumnModel(columnComponent.template, columnComponent);\n });\n }\n updateColumns() {\n this.getColumnsFromComponent();\n // This set timeout is necessary to ensure the columns have rendered in the grid\n setTimeout(() => {\n this.checkUserColumnWidthsForScroll();\n });\n }\n resizeColumnByIndex(columnIndex, newColWidth, deltaX) {\n const column = this.getColumnModelByIndex(columnIndex);\n // Prevent accidental shrinkage below minimum width.\n if (newColWidth <= this.minColWidth) {\n deltaX = deltaX + this.minColWidth - newColWidth;\n newColWidth = this.minColWidth;\n }\n // fit=width adds/removes width from the last column\n // fit=scroll adds/removes width from the table\n if (this.fit === 'width') {\n const lastColumn = this.getLastDisplayedColumn();\n // Prevent accidental growth that would bump last column off screen.\n const max = this.getMaxRangeByIndex(columnIndex);\n if (newColWidth > max) {\n newColWidth = max;\n deltaX = max - this.startColumnWidth;\n }\n column.width = newColWidth;\n lastColumn.width = lastColumn.width - deltaX;\n this.updateMaxRange();\n }\n else {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `${this.tableWidth + deltaX}px`);\n column.width = newColWidth;\n }\n this.changeDetector.detectChanges();\n this.columnWidthChange.emit(this.getColumnWidthModelChange());\n }\n initColumnWidths() {\n // Establish table width.\n this.showTopScroll = true;\n // Set column widths based on the width initially given by the browser.\n // computedWidth prevents accidental overflow for browsers with sub-pixel widths.\n this.columnElementRefs.forEach((col, index) => {\n const computedWidth = parseFloat(window.getComputedStyle(col.nativeElement).width);\n const offsetWidth = col.nativeElement.offsetWidth;\n /* istanbul ignore next */\n this.getColumnModelByIndex(index).width = Math.max(computedWidth || offsetWidth, this.minColWidth);\n });\n // 'scroll' tables should be allowed to expand outside of their constraints.\n if (this.fit === 'scroll') {\n this.gridAdapter.setStyle(this.tableElementRef, 'min-width', 'auto');\n }\n // Update max limits for input ranges.\n if (this.fit === 'width') {\n this.updateMaxRange();\n }\n this.changeDetector.detectChanges();\n }\n transferColumnWidths(oldColumns, newColumns) {\n /* sanity check */\n /* istanbul ignore else */\n if (oldColumns && newColumns) {\n for (const oldColumn of oldColumns) {\n if (oldColumn.width) {\n const matchingColumn = newColumns.find((newColumn) => oldColumn.id === newColumn.id);\n if (matchingColumn && !matchingColumn.width) {\n matchingColumn.width = oldColumn.width;\n }\n }\n }\n }\n this.changeDetector.markForCheck();\n }\n getColumnWidthModelChange() {\n const columnWidthModelChange = new Array();\n this.columns.forEach((column) => {\n columnWidthModelChange.push({\n id: column.id,\n field: column.field,\n width: column.width,\n });\n });\n return columnWidthModelChange;\n }\n updateMaxRange() {\n const leftoverWidth = this.getLastDisplayedColumn().width - this.minColWidth;\n this.displayedColumns.forEach((column, index) => {\n const newMaxRange = column.width + leftoverWidth;\n const rangeInput = this.getRangeInputByIndex(index);\n rangeInput.nativeElement.max = newMaxRange;\n rangeInput.nativeElement.setAttribute('aria-valuemax', newMaxRange);\n });\n }\n initializeResizeColumn(event) {\n const clickTarget = event.target;\n this.activeResizeColumnIndex = clickTarget.getAttribute('sky-cmp-index');\n const column = this.getColumnModelByIndex(this.activeResizeColumnIndex);\n this.startColumnWidth = column.width;\n }\n resetTableWidth() {\n this.skyWindow.nativeWindow.setTimeout(() => {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `auto`);\n this.changeDetector.detectChanges();\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `${this.tableWidth}px`);\n this.changeDetector.detectChanges();\n });\n }\n getRangeInputByIndex(index) {\n return this.columnRangeInputElementRefs.find((input) => input.nativeElement.getAttribute('sky-cmp-index') === index.toString());\n }\n getColumnModelByIndex(index) {\n return this.displayedColumns[Number(index)];\n }\n getMaxRangeByIndex(index) {\n const columnElementRef = this.columnElementRefs.find((th) => th.nativeElement.getAttribute('sky-cmp-index') === index);\n const rangeInput = columnElementRef.nativeElement.querySelector('.sky-grid-column-input-aria-only');\n return Number(rangeInput.max);\n }\n getLastDisplayedColumn() {\n return this.getColumnModelByIndex(this.displayedColumns.length - 1);\n }\n addDelimiter(text, delimiter) {\n return text.filter((val) => val).join(delimiter);\n }\n destroyRowDelete(id) {\n const rowDeleteContents = this.rowDeleteContents[id];\n /* istanbul ignore else */\n if (rowDeleteContents) {\n rowDeleteContents.affixer.destroy();\n this.overlayService.close(rowDeleteContents.overlay);\n delete this.rowDeleteContents[id];\n }\n }\n emitSelectedRows(source) {\n const selectedRows = {\n selectedRowIds: this.getSelectedRows(),\n source: source,\n };\n this.multiselectSelectionChange.emit(selectedRows);\n }\n getSelectedRows() {\n return this.items\n .filter((item) => {\n return item.isSelected;\n })\n .map((item) => {\n if (Object.prototype.hasOwnProperty.call(item.data, this.multiselectRowId)) {\n return item.data[this.multiselectRowId];\n }\n return item.id;\n });\n }\n isInteractiveElement(event) {\n const interactiveElSelectors = `\n a,\n button,\n input,\n label,\n option,\n select,\n textarea,\n details,\n dialog,\n menu,\n menuitem,\n summary`;\n return event.target.closest(interactiveElSelectors);\n }\n setResizeBarPosition(xPosition) {\n const parentScroll = this.tableContainerElementRef.nativeElement.scrollLeft;\n const resizeBarX = xPosition -\n this.tableElementRef.nativeElement.getBoundingClientRect().left -\n parentScroll;\n this.gridAdapter.setStyle(this.resizeBar, 'left', resizeBarX + 'px');\n }\n applyUserConfig() {\n return new Promise((resolve) => {\n this.uiConfigService\n .getConfig(this.settingsKey)\n .pipe(take(1))\n .subscribe((config) => {\n /* istanbul ignore else */\n if (config && config.selectedColumnIds) {\n // Remove any columnIds that don't exist in the current data set.\n this.selectedColumnIds = config.selectedColumnIds.filter((id) => this.columns.find((column) => column.id === id));\n this.changeDetector.markForCheck();\n }\n resolve();\n }, () => {\n resolve();\n });\n });\n }\n setUserConfig(config) {\n if (!this.settingsKey) {\n return;\n }\n this.uiConfigService\n .setConfig(this.settingsKey, config)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => { }, (err) => {\n console.warn('Could not save grid settings.');\n console.warn(err);\n });\n }\n initColumns() {\n /* istanbul ignore else */\n if (this.columnComponents.length !== 0 || this.columns !== undefined) {\n /* istanbul ignore else */\n /* sanity check */\n if (this.columnComponents.length > 0) {\n this.getColumnsFromComponent();\n }\n this.transformData();\n this.setDisplayedColumns(true);\n this.changeDetector.markForCheck();\n }\n // Watch for added/removed columns:\n this.subscriptions.push(this.columnComponents.changes.subscribe(() => this.updateColumns()));\n // Watch for column heading changes:\n this.columnComponents.forEach((comp) => {\n this.subscriptions.push(comp.headingModelChanges.subscribe((change) => {\n this.updateColumnHeading(change);\n }));\n this.subscriptions.push(comp.descriptionModelChanges.subscribe((change) => {\n this.updateColumnDescription(change);\n }));\n this.subscriptions.push(comp.inlineHelpPopoverModelChanges.subscribe((change) => {\n this.updateInlineHelpPopover(change);\n }));\n });\n }\n arraysEqual(arrayA, arrayB) {\n return (arrayA.length === arrayB.length &&\n arrayA.every((value, index) => value === arrayB[index]));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i2.DragulaService }, { token: i3.SkyGridAdapterService }, { token: i1.SkyOverlayService }, { token: i1.SkyAppWindowRef }, { token: i1.SkyUIConfigService }, { token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", type: SkyGridComponent, isStandalone: false, selector: \"sky-grid\", inputs: { columns: \"columns\", data: \"data\", enableMultiselect: \"enableMultiselect\", fit: \"fit\", hasToolbar: \"hasToolbar\", height: \"height\", highlightText: \"highlightText\", messageStream: \"messageStream\", multiselectRowId: \"multiselectRowId\", rowHighlightedId: \"rowHighlightedId\", selectedColumnIds: \"selectedColumnIds\", selectedRowIds: \"selectedRowIds\", settingsKey: \"settingsKey\", sortField: \"sortField\", width: \"width\" }, outputs: { columnWidthChange: \"columnWidthChange\", multiselectSelectionChange: \"multiselectSelectionChange\", rowDeleteCancel: \"rowDeleteCancel\", rowDeleteConfirm: \"rowDeleteConfirm\", selectedColumnIdsChange: \"selectedColumnIdsChange\", sortFieldChange: \"sortFieldChange\" }, host: { listeners: { \"window:resize\": \"onWindowResize()\" } }, providers: [SkyGridAdapterService], queries: [{ propertyName: \"columnComponents\", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: \"inlineDeleteTemplateRef\", first: true, predicate: [\"inlineDeleteTemplateRef\"], descendants: true, read: TemplateRef }, { propertyName: \"tableContainerElementRef\", first: true, predicate: [\"gridContainer\"], descendants: true }, { propertyName: \"tableElementRef\", first: true, predicate: [\"gridTable\"], descendants: true }, { propertyName: \"topScrollContainerElementRef\", first: true, predicate: [\"topScrollContainer\"], descendants: true }, { propertyName: \"resizeBar\", first: true, predicate: [\"resizeBar\"], descendants: true }, { propertyName: \"columnElementRefs\", predicate: [\"gridCol\"], descendants: true }, { propertyName: \"columnRangeInputElementRefs\", predicate: [\"colSizeRange\"], descendants: true }, { propertyName: \"inlineDeleteRefs\", predicate: [\"inlineDeleteRef\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<div class=\\\"sky-grid\\\">\\n @if (showTopScroll) {\\n <div\\n #topScrollContainer\\n class=\\\"sky-grid-top-scroll-container\\\"\\n (scroll)=\\\"onTopScroll($event)\\\"\\n >\\n <div\\n class=\\\"sky-grid-top-scroll\\\"\\n [style.width.px]=\\\"getTopScrollWidth()\\\"\\n ></div>\\n </div>\\n }\\n <div\\n #gridContainer\\n class=\\\"sky-grid-table-container\\\"\\n [style.height.px]=\\\"height\\\"\\n [style.width.px]=\\\"width\\\"\\n (scroll)=\\\"onGridScroll($event)\\\"\\n >\\n <table #gridTable class=\\\"sky-grid-table\\\" [ngClass]=\\\"getTableClassNames()\\\">\\n <thead>\\n <tr [dragula]=\\\"dragulaGroupName\\\">\\n @if (enableMultiselect) {\\n <th\\n class=\\\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\\\"\\n scope=\\\"col\\\"\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <span class=\\\"screen-reader-only\\\">\\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\\n </span>\\n </th>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <th\\n #gridCol\\n class=\\\"sky-grid-heading sky-field-label\\\"\\n scope=\\\"col\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n [attr.aria-sort]=\\\"getAriaSortDirection(column) | async\\\"\\n [id]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n [tabIndex]=\\\"column.isSortable ? 0 : -1\\\"\\n (mouseup)=\\\"sortByColumn(column)\\\"\\n (keydown)=\\\"onKeydown($event, column)\\\"\\n (touchmove)=\\\"onTouchMove($event)\\\"\\n >\\n <div\\n class=\\\"overflow\\\"\\n [ngClass]=\\\"getTableHeaderClassNames(column)\\\"\\n [style.max-width.px]=\\\"column.width - 1\\\"\\n [style.width.px]=\\\"column.width - 1\\\"\\n >\\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\\n <span class=\\\"sky-grid-header-caret-hidden-spacing\\\"></span>\\n }\\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\\n <span class=\\\"sky-grid-header-text\\\">{{\\n column.heading?.trim()\\n }}</span>\\n <sky-icon\\n class=\\\"sky-grid-heading-sort\\\"\\n variant=\\\"solid\\\"\\n [ngClass]=\\\"\\n 'sky-grid-heading-sort-' +\\n (getCaretVisibility(column.field) | async)\\n \\\"\\n [iconName]=\\\"getCaretIconNames(column)\\\"\\n />\\n @if (column.inlineHelpPopover) {\\n <sky-help-inline\\n [ngClass]=\\\"{\\n 'sky-grid-help-inline-sort-hidden':\\n getHelpInlineClass(column.field) | async\\n }\\\"\\n [skyPopover]=\\\"column.inlineHelpPopover\\\"\\n (keydown.enter)=\\\"$event.stopPropagation()\\\"\\n (keydown.space)=\\\"$event.stopPropagation()\\\"\\n (mousedown)=\\\"$event.stopPropagation()\\\"\\n (mouseup)=\\\"$event.stopPropagation()\\\"\\n />\\n }\\n </div>\\n @if ((fit === 'width' && !last) || fit === 'scroll') {\\n <span\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-handle\\\"\\n tabindex=\\\"-1\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n (mousedown)=\\\"onResizeColumnStart($event)\\\"\\n (touchstart)=\\\"onResizeColumnStart($event)\\\"\\n >\\n </span>\\n }\\n <input\\n #colSizeRange\\n aria-label=\\\"Width of column\\\"\\n class=\\\"sky-grid-column-input-aria-only\\\"\\n role=\\\"slider\\\"\\n type=\\\"range\\\"\\n [attr.aria-controls]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [attr.aria-valuemin]=\\\"minColWidth\\\"\\n [attr.aria-valuemax]=\\\"maxColWidth\\\"\\n [attr.aria-valuenow]=\\\"column.width\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [min]=\\\"minColWidth\\\"\\n [max]=\\\"maxColWidth\\\"\\n [step]=\\\"columnResizeStep\\\"\\n [(ngModel)]=\\\"column.width\\\"\\n (blur)=\\\"onResizeHandleBlur()\\\"\\n (focus)=\\\"onResizeHandleFocus($event)\\\"\\n (keydown)=\\\"onKeydownResizeCol($event)\\\"\\n (change)=\\\"onInputChangeResizeCol($event)\\\"\\n />\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"sky-grid-tbody\\\">\\n @for (item of items; track item; let i = $index) {\\n <tr\\n class=\\\"sky-grid-row\\\"\\n [attr.aria-current]=\\\"isRowHighlighted(item.id) ? true : null\\\"\\n [attr.sky-cmp-id]=\\\"item.id\\\"\\n [ngClass]=\\\"{\\n 'sky-grid-multiselect-selected-row': item.isSelected,\\n 'sky-grid-multiselect-row': enableMultiselect,\\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\\n }\\\"\\n (click)=\\\"onRowClick($event, item)\\\"\\n >\\n @if (enableMultiselect) {\\n <td class=\\\"sky-grid-multiselect-cell sky-grid-header-locked\\\">\\n <div\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <sky-checkbox\\n [label]=\\\"\\n 'skyux_grid_multiselect_select_row' | skyLibResources\\n \\\"\\n [(ngModel)]=\\\"item.isSelected\\\"\\n (change)=\\\"onMultiselectCheckboxChange()\\\"\\n />\\n </div>\\n </td>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <td\\n class=\\\"sky-grid-cell\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n >\\n <sky-grid-cell\\n [skyHighlight]=\\\"\\n !column.excludeFromHighlighting ? highlightText : undefined\\n \\\"\\n [template]=\\\"column.template || defaultCellTemplate\\\"\\n [fieldSelector]=\\\"column.field\\\"\\n [item]=\\\"item\\\"\\n [columnId]=\\\"column.id\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n />\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n @if (showResizeBar) {\\n <div\\n #resizeBar\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-bar\\\"\\n tabindex=\\\"-1\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\\n<ng-template #defaultCellTemplate let-row=\\\"row\\\" let-value=\\\"value\\\">{{\\n value\\n}}</ng-template>\\n\\n<ng-template #inlineDeleteTemplateRef let-item>\\n <div\\n #inlineDeleteRef\\n [id]=\\\"'row-delete-ref-' + item.id\\\"\\n [ngStyle]=\\\"{\\n height: getRowHeight(0),\\n position: 'fixed',\\n width: tableWidth + 'px'\\n }\\\"\\n >\\n <sky-inline-delete\\n [pending]=\\\"getRowDeleteItem(item.id).pending\\\"\\n (cancelTriggered)=\\\"cancelRowDelete(item.id)\\\"\\n (deleteTriggered)=\\\"confirmRowDelete(item.id)\\\"\\n />\\n </div>\\n</ng-template>\\n\", styles: [\".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\\\"\\\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\\n\"], dependencies: [{ kind: \"directive\", type: i4.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i4.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: i2.DragulaDirective, selector: \"[dragula]\", inputs: [\"dragula\", \"dragulaModel\"], outputs: [\"dragulaModelChange\"] }, { kind: \"directive\", type: i5.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: i5.RangeValueAccessor, selector: \"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]\" }, { kind: \"directive\", type: i5.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i5.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i6.λ3, selector: \"sky-checkbox\", inputs: [\"label\", \"labelledBy\", \"id\", \"disabled\", \"tabindex\", \"name\", \"helpPopoverContent\", \"helpPopoverTitle\", \"iconName\", \"checkboxType\", \"checked\", \"indeterminate\", \"required\", \"labelText\", \"labelHidden\", \"hintText\", \"stacked\", \"helpKey\"], outputs: [\"change\", \"checkedChange\", \"disabledChange\", \"indeterminateChange\"] }, { kind: \"component\", type: i7.λ1, selector: \"sky-help-inline\", inputs: [\"ariaControls\", \"ariaExpanded\", \"ariaLabel\", \"helpKey\", \"labelledBy\", \"labelText\", \"popoverContent\", \"popoverTitle\"], outputs: [\"actionClick\"] }, { kind: \"component\", type: i8.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"component\", type: i9.λ8, selector: \"sky-inline-delete\", inputs: [\"pending\"], outputs: [\"cancelTriggered\", \"deleteTriggered\"] }, { kind: \"directive\", type: i10.λ7, selector: \"[skyPopover]\", inputs: [\"skyPopover\", \"skyPopoverAlignment\", \"skyPopoverMessageStream\", \"skyPopoverPlacement\", \"skyPopoverTrigger\"] }, { kind: \"directive\", type: i11.SkyTextHighlightDirective, selector: \"[skyHighlight]\", inputs: [\"skyHighlight\"] }, { kind: \"component\", type: i12.SkyGridCellComponent, selector: \"sky-grid-cell\", inputs: [\"item\", \"columnId\", \"template\", \"fieldSelector\"] }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i13.SkyLibResourcesPipe, name: \"skyLibResources\" }], viewProviders: [DragulaService], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-grid', viewProviders: [DragulaService], providers: [SkyGridAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: \"<div class=\\\"sky-grid\\\">\\n @if (showTopScroll) {\\n <div\\n #topScrollContainer\\n class=\\\"sky-grid-top-scroll-container\\\"\\n (scroll)=\\\"onTopScroll($event)\\\"\\n >\\n <div\\n class=\\\"sky-grid-top-scroll\\\"\\n [style.width.px]=\\\"getTopScrollWidth()\\\"\\n ></div>\\n </div>\\n }\\n <div\\n #gridContainer\\n class=\\\"sky-grid-table-container\\\"\\n [style.height.px]=\\\"height\\\"\\n [style.width.px]=\\\"width\\\"\\n (scroll)=\\\"onGridScroll($event)\\\"\\n >\\n <table #gridTable class=\\\"sky-grid-table\\\" [ngClass]=\\\"getTableClassNames()\\\">\\n <thead>\\n <tr [dragula]=\\\"dragulaGroupName\\\">\\n @if (enableMultiselect) {\\n <th\\n class=\\\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\\\"\\n scope=\\\"col\\\"\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <span class=\\\"screen-reader-only\\\">\\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\\n </span>\\n </th>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <th\\n #gridCol\\n class=\\\"sky-grid-heading sky-field-label\\\"\\n scope=\\\"col\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n [attr.aria-sort]=\\\"getAriaSortDirection(column) | async\\\"\\n [id]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n [tabIndex]=\\\"column.isSortable ? 0 : -1\\\"\\n (mouseup)=\\\"sortByColumn(column)\\\"\\n (keydown)=\\\"onKeydown($event, column)\\\"\\n (touchmove)=\\\"onTouchMove($event)\\\"\\n >\\n <div\\n class=\\\"overflow\\\"\\n [ngClass]=\\\"getTableHeaderClassNames(column)\\\"\\n [style.max-width.px]=\\\"column.width - 1\\\"\\n [style.width.px]=\\\"column.width - 1\\\"\\n >\\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\\n <span class=\\\"sky-grid-header-caret-hidden-spacing\\\"></span>\\n }\\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\\n <span class=\\\"sky-grid-header-text\\\">{{\\n column.heading?.trim()\\n }}</span>\\n <sky-icon\\n class=\\\"sky-grid-heading-sort\\\"\\n variant=\\\"solid\\\"\\n [ngClass]=\\\"\\n 'sky-grid-heading-sort-' +\\n (getCaretVisibility(column.field) | async)\\n \\\"\\n [iconName]=\\\"getCaretIconNames(column)\\\"\\n />\\n @if (column.inlineHelpPopover) {\\n <sky-help-inline\\n [ngClass]=\\\"{\\n 'sky-grid-help-inline-sort-hidden':\\n getHelpInlineClass(column.field) | async\\n }\\\"\\n [skyPopover]=\\\"column.inlineHelpPopover\\\"\\n (keydown.enter)=\\\"$event.stopPropagation()\\\"\\n (keydown.space)=\\\"$event.stopPropagation()\\\"\\n (mousedown)=\\\"$event.stopPropagation()\\\"\\n (mouseup)=\\\"$event.stopPropagation()\\\"\\n />\\n }\\n </div>\\n @if ((fit === 'width' && !last) || fit === 'scroll') {\\n <span\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-handle\\\"\\n tabindex=\\\"-1\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n (mousedown)=\\\"onResizeColumnStart($event)\\\"\\n (touchstart)=\\\"onResizeColumnStart($event)\\\"\\n >\\n </span>\\n }\\n <input\\n #colSizeRange\\n aria-label=\\\"Width of column\\\"\\n class=\\\"sky-grid-column-input-aria-only\\\"\\n role=\\\"slider\\\"\\n type=\\\"range\\\"\\n [attr.aria-controls]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [attr.aria-valuemin]=\\\"minColWidth\\\"\\n [attr.aria-valuemax]=\\\"maxColWidth\\\"\\n [attr.aria-valuenow]=\\\"column.width\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [min]=\\\"minColWidth\\\"\\n [max]=\\\"maxColWidth\\\"\\n [step]=\\\"columnResizeStep\\\"\\n [(ngModel)]=\\\"column.width\\\"\\n (blur)=\\\"onResizeHandleBlur()\\\"\\n (focus)=\\\"onResizeHandleFocus($event)\\\"\\n (keydown)=\\\"onKeydownResizeCol($event)\\\"\\n (change)=\\\"onInputChangeResizeCol($event)\\\"\\n />\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"sky-grid-tbody\\\">\\n @for (item of items; track item; let i = $index) {\\n <tr\\n class=\\\"sky-grid-row\\\"\\n [attr.aria-current]=\\\"isRowHighlighted(item.id) ? true : null\\\"\\n [attr.sky-cmp-id]=\\\"item.id\\\"\\n [ngClass]=\\\"{\\n 'sky-grid-multiselect-selected-row': item.isSelected,\\n 'sky-grid-multiselect-row': enableMultiselect,\\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\\n }\\\"\\n (click)=\\\"onRowClick($event, item)\\\"\\n >\\n @if (enableMultiselect) {\\n <td class=\\\"sky-grid-multiselect-cell sky-grid-header-locked\\\">\\n <div\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <sky-checkbox\\n [label]=\\\"\\n 'skyux_grid_multiselect_select_row' | skyLibResources\\n \\\"\\n [(ngModel)]=\\\"item.isSelected\\\"\\n (change)=\\\"onMultiselectCheckboxChange()\\\"\\n />\\n </div>\\n </td>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <td\\n class=\\\"sky-grid-cell\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n >\\n <sky-grid-cell\\n [skyHighlight]=\\\"\\n !column.excludeFromHighlighting ? highlightText : undefined\\n \\\"\\n [template]=\\\"column.template || defaultCellTemplate\\\"\\n [fieldSelector]=\\\"column.field\\\"\\n [item]=\\\"item\\\"\\n [columnId]=\\\"column.id\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n />\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n @if (showResizeBar) {\\n <div\\n #resizeBar\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-bar\\\"\\n tabindex=\\\"-1\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\\n<ng-template #defaultCellTemplate let-row=\\\"row\\\" let-value=\\\"value\\\">{{\\n value\\n}}</ng-template>\\n\\n<ng-template #inlineDeleteTemplateRef let-item>\\n <div\\n #inlineDeleteRef\\n [id]=\\\"'row-delete-ref-' + item.id\\\"\\n [ngStyle]=\\\"{\\n height: getRowHeight(0),\\n position: 'fixed',\\n width: tableWidth + 'px'\\n }\\\"\\n >\\n <sky-inline-delete\\n [pending]=\\\"getRowDeleteItem(item.id).pending\\\"\\n (cancelTriggered)=\\\"cancelRowDelete(item.id)\\\"\\n (deleteTriggered)=\\\"confirmRowDelete(item.id)\\\"\\n />\\n </div>\\n</ng-template>\\n\", styles: [\".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\\\"\\\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: i2.DragulaService }, { type: i3.SkyGridAdapterService }, { type: i1.SkyOverlayService }, { type: i1.SkyAppWindowRef }, { type: i1.SkyUIConfigService }, { type: i1.SkyLogService }], propDecorators: { columns: [{\n type: Input\n }], data: [{\n type: Input\n }], enableMultiselect: [{\n type: Input\n }], fit: [{\n type: Input\n }], hasToolbar: [{\n type: Input\n }], height: [{\n type: Input\n }], highlightText: [{\n type: Input\n }], messageStream: [{\n type: Input\n }], multiselectRowId: [{\n type: Input\n }], rowHighlightedId: [{\n type: Input\n }], selectedColumnIds: [{\n type: Input\n }], selectedRowIds: [{\n type: Input\n }], settingsKey: [{\n type: Input\n }], sortField: [{\n type: Input\n }], width: [{\n type: Input\n }], columnWidthChange: [{\n type: Output\n }], multiselectSelectionChange: [{\n type: Output\n }], rowDeleteCancel: [{\n type: Output\n }], rowDeleteConfirm: [{\n type: Output\n }], selectedColumnIdsChange: [{\n type: Output\n }], sortFieldChange: [{\n type: Output\n }], columnComponents: [{\n type: ContentChildren,\n args: [SkyGridColumnComponent]\n }], columnElementRefs: [{\n type: ViewChildren,\n args: ['gridCol']\n }], columnRangeInputElementRefs: [{\n type: ViewChildren,\n args: ['colSizeRange']\n }], inlineDeleteRefs: [{\n type: ViewChildren,\n args: ['inlineDeleteRef']\n }], inlineDeleteTemplateRef: [{\n type: ViewChild,\n args: ['inlineDeleteTemplateRef', { read: TemplateRef }]\n }], tableContainerElementRef: [{\n type: ViewChild,\n args: ['gridContainer']\n }], tableElementRef: [{\n type: ViewChild,\n args: ['gridTable']\n }], topScrollContainerElementRef: [{\n type: ViewChild,\n args: ['topScrollContainer']\n }], resizeBar: [{\n type: ViewChild,\n args: ['resizeBar']\n }], onWindowResize: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixHQU12QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsYUFBYSxHQUVkLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUVmLE9BQU8sRUFFUCxTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU16RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU0vRCxPQUFPLEVB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OztzQkFRaEIsS0FBSzs7c0JBb0JMLEtBQUs7O3NCQVVMLEtBQUs7O3NCQVVMLEtBQUs7O3NCQU1MLEtBQUs7O3NCQU1MLEtBQUs7O3NCQU9MLEtBQUs7O3NCQU1MLEtBQUs7O3NCQU9MLEtBQUs7O3NCQVFMLEtBQUs7O3NCQU9MLEtBQUs7O3NCQXNDTCxLQUFLOztzQkFrQkwsS0FBSzs7c0JBWUwsS0FBSzs7c0JBTUwsS0FBSzs7c0JBTUwsTUFBTTs7c0JBVU4sTUFBTTs7c0JBT04sTUFBTTs7c0JBTU4sTUFBTTs7c0JBT04sTUFBTTs7c0JBTU4sTUFBTTs7c0JBbUJOLGVBQWU7dUJBQUMsc0JBQXNCOztzQkFHdEMsWUFBWTt1QkFBQyxTQUFTOztzQkFFdEIsWUFBWTt1QkFBQyxjQUFjOztzQkFFM0IsWUFBWTt1QkFBQyxpQkFBaUI7O3NCQUU5QixTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTs7c0JBRTFELFNBQVM7dUJBQUMsZUFBZTs7c0JBRXpCLFNBQVM7dUJBQUMsV0FBVzs7c0JBRXJCLFNBQVM7dUJBQUMsb0JBQW9COztzQkFFOUIsU0FBUzt1QkFBQyxXQUFXOztzQkE2SXJCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNreUFmZml4QXV0b0ZpdENvbnRleHQsXG4gIFNreUFmZml4U2VydmljZSxcbiAgU2t5QXBwV2luZG93UmVmLFxuICBTa3lMb2dTZXJ2aWNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbiAgU2t5VUlDb25maWdTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBMaXN0SXRlbU1vZGVsLFxuICBMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbCxcbn0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG5pbXBvcnQgeyBEcmFndWxhU2VydmljZSB9IGZyb20gJ25nMi1kcmFndWxhJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBmcm9tRXZlbnQsXG4gIG1lcmdlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFrZVdoaWxlLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUdyaWRBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vZ3JpZC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5Nb2RlbCB9IGZyb20gJy4vZ3JpZC1jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWRlc2NyaXB0aW9uLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1oZWFkaW5nLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uSW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4taW5saW5lLWhlbHAtcG9wb3Zlci1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLXdpZHRoLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkTWVzc2FnZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1tZXNzYWdlJztcbmltcG9ydCB7IFNreUdyaWRNZXNzYWdlVHlwZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1tZXNzYWdlLXR5cGUnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3MgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jYW5jZWwtYXJncyc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ29uZmlnIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY29uZmlnJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb25maXJtQXJncyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNvbmZpcm0tYXJncyc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ29udGVudHMgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jb250ZW50cyc7XG5pbXBvcnQgeyBTa3lHcmlkU2VsZWN0ZWRSb3dzTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtc2VsZWN0ZWQtcm93cy1tb2RlbC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1zZWxlY3RlZC1yb3dzLXNvdXJjZSc7XG5pbXBvcnQgeyBTa3lHcmlkVUlDb25maWcgfSBmcm9tICcuL3R5cGVzL2dyaWQtdWktY29uZmlnJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgYFNreUdyaWRDb21wb25lbnRgIGFuZCBpdHMgZmVhdHVyZXMgYXJlIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgZGF0YSBncmlkIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC5jb21wb25lbnQuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbRHJhZ3VsYVNlcnZpY2VdLFxuICBwcm92aWRlcnM6IFtTa3lHcmlkQWRhcHRlclNlcnZpY2VdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBDb2x1bW5zIGFuZCBjb2x1bW4gcHJvcGVydGllcyBmb3IgdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbHVtbnMobmV3Q29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10pIHtcbiAgICBjb25zdCBvbGRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIHRoaXMuX2NvbHVtbnMgPSBuZXdDb2x1bW5zO1xuICAgIGlmIChvbGRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnRyYW5zZmVyQ29sdW1uV2lkdGhzKG9sZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XG4gICAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IFNreUdyaWRDb2x1bW5Nb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBmb3IgdGhlIGdyaWQuIEVhY2ggaXRlbSByZXF1aXJlcyBhbiBgaWRgIGFuZCBhIHByb3BlcnR5IHRoYXQgbWFwc1xuICAgKiB0byB0aGUgYGZpZWxkYCBvciBgaWRgIHByb3BlcnR5IG9mIGVhY2ggY29sdW1uIGluIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGE6IGFueVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgbXVsdGlzZWxlY3QgZmVhdHVyZSB0byBkaXNwbGF5IGEgY29sdW1uIG9mXG4gICAqIGNoZWNrYm94ZXMgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZ3JpZC4gWW91IGNhbiBzcGVjaWZ5IGEgdW5pcXVlIElEIHdpdGhcbiAgICogdGhlIGBtdWx0aXNlbGVjdFJvd0lkYCBwcm9wZXJ0eSwgYnV0IG11bHRpc2VsZWN0IGRlZmF1bHRzIHRvIHRoZSBgaWRgIHByb3BlcnR5IG9uXG4gICAqIHRoZSBgZGF0YWAgb2JqZWN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZU11bHRpc2VsZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZ3JpZCBmaXRzIHRvIGl0cyBwYXJlbnQuIFRoZSB2YWxpZCBvcHRpb25zIGFyZSBgd2lkdGhgLFxuICAgKiB3aGljaCBmaXRzIHRoZSBncmlkIHRvIHRoZSBwYXJlbnQncyBmdWxsIHdpZHRoLCBhbmQgYHNjcm9sbGAsIHdoaWNoIGFsbG93cyB0aGUgZ3JpZFxuICAgKiB0byBleGNlZWQgdGhlIHBhcmVudCdzIHdpZHRoLiBJZiB0aGUgZ3JpZCBkb2VzIG5vdCBoYXZlIGVub3VnaCBjb2x1bW5zIHRvIGZpbGxcbiAgICogdGhlIHBhcmVudCdzIHdpZHRoLCBpdCBhbHdheXMgc3RyZXRjaGVzIHRvIHRoZSBwYXJlbnQncyBmdWxsIHdpZHRoLlxuICAgKiBAZGVmYXVsdCBcIndpZHRoXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaXQgPSAnd2lkdGgnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSB0b29sYmFyIHdpdGggdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGFzVG9vbGJhciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGhpZ2hsaWdodCB3aXRoaW4gdGhlIGdyaWQuXG4gICAqIFR5cGljYWxseSwgdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggc2VhcmNoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpZ2hsaWdodFRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5R3JpZE1lc3NhZ2U+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgdGhhdCBtYXRjaGVzIGEgcHJvcGVydHkgb24gdGhlIGBkYXRhYCBvYmplY3QuXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgcHJvcGVydHkgdXNlcyB0aGUgYGlkYCBwcm9wZXJ0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtdWx0aXNlbGVjdFJvd0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm93IHRvIGhpZ2hsaWdodC4gVGhlIElEIG1hdGNoZXMgdGhlIGBpZGAgcHJvcGVydHlcbiAgICogb2YgdGhlIGBkYXRhYCBvYmplY3QuIFR5cGljYWxseSwgdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICogdGhlIGZseW91dCBjb21wb25lbnQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcm93SGlnaGxpZ2h0ZWRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sdW1ucyB0byBkaXNwbGF5IGluIHRoZSBncmlkIGJhc2VkIG9uIHRoZSBgaWRgIG9yIGBmaWVsZGAgcHJvcGVydGllc1xuICAgKiBvZiB0aGUgY29sdW1ucy4gSWYgbm8gY29sdW1ucyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBncmlkIGRpc3BsYXlzIGFsbCBjb2x1bW5zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZENvbHVtbklkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjdXJyZW50SWRzID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHM7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpZHMgaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICghY3VycmVudElkcyB8fCAhdmFsdWUgfHwgIXRoaXMuYXJyYXlzRXF1YWwodmFsdWUsIGN1cnJlbnRJZHMpKSB7XG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGVuc3VyZXMgdGhhdCB3ZSBkbyBub3Qgc2V0IHVzZXIgY29uZmlnIG9wdGlvbnMgb3IgZmlyZSB0aGUgY2hhbmdlIGV2ZW50XG4gICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0aGF0IHRoZSBjb2x1bW5zIGFyZSBzZXQgdXBcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0KSB7XG4gICAgICAgIHRoaXMuc2V0VXNlckNvbmZpZyh7XG4gICAgICAgICAgc2VsZWN0ZWRDb2x1bW5JZHM6IHZhbHVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRDb2x1bW5JZHMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVzaXplZCkge1xuICAgICAgICAgIHRoaXMucmVzZXRUYWJsZVdpZHRoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRDb2x1bW5JZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbklkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIElEcyBmb3IgdGhlIHJvd3MgdG8gc2VsZWN0IGluIGEgbXVsdGlzZWxlY3QgZ3JpZC5cbiAgICogVGhlIElEcyBtYXRjaCB0aGUgYGlkYCBwcm9wZXJ0aWVzIG9mIHRoZSBgZGF0YWAgb2JqZWN0cy5cbiAgICogUm93cyB3aXRoIElEcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgYXJlIGRlLXNlbGVjdGVkIGluIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZFJvd0lkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzID0gdmFsdWU7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWRSb3dzKCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5TZWxlY3RlZFJvd0lkc0NoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZFJvd0lkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93SWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUga2V5IGZvciB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgdG8gcmV0cmlldmUgc3RvcmVkIHNldHRpbmdzIGZyb20gYSBkYXRhYmFzZS5cbiAgICogVGhlIFVJIENvbmZpZyBTZXJ2aWNlIHNhdmVzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHVzZXJzIGFuZCByZXR1cm5zXG4gICAqIGBzZWxlY3RlZENvbHVtbklkc2AgdG8gcHJlc2VydmUgdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBhbmQgdGhlIHByZWZlcnJlZCBjb2x1bW4gb3JkZXIuIFlvdSAgbXVzdCBwcm92aWRlIGBpZGAgdmFsdWVzIGZvciB5b3VyIGBza3ktZ3JpZC1jb2x1bW5gIGVsZW1lbnRzIGJlY2F1c2UgdGhlIFVJIENvbmZpZyBTZXJ2aWNlIGRlcGVuZHMgb24gdGhvc2UgdmFsdWVzIHRvIG9yZ2FuaXplIGNvbHVtbnMgYmFzZWQgb24gdXNlciBzZXR0aW5ncy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFVJIENvbmZpZyBTZXJ2aWNlLCBzZWUgW3RoZSBzdGlja3kgc2V0dGluZ3MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9kZXZlbG9wL3N0aWNreS1zZXR0aW5ncykuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0dGluZ3NLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogRGlzcGxheXMgYSBjYXJldCBpbiB0aGUgY29sdW1uIHRoYXQgd2FzIHVzZWQgdG8gc29ydCB0aGUgZ3JpZC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsXG4gICAqIHdoZW4geW91IHByb2dyYW1tYXRpY2FsbHkgc29ydCBkYXRhIGFuZCB3YW50IHRvIHZpc3VhbGx5IGluZGljYXRlIGhvdyB0aGUgZ3JpZCB3YXMgc29ydGVkLlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYSBgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWxgIHZhbHVlIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAtIGBmaWVsZFNlbGVjdG9yYCBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHNvcnQgZmllbGQuIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBgc3RyaW5nYCB2YWx1ZXMuXG4gICAqIC0gYGRlc2NlbmRpbmdgIEluZGljYXRlcyB3aGV0aGVyIHRvIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlci4gVGhlIGNhcmV0IHRoYXQgdmlzdWFsbHlcbiAgICogaW5kaWNhdGVzIHRoZSBzb3J0IG9yZGVyIHBvaW50cyBkb3duIGZvciBkZXNjZW5kaW5nIG9yZGVyIGFuZCB1cCBmb3IgYXNjZW5kaW5nIG9yZGVyLlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgYGJvb2xlYW5gIHZhbHVlcy4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNvcnRGaWVsZDogTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw7XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgZ3JpZCBpbiBwaXhlbHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgd2lkdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgd2lkdGggb2YgYSBjb2x1bW4gY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY29sdW1uV2lkdGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlW11cbiAgPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3Rpb24gb2YgbXVsdGlzZWxlY3QgY2hlY2tib3hlcyBjaGFuZ2VzLlxuICAgKiBFbWl0cyBhbiBhcnJheSBvZiBJRHMgZm9yIHRoZSBzZWxlY3RlZCByb3dzIGJhc2VkIG9uIHRoZSBgbXVsdGlzZWxlY3RSb3dJZGAgcHJvcGVydHlcbiAgICogdGhhdCB0aGUgY29uc3VtZXIgcHJvdmlkZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZT4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCBjaGFuZ2Ugb3Igd2hlbiB0aGUgb3JkZXIgb2YgdGhlIGNvbHVtbnMgY2hhbmdlcy5cbiAgICogVGhlIGV2ZW50IGVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIGRpc3BsYXllZCBjb2x1bW5zIHRoYXQgcmVmbGVjdHMgdGhlIGNvbHVtbiBvcmRlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgc29ydCBmaWVsZCBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzb3J0RmllbGRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsPigpO1xuXG4gIHB1YmxpYyBjb2x1bW5SZXNpemVTdGVwID0gMTA7XG4gIHB1YmxpYyBjdXJyZW50U29ydEZpZWxkOiBCZWhhdmlvclN1YmplY3Q8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+O1xuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW107XG4gIHB1YmxpYyBkcmFndWxhR3JvdXBOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBncmlkSWQ6IG51bWJlciA9ICsrbmV4dElkO1xuICBwdWJsaWMgcm93RGVsZXRlQ29uZmlnczogU2t5R3JpZFJvd0RlbGV0ZUNvbmZpZ1tdID0gW107XG4gIHB1YmxpYyBpdGVtczogYW55W107XG4gIHB1YmxpYyBtYXhDb2xXaWR0aCA9IDk5OTk7IC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IG51bWJlciwgYXMgdGhlIGlucHV0IHJhbmdlIHBpY2tlciB3b24ndCB3b3JrIHdpdGhvdXQgYSB2YWx1ZS5cbiAgcHVibGljIG1pbkNvbFdpZHRoID0gNTA7XG4gIHB1YmxpYyBzaG93UmVzaXplQmFyID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93VG9wU2Nyb2xsID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCB0YWJsZVdpZHRoKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreUdyaWRDb2x1bW5Db21wb25lbnQpXG4gIHByaXZhdGUgY29sdW1uQ29tcG9uZW50czogUXVlcnlMaXN0PFNreUdyaWRDb2x1bW5Db21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWRDb2wnKVxuICBwcml2YXRlIGNvbHVtbkVsZW1lbnRSZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2NvbFNpemVSYW5nZScpXG4gIHByaXZhdGUgY29sdW1uUmFuZ2VJbnB1dEVsZW1lbnRSZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2lubGluZURlbGV0ZVJlZicpXG4gIHByaXZhdGUgaW5saW5lRGVsZXRlUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdpbmxpbmVEZWxldGVUZW1wbGF0ZVJlZicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBpbmxpbmVEZWxldGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIEBWaWV3Q2hpbGQoJ2dyaWRDb250YWluZXInKVxuICBwcml2YXRlIHRhYmxlQ29udGFpbmVyRWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZ3JpZFRhYmxlJylcbiAgcHJpdmF0ZSB0YWJsZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RvcFNjcm9sbENvbnRhaW5lcicpXG4gIHByaXZhdGUgdG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmVzaXplQmFyJylcbiAgcHJpdmF0ZSByZXNpemVCYXI6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBhY3RpdmVSZXNpemVDb2x1bW5JbmRleDogc3RyaW5nO1xuICBwcml2YXRlIGlzRHJhZ2dpbmdSZXNpemVIYW5kbGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1Jlc2l6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByb3dEZWxldGVDb250ZW50czogUmVjb3JkPHN0cmluZywgU2t5R3JpZFJvd0RlbGV0ZUNvbnRlbnRzPiA9IHt9O1xuICBwcml2YXRlIHN0YXJ0Q29sdW1uV2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHNjcm9sbFRyaWdnZXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkQ29sdW1uSWRzU2V0ID0gZmFsc2U7XG4gIHByaXZhdGUgeFBvc1N0YXJ0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW107XG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uSWRzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRSb3dJZHM6IHN0cmluZ1tdO1xuXG4gIHJlYWRvbmx5ICNlbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWZmaXhTZXJ2aWNlOiBTa3lBZmZpeFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkcmFndWxhU2VydmljZTogRHJhZ3VsYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkQWRhcHRlcjogU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2t5V2luZG93OiBTa3lBcHBXaW5kb3dSZWYsXG4gICAgcHJpdmF0ZSB1aUNvbmZpZ1NlcnZpY2U6IFNreVVJQ29uZmlnU2VydmljZSxcbiAgICBsb2dnZXI6IFNreUxvZ1NlcnZpY2UsXG4gICkge1xuICAgIGxvZ2dlci5kZXByZWNhdGVkKCdTa3lHcmlkQ29tcG9uZW50Jywge1xuICAgICAgZGVwcmVjYXRpb25NYWpvclZlcnNpb246IDYsXG4gICAgICBtb3JlSW5mb1VybDogJ2h0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWQnLFxuICAgICAgcmVwbGFjZW1lbnRSZWNvbW1lbmRhdGlvbjogJ1VzZSBkYXRhIGdyaWQgaW5zdGVhZC4nLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gbmV3IEFycmF5PFNreUdyaWRDb2x1bW5Nb2RlbD4oKTtcbiAgICB0aGlzLml0ZW1zID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsPih7XG4gICAgICBmaWVsZFNlbGVjdG9yOiAnJyxcbiAgICAgIGRlc2NlbmRpbmc6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSA9IGBza3ktZ3JpZHMtZ3JvdXAtJHt0aGlzLmdyaWRJZH1gO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWVzc2FnZVN0cmVhbVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBTa3lHcmlkTWVzc2FnZSkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHRoaXMuYXBwbHlVc2VyQ29uZmlnKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdENvbHVtbnMoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgY29sdW1uIGRyYWctYW5kLWRyb3AuXG4gICAgdGhpcy5ncmlkQWRhcHRlci5pbml0aWFsaXplRHJhZ0FuZERyb3AoXG4gICAgICB0aGlzLmRyYWd1bGFHcm91cE5hbWUsXG4gICAgICB0aGlzLmRyYWd1bGFTZXJ2aWNlLFxuICAgICAgKHNlbGVjdGVkQ29sdW1uSWRzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICB0aGlzLm9uSGVhZGVyRHJvcChzZWxlY3RlZENvbHVtbklkcyk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWRSb3dzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10gJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbklkcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzID0gdGhpcy5zZWxlY3RlZENvbHVtbklkcy5maWx0ZXIoKGNvbHVtbklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucyh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICYmIHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1EYXRhKCk7XG5cbiAgICAgIC8vIFRoaXMgc2V0IHRpbWVvdXQgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZGF0YSBoYXMgcmVuZGVyZWQgaW4gdGhlIGdyaWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyBUaGlzIGNsZWFucyB1cCBhbnkgbGluZ2VyaW5nIHJvdyBkZWxldGVzIGZvciBpdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLlxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5kYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHJvd3MgcmUtcmVuZGVyIHRodXMgbWVzc2luZyB1cCB0aGUgYWZmaXhlcnMuIFdlIG11c3QgcmVhZmZpeCB0aGVtIHNvIHRoYXQgdGhpbmdzXG4gICAgICAgICAgICAvLyBjb250aW51ZSB0byByZW5kZXIgY29ycmVjdGx5LlxuICAgICAgICAgICAgY29uc3Qgcm93RWxlbWVudDogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJ1tza3ktY21wLWlkPVwiJyArIGlkICsgJ1wiXScsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMucm93RGVsZXRlQ29udGVudHNbaWRdLmFmZml4ZXIuYWZmaXhUbyhyb3dFbGVtZW50LCB7XG4gICAgICAgICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICAgICAgICBpc1N0aWNreTogdHJ1ZSxcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiAnYWJvdmUnLFxuICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogJ3RvcCcsXG4gICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgICAgICAgICAgICAgZW5hYmxlQXV0b0ZpdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snc29ydEZpZWxkJ10pIHtcbiAgICAgIHRoaXMuc2V0U29ydEhlYWRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLm11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5yb3dEZWxldGVDb250ZW50cykuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgIHRoaXMuZGVzdHJveVJvd0RlbGV0ZShpZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYWd1bGFTZXJ2aWNlLmRlc3Ryb3kodGhpcy5kcmFndWxhR3JvdXBOYW1lKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwdWJsaWMgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUb3BTY3JvbGxXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB9XG5cbiAgcHVibGljIGdldFRhYmxlQ2xhc3NOYW1lcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5maXQgIT09ICdzY3JvbGwnKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1ncmlkLWZpdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1Rvb2xiYXIpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtaGFzLXRvb2xiYXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoY2xhc3NOYW1lcywgJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUYWJsZUhlYWRlckNsYXNzTmFtZXMoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5sb2NrZWQpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtaGVhZGVyLWxvY2tlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihjbGFzc05hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIGdldENhcmV0SWNvbk5hbWVzKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29uTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLmdldFNvcnREaXJlY3Rpb24oY29sdW1uLmZpZWxkKS5zdWJzY3JpYmUoKHNvcnREaXIpID0+IHtcbiAgICAgIGlmIChzb3J0RGlyID09PSAnYXNjJykge1xuICAgICAgICBpY29uTmFtZXMucHVzaCgnY2hldnJvbi11cCcpO1xuICAgICAgfVxuICAgICAgaWYgKHNvcnREaXIgPT09ICdkZXNjJykge1xuICAgICAgICBpY29uTmFtZXMucHVzaCgnY2hldnJvbi1kb3duJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5hZGREZWxpbWl0ZXIoaWNvbk5hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnNvcnRCeUNvbHVtbihjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0QnlDb2x1bW4oY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSAmJiBjb2x1bW4uaXNTb3J0YWJsZSkge1xuICAgICAgdGhpcy5jdXJyZW50U29ydEZpZWxkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0ge1xuICAgICAgICAgICAgICBmaWVsZFNlbGVjdG9yOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgIGRlc2NlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkICYmXG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbi5maWVsZCAmJlxuICAgICAgICAgICAgICBmaWVsZC5kZXNjZW5kaW5nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgZmllbGRTZWxlY3RvcjogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgIGRlc2NlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0RmllbGRDaGFuZ2UuZW1pdChzZWxlY3Rvcik7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGQubmV4dChzZWxlY3Rvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTb3J0RGlyZWN0aW9uKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW5GaWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICAgIDogJ2FzYydcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJpYVNvcnREaXJlY3Rpb24oY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RmllbGQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZFNlbGVjdG9yID09PSBjb2x1bW4uZmllbGRcbiAgICAgICAgICA/IGZpZWxkLmRlc2NlbmRpbmdcbiAgICAgICAgICAgID8gJ2Rlc2NlbmRpbmcnXG4gICAgICAgICAgICA6ICdhc2NlbmRpbmcnXG4gICAgICAgICAgOiBjb2x1bW4uaXNTb3J0YWJsZVxuICAgICAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbkZpZWxkID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEhlbHBJbmxpbmVDbGFzcyhjb2x1bW5GaWVsZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbkZpZWxkKS5waXBlKFxuICAgICAgbWFwKCh2aXNpYmlsaXR5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHZpc2liaWxpdHkgPT09ICdoaWRkZW4nO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk11bHRpc2VsZWN0Q2hlY2tib3hDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuQ2hlY2tib3hDaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5oZWFkaW5nID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSW5saW5lSGVscFBvcG92ZXIoXG4gICAgY2hhbmdlOiBTa3lHcmlkQ29sdW1uSW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5pbmxpbmVIZWxwUG9wb3ZlciA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKFxuICAgIGNoYW5nZTogU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZvdW5kQ29sdW1uTW9kZWwgPSB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjaGFuZ2UuaWQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuaWQgPT09IGNvbHVtbi5pZCkgfHxcbiAgICAgICAgKGNoYW5nZS5maWVsZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZvdW5kQ29sdW1uTW9kZWwpIHtcbiAgICAgIGZvdW5kQ29sdW1uTW9kZWwuZGVzY3JpcHRpb24gPSBjaGFuZ2UudmFsdWU7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUNvbHVtblN0YXJ0KGV2ZW50OiB7XG4gICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgIHBhZ2VYPzogbnVtYmVyO1xuICB9KTogdm9pZCB7XG4gICAgLy8gSWYgdGhpcyB0YWJsZSBoYXNuJ3QgYmVlbiByZXNpemVkLCBpbml0aWFsaXplIGFsbCB0aGUgcmVzaXplIHdpZHRocy5cbiAgICBpZiAoIXRoaXMuaXNSZXNpemVkKSB7XG4gICAgICB0aGlzLmluaXRDb2x1bW5XaWR0aHMoKTtcbiAgICAgIHRoaXMuaXNSZXNpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRpYWxpemVSZXNpemVDb2x1bW4oZXZlbnQpO1xuXG4gICAgdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlID0gdHJ1ZTtcbiAgICB0aGlzLnhQb3NTdGFydCA9IGV2ZW50LnBhZ2VYO1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IHRydWU7XG5cbiAgICAvLyBTaG93IHZpc3VhbCBpbmRpY2F0b3Igb2Ygd2hlcmUgbW91c2UgaXMgZHJhZ2dpbmcgKHJlc2l6ZUJhcikuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihldmVudC5wYWdlWCk7XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbW91c2VNb3ZlRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKTtcbiAgICBjb25zdCB0b3VjaE1vdmVFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ3RvdWNobW92ZScpO1xuXG4gICAgbWVyZ2UobW91c2VNb3ZlRXZlbnQsIHRvdWNoTW92ZUV2ZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChtb3ZlRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplSGFuZGxlTW92ZShtb3ZlRXZlbnQpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBtb3VzZVVwRXZlbnQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJyk7XG4gICAgY29uc3QgdG91Y2hFbmRFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ3RvdWNoZW5kJyk7XG5cbiAgICBtZXJnZShtb3VzZVVwRXZlbnQsIHRvdWNoRW5kRXZlbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGVuZEV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vblJlc2l6ZUhhbmRsZVJlbGVhc2UoZW5kRXZlbnQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duUmVzaXplQ29sKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLy8gSWYgdGhpcyB0YWJsZSBoYXNuJ3QgYmVlbiByZXNpemVkLCBpbml0aWFsaXplIGFsbCB0aGUgcmVzaXplIHdpZHRocy5cbiAgICBpZiAoIXRoaXMuaXNSZXNpemVkKSB7XG4gICAgICB0aGlzLmluaXRDb2x1bW5XaWR0aHMoKTtcbiAgICAgIHRoaXMuaXNSZXNpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRpYWxpemVSZXNpemVDb2x1bW4oZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIG9uSW5wdXRDaGFuZ2VSZXNpemVDb2woZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IE51bWJlcihpbnB1dC52YWx1ZSk7XG4gICAgY29uc3QgZGVsdGFYID0gbmV3VmFsdWUgLSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGg7XG4gICAgdGhpcy5yZXNpemVDb2x1bW5CeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgsIG5ld1ZhbHVlLCBkZWx0YVgpO1xuICAgIGNvbnN0IGxlZnQgPSBpbnB1dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24obGVmdCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZGVsdGFYID0gZXZlbnQucGFnZVggLSB0aGlzLnhQb3NTdGFydDtcbiAgICBjb25zdCBuZXdDb2xXaWR0aCA9IHRoaXMuc3RhcnRDb2x1bW5XaWR0aCArIGRlbHRhWDtcblxuICAgIGlmIChuZXdDb2xXaWR0aCA8PSB0aGlzLm1pbkNvbFdpZHRoKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXggPSB0aGlzLmdldE1heFJhbmdlQnlJbmRleCh0aGlzLmFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4KTtcbiAgICBpZiAodGhpcy5maXQgPT09ICd3aWR0aCcgJiYgbmV3Q29sV2lkdGggPiBtYXgpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UmVzaXplQmFyUG9zaXRpb24oZXZlbnQucGFnZVgpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZUZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVzaXplQmFyID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihsZWZ0KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZVJlbGVhc2UoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSBmYWxzZTtcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtIHRoaXMueFBvc1N0YXJ0O1xuICAgIGNvbnN0IG5ld0NvbFdpZHRoID0gdGhpcy5zdGFydENvbHVtbldpZHRoICsgZGVsdGFYO1xuICAgIHRoaXMucmVzaXplQ29sdW1uQnlJbmRleCh0aGlzLmFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4LCBuZXdDb2xXaWR0aCwgZGVsdGFYKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGUgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4ID0gdW5kZWZpbmVkO1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd0NsaWNrKGV2ZW50OiBhbnksIHNlbGVjdGVkSXRlbTogTGlzdEl0ZW1Nb2RlbCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuZW5hYmxlTXVsdGlzZWxlY3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0IHx8XG4gICAgICAgICF0aGlzLmlzSW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50KVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkSXRlbS5pc1NlbGVjdGVkID0gIXNlbGVjdGVkSXRlbS5pc1NlbGVjdGVkO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5Sb3dDbGljayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzUm93SGlnaGxpZ2h0ZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnJvd0hpZ2hsaWdodGVkSWQpIHtcbiAgICAgIHJldHVybiBpZCA9PT0gdGhpcy5yb3dIaWdobGlnaHRlZElkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93SGVpZ2h0KGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdyaWRBZGFwdGVyLmdldFJvd0hlaWdodCh0aGlzLnRhYmxlRWxlbWVudFJlZiwgaW5kZXgpO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbFJvd0RlbGV0ZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maWdzID0gdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbHRlcihcbiAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCAhPT0gaWQsXG4gICAgKTtcbiAgICB0aGlzLnJvd0RlbGV0ZUNhbmNlbC5lbWl0KHsgaWQ6IGlkIH0pO1xuXG4gICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maXJtUm93RGVsZXRlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmluZCgoY29uZmlnKSA9PiBjb25maWcuaWQgPT09IGlkKS5wZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpcm0uZW1pdCh7IGlkOiBpZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dEZWxldGVJdGVtKGlkOiBzdHJpbmcpOiBTa3lHcmlkUm93RGVsZXRlQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbmQoKHJvd0RlbGV0ZSkgPT4gcm93RGVsZXRlLmlkID09PSBpZCk7XG4gIH1cblxuICAvLyBQcmV2ZW50IHRvdWNoIGRldmljZXMgZnJvbSBpbmFkdmVydGVudGx5IHNjcm9sbGluZyBncmlkIHdoaWxlIGRyYWdnaW5nIGNvbHVtbnMuXG4gIHB1YmxpYyBvblRvdWNoTW92ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRvcFNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy50YWJsZUNvbnRhaW5lckVsZW1lbnRSZWYpIHtcbiAgICAgIGlmICh0aGlzLnNjcm9sbFRyaWdnZXJlZCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgIHRoaXMudG9wU2Nyb2xsQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uR3JpZFNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy50b3BTY3JvbGxDb250YWluZXJFbGVtZW50UmVmKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxUcmlnZ2VyZWQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b3BTY3JvbGxDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9XG4gICAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnNob3dUb3BTY3JvbGwgJiZcbiAgICAgIHRoaXMuY29sdW1uRWxlbWVudFJlZnMgJiZcbiAgICAgIHRoaXMuY29sdW1uRWxlbWVudFJlZnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgbGV0IGNvbHVtbnNXaWR0aFRvdGFsID0gMDtcbiAgICAgIGNvbnN0IHdpbmRvd1NpemUgPSB0aGlzLnNreVdpbmRvdy5uYXRpdmVXaW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHRoaXMuY29sdW1uRWxlbWVudFJlZnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zaG93VG9wU2Nyb2xsKSB7XG4gICAgICAgICAgY29uc3QgY29tcHV0ZWRXaWR0aCA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2wubmF0aXZlRWxlbWVudCkud2lkdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IGNvbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBjb21wdXRlZFdpZHRoIHx8IG9mZnNldFdpZHRoLFxuICAgICAgICAgICAgdGhpcy5taW5Db2xXaWR0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbHVtbnNXaWR0aFRvdGFsID0gY29sdW1uc1dpZHRoVG90YWwgKyB3aWR0aDtcbiAgICAgICAgICBpZiAoY29sdW1uc1dpZHRoVG90YWwgPiB3aW5kb3dTaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dUb3BTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuU2VsZWN0QWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RDbGVhckFsbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRSb3dzKFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuQ2xlYXJBbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2U6IFNreUdyaWRNZXNzYWdlKTogdm9pZCB7XG4gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLlNlbGVjdEFsbDpcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdEFsbCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lHcmlkTWVzc2FnZVR5cGUuQ2xlYXJBbGw6XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RDbGVhckFsbCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2t5R3JpZE1lc3NhZ2VUeXBlLlByb21wdERlbGV0ZVJvdzpcbiAgICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChtZXNzYWdlLmRhdGEgJiYgbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdykge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbmQoXG4gICAgICAgICAgICAoY29uZmlnKSA9PiBjb25maWcuaWQgPT09IG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdDb25maWcpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQ29uZmlnLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb25maWdzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCxcbiAgICAgICAgICAgICAgcGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgICAgICAgIGVuYWJsZVNjcm9sbDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2hvd0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogdHJ1ZSxcbiAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy4jZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvdmVybGF5LmF0dGFjaFRlbXBsYXRlKHRoaXMuaW5saW5lRGVsZXRlVGVtcGxhdGVSZWYsIHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLmRhdGEuZmluZChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdlIGFyZSBtYW51YWxseSBzZXR0aW5nIHRoZSB6LWluZGV4IGhlcmUgYmVjYXVzZSBvdmVybGF5cyB3aWxsIGFsd2F5cyBiZSBvbiB0b3Agb2ZcbiAgICAgICAgICAgICAqIHRoZSBvbW5pYmFyLiBUaGlzIG1hbnVhbCBzZXR0aW5nIGlzIDEgbGVzcyB0aGFuIHRoZSBvbW5pYmFyJ3Mgei1pbmRleCBvZiAxMDAwLiBXZVxuICAgICAgICAgICAgICogZGlzY3Vzc2VkIGNoYW5naW5nIHRoZSBvdmVybGF5IHNlcnZpY2UgdG8gYWxsb3cgZm9yIHRoaXMgYnV0IGRlY2lkZWQgYWdhaW5zdCB0aGF0XG4gICAgICAgICAgICAgKiBjaGFuZ2UgYXQgdGhpcyB0aW1lIGR1ZSB0byBpdHMgbmljaGUgbmF0dXJlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBvdmVybGF5LmNvbXBvbmVudFJlZi5pbnN0YW5jZS56SW5kZXggPSAnOTk5JztcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlubGluZURlbGV0ZVJlZiA9IHRoaXMuaW5saW5lRGVsZXRlUmVmc1xuICAgICAgICAgICAgICAgIC50b0FycmF5KClcbiAgICAgICAgICAgICAgICAuZmluZCgoZWxSZWYpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuaWQgPT09XG4gICAgICAgICAgICAgICAgICAgICdyb3ctZGVsZXRlLXJlZi0nICsgbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuYWZmaXhTZXJ2aWNlLmNyZWF0ZUFmZml4ZXIoaW5saW5lRGVsZXRlUmVmKTtcblxuICAgICAgICAgICAgICBjb25zdCByb3dFbGVtZW50OiBIVE1MRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgJ1tza3ktY21wLWlkPVwiJyArIG1lc3NhZ2UuZGF0YS5wcm9tcHREZWxldGVSb3cuaWQgKyAnXCJdJyxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGFmZml4ZXIuYWZmaXhUbyhyb3dFbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgICAgICAgICAgaXNTdGlja3k6IHRydWUsXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiAnYWJvdmUnLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAndG9wJyxcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgZW5hYmxlQXV0b0ZpdDogZmFsc2UsXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMucm93RGVsZXRlQ29udGVudHNbbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZF0gPSB7XG4gICAgICAgICAgICAgICAgYWZmaXhlcjogYWZmaXhlcixcbiAgICAgICAgICAgICAgICBvdmVybGF5OiBvdmVybGF5LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTa3lHcmlkTWVzc2FnZVR5cGUuQWJvcnREZWxldGVSb3c6XG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAobWVzc2FnZS5kYXRhICYmIG1lc3NhZ2UuZGF0YS5hYm9ydERlbGV0ZVJvdykge1xuICAgICAgICAgIHRoaXMucm93RGVsZXRlQ29uZmlncyA9IHRoaXMucm93RGVsZXRlQ29uZmlncy5maWx0ZXIoXG4gICAgICAgICAgICAoY29uZmlnKSA9PiBjb25maWcuaWQgIT09IG1lc3NhZ2UuZGF0YS5hYm9ydERlbGV0ZVJvdy5pZCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKG1lc3NhZ2UuZGF0YS5hYm9ydERlbGV0ZVJvdy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9uSGVhZGVyRHJvcChuZXdDb2x1bW5JZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgLy8gdXBkYXRlIHNlbGVjdGVkIGNvbHVtbklkc1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNTZXQgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSBuZXdDb2x1bW5JZHM7XG5cbiAgICAvLyBtYXJrIGZvciBjaGVjayBiZWNhdXNlIHdlIGFyZSB1c2luZyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5vblB1c2hcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXNwbGF5ZWRDb2x1bW5zKHJlc3BlY3RIaWRkZW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBzZXR1cCBkaXNwbGF5ZWQgY29sdW1uc1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzXG4gICAgICAgICAgLmZpbHRlcigoY29sdW1uSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGNvbHVtbklkKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKGNvbHVtbklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGNvbHVtbklkKVswXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzcGVjdEhpZGRlbikge1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICByZXR1cm4gIWNvbHVtbi5oaWRkZW47XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRGF0YSgpOiB2b2lkIHtcbiAgICAvLyBUcmFuc2Zvcm0gZGF0YSBpbnRvIG9iamVjdCB3aXRoIGlkIGFuZCBkYXRhIHByb3BlcnRpZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLmRhdGEgJiZcbiAgICAgIHRoaXMuZGF0YS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmRhdGFbMF0uaWQgJiZcbiAgICAgICF0aGlzLmRhdGFbMF0uZGF0YVxuICAgICkge1xuICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3RSb3dJZCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5nZXRHcmlkRGF0YVdpdGhTZWxlY3RlZFJvd3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiBuZXcgTGlzdEl0ZW1Nb2RlbChpdGVtLmlkLCBpdGVtKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmRhdGE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkRGF0YVdpdGhTZWxlY3RlZFJvd3MoKTogTGlzdEl0ZW1Nb2RlbFtdIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICBsZXQgY2hlY2tlZDtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgdGhpcy5tdWx0aXNlbGVjdFJvd0lkKSkge1xuICAgICAgICBjaGVja2VkID0gc2VsZWN0ZWRSb3dzLmluZGV4T2YoaXRlbVt0aGlzLm11bHRpc2VsZWN0Um93SWRdKSA+IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tlZCA9IHNlbGVjdGVkUm93cy5pbmRleE9mKGl0ZW0uaWQpID4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExpc3RJdGVtTW9kZWwoaXRlbS5pZCwgaXRlbSwgY2hlY2tlZCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2VsZWN0ZWRSb3dzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkUm93SWRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkUm93SWRzLmluZGV4T2YoaXRlbS5pZCkgPiAtMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRTb3J0SGVhZGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGQubmV4dChcbiAgICAgIHRoaXMuc29ydEZpZWxkIHx8IHsgZmllbGRTZWxlY3RvcjogJycsIGRlc2NlbmRpbmc6IGZhbHNlIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uc0Zyb21Db21wb25lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLm1hcCgoY29sdW1uQ29tcG9uZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFNreUdyaWRDb2x1bW5Nb2RlbChjb2x1bW5Db21wb25lbnQudGVtcGxhdGUsIGNvbHVtbkNvbXBvbmVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpO1xuXG4gICAgLy8gVGhpcyBzZXQgdGltZW91dCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBjb2x1bW5zIGhhdmUgcmVuZGVyZWQgaW4gdGhlIGdyaWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tVc2VyQ29sdW1uV2lkdGhzRm9yU2Nyb2xsKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2l6ZUNvbHVtbkJ5SW5kZXgoXG4gICAgY29sdW1uSW5kZXg6IHN0cmluZyxcbiAgICBuZXdDb2xXaWR0aDogbnVtYmVyLFxuICAgIGRlbHRhWDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChjb2x1bW5JbmRleCk7XG5cbiAgICAvLyBQcmV2ZW50IGFjY2lkZW50YWwgc2hyaW5rYWdlIGJlbG93IG1pbmltdW0gd2lkdGguXG4gICAgaWYgKG5ld0NvbFdpZHRoIDw9IHRoaXMubWluQ29sV2lkdGgpIHtcbiAgICAgIGRlbHRhWCA9IGRlbHRhWCArIHRoaXMubWluQ29sV2lkdGggLSBuZXdDb2xXaWR0aDtcbiAgICAgIG5ld0NvbFdpZHRoID0gdGhpcy5taW5Db2xXaWR0aDtcbiAgICB9XG5cbiAgICAvLyBmaXQ9d2lkdGggYWRkcy9yZW1vdmVzIHdpZHRoIGZyb20gdGhlIGxhc3QgY29sdW1uXG4gICAgLy8gZml0PXNjcm9sbCBhZGRzL3JlbW92ZXMgd2lkdGggZnJvbSB0aGUgdGFibGVcbiAgICBpZiAodGhpcy5maXQgPT09ICd3aWR0aCcpIHtcbiAgICAgIGNvbnN0IGxhc3RDb2x1bW4gPSB0aGlzLmdldExhc3REaXNwbGF5ZWRDb2x1bW4oKTtcblxuICAgICAgLy8gUHJldmVudCBhY2NpZGVudGFsIGdyb3d0aCB0aGF0IHdvdWxkIGJ1bXAgbGFzdCBjb2x1bW4gb2ZmIHNjcmVlbi5cbiAgICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0TWF4UmFuZ2VCeUluZGV4KGNvbHVtbkluZGV4KTtcbiAgICAgIGlmIChuZXdDb2xXaWR0aCA+IG1heCkge1xuICAgICAgICBuZXdDb2xXaWR0aCA9IG1heDtcbiAgICAgICAgZGVsdGFYID0gbWF4IC0gdGhpcy5zdGFydENvbHVtbldpZHRoO1xuICAgICAgfVxuICAgICAgY29sdW1uLndpZHRoID0gbmV3Q29sV2lkdGg7XG4gICAgICBsYXN0Q29sdW1uLndpZHRoID0gbGFzdENvbHVtbi53aWR0aCAtIGRlbHRhWDtcbiAgICAgIHRoaXMudXBkYXRlTWF4UmFuZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncmlkQWRhcHRlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgIGAke3RoaXMudGFibGVXaWR0aCArIGRlbHRhWH1weGAsXG4gICAgICApO1xuICAgICAgY29sdW1uLndpZHRoID0gbmV3Q29sV2lkdGg7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5jb2x1bW5XaWR0aENoYW5nZS5lbWl0KHRoaXMuZ2V0Q29sdW1uV2lkdGhNb2RlbENoYW5nZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbldpZHRocygpOiB2b2lkIHtcbiAgICAvLyBFc3RhYmxpc2ggdGFibGUgd2lkdGguXG4gICAgdGhpcy5zaG93VG9wU2Nyb2xsID0gdHJ1ZTtcblxuICAgIC8vIFNldCBjb2x1bW4gd2lkdGhzIGJhc2VkIG9uIHRoZSB3aWR0aCBpbml0aWFsbHkgZ2l2ZW4gYnkgdGhlIGJyb3dzZXIuXG4gICAgLy8gY29tcHV0ZWRXaWR0aCBwcmV2ZW50cyBhY2NpZGVudGFsIG92ZXJmbG93IGZvciBicm93c2VycyB3aXRoIHN1Yi1waXhlbCB3aWR0aHMuXG4gICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gcGFyc2VGbG9hdChcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sLm5hdGl2ZUVsZW1lbnQpLndpZHRoLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gY29sLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhpcy5nZXRDb2x1bW5Nb2RlbEJ5SW5kZXgoaW5kZXgpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgIGNvbXB1dGVkV2lkdGggfHwgb2Zmc2V0V2lkdGgsXG4gICAgICAgIHRoaXMubWluQ29sV2lkdGgsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gJ3Njcm9sbCcgdGFibGVzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGV4cGFuZCBvdXRzaWRlIG9mIHRoZWlyIGNvbnN0cmFpbnRzLlxuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsZW1lbnRSZWYsICdtaW4td2lkdGgnLCAnYXV0bycpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBtYXggbGltaXRzIGZvciBpbnB1dCByYW5nZXMuXG4gICAgaWYgKHRoaXMuZml0ID09PSAnd2lkdGgnKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heFJhbmdlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZmVyQ29sdW1uV2lkdGhzKFxuICAgIG9sZENvbHVtbnM6IFNreUdyaWRDb2x1bW5Nb2RlbFtdLFxuICAgIG5ld0NvbHVtbnM6IFNreUdyaWRDb2x1bW5Nb2RlbFtdLFxuICApOiB2b2lkIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChvbGRDb2x1bW5zICYmIG5ld0NvbHVtbnMpIHtcbiAgICAgIGZvciAoY29uc3Qgb2xkQ29sdW1uIG9mIG9sZENvbHVtbnMpIHtcbiAgICAgICAgaWYgKG9sZENvbHVtbi53aWR0aCkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ29sdW1uID0gbmV3Q29sdW1ucy5maW5kKFxuICAgICAgICAgICAgKG5ld0NvbHVtbikgPT4gb2xkQ29sdW1uLmlkID09PSBuZXdDb2x1bW4uaWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdDb2x1bW4gJiYgIW1hdGNoaW5nQ29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgICBtYXRjaGluZ0NvbHVtbi53aWR0aCA9IG9sZENvbHVtbi53aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uV2lkdGhNb2RlbENoYW5nZSgpOiBTa3lHcmlkQ29sdW1uV2lkdGhNb2RlbENoYW5nZVtdIHtcbiAgICBjb25zdCBjb2x1bW5XaWR0aE1vZGVsQ2hhbmdlID0gbmV3IEFycmF5PFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlPigpO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbHVtbldpZHRoTW9kZWxDaGFuZ2UucHVzaCh7XG4gICAgICAgIGlkOiBjb2x1bW4uaWQsXG4gICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1uV2lkdGhNb2RlbENoYW5nZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWF4UmFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgbGVmdG92ZXJXaWR0aCA9XG4gICAgICB0aGlzLmdldExhc3REaXNwbGF5ZWRDb2x1bW4oKS53aWR0aCAtIHRoaXMubWluQ29sV2lkdGg7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld01heFJhbmdlID0gY29sdW1uLndpZHRoICsgbGVmdG92ZXJXaWR0aDtcbiAgICAgIGNvbnN0IHJhbmdlSW5wdXQgPSB0aGlzLmdldFJhbmdlSW5wdXRCeUluZGV4KGluZGV4KTtcbiAgICAgIHJhbmdlSW5wdXQubmF0aXZlRWxlbWVudC5tYXggPSBuZXdNYXhSYW5nZTtcbiAgICAgIHJhbmdlSW5wdXQubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtYXgnLCBuZXdNYXhSYW5nZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVSZXNpemVDb2x1bW4oZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGNsaWNrVGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXggPSBjbGlja1RhcmdldC5nZXRBdHRyaWJ1dGUoJ3NreS1jbXAtaW5kZXgnKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleCh0aGlzLmFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4KTtcbiAgICB0aGlzLnN0YXJ0Q29sdW1uV2lkdGggPSBjb2x1bW4ud2lkdGg7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VGFibGVXaWR0aCgpOiB2b2lkIHtcbiAgICB0aGlzLnNreVdpbmRvdy5uYXRpdmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKHRoaXMudGFibGVFbGVtZW50UmVmLCAnd2lkdGgnLCBgYXV0b2ApO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZixcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgYCR7dGhpcy50YWJsZVdpZHRofXB4YCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmFuZ2VJbnB1dEJ5SW5kZXgoaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblJhbmdlSW5wdXRFbGVtZW50UmVmcy5maW5kKFxuICAgICAgKGlucHV0KSA9PlxuICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpID09PSBpbmRleC50b1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleDogc3RyaW5nIHwgbnVtYmVyKTogU2t5R3JpZENvbHVtbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW051bWJlcihpbmRleCldO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXhSYW5nZUJ5SW5kZXgoaW5kZXg6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY29sdW1uRWxlbWVudFJlZiA9IHRoaXMuY29sdW1uRWxlbWVudFJlZnMuZmluZChcbiAgICAgICh0aCkgPT4gdGgubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3NreS1jbXAtaW5kZXgnKSA9PT0gaW5kZXgsXG4gICAgKTtcbiAgICBjb25zdCByYW5nZUlucHV0ID0gY29sdW1uRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLnNreS1ncmlkLWNvbHVtbi1pbnB1dC1hcmlhLW9ubHknLFxuICAgICk7XG4gICAgcmV0dXJuIE51bWJlcihyYW5nZUlucHV0Lm1heCk7XG4gIH1cblxuICBwcml2YXRlIGdldExhc3REaXNwbGF5ZWRDb2x1bW4oKTogU2t5R3JpZENvbHVtbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb2x1bW5Nb2RlbEJ5SW5kZXgodGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZWxpbWl0ZXIodGV4dDogc3RyaW5nW10sIGRlbGltaXRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dC5maWx0ZXIoKHZhbCkgPT4gdmFsKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lSb3dEZWxldGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJvd0RlbGV0ZUNvbnRlbnRzID0gdGhpcy5yb3dEZWxldGVDb250ZW50c1tpZF07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocm93RGVsZXRlQ29udGVudHMpIHtcbiAgICAgIHJvd0RlbGV0ZUNvbnRlbnRzLmFmZml4ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5jbG9zZShyb3dEZWxldGVDb250ZW50cy5vdmVybGF5KTtcbiAgICAgIGRlbGV0ZSB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RlZFJvd3Moc291cmNlOiBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzOiBTa3lHcmlkU2VsZWN0ZWRSb3dzTW9kZWxDaGFuZ2UgPSB7XG4gICAgICBzZWxlY3RlZFJvd0lkczogdGhpcy5nZXRTZWxlY3RlZFJvd3MoKSxcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgIH07XG4gICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkUm93cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXNTZWxlY3RlZDtcbiAgICAgIH0pXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbS5kYXRhLCB0aGlzLm11bHRpc2VsZWN0Um93SWQpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBpdGVtLmRhdGFbdGhpcy5tdWx0aXNlbGVjdFJvd0lkXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ludGVyYWN0aXZlRWxlbWVudChldmVudDogYW55KTogYW55IHtcbiAgICBjb25zdCBpbnRlcmFjdGl2ZUVsU2VsZWN0b3JzID0gYFxuICAgICAgYSxcbiAgICAgIGJ1dHRvbixcbiAgICAgIGlucHV0LFxuICAgICAgbGFiZWwsXG4gICAgICBvcHRpb24sXG4gICAgICBzZWxlY3QsXG4gICAgICB0ZXh0YXJlYSxcbiAgICAgIGRldGFpbHMsXG4gICAgICBkaWFsb2csXG4gICAgICBtZW51LFxuICAgICAgbWVudWl0ZW0sXG4gICAgICBzdW1tYXJ5YDtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbFNlbGVjdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIHNldFJlc2l6ZUJhclBvc2l0aW9uKHhQb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFyZW50U2Nyb2xsID0gdGhpcy50YWJsZUNvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IHJlc2l6ZUJhclggPVxuICAgICAgeFBvc2l0aW9uIC1cbiAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG4gICAgICBwYXJlbnRTY3JvbGw7XG4gICAgdGhpcy5ncmlkQWRhcHRlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZUJhciwgJ2xlZnQnLCByZXNpemVCYXJYICsgJ3B4Jyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VXNlckNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMudWlDb25maWdTZXJ2aWNlXG4gICAgICAgIC5nZXRDb25maWcodGhpcy5zZXR0aW5nc0tleSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoY29uZmlnOiBTa3lHcmlkVUlDb25maWcpID0+IHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5zZWxlY3RlZENvbHVtbklkcykge1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IGNvbHVtbklkcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IGRhdGEgc2V0LlxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzID0gY29uZmlnLnNlbGVjdGVkQ29sdW1uSWRzLmZpbHRlcigoaWQpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBpZCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVc2VyQ29uZmlnKGNvbmZpZzogU2t5R3JpZFVJQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51aUNvbmZpZ1NlcnZpY2VcbiAgICAgIC5zZXRDb25maWcodGhpcy5zZXR0aW5nc0tleSwgY29uZmlnKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3Qgc2F2ZSBncmlkIHNldHRpbmdzLicpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbHVtbnMoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCAhPT0gMCB8fCB0aGlzLmNvbHVtbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgaWYgKHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ2V0Q29sdW1uc0Zyb21Db21wb25lbnQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmFuc2Zvcm1EYXRhKCk7XG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnModHJ1ZSk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIFdhdGNoIGZvciBhZGRlZC9yZW1vdmVkIGNvbHVtbnM6XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb2x1bW5zKCkpLFxuICAgICk7XG5cbiAgICAvLyBXYXRjaCBmb3IgY29sdW1uIGhlYWRpbmcgY2hhbmdlczpcbiAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZm9yRWFjaCgoY29tcDogU2t5R3JpZENvbHVtbkNvbXBvbmVudCkgPT4ge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaGVhZGluZ01vZGVsQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZTogU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5IZWFkaW5nKGNoYW5nZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgY29tcC5kZXNjcmlwdGlvbk1vZGVsQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZTogU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uRGVzY3JpcHRpb24oY2hhbmdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBjb21wLmlubGluZUhlbHBQb3BvdmVyTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmxpbmVIZWxwUG9wb3ZlcihjaGFuZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcnJheXNFcXVhbChhcnJheUE6IGFueVtdLCBhcnJheUI6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFycmF5QS5sZW5ndGggPT09IGFycmF5Qi5sZW5ndGggJiZcbiAgICAgIGFycmF5QS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gYXJyYXlCW2luZGV4XSlcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LWdyaWRcIj5cbiAgQGlmIChzaG93VG9wU2Nyb2xsKSB7XG4gICAgPGRpdlxuICAgICAgI3RvcFNjcm9sbENvbnRhaW5lclxuICAgICAgY2xhc3M9XCJza3ktZ3JpZC10b3Atc2Nyb2xsLWNvbnRhaW5lclwiXG4gICAgICAoc2Nyb2xsKT1cIm9uVG9wU2Nyb2xsKCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC10b3Atc2Nyb2xsXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldFRvcFNjcm9sbFdpZHRoKClcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXZcbiAgICAjZ3JpZENvbnRhaW5lclxuICAgIGNsYXNzPVwic2t5LWdyaWQtdGFibGUtY29udGFpbmVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodFwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCJcbiAgICAoc2Nyb2xsKT1cIm9uR3JpZFNjcm9sbCgkZXZlbnQpXCJcbiAgPlxuICAgIDx0YWJsZSAjZ3JpZFRhYmxlIGNsYXNzPVwic2t5LWdyaWQtdGFibGVcIiBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzTmFtZXMoKVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHIgW2RyYWd1bGFdPVwiZHJhZ3VsYUdyb3VwTmFtZVwiPlxuICAgICAgICAgIEBpZiAoZW5hYmxlTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmcgc2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIm1pbkNvbFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1pbkNvbFdpZHRoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICB7eyAnc2t5dXhfZ3JpZF9tdWx0aXNlbGVjdF9zZWxlY3Rfcm93JyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgIGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgICAgICAgdHJhY2sgY29sdW1uO1xuICAgICAgICAgICAgbGV0IGxhc3QgPSAkbGFzdDtcbiAgICAgICAgICAgIGxldCBpID0gJGluZGV4XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgI2dyaWRDb2xcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1oZWFkaW5nIHNreS1maWVsZC1sYWJlbFwiXG4gICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJjb2x1bW4uaWQgfHwgY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImdldEFyaWFTb3J0RGlyZWN0aW9uKGNvbHVtbikgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtpZF09XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ3NreS1ncmlkLWNvbHVtbi1hbGlnbm1lbnQtJyArIGNvbHVtbi5hbGlnbm1lbnRcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiY29sdW1uLmlzU29ydGFibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAobW91c2V1cCk9XCJzb3J0QnlDb2x1bW4oY29sdW1uKVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAodG91Y2htb3ZlKT1cIm9uVG91Y2hNb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJvdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVIZWFkZXJDbGFzc05hbWVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoIC0gMVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbi53aWR0aCAtIDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICgoZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbi5maWVsZCkgfCBhc3luYykgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNreS1ncmlkLWhlYWRlci1jYXJldC1oaWRkZW4tc3BhY2luZ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPCEtLSBUaGUgbm8gc3BhY2luZyBoZXJlIGlzIGludGVudGlvbmFsIHRvIGF2b2lkIGV4dHJhIHNwYWNlcyBkdWUgdG8gdGhlc2UgYmVpbmcgaW5saW5lIGVsZW1lbnRzIC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWdyaWQtaGVhZGVyLXRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRpbmc/LnRyaW0oKVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxza3ktaWNvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1oZWFkaW5nLXNvcnRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbGlkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAnc2t5LWdyaWQtaGVhZGluZy1zb3J0LScgK1xuICAgICAgICAgICAgICAgICAgICAoZ2V0Q2FyZXRWaXNpYmlsaXR5KGNvbHVtbi5maWVsZCkgfCBhc3luYylcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbaWNvbk5hbWVdPVwiZ2V0Q2FyZXRJY29uTmFtZXMoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5pbmxpbmVIZWxwUG9wb3Zlcikge1xuICAgICAgICAgICAgICAgICAgPHNreS1oZWxwLWlubGluZVxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgJ3NreS1ncmlkLWhlbHAtaW5saW5lLXNvcnQtaGlkZGVuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEhlbHBJbmxpbmVDbGFzcyhjb2x1bW4uZmllbGQpIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIFtza3lQb3BvdmVyXT1cImNvbHVtbi5pbmxpbmVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgQGlmICgoZml0ID09PSAnd2lkdGgnICYmICFsYXN0KSB8fCBmaXQgPT09ICdzY3JvbGwnKSB7XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWluZGV4XT1cImlcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25SZXNpemVDb2x1bW5TdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNjb2xTaXplUmFuZ2VcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiV2lkdGggb2YgY29sdW1uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWNvbHVtbi1pbnB1dC1hcmlhLW9ubHlcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCInc2t5LWdyaWQtJyArIGdyaWRJZCArICctY29sdW1uLScgKyBpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIm1pbkNvbFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIm1heENvbFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pbkNvbFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heENvbFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3RlcF09XCJjb2x1bW5SZXNpemVTdGVwXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25SZXNpemVIYW5kbGVCbHVyKClcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvblJlc2l6ZUhhbmRsZUZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93blJlc2l6ZUNvbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2VSZXNpemVDb2woJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJza3ktZ3JpZC10Ym9keVwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1yb3dcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImlzUm93SGlnaGxpZ2h0ZWQoaXRlbS5pZCkgPyB0cnVlIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2t5LWdyaWQtbXVsdGlzZWxlY3Qtc2VsZWN0ZWQtcm93JzogaXRlbS5pc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAnc2t5LWdyaWQtbXVsdGlzZWxlY3Qtcm93JzogZW5hYmxlTXVsdGlzZWxlY3QsXG4gICAgICAgICAgICAgICdza3ktZ3JpZC1yb3ctaGlnaGxpZ2h0JzogaXNSb3dIaWdobGlnaHRlZChpdGVtLmlkKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGVuYWJsZU11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNreS1ncmlkLW11bHRpc2VsZWN0LWNlbGwgc2t5LWdyaWQtaGVhZGVyLWxvY2tlZFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1pbkNvbFdpZHRoXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAnc2t5dXhfZ3JpZF9tdWx0aXNlbGVjdF9zZWxlY3Rfcm93JyB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25NdWx0aXNlbGVjdENoZWNrYm94Q2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICBjb2x1bW4gb2YgZGlzcGxheWVkQ29sdW1ucztcbiAgICAgICAgICAgICAgdHJhY2sgY29sdW1uO1xuICAgICAgICAgICAgICBsZXQgbGFzdCA9ICRsYXN0O1xuICAgICAgICAgICAgICBsZXQgaSA9ICRpbmRleFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtY2VsbFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ3NreS1ncmlkLWNvbHVtbi1hbGlnbm1lbnQtJyArIGNvbHVtbi5hbGlnbm1lbnRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxza3ktZ3JpZC1jZWxsXG4gICAgICAgICAgICAgICAgICBbc2t5SGlnaGxpZ2h0XT1cIlxuICAgICAgICAgICAgICAgICAgICAhY29sdW1uLmV4Y2x1ZGVGcm9tSGlnaGxpZ2h0aW5nID8gaGlnaGxpZ2h0VGV4dCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJjb2x1bW4udGVtcGxhdGUgfHwgZGVmYXVsdENlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbZmllbGRTZWxlY3Rvcl09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICBbY29sdW1uSWRdPVwiY29sdW1uLmlkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiY29sdW1uLmlkIHx8IGNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgQGlmIChzaG93UmVzaXplQmFyKSB7XG4gICAgICA8ZGl2XG4gICAgICAgICNyZXNpemVCYXJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1yZXNpemUtYmFyXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+PC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCI+e3tcbiAgdmFsdWVcbn19PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmxpbmVEZWxldGVUZW1wbGF0ZVJlZiBsZXQtaXRlbT5cbiAgPGRpdlxuICAgICNpbmxpbmVEZWxldGVSZWZcbiAgICBbaWRdPVwiJ3Jvdy1kZWxldGUtcmVmLScgKyBpdGVtLmlkXCJcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodCgwKSxcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgd2lkdGg6IHRhYmxlV2lkdGggKyAncHgnXG4gICAgfVwiXG4gID5cbiAgICA8c2t5LWlubGluZS1kZWxldGVcbiAgICAgIFtwZW5kaW5nXT1cImdldFJvd0RlbGV0ZUl0ZW0oaXRlbS5pZCkucGVuZGluZ1wiXG4gICAgICAoY2FuY2VsVHJpZ2dlcmVkKT1cImNhbmNlbFJvd0RlbGV0ZShpdGVtLmlkKVwiXG4gICAgICAoZGVsZXRlVHJpZ2dlcmVkKT1cImNvbmZpcm1Sb3dEZWxldGUoaXRlbS5pZClcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule } from '@skyux/indicators';\nimport { SkyInlineDeleteModule } from '@skyux/layout';\nimport { SkyPopoverModule } from '@skyux/popovers';\nimport { DragulaModule } from 'ng2-dragula';\nimport { SkyGridsResourcesModule } from '../shared/sky-grids-resources.module';\nimport { SkyGridCellComponent } from './grid-cell.component';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridComponent } from './grid.component';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridModule, declarations: [SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent], imports: [CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule], exports: [SkyGridComponent, SkyGridColumnComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridModule, imports: [CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyGridModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent,\n ],\n imports: [\n CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule,\n ],\n exports: [SkyGridComponent, SkyGridColumnComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRXBEOztHQUVHO0FBc0JILE1BQU0sT0FBTyxhQUFhOytHQUFiLGFBQWE7Z0hBQWIsYUFBYSxpQkFuQnRCLGdCQUFnQjtZQUNoQixzQkFBc0I7WUFDdEIsb0JBQW9CLGFBR3BCLFlBQVk7WUFDWixhQUFhO1lBQ2IsV0FBVztZQUNYLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IscUJBQXFCO1lBQ3JCLGdCQUFnQjtZQUNoQixzQkFBc0IsYUFFZCxnQkFBZ0IsRUFBRSxzQkFBc0I7Z0hBRXZDLGFBQWEsWUFkdEIsWUFBWTtZQUNaLGFBQWE7WUFDYixXQUFXO1lBQ1gsY0FBYztZQUNkLGlCQUFpQjtZQUNqQix1QkFBdUI7WUFDdkIsbUJBQW1CO1lBQ25CLGFBQWE7WUFDYixxQkFBcUI7WUFDckIsZ0JBQWdCO1lBQ2hCLHNCQUFzQjs7NEZBSWIsYUFBYTtrQkFyQnpCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3dCQUN0QixvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7aUJBQ3BEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFmZml4TW9kdWxlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5SGVscElubGluZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC9oZWxwLWlubGluZSc7XG5pbXBvcnQgeyBTa3lJY29uTW9kdWxlIH0gZnJvbSAnQHNreXV4L2ljb24nO1xuaW1wb3J0IHsgU2t5VGV4dEhpZ2hsaWdodE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pbmRpY2F0b3JzJztcbmltcG9ydCB7IFNreUlubGluZURlbGV0ZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHsgU2t5UG9wb3Zlck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9wb3BvdmVycyc7XG5cbmltcG9ydCB7IERyYWd1bGFNb2R1bGUgfSBmcm9tICduZzItZHJhZ3VsYSc7XG5cbmltcG9ydCB7IFNreUdyaWRzUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1ncmlkcy1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5R3JpZENlbGxDb21wb25lbnQgfSBmcm9tICcuL2dyaWQtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IFNreUdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNreUdyaWRDb21wb25lbnQsXG4gICAgU2t5R3JpZENvbHVtbkNvbXBvbmVudCxcbiAgICBTa3lHcmlkQ2VsbENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEcmFndWxhTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFNreUFmZml4TW9kdWxlLFxuICAgIFNreUNoZWNrYm94TW9kdWxlLFxuICAgIFNreUdyaWRzUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUhlbHBJbmxpbmVNb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lJbmxpbmVEZWxldGVNb2R1bGUsXG4gICAgU2t5UG9wb3Zlck1vZHVsZSxcbiAgICBTa3lUZXh0SGlnaGxpZ2h0TW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbU2t5R3JpZENvbXBvbmVudCwgU2t5R3JpZENvbHVtbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5dXgtZ3JpZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL3NreXV4LWdyaWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i3.SkyGridAdapterService","i12.SkyGridCellComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skyux-grids.mjs","sources":["../../../../../libs/components/grids/src/lib/modules/grid/grid-column.model.ts","../../../../../libs/components/grids/src/lib/modules/shared/sky-grids-resources.module.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-cell.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-column.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid-adapter.service.ts","../../../../../libs/components/grids/src/lib/modules/grid/types/grid-message-type.ts","../../../../../libs/components/grids/src/lib/modules/grid/types/grid-selected-rows-source.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid.component.ts","../../../../../libs/components/grids/src/lib/modules/grid/grid.component.html","../../../../../libs/components/grids/src/lib/modules/grid/grid.module.ts","../../../../../libs/components/grids/src/skyux-grids.ts"],"sourcesContent":["import { TemplateRef } from '@angular/core';\n\nimport { SkyGridColumnAlignment } from './types/grid-column-alignment';\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnModel {\n public template: TemplateRef<unknown>;\n public id: string;\n public field: string;\n public heading: string;\n public inlineHelpPopover: any;\n public type: string;\n public width: number;\n public hidden: boolean;\n public locked: boolean;\n public description: string;\n public isSortable = true;\n public excludeFromHighlighting: boolean;\n\n /**\n * The horizontal alignment of the column's data and header.\n */\n public alignment: SkyGridColumnAlignment;\n\n public searchFunction: (data: any, searchText: string) => boolean;\n\n constructor(template: TemplateRef<unknown>, data?: any) {\n this.template = template;\n\n if (data) {\n this.id = data.id || data.field;\n this.type = data.type;\n this.field = data.field;\n this.heading = data.heading;\n this.inlineHelpPopover = data.inlineHelpPopover;\n this.width = data.width ? Number(data.width) : undefined;\n this.hidden = data.hidden;\n this.locked = data.locked;\n this.description = data.description;\n this.searchFunction = data.searchFunction;\n this.isSortable = data.isSortable;\n this.excludeFromHighlighting = data.excludeFromHighlighting;\n this.alignment = data.alignment;\n }\n }\n}\n","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-grids' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': { skyux_grid_multiselect_select_row: { message: 'Select row' } },\n 'FR-CA': {\n skyux_grid_multiselect_select_row: { message: 'Sélectionner une ligne' },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyGridsResourcesModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ListItemModel, getData } from '@skyux/list-builder-common';\n\n/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid-cell',\n template: '<ng-template #cell />',\n styleUrls: ['./grid-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridCellComponent implements OnInit {\n @Input()\n public item: ListItemModel;\n\n @Input()\n public columnId: string;\n\n @Input()\n public template: TemplateRef<unknown>;\n\n @Input()\n public fieldSelector: string;\n\n @ViewChild('cell', {\n read: ViewContainerRef,\n static: true,\n })\n private container: ViewContainerRef;\n\n public ngOnInit(): void {\n this.container.createEmbeddedView(this.template, this);\n }\n\n public get row(): any {\n return this.item.data;\n }\n\n public get value(): any {\n if (this.item.data && (this.fieldSelector || this.columnId)) {\n return getData(this.item.data, this.fieldSelector || this.columnId);\n }\n\n return undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n OnChanges,\n QueryList,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\n\nimport { SkyGridColumnAlignment } from './types/grid-column-alignment';\nimport { SkyGridColumnDescriptionModelChange } from './types/grid-column-description-model-change';\nimport { SkyGridColumnHeadingModelChange } from './types/grid-column-heading-model-change';\nimport { SkyGridColumnInlineHelpPopoverModelChange } from './types/grid-column-inline-help-popover-model-change';\n\n/**\n * Specifies the column information.\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid-column',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridColumnComponent implements OnChanges {\n /**\n * The horizontal alignment of the column's data and header.\n * Options include: `\"left\"`, `\"center\"`, and `\"right\"`.\n * @default \"left\"\n */\n @Input()\n public alignment: SkyGridColumnAlignment = 'left';\n\n /**\n * The description for the column.\n */\n @Input()\n public description: string;\n\n /**\n * Whether to disable the highlighting of search text in the column.\n * @default false\n */\n @Input()\n public excludeFromHighlighting: boolean;\n\n /**\n * The property to retrieve cell information from an entry on the grid `data` array.\n * You must provide either the `id` or `field` property for every column,\n * but do not provide both. If `id` does not exist on a column, then `field` is the entry\n * for the grid `selectedColumnIds` array.\n */\n @Input()\n public field: string;\n\n /**\n * Text to display in the column header.\n */\n @Input()\n public heading: string;\n\n /**\n * Whether the column is initially hidden when grid `selectedColumnIds` are not provided.\n * @default false\n */\n @Input()\n public hidden: boolean;\n\n /**\n * The unique ID for the column. You must provide either the `id` or `field` property\n * for every column, but do not provide both. If `field` does not exist on a column,\n * then the `id` property retrieves cell information from an entry on the grid `data` array.\n */\n @Input()\n public id: string;\n\n /**\n * The template to display inside an inline help popup for this column.\n */\n @Input()\n public inlineHelpPopover: any;\n\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n @Input()\n public isSortable = true;\n\n /**\n * Whether the column is locked. The intent is to display locked columns first\n * on the left side of the grid. If set to `true`, then users cannot drag the column\n * to another position and or drag other columns before the locked column.\n * @default false\n */\n @Input()\n public locked: boolean;\n\n /**\n * The search function to apply for the specific column. By default,\n * the column executes a string compare on the column data.\n * @default (value, searchText) => value.toString().toLowerCase().indexOf(searchText) !== -1\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('search')\n public searchFunction: (value: any, searchText: string) => boolean =\n this.search;\n\n /**\n * @internal\n */\n @Input()\n public type: string;\n\n /**\n * The template for a column. This can be assigned as a reference\n * to the `template` attribute, or it can be assigned as a child of the `template` element\n * inside the `sky-grid-column` component. The template has access to the `value` variable,\n * which contains the value passed to the column, and the `row` variable, which contains\n * the entire row data.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('template')\n public templateInput: TemplateRef<unknown>;\n\n /**\n * The width of the column in pixels.\n * If undefined, the column width is evenly distributed.\n */\n @Input()\n public width: number;\n\n public descriptionChanges: EventEmitter<string> = new EventEmitter<string>();\n\n public descriptionModelChanges =\n new EventEmitter<SkyGridColumnDescriptionModelChange>();\n\n public headingChanges: EventEmitter<string> = new EventEmitter<string>();\n\n public headingModelChanges =\n new EventEmitter<SkyGridColumnHeadingModelChange>();\n\n public inlineHelpPopoverModelChanges =\n new EventEmitter<SkyGridColumnInlineHelpPopoverModelChange>();\n\n @ContentChildren(TemplateRef)\n private templates: QueryList<TemplateRef<unknown>>;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['heading'] && changes['heading'].firstChange === false) {\n this.headingChanges.emit(this.heading);\n this.headingModelChanges.emit({\n value: this.heading,\n id: this.id,\n field: this.field,\n });\n }\n if (\n changes['description'] &&\n changes['description'].firstChange === false\n ) {\n this.descriptionChanges.emit(this.description);\n this.descriptionModelChanges.emit({\n value: this.description,\n id: this.id,\n field: this.field,\n });\n }\n if (\n changes['inlineHelpPopover'] &&\n changes['inlineHelpPopover'].firstChange === false\n ) {\n this.inlineHelpPopoverModelChanges.emit({\n value: this.inlineHelpPopover,\n id: this.id,\n field: this.field,\n });\n }\n }\n\n public get template(): TemplateRef<unknown> {\n if (this.templates.length > 0) {\n return this.templates.first;\n }\n\n return this.templateInput;\n }\n\n private search(value: any, searchText: string): boolean {\n if (value !== undefined && value !== null) {\n return value.toString().toLowerCase().indexOf(searchText) !== -1;\n }\n\n return false;\n }\n}\n","import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\n\nimport { DragulaService } from 'ng2-dragula';\n\nconst GRID_HEADER_DRAGGING_CLASS = 'sky-grid-header-dragging';\nconst GRID_HEADER_LOCKED_SELECTOR = '.sky-grid-header-locked';\nconst GRID_HEADER_RESIZE_HANDLE = '.sky-grid-resize-handle';\nconst GRID_ROW_DELETE_SELECTOR = '.sky-grid-row-delete-heading';\nconst GRID_MULTISELECT_SELECTOR = '.sky-grid-multiselect-cell';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyGridAdapterService {\n private renderer: Renderer2;\n\n constructor(private rendererFactory: RendererFactory2) {\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n\n public initializeDragAndDrop(\n dragulaGroupName: string,\n dragulaService: DragulaService,\n dropCallback: (newColumnIds: string[]) => void,\n ): void {\n dragulaService\n .drag(dragulaGroupName)\n .subscribe((args) => args.el.classList.add(GRID_HEADER_DRAGGING_CLASS));\n\n dragulaService\n .dragend(dragulaGroupName)\n .subscribe((args) =>\n args.el.classList.remove(GRID_HEADER_DRAGGING_CLASS),\n );\n\n dragulaService.drop(dragulaGroupName).subscribe((args) => {\n const columnIds: string[] = [];\n const nodes = Array.from<HTMLElement>(\n args.target.querySelectorAll(\n `th:not(${GRID_MULTISELECT_SELECTOR}):not(${GRID_ROW_DELETE_SELECTOR})`,\n ),\n );\n for (const el of nodes) {\n const id = el.getAttribute('sky-cmp-id');\n columnIds.push(id);\n }\n dropCallback(columnIds);\n });\n\n dragulaService.createGroup(dragulaGroupName, {\n moves: (el: HTMLElement, container: HTMLElement, handle: HTMLElement) => {\n const columns: NodeListOf<HTMLElement> =\n container.querySelectorAll('th div');\n const isLeftOfLocked = this.isLeftOfLocked(handle, columns);\n\n return (\n !el.querySelector(GRID_HEADER_LOCKED_SELECTOR) &&\n handle !== undefined &&\n !handle.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !handle.matches(GRID_MULTISELECT_SELECTOR) &&\n !handle.matches(GRID_ROW_DELETE_SELECTOR) &&\n !isLeftOfLocked\n );\n },\n accepts: (\n el: HTMLElement,\n target: HTMLElement,\n source: HTMLElement,\n sibling: HTMLElement,\n ) => {\n if (sibling === undefined || !sibling) {\n return true;\n }\n\n const columns: NodeListOf<HTMLElement> =\n source.querySelectorAll('th div');\n const siblingDiv = sibling.querySelector('div');\n const isLeftOfLocked = this.isLeftOfLocked(siblingDiv, columns);\n\n return (\n !sibling.matches(GRID_HEADER_LOCKED_SELECTOR) &&\n !sibling.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !isLeftOfLocked\n );\n },\n });\n }\n\n public getRowHeight(el: ElementRef, index: number): string {\n return (\n el.nativeElement.querySelectorAll('tbody tr')[index].scrollHeight + 'px'\n );\n }\n\n public setStyle(el: ElementRef, style: string, value: string): void {\n if (el) {\n this.renderer.setStyle(el.nativeElement, style, value);\n }\n }\n\n private isLeftOfLocked(\n handle: HTMLElement,\n columns: NodeListOf<HTMLElement>,\n ): boolean {\n let sourceColumn = handle;\n for (const column of Array.from(columns)) {\n if (column.contains(handle)) {\n sourceColumn = column;\n }\n }\n\n for (let i = columns.length - 1; i >= 0; i--) {\n if (columns[i].classList.contains('sky-grid-header-locked')) {\n return true;\n }\n\n if (columns[i] === sourceColumn) {\n break;\n }\n }\n\n return false;\n }\n}\n","/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport enum SkyGridMessageType {\n /**\n * Selects the multiselect checkboxes for all rows in the grid.\n */\n SelectAll = 0,\n\n /**\n * Clears the multiselect checkboxes for all rows in the grid.\n */\n ClearAll = 1,\n\n /**\n * @internal\n */\n PromptDeleteRow = 2,\n\n /**\n * @internal\n */\n AbortDeleteRow = 3,\n}\n","/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport enum SkyGridSelectedRowsSource {\n CheckboxChange,\n ClearAll,\n RowClick,\n SelectAll,\n SelectedRowIdsChange,\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EnvironmentInjector,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n inject,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAppWindowRef,\n SkyLogService,\n SkyOverlayService,\n SkyUIConfigService,\n} from '@skyux/core';\nimport {\n ListItemModel,\n ListSortFieldSelectorModel,\n} from '@skyux/list-builder-common';\n\nimport { DragulaService } from 'ng2-dragula';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n Subscription,\n fromEvent,\n merge,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n take,\n takeUntil,\n takeWhile,\n} from 'rxjs/operators';\n\nimport { SkyGridAdapterService } from './grid-adapter.service';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridColumnModel } from './grid-column.model';\nimport { SkyGridColumnDescriptionModelChange } from './types/grid-column-description-model-change';\nimport { SkyGridColumnHeadingModelChange } from './types/grid-column-heading-model-change';\nimport { SkyGridColumnInlineHelpPopoverModelChange } from './types/grid-column-inline-help-popover-model-change';\nimport { SkyGridColumnWidthModelChange } from './types/grid-column-width-model-change';\nimport { SkyGridMessage } from './types/grid-message';\nimport { SkyGridMessageType } from './types/grid-message-type';\nimport { SkyGridRowDeleteCancelArgs } from './types/grid-row-delete-cancel-args';\nimport { SkyGridRowDeleteConfig } from './types/grid-row-delete-config';\nimport { SkyGridRowDeleteConfirmArgs } from './types/grid-row-delete-confirm-args';\nimport { SkyGridRowDeleteContents } from './types/grid-row-delete-contents';\nimport { SkyGridSelectedRowsModelChange } from './types/grid-selected-rows-model-change';\nimport { SkyGridSelectedRowsSource } from './types/grid-selected-rows-source';\nimport { SkyGridUIConfig } from './types/grid-ui-config';\n\nlet nextId = 0;\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@Component({\n selector: 'sky-grid',\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss'],\n viewProviders: [DragulaService],\n providers: [SkyGridAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyGridComponent\n implements OnInit, AfterContentInit, AfterViewInit, OnChanges, OnDestroy\n{\n /**\n * Columns and column properties for the grid.\n */\n @Input()\n public set columns(newColumns: SkyGridColumnModel[]) {\n const oldColumns = this.columns;\n this._columns = newColumns;\n if (oldColumns) {\n this.transferColumnWidths(oldColumns, this.columns);\n this.isResized = false;\n this.setDisplayedColumns(true);\n }\n this.changeDetector.markForCheck();\n }\n\n public get columns(): SkyGridColumnModel[] {\n return this._columns;\n }\n\n /**\n * The data for the grid. Each item requires an `id` and a property that maps\n * to the `field` or `id` property of each column in the grid.\n */\n @Input()\n public data: any[];\n\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid. You can specify a unique ID with\n * the `multiselectRowId` property, but multiselect defaults to the `id` property on\n * the `data` object.\n * @default false\n */\n @Input()\n public enableMultiselect = false;\n\n /**\n * How the grid fits to its parent. The valid options are `width`,\n * which fits the grid to the parent's full width, and `scroll`, which allows the grid\n * to exceed the parent's width. If the grid does not have enough columns to fill\n * the parent's width, it always stretches to the parent's full width.\n * @default \"width\"\n */\n @Input()\n public fit = 'width';\n\n /**\n * Whether to display a toolbar with the grid.\n */\n @Input()\n public hasToolbar = false;\n\n /**\n * The height of the grid.\n */\n @Input()\n public height: number;\n\n /**\n * Text to highlight within the grid.\n * Typically, this property is used in conjunction with search.\n */\n @Input()\n public highlightText: string;\n\n /**\n * The observable to send commands to the grid.\n */\n @Input()\n public messageStream = new Subject<SkyGridMessage>();\n\n /**\n * The unique ID that matches a property on the `data` object.\n * By default, this property uses the `id` property.\n */\n @Input()\n public multiselectRowId: string;\n\n /**\n * The ID of the row to highlight. The ID matches the `id` property\n * of the `data` object. Typically, this property is used in conjunction with\n * the flyout component to indicate the currently selected row.\n */\n @Input()\n public rowHighlightedId: string;\n\n /**\n * The columns to display in the grid based on the `id` or `field` properties\n * of the columns. If no columns are specified, then the grid displays all columns.\n */\n @Input()\n public set selectedColumnIds(value: string[]) {\n const currentIds = this._selectedColumnIds;\n this._selectedColumnIds = value;\n\n if (this.columns) {\n this.setDisplayedColumns();\n }\n\n // Ensure that the ids have changed.\n if (!currentIds || !value || !this.arraysEqual(value, currentIds)) {\n // This variable ensures that we do not set user config options or fire the change event\n // on the first time that the columns are set up\n if (this.selectedColumnIdsSet) {\n this.setUserConfig({\n selectedColumnIds: value,\n });\n\n this.selectedColumnIdsChange.emit(this._selectedColumnIds);\n\n if (this.isResized) {\n this.resetTableWidth();\n }\n }\n }\n\n this.selectedColumnIdsSet = true;\n }\n\n public get selectedColumnIds(): string[] {\n return this._selectedColumnIds;\n }\n\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * The IDs match the `id` properties of the `data` objects.\n * Rows with IDs that are not included are de-selected in the grid.\n */\n @Input()\n public set selectedRowIds(value: string[]) {\n if (value) {\n this._selectedRowIds = value;\n this.applySelectedRows();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectedRowIdsChange);\n }\n }\n\n public get selectedRowIds(): string[] {\n return this._selectedRowIds;\n }\n\n /**\n * The unique key for the UI Config Service to retrieve stored settings from a database.\n * The UI Config Service saves configuration settings for users and returns\n * `selectedColumnIds` to preserve the columns to display and the preferred column order. You must provide `id` values for your `sky-grid-column` elements because the UI Config Service depends on those values to organize columns based on user settings. For more information about the UI Config Service, see [the sticky settings documentation](https://developer.blackbaud.com/skyux/learn/develop/sticky-settings).\n */\n @Input()\n public settingsKey: string;\n\n /**\n * Displays a caret in the column that was used to sort the grid. This is particularly useful\n * when you programmatically sort data and want to visually indicate how the grid was sorted.\n * This property accepts a `ListSortFieldSelectorModel` value with the following properties:\n * - `fieldSelector` Represents the current sort field. This property accepts `string` values.\n * - `descending` Indicates whether to sort in descending order. The caret that visually\n * indicates the sort order points down for descending order and up for ascending order.\n * This property accepts `boolean` values. Default is `false`.\n */\n @Input()\n public sortField: ListSortFieldSelectorModel;\n\n /**\n * The width of the grid in pixels.\n */\n @Input()\n public width: number;\n\n /**\n * Fires when the width of a column changes.\n */\n @Output()\n public columnWidthChange = new EventEmitter<\n SkyGridColumnWidthModelChange[]\n >();\n\n /**\n * Fires when the selection of multiselect checkboxes changes.\n * Emits an array of IDs for the selected rows based on the `multiselectRowId` property\n * that the consumer provides.\n */\n @Output()\n public multiselectSelectionChange =\n new EventEmitter<SkyGridSelectedRowsModelChange>();\n\n /**\n * @internal\n */\n @Output()\n public rowDeleteCancel = new EventEmitter<SkyGridRowDeleteCancelArgs>();\n\n /**\n * @internal\n */\n @Output()\n public rowDeleteConfirm = new EventEmitter<SkyGridRowDeleteConfirmArgs>();\n\n /**\n * Fires when the columns to display in the grid change or when the order of the columns changes.\n * The event emits an array of IDs for the displayed columns that reflects the column order.\n */\n @Output()\n public selectedColumnIdsChange = new EventEmitter<string[]>();\n\n /**\n * Fires when the active sort field changes.\n */\n @Output()\n public sortFieldChange = new EventEmitter<ListSortFieldSelectorModel>();\n\n public columnResizeStep = 10;\n public currentSortField: BehaviorSubject<ListSortFieldSelectorModel>;\n public displayedColumns: SkyGridColumnModel[];\n public dragulaGroupName: string;\n public gridId: number = ++nextId;\n public rowDeleteConfigs: SkyGridRowDeleteConfig[] = [];\n public items: any[];\n public maxColWidth = 9999; // This is an arbitrary number, as the input range picker won't work without a value.\n public minColWidth = 50;\n public showResizeBar = false;\n public showTopScroll = false;\n\n public get tableWidth(): any {\n return this.tableElementRef.nativeElement.offsetWidth;\n }\n\n @ContentChildren(SkyGridColumnComponent)\n private columnComponents: QueryList<SkyGridColumnComponent>;\n\n @ViewChildren('gridCol')\n private columnElementRefs: QueryList<ElementRef>;\n @ViewChildren('colSizeRange')\n private columnRangeInputElementRefs: QueryList<ElementRef>;\n @ViewChildren('inlineDeleteRef')\n private inlineDeleteRefs: QueryList<ElementRef>;\n @ViewChild('inlineDeleteTemplateRef', { read: TemplateRef })\n private inlineDeleteTemplateRef: TemplateRef<unknown>;\n @ViewChild('gridContainer')\n private tableContainerElementRef: ElementRef;\n @ViewChild('gridTable')\n private tableElementRef: ElementRef;\n @ViewChild('topScrollContainer')\n private topScrollContainerElementRef: ElementRef;\n @ViewChild('resizeBar')\n private resizeBar: ElementRef;\n\n private activeResizeColumnIndex: string;\n private isDraggingResizeHandle = false;\n private isResized = false;\n private ngUnsubscribe = new Subject<void>();\n private rowDeleteContents: Record<string, SkyGridRowDeleteContents> = {};\n private startColumnWidth: number;\n private subscriptions: Subscription[] = [];\n private scrollTriggered = false;\n private selectedColumnIdsSet = false;\n private xPosStart: number;\n\n private _columns: SkyGridColumnModel[];\n private _selectedColumnIds: string[];\n private _selectedRowIds: string[];\n\n readonly #environmentInjector = inject(EnvironmentInjector);\n\n constructor(\n private affixService: SkyAffixService,\n private changeDetector: ChangeDetectorRef,\n private dragulaService: DragulaService,\n private gridAdapter: SkyGridAdapterService,\n private overlayService: SkyOverlayService,\n private skyWindow: SkyAppWindowRef,\n private uiConfigService: SkyUIConfigService,\n logger: SkyLogService,\n ) {\n logger.deprecated('SkyGridComponent', {\n deprecationMajorVersion: 6,\n moreInfoUrl: 'https://developer.blackbaud.com/skyux/components/data-grid',\n replacementRecommendation: 'Use data grid instead.',\n });\n\n this.displayedColumns = new Array<SkyGridColumnModel>();\n this.items = new Array<any>();\n this.currentSortField = new BehaviorSubject<ListSortFieldSelectorModel>({\n fieldSelector: '',\n descending: false,\n });\n this.dragulaGroupName = `sky-grids-group-${this.gridId}`;\n }\n\n public ngOnInit(): void {\n this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message: SkyGridMessage) => {\n this.handleIncomingMessages(message);\n });\n }\n\n public ngAfterContentInit(): void {\n if (this.settingsKey) {\n this.applyUserConfig().then(() => {\n this.initColumns();\n });\n } else {\n this.initColumns();\n }\n\n // Setup column drag-and-drop.\n this.gridAdapter.initializeDragAndDrop(\n this.dragulaGroupName,\n this.dragulaService,\n (selectedColumnIds: string[]) => {\n this.onHeaderDrop(selectedColumnIds);\n },\n );\n\n this.applySelectedRows();\n }\n\n public ngAfterViewInit(): void {\n this.checkUserColumnWidthsForScroll();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['columns'] && this.columns) {\n if (this.selectedColumnIds) {\n this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n });\n }\n this.setDisplayedColumns(true);\n }\n\n if (changes['data'] && this.data) {\n this.transformData();\n\n // This set timeout is necessary to ensure the data has rendered in the grid\n setTimeout(() => {\n // This cleans up any lingering row deletes for items that have been removed.\n Object.keys(this.rowDeleteContents).forEach((id) => {\n if (!this.data.find((item) => item.id === id)) {\n this.destroyRowDelete(id);\n } else {\n // The rows re-render thus messing up the affixers. We must reaffix them so that things\n // continue to render correctly.\n const rowElement: HTMLElement =\n this.tableElementRef.nativeElement.querySelector(\n '[sky-cmp-id=\"' + id + '\"]',\n );\n\n this.rowDeleteContents[id].affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n }\n });\n\n this.checkUserColumnWidthsForScroll();\n });\n }\n\n if (changes['sortField']) {\n this.setSortHeaders();\n }\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach((subscription: Subscription) => {\n subscription.unsubscribe();\n });\n this.multiselectSelectionChange.complete();\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n Object.keys(this.rowDeleteContents).forEach((id) => {\n this.destroyRowDelete(id);\n });\n\n this.dragulaService.destroy(this.dragulaGroupName);\n }\n\n @HostListener('window:resize')\n public onWindowResize(): void {\n this.checkUserColumnWidthsForScroll();\n }\n\n public getTopScrollWidth(): string {\n return this.tableElementRef.nativeElement.scrollWidth;\n }\n\n public getTableClassNames(): string {\n const classNames: string[] = [];\n\n if (this.fit !== 'scroll') {\n classNames.push('sky-grid-fit');\n }\n\n if (this.hasToolbar) {\n classNames.push('sky-grid-has-toolbar');\n }\n\n return this.addDelimiter(classNames, ' ');\n }\n\n public getTableHeaderClassNames(column: SkyGridColumnModel): string {\n const classNames: string[] = [];\n\n if (column && column.locked) {\n classNames.push('sky-grid-header-locked');\n }\n\n return this.addDelimiter(classNames, ' ');\n }\n\n public getCaretIconNames(column: SkyGridColumnModel): string {\n const iconNames: string[] = [];\n\n this.getSortDirection(column.field).subscribe((sortDir) => {\n if (sortDir === 'asc') {\n iconNames.push('chevron-up');\n }\n if (sortDir === 'desc') {\n iconNames.push('chevron-down');\n }\n });\n\n return this.addDelimiter(iconNames, ' ');\n }\n\n public onKeydown(event: KeyboardEvent, column: SkyGridColumnModel): void {\n const key = event.key.toLowerCase();\n if (key === 'enter' || key === ' ') {\n this.sortByColumn(column);\n }\n }\n\n public sortByColumn(column: SkyGridColumnModel): void {\n if (!this.isDraggingResizeHandle && column.isSortable) {\n this.currentSortField\n .pipe(\n take(1),\n map((field) => {\n let selector = {\n fieldSelector: column.field,\n descending: true,\n };\n\n if (\n field &&\n field.fieldSelector === column.field &&\n field.descending\n ) {\n selector = {\n fieldSelector: column.field,\n descending: false,\n };\n }\n this.sortFieldChange.emit(selector);\n this.currentSortField.next(selector);\n }),\n )\n .subscribe();\n }\n }\n\n public getSortDirection(columnField: string): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === columnField\n ? field.descending\n ? 'desc'\n : 'asc'\n : undefined;\n }),\n );\n }\n\n public getAriaSortDirection(column: SkyGridColumnModel): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === column.field\n ? field.descending\n ? 'descending'\n : 'ascending'\n : column.isSortable\n ? 'none'\n : undefined;\n }),\n );\n }\n\n public getCaretVisibility(columnField: string): Observable<string> {\n return this.currentSortField.pipe(\n distinctUntilChanged(),\n map((field) => {\n return field.fieldSelector === columnField ? 'visible' : 'hidden';\n }),\n );\n }\n\n public getHelpInlineClass(columnField: string): Observable<boolean> {\n return this.getCaretVisibility(columnField).pipe(\n map((visibility: string) => {\n return visibility === 'hidden';\n }),\n );\n }\n\n public onMultiselectCheckboxChange(): void {\n this.emitSelectedRows(SkyGridSelectedRowsSource.CheckboxChange);\n }\n\n public updateColumnHeading(change: SkyGridColumnHeadingModelChange): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.heading = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public updateInlineHelpPopover(\n change: SkyGridColumnInlineHelpPopoverModelChange,\n ): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.inlineHelpPopover = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public updateColumnDescription(\n change: SkyGridColumnDescriptionModelChange,\n ): void {\n const foundColumnModel = this.columns.find((column: SkyGridColumnModel) => {\n return (\n (change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field)\n );\n });\n\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.description = change.value;\n this.changeDetector.markForCheck();\n }\n }\n\n public onResizeColumnStart(event: {\n stopPropagation: () => void;\n preventDefault: () => void;\n pageX?: number;\n }): void {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n\n this.initializeResizeColumn(event);\n\n this.isDraggingResizeHandle = true;\n this.xPosStart = event.pageX;\n this.showResizeBar = true;\n\n // Show visual indicator of where mouse is dragging (resizeBar).\n this.changeDetector.detectChanges();\n this.setResizeBarPosition(event.pageX);\n\n event.preventDefault();\n event.stopPropagation();\n\n const mouseMoveEvent = fromEvent(document, 'mousemove');\n const touchMoveEvent = fromEvent(document, 'touchmove');\n\n merge(mouseMoveEvent, touchMoveEvent)\n .pipe(\n takeWhile(() => {\n return this.isDraggingResizeHandle;\n }),\n )\n .subscribe((moveEvent: any) => {\n this.onResizeHandleMove(moveEvent);\n });\n\n const mouseUpEvent = fromEvent(document, 'mouseup');\n const touchEndEvent = fromEvent(document, 'touchend');\n\n merge(mouseUpEvent, touchEndEvent)\n .pipe(\n takeWhile(() => {\n return this.isDraggingResizeHandle;\n }),\n )\n .subscribe((endEvent: any) => {\n this.onResizeHandleRelease(endEvent);\n });\n }\n\n public onKeydownResizeCol(event: KeyboardEvent): void {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n\n this.initializeResizeColumn(event);\n }\n\n public onInputChangeResizeCol(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newValue = Number(input.value);\n const deltaX = newValue - this.startColumnWidth;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newValue, deltaX);\n const left = input.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n\n public onResizeHandleMove(event: MouseEvent): void {\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n\n if (newColWidth <= this.minColWidth) {\n event.stopPropagation();\n return;\n }\n\n const max = this.getMaxRangeByIndex(this.activeResizeColumnIndex);\n if (this.fit === 'width' && newColWidth > max) {\n event.stopPropagation();\n return;\n }\n\n this.setResizeBarPosition(event.pageX);\n }\n\n public onResizeHandleBlur(): void {\n this.showResizeBar = false;\n }\n\n public onResizeHandleFocus(event: FocusEvent): void {\n this.showResizeBar = true;\n this.changeDetector.detectChanges();\n\n const target = event.target as HTMLElement;\n const left = target.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n\n public onResizeHandleRelease(event: MouseEvent): void {\n this.showResizeBar = false;\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newColWidth, deltaX);\n this.isDraggingResizeHandle = false;\n this.activeResizeColumnIndex = undefined;\n\n event.stopPropagation();\n this.changeDetector.markForCheck();\n }\n\n public onRowClick(event: any, selectedItem: ListItemModel): void {\n /* istanbul ignore else */\n if (this.enableMultiselect) {\n if (\n event.target === event.currentTarget ||\n !this.isInteractiveElement(event)\n ) {\n selectedItem.isSelected = !selectedItem.isSelected;\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.RowClick);\n }\n }\n }\n\n public isRowHighlighted(id: string): boolean {\n if (this.rowHighlightedId) {\n return id === this.rowHighlightedId;\n }\n return false;\n }\n\n public getRowHeight(index: number): string {\n return this.gridAdapter.getRowHeight(this.tableElementRef, index);\n }\n\n public cancelRowDelete(id: string): void {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter(\n (config) => config.id !== id,\n );\n this.rowDeleteCancel.emit({ id: id });\n\n this.destroyRowDelete(id);\n }\n\n public confirmRowDelete(id: string): void {\n this.rowDeleteConfigs.find((config) => config.id === id).pending = true;\n this.rowDeleteConfirm.emit({ id: id });\n }\n\n public getRowDeleteItem(id: string): SkyGridRowDeleteConfig {\n return this.rowDeleteConfigs.find((rowDelete) => rowDelete.id === id);\n }\n\n // Prevent touch devices from inadvertently scrolling grid while dragging columns.\n public onTouchMove(event: any): void {\n event.preventDefault();\n }\n\n public onTopScroll(event: any): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.tableContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.tableContainerElementRef.nativeElement.scrollLeft =\n this.topScrollContainerElementRef.nativeElement.scrollLeft;\n } else {\n this.scrollTriggered = true;\n }\n }\n }\n\n public onGridScroll(event: any): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.topScrollContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.topScrollContainerElementRef.nativeElement.scrollLeft =\n this.tableContainerElementRef.nativeElement.scrollLeft;\n } else {\n this.scrollTriggered = true;\n }\n }\n }\n\n private checkUserColumnWidthsForScroll(): void {\n if (\n !this.showTopScroll &&\n this.columnElementRefs &&\n this.columnElementRefs.length > 0\n ) {\n let columnsWidthTotal = 0;\n const windowSize = this.skyWindow.nativeWindow.innerWidth;\n this.columnElementRefs.forEach((col) => {\n if (!this.showTopScroll) {\n const computedWidth = parseFloat(\n window.getComputedStyle(col.nativeElement).width,\n );\n const offsetWidth = col.nativeElement.offsetWidth;\n const width = Math.max(\n computedWidth || offsetWidth,\n this.minColWidth,\n );\n columnsWidthTotal = columnsWidthTotal + width;\n if (columnsWidthTotal > windowSize) {\n this.showTopScroll = true;\n setTimeout(() => {\n this.changeDetector.markForCheck();\n });\n }\n }\n });\n }\n }\n\n private multiselectSelectAll(): void {\n for (const item of this.items) {\n item.isSelected = true;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectAll);\n }\n\n private multiselectClearAll(): void {\n for (const item of this.items) {\n item.isSelected = false;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.ClearAll);\n }\n\n private handleIncomingMessages(message: SkyGridMessage): void {\n switch (message.type) {\n case SkyGridMessageType.SelectAll:\n this.multiselectSelectAll();\n break;\n\n case SkyGridMessageType.ClearAll:\n this.multiselectClearAll();\n break;\n case SkyGridMessageType.PromptDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.promptDeleteRow) {\n const existingConfig = this.rowDeleteConfigs.find(\n (config) => config.id === message.data.promptDeleteRow.id,\n );\n if (existingConfig) {\n existingConfig.pending = false;\n } else {\n this.rowDeleteConfigs.push({\n id: message.data.promptDeleteRow.id,\n pending: false,\n });\n const overlay = this.overlayService.create({\n enableScroll: true,\n showBackdrop: false,\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n });\n\n overlay.attachTemplate(this.inlineDeleteTemplateRef, {\n $implicit: this.data.find(\n (item) => item.id === message.data.promptDeleteRow.id,\n ),\n });\n\n /**\n * We are manually setting the z-index here because overlays will always be on top of\n * the omnibar. This manual setting is 1 less than the omnibar's z-index of 1000. We\n * discussed changing the overlay service to allow for this but decided against that\n * change at this time due to its niche nature.\n */\n overlay.componentRef.instance.zIndex = '999';\n\n setTimeout(() => {\n const inlineDeleteRef = this.inlineDeleteRefs\n .toArray()\n .find((elRef) => {\n return (\n elRef.nativeElement.id ===\n 'row-delete-ref-' + message.data.promptDeleteRow.id\n );\n });\n const affixer = this.affixService.createAffixer(inlineDeleteRef);\n\n const rowElement: HTMLElement =\n this.tableElementRef.nativeElement.querySelector(\n '[sky-cmp-id=\"' + message.data.promptDeleteRow.id + '\"]',\n );\n\n affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n\n this.rowDeleteContents[message.data.promptDeleteRow.id] = {\n affixer: affixer,\n overlay: overlay,\n };\n });\n }\n }\n break;\n case SkyGridMessageType.AbortDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.abortDeleteRow) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter(\n (config) => config.id !== message.data.abortDeleteRow.id,\n );\n\n this.destroyRowDelete(message.data.abortDeleteRow.id);\n }\n break;\n }\n this.changeDetector.markForCheck();\n }\n\n private onHeaderDrop(newColumnIds: string[]): void {\n // update selected columnIds\n this.selectedColumnIdsSet = true;\n this.selectedColumnIds = newColumnIds;\n\n // mark for check because we are using ChangeDetectionStrategy.onPush\n this.changeDetector.markForCheck();\n }\n\n private setDisplayedColumns(respectHidden = false): void {\n /* sanity check */\n /* istanbul ignore else */\n if (this.columns) {\n if (this.selectedColumnIds !== undefined) {\n // setup displayed columns\n this.displayedColumns = this.selectedColumnIds\n .filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n })\n .map((columnId) => {\n return this.columns.filter((column) => column.id === columnId)[0];\n });\n } else if (respectHidden) {\n this.displayedColumns = this.columns.filter((column) => {\n return !column.hidden;\n });\n } else {\n this.displayedColumns = this.columns;\n }\n }\n }\n\n private transformData(): void {\n // Transform data into object with id and data properties\n if (\n this.data &&\n this.data.length > 0 &&\n this.data[0].id &&\n !this.data[0].data\n ) {\n if (this.multiselectRowId) {\n this.items = this.getGridDataWithSelectedRows();\n } else {\n this.items = this.data.map((item) => new ListItemModel(item.id, item));\n }\n } else {\n this.items = this.data;\n }\n }\n\n private getGridDataWithSelectedRows(): ListItemModel[] {\n const selectedRows = this.getSelectedRows();\n return this.data.map((item) => {\n let checked;\n if (Object.prototype.hasOwnProperty.call(item, this.multiselectRowId)) {\n checked = selectedRows.indexOf(item[this.multiselectRowId]) > -1;\n } else {\n checked = selectedRows.indexOf(item.id) > -1;\n }\n return new ListItemModel(item.id, item, checked);\n });\n }\n\n private applySelectedRows(): void {\n if (this.items && this.items.length > 0 && this.selectedRowIds) {\n for (const item of this.items) {\n item.isSelected = this.selectedRowIds.indexOf(item.id) > -1;\n }\n this.changeDetector.markForCheck();\n }\n }\n\n private setSortHeaders(): void {\n this.currentSortField.next(\n this.sortField || { fieldSelector: '', descending: false },\n );\n }\n\n private getColumnsFromComponent(): void {\n this.columns = this.columnComponents.map((columnComponent) => {\n return new SkyGridColumnModel(columnComponent.template, columnComponent);\n });\n }\n\n private updateColumns(): void {\n this.getColumnsFromComponent();\n\n // This set timeout is necessary to ensure the columns have rendered in the grid\n setTimeout(() => {\n this.checkUserColumnWidthsForScroll();\n });\n }\n\n private resizeColumnByIndex(\n columnIndex: string,\n newColWidth: number,\n deltaX: number,\n ): void {\n const column = this.getColumnModelByIndex(columnIndex);\n\n // Prevent accidental shrinkage below minimum width.\n if (newColWidth <= this.minColWidth) {\n deltaX = deltaX + this.minColWidth - newColWidth;\n newColWidth = this.minColWidth;\n }\n\n // fit=width adds/removes width from the last column\n // fit=scroll adds/removes width from the table\n if (this.fit === 'width') {\n const lastColumn = this.getLastDisplayedColumn();\n\n // Prevent accidental growth that would bump last column off screen.\n const max = this.getMaxRangeByIndex(columnIndex);\n if (newColWidth > max) {\n newColWidth = max;\n deltaX = max - this.startColumnWidth;\n }\n column.width = newColWidth;\n lastColumn.width = lastColumn.width - deltaX;\n this.updateMaxRange();\n } else {\n this.gridAdapter.setStyle(\n this.tableElementRef,\n 'width',\n `${this.tableWidth + deltaX}px`,\n );\n column.width = newColWidth;\n }\n\n this.changeDetector.detectChanges();\n this.columnWidthChange.emit(this.getColumnWidthModelChange());\n }\n\n private initColumnWidths(): void {\n // Establish table width.\n this.showTopScroll = true;\n\n // Set column widths based on the width initially given by the browser.\n // computedWidth prevents accidental overflow for browsers with sub-pixel widths.\n this.columnElementRefs.forEach((col, index) => {\n const computedWidth = parseFloat(\n window.getComputedStyle(col.nativeElement).width,\n );\n const offsetWidth = col.nativeElement.offsetWidth;\n /* istanbul ignore next */\n this.getColumnModelByIndex(index).width = Math.max(\n computedWidth || offsetWidth,\n this.minColWidth,\n );\n });\n\n // 'scroll' tables should be allowed to expand outside of their constraints.\n if (this.fit === 'scroll') {\n this.gridAdapter.setStyle(this.tableElementRef, 'min-width', 'auto');\n }\n\n // Update max limits for input ranges.\n if (this.fit === 'width') {\n this.updateMaxRange();\n }\n\n this.changeDetector.detectChanges();\n }\n\n private transferColumnWidths(\n oldColumns: SkyGridColumnModel[],\n newColumns: SkyGridColumnModel[],\n ): void {\n /* sanity check */\n /* istanbul ignore else */\n if (oldColumns && newColumns) {\n for (const oldColumn of oldColumns) {\n if (oldColumn.width) {\n const matchingColumn = newColumns.find(\n (newColumn) => oldColumn.id === newColumn.id,\n );\n if (matchingColumn && !matchingColumn.width) {\n matchingColumn.width = oldColumn.width;\n }\n }\n }\n }\n this.changeDetector.markForCheck();\n }\n\n private getColumnWidthModelChange(): SkyGridColumnWidthModelChange[] {\n const columnWidthModelChange = new Array<SkyGridColumnWidthModelChange>();\n this.columns.forEach((column) => {\n columnWidthModelChange.push({\n id: column.id,\n field: column.field,\n width: column.width,\n });\n });\n return columnWidthModelChange;\n }\n\n private updateMaxRange(): void {\n const leftoverWidth =\n this.getLastDisplayedColumn().width - this.minColWidth;\n this.displayedColumns.forEach((column, index) => {\n const newMaxRange = column.width + leftoverWidth;\n const rangeInput = this.getRangeInputByIndex(index);\n rangeInput.nativeElement.max = newMaxRange;\n rangeInput.nativeElement.setAttribute('aria-valuemax', newMaxRange);\n });\n }\n\n private initializeResizeColumn(event: any): void {\n const clickTarget = event.target as HTMLElement;\n this.activeResizeColumnIndex = clickTarget.getAttribute('sky-cmp-index');\n const column = this.getColumnModelByIndex(this.activeResizeColumnIndex);\n this.startColumnWidth = column.width;\n }\n\n private resetTableWidth(): void {\n this.skyWindow.nativeWindow.setTimeout(() => {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `auto`);\n this.changeDetector.detectChanges();\n this.gridAdapter.setStyle(\n this.tableElementRef,\n 'width',\n `${this.tableWidth}px`,\n );\n this.changeDetector.detectChanges();\n });\n }\n\n private getRangeInputByIndex(index: string | number): ElementRef {\n return this.columnRangeInputElementRefs.find(\n (input) =>\n input.nativeElement.getAttribute('sky-cmp-index') === index.toString(),\n );\n }\n\n private getColumnModelByIndex(index: string | number): SkyGridColumnModel {\n return this.displayedColumns[Number(index)];\n }\n\n private getMaxRangeByIndex(index: string): number {\n const columnElementRef = this.columnElementRefs.find(\n (th) => th.nativeElement.getAttribute('sky-cmp-index') === index,\n );\n const rangeInput = columnElementRef.nativeElement.querySelector(\n '.sky-grid-column-input-aria-only',\n );\n return Number(rangeInput.max);\n }\n\n private getLastDisplayedColumn(): SkyGridColumnModel {\n return this.getColumnModelByIndex(this.displayedColumns.length - 1);\n }\n\n private addDelimiter(text: string[], delimiter: string): string {\n return text.filter((val) => val).join(delimiter);\n }\n\n private destroyRowDelete(id: string): void {\n const rowDeleteContents = this.rowDeleteContents[id];\n /* istanbul ignore else */\n if (rowDeleteContents) {\n rowDeleteContents.affixer.destroy();\n this.overlayService.close(rowDeleteContents.overlay);\n delete this.rowDeleteContents[id];\n }\n }\n\n private emitSelectedRows(source: SkyGridSelectedRowsSource): void {\n const selectedRows: SkyGridSelectedRowsModelChange = {\n selectedRowIds: this.getSelectedRows(),\n source: source,\n };\n this.multiselectSelectionChange.emit(selectedRows);\n }\n\n private getSelectedRows(): any[] {\n return this.items\n .filter((item) => {\n return item.isSelected;\n })\n .map((item) => {\n if (\n Object.prototype.hasOwnProperty.call(item.data, this.multiselectRowId)\n ) {\n return item.data[this.multiselectRowId];\n }\n return item.id;\n });\n }\n\n private isInteractiveElement(event: any): any {\n const interactiveElSelectors = `\n a,\n button,\n input,\n label,\n option,\n select,\n textarea,\n details,\n dialog,\n menu,\n menuitem,\n summary`;\n return event.target.closest(interactiveElSelectors);\n }\n\n private setResizeBarPosition(xPosition: number): void {\n const parentScroll = this.tableContainerElementRef.nativeElement.scrollLeft;\n const resizeBarX =\n xPosition -\n this.tableElementRef.nativeElement.getBoundingClientRect().left -\n parentScroll;\n this.gridAdapter.setStyle(this.resizeBar, 'left', resizeBarX + 'px');\n }\n\n private applyUserConfig(): Promise<void> {\n return new Promise<void>((resolve) => {\n this.uiConfigService\n .getConfig(this.settingsKey)\n .pipe(take(1))\n .subscribe(\n (config: SkyGridUIConfig) => {\n /* istanbul ignore else */\n if (config && config.selectedColumnIds) {\n // Remove any columnIds that don't exist in the current data set.\n this.selectedColumnIds = config.selectedColumnIds.filter((id) =>\n this.columns.find((column) => column.id === id),\n );\n this.changeDetector.markForCheck();\n }\n\n resolve();\n },\n () => {\n resolve();\n },\n );\n });\n }\n\n private setUserConfig(config: SkyGridUIConfig): void {\n if (!this.settingsKey) {\n return;\n }\n\n this.uiConfigService\n .setConfig(this.settingsKey, config)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n (err) => {\n console.warn('Could not save grid settings.');\n console.warn(err);\n },\n );\n }\n\n private initColumns(): void {\n /* istanbul ignore else */\n if (this.columnComponents.length !== 0 || this.columns !== undefined) {\n /* istanbul ignore else */\n /* sanity check */\n if (this.columnComponents.length > 0) {\n this.getColumnsFromComponent();\n }\n\n this.transformData();\n this.setDisplayedColumns(true);\n this.changeDetector.markForCheck();\n }\n\n // Watch for added/removed columns:\n this.subscriptions.push(\n this.columnComponents.changes.subscribe(() => this.updateColumns()),\n );\n\n // Watch for column heading changes:\n this.columnComponents.forEach((comp: SkyGridColumnComponent) => {\n this.subscriptions.push(\n comp.headingModelChanges.subscribe(\n (change: SkyGridColumnHeadingModelChange) => {\n this.updateColumnHeading(change);\n },\n ),\n );\n this.subscriptions.push(\n comp.descriptionModelChanges.subscribe(\n (change: SkyGridColumnDescriptionModelChange) => {\n this.updateColumnDescription(change);\n },\n ),\n );\n this.subscriptions.push(\n comp.inlineHelpPopoverModelChanges.subscribe(\n (change: SkyGridColumnInlineHelpPopoverModelChange) => {\n this.updateInlineHelpPopover(change);\n },\n ),\n );\n });\n }\n\n private arraysEqual(arrayA: any[], arrayB: any[]): boolean {\n return (\n arrayA.length === arrayB.length &&\n arrayA.every((value, index) => value === arrayB[index])\n );\n }\n}\n","<div class=\"sky-grid\">\n @if (showTopScroll) {\n <div\n #topScrollContainer\n class=\"sky-grid-top-scroll-container\"\n (scroll)=\"onTopScroll($event)\"\n >\n <div\n class=\"sky-grid-top-scroll\"\n [style.width.px]=\"getTopScrollWidth()\"\n ></div>\n </div>\n }\n <div\n #gridContainer\n class=\"sky-grid-table-container\"\n [style.height.px]=\"height\"\n [style.width.px]=\"width\"\n (scroll)=\"onGridScroll($event)\"\n >\n <table #gridTable class=\"sky-grid-table\" [ngClass]=\"getTableClassNames()\">\n <thead>\n <tr [dragula]=\"dragulaGroupName\">\n @if (enableMultiselect) {\n <th\n class=\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\"\n scope=\"col\"\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <span class=\"screen-reader-only\">\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\n </span>\n </th>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <th\n #gridCol\n class=\"sky-grid-heading sky-field-label\"\n scope=\"col\"\n [attr.sky-cmp-index]=\"i\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n [attr.aria-sort]=\"getAriaSortDirection(column) | async\"\n [id]=\"'sky-grid-' + gridId + '-column-' + i\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n [tabIndex]=\"column.isSortable ? 0 : -1\"\n (mouseup)=\"sortByColumn(column)\"\n (keydown)=\"onKeydown($event, column)\"\n (touchmove)=\"onTouchMove($event)\"\n >\n <div\n class=\"overflow\"\n [ngClass]=\"getTableHeaderClassNames(column)\"\n [style.max-width.px]=\"column.width - 1\"\n [style.width.px]=\"column.width - 1\"\n >\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\n <span class=\"sky-grid-header-caret-hidden-spacing\"></span>\n }\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\n <span class=\"sky-grid-header-text\">{{\n column.heading?.trim()\n }}</span>\n <sky-icon\n class=\"sky-grid-heading-sort\"\n variant=\"solid\"\n [ngClass]=\"\n 'sky-grid-heading-sort-' +\n (getCaretVisibility(column.field) | async)\n \"\n [iconName]=\"getCaretIconNames(column)\"\n />\n @if (column.inlineHelpPopover) {\n <sky-help-inline\n [ngClass]=\"{\n 'sky-grid-help-inline-sort-hidden':\n getHelpInlineClass(column.field) | async\n }\"\n [skyPopover]=\"column.inlineHelpPopover\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\"\n />\n }\n </div>\n @if ((fit === 'width' && !last) || fit === 'scroll') {\n <span\n aria-hidden=\"true\"\n class=\"sky-grid-resize-handle\"\n tabindex=\"-1\"\n [attr.sky-cmp-index]=\"i\"\n (mousedown)=\"onResizeColumnStart($event)\"\n (touchstart)=\"onResizeColumnStart($event)\"\n >\n </span>\n }\n <input\n #colSizeRange\n aria-label=\"Width of column\"\n class=\"sky-grid-column-input-aria-only\"\n role=\"slider\"\n type=\"range\"\n [attr.aria-controls]=\"'sky-grid-' + gridId + '-column-' + i\"\n [attr.aria-valuemin]=\"minColWidth\"\n [attr.aria-valuemax]=\"maxColWidth\"\n [attr.aria-valuenow]=\"column.width\"\n [attr.sky-cmp-index]=\"i\"\n [min]=\"minColWidth\"\n [max]=\"maxColWidth\"\n [step]=\"columnResizeStep\"\n [(ngModel)]=\"column.width\"\n (blur)=\"onResizeHandleBlur()\"\n (focus)=\"onResizeHandleFocus($event)\"\n (keydown)=\"onKeydownResizeCol($event)\"\n (change)=\"onInputChangeResizeCol($event)\"\n />\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"sky-grid-tbody\">\n @for (item of items; track item; let i = $index) {\n <tr\n class=\"sky-grid-row\"\n [attr.aria-current]=\"isRowHighlighted(item.id) ? true : null\"\n [attr.sky-cmp-id]=\"item.id\"\n [ngClass]=\"{\n 'sky-grid-multiselect-selected-row': item.isSelected,\n 'sky-grid-multiselect-row': enableMultiselect,\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\n }\"\n (click)=\"onRowClick($event, item)\"\n >\n @if (enableMultiselect) {\n <td class=\"sky-grid-multiselect-cell sky-grid-header-locked\">\n <div\n [style.max-width.px]=\"minColWidth\"\n [style.width.px]=\"minColWidth\"\n >\n <sky-checkbox\n [label]=\"\n 'skyux_grid_multiselect_select_row' | skyLibResources\n \"\n [(ngModel)]=\"item.isSelected\"\n (change)=\"onMultiselectCheckboxChange()\"\n />\n </div>\n </td>\n }\n @for (\n column of displayedColumns;\n track column;\n let last = $last;\n let i = $index\n ) {\n <td\n class=\"sky-grid-cell\"\n [ngClass]=\"'sky-grid-column-alignment-' + column.alignment\"\n [style.max-width.px]=\"column.width\"\n [style.width.px]=\"column.width\"\n >\n <sky-grid-cell\n [skyHighlight]=\"\n !column.excludeFromHighlighting ? highlightText : undefined\n \"\n [template]=\"column.template || defaultCellTemplate\"\n [fieldSelector]=\"column.field\"\n [item]=\"item\"\n [columnId]=\"column.id\"\n [attr.sky-cmp-id]=\"column.id || column.field\"\n />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (showResizeBar) {\n <div\n #resizeBar\n aria-hidden=\"true\"\n class=\"sky-grid-resize-bar\"\n tabindex=\"-1\"\n ></div>\n }\n </div>\n</div>\n\n<ng-template #defaultCellTemplate let-row=\"row\" let-value=\"value\">{{\n value\n}}</ng-template>\n\n<ng-template #inlineDeleteTemplateRef let-item>\n <div\n #inlineDeleteRef\n [id]=\"'row-delete-ref-' + item.id\"\n [ngStyle]=\"{\n height: getRowHeight(0),\n position: 'fixed',\n width: tableWidth + 'px'\n }\"\n >\n <sky-inline-delete\n [pending]=\"getRowDeleteItem(item.id).pending\"\n (cancelTriggered)=\"cancelRowDelete(item.id)\"\n (deleteTriggered)=\"confirmRowDelete(item.id)\"\n />\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule } from '@skyux/indicators';\nimport { SkyInlineDeleteModule } from '@skyux/layout';\nimport { SkyPopoverModule } from '@skyux/popovers';\n\nimport { DragulaModule } from 'ng2-dragula';\n\nimport { SkyGridsResourcesModule } from '../shared/sky-grids-resources.module';\n\nimport { SkyGridCellComponent } from './grid-cell.component';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridComponent } from './grid.component';\n\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\n@NgModule({\n declarations: [\n SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent,\n ],\n imports: [\n CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule,\n ],\n exports: [SkyGridComponent, SkyGridColumnComponent],\n})\nexport class SkyGridModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3.SkyGridAdapterService","i12.SkyGridCellComponent"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyux/grids",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.13.0",
|
|
4
4
|
"author": "Blackbaud, Inc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"blackbaud",
|
|
@@ -19,15 +19,15 @@
|
|
|
19
19
|
"@angular/common": "^20.3.15",
|
|
20
20
|
"@angular/core": "^20.3.15",
|
|
21
21
|
"@angular/forms": "^20.3.15",
|
|
22
|
-
"@skyux/core": "13.
|
|
23
|
-
"@skyux/forms": "13.
|
|
24
|
-
"@skyux/help-inline": "13.
|
|
25
|
-
"@skyux/i18n": "13.
|
|
26
|
-
"@skyux/icon": "13.
|
|
27
|
-
"@skyux/indicators": "13.
|
|
28
|
-
"@skyux/layout": "13.
|
|
29
|
-
"@skyux/list-builder-common": "13.
|
|
30
|
-
"@skyux/popovers": "13.
|
|
22
|
+
"@skyux/core": "13.13.0",
|
|
23
|
+
"@skyux/forms": "13.13.0",
|
|
24
|
+
"@skyux/help-inline": "13.13.0",
|
|
25
|
+
"@skyux/i18n": "13.13.0",
|
|
26
|
+
"@skyux/icon": "13.13.0",
|
|
27
|
+
"@skyux/indicators": "13.13.0",
|
|
28
|
+
"@skyux/layout": "13.13.0",
|
|
29
|
+
"@skyux/list-builder-common": "13.13.0",
|
|
30
|
+
"@skyux/popovers": "13.13.0"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@types/dragula": "2.1.36",
|