@skyux/data-manager 6.12.0 → 6.15.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.
@@ -4914,7 +4914,7 @@
4914
4914
  {
4915
4915
  "fileName": "data-manager-demo.component.html",
4916
4916
  "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-manager-demo.component.html",
4917
- "rawContents": "<sky-data-manager>\n <sky-data-manager-toolbar>\n <!-- <sky-data-manager-toolbar-primary-item *ngIf=\"activeViewId === 'repeaterView'\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n (click)=\"searchSo()\"\n >\n Set search text to \"so\"\n </button>\n </sky-data-manager-toolbar-primary-item> -->\n </sky-data-manager-toolbar>\n\n <app-data-view-repeater-demo [items]=\"items\"> </app-data-view-repeater-demo>\n <app-data-view-cards-demo [items]=\"items\"> </app-data-view-cards-demo>\n</sky-data-manager>\n"
4917
+ "rawContents": "<sky-data-manager>\n <sky-data-manager-toolbar>\n <!-- <sky-data-manager-toolbar-primary-item *ngIf=\"activeViewId === 'repeaterView'\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n (click)=\"searchSo()\"\n >\n Set search text to \"so\"\n </button>\n </sky-data-manager-toolbar-primary-item> -->\n </sky-data-manager-toolbar>\n\n <app-data-view-repeater-demo [items]=\"items\"> </app-data-view-repeater-demo>\n <app-data-view-grid-demo [items]=\"items\"></app-data-view-grid-demo>\n</sky-data-manager>\n"
4918
4918
  },
