@skyux/data-grid 14.23.0 → 14.24.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.
@@ -10,9 +10,9 @@ import { SkyLogService, SkyViewkeeperModule } from '@skyux/core';
10
10
  import * as i4 from '@skyux/indicators';
11
11
  import { SkyWaitModule } from '@skyux/indicators';
12
12
  import * as i2 from '@skyux/lists';
13
- import { SkyPagingModule } from '@skyux/lists';
13
+ import { SkyPagingModule, SkyDataColumnSource, SkyDataSelectionSource, SkyDataSortSource } from '@skyux/lists';
14
14
  import { AgGridAngular } from 'ag-grid-angular';
15
- import { ModuleRegistry, CellStyleModule, ClientSideRowModelModule, ColumnApiModule, ColumnAutoSizeModule, CustomEditorModule, EventApiModule, GridStateModule, LocaleModule, PaginationModule, RenderApiModule, RowApiModule, RowAutoHeightModule, RowSelectionModule, RowStyleModule } from 'ag-grid-community';
15
+ import { ModuleRegistry, CellStyleModule, ClientSideRowModelModule, ColumnApiModule, ColumnAutoSizeModule, CustomEditorModule, EventApiModule, GridStateModule, LocaleModule, PaginationModule, RenderApiModule, RowApiModule, RowAutoHeightModule, RowSelectionModule, RowStyleModule, SELECTION_COLUMN_ID } from 'ag-grid-community';
16
16
  import { Observable, filter, switchMap, takeUntil, map, startWith } from 'rxjs';
17
17
  import * as i1 from '@skyux/help-inline';
18
18
  import { SkyHelpInlineModule } from '@skyux/help-inline';
@@ -26,7 +26,9 @@ class SkyDataGridColumn {
26
26
  #initialized;
27
27
  constructor() {
28
28
  /**
29
- * Whether the column is hidden.
29
+ * Whether the column is hidden. When the grid's `selectedColumnIds` is set,
30
+ * it determines which columns display instead. In a data manager's column
31
+ * picker, the column starts hidden and users can choose to display it.
30
32
  * @default false
31
33
  */
32
34
  this.columnHidden = input(false, { ...(ngDevMode ? { debugName: "columnHidden" } : {}), transform: booleanAttribute });
@@ -41,6 +43,11 @@ class SkyDataGridColumn {
41
43
  * @default 'text'
42
44
  */
43
45
  this.dataType = input('text', ...(ngDevMode ? [{ debugName: "dataType" }] : []));
46
+ /**
47
+ * The text to display beneath the column's `headingText` in a data
48
+ * manager's column picker.
49
+ */
50
+ this.description = input(...(ngDevMode ? [undefined, { debugName: "description" }] : []));
44
51
  /**
45
52
  * The property to retrieve cell information from an entry on the grid `data` array.
46
53
  * You must provide either the `columnId` or `field` property for every column,
@@ -81,7 +88,9 @@ class SkyDataGridColumn {
81
88
  /**
82
89
  * Whether the column is locked. The intent is to display locked columns first
83
90
  * on the left side of the grid. If set to `true`, then users cannot drag the column
84
- * to another position or drag other columns before it.
91
+ * to another position or drag other columns before it. In a data manager's
92
+ * column picker, a locked column always displays and is not offered as an
93
+ * option.
85
94
  * @default false
86
95
  */
87
96
  this.locked = input(false, { ...(ngDevMode ? { debugName: "locked" } : {}), transform: booleanAttribute });
@@ -142,7 +151,7 @@ class SkyDataGridColumn {
142
151
  this.#initialized.set(true);
143
152
  }
144
153
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGridColumn, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
145
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: SkyDataGridColumn, isStandalone: true, selector: "sky-data-grid-column", inputs: { columnHidden: { classPropertyName: "columnHidden", publicName: "columnHidden", isSignal: true, isRequired: false, transformFunction: null }, columnId: { classPropertyName: "columnId", publicName: "columnId", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, flexWidth: { classPropertyName: "flexWidth", publicName: "flexWidth", isSignal: true, isRequired: false, transformFunction: null }, headingText: { classPropertyName: "headingText", publicName: "headingText", isSignal: true, isRequired: true, transformFunction: null }, headingHidden: { classPropertyName: "headingHidden", publicName: "headingHidden", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverTitle: { classPropertyName: "helpPopoverTitle", publicName: "helpPopoverTitle", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverContent: { classPropertyName: "helpPopoverContent", publicName: "helpPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, locked: { classPropertyName: "locked", publicName: "locked", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, wrapText: { classPropertyName: "wrapText", publicName: "wrapText", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "templateChild", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: SkyDataGridColumn, isStandalone: true, selector: "sky-data-grid-column", inputs: { columnHidden: { classPropertyName: "columnHidden", publicName: "columnHidden", isSignal: true, isRequired: false, transformFunction: null }, columnId: { classPropertyName: "columnId", publicName: "columnId", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, flexWidth: { classPropertyName: "flexWidth", publicName: "flexWidth", isSignal: true, isRequired: false, transformFunction: null }, headingText: { classPropertyName: "headingText", publicName: "headingText", isSignal: true, isRequired: true, transformFunction: null }, headingHidden: { classPropertyName: "headingHidden", publicName: "headingHidden", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverTitle: { classPropertyName: "helpPopoverTitle", publicName: "helpPopoverTitle", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverContent: { classPropertyName: "helpPopoverContent", publicName: "helpPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, locked: { classPropertyName: "locked", publicName: "locked", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, wrapText: { classPropertyName: "wrapText", publicName: "wrapText", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "templateChild", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
146
155
  }
147
156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGridColumn, decorators: [{
148
157
  type: Component,
@@ -151,7 +160,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
151
160
  template: '',
152
161
  changeDetection: ChangeDetectionStrategy.OnPush,
153
162
  }]
154
- }], ctorParameters: () => [], propDecorators: { columnHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnHidden", required: false }] }], columnId: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnId", required: false }] }], dataType: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataType", required: false }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }], flexWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "flexWidth", required: false }] }], headingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingText", required: true }] }], headingHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingHidden", required: false }] }], helpPopoverTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverTitle", required: false }] }], helpPopoverContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverContent", required: false }] }], locked: [{ type: i0.Input, args: [{ isSignal: true, alias: "locked", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], wrapText: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrapText", required: false }] }], templateChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
163
+ }], ctorParameters: () => [], propDecorators: { columnHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnHidden", required: false }] }], columnId: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnId", required: false }] }], dataType: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataType", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }], flexWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "flexWidth", required: false }] }], headingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingText", required: true }] }], headingHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingHidden", required: false }] }], helpPopoverTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverTitle", required: false }] }], helpPopoverContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverContent", required: false }] }], locked: [{ type: i0.Input, args: [{ isSignal: true, alias: "locked", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], wrapText: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrapText", required: false }] }], templateChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
155
164
 
