@skyux/data-grid 14.24.0 → 14.26.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-data-grid-testing.mjs +8 -0
- package/fesm2022/skyux-data-grid-testing.mjs.map +1 -1
- package/fesm2022/skyux-data-grid.mjs +28 -9
- package/fesm2022/skyux-data-grid.mjs.map +1 -1
- package/package.json +6 -6
- package/types/skyux-data-grid-testing.d.ts +5 -0
- package/types/skyux-data-grid.d.ts +20 -4
|
@@ -34,6 +34,14 @@ class SkyDataGridHarness extends SkyQueryableComponentHarness {
|
|
|
34
34
|
const waits = await this.queryHarnesses(SkyWaitHarness);
|
|
35
35
|
return await Promise.all(waits.map(async (wait) => await wait.isWaiting())).then((loadingStates) => loadingStates.some((isLoading) => isLoading));
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Gets the type of dock style on the data grid.
|
|
39
|
+
*/
|
|
40
|
+
async getDockType() {
|
|
41
|
+
return (await (await this.host()).hasClass('sky-data-grid-dock-fill'))
|
|
42
|
+
? 'fill'
|
|
43
|
+
: 'none';
|
|
44
|
+
}
|
|
37
45
|
/**
|
|
38
46
|
* Retrieves the IDs of the currently displayed columns.
|
|
39
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skyux-data-grid-testing.mjs","sources":["../../../../../libs/components/data-grid/testing/src/modules/data-grid/data-grid-harness.ts","../../../../../libs/components/data-grid/testing/src/skyux-data-grid-testing.ts"],"sourcesContent":["import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyAgGridWrapperHarness } from '@skyux/ag-grid/testing';\nimport { SkyQueryableComponentHarness } from '@skyux/core/testing';\nimport { SkyWaitHarness } from '@skyux/indicators/testing';\nimport { SkyPagingHarness } from '@skyux/lists/testing';\n\nimport { SkyDataGridHarnessFilters } from './data-grid-harness.filters';\n\n/**\n * Harness for interacting with SKY UX data grid components in tests.\n * @preview\n */\nexport class SkyDataGridHarness extends SkyQueryableComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-data-grid';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyDataGridHarness` that meets certain criteria\n */\n public static with(\n filters: SkyDataGridHarnessFilters,\n ): HarnessPredicate<SkyDataGridHarness> {\n return SkyDataGridHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Checks whether the grid is ready.\n */\n public async isGridReady(): Promise<boolean> {\n return await this.#getGridWrapper()\n .then(async (grid) => await grid.isGridReady())\n .catch(() => false);\n }\n\n /**\n * Checks whether the grid is loading.\n */\n public async isLoading(): Promise<boolean> {\n const waits = await this.queryHarnesses(SkyWaitHarness);\n return await Promise.all(\n waits.map(async (wait): Promise<boolean> => await wait.isWaiting()),\n ).then((loadingStates) => loadingStates.some((isLoading) => isLoading));\n }\n\n /**\n * Retrieves the IDs of the currently displayed columns.\n */\n public async getDisplayedColumnIds(): Promise<string[]> {\n return await this.#getGridWrapper()\n .then(async (grid) => await grid.getDisplayedColumnIds())\n .catch(() =>\n Promise.reject(new Error('Unable to retrieve displayed column IDs.')),\n );\n }\n\n /**\n * Retrieves the header names of the currently displayed columns.\n */\n public async getDisplayedColumnHeaderNames(): Promise<string[]> {\n return await this.#getGridWrapper()\n .then(async (grid) => await grid.getDisplayedColumnHeaderNames())\n .catch(() =>\n Promise.reject(\n new Error('Unable to retrieve displayed column header names.'),\n ),\n );\n }\n\n /**\n * Retrieves the total number of displayed rows.\n */\n public async getDisplayedRowCount(): Promise<number> {\n return await this.#getGridWrapper()\n .then(async (grid) => (await grid.getGridApi()).getDisplayedRowCount())\n .catch(() =>\n Promise.reject(\n new Error('Unable to retrieve total number of displayed rows.'),\n ),\n );\n }\n\n /**\n * Clicks the column header sort button.\n */\n public async clickColumnSortButton(column: string): Promise<void> {\n const btn = await this.locatorFor(\n `.ag-header-cell.ag-header-cell-sortable[col-id=\"${column}\"] button.ag-header-cell-label-sortable`,\n )();\n await btn.click();\n }\n\n /**\n * Gets the paging harness for the data grid. Throws if the grid is not paged.\n */\n public async getPaging(): Promise<SkyPagingHarness> {\n const paging = await this.getPagingOrNull();\n\n if (paging === null) {\n throw new Error('Unable to retrieve paging. The data grid is not paged.');\n }\n\n return paging;\n }\n\n /**\n * Gets the paging harness for the data grid, or `null` if the grid is not paged.\n */\n public async getPagingOrNull(): Promise<SkyPagingHarness | null> {\n return await this.queryHarnessOrNull(SkyPagingHarness);\n }\n\n /**\n * Gets the wait harness for the data grid.\n */\n public async getWait(): Promise<SkyWaitHarness> {\n return await this.queryHarness(SkyWaitHarness);\n }\n\n async #getGridWrapper(): Promise<SkyAgGridWrapperHarness> {\n return await this.queryHarness(SkyAgGridWrapperHarness);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"skyux-data-grid-testing.mjs","sources":["../../../../../libs/components/data-grid/testing/src/modules/data-grid/data-grid-harness.ts","../../../../../libs/components/data-grid/testing/src/skyux-data-grid-testing.ts"],"sourcesContent":["import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyAgGridWrapperHarness } from '@skyux/ag-grid/testing';\nimport { SkyQueryableComponentHarness } from '@skyux/core/testing';\nimport { SkyDataGridDockType } from '@skyux/data-grid';\nimport { SkyWaitHarness } from '@skyux/indicators/testing';\nimport { SkyPagingHarness } from '@skyux/lists/testing';\n\nimport { SkyDataGridHarnessFilters } from './data-grid-harness.filters';\n\n/**\n * Harness for interacting with SKY UX data grid components in tests.\n * @preview\n */\nexport class SkyDataGridHarness extends SkyQueryableComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-data-grid';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyDataGridHarness` that meets certain criteria\n */\n public static with(\n filters: SkyDataGridHarnessFilters,\n ): HarnessPredicate<SkyDataGridHarness> {\n return SkyDataGridHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Checks whether the grid is ready.\n */\n public async isGridReady(): Promise<boolean> {\n return await this.#getGridWrapper()\n .then(async (grid) => await grid.isGridReady())\n .catch(() => false);\n }\n\n /**\n * Checks whether the grid is loading.\n */\n public async isLoading(): Promise<boolean> {\n const waits = await this.queryHarnesses(SkyWaitHarness);\n return await Promise.all(\n waits.map(async (wait): Promise<boolean> => await wait.isWaiting()),\n ).then((loadingStates) => loadingStates.some((isLoading) => isLoading));\n }\n\n /**\n * Gets the type of dock style on the data grid.\n */\n public async getDockType(): Promise<SkyDataGridDockType> {\n return (await (await this.host()).hasClass('sky-data-grid-dock-fill'))\n ? 'fill'\n : 'none';\n }\n\n /**\n * Retrieves the IDs of the currently displayed columns.\n */\n public async getDisplayedColumnIds(): Promise<string[]> {\n return await this.#getGridWrapper()\n .then(async (grid) => await grid.getDisplayedColumnIds())\n .catch(() =>\n Promise.reject(new Error('Unable to retrieve displayed column IDs.')),\n );\n }\n\n /**\n * Retrieves the header names of the currently displayed columns.\n */\n public async getDisplayedColumnHeaderNames(): Promise<string[]> {\n return await this.#getGridWrapper()\n .then(async (grid) => await grid.getDisplayedColumnHeaderNames())\n .catch(() =>\n Promise.reject(\n new Error('Unable to retrieve displayed column header names.'),\n ),\n );\n }\n\n /**\n * Retrieves the total number of displayed rows.\n */\n public async getDisplayedRowCount(): Promise<number> {\n return await this.#getGridWrapper()\n .then(async (grid) => (await grid.getGridApi()).getDisplayedRowCount())\n .catch(() =>\n Promise.reject(\n new Error('Unable to retrieve total number of displayed rows.'),\n ),\n );\n }\n\n /**\n * Clicks the column header sort button.\n */\n public async clickColumnSortButton(column: string): Promise<void> {\n const btn = await this.locatorFor(\n `.ag-header-cell.ag-header-cell-sortable[col-id=\"${column}\"] button.ag-header-cell-label-sortable`,\n )();\n await btn.click();\n }\n\n /**\n * Gets the paging harness for the data grid. Throws if the grid is not paged.\n */\n public async getPaging(): Promise<SkyPagingHarness> {\n const paging = await this.getPagingOrNull();\n\n if (paging === null) {\n throw new Error('Unable to retrieve paging. The data grid is not paged.');\n }\n\n return paging;\n }\n\n /**\n * Gets the paging harness for the data grid, or `null` if the grid is not paged.\n */\n public async getPagingOrNull(): Promise<SkyPagingHarness | null> {\n return await this.queryHarnessOrNull(SkyPagingHarness);\n }\n\n /**\n * Gets the wait harness for the data grid.\n */\n public async getWait(): Promise<SkyWaitHarness> {\n return await this.queryHarness(SkyWaitHarness);\n }\n\n async #getGridWrapper(): Promise<SkyAgGridWrapperHarness> {\n return await this.queryHarness(SkyAgGridWrapperHarness);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -236,6 +236,7 @@ ModuleRegistry.registerModules([
|
|
|
236
236
|
function arraySorted(arr) {
|
|
237
237
|
return arr.slice().sort((a, b) => a.localeCompare(b));
|
|
238
238
|
}
|
|
239
|
+
const DEFAULT_DOCK_TYPE = 'none';
|
|
239
240
|
function arraysEqual(a, b) {
|
|
240
241
|
return a.length === b.length && a.every((value, i) => value === b[i]);
|
|
241
242
|
}
|
|
@@ -335,6 +336,14 @@ class SkyDataGrid {
|
|
|
335
336
|
* the grid will show a "no rows" message.
|
|
336
337
|
*/
|
|
337
338
|
this.data = input(...(ngDevMode ? [undefined, { debugName: "data" }] : []));
|
|
339
|
+
/**
|
|
340
|
+
* How the data grid docks to the page. Use `fill` to dock the data grid to the container's size where the container
|
|
341
|
+
* is a `sky-page` component with its `layout` set to `fit`, or where the container is another element with a
|
|
342
|
+
* relative or absolute position and a fixed size. This property is applied when the grid initializes; changes
|
|
343
|
+
* after initialization are not reflected.
|
|
344
|
+
* @default "none"
|
|
345
|
+
*/
|
|
346
|
+
this.dock = input(DEFAULT_DOCK_TYPE, ...(ngDevMode ? [{ debugName: "dock" }] : []));
|
|
338
347
|
/**
|
|
339
348
|
* The text to read to screen readers to describe the grid. This sets the `aria-label` attribute on the grid container.
|
|
340
349
|
*/
|
|
@@ -346,7 +355,7 @@ class SkyDataGrid {
|
|
|
346
355
|
*/
|
|
347
356
|
this.loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : {}), transform: coerceBooleanProperty });
|
|
348
357
|
/**
|
|
349
|
-
* The minimum height of the grid in pixels.
|
|
358
|
+
* The minimum height of the grid in pixels. This property does not apply when `dock` is set to `fill`.
|
|
350
359
|
* @default 50
|
|
351
360
|
*/
|
|
352
361
|
this.minHeight = input(50, { ...(ngDevMode ? { debugName: "minHeight" } : {}), transform: (value) => coerceNumberProperty(value, 50) });
|
|
@@ -382,7 +391,7 @@ class SkyDataGrid {
|
|
|
382
391
|
} });
|
|
383
392
|
/**
|
|
384
393
|
* Whether the data grid is stacked with another element below it. When specified, the appropriate
|
|
385
|
-
* vertical spacing is automatically added to the data grid.
|
|
394
|
+
* vertical spacing is automatically added to the data grid. This property does not apply when `dock` is set to `fill`.
|
|
386
395
|
* @default false
|
|
387
396
|
*/
|
|
388
397
|
this.stacked = input(false, { ...(ngDevMode ? { debugName: "stacked" } : {}), transform: coerceBooleanProperty });
|
|
@@ -501,7 +510,7 @@ class SkyDataGrid {
|
|
|
501
510
|
context: {
|
|
502
511
|
enableTopScroll: untracked(() => this.topScrollEnabled()),
|
|
503
512
|
},
|
|
504
|
-
domLayout: 'autoHeight',
|
|
513
|
+
domLayout: untracked(() => this.useFillDock() ? 'normal' : 'autoHeight'),
|
|
505
514
|
initialState: sort
|
|
506
515
|
? {
|
|
507
516
|
partialColumnState: true,
|
|
@@ -602,7 +611,16 @@ class SkyDataGrid {
|
|
|
602
611
|
}
|
|
603
612
|
return source;
|
|
604
613
|
} });
|
|
605
|
-
this.skyViewkeeper = computed(() =>
|
|
614
|
+
this.skyViewkeeper = computed(() => {
|
|
615
|
+
// Only used when not using SkyDataManagerService because data manager handles SkyViewkeeper.
|
|
616
|
+
// Not used in fill mode either: AG Grid keeps its own header in place in that layout.
|
|
617
|
+
if (this.useFillDock()) {
|
|
618
|
+
return [];
|
|
619
|
+
}
|
|
620
|
+
return this.#viewkeeperDisabled() ? [] : this.viewkeeperClasses();
|
|
621
|
+
}, ...(ngDevMode ? [{ debugName: "skyViewkeeper" }] : []));
|
|
622
|
+
this.useFillDock = computed(() => this.dock() === 'fill', ...(ngDevMode ? [{ debugName: "useFillDock" }] : []));
|
|
623
|
+
this.useStacked = computed(() => this.stacked() && this.dock() !== 'fill', ...(ngDevMode ? [{ debugName: "useStacked" }] : []));
|
|
606
624
|
this.#activatedRoute = inject(ActivatedRoute, { optional: true });
|
|
607
625
|
/**
|
|
608
626
|
* The widths in pixels of the columns users resized, keyed by column ID.
|
|
@@ -1240,11 +1258,11 @@ class SkyDataGrid {
|
|
|
1240
1258
|
: { checkboxes: false, mode: 'singleRow' };
|
|
1241
1259
|
}
|
|
1242
1260
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1243
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyDataGrid, isStandalone: true, selector: "sky-data-grid", inputs: { autoSort: { classPropertyName: "autoSort", publicName: "autoSort", isSignal: true, isRequired: false, transformFunction: null }, autoPage: { classPropertyName: "autoPage", publicName: "autoPage", isSignal: true, isRequired: false, transformFunction: null }, columnFit: { classPropertyName: "columnFit", publicName: "columnFit", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageQueryParam: { classPropertyName: "pageQueryParam", publicName: "pageQueryParam", isSignal: true, isRequired: false, transformFunction: null }, rowCount: { classPropertyName: "rowCount", publicName: "rowCount", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, topScrollEnabled: { classPropertyName: "topScrollEnabled", publicName: "topScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, selectedRowIds: { classPropertyName: "selectedRowIds", publicName: "selectedRowIds", isSignal: true, isRequired: false, transformFunction: null }, selectedColumnIds: { classPropertyName: "selectedColumnIds", publicName: "selectedColumnIds", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { page: "pageChange", selectedRowIds: "selectedRowIdsChange", selectedColumnIds: "selectedColumnIdsChange", sort: "sortChange" }, host: { properties: { "class.sky-margin-stacked-lg": "
|
|
1261
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyDataGrid, isStandalone: true, selector: "sky-data-grid", inputs: { autoSort: { classPropertyName: "autoSort", publicName: "autoSort", isSignal: true, isRequired: false, transformFunction: null }, autoPage: { classPropertyName: "autoPage", publicName: "autoPage", isSignal: true, isRequired: false, transformFunction: null }, columnFit: { classPropertyName: "columnFit", publicName: "columnFit", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, dock: { classPropertyName: "dock", publicName: "dock", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageQueryParam: { classPropertyName: "pageQueryParam", publicName: "pageQueryParam", isSignal: true, isRequired: false, transformFunction: null }, rowCount: { classPropertyName: "rowCount", publicName: "rowCount", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, topScrollEnabled: { classPropertyName: "topScrollEnabled", publicName: "topScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, selectedRowIds: { classPropertyName: "selectedRowIds", publicName: "selectedRowIds", isSignal: true, isRequired: false, transformFunction: null }, selectedColumnIds: { classPropertyName: "selectedColumnIds", publicName: "selectedColumnIds", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { page: "pageChange", selectedRowIds: "selectedRowIdsChange", selectedColumnIds: "selectedColumnIdsChange", sort: "sortChange" }, host: { properties: { "class.sky-data-grid-dock-fill": "useFillDock()", "class.sky-margin-stacked-lg": "useStacked()" } }, providers: [
|
|
1244
1262
|
{ provide: SkyDataColumnSource, useExisting: SkyDataGrid },
|
|
1245
1263
|
{ provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
|
|
1246
1264
|
{ provide: SkyDataSortSource, useExisting: SkyDataGrid },
|
|
1247
|
-
], queries: [{ propertyName: "columns", predicate: SkyDataGridColumn, isSignal: true }], ngImport: i0, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n", styles: [":host{display:block;max-width:100%}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipSwitchShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "ngmodule", type: SkyAgGridModule }, { kind: "component", type: i1$1.λ12, selector: "sky-ag-grid-wrapper", inputs: ["compact", "minHeight", "viewkeeperDisabled"] }, { kind: "ngmodule", type: SkyPagingModule }, { kind: "component", type: i2.λ7, selector: "sky-paging", inputs: ["currentPage", "itemCount", "maxPages", "pageSize", "pagingLabel"], outputs: ["currentPageChange", "contentChange"] }, { kind: "ngmodule", type: SkyViewkeeperModule }, { kind: "directive", type: i3.λ3, selector: "[skyViewkeeper]", inputs: ["skyViewkeeper", "skyViewkeeperOmitShadow"] }, { kind: "ngmodule", type: SkyWaitModule }, { kind: "component", type: i4.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1265
|
+
], queries: [{ propertyName: "columns", predicate: SkyDataGridColumn, isSignal: true }], ngImport: i0, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n", styles: [":host{display:block;max-width:100%}:host.sky-data-grid-dock-fill{position:absolute;inset:0;display:flex;flex-direction:column}:host.sky-data-grid-dock-fill sky-ag-grid-wrapper{flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipSwitchShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "ngmodule", type: SkyAgGridModule }, { kind: "component", type: i1$1.λ12, selector: "sky-ag-grid-wrapper", inputs: ["compact", "minHeight", "viewkeeperDisabled"] }, { kind: "ngmodule", type: SkyPagingModule }, { kind: "component", type: i2.λ7, selector: "sky-paging", inputs: ["currentPage", "itemCount", "maxPages", "pageSize", "pagingLabel"], outputs: ["currentPageChange", "contentChange"] }, { kind: "ngmodule", type: SkyViewkeeperModule }, { kind: "directive", type: i3.λ3, selector: "[skyViewkeeper]", inputs: ["skyViewkeeper", "skyViewkeeperOmitShadow"] }, { kind: "ngmodule", type: SkyWaitModule }, { kind: "component", type: i4.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1248
1266
|
}
|
|
1249
1267
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGrid, decorators: [{
|
|
1250
1268
|
type: Component,
|
|
@@ -1255,13 +1273,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1255
1273
|
SkyViewkeeperModule,
|
|
1256
1274
|
SkyWaitModule,
|
|
1257
1275
|
], host: {
|
|
1258
|
-
'[class.sky-
|
|
1276
|
+
'[class.sky-data-grid-dock-fill]': 'useFillDock()',
|
|
1277
|
+
'[class.sky-margin-stacked-lg]': 'useStacked()',
|
|
1259
1278
|
}, providers: [
|
|
1260
1279
|
{ provide: SkyDataColumnSource, useExisting: SkyDataGrid },
|
|
1261
1280
|
{ provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
|
|
1262
1281
|
{ provide: SkyDataSortSource, useExisting: SkyDataGrid },
|
|
1263
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n", styles: [":host{display:block;max-width:100%}\n"] }]
|
|
1264
|
-
}], ctorParameters: () => [], propDecorators: { autoSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoSort", required: false }] }], autoPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPage", required: false }] }], columnFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnFit", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], labelText: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelText", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], multiselect: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiselect", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pageQueryParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageQueryParam", required: false }] }], rowCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowCount", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], topScrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "topScrollEnabled", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }], selectedRowIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedRowIds", required: false }] }, { type: i0.Output, args: ["selectedRowIdsChange"] }], selectedColumnIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedColumnIds", required: false }] }, { type: i0.Output, args: ["selectedColumnIdsChange"] }], sort: [{ type: i0.Input, args: [{ isSignal: true, alias: "sort", required: false }] }, { type: i0.Output, args: ["sortChange"] }], columns: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SkyDataGridColumn), { isSignal: true }] }] } });
|
|
1282
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n", styles: [":host{display:block;max-width:100%}:host.sky-data-grid-dock-fill{position:absolute;inset:0;display:flex;flex-direction:column}:host.sky-data-grid-dock-fill sky-ag-grid-wrapper{flex:1 1 auto;min-height:0}\n"] }]
|
|
1283
|
+
}], ctorParameters: () => [], propDecorators: { autoSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoSort", required: false }] }], autoPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPage", required: false }] }], columnFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnFit", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], dock: [{ type: i0.Input, args: [{ isSignal: true, alias: "dock", required: false }] }], labelText: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelText", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], multiselect: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiselect", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pageQueryParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageQueryParam", required: false }] }], rowCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowCount", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], topScrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "topScrollEnabled", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }], selectedRowIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedRowIds", required: false }] }, { type: i0.Output, args: ["selectedRowIdsChange"] }], selectedColumnIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedColumnIds", required: false }] }, { type: i0.Output, args: ["selectedColumnIdsChange"] }], sort: [{ type: i0.Input, args: [{ isSignal: true, alias: "sort", required: false }] }, { type: i0.Output, args: ["sortChange"] }], columns: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SkyDataGridColumn), { isSignal: true }] }] } });
|
|
1265
1284
|
|
|
1266
1285
|
/**
|
|
1267
1286
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skyux-data-grid.mjs","sources":["../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid-column.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid-column-inline-help.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid-event-utils.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid.html","../../../../../libs/components/data-grid/src/skyux-data-grid.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n TemplateRef,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\n/**\n * Defines a single column in a `SkyDataGrid`. Add one `sky-data-grid-column` for each\n * column to render.\n * @preview\n */\n@Component({\n selector: 'sky-data-grid-column',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDataGridColumn implements OnInit {\n /**\n * Whether the column is hidden. When the grid's `selectedColumnIds` is set,\n * it determines which columns display instead. In a data manager's column\n * picker, the column starts hidden and users can choose to display it.\n * @default false\n */\n public readonly columnHidden = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * The unique ID for the column. You must provide either the `columnId` or `field` property\n * for every column, but do not provide both. Use `columnId` when the column does not map directly to a field\n * in the data set.\n */\n public readonly columnId = input<string>();\n\n /**\n * The data type of the column used for sorting and rendering when a template is not provided.\n * @default 'text'\n */\n public readonly dataType = input<'text' | 'number' | 'date' | 'boolean'>(\n 'text',\n );\n\n /**\n * The text to display beneath the column's `headingText` in a data\n * manager's column picker.\n */\n public readonly description = input<string>();\n\n /**\n * The property to retrieve cell information from an entry on the grid `data` array.\n * You must provide either the `columnId` or `field` property for every column,\n * but do not provide both. When a column maps directly to a property on the data,\n * use `field`; the column's ID defaults to the `field` value.\n */\n public readonly field = input<string>();\n\n /**\n * When set, `flexWidth` takes precedence over `width` for sizing and works like\n * [CSS flex-grow](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow), where a column\n * with `flexWidth=\"2\"` is twice the width of a column with `flexWidth=\"1\"`, and `flexWidth=\"0\"` does not auto-expand.\n * If `width` is also set, it acts as the column's minimum width.\n */\n public readonly flexWidth = input<number | undefined, unknown>(undefined, {\n transform: (value) => numberAttribute(value, undefined),\n });\n\n /**\n * Text to display in the column header.\n * @required\n */\n public readonly headingText = input.required<string>();\n\n /**\n * Whether to visually hide `headingText` while keeping it available to\n * assistive technologies. The header cell still renders, so its sorting and\n * resizing controls remain available.\n * @default false\n */\n public readonly headingHidden = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n public readonly helpPopoverTitle = input<string>();\n\n /**\n * The content of the help popover. When specified, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the column header. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title.\n */\n public readonly helpPopoverContent = input<string | TemplateRef<unknown>>();\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 or drag other columns before it. In a data manager's\n * column picker, a locked column always displays and is not offered as an\n * option.\n * @default false\n */\n public readonly locked = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Whether the column can be resized by dragging the column header border.\n * @default true\n */\n public readonly resizable = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n public readonly sortable = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * The template for a column. This can be assigned as a reference\n * to the `template` input, or it can be assigned as an `<ng-template>` child\n * of the `sky-data-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 public readonly template = input<TemplateRef<unknown>>();\n\n /**\n * The width of the column in pixels. Used as the column's initial width; the\n * column can still be resized and is included when columns are sized to fit\n * the grid's width. When `flexWidth` is also set, `width` instead acts as the\n * column's minimum width. When no width is set, the column width is evenly distributed.\n */\n public readonly width = input<number | undefined, unknown>(undefined, {\n transform: (value) => numberAttribute(value, undefined),\n });\n\n /**\n * Whether text in this column should wrap to multiple lines.\n * @default false\n */\n public readonly wrapText = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n readonly #initialized = signal(false);\n protected readonly initialized = this.#initialized.asReadonly();\n protected readonly templateChild = contentChild(TemplateRef);\n\n constructor() {\n const logger = inject(SkyLogService);\n afterRenderEffect(() => {\n const columnId = this.columnId();\n const field = this.field();\n if (columnId && field) {\n logger.warn(\n `A <sky-data-grid-column> should have either a columnId or a field, but not both.`,\n );\n }\n if (!columnId && !field) {\n logger.warn(\n `A <sky-data-grid-column> must have a columnId or a field.`,\n );\n }\n });\n }\n\n public ngOnInit(): void {\n this.#initialized.set(true);\n }\n\n /**\n * @internal\n */\n protected readonly cellTemplate = computed<TemplateRef<unknown> | undefined>(\n () => {\n const template = this.template();\n const templateChild = this.templateChild();\n return template || templateChild;\n },\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { SkyAgGridHeaderInfo } from '@skyux/ag-grid';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-data-grid-column-inline-help',\n imports: [SkyHelpInlineModule],\n template: `@if (showHelpInline()) {\n <sky-help-inline\n [popoverTitle]=\"helpPopoverTitle()\"\n [popoverContent]=\"helpPopoverContent()\"\n />\n }`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDataGridColumnInlineHelp {\n protected readonly info = inject(SkyAgGridHeaderInfo);\n\n protected readonly showHelpInline = computed(\n () => !!this.helpPopoverContent(),\n );\n\n protected readonly helpPopoverTitle = computed(\n () => this.#headerComponentParams()?.helpPopoverTitle,\n );\n\n protected readonly helpPopoverContent = computed(\n () => this.#headerComponentParams()?.helpPopoverContent,\n );\n\n readonly #headerComponentParams = computed(\n () => this.info.column?.getColDef().headerComponentParams,\n );\n}\n","import {\n AgEventListener,\n AgEventTypeParams,\n AgPublicEventType,\n GridApi,\n} from 'ag-grid-community';\nimport { Observable } from 'rxjs';\n\n/**\n * @internal\n */\nexport function fromGridEvent<\n TEventType extends AgPublicEventType,\n TData = unknown,\n TContext = unknown,\n>(\n target: Pick<\n GridApi,\n 'addEventListener' | 'removeEventListener' | 'isDestroyed'\n >,\n eventType: TEventType,\n): Observable<AgEventTypeParams<TData, TContext>[TEventType]> {\n return new Observable<AgEventTypeParams<TData, TContext>[TEventType]>(\n (subscriber) => {\n const handler: AgEventListener<TData, TContext, TEventType> = (\n event: AgEventTypeParams<TData, TContext>[TEventType],\n ): void => subscriber.next(event);\n target.addEventListener(eventType, handler);\n\n return () => {\n if (!target.isDestroyed || !target.isDestroyed()) {\n target.removeEventListener(eventType, handler);\n }\n };\n },\n );\n}\n","import {\n coerceArray,\n coerceBooleanProperty,\n coerceNumberProperty,\n coerceStringArray,\n} from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n Signal,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n toObservable,\n toSignal,\n} from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { SkyAgGridModule, SkyAgGridService, SkyCellType } from '@skyux/ag-grid';\nimport { SkyLogService, SkyViewkeeperModule } from '@skyux/core';\nimport { SkyWaitModule } from '@skyux/indicators';\nimport {\n SkyDataColumnOption,\n SkyDataColumnSource,\n SkyDataSelectionSource,\n SkyDataSortSource,\n SkyPagingModule,\n} from '@skyux/lists';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport {\n AutoSizeStrategy,\n CellStyleModule,\n ClientSideRowModelModule,\n ColDef,\n Column,\n ColumnApiModule,\n ColumnAutoSizeModule,\n CustomEditorModule,\n EventApiModule,\n GridApi,\n GridOptions,\n GridStateModule,\n IRowNode,\n LocaleModule,\n ModuleRegistry,\n PaginationModule,\n RenderApiModule,\n RowApiModule,\n RowAutoHeightModule,\n RowSelectionModule,\n RowSelectionOptions,\n RowStyleModule,\n SELECTION_COLUMN_ID,\n} from 'ag-grid-community';\nimport {\n filter,\n map,\n ObservableInput,\n startWith,\n switchMap,\n takeUntil,\n} from 'rxjs';\n\nimport { SkyDataGridRowData } from '../types/data-grid-row-data';\nimport { SkyDataGridSort } from '../types/data-grid-sort';\n\nimport { SkyDataGridColumn } from './data-grid-column';\nimport { SkyDataGridColumnInlineHelp } from './data-grid-column-inline-help';\nimport { fromGridEvent } from './data-grid-event-utils';\n\n// Register only the AG Grid community modules this component actually uses,\n// rather than `AllCommunityModule`, to keep the consumer's bundle lean. This\n// covers the client-side row model, sorting, pagination, row selection, cell\n// and row styling, column auto-sizing, auto-height (text wrap), and the\n// grid/column state and event APIs the component and its harness rely on.\nModuleRegistry.registerModules([\n CellStyleModule,\n ClientSideRowModelModule,\n ColumnApiModule,\n ColumnAutoSizeModule,\n CustomEditorModule,\n EventApiModule,\n GridStateModule,\n LocaleModule,\n PaginationModule,\n RenderApiModule,\n RowApiModule,\n RowAutoHeightModule,\n RowSelectionModule,\n RowStyleModule,\n]);\n\nfunction arraySorted(arr: string[]): string[] {\n return arr.slice().sort((a, b) => a.localeCompare(b));\n}\n\nfunction arraysEqual(a: readonly string[], b: readonly string[]): boolean {\n return a.length === b.length && a.every((value, i) => value === b[i]);\n}\n\n// The data manager has its own copy of this function, because the two\n// libraries cannot share an internal function without exporting it.\nfunction columnWidthsEqual(\n a: Readonly<Record<string, number>>,\n b: Readonly<Record<string, number>>,\n): boolean {\n const keys = Object.keys(a);\n return (\n keys.length === Object.keys(b).length &&\n keys.every((key) => a[key] === b[key])\n );\n}\n\n/**\n * Members of `SkyDataGridColumn` that are `protected` because they are for\n * this grid's use only, not part of the column's public API.\n */\ninterface SkyDataGridColumnInternal {\n initialized: Signal<boolean>;\n cellTemplate: Signal<TemplateRef<unknown> | undefined>;\n}\n\n/**\n * Displays tabular data in a grid using a declarative set of columns and inputs.\n * Provide the `data` array and one `sky-data-grid-column` for each column to render.\n * @preview\n */\n@Component({\n selector: 'sky-data-grid',\n imports: [\n AgGridAngular,\n SkyAgGridModule,\n SkyPagingModule,\n SkyViewkeeperModule,\n SkyWaitModule,\n ],\n templateUrl: './data-grid.html',\n styleUrl: './data-grid.css',\n host: {\n '[class.sky-margin-stacked-lg]': 'stacked()',\n },\n providers: [\n { provide: SkyDataColumnSource, useExisting: SkyDataGrid },\n { provide: SkyDataSelectionSource, useExisting: SkyDataGrid },\n { provide: SkyDataSortSource, useExisting: SkyDataGrid },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDataGrid\n implements SkyDataColumnSource, SkyDataSelectionSource, SkyDataSortSource\n{\n /**\n * Whether the grid sorts the data order when a column header is clicked.\n * When `autoSort` is set to `false`, the data grid will not modify the sort\n * order, `sort` will emit a new value, and `data` will need to be updated.\n * Use this option when the data is returned from the server already sorted,\n * such as sorting a \"name\" column using last name.\n * @default true\n */\n public readonly autoSort = input<boolean, unknown>(true, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether the items in `data` represent the full result set used for paging.\n * This applies only when `pageSize` is greater than zero. When `true` (the\n * default), the grid pages through `data` on the client. When `false`, the\n * `rowCount` input is required to size the paging controls, and `data` should\n * be updated to the rows for the current page whenever `page` emits a new\n * value (server-side paging).\n * @default true\n */\n public readonly autoPage = input<boolean, unknown>(true, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * How the grid columns are sized. The valid options are `container`, which\n * attempts to fit the grid to the parent's full width, and `content`, which\n * attempts to optimize columns to display their contents and may exceed the\n * 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 * This property is applied when the grid initializes; changes after\n * initialization are not reflected.\n * @default 'container'\n */\n public readonly columnFit = input<'container' | 'content'>('container');\n\n /**\n * Whether to enable a compact layout for the grid when using modern theme. Compact layout\n * uses a smaller font size and row height to display more data in a smaller space.\n * @default false\n */\n public readonly compact = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The data for the grid. Each item must implement `SkyDataGridRowData`, and other properties should map to a `field` of the grid columns.\n * When `data` is `null` or `undefined`, the grid will show a loading indicator, and when `data` is an empty array,\n * the grid will show a \"no rows\" message.\n */\n public readonly data = input<SkyDataGridRowData[] | null | undefined>();\n\n /**\n * The text to read to screen readers to describe the grid. This sets the `aria-label` attribute on the grid container.\n */\n public readonly labelText = input<string>();\n\n /**\n * Whether data is being loaded. When `loading` is true or when `data` is nullish,\n * the grid shows a waiting overlay and is not interactive.\n * @default false\n */\n public readonly loading = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The minimum height of the grid in pixels.\n * @default 50\n */\n public readonly minHeight = input<number, unknown>(50, {\n transform: (value: unknown) => coerceNumberProperty(value, 50),\n });\n\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid.\n * @default false\n */\n public readonly multiselect = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The number of items to display per page. Setting a value greater than zero\n * enables paging. When `autoPage` is `true` (the default), the grid pages\n * through `data` on the client; when `autoPage` is `false`, set `rowCount` to\n * the total number of rows and update `data` as `page` changes.\n */\n public readonly pageSize = input<number | undefined, unknown>(undefined, {\n transform: (value: unknown) => coerceNumberProperty(value, undefined),\n });\n\n /**\n * The query parameter name that stores the current page number.\n * When set, the grid syncs page changes to the URL for deep linking, and there should only be one grid on the page.\n */\n public readonly pageQueryParam = input<string | undefined>();\n\n /**\n * The total number of rows to page through, used to calculate how many pages\n * the paging controls display. Required when `pageSize` is greater than zero\n * and `autoPage` is `false`; ignored when `autoPage` is `true` because the\n * length of `data` is used instead.\n */\n public readonly rowCount = input<number | undefined, unknown>(undefined, {\n transform: (value: unknown) => {\n if (typeof value === 'undefined') {\n return undefined;\n }\n return coerceNumberProperty(value, undefined);\n },\n });\n\n /**\n * Whether the data grid is stacked with another element below it. When specified, the appropriate\n * vertical spacing is automatically added to the data grid.\n * @default false\n */\n public readonly stacked = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether to move the horizontal scrollbar to just below the header row.\n * This property is applied when the grid initializes; changes after\n * initialization are not reflected.\n * @default false\n */\n public readonly topScrollEnabled = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The current page number of the grid when `pageSize` has been set. This is two-way bindable:\n * it updates as the user navigates pages, and you can set it to change the current page.\n * When `autoPage` is `false`, update `data` to the rows for the new page whenever this changes.\n * @default 1\n */\n public readonly page = model<number>(1);\n\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * Rows with IDs that are not included are de-selected in the grid. This is two-way bindable:\n * it emits the updated set of IDs when the user changes the selection.\n * @default []\n */\n public readonly selectedRowIds = model<string[]>([]);\n\n /**\n * The IDs of the columns to display, in display order. Columns that are not\n * included are hidden. An ID that does not match a column is ignored until a\n * column with that ID is declared. This is two-way bindable: once set, it\n * emits a new value when the user reorders columns. When `undefined`, every\n * column displays in declaration order except those marked `columnHidden`.\n * Displayed locked columns come first.\n */\n public readonly selectedColumnIds = model<string[] | undefined>();\n\n /**\n * The current sort applied to the grid. This is two-way bindable: it emits a new value\n * whenever the user sorts a column, and you can set it to sort the grid programmatically.\n * When `autoSort` is `false`, the grid emits the new value here but does not reorder the\n * data itself, leaving it to you to update `data`.\n */\n public readonly sort = model<SkyDataGridSort | undefined>(undefined);\n\n protected readonly columns = contentChildren(SkyDataGridColumn);\n\n /**\n * The columns the grid can display, in declaration order. Read by column\n * picker integrations through `SkyDataColumnSource`.\n * @internal\n */\n public readonly columnOptions = computed<readonly SkyDataColumnOption[]>(() =>\n this.#columnCatalog().map(({ id, column }) => ({\n alwaysDisplayed: column.locked(),\n description: column.description(),\n id,\n initialHide: column.columnHidden(),\n labelText: column.headingText(),\n })),\n );\n\n /**\n * The widths in pixels of the columns users resized, keyed by column ID.\n * Read by data manager integrations through `SkyDataColumnSource`.\n * @internal\n */\n public readonly columnWidths = computed<Readonly<Record<string, number>>>(\n () => this.#columnWidths() ?? {},\n );\n\n /**\n * The IDs of the columns that display, in display order: the\n * `selectedColumnIds` that match a declared column or, when\n * `selectedColumnIds` is `undefined`, every column not marked `columnHidden`.\n * Locked columns come first, as the grid displays them. Read by column\n * picker integrations through `SkyDataColumnSource`.\n * @internal\n */\n public readonly displayedColumnIds = computed<string[]>(\n () => {\n const catalog = this.#columnCatalog();\n const selectedColumnIds = this.selectedColumnIds();\n const declaredIds = catalog.map(({ id }) => id);\n const lockedIds = catalog\n .filter(({ column }) => column.locked())\n .map(({ id }) => id);\n\n const columnIds = selectedColumnIds\n ? selectedColumnIds.filter((id) => declaredIds.includes(id))\n : catalog\n .filter(({ column }) => !column.columnHidden())\n .map(({ id }) => id);\n\n return [\n ...columnIds.filter((id) => lockedIds.includes(id)),\n ...columnIds.filter((id) => !lockedIds.includes(id)),\n ];\n },\n { equal: arraysEqual },\n );\n\n /**\n * The selectors of the elements the grid keeps visible at the top of the\n * viewport while the page scrolls. Read by column picker integrations\n * through `SkyDataColumnSource`.\n * @internal\n */\n public readonly viewkeeperClasses = computed(() => {\n const classes = ['.ag-header'];\n if (this.topScrollEnabled()) {\n classes.push('.ag-body-horizontal-scroll');\n }\n return classes;\n });\n\n protected readonly gridApi = signal<GridApi<SkyDataGridRowData> | undefined>(\n undefined,\n );\n protected readonly gridOptions = computed(() => {\n const hasColumnDefs = this.#hasColumnDefs();\n if (!hasColumnDefs) {\n return undefined;\n }\n const columnDefs = untracked(() => this.#columnDefs());\n const { pagination, paginationPageSize } = untracked(() =>\n this.#paginationOptions(),\n );\n const rowData = untracked(() => this.rowData());\n // Seed the initial sort through AG Grid's own state so it is applied as the\n // grid initializes (and re-applied when the grid is recreated). Subsequent\n // sort changes are applied at runtime by the dedicated `sort` effect.\n // `partialColumnState` keeps AG Grid from resetting every other column state\n // (flex, visibility, pinning) that the state object doesn't mention.\n const sort = untracked(() => this.sort());\n return this.#gridService.getGridOptions({\n gridOptions: {\n columnDefs,\n context: {\n enableTopScroll: untracked(() => this.topScrollEnabled()),\n },\n domLayout: 'autoHeight',\n initialState: sort\n ? {\n partialColumnState: true,\n sort: {\n sortModel: [\n { colId: sort.field as string, sort: sort.direction },\n ],\n },\n }\n : undefined,\n loading: untracked(() => this.loading() || !Array.isArray(this.data())),\n // A user moves columns with the keyboard or by dragging a column\n // header. A drag moves columns as it goes, and a drag released outside\n // the grid or cancelled with Escape reports no finished move, so sync\n // when any drag ends too.\n onColumnMoved: (event) => {\n if (event.finished) {\n this.#syncColumnOrderFromGrid(event.api);\n }\n },\n // The grid's initial content sizing runs after the grid is ready and\n // would replace the widths applied then, so apply them again. Content\n // sizing after that is a user double-clicking a column's edge.\n onColumnResized: (event) => {\n if (\n event.source === 'autosizeColumns' &&\n this.#awaitingInitialAutoSize\n ) {\n this.#awaitingInitialAutoSize = false;\n this.#gridSizedWidths.clear();\n this.#rememberGridSizedWidths(event.api);\n this.#reapplyColumnWidths(event.api);\n } else if (\n (event.source === 'uiColumnResized' && event.finished) ||\n event.source === 'autosizeColumns'\n ) {\n // AG Grid reports the resized columns with every resize it\n // dispatches from these sources.\n /* istanbul ignore next */\n this.#syncColumnWidthsFromGrid(event.columns ?? []);\n }\n },\n onDragCancelled: (event) => this.#syncColumnOrderFromGrid(event.api),\n onDragStopped: (event) => this.#syncColumnOrderFromGrid(event.api),\n onGridReady: (args) => {\n // The displayed columns may have changed since the column\n // definitions were created.\n this.#applyDisplayedColumns(args.api, this.displayedColumnIds());\n this.#awaitingInitialAutoSize =\n !!args.api.getGridOption('autoSizeStrategy');\n this.#gridSizedWidths.clear();\n this.#rememberGridSizedWidths(args.api);\n this.#reapplyColumnWidths(args.api);\n this.gridApi.set(args.api);\n this.gridReady.set(true);\n },\n pagination,\n paginationPageSize,\n suppressMultiSort: true,\n suppressPaginationPanel: true,\n rowData,\n rowSelection: untracked(() => this.#getRowSelection()),\n autoSizeStrategy: untracked(() => this.#getAutoSizeStrategy()),\n },\n }) as GridOptions<SkyDataGridRowData>;\n });\n\n protected readonly gridReady = signal(false);\n protected readonly rowData = computed(() => {\n const rowData = this.data() ?? [];\n const pageSize = this.pageSize();\n if (!this.autoPage() && pageSize && rowData.length > pageSize) {\n this.#logger.warn(\n 'When using paging and `autoPage` is not enabled, the `data` input will be limited to the number of rows specified by `pageSize`. To display more rows, update the `data` input when the `page` changes.',\n );\n return rowData.slice(0, pageSize);\n }\n return rowData;\n });\n protected readonly pageCount = computed(() => {\n const dataLength = this.pageItemsCount();\n const pageSize = this.pageSize();\n const gridReady = this.gridReady();\n if (!gridReady || !pageSize) {\n return 0;\n }\n return Math.ceil(dataLength / pageSize);\n });\n protected readonly pageItemsCount = linkedSignal({\n source: () => {\n const pageSize = this.pageSize();\n const gridReady = this.gridReady();\n const rowCount = this.rowCount() ?? 0;\n if (!gridReady || !pageSize) {\n return 0;\n }\n const dataLength = this.rowData().length;\n const autoPage = this.autoPage();\n return autoPage ? dataLength : rowCount;\n },\n computation: (source, previous): number => {\n // Avoid flickering the pagination controls while data is updating.\n if (this.loading()) {\n return previous?.value || 0;\n }\n return source;\n },\n });\n\n protected readonly skyViewkeeper = computed(() =>\n this.#viewkeeperDisabled() ? [] : this.viewkeeperClasses(),\n );\n\n readonly #activatedRoute = inject(ActivatedRoute, { optional: true });\n /**\n * The widths in pixels of the columns users resized, keyed by column ID.\n * This is `undefined` until a data manager integration sets the widths, so a\n * grid outside a data manager neither tracks nor restores them.\n */\n readonly #columnWidths = signal<Record<string, number> | undefined>(\n undefined,\n );\n /**\n * The widths the grid gave the columns that have neither a flex nor a\n * width, from before a column width replaced them.\n */\n readonly #gridSizedWidths = new Map<string, number>();\n readonly #selectionPruningDisabled = signal(false);\n readonly #viewkeeperDisabled = signal(false);\n #awaitingInitialAutoSize = false;\n readonly #gridService = inject(SkyAgGridService);\n readonly #logger = inject(SkyLogService);\n readonly #router = inject(Router, { optional: true });\n\n readonly #columnDefs = computed<ColDef<SkyDataGridRowData>[]>(() => {\n const catalog = this.#columnCatalog();\n // Read untracked so that showing, hiding, or reordering columns does not\n // rebuild the column definitions, which would reset flex columns the user\n // resized. An effect applies those changes as runtime column state instead.\n const displayedIds = untracked(this.displayedColumnIds);\n const entriesById = new Map(catalog.map((entry) => [entry.id, entry]));\n\n // Displayed columns first, in display order, followed by the hidden\n // columns. Hidden columns keep their column definitions so AG Grid retains\n // their state and they can be shown again without being recreated.\n const displayedColDefs = displayedIds\n .map((id) => entriesById.get(id))\n .filter((entry) => !!entry)\n .map(({ column, id }) => this.#createColDef(column, id, false));\n const hiddenColDefs = catalog\n .filter(({ id }) => !displayedIds.includes(id))\n .map(({ column, id }) => this.#createColDef(column, id, true));\n\n return [...displayedColDefs, ...hiddenColDefs];\n });\n readonly #hasColumnDefs = computed(() => this.#columnDefs().length > 0);\n\n /**\n * The IDs of the columns that display, in a fixed order, so that moving a\n * column does not change it.\n */\n readonly #displayedColumnIdSet = computed(\n () => arraySorted(this.displayedColumnIds()),\n { equal: arraysEqual },\n );\n\n /**\n * The declared columns that have a usable ID, in declaration order. Columns\n * missing both `columnId` and `field` are omitted; `SkyDataGridColumn`\n * already warns about them. A repeated ID is suffixed the way AG Grid\n * suffixes it (`name_1`), so that every column can be addressed.\n */\n readonly #columnCatalog = computed(() => {\n const catalog: { column: SkyDataGridColumn; id: string }[] = [];\n\n for (const column of this.columns()) {\n const declaredId = column.columnId() ?? column.field();\n\n if (\n declaredId &&\n (column as unknown as SkyDataGridColumnInternal).initialized()\n ) {\n let id = declaredId;\n for (let i = 1; catalog.some((entry) => entry.id === id); i++) {\n id = `${declaredId}_${i}`;\n }\n catalog.push({ column, id });\n }\n }\n\n return catalog;\n });\n\n readonly #gridDestroyed = toObservable(this.gridApi).pipe(\n filter(Boolean),\n switchMap((api) => fromGridEvent(api, 'gridPreDestroyed')),\n );\n readonly #gridSelectedRowIds = toObservable(this.gridApi).pipe(\n filter(Boolean),\n switchMap((api) =>\n fromGridEvent(api, 'selectionChanged').pipe(\n takeUntil(this.#gridDestroyed),\n map(() => arraySorted(this.#getRowIds(api.getSelectedNodes()))),\n ),\n ),\n );\n readonly #gridSortChange = toObservable(this.gridApi).pipe(\n filter(Boolean),\n switchMap((api) =>\n fromGridEvent(api, 'sortChanged').pipe(\n takeUntil(this.#gridDestroyed),\n map((sortEvent): SkyDataGridSort | undefined => {\n const sortColumn = sortEvent?.columns?.find((col) => !!col.getSort());\n if (sortColumn) {\n return {\n direction: sortColumn.getSort() as 'asc' | 'desc',\n field: sortColumn.getColId(),\n };\n }\n return undefined;\n }),\n ),\n ),\n );\n /**\n * The pagination options passed to AG Grid; not used when `autoPage` is false.\n */\n readonly #paginationOptions = computed(() => {\n const pageSize = this.pageSize();\n const pagination = this.autoPage() && !!pageSize;\n const paginationPageSize = (pagination && pageSize) || undefined;\n return {\n pagination,\n paginationPageSize,\n };\n });\n readonly #queryParamPage = toSignal(\n toObservable(this.pageQueryParam).pipe(\n switchMap(\n (pageQueryParam): ObservableInput<number> =>\n pageQueryParam && this.#activatedRoute\n ? this.#activatedRoute.queryParamMap.pipe(\n startWith(this.#activatedRoute.snapshot.queryParamMap),\n map((params) =>\n coerceNumberProperty(params.get(pageQueryParam), 1),\n ),\n )\n : [],\n ),\n ),\n { initialValue: NaN },\n );\n\n constructor() {\n // Update specific grid options after the grid has been loaded. These read\n // `gridApi` untracked because a recreated grid rebuilds its options from the\n // `gridOptions` computed; the selection and page effects below instead track\n // `gridApi` so they re-apply their state to a freshly created grid.\n effect(() => {\n const api = untracked(() => this.gridApi());\n const columnDefs = this.#columnDefs();\n if (api) {\n api.setGridOption('columnDefs', columnDefs);\n untracked(() => {\n this.#rememberGridSizedWidths(api);\n // New column definitions make columns users resized flex again.\n this.#reapplyColumnWidths(api);\n });\n }\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const isLoading = this.loading() || !Array.isArray(this.data());\n api?.setGridOption('loading', isLoading);\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const { pagination, paginationPageSize } = this.#paginationOptions();\n api?.setGridOption('pagination', pagination);\n api?.setGridOption('paginationPageSize', paginationPageSize);\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const rowData = this.rowData();\n api?.setGridOption('rowData', rowData);\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const rowSelection = this.#getRowSelection();\n api?.setGridOption('rowSelection', rowSelection);\n });\n\n // Apply inputs once the grid is loaded and on subsequent changes.\n effect(() => {\n const api = this.gridApi();\n const isLoading = this.loading() || !Array.isArray(this.data());\n // Don't reconcile selection while data is still loading; pruning here\n // would wipe a selection a consumer set before the rows arrived.\n // An empty array is \"loaded but no rows\", so only `null`/`undefined` skip.\n if (isLoading) {\n return;\n }\n const validRowIds = new Set(this.rowData().map((row) => row.id));\n const selectedRowIds = coerceStringArray(this.selectedRowIds());\n const validSelectedRowIds = selectedRowIds.filter((id) =>\n validRowIds.has(id),\n );\n // A data manager integration keeps the IDs of rows its search or\n // filters hide, so they are selected again when the rows return.\n if (\n this.autoPage() &&\n !this.#selectionPruningDisabled() &&\n validSelectedRowIds.length !== selectedRowIds.length\n ) {\n this.selectedRowIds.set(validSelectedRowIds);\n }\n if (!api) {\n return;\n }\n // Diff against the grid's current selection; only touch nodes that\n // change, so a no-op reconcile fires no selectionChanged event.\n const desired = new Set(validSelectedRowIds);\n const selectedNodes = api.getSelectedNodes();\n const alreadySelected = new Set(this.#getRowIds(selectedNodes));\n const toDeselect = selectedNodes.filter(\n (node) => !desired.has(node.id as string),\n );\n const toSelect = validSelectedRowIds\n .filter((id) => !alreadySelected.has(id))\n .map((id) => api.getRowNode(id))\n .filter((node): node is IRowNode<SkyDataGridRowData> => !!node);\n if (toDeselect.length) {\n api.setNodesSelected({ nodes: toDeselect, newValue: false });\n }\n if (toSelect.length) {\n api.setNodesSelected({ nodes: toSelect, newValue: true });\n }\n });\n // Apply the sort as runtime column state rather than through `columnDefs`,\n // so sorting never re-applies the declared column order and wipes a\n // user's drag-reordered (or resized) columns. Tracks `gridApi` so the\n // sort re-applies to a freshly created grid.\n effect(() => {\n const api = this.gridApi();\n const sort = this.sort();\n if (!api) {\n return;\n }\n api.applyColumnState({\n state: sort\n ? [\n {\n colId: sort.field as string,\n sort: sort.direction,\n },\n ]\n : [],\n defaultState: { sort: null },\n });\n });\n // Apply changes to the displayed columns as runtime column state rather\n // than through `columnDefs`, so showing, hiding, or reordering columns does\n // not reset flex columns the user resized. Only a change to the displayed\n // columns re-runs this, so a column order the user set by dragging a header\n // is otherwise left alone.\n effect(() => {\n const displayedIds = this.displayedColumnIds();\n const api = untracked(() => this.gridApi());\n if (api) {\n this.#applyDisplayedColumns(api, displayedIds);\n }\n });\n // A grid that fits its columns to the container, and has no flex columns\n // to take up the space, does not otherwise resize them when a column is\n // hidden or shown. Moving a column leaves the displayed set alone, so it\n // does not discard the widths a user set in a grid that is not tracking\n // them.\n effect(() => {\n this.#displayedColumnIdSet();\n const api = untracked(() => this.gridApi());\n if (\n api &&\n untracked(this.columnFit) === 'container' &&\n !untracked(() => this.#hasFlexColumns())\n ) {\n this.#fitColumnsToContainer(api);\n }\n });\n effect(() => {\n const api = this.gridApi();\n const page = this.page();\n const pageCount = this.pageCount();\n if (!pageCount || !api) {\n return;\n }\n if (page < 1) {\n this.currentPageChange(1);\n } else if (page > pageCount) {\n this.currentPageChange(pageCount);\n } else if (untracked(this.autoPage)) {\n api.paginationGoToPage(page - 1);\n }\n });\n // Sync `page` to the URL query parameter when it changes, e.g. when set\n // programmatically rather than through the paging controls (which\n // already navigate directly). Tracks only `page` itself, not `gridApi`/\n // `pageCount`, so a grid becoming ready does not push a `page` value\n // that is still stale from an in-flight URL change onto the URL. Only\n // syncs valid page numbers; out-of-range values are corrected by the\n // effect above instead of being reflected in the URL.\n effect(() => {\n const page = this.page();\n if (Number.isInteger(page) && page >= 1) {\n this.#syncPageQueryParam(page);\n }\n });\n\n effect(() => {\n const api = this.gridApi();\n const label = this.labelText();\n api?.setGridAriaProperty('label', label ?? null);\n });\n\n // Sync page from URL query parameter.\n effect(() => {\n const queryParamPage = this.#queryParamPage();\n const pageSize = this.pageSize();\n if (pageSize && Number.isInteger(queryParamPage)) {\n this.page.set(queryParamPage);\n }\n });\n\n // Warn when server-side paging is configured without the required\n // `rowCount`. Without it, `pageItemsCount` resolves to zero and the paging\n // controls silently disappear. Only warn once data has loaded so a grid\n // that is still fetching its first page does not trigger a false positive.\n effect(() => {\n if (\n !this.autoPage() &&\n this.pageSize() &&\n this.rowCount() === undefined &&\n !this.loading() &&\n Array.isArray(this.data())\n ) {\n this.#logger.warn(\n 'When using paging and `autoPage` is not enabled, the `rowCount` input is required so the paging controls know how many pages to display. Set `rowCount` to the total number of rows available on the server.',\n );\n }\n });\n\n // Warn when `pageQueryParam` is configured without a `Router` and\n // `ActivatedRoute` available for injection. Without them, page changes\n // fall back to updating the `page` model directly instead of the URL.\n effect(() => {\n if (this.pageQueryParam() && (!this.#router || !this.#activatedRoute)) {\n this.#logger.warn(\n 'The `pageQueryParam` input is set, but a `Router` and `ActivatedRoute` are not available for injection. Page changes will not be reflected in the URL.',\n );\n }\n });\n\n this.#gridDestroyed.pipe(takeUntilDestroyed()).subscribe(() => {\n this.gridApi.set(undefined);\n this.gridReady.set(false);\n });\n\n // Emit updates from the grid.\n this.#gridSelectedRowIds\n .pipe(\n takeUntilDestroyed(),\n map((ids) => coerceStringArray(ids)),\n )\n .subscribe((selectedRowIds) => {\n // Maintain IDs not in the current dataset.\n const validRowIds = new Set(this.rowData().map(({ id }) => id));\n const selectedSet = new Set(selectedRowIds);\n this.selectedRowIds.update((val) => {\n const valSet = new Set(val);\n const hasAddition = selectedRowIds.some((id) => !valSet.has(id));\n const hasRemoval = val.some(\n (id) => validRowIds.has(id) && !selectedSet.has(id),\n );\n if (hasAddition || hasRemoval) {\n return [\n ...new Set([\n ...val.filter((id) => !validRowIds.has(id)),\n ...selectedRowIds,\n ]),\n ].sort((a, b) => a.localeCompare(b));\n }\n return val;\n });\n });\n // Emit the grid's sort, including no sort once no column is sorted, so\n // the two-way bound model does not retain a stale value.\n this.#gridSortChange\n .pipe(takeUntilDestroyed())\n .subscribe((sortChange) => this.setSort(sortChange));\n }\n\n /**\n * Stops the grid from removing the IDs of rows that are not in `data` from\n * `selectedRowIds`. Called by data manager integrations through\n * `SkyDataSelectionSource` when they keep rows that a search or filter hides\n * selected.\n * @internal\n */\n public disableSelectionPruning(): void {\n this.#selectionPruningDisabled.set(true);\n }\n\n /**\n * Stops the grid from keeping the `viewkeeperClasses` elements visible\n * itself. Called by column picker integrations through `SkyDataColumnSource`\n * when a container keeps them visible instead.\n * @internal\n */\n public disableViewkeeper(): void {\n this.#viewkeeperDisabled.set(true);\n }\n\n /**\n * Sets the columns that display and their order. Called by column picker\n * integrations through `SkyDataColumnSource`.\n * @internal\n */\n public setDisplayedColumnIds(columnIds: readonly string[]): void {\n const selectedColumnIds = this.selectedColumnIds();\n if (!selectedColumnIds || !arraysEqual(selectedColumnIds, columnIds)) {\n this.selectedColumnIds.set([...columnIds]);\n }\n }\n\n /**\n * Sets the widths in pixels of columns, keyed by column ID, and starts\n * tracking the widths users give columns. Columns that are not included\n * return to the widths they are declared with or, when declared without\n * one, the widths the grid gave them. Called by data manager\n * integrations through `SkyDataColumnSource`.\n * @internal\n */\n public setColumnWidths(columnWidths: Readonly<Record<string, number>>): void {\n const currentWidths = this.#columnWidths();\n if (currentWidths && columnWidthsEqual(currentWidths, columnWidths)) {\n return;\n }\n\n this.#columnWidths.set({ ...columnWidths });\n\n const api = untracked(this.gridApi);\n if (api) {\n this.#applyColumnWidths(api, columnWidths);\n }\n }\n\n /**\n * Sets the selected rows. Called by data manager integrations through\n * `SkyDataSelectionSource`.\n * @internal\n */\n public setSelectedRowIds(selectedRowIds: readonly string[]): void {\n if (\n !arraysEqual(coerceStringArray(this.selectedRowIds()), selectedRowIds)\n ) {\n this.selectedRowIds.set([...selectedRowIds]);\n }\n }\n\n /**\n * Sets the sort the grid applies. Called by data manager integrations\n * through `SkyDataSortSource`.\n * @internal\n */\n public setSort(sort: SkyDataGridSort | undefined): void {\n const currentSort = this.sort();\n if (\n currentSort?.field !== sort?.field ||\n currentSort?.direction !== sort?.direction\n ) {\n this.sort.set(sort);\n }\n }\n\n protected currentPageChange(page: number): void {\n if (page && page !== this.page()) {\n const pageQueryParam = this.pageQueryParam();\n if (pageQueryParam && this.#router && this.#activatedRoute) {\n // When using a query parameter, send the change through the router.\n this.#navigateToPageQueryParam(pageQueryParam, page);\n } else {\n this.page.set(page);\n }\n }\n }\n\n /**\n * Updates the URL to reflect a programmatic page change so deep linking stays\n * in sync when a consumer drives `page` directly instead of using the paging\n * controls. Reads untracked so it does not add reactive dependencies to the\n * effect that calls it.\n */\n #syncPageQueryParam(page: number): void {\n const pageQueryParam = untracked(this.pageQueryParam);\n if (pageQueryParam && untracked(this.#queryParamPage) !== page) {\n this.#navigateToPageQueryParam(pageQueryParam, page);\n }\n }\n\n #navigateToPageQueryParam(pageQueryParam: string, page: number): void {\n void this.#router?.navigate([], {\n relativeTo: this.#activatedRoute,\n queryParams: {\n [pageQueryParam]: page === 1 ? null : page,\n },\n queryParamsHandling: 'merge',\n });\n }\n\n #createColDef(col: SkyDataGridColumn, colId: string, hide: boolean): ColDef {\n const field = col.field();\n const colDef: ColDef = {\n colId,\n field,\n headerName: col.headingText(),\n headerComponentParams: this.#getHeaderComponentParams(col),\n hide,\n initialHide: hide,\n resizable: col.resizable(),\n sortable: col.sortable(),\n lockPosition: col.locked(),\n suppressMovable: col.locked(),\n type: [],\n autoHeight: col.wrapText(),\n wrapText: col.wrapText(),\n };\n if (col.dataType() === 'date') {\n (colDef.type as string[]).push(SkyCellType.Date);\n colDef.cellDataType = 'dateString';\n } else if (field && col.dataType() === 'number') {\n (colDef.type as string[]).push(SkyCellType.Number);\n colDef.cellDataType = 'number';\n colDef.valueGetter = (params): number | null => {\n const n = Number(params.data?.[field]);\n return Number.isFinite(n) ? n : null;\n };\n } else if (col.dataType() === 'boolean') {\n colDef.cellDataType = 'boolean';\n } else {\n (colDef.type as string[]).push(SkyCellType.Text);\n colDef.cellDataType = 'text';\n }\n const colInternal = col as unknown as SkyDataGridColumnInternal;\n if (colInternal.cellTemplate()) {\n (colDef.type as string[]).push(SkyCellType.Template);\n colDef.cellRendererParams = { template: colInternal.cellTemplate };\n }\n if (!this.autoSort()) {\n colDef.comparator = (): number => 0;\n }\n this.#applyColumnWidthSettings(col, colDef);\n return colDef;\n }\n\n #applyColumnWidthSettings(col: SkyDataGridColumn, colDef: ColDef): void {\n if (Number.isFinite(col.flexWidth())) {\n colDef.flex = col.flexWidth();\n colDef.initialFlex = col.flexWidth();\n if (Number.isFinite(col.width())) {\n colDef.minWidth = col.width();\n }\n } else if (Number.isFinite(col.width())) {\n colDef.initialWidth = col.width();\n colDef.suppressAutoSize = true;\n }\n if (!col.resizable() || col.flexWidth() === 0) {\n colDef.suppressSizeToFit = true;\n colDef.suppressAutoSize = true;\n if (!col.resizable() && Number.isFinite(col.width())) {\n colDef.minWidth = col.width();\n colDef.maxWidth = col.width();\n }\n }\n }\n\n #getHeaderComponentParams(col: SkyDataGridColumn): object {\n return {\n headerHidden: col.headingHidden(),\n helpPopoverTitle: col.helpPopoverTitle(),\n helpPopoverContent: col.helpPopoverContent(),\n inlineHelpComponent: SkyDataGridColumnInlineHelp,\n };\n }\n\n #applyDisplayedColumns(api: GridApi, displayedIds: readonly string[]): void {\n const hiddenIds = untracked(this.#columnCatalog)\n .map(({ id }) => id)\n .filter((id) => !displayedIds.includes(id));\n api.applyColumnState({\n state: [\n // AG Grid moves columns missing from the state to the end, which\n // would put the multiselect column after any locked columns.\n { colId: SELECTION_COLUMN_ID },\n ...displayedIds.map((colId) => ({ colId, hide: false })),\n ...hiddenIds.map((colId) => ({ colId, hide: true })),\n ],\n applyOrder: true,\n });\n }\n\n #syncColumnOrderFromGrid(api: GridApi): void {\n // Column moves are tracked only once `selectedColumnIds` is set, so a grid\n // without it keeps following each column's `columnHidden` setting. Applying\n // a column layout moves columns too, so compare against what the grid\n // should display; only a move the user made differs.\n const selectedColumnIds = this.selectedColumnIds();\n if (!selectedColumnIds) {\n return;\n }\n\n const displayedColumnIds = api\n .getColumnState()\n .filter((state) => !state.hide && state.colId !== SELECTION_COLUMN_ID)\n .map((state) => state.colId);\n\n if (!arraysEqual(this.displayedColumnIds(), displayedColumnIds)) {\n // Keep the IDs of columns that are not declared, such as a column\n // rendered conditionally, so they display once the column is declared.\n const declaredIds = this.#columnCatalog().map(({ id }) => id);\n this.selectedColumnIds.set([\n ...displayedColumnIds,\n ...selectedColumnIds.filter((id) => !declaredIds.includes(id)),\n ]);\n }\n }\n\n /**\n * Applies the column widths, and returns columns without one to the widths\n * they are declared with.\n */\n #applyColumnWidths(\n api: GridApi,\n columnWidths: Readonly<Record<string, number>>,\n ): void {\n api.applyColumnState({\n state: untracked(this.#columnDefs).map(\n ({ colId, flex, initialWidth }) => {\n const width = columnWidths[colId as string];\n // A width stops a column flexing, as a user resizing it does.\n return width === undefined\n ? {\n colId: colId as string,\n flex: flex || null,\n width:\n initialWidth ?? this.#gridSizedWidths.get(colId as string),\n }\n : { colId: colId as string, flex: null, width };\n },\n ),\n });\n }\n\n /**\n * Remembers the widths of columns that have neither a flex nor a width, so\n * they can return to them. AG Grid ignores a column state without a width,\n * so it leaves a column at the width a user gave it.\n */\n #rememberGridSizedWidths(api: GridApi): void {\n const gridSizedColumnIds = untracked(this.#columnDefs)\n .filter(({ flex, initialWidth }) => !flex && initialWidth === undefined)\n .map(({ colId }) => colId);\n\n for (const column of api.getAllGridColumns()) {\n const colId = column.getColId();\n if (\n gridSizedColumnIds.includes(colId) &&\n !this.#gridSizedWidths.has(colId)\n ) {\n this.#gridSizedWidths.set(colId, column.getActualWidth());\n }\n }\n }\n\n /**\n * Fits the columns to the container, the way the grid does when it\n * initializes: the columns the grid does not size to their content, such as\n * those with a declared width and the multiselect column, and the columns\n * with a width a data manager integration tracks, keep their widths.\n */\n #fitColumnsToContainer(api: GridApi): void {\n const columnWidths = untracked(this.columnWidths);\n api.sizeColumnsToFit({\n columnLimits: api\n .getAllDisplayedColumns()\n .filter(\n (column) =>\n column.getColDef().suppressAutoSize ||\n columnWidths[column.getColId()] !== undefined,\n )\n .map((column) => ({\n key: column.getColId(),\n minWidth: column.getActualWidth(),\n maxWidth: column.getActualWidth(),\n })),\n });\n }\n\n #reapplyColumnWidths(api: GridApi): void {\n const columnWidths = this.#columnWidths();\n if (columnWidths && Object.keys(columnWidths).length > 0) {\n this.#applyColumnWidths(api, columnWidths);\n }\n }\n\n #syncColumnWidthsFromGrid(columns: readonly Column[]): void {\n const columnWidths = this.#columnWidths();\n if (!columnWidths) {\n return;\n }\n\n // A column a user resizes stops flexing. The flex columns that only filled\n // the space it left keep flexing, so their widths are not the user's.\n const updatedWidths = { ...columnWidths };\n for (const column of columns.filter((col) => !col.getFlex())) {\n updatedWidths[column.getColId()] = column.getActualWidth();\n }\n\n if (!columnWidthsEqual(columnWidths, updatedWidths)) {\n this.#columnWidths.set(updatedWidths);\n }\n }\n\n #getRowIds(rows: (IRowNode | undefined)[] | null | undefined): string[] {\n return coerceArray(rows)\n .map((node) => node?.id as string)\n .filter(Boolean) as string[];\n }\n\n #hasFlexColumns(): boolean {\n return this.#columnDefs().some((col) => !!col.initialFlex);\n }\n\n #getAutoSizeStrategy(): AutoSizeStrategy | undefined {\n if (this.#hasFlexColumns()) {\n // Avoid the console warning if `autoSizeColumns` is called on a grid with flex columns, so skip it.\n return undefined;\n }\n return {\n type: 'fitCellContents',\n skipHeader: true,\n scaleUpToFitGridWidth: this.columnFit() === 'container',\n };\n }\n\n #getRowSelection(): RowSelectionOptions<SkyDataGridRowData> {\n return this.multiselect()\n ? {\n checkboxes: true,\n checkboxLocation: 'selectionColumn',\n headerCheckbox: true,\n mode: 'multiRow',\n }\n : { checkboxes: false, mode: 'singleRow' };\n }\n}\n","<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skyux-data-grid.mjs","sources":["../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid-column.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid-column-inline-help.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid-event-utils.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid.ts","../../../../../libs/components/data-grid/src/lib/modules/data-grid/data-grid.html","../../../../../libs/components/data-grid/src/skyux-data-grid.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n TemplateRef,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\n/**\n * Defines a single column in a `SkyDataGrid`. Add one `sky-data-grid-column` for each\n * column to render.\n * @preview\n */\n@Component({\n selector: 'sky-data-grid-column',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDataGridColumn implements OnInit {\n /**\n * Whether the column is hidden. When the grid's `selectedColumnIds` is set,\n * it determines which columns display instead. In a data manager's column\n * picker, the column starts hidden and users can choose to display it.\n * @default false\n */\n public readonly columnHidden = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * The unique ID for the column. You must provide either the `columnId` or `field` property\n * for every column, but do not provide both. Use `columnId` when the column does not map directly to a field\n * in the data set.\n */\n public readonly columnId = input<string>();\n\n /**\n * The data type of the column used for sorting and rendering when a template is not provided.\n * @default 'text'\n */\n public readonly dataType = input<'text' | 'number' | 'date' | 'boolean'>(\n 'text',\n );\n\n /**\n * The text to display beneath the column's `headingText` in a data\n * manager's column picker.\n */\n public readonly description = input<string>();\n\n /**\n * The property to retrieve cell information from an entry on the grid `data` array.\n * You must provide either the `columnId` or `field` property for every column,\n * but do not provide both. When a column maps directly to a property on the data,\n * use `field`; the column's ID defaults to the `field` value.\n */\n public readonly field = input<string>();\n\n /**\n * When set, `flexWidth` takes precedence over `width` for sizing and works like\n * [CSS flex-grow](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow), where a column\n * with `flexWidth=\"2\"` is twice the width of a column with `flexWidth=\"1\"`, and `flexWidth=\"0\"` does not auto-expand.\n * If `width` is also set, it acts as the column's minimum width.\n */\n public readonly flexWidth = input<number | undefined, unknown>(undefined, {\n transform: (value) => numberAttribute(value, undefined),\n });\n\n /**\n * Text to display in the column header.\n * @required\n */\n public readonly headingText = input.required<string>();\n\n /**\n * Whether to visually hide `headingText` while keeping it available to\n * assistive technologies. The header cell still renders, so its sorting and\n * resizing controls remain available.\n * @default false\n */\n public readonly headingHidden = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n public readonly helpPopoverTitle = input<string>();\n\n /**\n * The content of the help popover. When specified, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the column header. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title.\n */\n public readonly helpPopoverContent = input<string | TemplateRef<unknown>>();\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 or drag other columns before it. In a data manager's\n * column picker, a locked column always displays and is not offered as an\n * option.\n * @default false\n */\n public readonly locked = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Whether the column can be resized by dragging the column header border.\n * @default true\n */\n public readonly resizable = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n public readonly sortable = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * The template for a column. This can be assigned as a reference\n * to the `template` input, or it can be assigned as an `<ng-template>` child\n * of the `sky-data-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 public readonly template = input<TemplateRef<unknown>>();\n\n /**\n * The width of the column in pixels. Used as the column's initial width; the\n * column can still be resized and is included when columns are sized to fit\n * the grid's width. When `flexWidth` is also set, `width` instead acts as the\n * column's minimum width. When no width is set, the column width is evenly distributed.\n */\n public readonly width = input<number | undefined, unknown>(undefined, {\n transform: (value) => numberAttribute(value, undefined),\n });\n\n /**\n * Whether text in this column should wrap to multiple lines.\n * @default false\n */\n public readonly wrapText = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n readonly #initialized = signal(false);\n protected readonly initialized = this.#initialized.asReadonly();\n protected readonly templateChild = contentChild(TemplateRef);\n\n constructor() {\n const logger = inject(SkyLogService);\n afterRenderEffect(() => {\n const columnId = this.columnId();\n const field = this.field();\n if (columnId && field) {\n logger.warn(\n `A <sky-data-grid-column> should have either a columnId or a field, but not both.`,\n );\n }\n if (!columnId && !field) {\n logger.warn(\n `A <sky-data-grid-column> must have a columnId or a field.`,\n );\n }\n });\n }\n\n public ngOnInit(): void {\n this.#initialized.set(true);\n }\n\n /**\n * @internal\n */\n protected readonly cellTemplate = computed<TemplateRef<unknown> | undefined>(\n () => {\n const template = this.template();\n const templateChild = this.templateChild();\n return template || templateChild;\n },\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { SkyAgGridHeaderInfo } from '@skyux/ag-grid';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-data-grid-column-inline-help',\n imports: [SkyHelpInlineModule],\n template: `@if (showHelpInline()) {\n <sky-help-inline\n [popoverTitle]=\"helpPopoverTitle()\"\n [popoverContent]=\"helpPopoverContent()\"\n />\n }`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDataGridColumnInlineHelp {\n protected readonly info = inject(SkyAgGridHeaderInfo);\n\n protected readonly showHelpInline = computed(\n () => !!this.helpPopoverContent(),\n );\n\n protected readonly helpPopoverTitle = computed(\n () => this.#headerComponentParams()?.helpPopoverTitle,\n );\n\n protected readonly helpPopoverContent = computed(\n () => this.#headerComponentParams()?.helpPopoverContent,\n );\n\n readonly #headerComponentParams = computed(\n () => this.info.column?.getColDef().headerComponentParams,\n );\n}\n","import {\n AgEventListener,\n AgEventTypeParams,\n AgPublicEventType,\n GridApi,\n} from 'ag-grid-community';\nimport { Observable } from 'rxjs';\n\n/**\n * @internal\n */\nexport function fromGridEvent<\n TEventType extends AgPublicEventType,\n TData = unknown,\n TContext = unknown,\n>(\n target: Pick<\n GridApi,\n 'addEventListener' | 'removeEventListener' | 'isDestroyed'\n >,\n eventType: TEventType,\n): Observable<AgEventTypeParams<TData, TContext>[TEventType]> {\n return new Observable<AgEventTypeParams<TData, TContext>[TEventType]>(\n (subscriber) => {\n const handler: AgEventListener<TData, TContext, TEventType> = (\n event: AgEventTypeParams<TData, TContext>[TEventType],\n ): void => subscriber.next(event);\n target.addEventListener(eventType, handler);\n\n return () => {\n if (!target.isDestroyed || !target.isDestroyed()) {\n target.removeEventListener(eventType, handler);\n }\n };\n },\n );\n}\n","import {\n coerceArray,\n coerceBooleanProperty,\n coerceNumberProperty,\n coerceStringArray,\n} from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n Signal,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n toObservable,\n toSignal,\n} from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { SkyAgGridModule, SkyAgGridService, SkyCellType } from '@skyux/ag-grid';\nimport { SkyLogService, SkyViewkeeperModule } from '@skyux/core';\nimport { SkyWaitModule } from '@skyux/indicators';\nimport {\n SkyDataColumnOption,\n SkyDataColumnSource,\n SkyDataSelectionSource,\n SkyDataSortSource,\n SkyPagingModule,\n} from '@skyux/lists';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport {\n AutoSizeStrategy,\n CellStyleModule,\n ClientSideRowModelModule,\n ColDef,\n Column,\n ColumnApiModule,\n ColumnAutoSizeModule,\n CustomEditorModule,\n EventApiModule,\n GridApi,\n GridOptions,\n GridStateModule,\n IRowNode,\n LocaleModule,\n ModuleRegistry,\n PaginationModule,\n RenderApiModule,\n RowApiModule,\n RowAutoHeightModule,\n RowSelectionModule,\n RowSelectionOptions,\n RowStyleModule,\n SELECTION_COLUMN_ID,\n} from 'ag-grid-community';\nimport {\n filter,\n map,\n ObservableInput,\n startWith,\n switchMap,\n takeUntil,\n} from 'rxjs';\n\nimport { SkyDataGridRowData } from '../types/data-grid-row-data';\nimport { SkyDataGridSort } from '../types/data-grid-sort';\n\nimport { SkyDataGridDockType } from '../types/data-grid-dock-type';\nimport { SkyDataGridColumn } from './data-grid-column';\nimport { SkyDataGridColumnInlineHelp } from './data-grid-column-inline-help';\nimport { fromGridEvent } from './data-grid-event-utils';\n\n// Register only the AG Grid community modules this component actually uses,\n// rather than `AllCommunityModule`, to keep the consumer's bundle lean. This\n// covers the client-side row model, sorting, pagination, row selection, cell\n// and row styling, column auto-sizing, auto-height (text wrap), and the\n// grid/column state and event APIs the component and its harness rely on.\nModuleRegistry.registerModules([\n CellStyleModule,\n ClientSideRowModelModule,\n ColumnApiModule,\n ColumnAutoSizeModule,\n CustomEditorModule,\n EventApiModule,\n GridStateModule,\n LocaleModule,\n PaginationModule,\n RenderApiModule,\n RowApiModule,\n RowAutoHeightModule,\n RowSelectionModule,\n RowStyleModule,\n]);\n\nfunction arraySorted(arr: string[]): string[] {\n return arr.slice().sort((a, b) => a.localeCompare(b));\n}\n\nconst DEFAULT_DOCK_TYPE: SkyDataGridDockType = 'none';\n\nfunction arraysEqual(a: readonly string[], b: readonly string[]): boolean {\n return a.length === b.length && a.every((value, i) => value === b[i]);\n}\n\n// The data manager has its own copy of this function, because the two\n// libraries cannot share an internal function without exporting it.\nfunction columnWidthsEqual(\n a: Readonly<Record<string, number>>,\n b: Readonly<Record<string, number>>,\n): boolean {\n const keys = Object.keys(a);\n return (\n keys.length === Object.keys(b).length &&\n keys.every((key) => a[key] === b[key])\n );\n}\n\n/**\n * Members of `SkyDataGridColumn` that are `protected` because they are for\n * this grid's use only, not part of the column's public API.\n */\ninterface SkyDataGridColumnInternal {\n initialized: Signal<boolean>;\n cellTemplate: Signal<TemplateRef<unknown> | undefined>;\n}\n\n/**\n * Displays tabular data in a grid using a declarative set of columns and inputs.\n * Provide the `data` array and one `sky-data-grid-column` for each column to render.\n * @preview\n */\n@Component({\n selector: 'sky-data-grid',\n imports: [\n AgGridAngular,\n SkyAgGridModule,\n SkyPagingModule,\n SkyViewkeeperModule,\n SkyWaitModule,\n ],\n templateUrl: './data-grid.html',\n styleUrl: './data-grid.css',\n host: {\n '[class.sky-data-grid-dock-fill]': 'useFillDock()',\n '[class.sky-margin-stacked-lg]': 'useStacked()',\n },\n providers: [\n { provide: SkyDataColumnSource, useExisting: SkyDataGrid },\n { provide: SkyDataSelectionSource, useExisting: SkyDataGrid },\n { provide: SkyDataSortSource, useExisting: SkyDataGrid },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDataGrid\n implements SkyDataColumnSource, SkyDataSelectionSource, SkyDataSortSource\n{\n /**\n * Whether the grid sorts the data order when a column header is clicked.\n * When `autoSort` is set to `false`, the data grid will not modify the sort\n * order, `sort` will emit a new value, and `data` will need to be updated.\n * Use this option when the data is returned from the server already sorted,\n * such as sorting a \"name\" column using last name.\n * @default true\n */\n public readonly autoSort = input<boolean, unknown>(true, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether the items in `data` represent the full result set used for paging.\n * This applies only when `pageSize` is greater than zero. When `true` (the\n * default), the grid pages through `data` on the client. When `false`, the\n * `rowCount` input is required to size the paging controls, and `data` should\n * be updated to the rows for the current page whenever `page` emits a new\n * value (server-side paging).\n * @default true\n */\n public readonly autoPage = input<boolean, unknown>(true, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * How the grid columns are sized. The valid options are `container`, which\n * attempts to fit the grid to the parent's full width, and `content`, which\n * attempts to optimize columns to display their contents and may exceed the\n * 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 * This property is applied when the grid initializes; changes after\n * initialization are not reflected.\n * @default 'container'\n */\n public readonly columnFit = input<'container' | 'content'>('container');\n\n /**\n * Whether to enable a compact layout for the grid when using modern theme. Compact layout\n * uses a smaller font size and row height to display more data in a smaller space.\n * @default false\n */\n public readonly compact = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The data for the grid. Each item must implement `SkyDataGridRowData`, and other properties should map to a `field` of the grid columns.\n * When `data` is `null` or `undefined`, the grid will show a loading indicator, and when `data` is an empty array,\n * the grid will show a \"no rows\" message.\n */\n public readonly data = input<SkyDataGridRowData[] | null | undefined>();\n\n /**\n * How the data grid docks to the page. Use `fill` to dock the data grid to the container's size where the container\n * is a `sky-page` component with its `layout` set to `fit`, or where the container is another element with a\n * relative or absolute position and a fixed size. This property is applied when the grid initializes; changes\n * after initialization are not reflected.\n * @default \"none\"\n */\n public readonly dock = input<SkyDataGridDockType>(DEFAULT_DOCK_TYPE);\n\n /**\n * The text to read to screen readers to describe the grid. This sets the `aria-label` attribute on the grid container.\n */\n public readonly labelText = input<string>();\n\n /**\n * Whether data is being loaded. When `loading` is true or when `data` is nullish,\n * the grid shows a waiting overlay and is not interactive.\n * @default false\n */\n public readonly loading = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The minimum height of the grid in pixels. This property does not apply when `dock` is set to `fill`.\n * @default 50\n */\n public readonly minHeight = input<number, unknown>(50, {\n transform: (value: unknown) => coerceNumberProperty(value, 50),\n });\n\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid.\n * @default false\n */\n public readonly multiselect = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The number of items to display per page. Setting a value greater than zero\n * enables paging. When `autoPage` is `true` (the default), the grid pages\n * through `data` on the client; when `autoPage` is `false`, set `rowCount` to\n * the total number of rows and update `data` as `page` changes.\n */\n public readonly pageSize = input<number | undefined, unknown>(undefined, {\n transform: (value: unknown) => coerceNumberProperty(value, undefined),\n });\n\n /**\n * The query parameter name that stores the current page number.\n * When set, the grid syncs page changes to the URL for deep linking, and there should only be one grid on the page.\n */\n public readonly pageQueryParam = input<string | undefined>();\n\n /**\n * The total number of rows to page through, used to calculate how many pages\n * the paging controls display. Required when `pageSize` is greater than zero\n * and `autoPage` is `false`; ignored when `autoPage` is `true` because the\n * length of `data` is used instead.\n */\n public readonly rowCount = input<number | undefined, unknown>(undefined, {\n transform: (value: unknown) => {\n if (typeof value === 'undefined') {\n return undefined;\n }\n return coerceNumberProperty(value, undefined);\n },\n });\n\n /**\n * Whether the data grid is stacked with another element below it. When specified, the appropriate\n * vertical spacing is automatically added to the data grid. This property does not apply when `dock` is set to `fill`.\n * @default false\n */\n public readonly stacked = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * Whether to move the horizontal scrollbar to just below the header row.\n * This property is applied when the grid initializes; changes after\n * initialization are not reflected.\n * @default false\n */\n public readonly topScrollEnabled = input<boolean, unknown>(false, {\n transform: coerceBooleanProperty,\n });\n\n /**\n * The current page number of the grid when `pageSize` has been set. This is two-way bindable:\n * it updates as the user navigates pages, and you can set it to change the current page.\n * When `autoPage` is `false`, update `data` to the rows for the new page whenever this changes.\n * @default 1\n */\n public readonly page = model<number>(1);\n\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * Rows with IDs that are not included are de-selected in the grid. This is two-way bindable:\n * it emits the updated set of IDs when the user changes the selection.\n * @default []\n */\n public readonly selectedRowIds = model<string[]>([]);\n\n /**\n * The IDs of the columns to display, in display order. Columns that are not\n * included are hidden. An ID that does not match a column is ignored until a\n * column with that ID is declared. This is two-way bindable: once set, it\n * emits a new value when the user reorders columns. When `undefined`, every\n * column displays in declaration order except those marked `columnHidden`.\n * Displayed locked columns come first.\n */\n public readonly selectedColumnIds = model<string[] | undefined>();\n\n /**\n * The current sort applied to the grid. This is two-way bindable: it emits a new value\n * whenever the user sorts a column, and you can set it to sort the grid programmatically.\n * When `autoSort` is `false`, the grid emits the new value here but does not reorder the\n * data itself, leaving it to you to update `data`.\n */\n public readonly sort = model<SkyDataGridSort | undefined>(undefined);\n\n protected readonly columns = contentChildren(SkyDataGridColumn);\n\n /**\n * The columns the grid can display, in declaration order. Read by column\n * picker integrations through `SkyDataColumnSource`.\n * @internal\n */\n public readonly columnOptions = computed<readonly SkyDataColumnOption[]>(() =>\n this.#columnCatalog().map(({ id, column }) => ({\n alwaysDisplayed: column.locked(),\n description: column.description(),\n id,\n initialHide: column.columnHidden(),\n labelText: column.headingText(),\n })),\n );\n\n /**\n * The widths in pixels of the columns users resized, keyed by column ID.\n * Read by data manager integrations through `SkyDataColumnSource`.\n * @internal\n */\n public readonly columnWidths = computed<Readonly<Record<string, number>>>(\n () => this.#columnWidths() ?? {},\n );\n\n /**\n * The IDs of the columns that display, in display order: the\n * `selectedColumnIds` that match a declared column or, when\n * `selectedColumnIds` is `undefined`, every column not marked `columnHidden`.\n * Locked columns come first, as the grid displays them. Read by column\n * picker integrations through `SkyDataColumnSource`.\n * @internal\n */\n public readonly displayedColumnIds = computed<string[]>(\n () => {\n const catalog = this.#columnCatalog();\n const selectedColumnIds = this.selectedColumnIds();\n const declaredIds = catalog.map(({ id }) => id);\n const lockedIds = catalog\n .filter(({ column }) => column.locked())\n .map(({ id }) => id);\n\n const columnIds = selectedColumnIds\n ? selectedColumnIds.filter((id) => declaredIds.includes(id))\n : catalog\n .filter(({ column }) => !column.columnHidden())\n .map(({ id }) => id);\n\n return [\n ...columnIds.filter((id) => lockedIds.includes(id)),\n ...columnIds.filter((id) => !lockedIds.includes(id)),\n ];\n },\n { equal: arraysEqual },\n );\n\n /**\n * The selectors of the elements the grid keeps visible at the top of the\n * viewport while the page scrolls. Read by column picker integrations\n * through `SkyDataColumnSource`.\n * @internal\n */\n public readonly viewkeeperClasses = computed(() => {\n const classes = ['.ag-header'];\n if (this.topScrollEnabled()) {\n classes.push('.ag-body-horizontal-scroll');\n }\n return classes;\n });\n\n protected readonly gridApi = signal<GridApi<SkyDataGridRowData> | undefined>(\n undefined,\n );\n protected readonly gridOptions = computed(() => {\n const hasColumnDefs = this.#hasColumnDefs();\n if (!hasColumnDefs) {\n return undefined;\n }\n const columnDefs = untracked(() => this.#columnDefs());\n const { pagination, paginationPageSize } = untracked(() =>\n this.#paginationOptions(),\n );\n const rowData = untracked(() => this.rowData());\n // Seed the initial sort through AG Grid's own state so it is applied as the\n // grid initializes (and re-applied when the grid is recreated). Subsequent\n // sort changes are applied at runtime by the dedicated `sort` effect.\n // `partialColumnState` keeps AG Grid from resetting every other column state\n // (flex, visibility, pinning) that the state object doesn't mention.\n const sort = untracked(() => this.sort());\n return this.#gridService.getGridOptions({\n gridOptions: {\n columnDefs,\n context: {\n enableTopScroll: untracked(() => this.topScrollEnabled()),\n },\n domLayout: untracked(() =>\n this.useFillDock() ? 'normal' : 'autoHeight',\n ),\n initialState: sort\n ? {\n partialColumnState: true,\n sort: {\n sortModel: [\n { colId: sort.field as string, sort: sort.direction },\n ],\n },\n }\n : undefined,\n loading: untracked(() => this.loading() || !Array.isArray(this.data())),\n // A user moves columns with the keyboard or by dragging a column\n // header. A drag moves columns as it goes, and a drag released outside\n // the grid or cancelled with Escape reports no finished move, so sync\n // when any drag ends too.\n onColumnMoved: (event) => {\n if (event.finished) {\n this.#syncColumnOrderFromGrid(event.api);\n }\n },\n // The grid's initial content sizing runs after the grid is ready and\n // would replace the widths applied then, so apply them again. Content\n // sizing after that is a user double-clicking a column's edge.\n onColumnResized: (event) => {\n if (\n event.source === 'autosizeColumns' &&\n this.#awaitingInitialAutoSize\n ) {\n this.#awaitingInitialAutoSize = false;\n this.#gridSizedWidths.clear();\n this.#rememberGridSizedWidths(event.api);\n this.#reapplyColumnWidths(event.api);\n } else if (\n (event.source === 'uiColumnResized' && event.finished) ||\n event.source === 'autosizeColumns'\n ) {\n // AG Grid reports the resized columns with every resize it\n // dispatches from these sources.\n /* istanbul ignore next */\n this.#syncColumnWidthsFromGrid(event.columns ?? []);\n }\n },\n onDragCancelled: (event) => this.#syncColumnOrderFromGrid(event.api),\n onDragStopped: (event) => this.#syncColumnOrderFromGrid(event.api),\n onGridReady: (args) => {\n // The displayed columns may have changed since the column\n // definitions were created.\n this.#applyDisplayedColumns(args.api, this.displayedColumnIds());\n this.#awaitingInitialAutoSize =\n !!args.api.getGridOption('autoSizeStrategy');\n this.#gridSizedWidths.clear();\n this.#rememberGridSizedWidths(args.api);\n this.#reapplyColumnWidths(args.api);\n this.gridApi.set(args.api);\n this.gridReady.set(true);\n },\n pagination,\n paginationPageSize,\n suppressMultiSort: true,\n suppressPaginationPanel: true,\n rowData,\n rowSelection: untracked(() => this.#getRowSelection()),\n autoSizeStrategy: untracked(() => this.#getAutoSizeStrategy()),\n },\n }) as GridOptions<SkyDataGridRowData>;\n });\n\n protected readonly gridReady = signal(false);\n protected readonly rowData = computed(() => {\n const rowData = this.data() ?? [];\n const pageSize = this.pageSize();\n if (!this.autoPage() && pageSize && rowData.length > pageSize) {\n this.#logger.warn(\n 'When using paging and `autoPage` is not enabled, the `data` input will be limited to the number of rows specified by `pageSize`. To display more rows, update the `data` input when the `page` changes.',\n );\n return rowData.slice(0, pageSize);\n }\n return rowData;\n });\n protected readonly pageCount = computed(() => {\n const dataLength = this.pageItemsCount();\n const pageSize = this.pageSize();\n const gridReady = this.gridReady();\n if (!gridReady || !pageSize) {\n return 0;\n }\n return Math.ceil(dataLength / pageSize);\n });\n protected readonly pageItemsCount = linkedSignal({\n source: () => {\n const pageSize = this.pageSize();\n const gridReady = this.gridReady();\n const rowCount = this.rowCount() ?? 0;\n if (!gridReady || !pageSize) {\n return 0;\n }\n const dataLength = this.rowData().length;\n const autoPage = this.autoPage();\n return autoPage ? dataLength : rowCount;\n },\n computation: (source, previous): number => {\n // Avoid flickering the pagination controls while data is updating.\n if (this.loading()) {\n return previous?.value || 0;\n }\n return source;\n },\n });\n\n protected readonly skyViewkeeper = computed(() => {\n // Only used when not using SkyDataManagerService because data manager handles SkyViewkeeper.\n // Not used in fill mode either: AG Grid keeps its own header in place in that layout.\n if (this.useFillDock()) {\n return [];\n }\n return this.#viewkeeperDisabled() ? [] : this.viewkeeperClasses();\n });\n\n protected readonly useFillDock = computed(() => this.dock() === 'fill');\n protected readonly useStacked = computed(\n () => this.stacked() && this.dock() !== 'fill',\n );\n\n readonly #activatedRoute = inject(ActivatedRoute, { optional: true });\n /**\n * The widths in pixels of the columns users resized, keyed by column ID.\n * This is `undefined` until a data manager integration sets the widths, so a\n * grid outside a data manager neither tracks nor restores them.\n */\n readonly #columnWidths = signal<Record<string, number> | undefined>(\n undefined,\n );\n /**\n * The widths the grid gave the columns that have neither a flex nor a\n * width, from before a column width replaced them.\n */\n readonly #gridSizedWidths = new Map<string, number>();\n readonly #selectionPruningDisabled = signal(false);\n readonly #viewkeeperDisabled = signal(false);\n #awaitingInitialAutoSize = false;\n readonly #gridService = inject(SkyAgGridService);\n readonly #logger = inject(SkyLogService);\n readonly #router = inject(Router, { optional: true });\n\n readonly #columnDefs = computed<ColDef<SkyDataGridRowData>[]>(() => {\n const catalog = this.#columnCatalog();\n // Read untracked so that showing, hiding, or reordering columns does not\n // rebuild the column definitions, which would reset flex columns the user\n // resized. An effect applies those changes as runtime column state instead.\n const displayedIds = untracked(this.displayedColumnIds);\n const entriesById = new Map(catalog.map((entry) => [entry.id, entry]));\n\n // Displayed columns first, in display order, followed by the hidden\n // columns. Hidden columns keep their column definitions so AG Grid retains\n // their state and they can be shown again without being recreated.\n const displayedColDefs = displayedIds\n .map((id) => entriesById.get(id))\n .filter((entry) => !!entry)\n .map(({ column, id }) => this.#createColDef(column, id, false));\n const hiddenColDefs = catalog\n .filter(({ id }) => !displayedIds.includes(id))\n .map(({ column, id }) => this.#createColDef(column, id, true));\n\n return [...displayedColDefs, ...hiddenColDefs];\n });\n readonly #hasColumnDefs = computed(() => this.#columnDefs().length > 0);\n\n /**\n * The IDs of the columns that display, in a fixed order, so that moving a\n * column does not change it.\n */\n readonly #displayedColumnIdSet = computed(\n () => arraySorted(this.displayedColumnIds()),\n { equal: arraysEqual },\n );\n\n /**\n * The declared columns that have a usable ID, in declaration order. Columns\n * missing both `columnId` and `field` are omitted; `SkyDataGridColumn`\n * already warns about them. A repeated ID is suffixed the way AG Grid\n * suffixes it (`name_1`), so that every column can be addressed.\n */\n readonly #columnCatalog = computed(() => {\n const catalog: { column: SkyDataGridColumn; id: string }[] = [];\n\n for (const column of this.columns()) {\n const declaredId = column.columnId() ?? column.field();\n\n if (\n declaredId &&\n (column as unknown as SkyDataGridColumnInternal).initialized()\n ) {\n let id = declaredId;\n for (let i = 1; catalog.some((entry) => entry.id === id); i++) {\n id = `${declaredId}_${i}`;\n }\n catalog.push({ column, id });\n }\n }\n\n return catalog;\n });\n\n readonly #gridDestroyed = toObservable(this.gridApi).pipe(\n filter(Boolean),\n switchMap((api) => fromGridEvent(api, 'gridPreDestroyed')),\n );\n readonly #gridSelectedRowIds = toObservable(this.gridApi).pipe(\n filter(Boolean),\n switchMap((api) =>\n fromGridEvent(api, 'selectionChanged').pipe(\n takeUntil(this.#gridDestroyed),\n map(() => arraySorted(this.#getRowIds(api.getSelectedNodes()))),\n ),\n ),\n );\n readonly #gridSortChange = toObservable(this.gridApi).pipe(\n filter(Boolean),\n switchMap((api) =>\n fromGridEvent(api, 'sortChanged').pipe(\n takeUntil(this.#gridDestroyed),\n map((sortEvent): SkyDataGridSort | undefined => {\n const sortColumn = sortEvent?.columns?.find((col) => !!col.getSort());\n if (sortColumn) {\n return {\n direction: sortColumn.getSort() as 'asc' | 'desc',\n field: sortColumn.getColId(),\n };\n }\n return undefined;\n }),\n ),\n ),\n );\n /**\n * The pagination options passed to AG Grid; not used when `autoPage` is false.\n */\n readonly #paginationOptions = computed(() => {\n const pageSize = this.pageSize();\n const pagination = this.autoPage() && !!pageSize;\n const paginationPageSize = (pagination && pageSize) || undefined;\n return {\n pagination,\n paginationPageSize,\n };\n });\n readonly #queryParamPage = toSignal(\n toObservable(this.pageQueryParam).pipe(\n switchMap(\n (pageQueryParam): ObservableInput<number> =>\n pageQueryParam && this.#activatedRoute\n ? this.#activatedRoute.queryParamMap.pipe(\n startWith(this.#activatedRoute.snapshot.queryParamMap),\n map((params) =>\n coerceNumberProperty(params.get(pageQueryParam), 1),\n ),\n )\n : [],\n ),\n ),\n { initialValue: NaN },\n );\n\n constructor() {\n // Update specific grid options after the grid has been loaded. These read\n // `gridApi` untracked because a recreated grid rebuilds its options from the\n // `gridOptions` computed; the selection and page effects below instead track\n // `gridApi` so they re-apply their state to a freshly created grid.\n effect(() => {\n const api = untracked(() => this.gridApi());\n const columnDefs = this.#columnDefs();\n if (api) {\n api.setGridOption('columnDefs', columnDefs);\n untracked(() => {\n this.#rememberGridSizedWidths(api);\n // New column definitions make columns users resized flex again.\n this.#reapplyColumnWidths(api);\n });\n }\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const isLoading = this.loading() || !Array.isArray(this.data());\n api?.setGridOption('loading', isLoading);\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const { pagination, paginationPageSize } = this.#paginationOptions();\n api?.setGridOption('pagination', pagination);\n api?.setGridOption('paginationPageSize', paginationPageSize);\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const rowData = this.rowData();\n api?.setGridOption('rowData', rowData);\n });\n effect(() => {\n const api = untracked(() => this.gridApi());\n const rowSelection = this.#getRowSelection();\n api?.setGridOption('rowSelection', rowSelection);\n });\n\n // Apply inputs once the grid is loaded and on subsequent changes.\n effect(() => {\n const api = this.gridApi();\n const isLoading = this.loading() || !Array.isArray(this.data());\n // Don't reconcile selection while data is still loading; pruning here\n // would wipe a selection a consumer set before the rows arrived.\n // An empty array is \"loaded but no rows\", so only `null`/`undefined` skip.\n if (isLoading) {\n return;\n }\n const validRowIds = new Set(this.rowData().map((row) => row.id));\n const selectedRowIds = coerceStringArray(this.selectedRowIds());\n const validSelectedRowIds = selectedRowIds.filter((id) =>\n validRowIds.has(id),\n );\n // A data manager integration keeps the IDs of rows its search or\n // filters hide, so they are selected again when the rows return.\n if (\n this.autoPage() &&\n !this.#selectionPruningDisabled() &&\n validSelectedRowIds.length !== selectedRowIds.length\n ) {\n this.selectedRowIds.set(validSelectedRowIds);\n }\n if (!api) {\n return;\n }\n // Diff against the grid's current selection; only touch nodes that\n // change, so a no-op reconcile fires no selectionChanged event.\n const desired = new Set(validSelectedRowIds);\n const selectedNodes = api.getSelectedNodes();\n const alreadySelected = new Set(this.#getRowIds(selectedNodes));\n const toDeselect = selectedNodes.filter(\n (node) => !desired.has(node.id as string),\n );\n const toSelect = validSelectedRowIds\n .filter((id) => !alreadySelected.has(id))\n .map((id) => api.getRowNode(id))\n .filter((node): node is IRowNode<SkyDataGridRowData> => !!node);\n if (toDeselect.length) {\n api.setNodesSelected({ nodes: toDeselect, newValue: false });\n }\n if (toSelect.length) {\n api.setNodesSelected({ nodes: toSelect, newValue: true });\n }\n });\n // Apply the sort as runtime column state rather than through `columnDefs`,\n // so sorting never re-applies the declared column order and wipes a\n // user's drag-reordered (or resized) columns. Tracks `gridApi` so the\n // sort re-applies to a freshly created grid.\n effect(() => {\n const api = this.gridApi();\n const sort = this.sort();\n if (!api) {\n return;\n }\n api.applyColumnState({\n state: sort\n ? [\n {\n colId: sort.field as string,\n sort: sort.direction,\n },\n ]\n : [],\n defaultState: { sort: null },\n });\n });\n // Apply changes to the displayed columns as runtime column state rather\n // than through `columnDefs`, so showing, hiding, or reordering columns does\n // not reset flex columns the user resized. Only a change to the displayed\n // columns re-runs this, so a column order the user set by dragging a header\n // is otherwise left alone.\n effect(() => {\n const displayedIds = this.displayedColumnIds();\n const api = untracked(() => this.gridApi());\n if (api) {\n this.#applyDisplayedColumns(api, displayedIds);\n }\n });\n // A grid that fits its columns to the container, and has no flex columns\n // to take up the space, does not otherwise resize them when a column is\n // hidden or shown. Moving a column leaves the displayed set alone, so it\n // does not discard the widths a user set in a grid that is not tracking\n // them.\n effect(() => {\n this.#displayedColumnIdSet();\n const api = untracked(() => this.gridApi());\n if (\n api &&\n untracked(this.columnFit) === 'container' &&\n !untracked(() => this.#hasFlexColumns())\n ) {\n this.#fitColumnsToContainer(api);\n }\n });\n effect(() => {\n const api = this.gridApi();\n const page = this.page();\n const pageCount = this.pageCount();\n if (!pageCount || !api) {\n return;\n }\n if (page < 1) {\n this.currentPageChange(1);\n } else if (page > pageCount) {\n this.currentPageChange(pageCount);\n } else if (untracked(this.autoPage)) {\n api.paginationGoToPage(page - 1);\n }\n });\n // Sync `page` to the URL query parameter when it changes, e.g. when set\n // programmatically rather than through the paging controls (which\n // already navigate directly). Tracks only `page` itself, not `gridApi`/\n // `pageCount`, so a grid becoming ready does not push a `page` value\n // that is still stale from an in-flight URL change onto the URL. Only\n // syncs valid page numbers; out-of-range values are corrected by the\n // effect above instead of being reflected in the URL.\n effect(() => {\n const page = this.page();\n if (Number.isInteger(page) && page >= 1) {\n this.#syncPageQueryParam(page);\n }\n });\n\n effect(() => {\n const api = this.gridApi();\n const label = this.labelText();\n api?.setGridAriaProperty('label', label ?? null);\n });\n\n // Sync page from URL query parameter.\n effect(() => {\n const queryParamPage = this.#queryParamPage();\n const pageSize = this.pageSize();\n if (pageSize && Number.isInteger(queryParamPage)) {\n this.page.set(queryParamPage);\n }\n });\n\n // Warn when server-side paging is configured without the required\n // `rowCount`. Without it, `pageItemsCount` resolves to zero and the paging\n // controls silently disappear. Only warn once data has loaded so a grid\n // that is still fetching its first page does not trigger a false positive.\n effect(() => {\n if (\n !this.autoPage() &&\n this.pageSize() &&\n this.rowCount() === undefined &&\n !this.loading() &&\n Array.isArray(this.data())\n ) {\n this.#logger.warn(\n 'When using paging and `autoPage` is not enabled, the `rowCount` input is required so the paging controls know how many pages to display. Set `rowCount` to the total number of rows available on the server.',\n );\n }\n });\n\n // Warn when `pageQueryParam` is configured without a `Router` and\n // `ActivatedRoute` available for injection. Without them, page changes\n // fall back to updating the `page` model directly instead of the URL.\n effect(() => {\n if (this.pageQueryParam() && (!this.#router || !this.#activatedRoute)) {\n this.#logger.warn(\n 'The `pageQueryParam` input is set, but a `Router` and `ActivatedRoute` are not available for injection. Page changes will not be reflected in the URL.',\n );\n }\n });\n\n this.#gridDestroyed.pipe(takeUntilDestroyed()).subscribe(() => {\n this.gridApi.set(undefined);\n this.gridReady.set(false);\n });\n\n // Emit updates from the grid.\n this.#gridSelectedRowIds\n .pipe(\n takeUntilDestroyed(),\n map((ids) => coerceStringArray(ids)),\n )\n .subscribe((selectedRowIds) => {\n // Maintain IDs not in the current dataset.\n const validRowIds = new Set(this.rowData().map(({ id }) => id));\n const selectedSet = new Set(selectedRowIds);\n this.selectedRowIds.update((val) => {\n const valSet = new Set(val);\n const hasAddition = selectedRowIds.some((id) => !valSet.has(id));\n const hasRemoval = val.some(\n (id) => validRowIds.has(id) && !selectedSet.has(id),\n );\n if (hasAddition || hasRemoval) {\n return [\n ...new Set([\n ...val.filter((id) => !validRowIds.has(id)),\n ...selectedRowIds,\n ]),\n ].sort((a, b) => a.localeCompare(b));\n }\n return val;\n });\n });\n // Emit the grid's sort, including no sort once no column is sorted, so\n // the two-way bound model does not retain a stale value.\n this.#gridSortChange\n .pipe(takeUntilDestroyed())\n .subscribe((sortChange) => this.setSort(sortChange));\n }\n\n /**\n * Stops the grid from removing the IDs of rows that are not in `data` from\n * `selectedRowIds`. Called by data manager integrations through\n * `SkyDataSelectionSource` when they keep rows that a search or filter hides\n * selected.\n * @internal\n */\n public disableSelectionPruning(): void {\n this.#selectionPruningDisabled.set(true);\n }\n\n /**\n * Stops the grid from keeping the `viewkeeperClasses` elements visible\n * itself. Called by column picker integrations through `SkyDataColumnSource`\n * when a container keeps them visible instead.\n * @internal\n */\n public disableViewkeeper(): void {\n this.#viewkeeperDisabled.set(true);\n }\n\n /**\n * Sets the columns that display and their order. Called by column picker\n * integrations through `SkyDataColumnSource`.\n * @internal\n */\n public setDisplayedColumnIds(columnIds: readonly string[]): void {\n const selectedColumnIds = this.selectedColumnIds();\n if (!selectedColumnIds || !arraysEqual(selectedColumnIds, columnIds)) {\n this.selectedColumnIds.set([...columnIds]);\n }\n }\n\n /**\n * Sets the widths in pixels of columns, keyed by column ID, and starts\n * tracking the widths users give columns. Columns that are not included\n * return to the widths they are declared with or, when declared without\n * one, the widths the grid gave them. Called by data manager\n * integrations through `SkyDataColumnSource`.\n * @internal\n */\n public setColumnWidths(columnWidths: Readonly<Record<string, number>>): void {\n const currentWidths = this.#columnWidths();\n if (currentWidths && columnWidthsEqual(currentWidths, columnWidths)) {\n return;\n }\n\n this.#columnWidths.set({ ...columnWidths });\n\n const api = untracked(this.gridApi);\n if (api) {\n this.#applyColumnWidths(api, columnWidths);\n }\n }\n\n /**\n * Sets the selected rows. Called by data manager integrations through\n * `SkyDataSelectionSource`.\n * @internal\n */\n public setSelectedRowIds(selectedRowIds: readonly string[]): void {\n if (\n !arraysEqual(coerceStringArray(this.selectedRowIds()), selectedRowIds)\n ) {\n this.selectedRowIds.set([...selectedRowIds]);\n }\n }\n\n /**\n * Sets the sort the grid applies. Called by data manager integrations\n * through `SkyDataSortSource`.\n * @internal\n */\n public setSort(sort: SkyDataGridSort | undefined): void {\n const currentSort = this.sort();\n if (\n currentSort?.field !== sort?.field ||\n currentSort?.direction !== sort?.direction\n ) {\n this.sort.set(sort);\n }\n }\n\n protected currentPageChange(page: number): void {\n if (page && page !== this.page()) {\n const pageQueryParam = this.pageQueryParam();\n if (pageQueryParam && this.#router && this.#activatedRoute) {\n // When using a query parameter, send the change through the router.\n this.#navigateToPageQueryParam(pageQueryParam, page);\n } else {\n this.page.set(page);\n }\n }\n }\n\n /**\n * Updates the URL to reflect a programmatic page change so deep linking stays\n * in sync when a consumer drives `page` directly instead of using the paging\n * controls. Reads untracked so it does not add reactive dependencies to the\n * effect that calls it.\n */\n #syncPageQueryParam(page: number): void {\n const pageQueryParam = untracked(this.pageQueryParam);\n if (pageQueryParam && untracked(this.#queryParamPage) !== page) {\n this.#navigateToPageQueryParam(pageQueryParam, page);\n }\n }\n\n #navigateToPageQueryParam(pageQueryParam: string, page: number): void {\n void this.#router?.navigate([], {\n relativeTo: this.#activatedRoute,\n queryParams: {\n [pageQueryParam]: page === 1 ? null : page,\n },\n queryParamsHandling: 'merge',\n });\n }\n\n #createColDef(col: SkyDataGridColumn, colId: string, hide: boolean): ColDef {\n const field = col.field();\n const colDef: ColDef = {\n colId,\n field,\n headerName: col.headingText(),\n headerComponentParams: this.#getHeaderComponentParams(col),\n hide,\n initialHide: hide,\n resizable: col.resizable(),\n sortable: col.sortable(),\n lockPosition: col.locked(),\n suppressMovable: col.locked(),\n type: [],\n autoHeight: col.wrapText(),\n wrapText: col.wrapText(),\n };\n if (col.dataType() === 'date') {\n (colDef.type as string[]).push(SkyCellType.Date);\n colDef.cellDataType = 'dateString';\n } else if (field && col.dataType() === 'number') {\n (colDef.type as string[]).push(SkyCellType.Number);\n colDef.cellDataType = 'number';\n colDef.valueGetter = (params): number | null => {\n const n = Number(params.data?.[field]);\n return Number.isFinite(n) ? n : null;\n };\n } else if (col.dataType() === 'boolean') {\n colDef.cellDataType = 'boolean';\n } else {\n (colDef.type as string[]).push(SkyCellType.Text);\n colDef.cellDataType = 'text';\n }\n const colInternal = col as unknown as SkyDataGridColumnInternal;\n if (colInternal.cellTemplate()) {\n (colDef.type as string[]).push(SkyCellType.Template);\n colDef.cellRendererParams = { template: colInternal.cellTemplate };\n }\n if (!this.autoSort()) {\n colDef.comparator = (): number => 0;\n }\n this.#applyColumnWidthSettings(col, colDef);\n return colDef;\n }\n\n #applyColumnWidthSettings(col: SkyDataGridColumn, colDef: ColDef): void {\n if (Number.isFinite(col.flexWidth())) {\n colDef.flex = col.flexWidth();\n colDef.initialFlex = col.flexWidth();\n if (Number.isFinite(col.width())) {\n colDef.minWidth = col.width();\n }\n } else if (Number.isFinite(col.width())) {\n colDef.initialWidth = col.width();\n colDef.suppressAutoSize = true;\n }\n if (!col.resizable() || col.flexWidth() === 0) {\n colDef.suppressSizeToFit = true;\n colDef.suppressAutoSize = true;\n if (!col.resizable() && Number.isFinite(col.width())) {\n colDef.minWidth = col.width();\n colDef.maxWidth = col.width();\n }\n }\n }\n\n #getHeaderComponentParams(col: SkyDataGridColumn): object {\n return {\n headerHidden: col.headingHidden(),\n helpPopoverTitle: col.helpPopoverTitle(),\n helpPopoverContent: col.helpPopoverContent(),\n inlineHelpComponent: SkyDataGridColumnInlineHelp,\n };\n }\n\n #applyDisplayedColumns(api: GridApi, displayedIds: readonly string[]): void {\n const hiddenIds = untracked(this.#columnCatalog)\n .map(({ id }) => id)\n .filter((id) => !displayedIds.includes(id));\n api.applyColumnState({\n state: [\n // AG Grid moves columns missing from the state to the end, which\n // would put the multiselect column after any locked columns.\n { colId: SELECTION_COLUMN_ID },\n ...displayedIds.map((colId) => ({ colId, hide: false })),\n ...hiddenIds.map((colId) => ({ colId, hide: true })),\n ],\n applyOrder: true,\n });\n }\n\n #syncColumnOrderFromGrid(api: GridApi): void {\n // Column moves are tracked only once `selectedColumnIds` is set, so a grid\n // without it keeps following each column's `columnHidden` setting. Applying\n // a column layout moves columns too, so compare against what the grid\n // should display; only a move the user made differs.\n const selectedColumnIds = this.selectedColumnIds();\n if (!selectedColumnIds) {\n return;\n }\n\n const displayedColumnIds = api\n .getColumnState()\n .filter((state) => !state.hide && state.colId !== SELECTION_COLUMN_ID)\n .map((state) => state.colId);\n\n if (!arraysEqual(this.displayedColumnIds(), displayedColumnIds)) {\n // Keep the IDs of columns that are not declared, such as a column\n // rendered conditionally, so they display once the column is declared.\n const declaredIds = this.#columnCatalog().map(({ id }) => id);\n this.selectedColumnIds.set([\n ...displayedColumnIds,\n ...selectedColumnIds.filter((id) => !declaredIds.includes(id)),\n ]);\n }\n }\n\n /**\n * Applies the column widths, and returns columns without one to the widths\n * they are declared with.\n */\n #applyColumnWidths(\n api: GridApi,\n columnWidths: Readonly<Record<string, number>>,\n ): void {\n api.applyColumnState({\n state: untracked(this.#columnDefs).map(\n ({ colId, flex, initialWidth }) => {\n const width = columnWidths[colId as string];\n // A width stops a column flexing, as a user resizing it does.\n return width === undefined\n ? {\n colId: colId as string,\n flex: flex || null,\n width:\n initialWidth ?? this.#gridSizedWidths.get(colId as string),\n }\n : { colId: colId as string, flex: null, width };\n },\n ),\n });\n }\n\n /**\n * Remembers the widths of columns that have neither a flex nor a width, so\n * they can return to them. AG Grid ignores a column state without a width,\n * so it leaves a column at the width a user gave it.\n */\n #rememberGridSizedWidths(api: GridApi): void {\n const gridSizedColumnIds = untracked(this.#columnDefs)\n .filter(({ flex, initialWidth }) => !flex && initialWidth === undefined)\n .map(({ colId }) => colId);\n\n for (const column of api.getAllGridColumns()) {\n const colId = column.getColId();\n if (\n gridSizedColumnIds.includes(colId) &&\n !this.#gridSizedWidths.has(colId)\n ) {\n this.#gridSizedWidths.set(colId, column.getActualWidth());\n }\n }\n }\n\n /**\n * Fits the columns to the container, the way the grid does when it\n * initializes: the columns the grid does not size to their content, such as\n * those with a declared width and the multiselect column, and the columns\n * with a width a data manager integration tracks, keep their widths.\n */\n #fitColumnsToContainer(api: GridApi): void {\n const columnWidths = untracked(this.columnWidths);\n api.sizeColumnsToFit({\n columnLimits: api\n .getAllDisplayedColumns()\n .filter(\n (column) =>\n column.getColDef().suppressAutoSize ||\n columnWidths[column.getColId()] !== undefined,\n )\n .map((column) => ({\n key: column.getColId(),\n minWidth: column.getActualWidth(),\n maxWidth: column.getActualWidth(),\n })),\n });\n }\n\n #reapplyColumnWidths(api: GridApi): void {\n const columnWidths = this.#columnWidths();\n if (columnWidths && Object.keys(columnWidths).length > 0) {\n this.#applyColumnWidths(api, columnWidths);\n }\n }\n\n #syncColumnWidthsFromGrid(columns: readonly Column[]): void {\n const columnWidths = this.#columnWidths();\n if (!columnWidths) {\n return;\n }\n\n // A column a user resizes stops flexing. The flex columns that only filled\n // the space it left keep flexing, so their widths are not the user's.\n const updatedWidths = { ...columnWidths };\n for (const column of columns.filter((col) => !col.getFlex())) {\n updatedWidths[column.getColId()] = column.getActualWidth();\n }\n\n if (!columnWidthsEqual(columnWidths, updatedWidths)) {\n this.#columnWidths.set(updatedWidths);\n }\n }\n\n #getRowIds(rows: (IRowNode | undefined)[] | null | undefined): string[] {\n return coerceArray(rows)\n .map((node) => node?.id as string)\n .filter(Boolean) as string[];\n }\n\n #hasFlexColumns(): boolean {\n return this.#columnDefs().some((col) => !!col.initialFlex);\n }\n\n #getAutoSizeStrategy(): AutoSizeStrategy | undefined {\n if (this.#hasFlexColumns()) {\n // Avoid the console warning if `autoSizeColumns` is called on a grid with flex columns, so skip it.\n return undefined;\n }\n return {\n type: 'fitCellContents',\n skipHeader: true,\n scaleUpToFitGridWidth: this.columnFit() === 'container',\n };\n }\n\n #getRowSelection(): RowSelectionOptions<SkyDataGridRowData> {\n return this.multiselect()\n ? {\n checkboxes: true,\n checkboxLocation: 'selectionColumn',\n headerCheckbox: true,\n mode: 'multiRow',\n }\n : { checkboxes: false, mode: 'singleRow' };\n }\n}\n","<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyux/data-grid",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.26.0",
|
|
4
4
|
"author": "Blackbaud, Inc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"blackbaud",
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
"@angular/common": "^21.2.0",
|
|
21
21
|
"@angular/core": "^21.2.0",
|
|
22
22
|
"@angular/router": "^21.2.0",
|
|
23
|
-
"@skyux/ag-grid": "^14.
|
|
24
|
-
"@skyux/core": "^14.
|
|
25
|
-
"@skyux/help-inline": "^14.
|
|
26
|
-
"@skyux/indicators": "^14.
|
|
27
|
-
"@skyux/lists": "^14.
|
|
23
|
+
"@skyux/ag-grid": "^14.26.0",
|
|
24
|
+
"@skyux/core": "^14.26.0",
|
|
25
|
+
"@skyux/help-inline": "^14.26.0",
|
|
26
|
+
"@skyux/indicators": "^14.26.0",
|
|
27
|
+
"@skyux/lists": "^14.26.0",
|
|
28
28
|
"ag-grid-angular": "^35.1.0",
|
|
29
29
|
"ag-grid-community": "^35.1.0"
|
|
30
30
|
},
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HarnessPredicate } from '@angular/cdk/testing';
|
|
2
2
|
import { SkyHarnessFilters, SkyQueryableComponentHarness } from '@skyux/core/testing';
|
|
3
|
+
import { SkyDataGridDockType } from '@skyux/data-grid';
|
|
3
4
|
import { SkyWaitHarness } from '@skyux/indicators/testing';
|
|
4
5
|
import { SkyPagingHarness } from '@skyux/lists/testing';
|
|
5
6
|
|
|
@@ -33,6 +34,10 @@ declare class SkyDataGridHarness extends SkyQueryableComponentHarness {
|
|
|
33
34
|
* Checks whether the grid is loading.
|
|
34
35
|
*/
|
|
35
36
|
isLoading(): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Gets the type of dock style on the data grid.
|
|
39
|
+
*/
|
|
40
|
+
getDockType(): Promise<SkyDataGridDockType>;
|
|
36
41
|
/**
|
|
37
42
|
* Retrieves the IDs of the currently displayed columns.
|
|
38
43
|
*/
|
|
@@ -32,6 +32,12 @@ interface SkyDataGridSort {
|
|
|
32
32
|
field: string;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* How a `SkyDataGrid` docks to its container.
|
|
37
|
+
* @preview
|
|
38
|
+
*/
|
|
39
|
+
type SkyDataGridDockType = 'none' | 'fill';
|
|
40
|
+
|
|
35
41
|
/**
|
|
36
42
|
* Defines a single column in a `SkyDataGrid`. Add one `sky-data-grid-column` for each
|
|
37
43
|
* column to render.
|
|
@@ -199,6 +205,14 @@ declare class SkyDataGrid implements SkyDataColumnSource, SkyDataSelectionSource
|
|
|
199
205
|
* the grid will show a "no rows" message.
|
|
200
206
|
*/
|
|
201
207
|
readonly data: _angular_core.InputSignal<SkyDataGridRowData[] | null | undefined>;
|
|
208
|
+
/**
|
|
209
|
+
* How the data grid docks to the page. Use `fill` to dock the data grid to the container's size where the container
|
|
210
|
+
* is a `sky-page` component with its `layout` set to `fit`, or where the container is another element with a
|
|
211
|
+
* relative or absolute position and a fixed size. This property is applied when the grid initializes; changes
|
|
212
|
+
* after initialization are not reflected.
|
|
213
|
+
* @default "none"
|
|
214
|
+
*/
|
|
215
|
+
readonly dock: _angular_core.InputSignal<SkyDataGridDockType>;
|
|
202
216
|
/**
|
|
203
217
|
* The text to read to screen readers to describe the grid. This sets the `aria-label` attribute on the grid container.
|
|
204
218
|
*/
|
|
@@ -210,7 +224,7 @@ declare class SkyDataGrid implements SkyDataColumnSource, SkyDataSelectionSource
|
|
|
210
224
|
*/
|
|
211
225
|
readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
212
226
|
/**
|
|
213
|
-
* The minimum height of the grid in pixels.
|
|
227
|
+
* The minimum height of the grid in pixels. This property does not apply when `dock` is set to `fill`.
|
|
214
228
|
* @default 50
|
|
215
229
|
*/
|
|
216
230
|
readonly minHeight: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
@@ -241,7 +255,7 @@ declare class SkyDataGrid implements SkyDataColumnSource, SkyDataSelectionSource
|
|
|
241
255
|
readonly rowCount: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
|
|
242
256
|
/**
|
|
243
257
|
* Whether the data grid is stacked with another element below it. When specified, the appropriate
|
|
244
|
-
* vertical spacing is automatically added to the data grid.
|
|
258
|
+
* vertical spacing is automatically added to the data grid. This property does not apply when `dock` is set to `fill`.
|
|
245
259
|
* @default false
|
|
246
260
|
*/
|
|
247
261
|
readonly stacked: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -318,6 +332,8 @@ declare class SkyDataGrid implements SkyDataColumnSource, SkyDataSelectionSource
|
|
|
318
332
|
protected readonly pageCount: Signal<number>;
|
|
319
333
|
protected readonly pageItemsCount: _angular_core.WritableSignal<number>;
|
|
320
334
|
protected readonly skyViewkeeper: Signal<string[]>;
|
|
335
|
+
protected readonly useFillDock: Signal<boolean>;
|
|
336
|
+
protected readonly useStacked: Signal<boolean>;
|
|
321
337
|
constructor();
|
|
322
338
|
/**
|
|
323
339
|
* Stops the grid from removing the IDs of rows that are not in `data` from
|
|
@@ -363,8 +379,8 @@ declare class SkyDataGrid implements SkyDataColumnSource, SkyDataSelectionSource
|
|
|
363
379
|
setSort(sort: SkyDataGridSort | undefined): void;
|
|
364
380
|
protected currentPageChange(page: number): void;
|
|
365
381
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkyDataGrid, never>;
|
|
366
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkyDataGrid, "sky-data-grid", never, { "autoSort": { "alias": "autoSort"; "required": false; "isSignal": true; }; "autoPage": { "alias": "autoPage"; "required": false; "isSignal": true; }; "columnFit": { "alias": "columnFit"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "labelText": { "alias": "labelText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "multiselect": { "alias": "multiselect"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageQueryParam": { "alias": "pageQueryParam"; "required": false; "isSignal": true; }; "rowCount": { "alias": "rowCount"; "required": false; "isSignal": true; }; "stacked": { "alias": "stacked"; "required": false; "isSignal": true; }; "topScrollEnabled": { "alias": "topScrollEnabled"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "selectedRowIds": { "alias": "selectedRowIds"; "required": false; "isSignal": true; }; "selectedColumnIds": { "alias": "selectedColumnIds"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; "selectedRowIds": "selectedRowIdsChange"; "selectedColumnIds": "selectedColumnIdsChange"; "sort": "sortChange"; }, ["columns"], never, true, never>;
|
|
382
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkyDataGrid, "sky-data-grid", never, { "autoSort": { "alias": "autoSort"; "required": false; "isSignal": true; }; "autoPage": { "alias": "autoPage"; "required": false; "isSignal": true; }; "columnFit": { "alias": "columnFit"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "dock": { "alias": "dock"; "required": false; "isSignal": true; }; "labelText": { "alias": "labelText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "multiselect": { "alias": "multiselect"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageQueryParam": { "alias": "pageQueryParam"; "required": false; "isSignal": true; }; "rowCount": { "alias": "rowCount"; "required": false; "isSignal": true; }; "stacked": { "alias": "stacked"; "required": false; "isSignal": true; }; "topScrollEnabled": { "alias": "topScrollEnabled"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "selectedRowIds": { "alias": "selectedRowIds"; "required": false; "isSignal": true; }; "selectedColumnIds": { "alias": "selectedColumnIds"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; "selectedRowIds": "selectedRowIdsChange"; "selectedColumnIds": "selectedColumnIdsChange"; "sort": "sortChange"; }, ["columns"], never, true, never>;
|
|
367
383
|
}
|
|
368
384
|
|
|
369
385
|
export { SkyDataGrid, SkyDataGridColumn };
|
|
370
|
-
export type { SkyDataGridRowData, SkyDataGridSort };
|
|
386
|
+
export type { SkyDataGridDockType, SkyDataGridRowData, SkyDataGridSort };
|