4919
4919
  {
4920
4920
  "fileName": "data-manager-demo.component.ts",
@@ -4924,27 +4924,27 @@
4924
4924
  {
4925
4925
  "fileName": "data-manager-demo.module.ts",
4926
4926
  "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-manager-demo.module.ts",
4927
- "rawContents": "import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyDataManagerModule } from '@skyux/data-manager';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyCardModule, SkyToolbarModule } from '@skyux/layout';\nimport { SkyRepeaterModule } from '@skyux/lists';\nimport { SkyModalModule } from '@skyux/modals';\n\nimport { DataManagerFiltersModalDemoComponent } from './data-filter-modal.component';\nimport { DataManagerDemoComponent } from './data-manager-demo.component';\nimport { DataViewCardsDemoComponent } from './data-view-cards.component';\nimport { DataViewRepeaterDemoComponent } from './data-view-repeater.component';\n\n@NgModule({\n declarations: [\n DataManagerDemoComponent,\n DataManagerFiltersModalDemoComponent,\n DataViewCardsDemoComponent,\n DataViewRepeaterDemoComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyCardModule,\n SkyCheckboxModule,\n SkyDataManagerModule,\n SkyModalModule,\n SkyRepeaterModule,\n SkyToolbarModule,\n ],\n exports: [DataManagerDemoComponent],\n})\nexport class DataManagerDemoModule {}\n"
4927
+ "rawContents": "import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAgGridModule } from '@skyux/ag-grid';\nimport { SkyDataManagerModule } from '@skyux/data-manager';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyRepeaterModule } from '@skyux/lists';\nimport { SkyModalModule } from '@skyux/modals';\n\nimport { AgGridModule } from 'ag-grid-angular';\n\nimport { DataManagerFiltersModalDemoComponent } from './data-filter-modal.component';\nimport { DataManagerDemoComponent } from './data-manager-demo.component';\nimport { DataViewGridDemoComponent } from './data-view-grid.component';\nimport { DataViewRepeaterDemoComponent } from './data-view-repeater.component';\n\n@NgModule({\n declarations: [\n DataManagerDemoComponent,\n DataManagerFiltersModalDemoComponent,\n DataViewRepeaterDemoComponent,\n DataViewGridDemoComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyCheckboxModule,\n SkyDataManagerModule,\n SkyAgGridModule,\n AgGridModule,\n SkyModalModule,\n SkyRepeaterModule,\n SkyToolbarModule,\n ],\n exports: [DataManagerDemoComponent],\n})\nexport class DataManagerDemoModule {}\n"
4928
4928
  },
4929
4929
  {
4930
- "fileName": "data-view-cards.component.html",
4931
- "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-view-cards.component.html",
4932
- "rawContents": "<sky-data-view [viewId]=\"viewConfig.id\">\n <div style=\"margin: 10px\">\n <sky-card size=\"small\" *ngFor=\"let item of displayedItems\">\n <sky-card-title>{{ item.name }}</sky-card-title>\n <sky-card-content>{{ item.description }}</sky-card-content>\n </sky-card>\n </div>\n\n <button type=\"button\" class=\"sky-btn sky-btn-primary\" (click)=\"searchBe()\">\n Set search text to \"be\"\n </button>\n</sky-data-view>\n"
4930
+ "fileName": "data-view-grid.component.html",
4931
+ "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-view-grid.component.html",
4932
+ "rawContents": "<sky-data-view skyAgGridDataManagerAdapter [viewId]=\"viewConfig.id\">\n <sky-ag-grid-wrapper *ngIf=\"isActive && gridInitialized\">\n <ag-grid-angular\n [gridOptions]=\"gridOptions\"\n [overlayNoRowsTemplate]=\"noRowsTemplate\"\n [rowData]=\"displayedItems\"\n (rowSelected)=\"onRowSelected($event)\"\n >\n </ag-grid-angular>\n </sky-ag-grid-wrapper>\n</sky-data-view>\n"
4933
4933
  },
4934
4934
  {
4935
- "fileName": "data-view-cards.component.ts",
4936
- "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-view-cards.component.ts",
4937
- "rawContents": "import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport {\n SkyDataManagerService,\n SkyDataManagerState,\n SkyDataViewConfig,\n} from '@skyux/data-manager';\n\n@Component({\n selector: 'app-data-view-cards-demo',\n templateUrl: './data-view-cards.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataViewCardsDemoComponent implements OnInit {\n @Input()\n public items: any[];\n\n public dataState: SkyDataManagerState;\n public displayedItems: any[];\n public viewId = 'cardsView';\n public viewConfig: SkyDataViewConfig = {\n id: this.viewId,\n name: 'Cards View',\n icon: 'th-large',\n sortEnabled: true,\n searchEnabled: true,\n filterButtonEnabled: true,\n showSortButtonText: true,\n };\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private dataManagerService: SkyDataManagerService\n ) {}\n\n public ngOnInit(): void {\n this.displayedItems = this.items;\n\n this.dataManagerService.initDataView(this.viewConfig);\n\n this.dataManagerService\n .getDataStateUpdates(this.viewId)\n .subscribe((state) => {\n this.dataState = state;\n this.displayedItems = this.sortItems(\n this.filterItems(this.searchItems(this.items))\n );\n this.changeDetector.detectChanges();\n });\n }\n\n public sortItems(items: any[]): any[] {\n let result = items;\n const sortOption = this.dataState && this.dataState.activeSortOption;\n\n if (sortOption) {\n result = items.sort(function (a: any, b: any) {\n const descending = sortOption.descending ? -1 : 1,\n sortProperty = sortOption.propertyName;\n\n if (a[sortProperty] > b[sortProperty]) {\n return descending;\n } else if (a[sortProperty] < b[sortProperty]) {\n return -1 * descending;\n } else {\n return 0;\n }\n });\n }\n\n return result;\n }\n\n public searchItems(items: any[]): any[] {\n let searchedItems = items;\n const searchText =\n this.dataState && this.dataState.searchText?.toUpperCase();\n\n if (searchText) {\n searchedItems = items.filter(function (item: any) {\n let property: any;\n\n for (property in item) {\n if (\n Object.prototype.hasOwnProperty.call(item, property) &&\n (property === 'name' || property === 'description')\n ) {\n const propertyText = item[property].toUpperCase();\n if (propertyText.indexOf(searchText) > -1) {\n return true;\n }\n }\n }\n\n return false;\n });\n }\n return searchedItems;\n }\n\n public filterItems(items: any[]): any[] {\n let filteredItems = items;\n const filterData = this.dataState && this.dataState.filterData;\n\n if (filterData && filterData.filters) {\n const filters = filterData.filters;\n filteredItems = items.filter((item: any) => {\n if (\n ((filters.hideOrange && item.color !== 'orange') ||\n !filters.hideOrange) &&\n ((filters.type !== 'any' && item.type === filters.type) ||\n !filters.type ||\n filters.type === 'any')\n ) {\n return true;\n }\n return false;\n });\n }\n\n return filteredItems;\n }\n\n public searchBe(): void {\n this.dataState.searchText = 'be';\n this.dataManagerService.updateDataState(this.dataState, 'searchButton');\n }\n}\n"
4935
+ "fileName": "data-view-grid.component.ts",
4936
+ "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-view-grid.component.ts",
4937
+ "rawContents": "import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { SkyAgGridService, SkyCellType } from '@skyux/ag-grid';\nimport {\n SkyDataManagerService,\n SkyDataManagerState,\n SkyDataViewConfig,\n} from '@skyux/data-manager';\n\nimport {\n ColDef,\n ColumnApi,\n ColumnState,\n GridApi,\n GridOptions,\n GridReadyEvent,\n RowSelectedEvent,\n} from 'ag-grid-community';\n\n@Component({\n selector: 'app-data-view-grid-demo',\n templateUrl: './data-view-grid.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataViewGridDemoComponent implements OnInit {\n @Input()\n public items: any[] = [];\n\n public viewId = 'gridView';\n\n public columnDefs: ColDef[] = [\n {\n colId: 'selected',\n field: 'selected',\n headerName: '',\n maxWidth: 50,\n type: SkyCellType.RowSelector,\n suppressMovable: true,\n lockPosition: true,\n lockVisible: true,\n },\n {\n colId: 'name',\n field: 'name',\n headerName: 'Fruit name',\n width: 150,\n },\n {\n colId: 'description',\n field: 'description',\n headerName: 'Description',\n },\n ];\n\n public dataState = new SkyDataManagerState({});\n\n public viewConfig: SkyDataViewConfig = {\n id: this.viewId,\n name: 'Grid View',\n icon: 'table',\n searchEnabled: true,\n sortEnabled: true,\n multiselectToolbarEnabled: true,\n columnPickerEnabled: true,\n filterButtonEnabled: true,\n columnOptions: [\n {\n id: 'selected',\n alwaysDisplayed: true,\n label: 'selected',\n },\n {\n id: 'name',\n label: 'Fruit name',\n description: 'The name of the fruit.',\n },\n {\n id: 'description',\n label: 'Description',\n description: 'Some information about the fruit.',\n },\n ],\n };\n\n public columnApi?: ColumnApi;\n public displayedItems: any[] = [];\n public gridApi?: GridApi;\n public gridInitialized = false;\n public gridOptions!: GridOptions;\n public noRowsTemplate: string;\n public isActive = false;\n\n constructor(\n private agGridService: SkyAgGridService,\n private changeDetector: ChangeDetectorRef,\n private dataManagerService: SkyDataManagerService\n ) {\n this.noRowsTemplate = `<div class=\"sky-font-deemphasized\">No results found.</div>`;\n }\n\n public ngOnInit(): void {\n this.displayedItems = this.items;\n\n this.dataManagerService.initDataView(this.viewConfig);\n\n this.gridOptions = this.agGridService.getGridOptions({\n gridOptions: {\n columnDefs: this.columnDefs,\n onGridReady: this.onGridReady.bind(this),\n },\n });\n\n this.dataManagerService\n .getDataStateUpdates(this.viewId)\n .subscribe((state) => {\n this.dataState = state;\n this.setInitialColumnOrder();\n this.updateData();\n this.changeDetector.detectChanges();\n });\n\n this.dataManagerService.getActiveViewIdUpdates().subscribe((id) => {\n this.isActive = id === this.viewId;\n this.changeDetector.detectChanges();\n });\n }\n\n public updateData(): void {\n this.sortItems();\n this.displayedItems = this.filterItems(this.searchItems(this.items));\n\n if (this.dataState.onlyShowSelected) {\n this.displayedItems = this.displayedItems.filter((item) => item.selected);\n }\n\n if (this.displayedItems.length > 0) {\n this.gridApi?.hideOverlay();\n } else {\n this.gridApi?.showNoRowsOverlay();\n }\n }\n\n public setInitialColumnOrder(): void {\n const viewState = this.dataState.getViewStateById(this.viewId);\n const visibleColumns = viewState.displayedColumnIds;\n\n this.columnDefs.sort((col1, col2) => {\n const col1Index = visibleColumns.findIndex(\n (colId: string) => colId === col1.colId\n );\n const col2Index = visibleColumns.findIndex(\n (colId: string) => colId === col2.colId\n );\n\n if (col1Index === -1) {\n col1.hide = true;\n return 0;\n } else if (col2Index === -1) {\n col2.hide = true;\n return 0;\n } else {\n return col1Index - col2Index;\n }\n });\n\n this.gridInitialized = true;\n }\n\n public onGridReady(event: GridReadyEvent): void {\n this.columnApi = event.columnApi;\n this.gridApi = event.api;\n this.gridApi.sizeColumnsToFit();\n this.updateData();\n }\n\n public onRowSelected(rowSelectedEvent: RowSelectedEvent): void {\n if (!rowSelectedEvent.data.selected) {\n this.updateData();\n }\n }\n\n public sortItems(): void {\n const sortOption = this.dataState.activeSortOption;\n if (this.columnApi && sortOption) {\n const sort: ColumnState[] = [\n {\n colId: sortOption.propertyName,\n sort: sortOption.descending ? 'desc' : 'asc',\n },\n ];\n\n this.columnApi.applyColumnState({\n state: sort,\n });\n }\n }\n\n public searchItems(items: any[]): any[] {\n let searchedItems = items;\n const searchText = this.dataState && this.dataState.searchText;\n\n if (searchText) {\n searchedItems = items.filter(function (item: any) {\n let property: any;\n\n for (property in item) {\n if (\n Object.prototype.hasOwnProperty.call(item, property) &&\n (property === 'name' || property === 'description')\n ) {\n const propertyText = item[property].toLowerCase();\n if (propertyText.indexOf(searchText) > -1) {\n return true;\n }\n }\n }\n\n return false;\n });\n }\n return searchedItems;\n }\n\n public filterItems(items: any[]): any[] {\n let filteredItems = items;\n const filterData = this.dataState && this.dataState.filterData;\n\n if (filterData && filterData.filters) {\n const filters = filterData.filters;\n filteredItems = items.filter((item: any) => {\n return (\n ((filters.hideOrange && item.color !== 'orange') ||\n !filters.hideOrange) &&\n ((filters.type !== 'any' && item.type === filters.type) ||\n !filters.type ||\n filters.type === 'any')\n );\n });\n }\n\n return filteredItems;\n }\n}\n"
4938
4938
  },
4939
4939
  {
4940
4940
  "fileName": "data-view-repeater.component.html",
4941
4941
  "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-view-repeater.component.html",
4942
- "rawContents": "<sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater *ngIf=\"isActive\" expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let item of displayedItems\"\n selectable=\"true\"\n [(isSelected)]=\"item.selected\"\n (isSelectedChange)=\"onItemSelect($event, item)\"\n >\n <sky-repeater-item-title>\n {{ item.name }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n <div>\n {{ item.description }}\n </div>\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n</sky-data-view>\n"
4942
+ "rawContents": "<sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater *ngIf=\"isActive\" expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let item of displayedItems\"\n [selectable]=\"true\"\n [(isSelected)]=\"item.selected\"\n (isSelectedChange)=\"onItemSelect($event, item)\"\n >\n <sky-repeater-item-title>\n {{ item.name }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n <div>\n {{ item.description }}\n </div>\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n</sky-data-view>\n"
4943
4943
  },
4944
4944
  {
4945
4945
  "fileName": "data-view-repeater.component.ts",
4946
4946
  "filePath": "/projects/data-manager/documentation/code-examples/data-manager/basic/data-view-repeater.component.ts",
4947
- "rawContents": "import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport {\n SkyDataManagerService,\n SkyDataManagerState,\n SkyDataViewConfig,\n} from '@skyux/data-manager';\n\n@Component({\n selector: 'app-data-view-repeater-demo',\n templateUrl: './data-view-repeater.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataViewRepeaterDemoComponent implements OnInit {\n @Input()\n public items: any[];\n\n public dataState = new SkyDataManagerState({});\n\n public displayedItems: any[];\n\n public isActive: boolean;\n\n public viewId = 'repeaterView';\n\n public viewConfig: SkyDataViewConfig = {\n id: this.viewId,\n name: 'Repeater View',\n icon: 'list',\n searchEnabled: true,\n filterButtonEnabled: true,\n multiselectToolbarEnabled: true,\n onClearAllClick: this.clearAll.bind(this),\n onSelectAllClick: this.selectAll.bind(this),\n };\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private dataManagerService: SkyDataManagerService\n ) {}\n\n public ngOnInit(): void {\n this.displayedItems = this.items;\n\n this.dataManagerService.initDataView(this.viewConfig);\n\n this.dataManagerService\n .getDataStateUpdates(this.viewId)\n .subscribe((state) => {\n this.dataState = state;\n this.updateData();\n });\n\n this.dataManagerService.getActiveViewIdUpdates().subscribe((id) => {\n this.isActive = id === this.viewId;\n });\n }\n\n public updateData(): void {\n const selectedIds = this.dataState.selectedIds || [];\n this.items.forEach((item) => {\n item.selected = selectedIds.indexOf(item.id) !== -1;\n });\n this.displayedItems = this.filterItems(this.searchItems(this.items));\n\n if (this.dataState.onlyShowSelected) {\n this.displayedItems = this.displayedItems.filter((item) => item.selected);\n }\n\n this.changeDetector.detectChanges();\n }\n\n public searchItems(items: any[]): any[] {\n let searchedItems = items;\n const searchText =\n this.dataState && this.dataState.searchText?.toUpperCase();\n\n if (searchText) {\n searchedItems = items.filter(function (item: any) {\n let property: any;\n\n for (property in item) {\n if (\n Object.prototype.hasOwnProperty.call(item, property) &&\n (property === 'name' || property === 'description')\n ) {\n const propertyText = item[property].toUpperCase();\n if (propertyText.indexOf(searchText) > -1) {\n return true;\n }\n }\n }\n\n return false;\n });\n }\n return searchedItems;\n }\n\n public filterItems(items: any[]): any[] {\n let filteredItems = items;\n const filterData = this.dataState && this.dataState.filterData;\n\n if (filterData && filterData.filters) {\n const filters = filterData.filters;\n filteredItems = items.filter((item: any) => {\n if (\n ((filters.hideOrange && item.color !== 'orange') ||\n !filters.hideOrange) &&\n ((filters.type !== 'any' && item.type === filters.type) ||\n !filters.type ||\n filters.type === 'any')\n ) {\n return true;\n }\n return false;\n });\n }\n\n return filteredItems;\n }\n\n public selectAll(): void {\n const selectedIds = this.dataState.selectedIds || [];\n\n this.displayedItems.forEach((item) => {\n if (!item.selected) {\n item.selected = true;\n selectedIds.push(item.id);\n }\n });\n\n this.dataState.selectedIds = selectedIds;\n this.dataManagerService.updateDataState(this.dataState, this.viewId);\n this.changeDetector.markForCheck();\n }\n\n public clearAll(): void {\n const selectedIds = this.dataState.selectedIds || [];\n\n this.displayedItems.forEach((item) => {\n if (item.selected) {\n const itemIndex = selectedIds.indexOf(item.id);\n item.selected = false;\n selectedIds.splice(itemIndex, 1);\n }\n });\n\n if (this.dataState.onlyShowSelected) {\n this.displayedItems = [];\n }\n\n this.dataState.selectedIds = selectedIds;\n this.dataManagerService.updateDataState(this.dataState, this.viewId);\n this.changeDetector.markForCheck();\n }\n\n public onItemSelect(isSelected: boolean, item: any): void {\n const selectedItems = this.dataState.selectedIds || [];\n const itemIndex = selectedItems.indexOf(item.id);\n\n if (isSelected && itemIndex === -1) {\n selectedItems.push(item.id);\n } else if (!isSelected && itemIndex !== -1) {\n selectedItems.splice(itemIndex, 1);\n }\n\n this.dataState.selectedIds = selectedItems;\n this.dataManagerService.updateDataState(this.dataState, this.viewId);\n if (this.dataState.onlyShowSelected && this.displayedItems) {\n this.displayedItems = this.displayedItems.filter((itm) => itm.selected);\n this.changeDetector.markForCheck();\n }\n }\n}\n"
4947
+ "rawContents": "import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport {\n SkyDataManagerService,\n SkyDataManagerState,\n SkyDataViewConfig,\n} from '@skyux/data-manager';\n\n@Component({\n selector: 'app-data-view-repeater-demo',\n templateUrl: './data-view-repeater.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataViewRepeaterDemoComponent implements OnInit {\n @Input()\n public items: any[];\n\n public dataState = new SkyDataManagerState({});\n\n public displayedItems: any[];\n\n public isActive: boolean;\n\n public viewId = 'repeaterView';\n\n public viewConfig: SkyDataViewConfig = {\n id: this.viewId,\n name: 'Repeater View',\n icon: 'list',\n searchEnabled: true,\n filterButtonEnabled: true,\n multiselectToolbarEnabled: true,\n onClearAllClick: this.clearAll.bind(this),\n onSelectAllClick: this.selectAll.bind(this),\n };\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private dataManagerService: SkyDataManagerService\n ) {}\n\n public ngOnInit(): void {\n this.displayedItems = this.items;\n\n this.dataManagerService.initDataView(this.viewConfig);\n\n this.dataManagerService\n .getDataStateUpdates(this.viewId)\n .subscribe((state) => {\n this.dataState = state;\n this.updateData();\n });\n\n this.dataManagerService.getActiveViewIdUpdates().subscribe((id) => {\n this.isActive = id === this.viewId;\n this.changeDetector.detectChanges();\n });\n }\n\n public updateData(): void {\n const selectedIds = this.dataState.selectedIds || [];\n this.items.forEach((item) => {\n item.selected = selectedIds.indexOf(item.id) !== -1;\n });\n this.displayedItems = this.filterItems(this.searchItems(this.items));\n\n if (this.dataState.onlyShowSelected) {\n this.displayedItems = this.displayedItems.filter((item) => item.selected);\n }\n\n this.changeDetector.detectChanges();\n }\n\n public searchItems(items: any[]): any[] {\n let searchedItems = items;\n const searchText =\n this.dataState && this.dataState.searchText?.toUpperCase();\n\n if (searchText) {\n searchedItems = items.filter(function (item: any) {\n let property: any;\n\n for (property in item) {\n if (\n Object.prototype.hasOwnProperty.call(item, property) &&\n (property === 'name' || property === 'description')\n ) {\n const propertyText = item[property].toUpperCase();\n if (propertyText.indexOf(searchText) > -1) {\n return true;\n }\n }\n }\n\n return false;\n });\n }\n return searchedItems;\n }\n\n public filterItems(items: any[]): any[] {\n let filteredItems = items;\n const filterData = this.dataState && this.dataState.filterData;\n\n if (filterData && filterData.filters) {\n const filters = filterData.filters;\n filteredItems = items.filter((item: any) => {\n if (\n ((filters.hideOrange && item.color !== 'orange') ||\n !filters.hideOrange) &&\n ((filters.type !== 'any' && item.type === filters.type) ||\n !filters.type ||\n filters.type === 'any')\n ) {\n return true;\n }\n return false;\n });\n }\n\n return filteredItems;\n }\n\n public selectAll(): void {\n const selectedIds = this.dataState.selectedIds || [];\n\n this.displayedItems.forEach((item) => {\n if (!item.selected) {\n item.selected = true;\n selectedIds.push(item.id);\n }\n });\n\n this.dataState.selectedIds = selectedIds;\n this.dataManagerService.updateDataState(this.dataState, this.viewId);\n this.changeDetector.markForCheck();\n }\n\n public clearAll(): void {\n const selectedIds = this.dataState.selectedIds || [];\n\n this.displayedItems.forEach((item) => {\n if (item.selected) {\n const itemIndex = selectedIds.indexOf(item.id);\n item.selected = false;\n selectedIds.splice(itemIndex, 1);\n }\n });\n\n if (this.dataState.onlyShowSelected) {\n this.displayedItems = [];\n }\n\n this.dataState.selectedIds = selectedIds;\n this.dataManagerService.updateDataState(this.dataState, this.viewId);\n this.changeDetector.markForCheck();\n }\n\n public onItemSelect(isSelected: boolean, item: any): void {\n const selectedItems = this.dataState.selectedIds || [];\n const itemIndex = selectedItems.indexOf(item.id);\n\n if (isSelected && itemIndex === -1) {\n selectedItems.push(item.id);\n } else if (!isSelected && itemIndex !== -1) {\n selectedItems.splice(itemIndex, 1);\n }\n\n this.dataState.selectedIds = selectedItems;\n this.dataManagerService.updateDataState(this.dataState, this.viewId);\n if (this.dataState.onlyShowSelected && this.displayedItems) {\n this.displayedItems = this.displayedItems.filter((itm) => itm.selected);\n this.changeDetector.markForCheck();\n }\n }\n}\n"
4948
4948
  }
4949
4949
  ]