156
165
  /**
157
166
  * @internal
@@ -227,6 +236,16 @@ ModuleRegistry.registerModules([
227
236
  function arraySorted(arr) {
228
237
  return arr.slice().sort((a, b) => a.localeCompare(b));
229
238
  }
239
+ function arraysEqual(a, b) {
240
+ return a.length === b.length && a.every((value, i) => value === b[i]);
241
+ }
242
+ // The data manager has its own copy of this function, because the two
243
+ // libraries cannot share an internal function without exporting it.
244
+ function columnWidthsEqual(a, b) {
245
+ const keys = Object.keys(a);
246
+ return (keys.length === Object.keys(b).length &&
247
+ keys.every((key) => a[key] === b[key]));
248
+ }
230
249
  /**
231
250
  * Displays tabular data in a grid using a declarative set of columns and inputs.
232
251
  * Provide the `data` array and one `sky-data-grid-column` for each column to render.
@@ -234,11 +253,37 @@ function arraySorted(arr) {
234
253
  */
235
254
  class SkyDataGrid {
236
255
  #activatedRoute;
256
+ /**
257
+ * The widths in pixels of the columns users resized, keyed by column ID.
258
+ * This is `undefined` until a data manager integration sets the widths, so a
259
+ * grid outside a data manager neither tracks nor restores them.
260
+ */
261
+ #columnWidths;
262
+ /**
263
+ * The widths the grid gave the columns that have neither a flex nor a
264
+ * width, from before a column width replaced them.
265
+ */
266
+ #gridSizedWidths;
267
+ #selectionPruningDisabled;
268
+ #viewkeeperDisabled;
269
+ #awaitingInitialAutoSize;
237
270
  #gridService;
238
271
  #logger;
239
272
  #router;
240
273
  #columnDefs;
241
274
  #hasColumnDefs;
275
+ /**
276
+ * The IDs of the columns that display, in a fixed order, so that moving a
277
+ * column does not change it.
278
+ */
279
+ #displayedColumnIdSet;
280
+ /**
281
+ * The declared columns that have a usable ID, in declaration order. Columns
282
+ * missing both `columnId` and `field` are omitted; `SkyDataGridColumn`
283
+ * already warns about them. A repeated ID is suffixed the way AG Grid
284
+ * suffixes it (`name_1`), so that every column can be addressed.
285
+ */
286
+ #columnCatalog;
242
287
  #gridDestroyed;
243
288
  #gridSelectedRowIds;
244
289
  #gridSortChange;
@@ -362,6 +407,15 @@ class SkyDataGrid {
362
407
  * @default []
363
408
  */
364
409
  this.selectedRowIds = model([], ...(ngDevMode ? [{ debugName: "selectedRowIds" }] : []));
410
+ /**
411
+ * The IDs of the columns to display, in display order. Columns that are not
412
+ * included are hidden. An ID that does not match a column is ignored until a
413
+ * column with that ID is declared. This is two-way bindable: once set, it
414
+ * emits a new value when the user reorders columns. When `undefined`, every
415
+ * column displays in declaration order except those marked `columnHidden`.
416
+ * Displayed locked columns come first.
417
+ */
418
+ this.selectedColumnIds = model(...(ngDevMode ? [undefined, { debugName: "selectedColumnIds" }] : []));
365
419
  /**
366
420
  * The current sort applied to the grid. This is two-way bindable: it emits a new value
367
421
  * whenever the user sorts a column, and you can set it to sort the grid programmatically.
@@ -370,6 +424,62 @@ class SkyDataGrid {
370
424
  */
371
425
  this.sort = model(undefined, ...(ngDevMode ? [{ debugName: "sort" }] : []));
372
426
  this.columns = contentChildren(SkyDataGridColumn, ...(ngDevMode ? [{ debugName: "columns" }] : []));
427
+ /**
428
+ * The columns the grid can display, in declaration order. Read by column
429
+ * picker integrations through `SkyDataColumnSource`.
430
+ * @internal
431
+ */
432
+ this.columnOptions = computed(() => this.#columnCatalog().map(({ id, column }) => ({
433
+ alwaysDisplayed: column.locked(),
434
+ description: column.description(),
435
+ id,
436
+ initialHide: column.columnHidden(),
437
+ labelText: column.headingText(),
438
+ })), ...(ngDevMode ? [{ debugName: "columnOptions" }] : []));
439
+ /**
440
+ * The widths in pixels of the columns users resized, keyed by column ID.
441
+ * Read by data manager integrations through `SkyDataColumnSource`.
442
+ * @internal
443
+ */
444
+ this.columnWidths = computed(() => this.#columnWidths() ?? {}, ...(ngDevMode ? [{ debugName: "columnWidths" }] : []));
445
+ /**
446
+ * The IDs of the columns that display, in display order: the
447
+ * `selectedColumnIds` that match a declared column or, when
448
+ * `selectedColumnIds` is `undefined`, every column not marked `columnHidden`.
449
+ * Locked columns come first, as the grid displays them. Read by column
450
+ * picker integrations through `SkyDataColumnSource`.
451
+ * @internal
452
+ */
453
+ this.displayedColumnIds = computed(() => {
454
+ const catalog = this.#columnCatalog();
455
+ const selectedColumnIds = this.selectedColumnIds();
456
+ const declaredIds = catalog.map(({ id }) => id);
457
+ const lockedIds = catalog
458
+ .filter(({ column }) => column.locked())
459
+ .map(({ id }) => id);
460
+ const columnIds = selectedColumnIds
461
+ ? selectedColumnIds.filter((id) => declaredIds.includes(id))
462
+ : catalog
463
+ .filter(({ column }) => !column.columnHidden())
464
+ .map(({ id }) => id);
465
+ return [
466
+ ...columnIds.filter((id) => lockedIds.includes(id)),
467
+ ...columnIds.filter((id) => !lockedIds.includes(id)),
468
+ ];
469
+ }, { ...(ngDevMode ? { debugName: "displayedColumnIds" } : {}), equal: arraysEqual });
470
+ /**
471
+ * The selectors of the elements the grid keeps visible at the top of the
472
+ * viewport while the page scrolls. Read by column picker integrations
473
+ * through `SkyDataColumnSource`.
474
+ * @internal
475
+ */
476
+ this.viewkeeperClasses = computed(() => {
477
+ const classes = ['.ag-header'];
478
+ if (this.topScrollEnabled()) {
479
+ classes.push('.ag-body-horizontal-scroll');
480
+ }
481
+ return classes;
482
+ }, ...(ngDevMode ? [{ debugName: "viewkeeperClasses" }] : []));
373
483
  this.gridApi = signal(undefined, ...(ngDevMode ? [{ debugName: "gridApi" }] : []));
374
484
  this.gridOptions = computed(() => {
375
485
  const hasColumnDefs = this.#hasColumnDefs();
@@ -403,7 +513,45 @@ class SkyDataGrid {
403
513
  }
404
514
  : undefined,
405
515
  loading: untracked(() => this.loading() || !Array.isArray(this.data())),
516
+ // A user moves columns with the keyboard or by dragging a column
517
+ // header. A drag moves columns as it goes, and a drag released outside
518
+ // the grid or cancelled with Escape reports no finished move, so sync
519
+ // when any drag ends too.
520
+ onColumnMoved: (event) => {
521
+ if (event.finished) {
522
+ this.#syncColumnOrderFromGrid(event.api);
523
+ }
524
+ },
525
+ // The grid's initial content sizing runs after the grid is ready and
526
+ // would replace the widths applied then, so apply them again. Content
527
+ // sizing after that is a user double-clicking a column's edge.
528
+ onColumnResized: (event) => {
529
+ if (event.source === 'autosizeColumns' &&
530
+ this.#awaitingInitialAutoSize) {
531
+ this.#awaitingInitialAutoSize = false;
532
+ this.#gridSizedWidths.clear();
533
+ this.#rememberGridSizedWidths(event.api);
534
+ this.#reapplyColumnWidths(event.api);
535
+ }
536
+ else if ((event.source === 'uiColumnResized' && event.finished) ||
537
+ event.source === 'autosizeColumns') {
538
+ // AG Grid reports the resized columns with every resize it
539
+ // dispatches from these sources.
540
+ /* istanbul ignore next */
541
+ this.#syncColumnWidthsFromGrid(event.columns ?? []);
542
+ }
543
+ },
544
+ onDragCancelled: (event) => this.#syncColumnOrderFromGrid(event.api),
545
+ onDragStopped: (event) => this.#syncColumnOrderFromGrid(event.api),
406
546
  onGridReady: (args) => {
547
+ // The displayed columns may have changed since the column
548
+ // definitions were created.
549
+ this.#applyDisplayedColumns(args.api, this.displayedColumnIds());
550
+ this.#awaitingInitialAutoSize =
551
+ !!args.api.getGridOption('autoSizeStrategy');
552
+ this.#gridSizedWidths.clear();
553
+ this.#rememberGridSizedWidths(args.api);
554
+ this.#reapplyColumnWidths(args.api);
407
555
  this.gridApi.set(args.api);
408
556
  this.gridReady.set(true);
409
557
  },
@@ -454,25 +602,71 @@ class SkyDataGrid {
454
602
  }
455
603
  return source;
456
604
  } });
