@skyux/data-grid 14.23.0 → 14.25.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,17 @@ ModuleRegistry.registerModules([
227
236
  function arraySorted(arr) {
228
237
  return arr.slice().sort((a, b) => a.localeCompare(b));
229
238
  }
239
+ const DEFAULT_DOCK_TYPE = 'none';
240
+ function arraysEqual(a, b) {
241
+ return a.length === b.length && a.every((value, i) => value === b[i]);
242
+ }
243
+ // The data manager has its own copy of this function, because the two
244
+ // libraries cannot share an internal function without exporting it.
245
+ function columnWidthsEqual(a, b) {
246
+ const keys = Object.keys(a);
247
+ return (keys.length === Object.keys(b).length &&
248
+ keys.every((key) => a[key] === b[key]));
249
+ }
230
250
  /**
231
251
  * Displays tabular data in a grid using a declarative set of columns and inputs.
232
252
  * Provide the `data` array and one `sky-data-grid-column` for each column to render.
@@ -234,11 +254,37 @@ function arraySorted(arr) {
234
254
  */
235
255
  class SkyDataGrid {
236
256
  #activatedRoute;
257
+ /**
258
+ * The widths in pixels of the columns users resized, keyed by column ID.
259
+ * This is `undefined` until a data manager integration sets the widths, so a
260
+ * grid outside a data manager neither tracks nor restores them.
261
+ */
262
+ #columnWidths;
263
+ /**
264
+ * The widths the grid gave the columns that have neither a flex nor a
265
+ * width, from before a column width replaced them.
266
+ */
267
+ #gridSizedWidths;
268
+ #selectionPruningDisabled;
269
+ #viewkeeperDisabled;
270
+ #awaitingInitialAutoSize;
237
271
  #gridService;
238
272
  #logger;
239
273
  #router;
240
274
  #columnDefs;
241
275
  #hasColumnDefs;
276
+ /**
277
+ * The IDs of the columns that display, in a fixed order, so that moving a
278
+ * column does not change it.
279
+ */
280
+ #displayedColumnIdSet;
281
+ /**
282
+ * The declared columns that have a usable ID, in declaration order. Columns
283
+ * missing both `columnId` and `field` are omitted; `SkyDataGridColumn`
284
+ * already warns about them. A repeated ID is suffixed the way AG Grid
285
+ * suffixes it (`name_1`), so that every column can be addressed.
286
+ */
287
+ #columnCatalog;
242
288
  #gridDestroyed;
243
289
  #gridSelectedRowIds;
244
290
  #gridSortChange;
@@ -290,6 +336,14 @@ class SkyDataGrid {
290
336
  * the grid will show a "no rows" message.
291
337
  */
292
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" }] : []));
293
347
  /**
294
348
  * The text to read to screen readers to describe the grid. This sets the `aria-label` attribute on the grid container.
295
349
  */
@@ -301,7 +355,7 @@ class SkyDataGrid {
301
355
  */
302
356
  this.loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : {}), transform: coerceBooleanProperty });
303
357
  /**
304
- * 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`.
305
359
  * @default 50
306
360
  */
307
361
  this.minHeight = input(50, { ...(ngDevMode ? { debugName: "minHeight" } : {}), transform: (value) => coerceNumberProperty(value, 50) });
@@ -337,7 +391,7 @@ class SkyDataGrid {
337
391
  } });
338
392
  /**
339
393
  * Whether the data grid is stacked with another element below it. When specified, the appropriate
340
- * 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`.
341
395
  * @default false
342
396
  */
343
397
  this.stacked = input(false, { ...(ngDevMode ? { debugName: "stacked" } : {}), transform: coerceBooleanProperty });