4950
4950
  }
@@ -150,9 +150,9 @@ export class SkyDataManagerColumnPickerComponent {
150
150
  }
151
151
  }
152
152
  SkyDataManagerColumnPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDataManagerColumnPickerComponent, deps: [{ token: i1.SkyDataManagerColumnPickerContext }, { token: i2.SkyDataManagerService }, { token: i3.SkyModalInstance }], target: i0.ɵɵFactoryTarget.Component });
153
- SkyDataManagerColumnPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyDataManagerColumnPickerComponent, selector: "sky-data-manager-column-picker", providers: [SkyDataManagerService], ngImport: i0, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange($event)\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"], components: [{ type: i3.λ5, selector: "sky-modal", inputs: ["ariaRole", "tiledBody"] }, { type: i3.λ4, selector: "sky-modal-header" }, { type: i3.λ2, selector: "sky-modal-content" }, { type: i4.SkyDataManagerComponent, selector: "sky-data-manager" }, { type: i5.SkyDataManagerToolbarComponent, selector: "sky-data-manager-toolbar" }, { type: i6.SkyDataViewComponent, selector: "sky-data-view", inputs: ["viewId"] }, { type: i7.λ11, selector: "sky-repeater", inputs: ["activeIndex", "ariaLabel", "reorderable", "expandMode"], outputs: ["activeIndexChange", "orderChange"] }, { type: i7.λ10, selector: "sky-repeater-item", inputs: ["disabled", "itemName", "inlineFormConfig", "inlineFormTemplate", "isExpanded", "isSelected", "reorderable", "selectable", "showInlineForm", "tag"], outputs: ["collapse", "expand", "inlineFormClose", "isSelectedChange"] }, { type: i7.λ12, selector: "sky-repeater-item-title" }, { type: i7.λ8, selector: "sky-repeater-item-content" }, { type: i3.λ3, selector: "sky-modal-footer" }, { type: i8.λ10, selector: "sky-status-indicator", inputs: ["indicatorType", "descriptionType", "customDescription"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "skyLibResources": i10.SkyLibResourcesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
153
+ SkyDataManagerColumnPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyDataManagerColumnPickerComponent, selector: "sky-data-manager-column-picker", providers: [SkyDataManagerService], ngImport: i0, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange()\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"], components: [{ type: i3.λ5, selector: "sky-modal", inputs: ["ariaRole", "tiledBody"] }, { type: i3.λ4, selector: "sky-modal-header" }, { type: i3.λ2, selector: "sky-modal-content" }, { type: i4.SkyDataManagerComponent, selector: "sky-data-manager" }, { type: i5.SkyDataManagerToolbarComponent, selector: "sky-data-manager-toolbar" }, { type: i6.SkyDataViewComponent, selector: "sky-data-view", inputs: ["viewId"] }, { type: i7.λ11, selector: "sky-repeater", inputs: ["activeIndex", "ariaLabel", "reorderable", "expandMode"], outputs: ["activeIndexChange", "orderChange"] }, { type: i7.λ10, selector: "sky-repeater-item", inputs: ["disabled", "itemName", "inlineFormConfig", "inlineFormTemplate", "isExpanded", "isSelected", "reorderable", "selectable", "showInlineForm", "tag"], outputs: ["collapse", "expand", "inlineFormClose", "isSelectedChange"] }, { type: i7.λ12, selector: "sky-repeater-item-title" }, { type: i7.λ8, selector: "sky-repeater-item-content" }, { type: i3.λ3, selector: "sky-modal-footer" }, { type: i8.λ10, selector: "sky-status-indicator", inputs: ["indicatorType", "descriptionType", "customDescription"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "skyLibResources": i10.SkyLibResourcesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
154
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDataManagerColumnPickerComponent, decorators: [{
155
155
  type: Component,
156
- args: [{ selector: 'sky-data-manager-column-picker', providers: [SkyDataManagerService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange($event)\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"] }]
156
+ args: [{ selector: 'sky-data-manager-column-picker', providers: [SkyDataManagerService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange()\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"] }]
157
157
  }], ctorParameters: function () { return [{ type: i1.SkyDataManagerColumnPickerContext }, { type: i2.SkyDataManagerService }, { type: i3.SkyModalInstance }]; } });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tYW5hZ2VyLWNvbHVtbi1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGEtbWFuYWdlci9zcmMvbGliL21vZHVsZXMvZGF0YS1tYW5hZ2VyL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRhLW1hbmFnZXIvc3JjL2xpYi9tb2R1bGVzL2RhdGEtbWFuYWdlci9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDNUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7OztBQVN6Rjs7R0FFRztBQVFILE1BQU0sT0FBTyxtQ0FBbUM7SUEwQjlDLFlBQ1MsT0FBMEMsRUFDMUMsa0JBQXlDLEVBQ3pDLFFBQTBCO1FBRjFCLFlBQU8sR0FBUCxPQUFPLENBQW1DO1FB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ZUFBZSxDQUFDLFVBQVUsRUFBRTtvQkFDOUIsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDO2lCQUNwRDtxQkFBTTtvQkFDTCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQy9DO2FBQ0Y7aUJBQU07Z0JBQ0wsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQzlDO1NBQ0Y7UUFFRCx5RkFBeUY7UUFDekYscURBQXFEO1FBQ3JELElBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0I7WUFDckMsc0NBQXNDLENBQUMsd0JBQXdCLEVBQy9EO1lBQ0EsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDckMsQ0FBQztZQUNGLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FDcEQsdUJBQXVCLENBQ3hCLENBQUM7U0FDSDtRQUVELE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQzs7Z0lBL0tVLG1DQUFtQztvSEFBbkMsbUNBQW1DLHlEQUhuQyxDQUFDLHFCQUFxQixDQUFDLDBCQ2pDcEMseTREQXdEQTsyRkRwQmEsbUNBQW1DO2tCQVAvQyxTQUFTOytCQUNFLGdDQUFnQyxhQUcvQixDQUFDLHFCQUFxQixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TW9kYWxJbnN0YW5jZSB9IGZyb20gJ0Bza3l1eC9tb2RhbHMnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL2RhdGEtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyQ29sdW1uUGlja2VyT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLW9wdGlvbic7XG5pbXBvcnQgeyBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlclNvcnRTdHJhdGVneSB9IGZyb20gJy4uL21vZGVscy9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci1zb3J0LXN0cmF0ZWd5JztcbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvZGF0YS1tYW5hZ2VyLXN0YXRlJztcbmltcG9ydCB7IFNreURhdGFWaWV3Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGEtdmlldy1jb25maWcnO1xuXG5pbXBvcnQgeyBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlckNvbnRleHQgfSBmcm9tICcuL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLWNvbnRleHQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgQ29sdW1uIGV4dGVuZHMgU2t5RGF0YU1hbmFnZXJDb2x1bW5QaWNrZXJPcHRpb24ge1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF0YS1tYW5hZ2VyLWNvbHVtbi1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1tYW5hZ2VyLWNvbHVtbi1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtTa3lEYXRhTWFuYWdlclNlcnZpY2VdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0YU1hbmFnZXJDb2x1bW5QaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIHB1YmxpYyBnZXQgZGF0YVN0YXRlKCk6IFNreURhdGFNYW5hZ2VyU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU3RhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRhdGFTdGF0ZSh2YWx1ZTogU2t5RGF0YU1hbmFnZXJTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICB9XG5cbiAgcHVibGljIGNvbHVtbkRhdGE6IENvbHVtbltdO1xuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uRGF0YTogQ29sdW1uW107XG4gIHB1YmxpYyB2aWV3Q29uZmlnOiBTa3lEYXRhVmlld0NvbmZpZyA9IHtcbiAgICBpZDogJ2NvbHVtblBpY2tlcicsXG4gICAgbmFtZTogJ0NvbHVtbiBQaWNrZXInLFxuICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXG4gICAgc2VhcmNoRXhwYW5kTW9kZTogJ2ZpdCcsXG4gICAgbXVsdGlzZWxlY3RUb29sYmFyRW5hYmxlZDogdHJ1ZSxcbiAgICBvblNlbGVjdEFsbENsaWNrOiB0aGlzLnNlbGVjdEFsbC5iaW5kKHRoaXMpLFxuICAgIG9uQ2xlYXJBbGxDbGljazogdGhpcy5jbGVhckFsbC5iaW5kKHRoaXMpLFxuICB9O1xuXG4gIHByaXZhdGUgX2RhdGFTdGF0ZSA9IG5ldyBTa3lEYXRhTWFuYWdlclN0YXRlKHt9KTtcbiAgcHJpdmF0ZSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHB1YmxpYyBpc0FueURpc3BsYXllZENvbHVtblNlbGVjdGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb250ZXh0OiBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlckNvbnRleHQsXG4gICAgcHVibGljIGRhdGFNYW5hZ2VyU2VydmljZTogU2t5RGF0YU1hbmFnZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBpbnN0YW5jZTogU2t5TW9kYWxJbnN0YW5jZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YU1hbmFnZXJTZXJ2aWNlLmluaXREYXRhTWFuYWdlcih7XG4gICAgICBhY3RpdmVWaWV3SWQ6IHRoaXMudmlld0NvbmZpZy5pZCxcbiAgICAgIGRhdGFNYW5hZ2VyQ29uZmlnOiB7fSxcbiAgICAgIGRlZmF1bHREYXRhU3RhdGU6IHRoaXMuZGF0YVN0YXRlLFxuICAgIH0pO1xuICAgIHRoaXMuZGF0YU1hbmFnZXJTZXJ2aWNlLmluaXREYXRhVmlldyh0aGlzLnZpZXdDb25maWcpO1xuXG4gICAgdGhpcy5jb2x1bW5EYXRhID0gdGhpcy5mb3JtYXRDb2x1bW5PcHRpb25zKCk7XG5cbiAgICB0aGlzLmRhdGFNYW5hZ2VyU2VydmljZVxuICAgICAgLmdldERhdGFTdGF0ZVVwZGF0ZXMoJ2NvbHVtblBpY2tlcicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTdGF0ZSA9IHN0YXRlO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZURhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5EYXRhID0gdGhpcy5zZWFyY2hDb2x1bW5zKFxuICAgICAgdGhpcy5jb2x1bW5EYXRhLmZpbHRlcigoY29sKSA9PiAhY29sLmFsd2F5c0Rpc3BsYXllZClcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZGF0YVN0YXRlLm9ubHlTaG93U2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YSA9IHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YS5maWx0ZXIoXG4gICAgICAgIChjb2wpID0+IGNvbC5pc1NlbGVjdGVkXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaXNBbnlEaXNwbGF5ZWRDb2x1bW5TZWxlY3RlZCA9IHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YS5zb21lKFxuICAgICAgKGNvbCkgPT4gY29sLmlzU2VsZWN0ZWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaENvbHVtbnMoY29sdW1uczogQ29sdW1uW10pOiBDb2x1bW5bXSB7XG4gICAgbGV0IHNlYXJjaGVkQ29sdW1ucyA9IGNvbHVtbnM7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9XG4gICAgICB0aGlzLmRhdGFTdGF0ZSAmJiB0aGlzLmRhdGFTdGF0ZS5zZWFyY2hUZXh0Py50b1VwcGVyQ2FzZSgpO1xuXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcbiAgICAgIHNlYXJjaGVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gaXRlbSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCBwcm9wZXJ0eSkgJiZcbiAgICAgICAgICAgIChwcm9wZXJ0eSA9PT0gJ2xhYmVsJyB8fCBwcm9wZXJ0eSA9PT0gJ2Rlc2NyaXB0aW9uJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VGV4dDogc3RyaW5nID1cbiAgICAgICAgICAgICAgaXRlbVtwcm9wZXJ0eV0gJiYgaXRlbVtwcm9wZXJ0eV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eVRleHQgJiYgcHJvcGVydHlUZXh0LmluZGV4T2Yoc2VhcmNoVGV4dCkgPiAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaGVkQ29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5EYXRhLmZvckVhY2goKGNvbHVtbikgPT4gKGNvbHVtbi5pc1NlbGVjdGVkID0gdHJ1ZSkpO1xuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YS5mb3JFYWNoKChjb2x1bW4pID0+IChjb2x1bW4uaXNTZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgb25Jc1NlbGVjdGVkQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbENoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0YW5jZS5jYW5jZWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb250ZXh0LmRpc3BsYXllZENvbHVtbklkcy5maW5kSW5kZXgoKGNvbElkKSA9PiBjb2xJZCA9PT0gaWQpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zdGFuY2Uuc2F2ZShcbiAgICAgIHRoaXMuY29sdW1uRGF0YS5maWx0ZXIoKGNvbCkgPT4gY29sLmlzU2VsZWN0ZWQgfHwgY29sLmFsd2F5c0Rpc3BsYXllZClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRDb2x1bW5PcHRpb25zKCk6IENvbHVtbltdIHtcbiAgICBjb25zdCBhbGxDb2x1bW5PcHRpb25zID0gdGhpcy5jb250ZXh0LmNvbHVtbk9wdGlvbnM7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbklkcyA9IHRoaXMuY29udGV4dC5kaXNwbGF5ZWRDb2x1bW5JZHM7XG4gICAgbGV0IGZvcm1hdHRlZENvbHVtbk9wdGlvbnM6IENvbHVtbltdID0gW107XG4gICAgY29uc3QgdW5zZWxlY3RlZENvbHVtbk9wdGlvbnM6IENvbHVtbltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbk9wdGlvbiBvZiBhbGxDb2x1bW5PcHRpb25zKSB7XG4gICAgICAvLyBmb3JtYXQgdGhlIGNvbHVtbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIHRoZSBjb2x1bW4gcGlja2VyIG5lZWRzXG4gICAgICBjb25zdCBjb2xJbmRleCA9IHZpc2libGVDb2x1bW5JZHMuaW5kZXhPZihjb2x1bW5PcHRpb24uaWQpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkQ29sdW1uOiBDb2x1bW4gPSB7XG4gICAgICAgIGFsd2F5c0Rpc3BsYXllZDogY29sdW1uT3B0aW9uLmFsd2F5c0Rpc3BsYXllZCxcbiAgICAgICAgaWQ6IGNvbHVtbk9wdGlvbi5pZCxcbiAgICAgICAgbGFiZWw6IGNvbHVtbk9wdGlvbi5sYWJlbCxcbiAgICAgICAgZGVzY3JpcHRpb246IGNvbHVtbk9wdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgaXNTZWxlY3RlZDogY29sSW5kZXggIT09IC0xLFxuICAgICAgfTtcblxuICAgICAgLy8gaWYgY29sdW1uIHBpY2tlciBzb3J0aW5nIGlzIGN1cnJlbnRseSBlbmFibGVkIHNvcnQgY29sdW1ucyBieSBvcmRlciBkaXNwbGF5ZWQgdGhlbiBhbHBoYWJldGljYWxcbiAgICAgIC8vIGVsc2UgZGlzcGxheSBjb2x1bW4gaW4gb3JkZXIgdGhleSB3ZXJlIHNwZWNpZmllZCBpbiB0aGUgY29sdW1uT3B0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNvbnRleHQuY29sdW1uUGlja2VyU29ydFN0cmF0ZWd5ID09PVxuICAgICAgICBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlclNvcnRTdHJhdGVneS5TZWxlY3RlZFRoZW5BbHBoYWJldGljYWxcbiAgICAgICkge1xuICAgICAgICBpZiAoZm9ybWF0dGVkQ29sdW1uLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRDb2x1bW5PcHRpb25zW2NvbEluZGV4XSA9IGZvcm1hdHRlZENvbHVtbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnNlbGVjdGVkQ29sdW1uT3B0aW9ucy5wdXNoKGZvcm1hdHRlZENvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1hdHRlZENvbHVtbk9wdGlvbnMucHVzaChmb3JtYXR0ZWRDb2x1bW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIGNvbHVtbiBwaWNrZXIgc29ydGluZyBpcyBlbmFibGVkLCBzb3J0IHRoZSBjb2x1bW5zIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgZGlzcGxheWVkXG4gICAgLy8gYW5kIGFkZCB0aGVtIGFmdGVyIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIG9wdGlvbnNcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbnRleHQuY29sdW1uUGlja2VyU29ydFN0cmF0ZWd5ID09PVxuICAgICAgU2t5RGF0YU1hbmFnZXJDb2x1bW5QaWNrZXJTb3J0U3RyYXRlZ3kuU2VsZWN0ZWRUaGVuQWxwaGFiZXRpY2FsXG4gICAgKSB7XG4gICAgICB1bnNlbGVjdGVkQ29sdW1uT3B0aW9ucy5zb3J0KChjb2wxLCBjb2wyKSA9PlxuICAgICAgICBjb2wxLmxhYmVsLmxvY2FsZUNvbXBhcmUoY29sMi5sYWJlbClcbiAgICAgICk7XG4gICAgICBmb3JtYXR0ZWRDb2x1bW5PcHRpb25zID0gZm9ybWF0dGVkQ29sdW1uT3B0aW9ucy5jb25jYXQoXG4gICAgICAgIHVuc2VsZWN0ZWRDb2x1bW5PcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZWRDb2x1bW5PcHRpb25zO1xuICB9XG59XG4iLCI8c2t5LW1vZGFsPlxuICA8c2t5LW1vZGFsLWhlYWRlcj5cbiAgICB7eyAnc2t5dXhfZGF0YV9tYW5hZ2VyX2NvbHVtbl9waWNrZXJfdGl0bGUnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gIDwvc2t5LW1vZGFsLWhlYWRlcj5cbiAgPHNreS1tb2RhbC1jb250ZW50IGNsYXNzPVwic2t5LWRhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLWNvbnRlbnRcIj5cbiAgICA8c2t5LWRhdGEtbWFuYWdlcj5cbiAgICAgIDxza3ktZGF0YS1tYW5hZ2VyLXRvb2xiYXI+IDwvc2t5LWRhdGEtbWFuYWdlci10b29sYmFyPlxuXG4gICAgICA8c2t5LWRhdGEtdmlldyBbdmlld0lkXT1cInZpZXdDb25maWcuaWRcIj5cbiAgICAgICAgPHNreS1yZXBlYXRlciBleHBhbmRNb2RlPVwibm9uZVwiPlxuICAgICAgICAgIDxza3ktcmVwZWF0ZXItaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgWyhpc1NlbGVjdGVkKV09XCJjb2x1bW4uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAoaXNTZWxlY3RlZENoYW5nZSk9XCJvbklzU2VsZWN0ZWRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1yZXBlYXRlci1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvc2t5LXJlcGVhdGVyLWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICA8c2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudD5cbiAgICAgICAgICAgICAge3sgY29sdW1uLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICA8L3NreS1yZXBlYXRlci1pdGVtLWNvbnRlbnQ+XG4gICAgICAgICAgPC9za3ktcmVwZWF0ZXItaXRlbT5cbiAgICAgICAgPC9za3ktcmVwZWF0ZXI+XG4gICAgICA8L3NreS1kYXRhLXZpZXc+XG4gICAgPC9za3ktZGF0YS1tYW5hZ2VyPlxuICA8L3NreS1tb2RhbC1jb250ZW50PlxuICA8c2t5LW1vZGFsLWZvb3Rlcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci1mb290ZXItc3RhY2tlZC1pbmRpY2F0b3JcIlxuICAgICAgKm5nSWY9XCIhaXNBbnlEaXNwbGF5ZWRDb2x1bW5TZWxlY3RlZFwiXG4gICAgPlxuICAgICAgPHNreS1zdGF0dXMtaW5kaWNhdG9yIGRlc2NyaXB0aW9uVHlwZT1cImVycm9yXCIgaW5kaWNhdG9yVHlwZT1cImRhbmdlclwiPlxuICAgICAgICB7e1xuICAgICAgICAgICdza3l1eF9kYXRhX21hbmFnZXJfc2VsZWN0X2NvbHVtbl9zdGF0dXNfaW5kaWNhdG9yX3RpdGxlJ1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgfX1cbiAgICAgIDwvc2t5LXN0YXR1cy1pbmRpY2F0b3I+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgc2t5LWNtcC1pZD1cImFwcGx5LWNoYW5nZXNcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tcHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQW55RGlzcGxheWVkQ29sdW1uU2VsZWN0ZWRcIlxuICAgICAgKGNsaWNrKT1cImFwcGx5Q2hhbmdlcygpXCJcbiAgICA+XG4gICAgICB7eyAnc2t5dXhfZGF0YV9tYW5hZ2VyX2FwcGx5X2NoYW5nZXNfYnV0dG9uX3RpdGxlJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHNreS1jbXAtaWQ9XCJjYW5jZWxcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGlua1wiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsQ2hhbmdlcygpXCJcbiAgICA+XG4gICAgICB7eyAnc2t5dXhfZGF0YV9tYW5hZ2VyX2NhbmNlbF9idXR0b25fdGl0bGUnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2t5LW1vZGFsLWZvb3Rlcj5cbjwvc2t5LW1vZGFsPlxuIl19
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tYW5hZ2VyLWNvbHVtbi1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGEtbWFuYWdlci9zcmMvbGliL21vZHVsZXMvZGF0YS1tYW5hZ2VyL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRhLW1hbmFnZXIvc3JjL2xpYi9tb2R1bGVzL2RhdGEtbWFuYWdlci9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDNUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7OztBQVN6Rjs7R0FFRztBQVFILE1BQU0sT0FBTyxtQ0FBbUM7SUEwQjlDLFlBQ1MsT0FBMEMsRUFDMUMsa0JBQXlDLEVBQ3pDLFFBQTBCO1FBRjFCLFlBQU8sR0FBUCxPQUFPLENBQW1DO1FB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ZUFBZSxDQUFDLFVBQVUsRUFBRTtvQkFDOUIsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDO2lCQUNwRDtxQkFBTTtvQkFDTCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQy9DO2FBQ0Y7aUJBQU07Z0JBQ0wsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQzlDO1NBQ0Y7UUFFRCx5RkFBeUY7UUFDekYscURBQXFEO1FBQ3JELElBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0I7WUFDckMsc0NBQXNDLENBQUMsd0JBQXdCLEVBQy9EO1lBQ0EsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDckMsQ0FBQztZQUNGLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FDcEQsdUJBQXVCLENBQ3hCLENBQUM7U0FDSDtRQUVELE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQzs7Z0lBL0tVLG1DQUFtQztvSEFBbkMsbUNBQW1DLHlEQUhuQyxDQUFDLHFCQUFxQixDQUFDLDBCQ2pDcEMsbTREQXdEQTsyRkRwQmEsbUNBQW1DO2tCQVAvQyxTQUFTOytCQUNFLGdDQUFnQyxhQUcvQixDQUFDLHFCQUFxQixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TW9kYWxJbnN0YW5jZSB9IGZyb20gJ0Bza3l1eC9tb2RhbHMnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL2RhdGEtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyQ29sdW1uUGlja2VyT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLW9wdGlvbic7XG5pbXBvcnQgeyBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlclNvcnRTdHJhdGVneSB9IGZyb20gJy4uL21vZGVscy9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci1zb3J0LXN0cmF0ZWd5JztcbmltcG9ydCB7IFNreURhdGFNYW5hZ2VyU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvZGF0YS1tYW5hZ2VyLXN0YXRlJztcbmltcG9ydCB7IFNreURhdGFWaWV3Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGEtdmlldy1jb25maWcnO1xuXG5pbXBvcnQgeyBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlckNvbnRleHQgfSBmcm9tICcuL2RhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLWNvbnRleHQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgQ29sdW1uIGV4dGVuZHMgU2t5RGF0YU1hbmFnZXJDb2x1bW5QaWNrZXJPcHRpb24ge1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF0YS1tYW5hZ2VyLWNvbHVtbi1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1tYW5hZ2VyLWNvbHVtbi1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtTa3lEYXRhTWFuYWdlclNlcnZpY2VdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0YU1hbmFnZXJDb2x1bW5QaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIHB1YmxpYyBnZXQgZGF0YVN0YXRlKCk6IFNreURhdGFNYW5hZ2VyU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU3RhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRhdGFTdGF0ZSh2YWx1ZTogU2t5RGF0YU1hbmFnZXJTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICB9XG5cbiAgcHVibGljIGNvbHVtbkRhdGE6IENvbHVtbltdO1xuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uRGF0YTogQ29sdW1uW107XG4gIHB1YmxpYyB2aWV3Q29uZmlnOiBTa3lEYXRhVmlld0NvbmZpZyA9IHtcbiAgICBpZDogJ2NvbHVtblBpY2tlcicsXG4gICAgbmFtZTogJ0NvbHVtbiBQaWNrZXInLFxuICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXG4gICAgc2VhcmNoRXhwYW5kTW9kZTogJ2ZpdCcsXG4gICAgbXVsdGlzZWxlY3RUb29sYmFyRW5hYmxlZDogdHJ1ZSxcbiAgICBvblNlbGVjdEFsbENsaWNrOiB0aGlzLnNlbGVjdEFsbC5iaW5kKHRoaXMpLFxuICAgIG9uQ2xlYXJBbGxDbGljazogdGhpcy5jbGVhckFsbC5iaW5kKHRoaXMpLFxuICB9O1xuXG4gIHByaXZhdGUgX2RhdGFTdGF0ZSA9IG5ldyBTa3lEYXRhTWFuYWdlclN0YXRlKHt9KTtcbiAgcHJpdmF0ZSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHB1YmxpYyBpc0FueURpc3BsYXllZENvbHVtblNlbGVjdGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb250ZXh0OiBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlckNvbnRleHQsXG4gICAgcHVibGljIGRhdGFNYW5hZ2VyU2VydmljZTogU2t5RGF0YU1hbmFnZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBpbnN0YW5jZTogU2t5TW9kYWxJbnN0YW5jZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YU1hbmFnZXJTZXJ2aWNlLmluaXREYXRhTWFuYWdlcih7XG4gICAgICBhY3RpdmVWaWV3SWQ6IHRoaXMudmlld0NvbmZpZy5pZCxcbiAgICAgIGRhdGFNYW5hZ2VyQ29uZmlnOiB7fSxcbiAgICAgIGRlZmF1bHREYXRhU3RhdGU6IHRoaXMuZGF0YVN0YXRlLFxuICAgIH0pO1xuICAgIHRoaXMuZGF0YU1hbmFnZXJTZXJ2aWNlLmluaXREYXRhVmlldyh0aGlzLnZpZXdDb25maWcpO1xuXG4gICAgdGhpcy5jb2x1bW5EYXRhID0gdGhpcy5mb3JtYXRDb2x1bW5PcHRpb25zKCk7XG5cbiAgICB0aGlzLmRhdGFNYW5hZ2VyU2VydmljZVxuICAgICAgLmdldERhdGFTdGF0ZVVwZGF0ZXMoJ2NvbHVtblBpY2tlcicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTdGF0ZSA9IHN0YXRlO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZURhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5EYXRhID0gdGhpcy5zZWFyY2hDb2x1bW5zKFxuICAgICAgdGhpcy5jb2x1bW5EYXRhLmZpbHRlcigoY29sKSA9PiAhY29sLmFsd2F5c0Rpc3BsYXllZClcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZGF0YVN0YXRlLm9ubHlTaG93U2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YSA9IHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YS5maWx0ZXIoXG4gICAgICAgIChjb2wpID0+IGNvbC5pc1NlbGVjdGVkXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaXNBbnlEaXNwbGF5ZWRDb2x1bW5TZWxlY3RlZCA9IHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YS5zb21lKFxuICAgICAgKGNvbCkgPT4gY29sLmlzU2VsZWN0ZWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaENvbHVtbnMoY29sdW1uczogQ29sdW1uW10pOiBDb2x1bW5bXSB7XG4gICAgbGV0IHNlYXJjaGVkQ29sdW1ucyA9IGNvbHVtbnM7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9XG4gICAgICB0aGlzLmRhdGFTdGF0ZSAmJiB0aGlzLmRhdGFTdGF0ZS5zZWFyY2hUZXh0Py50b1VwcGVyQ2FzZSgpO1xuXG4gICAgaWYgKHNlYXJjaFRleHQpIHtcbiAgICAgIHNlYXJjaGVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gaXRlbSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCBwcm9wZXJ0eSkgJiZcbiAgICAgICAgICAgIChwcm9wZXJ0eSA9PT0gJ2xhYmVsJyB8fCBwcm9wZXJ0eSA9PT0gJ2Rlc2NyaXB0aW9uJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VGV4dDogc3RyaW5nID1cbiAgICAgICAgICAgICAgaXRlbVtwcm9wZXJ0eV0gJiYgaXRlbVtwcm9wZXJ0eV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eVRleHQgJiYgcHJvcGVydHlUZXh0LmluZGV4T2Yoc2VhcmNoVGV4dCkgPiAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaGVkQ29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5EYXRhLmZvckVhY2goKGNvbHVtbikgPT4gKGNvbHVtbi5pc1NlbGVjdGVkID0gdHJ1ZSkpO1xuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uRGF0YS5mb3JFYWNoKChjb2x1bW4pID0+IChjb2x1bW4uaXNTZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgb25Jc1NlbGVjdGVkQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbENoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0YW5jZS5jYW5jZWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb250ZXh0LmRpc3BsYXllZENvbHVtbklkcy5maW5kSW5kZXgoKGNvbElkKSA9PiBjb2xJZCA9PT0gaWQpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zdGFuY2Uuc2F2ZShcbiAgICAgIHRoaXMuY29sdW1uRGF0YS5maWx0ZXIoKGNvbCkgPT4gY29sLmlzU2VsZWN0ZWQgfHwgY29sLmFsd2F5c0Rpc3BsYXllZClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRDb2x1bW5PcHRpb25zKCk6IENvbHVtbltdIHtcbiAgICBjb25zdCBhbGxDb2x1bW5PcHRpb25zID0gdGhpcy5jb250ZXh0LmNvbHVtbk9wdGlvbnM7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbklkcyA9IHRoaXMuY29udGV4dC5kaXNwbGF5ZWRDb2x1bW5JZHM7XG4gICAgbGV0IGZvcm1hdHRlZENvbHVtbk9wdGlvbnM6IENvbHVtbltdID0gW107XG4gICAgY29uc3QgdW5zZWxlY3RlZENvbHVtbk9wdGlvbnM6IENvbHVtbltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbk9wdGlvbiBvZiBhbGxDb2x1bW5PcHRpb25zKSB7XG4gICAgICAvLyBmb3JtYXQgdGhlIGNvbHVtbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIHRoZSBjb2x1bW4gcGlja2VyIG5lZWRzXG4gICAgICBjb25zdCBjb2xJbmRleCA9IHZpc2libGVDb2x1bW5JZHMuaW5kZXhPZihjb2x1bW5PcHRpb24uaWQpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkQ29sdW1uOiBDb2x1bW4gPSB7XG4gICAgICAgIGFsd2F5c0Rpc3BsYXllZDogY29sdW1uT3B0aW9uLmFsd2F5c0Rpc3BsYXllZCxcbiAgICAgICAgaWQ6IGNvbHVtbk9wdGlvbi5pZCxcbiAgICAgICAgbGFiZWw6IGNvbHVtbk9wdGlvbi5sYWJlbCxcbiAgICAgICAgZGVzY3JpcHRpb246IGNvbHVtbk9wdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgaXNTZWxlY3RlZDogY29sSW5kZXggIT09IC0xLFxuICAgICAgfTtcblxuICAgICAgLy8gaWYgY29sdW1uIHBpY2tlciBzb3J0aW5nIGlzIGN1cnJlbnRseSBlbmFibGVkIHNvcnQgY29sdW1ucyBieSBvcmRlciBkaXNwbGF5ZWQgdGhlbiBhbHBoYWJldGljYWxcbiAgICAgIC8vIGVsc2UgZGlzcGxheSBjb2x1bW4gaW4gb3JkZXIgdGhleSB3ZXJlIHNwZWNpZmllZCBpbiB0aGUgY29sdW1uT3B0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNvbnRleHQuY29sdW1uUGlja2VyU29ydFN0cmF0ZWd5ID09PVxuICAgICAgICBTa3lEYXRhTWFuYWdlckNvbHVtblBpY2tlclNvcnRTdHJhdGVneS5TZWxlY3RlZFRoZW5BbHBoYWJldGljYWxcbiAgICAgICkge1xuICAgICAgICBpZiAoZm9ybWF0dGVkQ29sdW1uLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRDb2x1bW5PcHRpb25zW2NvbEluZGV4XSA9IGZvcm1hdHRlZENvbHVtbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnNlbGVjdGVkQ29sdW1uT3B0aW9ucy5wdXNoKGZvcm1hdHRlZENvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1hdHRlZENvbHVtbk9wdGlvbnMucHVzaChmb3JtYXR0ZWRDb2x1bW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIGNvbHVtbiBwaWNrZXIgc29ydGluZyBpcyBlbmFibGVkLCBzb3J0IHRoZSBjb2x1bW5zIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgZGlzcGxheWVkXG4gICAgLy8gYW5kIGFkZCB0aGVtIGFmdGVyIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIG9wdGlvbnNcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbnRleHQuY29sdW1uUGlja2VyU29ydFN0cmF0ZWd5ID09PVxuICAgICAgU2t5RGF0YU1hbmFnZXJDb2x1bW5QaWNrZXJTb3J0U3RyYXRlZ3kuU2VsZWN0ZWRUaGVuQWxwaGFiZXRpY2FsXG4gICAgKSB7XG4gICAgICB1bnNlbGVjdGVkQ29sdW1uT3B0aW9ucy5zb3J0KChjb2wxLCBjb2wyKSA9PlxuICAgICAgICBjb2wxLmxhYmVsLmxvY2FsZUNvbXBhcmUoY29sMi5sYWJlbClcbiAgICAgICk7XG4gICAgICBmb3JtYXR0ZWRDb2x1bW5PcHRpb25zID0gZm9ybWF0dGVkQ29sdW1uT3B0aW9ucy5jb25jYXQoXG4gICAgICAgIHVuc2VsZWN0ZWRDb2x1bW5PcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXR0ZWRDb2x1bW5PcHRpb25zO1xuICB9XG59XG4iLCI8c2t5LW1vZGFsPlxuICA8c2t5LW1vZGFsLWhlYWRlcj5cbiAgICB7eyAnc2t5dXhfZGF0YV9tYW5hZ2VyX2NvbHVtbl9waWNrZXJfdGl0bGUnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gIDwvc2t5LW1vZGFsLWhlYWRlcj5cbiAgPHNreS1tb2RhbC1jb250ZW50IGNsYXNzPVwic2t5LWRhdGEtbWFuYWdlci1jb2x1bW4tcGlja2VyLWNvbnRlbnRcIj5cbiAgICA8c2t5LWRhdGEtbWFuYWdlcj5cbiAgICAgIDxza3ktZGF0YS1tYW5hZ2VyLXRvb2xiYXI+IDwvc2t5LWRhdGEtbWFuYWdlci10b29sYmFyPlxuXG4gICAgICA8c2t5LWRhdGEtdmlldyBbdmlld0lkXT1cInZpZXdDb25maWcuaWRcIj5cbiAgICAgICAgPHNreS1yZXBlYXRlciBleHBhbmRNb2RlPVwibm9uZVwiPlxuICAgICAgICAgIDxza3ktcmVwZWF0ZXItaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5EYXRhXCJcbiAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgWyhpc1NlbGVjdGVkKV09XCJjb2x1bW4uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAoaXNTZWxlY3RlZENoYW5nZSk9XCJvbklzU2VsZWN0ZWRDaGFuZ2UoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1yZXBlYXRlci1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvc2t5LXJlcGVhdGVyLWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICA8c2t5LXJlcGVhdGVyLWl0ZW0tY29udGVudD5cbiAgICAgICAgICAgICAge3sgY29sdW1uLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICA8L3NreS1yZXBlYXRlci1pdGVtLWNvbnRlbnQ+XG4gICAgICAgICAgPC9za3ktcmVwZWF0ZXItaXRlbT5cbiAgICAgICAgPC9za3ktcmVwZWF0ZXI+XG4gICAgICA8L3NreS1kYXRhLXZpZXc+XG4gICAgPC9za3ktZGF0YS1tYW5hZ2VyPlxuICA8L3NreS1tb2RhbC1jb250ZW50PlxuICA8c2t5LW1vZGFsLWZvb3Rlcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1kYXRhLW1hbmFnZXItY29sdW1uLXBpY2tlci1mb290ZXItc3RhY2tlZC1pbmRpY2F0b3JcIlxuICAgICAgKm5nSWY9XCIhaXNBbnlEaXNwbGF5ZWRDb2x1bW5TZWxlY3RlZFwiXG4gICAgPlxuICAgICAgPHNreS1zdGF0dXMtaW5kaWNhdG9yIGRlc2NyaXB0aW9uVHlwZT1cImVycm9yXCIgaW5kaWNhdG9yVHlwZT1cImRhbmdlclwiPlxuICAgICAgICB7e1xuICAgICAgICAgICdza3l1eF9kYXRhX21hbmFnZXJfc2VsZWN0X2NvbHVtbl9zdGF0dXNfaW5kaWNhdG9yX3RpdGxlJ1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgfX1cbiAgICAgIDwvc2t5LXN0YXR1cy1pbmRpY2F0b3I+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgc2t5LWNtcC1pZD1cImFwcGx5LWNoYW5nZXNcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tcHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQW55RGlzcGxheWVkQ29sdW1uU2VsZWN0ZWRcIlxuICAgICAgKGNsaWNrKT1cImFwcGx5Q2hhbmdlcygpXCJcbiAgICA+XG4gICAgICB7eyAnc2t5dXhfZGF0YV9tYW5hZ2VyX2FwcGx5X2NoYW5nZXNfYnV0dG9uX3RpdGxlJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHNreS1jbXAtaWQ9XCJjYW5jZWxcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGlua1wiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsQ2hhbmdlcygpXCJcbiAgICA+XG4gICAgICB7eyAnc2t5dXhfZGF0YV9tYW5hZ2VyX2NhbmNlbF9idXR0b25fdGl0bGUnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2t5LW1vZGFsLWZvb3Rlcj5cbjwvc2t5LW1vZGFsPlxuIl19
@@ -910,10 +910,10 @@ class SkyDataManagerColumnPickerComponent {
910
910
  }
911
911
  }
912
912
  SkyDataManagerColumnPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDataManagerColumnPickerComponent, deps: [{ token: SkyDataManagerColumnPickerContext }, { token: SkyDataManagerService }, { token: i3.SkyModalInstance }], target: i0.ɵɵFactoryTarget.Component });
913
- SkyDataManagerColumnPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyDataManagerColumnPickerComponent, selector: "sky-data-manager-column-picker", providers: [SkyDataManagerService], ngImport: i0, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange($event)\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"], components: [{ type: i3.λ5, selector: "sky-modal", inputs: ["ariaRole", "tiledBody"] }, { type: i3.λ4, selector: "sky-modal-header" }, { type: i3.λ2, selector: "sky-modal-content" }, { type: SkyDataManagerComponent, selector: "sky-data-manager" }, { type: SkyDataManagerToolbarComponent, selector: "sky-data-manager-toolbar" }, { type: SkyDataViewComponent, selector: "sky-data-view", inputs: ["viewId"] }, { type: i7.λ11, selector: "sky-repeater", inputs: ["activeIndex", "ariaLabel", "reorderable", "expandMode"], outputs: ["activeIndexChange", "orderChange"] }, { type: i7.λ10, selector: "sky-repeater-item", inputs: ["disabled", "itemName", "inlineFormConfig", "inlineFormTemplate", "isExpanded", "isSelected", "reorderable", "selectable", "showInlineForm", "tag"], outputs: ["collapse", "expand", "inlineFormClose", "isSelectedChange"] }, { type: i7.λ12, selector: "sky-repeater-item-title" }, { type: i7.λ8, selector: "sky-repeater-item-content" }, { type: i3.λ3, selector: "sky-modal-footer" }, { type: i6.λ10, selector: "sky-status-indicator", inputs: ["indicatorType", "descriptionType", "customDescription"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "skyLibResources": i11.SkyLibResourcesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
913
+ SkyDataManagerColumnPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyDataManagerColumnPickerComponent, selector: "sky-data-manager-column-picker", providers: [SkyDataManagerService], ngImport: i0, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange()\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"], components: [{ type: i3.λ5, selector: "sky-modal", inputs: ["ariaRole", "tiledBody"] }, { type: i3.λ4, selector: "sky-modal-header" }, { type: i3.λ2, selector: "sky-modal-content" }, { type: SkyDataManagerComponent, selector: "sky-data-manager" }, { type: SkyDataManagerToolbarComponent, selector: "sky-data-manager-toolbar" }, { type: SkyDataViewComponent, selector: "sky-data-view", inputs: ["viewId"] }, { type: i7.λ11, selector: "sky-repeater", inputs: ["activeIndex", "ariaLabel", "reorderable", "expandMode"], outputs: ["activeIndexChange", "orderChange"] }, { type: i7.λ10, selector: "sky-repeater-item", inputs: ["disabled", "itemName", "inlineFormConfig", "inlineFormTemplate", "isExpanded", "isSelected", "reorderable", "selectable", "showInlineForm", "tag"], outputs: ["collapse", "expand", "inlineFormClose", "isSelectedChange"] }, { type: i7.λ12, selector: "sky-repeater-item-title" }, { type: i7.λ8, selector: "sky-repeater-item-content" }, { type: i3.λ3, selector: "sky-modal-footer" }, { type: i6.λ10, selector: "sky-status-indicator", inputs: ["indicatorType", "descriptionType", "customDescription"] }], directives: [{ type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "skyLibResources": i11.SkyLibResourcesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
914
914
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDataManagerColumnPickerComponent, decorators: [{
915
915
  type: Component,
916
- args: [{ selector: 'sky-data-manager-column-picker', providers: [SkyDataManagerService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange($event)\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"] }]
916
+ args: [{ selector: 'sky-data-manager-column-picker', providers: [SkyDataManagerService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_data_manager_column_picker_title' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content class=\"sky-data-manager-column-picker-content\">\n <sky-data-manager>\n <sky-data-manager-toolbar> </sky-data-manager-toolbar>\n\n <sky-data-view [viewId]=\"viewConfig.id\">\n <sky-repeater expandMode=\"none\">\n <sky-repeater-item\n *ngFor=\"let column of displayedColumnData\"\n [selectable]=\"true\"\n [(isSelected)]=\"column.isSelected\"\n (isSelectedChange)=\"onIsSelectedChange()\"\n >\n <sky-repeater-item-title>\n {{ column.label }}\n </sky-repeater-item-title>\n <sky-repeater-item-content>\n {{ column.description }}\n </sky-repeater-item-content>\n </sky-repeater-item>\n </sky-repeater>\n </sky-data-view>\n </sky-data-manager>\n </sky-modal-content>\n <sky-modal-footer>\n <div\n class=\"sky-data-manager-column-picker-footer-stacked-indicator\"\n *ngIf=\"!isAnyDisplayedColumnSelected\"\n >\n <sky-status-indicator descriptionType=\"error\" indicatorType=\"danger\">\n {{\n 'skyux_data_manager_select_column_status_indicator_title'\n | skyLibResources\n }}\n </sky-status-indicator>\n </div>\n <button\n sky-cmp-id=\"apply-changes\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!isAnyDisplayedColumnSelected\"\n (click)=\"applyChanges()\"\n >\n {{ 'skyux_data_manager_apply_changes_button_title' | skyLibResources }}\n </button>\n <button\n sky-cmp-id=\"cancel\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancelChanges()\"\n >\n {{ 'skyux_data_manager_cancel_button_title' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-data-manager-column-picker-content sky-repeater-item-content{margin-top:5px}.sky-data-manager-column-picker-footer-stacked-indicator{margin:0 5px 10px 0}\n"] }]
917
917
  }], ctorParameters: function () { return [{ type: SkyDataManagerColumnPickerContext }, { type: SkyDataManagerService }, { type: i3.SkyModalInstance }]; } });
918
918
 
919
919
  class SkyDataManagerColumnPickerImplService {