457
- this.skyViewkeeper = computed(() => {
458
- // Only used when not using SkyDataManagerService because data manager handles SkyViewkeeper.
459
- const classes = ['.ag-header'];
460
- if (this.topScrollEnabled()) {
461
- classes.push('.ag-body-horizontal-scroll');
462
- }
463
- return classes;
464
- }, ...(ngDevMode ? [{ debugName: "skyViewkeeper" }] : []));
605
+ this.skyViewkeeper = computed(() => this.#viewkeeperDisabled() ? [] : this.viewkeeperClasses(), ...(ngDevMode ? [{ debugName: "skyViewkeeper" }] : []));
465
606
  this.#activatedRoute = inject(ActivatedRoute, { optional: true });
607
+ /**
608
+ * The widths in pixels of the columns users resized, keyed by column ID.
609
+ * This is `undefined` until a data manager integration sets the widths, so a
610
+ * grid outside a data manager neither tracks nor restores them.
611
+ */
612
+ this.#columnWidths = signal(undefined, ...(ngDevMode ? [{ debugName: "#columnWidths" }] : []));
613
+ /**
614
+ * The widths the grid gave the columns that have neither a flex nor a
615
+ * width, from before a column width replaced them.
616
+ */
617
+ this.#gridSizedWidths = new Map();
618
+ this.#selectionPruningDisabled = signal(false, ...(ngDevMode ? [{ debugName: "#selectionPruningDisabled" }] : []));
619
+ this.#viewkeeperDisabled = signal(false, ...(ngDevMode ? [{ debugName: "#viewkeeperDisabled" }] : []));
620
+ this.#awaitingInitialAutoSize = false;
466
621
  this.#gridService = inject(SkyAgGridService);
467
622
  this.#logger = inject(SkyLogService);
468
623
  this.#router = inject(Router, { optional: true });
469
624
  this.#columnDefs = computed(() => {
470
- const columns = this.columns();
471
- return columns
472
- .filter((col) => col.initialized())
473
- .map((col) => this.#createColDef(col));
625
+ const catalog = this.#columnCatalog();
626
+ // Read untracked so that showing, hiding, or reordering columns does not
627
+ // rebuild the column definitions, which would reset flex columns the user
628
+ // resized. An effect applies those changes as runtime column state instead.
629
+ const displayedIds = untracked(this.displayedColumnIds);
630
+ const entriesById = new Map(catalog.map((entry) => [entry.id, entry]));
631
+ // Displayed columns first, in display order, followed by the hidden
632
+ // columns. Hidden columns keep their column definitions so AG Grid retains
633
+ // their state and they can be shown again without being recreated.
634
+ const displayedColDefs = displayedIds
635
+ .map((id) => entriesById.get(id))
636
+ .filter((entry) => !!entry)
637
+ .map(({ column, id }) => this.#createColDef(column, id, false));
638
+ const hiddenColDefs = catalog
639
+ .filter(({ id }) => !displayedIds.includes(id))
640
+ .map(({ column, id }) => this.#createColDef(column, id, true));
641
+ return [...displayedColDefs, ...hiddenColDefs];
474
642
  }, ...(ngDevMode ? [{ debugName: "#columnDefs" }] : []));
475
643
  this.#hasColumnDefs = computed(() => this.#columnDefs().length > 0, ...(ngDevMode ? [{ debugName: "#hasColumnDefs" }] : []));
644
+ /**
645
+ * The IDs of the columns that display, in a fixed order, so that moving a
646
+ * column does not change it.
647
+ */
648
+ this.#displayedColumnIdSet = computed(() => arraySorted(this.displayedColumnIds()), { ...(ngDevMode ? { debugName: "#displayedColumnIdSet" } : {}), equal: arraysEqual });
649
+ /**
650
+ * The declared columns that have a usable ID, in declaration order. Columns
651
+ * missing both `columnId` and `field` are omitted; `SkyDataGridColumn`
652
+ * already warns about them. A repeated ID is suffixed the way AG Grid
653
+ * suffixes it (`name_1`), so that every column can be addressed.
654
+ */
655
+ this.#columnCatalog = computed(() => {
656
+ const catalog = [];
657
+ for (const column of this.columns()) {
658
+ const declaredId = column.columnId() ?? column.field();
659
+ if (declaredId &&
660
+ column.initialized()) {
661
+ let id = declaredId;
662
+ for (let i = 1; catalog.some((entry) => entry.id === id); i++) {
663
+ id = `${declaredId}_${i}`;
664
+ }
665
+ catalog.push({ column, id });
666
+ }
667
+ }
668
+ return catalog;
669
+ }, ...(ngDevMode ? [{ debugName: "#columnCatalog" }] : []));
476
670
  this.#gridDestroyed = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'gridPreDestroyed')));