@@ -362,6 +416,15 @@ class SkyDataGrid {
362
416
  * @default []
363
417
  */
364
418
  this.selectedRowIds = model([], ...(ngDevMode ? [{ debugName: "selectedRowIds" }] : []));
419
+ /**
420
+ * The IDs of the columns to display, in display order. Columns that are not
421
+ * included are hidden. An ID that does not match a column is ignored until a
422
+ * column with that ID is declared. This is two-way bindable: once set, it
423
+ * emits a new value when the user reorders columns. When `undefined`, every
424
+ * column displays in declaration order except those marked `columnHidden`.
425
+ * Displayed locked columns come first.
426
+ */
427
+ this.selectedColumnIds = model(...(ngDevMode ? [undefined, { debugName: "selectedColumnIds" }] : []));
365
428
  /**
366
429
  * The current sort applied to the grid. This is two-way bindable: it emits a new value
367
430
  * whenever the user sorts a column, and you can set it to sort the grid programmatically.
@@ -370,6 +433,62 @@ class SkyDataGrid {
370
433
  */
371
434
  this.sort = model(undefined, ...(ngDevMode ? [{ debugName: "sort" }] : []));
372
435
  this.columns = contentChildren(SkyDataGridColumn, ...(ngDevMode ? [{ debugName: "columns" }] : []));
436
+ /**
437
+ * The columns the grid can display, in declaration order. Read by column
438
+ * picker integrations through `SkyDataColumnSource`.
439
+ * @internal
440
+ */
441
+ this.columnOptions = computed(() => this.#columnCatalog().map(({ id, column }) => ({
442
+ alwaysDisplayed: column.locked(),
443
+ description: column.description(),
444
+ id,
445
+ initialHide: column.columnHidden(),
446
+ labelText: column.headingText(),
447
+ })), ...(ngDevMode ? [{ debugName: "columnOptions" }] : []));
448
+ /**
449
+ * The widths in pixels of the columns users resized, keyed by column ID.
450
+ * Read by data manager integrations through `SkyDataColumnSource`.
451
+ * @internal
452
+ */
453
+ this.columnWidths = computed(() => this.#columnWidths() ?? {}, ...(ngDevMode ? [{ debugName: "columnWidths" }] : []));
454
+ /**
455
+ * The IDs of the columns that display, in display order: the
456
+ * `selectedColumnIds` that match a declared column or, when
457
+ * `selectedColumnIds` is `undefined`, every column not marked `columnHidden`.
458
+ * Locked columns come first, as the grid displays them. Read by column
459
+ * picker integrations through `SkyDataColumnSource`.
460
+ * @internal
461
+ */
462
+ this.displayedColumnIds = computed(() => {
463
+ const catalog = this.#columnCatalog();
464
+ const selectedColumnIds = this.selectedColumnIds();
465
+ const declaredIds = catalog.map(({ id }) => id);
466
+ const lockedIds = catalog
467
+ .filter(({ column }) => column.locked())
468
+ .map(({ id }) => id);
469
+ const columnIds = selectedColumnIds
470
+ ? selectedColumnIds.filter((id) => declaredIds.includes(id))
471
+ : catalog
472
+ .filter(({ column }) => !column.columnHidden())
473
+ .map(({ id }) => id);
474
+ return [
475
+ ...columnIds.filter((id) => lockedIds.includes(id)),
476
+ ...columnIds.filter((id) => !lockedIds.includes(id)),
477
+ ];
478
+ }, { ...(ngDevMode ? { debugName: "displayedColumnIds" } : {}), equal: arraysEqual });
479
+ /**
480
+ * The selectors of the elements the grid keeps visible at the top of the
481
+ * viewport while the page scrolls. Read by column picker integrations
482
+ * through `SkyDataColumnSource`.
483
+ * @internal
484
+ */
485
+ this.viewkeeperClasses = computed(() => {
486
+ const classes = ['.ag-header'];
487
+ if (this.topScrollEnabled()) {
488
+ classes.push('.ag-body-horizontal-scroll');
489
+ }
490
+ return classes;
491
+ }, ...(ngDevMode ? [{ debugName: "viewkeeperClasses" }] : []));
373
492
  this.gridApi = signal(undefined, ...(ngDevMode ? [{ debugName: "gridApi" }] : []));
374
493
  this.gridOptions = computed(() => {
375
494
  const hasColumnDefs = this.#hasColumnDefs();
@@ -391,7 +510,7 @@ class SkyDataGrid {
391
510
  context: {
392
511
  enableTopScroll: untracked(() => this.topScrollEnabled()),
393
512
  },
394
- domLayout: 'autoHeight',
513
+ domLayout: untracked(() => this.useFillDock() ? 'normal' : 'autoHeight'),
395
514
  initialState: sort
396
515
  ? {
397
516
  partialColumnState: true,
@@ -403,7 +522,45 @@ class SkyDataGrid {
403
522
  }
404
523
  : undefined,
405
524
  loading: untracked(() => this.loading() || !Array.isArray(this.data())),
525
+ // A user moves columns with the keyboard or by dragging a column
526
+ // header. A drag moves columns as it goes, and a drag released outside
527
+ // the grid or cancelled with Escape reports no finished move, so sync
528
+ // when any drag ends too.
529
+ onColumnMoved: (event) => {
530
+ if (event.finished) {
531
+ this.#syncColumnOrderFromGrid(event.api);
532
+ }
533
+ },
534
+ // The grid's initial content sizing runs after the grid is ready and
535
+ // would replace the widths applied then, so apply them again. Content
536
+ // sizing after that is a user double-clicking a column's edge.
537
+ onColumnResized: (event) => {
538
+ if (event.source === 'autosizeColumns' &&
539
+ this.#awaitingInitialAutoSize) {
540
+ this.#awaitingInitialAutoSize = false;
541
+ this.#gridSizedWidths.clear();
542
+ this.#rememberGridSizedWidths(event.api);
543
+ this.#reapplyColumnWidths(event.api);
544
+ }
545
+ else if ((event.source === 'uiColumnResized' && event.finished) ||
546
+ event.source === 'autosizeColumns') {
547
+ // AG Grid reports the resized columns with every resize it
548
+ // dispatches from these sources.
549
+ /* istanbul ignore next */
550
+ this.#syncColumnWidthsFromGrid(event.columns ?? []);
551
+ }
552
+ },
553
+ onDragCancelled: (event) => this.#syncColumnOrderFromGrid(event.api),
554
+ onDragStopped: (event) => this.#syncColumnOrderFromGrid(event.api),
406
555
  onGridReady: (args) => {
556
+ // The displayed columns may have changed since the column
557
+ // definitions were created.
558
+ this.#applyDisplayedColumns(args.api, this.displayedColumnIds());
559
+ this.#awaitingInitialAutoSize =
560
+ !!args.api.getGridOption('autoSizeStrategy');
561
+ this.#gridSizedWidths.clear();
562
+ this.#rememberGridSizedWidths(args.api);
563
+ this.#reapplyColumnWidths(args.api);
407
564
  this.gridApi.set(args.api);
408
565
  this.gridReady.set(true);
409
566
  },
@@ -456,23 +613,78 @@ class SkyDataGrid {
456
613
  } });
457
614
  this.skyViewkeeper = computed(() => {
458
615
  // 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');
616
+ // Not used in fill mode either: AG Grid keeps its own header in place in that layout.
617
+ if (this.useFillDock()) {
618
+ return [];
462
619
  }
463
- return classes;
620
+ return this.#viewkeeperDisabled() ? [] : this.viewkeeperClasses();
464
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" }] : []));
465
624
  this.#activatedRoute = inject(ActivatedRoute, { optional: true });
625
+ /**
626
+ * The widths in pixels of the columns users resized, keyed by column ID.
627
+ * This is `undefined` until a data manager integration sets the widths, so a
628
+ * grid outside a data manager neither tracks nor restores them.
629
+ */
630
+ this.#columnWidths = signal(undefined, ...(ngDevMode ? [{ debugName: "#columnWidths" }] : []));
631
+ /**
632
+ * The widths the grid gave the columns that have neither a flex nor a
633
+ * width, from before a column width replaced them.
634
+ */
635
+ this.#gridSizedWidths = new Map();
636
+ this.#selectionPruningDisabled = signal(false, ...(ngDevMode ? [{ debugName: "#selectionPruningDisabled" }] : []));
637
+ this.#viewkeeperDisabled = signal(false, ...(ngDevMode ? [{ debugName: "#viewkeeperDisabled" }] : []));
638
+ this.#awaitingInitialAutoSize = false;
466
639
  this.#gridService = inject(SkyAgGridService);
467
640
  this.#logger = inject(SkyLogService);
468
641
  this.#router = inject(Router, { optional: true });
469
642
  this.#columnDefs = computed(() => {
470
- const columns = this.columns();
471
- return columns
472
- .filter((col) => col.initialized())
473
- .map((col) => this.#createColDef(col));
643
+ const catalog = this.#columnCatalog();
644
+ // Read untracked so that showing, hiding, or reordering columns does not
645
+ // rebuild the column definitions, which would reset flex columns the user
646
+ // resized. An effect applies those changes as runtime column state instead.
647
+ const displayedIds = untracked(this.displayedColumnIds);
648
+ const entriesById = new Map(catalog.map((entry) => [entry.id, entry]));
649
+ // Displayed columns first, in display order, followed by the hidden
650
+ // columns. Hidden columns keep their column definitions so AG Grid retains
651
+ // their state and they can be shown again without being recreated.
652
+ const displayedColDefs = displayedIds
653
+ .map((id) => entriesById.get(id))
654
+ .filter((entry) => !!entry)
655
+ .map(({ column, id }) => this.#createColDef(column, id, false));
656
+ const hiddenColDefs = catalog
657
+ .filter(({ id }) => !displayedIds.includes(id))
658
+ .map(({ column, id }) => this.#createColDef(column, id, true));
659
+ return [...displayedColDefs, ...hiddenColDefs];
474
660
  }, ...(ngDevMode ? [{ debugName: "#columnDefs" }] : []));
475
661
  this.#hasColumnDefs = computed(() => this.#columnDefs().length > 0, ...(ngDevMode ? [{ debugName: "#hasColumnDefs" }] : []));
662
+ /**
663
+ * The IDs of the columns that display, in a fixed order, so that moving a
664
+ * column does not change it.
665
+ */
666
+ this.#displayedColumnIdSet = computed(() => arraySorted(this.displayedColumnIds()), { ...(ngDevMode ? { debugName: "#displayedColumnIdSet" } : {}), equal: arraysEqual });
667
+ /**
668
+ * The declared columns that have a usable ID, in declaration order. Columns
669
+ * missing both `columnId` and `field` are omitted; `SkyDataGridColumn`
670
+ * already warns about them. A repeated ID is suffixed the way AG Grid
671
+ * suffixes it (`name_1`), so that every column can be addressed.
672
+ */
673
+ this.#columnCatalog = computed(() => {
674
+ const catalog = [];
675
+ for (const column of this.columns()) {
676
+ const declaredId = column.columnId() ?? column.field();
677
+ if (declaredId &&
678
+ column.initialized()) {
679
+ let id = declaredId;
680
+ for (let i = 1; catalog.some((entry) => entry.id === id); i++) {
681
+ id = `${declaredId}_${i}`;
682
+ }
683
+ catalog.push({ column, id });
684
+ }
685
+ }
686
+ return catalog;
687
+ }, ...(ngDevMode ? [{ debugName: "#columnCatalog" }] : []));
476
688
  this.#gridDestroyed = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'gridPreDestroyed')));
477
689
  this.#gridSelectedRowIds = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'selectionChanged').pipe(takeUntil(this.#gridDestroyed), map(() => arraySorted(this.#getRowIds(api.getSelectedNodes()))))));
478
690
  this.#gridSortChange = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'sortChanged').pipe(takeUntil(this.#gridDestroyed), map((sortEvent) => {
@@ -507,7 +719,14 @@ class SkyDataGrid {
507
719
  effect(() => {
508
720
  const api = untracked(() => this.gridApi());
509
721
  const columnDefs = this.#columnDefs();
510
- api?.setGridOption('columnDefs', columnDefs);
722
+ if (api) {
723
+ api.setGridOption('columnDefs', columnDefs);
724
+ untracked(() => {
725
+ this.#rememberGridSizedWidths(api);
726
+ // New column definitions make columns users resized flex again.
727
+ this.#reapplyColumnWidths(api);
728
+ });
729
+ }
511
730
  });
512
731
  effect(() => {
513
732
  const api = untracked(() => this.gridApi());
@@ -543,7 +762,10 @@ class SkyDataGrid {
543
762
  const validRowIds = new Set(this.rowData().map((row) => row.id));
544
763
  const selectedRowIds = coerceStringArray(this.selectedRowIds());
545
764
  const validSelectedRowIds = selectedRowIds.filter((id) => validRowIds.has(id));
765
+ // A data manager integration keeps the IDs of rows its search or
766
+ // filters hide, so they are selected again when the rows return.
546
767
  if (this.autoPage() &&
768
+ !this.#selectionPruningDisabled() &&
547
769
  validSelectedRowIds.length !== selectedRowIds.length) {
548
770
  this.selectedRowIds.set(validSelectedRowIds);
549
771
  }
@@ -589,6 +811,32 @@ class SkyDataGrid {
589
811
  defaultState: { sort: null },
590
812
  });
591
813
  });
814
+ // Apply changes to the displayed columns as runtime column state rather
815
+ // than through `columnDefs`, so showing, hiding, or reordering columns does
816
+ // not reset flex columns the user resized. Only a change to the displayed
817
+ // columns re-runs this, so a column order the user set by dragging a header
818
+ // is otherwise left alone.
819
+ effect(() => {
820
+ const displayedIds = this.displayedColumnIds();
821
+ const api = untracked(() => this.gridApi());
822
+ if (api) {
823
+ this.#applyDisplayedColumns(api, displayedIds);
824
+ }
825
+ });
826
+ // A grid that fits its columns to the container, and has no flex columns
827
+ // to take up the space, does not otherwise resize them when a column is
828
+ // hidden or shown. Moving a column leaves the displayed set alone, so it
829
+ // does not discard the widths a user set in a grid that is not tracking
830
+ // them.
831
+ effect(() => {
832
+ this.#displayedColumnIdSet();
833
+ const api = untracked(() => this.gridApi());
834
+ if (api &&
835
+ untracked(this.columnFit) === 'container' &&
836
+ !untracked(() => this.#hasFlexColumns())) {
837
+ this.#fitColumnsToContainer(api);
838
+ }
839
+ });
592
840
  effect(() => {
593
841
  const api = this.gridApi();
594
842
  const page = this.page();
@@ -679,23 +927,82 @@ class SkyDataGrid {
679
927
  return val;
680
928
  });
681
929
  });
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
- });
930
+ // Emit the grid's sort, including no sort once no column is sorted, so
931
+ // the two-way bound model does not retain a stale value.
932
+ this.#gridSortChange
933
+ .pipe(takeUntilDestroyed())
934
+ .subscribe((sortChange) => this.setSort(sortChange));
935
+ }
936
+ /**
937
+ * Stops the grid from removing the IDs of rows that are not in `data` from
938
+ * `selectedRowIds`. Called by data manager integrations through
939
+ * `SkyDataSelectionSource` when they keep rows that a search or filter hides
940
+ * selected.
941
+ * @internal
942
+ */
943
+ disableSelectionPruning() {
944
+ this.#selectionPruningDisabled.set(true);
945
+ }
946
+ /**
947
+ * Stops the grid from keeping the `viewkeeperClasses` elements visible
948
+ * itself. Called by column picker integrations through `SkyDataColumnSource`
949
+ * when a container keeps them visible instead.
950
+ * @internal
951
+ */
952
+ disableViewkeeper() {
953
+ this.#viewkeeperDisabled.set(true);
954
+ }
955
+ /**
956
+ * Sets the columns that display and their order. Called by column picker
957
+ * integrations through `SkyDataColumnSource`.
958
+ * @internal
959
+ */
960
+ setDisplayedColumnIds(columnIds) {
961
+ const selectedColumnIds = this.selectedColumnIds();
962
+ if (!selectedColumnIds || !arraysEqual(selectedColumnIds, columnIds)) {
963
+ this.selectedColumnIds.set([...columnIds]);
964
+ }
965
+ }
966
+ /**
967
+ * Sets the widths in pixels of columns, keyed by column ID, and starts
968
+ * tracking the widths users give columns. Columns that are not included
969
+ * return to the widths they are declared with or, when declared without
970
+ * one, the widths the grid gave them. Called by data manager
971
+ * integrations through `SkyDataColumnSource`.
972
+ * @internal
973
+ */
974
+ setColumnWidths(columnWidths) {
975
+ const currentWidths = this.#columnWidths();
976
+ if (currentWidths && columnWidthsEqual(currentWidths, columnWidths)) {
977
+ return;
978
+ }
979
+ this.#columnWidths.set({ ...columnWidths });
980
+ const api = untracked(this.gridApi);
981
+ if (api) {
982
+ this.#applyColumnWidths(api, columnWidths);
983
+ }
984
+ }
985
+ /**
986
+ * Sets the selected rows. Called by data manager integrations through
987
+ * `SkyDataSelectionSource`.
988
+ * @internal
989
+ */
990
+ setSelectedRowIds(selectedRowIds) {
991
+ if (!arraysEqual(coerceStringArray(this.selectedRowIds()), selectedRowIds)) {
992
+ this.selectedRowIds.set([...selectedRowIds]);
993
+ }
994
+ }
995
+ /**
996
+ * Sets the sort the grid applies. Called by data manager integrations
997
+ * through `SkyDataSortSource`.
998
+ * @internal
999
+ */
1000
+ setSort(sort) {
1001
+ const currentSort = this.sort();
1002
+ if (currentSort?.field !== sort?.field ||
1003
+ currentSort?.direction !== sort?.direction) {
1004
+ this.sort.set(sort);
1005
+ }
699
1006
  }
700
1007
  currentPageChange(page) {
701
1008
  if (page && page !== this.page()) {
@@ -730,15 +1037,15 @@ class SkyDataGrid {
730
1037
  queryParamsHandling: 'merge',
731
1038
  });
732
1039
  }
733
- #createColDef(col) {
1040
+ #createColDef(col, colId, hide) {
734
1041
  const field = col.field();
735
1042
  const colDef = {
736
- colId: col.columnId(),
1043
+ colId,
737
1044
  field,
738
1045
  headerName: col.headingText(),
739
1046
  headerComponentParams: this.#getHeaderComponentParams(col),
740
- hide: col.columnHidden(),
741
- initialHide: col.columnHidden(),
1047
+ hide,
1048
+ initialHide: hide,
742
1049
  resizable: col.resizable(),
743
1050
  sortable: col.sortable(),
744
1051
  lockPosition: col.locked(),
@@ -806,6 +1113,121 @@ class SkyDataGrid {
806
1113
  inlineHelpComponent: SkyDataGridColumnInlineHelp,
807
1114
  };
808
1115
  }
1116
+ #applyDisplayedColumns(api, displayedIds) {
1117
+ const hiddenIds = untracked(this.#columnCatalog)
1118
+ .map(({ id }) => id)
1119
+ .filter((id) => !displayedIds.includes(id));
1120
+ api.applyColumnState({
1121
+ state: [
1122
+ // AG Grid moves columns missing from the state to the end, which
1123
+ // would put the multiselect column after any locked columns.
1124
+ { colId: SELECTION_COLUMN_ID },
1125
+ ...displayedIds.map((colId) => ({ colId, hide: false })),
1126
+ ...hiddenIds.map((colId) => ({ colId, hide: true })),
1127
+ ],
1128
+ applyOrder: true,
1129
+ });
1130
+ }
1131
+ #syncColumnOrderFromGrid(api) {
1132
+ // Column moves are tracked only once `selectedColumnIds` is set, so a grid
1133
+ // without it keeps following each column's `columnHidden` setting. Applying
1134
+ // a column layout moves columns too, so compare against what the grid
1135
+ // should display; only a move the user made differs.
1136
+ const selectedColumnIds = this.selectedColumnIds();
1137
+ if (!selectedColumnIds) {
1138
+ return;
1139
+ }
1140
+ const displayedColumnIds = api
1141
+ .getColumnState()
1142
+ .filter((state) => !state.hide && state.colId !== SELECTION_COLUMN_ID)
1143
+ .map((state) => state.colId);
1144
+ if (!arraysEqual(this.displayedColumnIds(), displayedColumnIds)) {
1145
+ // Keep the IDs of columns that are not declared, such as a column
1146
+ // rendered conditionally, so they display once the column is declared.
1147
+ const declaredIds = this.#columnCatalog().map(({ id }) => id);
1148
+ this.selectedColumnIds.set([
1149
+ ...displayedColumnIds,
1150
+ ...selectedColumnIds.filter((id) => !declaredIds.includes(id)),
1151
+ ]);
1152
+ }
1153
+ }
1154
+ /**
1155
+ * Applies the column widths, and returns columns without one to the widths
1156
+ * they are declared with.
1157
+ */
1158
+ #applyColumnWidths(api, columnWidths) {
1159
+ api.applyColumnState({
1160
+ state: untracked(this.#columnDefs).map(({ colId, flex, initialWidth }) => {
1161
+ const width = columnWidths[colId];
1162
+ // A width stops a column flexing, as a user resizing it does.
1163
+ return width === undefined
1164
+ ? {
1165
+ colId: colId,
1166
+ flex: flex || null,
1167
+ width: initialWidth ?? this.#gridSizedWidths.get(colId),
1168
+ }
1169
+ : { colId: colId, flex: null, width };
1170
+ }),
1171
+ });
1172
+ }
1173
+ /**
1174
+ * Remembers the widths of columns that have neither a flex nor a width, so
1175
+ * they can return to them. AG Grid ignores a column state without a width,
1176
+ * so it leaves a column at the width a user gave it.
1177
+ */
1178
+ #rememberGridSizedWidths(api) {
1179
+ const gridSizedColumnIds = untracked(this.#columnDefs)
1180
+ .filter(({ flex, initialWidth }) => !flex && initialWidth === undefined)
1181
+ .map(({ colId }) => colId);
1182
+ for (const column of api.getAllGridColumns()) {
1183
+ const colId = column.getColId();
1184
+ if (gridSizedColumnIds.includes(colId) &&
1185
+ !this.#gridSizedWidths.has(colId)) {
1186
+ this.#gridSizedWidths.set(colId, column.getActualWidth());
1187
+ }
1188
+ }
1189
+ }
1190
+ /**
1191
+ * Fits the columns to the container, the way the grid does when it
1192
+ * initializes: the columns the grid does not size to their content, such as
1193
+ * those with a declared width and the multiselect column, and the columns
1194
+ * with a width a data manager integration tracks, keep their widths.
1195
+ */
1196
+ #fitColumnsToContainer(api) {
1197
+ const columnWidths = untracked(this.columnWidths);
1198
+ api.sizeColumnsToFit({
1199
+ columnLimits: api
1200
+ .getAllDisplayedColumns()
1201
+ .filter((column) => column.getColDef().suppressAutoSize ||
1202
+ columnWidths[column.getColId()] !== undefined)
1203
+ .map((column) => ({
1204
+ key: column.getColId(),
1205
+ minWidth: column.getActualWidth(),
1206
+ maxWidth: column.getActualWidth(),
1207
+ })),
1208
+ });
1209
+ }
1210
+ #reapplyColumnWidths(api) {
1211
+ const columnWidths = this.#columnWidths();
1212
+ if (columnWidths && Object.keys(columnWidths).length > 0) {
1213
+ this.#applyColumnWidths(api, columnWidths);
1214
+ }
1215
+ }
1216
+ #syncColumnWidthsFromGrid(columns) {
1217
+ const columnWidths = this.#columnWidths();
1218
+ if (!columnWidths) {
1219
+ return;
1220
+ }
1221
+ // A column a user resizes stops flexing. The flex columns that only filled
1222
+ // the space it left keep flexing, so their widths are not the user's.
1223
+ const updatedWidths = { ...columnWidths };
1224
+ for (const column of columns.filter((col) => !col.getFlex())) {
1225
+ updatedWidths[column.getColId()] = column.getActualWidth();
1226
+ }
1227
+ if (!columnWidthsEqual(columnWidths, updatedWidths)) {
1228
+ this.#columnWidths.set(updatedWidths);
1229
+ }
1230
+ }
809
1231
  #getRowIds(rows) {