477
671
  this.#gridSelectedRowIds = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'selectionChanged').pipe(takeUntil(this.#gridDestroyed), map(() => arraySorted(this.#getRowIds(api.getSelectedNodes()))))));
478
672
  this.#gridSortChange = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'sortChanged').pipe(takeUntil(this.#gridDestroyed), map((sortEvent) => {
@@ -507,7 +701,14 @@ class SkyDataGrid {
507
701
  effect(() => {
508
702
  const api = untracked(() => this.gridApi());
509
703
  const columnDefs = this.#columnDefs();
510
- api?.setGridOption('columnDefs', columnDefs);
704
+ if (api) {
705
+ api.setGridOption('columnDefs', columnDefs);
706
+ untracked(() => {
707
+ this.#rememberGridSizedWidths(api);
708
+ // New column definitions make columns users resized flex again.
709
+ this.#reapplyColumnWidths(api);
710
+ });
711
+ }
511
712
  });
512
713
  effect(() => {
513
714
  const api = untracked(() => this.gridApi());
@@ -543,7 +744,10 @@ class SkyDataGrid {
543
744
  const validRowIds = new Set(this.rowData().map((row) => row.id));
544
745
  const selectedRowIds = coerceStringArray(this.selectedRowIds());
545
746
  const validSelectedRowIds = selectedRowIds.filter((id) => validRowIds.has(id));
747
+ // A data manager integration keeps the IDs of rows its search or
748
+ // filters hide, so they are selected again when the rows return.
546
749
  if (this.autoPage() &&
750
+ !this.#selectionPruningDisabled() &&
547
751
  validSelectedRowIds.length !== selectedRowIds.length) {
548
752
  this.selectedRowIds.set(validSelectedRowIds);
549
753
  }
@@ -589,6 +793,32 @@ class SkyDataGrid {
589
793
  defaultState: { sort: null },
590
794
  });
591
795
  });
796
+ // Apply changes to the displayed columns as runtime column state rather
797
+ // than through `columnDefs`, so showing, hiding, or reordering columns does
798
+ // not reset flex columns the user resized. Only a change to the displayed
799
+ // columns re-runs this, so a column order the user set by dragging a header
800
+ // is otherwise left alone.
801
+ effect(() => {
802
+ const displayedIds = this.displayedColumnIds();
803
+ const api = untracked(() => this.gridApi());
804
+ if (api) {
805
+ this.#applyDisplayedColumns(api, displayedIds);
806
+ }
807
+ });
808
+ // A grid that fits its columns to the container, and has no flex columns
809
+ // to take up the space, does not otherwise resize them when a column is
810
+ // hidden or shown. Moving a column leaves the displayed set alone, so it
811
+ // does not discard the widths a user set in a grid that is not tracking
812
+ // them.
813
+ effect(() => {
814
+ this.#displayedColumnIdSet();
815
+ const api = untracked(() => this.gridApi());
816
+ if (api &&
817
+ untracked(this.columnFit) === 'container' &&
818
+ !untracked(() => this.#hasFlexColumns())) {
819
+ this.#fitColumnsToContainer(api);
820
+ }
821
+ });
592
822
  effect(() => {
593
823
  const api = this.gridApi();
594
824
  const page = this.page();
@@ -679,23 +909,82 @@ class SkyDataGrid {
679
909
  return val;
680
910
  });
681
911
  });
682
- this.#gridSortChange.pipe(takeUntilDestroyed()).subscribe((sortChange) => {
683
- if (sortChange) {
684
- this.sort.update((sort) => {
685
- if (!!sort !== !!sortChange ||
686
- sort?.direction !== sortChange?.direction ||
687
- sort?.field !== sortChange?.field) {
688
- return sortChange;
689
- }
690
- return sort;
691
- });
692
- }
693
- else {
694
- // Clear the sort when the grid no longer has a sorted column so the
695
- // two-way bound model does not retain a stale value.
696
- this.sort.update(() => undefined);
697
- }
698
- });
912
+ // Emit the grid's sort, including no sort once no column is sorted, so
913
+ // the two-way bound model does not retain a stale value.
914
+ this.#gridSortChange
915
+ .pipe(takeUntilDestroyed())
916
+ .subscribe((sortChange) => this.setSort(sortChange));
917
+ }
918
+ /**
919
+ * Stops the grid from removing the IDs of rows that are not in `data` from
920
+ * `selectedRowIds`. Called by data manager integrations through
921
+ * `SkyDataSelectionSource` when they keep rows that a search or filter hides
922
+ * selected.
923
+ * @internal
924
+ */
925
+ disableSelectionPruning() {
926
+ this.#selectionPruningDisabled.set(true);
927
+ }
928
+ /**
929
+ * Stops the grid from keeping the `viewkeeperClasses` elements visible
930
+ * itself. Called by column picker integrations through `SkyDataColumnSource`
931
+ * when a container keeps them visible instead.
932
+ * @internal
933
+ */
934
+ disableViewkeeper() {
935
+ this.#viewkeeperDisabled.set(true);
936
+ }
937
+ /**
938
+ * Sets the columns that display and their order. Called by column picker
939
+ * integrations through `SkyDataColumnSource`.
940
+ * @internal
941
+ */
942
+ setDisplayedColumnIds(columnIds) {
943
+ const selectedColumnIds = this.selectedColumnIds();
944
+ if (!selectedColumnIds || !arraysEqual(selectedColumnIds, columnIds)) {
945
+ this.selectedColumnIds.set([...columnIds]);
946
+ }
947
+ }
948
+ /**
949
+ * Sets the widths in pixels of columns, keyed by column ID, and starts
950
+ * tracking the widths users give columns. Columns that are not included
951
+ * return to the widths they are declared with or, when declared without
952
+ * one, the widths the grid gave them. Called by data manager
953
+ * integrations through `SkyDataColumnSource`.
954
+ * @internal
955
+ */
956
+ setColumnWidths(columnWidths) {
957
+ const currentWidths = this.#columnWidths();
958
+ if (currentWidths && columnWidthsEqual(currentWidths, columnWidths)) {
959
+ return;
960
+ }
961
+ this.#columnWidths.set({ ...columnWidths });
962
+ const api = untracked(this.gridApi);
963
+ if (api) {
964
+ this.#applyColumnWidths(api, columnWidths);
965
+ }
966
+ }
967
+ /**
968
+ * Sets the selected rows. Called by data manager integrations through
969
+ * `SkyDataSelectionSource`.
970
+ * @internal
971
+ */
972
+ setSelectedRowIds(selectedRowIds) {
973
+ if (!arraysEqual(coerceStringArray(this.selectedRowIds()), selectedRowIds)) {
974
+ this.selectedRowIds.set([...selectedRowIds]);
975
+ }
976
+ }
977
+ /**
978
+ * Sets the sort the grid applies. Called by data manager integrations
979
+ * through `SkyDataSortSource`.
980
+ * @internal
981
+ */
982
+ setSort(sort) {
983
+ const currentSort = this.sort();
984
+ if (currentSort?.field !== sort?.field ||
985
+ currentSort?.direction !== sort?.direction) {
986
+ this.sort.set(sort);
987
+ }
699
988
  }
700
989
  currentPageChange(page) {
701
990
  if (page && page !== this.page()) {
@@ -730,15 +1019,15 @@ class SkyDataGrid {
730
1019
  queryParamsHandling: 'merge',
731
1020
  });
732
1021
  }
733
- #createColDef(col) {
1022
+ #createColDef(col, colId, hide) {
734
1023
  const field = col.field();
735
1024
  const colDef = {
736
- colId: col.columnId(),
1025
+ colId,
737
1026
  field,
738
1027
  headerName: col.headingText(),
739
1028
  headerComponentParams: this.#getHeaderComponentParams(col),
740
- hide: col.columnHidden(),
741
- initialHide: col.columnHidden(),
1029
+ hide,
1030
+ initialHide: hide,
742
1031
  resizable: col.resizable(),
743
1032
  sortable: col.sortable(),
744
1033
  lockPosition: col.locked(),
@@ -806,6 +1095,121 @@ class SkyDataGrid {
806
1095
  inlineHelpComponent: SkyDataGridColumnInlineHelp,
807
1096
  };
808
1097
  }
1098
+ #applyDisplayedColumns(api, displayedIds) {
1099
+ const hiddenIds = untracked(this.#columnCatalog)
1100
+ .map(({ id }) => id)
1101
+ .filter((id) => !displayedIds.includes(id));
1102
+ api.applyColumnState({
1103
+ state: [
1104
+ // AG Grid moves columns missing from the state to the end, which
1105
+ // would put the multiselect column after any locked columns.
1106
+ { colId: SELECTION_COLUMN_ID },
1107
+ ...displayedIds.map((colId) => ({ colId, hide: false })),
1108
+ ...hiddenIds.map((colId) => ({ colId, hide: true })),
1109
+ ],
1110
+ applyOrder: true,
1111
+ });
1112
+ }
1113
+ #syncColumnOrderFromGrid(api) {
1114
+ // Column moves are tracked only once `selectedColumnIds` is set, so a grid
1115
+ // without it keeps following each column's `columnHidden` setting. Applying
1116
+ // a column layout moves columns too, so compare against what the grid
1117
+ // should display; only a move the user made differs.
1118
+ const selectedColumnIds = this.selectedColumnIds();
1119
+ if (!selectedColumnIds) {
1120
+ return;
1121
+ }
1122
+ const displayedColumnIds = api
1123
+ .getColumnState()
1124
+ .filter((state) => !state.hide && state.colId !== SELECTION_COLUMN_ID)
1125
+ .map((state) => state.colId);
1126
+ if (!arraysEqual(this.displayedColumnIds(), displayedColumnIds)) {
1127
+ // Keep the IDs of columns that are not declared, such as a column
1128
+ // rendered conditionally, so they display once the column is declared.
1129
+ const declaredIds = this.#columnCatalog().map(({ id }) => id);
1130
+ this.selectedColumnIds.set([
1131
+ ...displayedColumnIds,
1132
+ ...selectedColumnIds.filter((id) => !declaredIds.includes(id)),
1133
+ ]);
1134
+ }
1135
+ }
1136
+ /**
1137
+ * Applies the column widths, and returns columns without one to the widths
1138
+ * they are declared with.
1139
+ */
1140
+ #applyColumnWidths(api, columnWidths) {
1141
+ api.applyColumnState({
1142
+ state: untracked(this.#columnDefs).map(({ colId, flex, initialWidth }) => {
1143
+ const width = columnWidths[colId];
1144
+ // A width stops a column flexing, as a user resizing it does.
1145
+ return width === undefined
1146
+ ? {
1147
+ colId: colId,
1148
+ flex: flex || null,
1149
+ width: initialWidth ?? this.#gridSizedWidths.get(colId),
1150
+ }
1151
+ : { colId: colId, flex: null, width };
1152
+ }),
1153
+ });
1154
+ }
1155
+ /**
1156
+ * Remembers the widths of columns that have neither a flex nor a width, so
1157
+ * they can return to them. AG Grid ignores a column state without a width,
1158
+ * so it leaves a column at the width a user gave it.
1159
+ */
1160
+ #rememberGridSizedWidths(api) {
1161
+ const gridSizedColumnIds = untracked(this.#columnDefs)
1162
+ .filter(({ flex, initialWidth }) => !flex && initialWidth === undefined)
1163
+ .map(({ colId }) => colId);
1164
+ for (const column of api.getAllGridColumns()) {
1165
+ const colId = column.getColId();
1166
+ if (gridSizedColumnIds.includes(colId) &&
1167
+ !this.#gridSizedWidths.has(colId)) {
1168
+ this.#gridSizedWidths.set(colId, column.getActualWidth());
1169
+ }
1170
+ }
1171
+ }
1172
+ /**
1173
+ * Fits the columns to the container, the way the grid does when it
1174
+ * initializes: the columns the grid does not size to their content, such as
1175
+ * those with a declared width and the multiselect column, and the columns
1176
+ * with a width a data manager integration tracks, keep their widths.
1177
+ */
1178
+ #fitColumnsToContainer(api) {
1179
+ const columnWidths = untracked(this.columnWidths);
1180
+ api.sizeColumnsToFit({
1181
+ columnLimits: api
1182
+ .getAllDisplayedColumns()
1183
+ .filter((column) => column.getColDef().suppressAutoSize ||
1184
+ columnWidths[column.getColId()] !== undefined)
1185
+ .map((column) => ({
1186
+ key: column.getColId(),
1187
+ minWidth: column.getActualWidth(),
1188
+ maxWidth: column.getActualWidth(),
1189
+ })),
1190
+ });
1191
+ }
1192
+ #reapplyColumnWidths(api) {
1193
+ const columnWidths = this.#columnWidths();
1194
+ if (columnWidths && Object.keys(columnWidths).length > 0) {
1195
+ this.#applyColumnWidths(api, columnWidths);
1196
+ }
1197
+ }
1198
+ #syncColumnWidthsFromGrid(columns) {
1199
+ const columnWidths = this.#columnWidths();
1200
+ if (!columnWidths) {
1201
+ return;
1202
+ }
1203
+ // A column a user resizes stops flexing. The flex columns that only filled
1204
+ // the space it left keep flexing, so their widths are not the user's.
1205
+ const updatedWidths = { ...columnWidths };
1206
+ for (const column of columns.filter((col) => !col.getFlex())) {
1207
+ updatedWidths[column.getColId()] = column.getActualWidth();
1208
+ }
1209
+ if (!columnWidthsEqual(columnWidths, updatedWidths)) {
1210
+ this.#columnWidths.set(updatedWidths);
1211
+ }
1212
+ }
809
1213
  #getRowIds(rows) {