810
1232
  return coerceArray(rows)
811
1233
  .map((node) => node?.id)
@@ -836,7 +1258,11 @@ class SkyDataGrid {
836
1258
  : { checkboxes: false, mode: 'singleRow' };
837
1259
  }
838
1260
  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 }); }
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: [
1262
+ { provide: SkyDataColumnSource, useExisting: SkyDataGrid },
1263
+ { provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
1264
+ { provide: SkyDataSortSource, useExisting: SkyDataGrid },
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 }); }
840
1266
  }
841
1267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGrid, decorators: [{
842
1268
  type: Component,
@@ -847,9 +1273,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
847
1273
  SkyViewkeeperModule,
848
1274
  SkyWaitModule,
849
1275
  ], host: {
850
- '[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 }] }] } });
1276
+ '[class.sky-data-grid-dock-fill]': 'useFillDock()',
1277
+ '[class.sky-margin-stacked-lg]': 'useStacked()',
1278
+ }, providers: [
1279
+ { provide: SkyDataColumnSource, useExisting: SkyDataGrid },
1280
+ { provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
1281
+ { provide: SkyDataSortSource, useExisting: SkyDataGrid },
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 }] }] } });
853
1284
 
854
1285
  /**
855
1286
  * Generated bundle index. Do not edit.