810
1214
  return coerceArray(rows)
811
1215
  .map((node) => node?.id)
@@ -836,7 +1240,11 @@ class SkyDataGrid {
836
1240
  : { checkboxes: false, mode: 'singleRow' };
837
1241
  }
838
1242
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
839
- 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 }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { page: "pageChange", selectedRowIds: "selectedRowIdsChange", sort: "sortChange" }, host: { properties: { "class.sky-margin-stacked-lg": "stacked()" } }, queries: [{ propertyName: "columns", predicate: SkyDataGridColumn, isSignal: true }], ngImport: i0, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <sky-ag-grid-wrapper [compact]=\"compact()\" [minHeight]=\"minHeight()\">\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"] }, { 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 }); }
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": "stacked()" } }, providers: [
1244
+ { provide: SkyDataColumnSource, useExisting: SkyDataGrid },
1245
+ { provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
1246
+ { 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 }); }
840
1248
  }
841
1249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGrid, decorators: [{
842
1250
  type: Component,
@@ -848,8 +1256,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
848
1256
  SkyWaitModule,
849
1257
  ], host: {
850
1258
  '[class.sky-margin-stacked-lg]': 'stacked()',
851
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <sky-ag-grid-wrapper [compact]=\"compact()\" [minHeight]=\"minHeight()\">\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"] }]
852
- }], 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"] }], 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 }] }] } });
1259
+ }, providers: [
1260
+ { provide: SkyDataColumnSource, useExisting: SkyDataGrid },
1261
+ { provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
1262
+ { 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 }] }] } });
853
1265
 
854
1266
  /**
855
1267
  * Generated bundle index. Do not edit.