@clr/angular 18.3.0 → 18.4.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.
Files changed (110) hide show
  1. package/fesm2022/clr-angular-accordion.mjs +28 -28
  2. package/fesm2022/clr-angular-accordion.mjs.map +1 -1
  3. package/fesm2022/clr-angular-button.mjs +27 -27
  4. package/fesm2022/clr-angular-button.mjs.map +1 -1
  5. package/fesm2022/clr-angular-card.mjs +417 -0
  6. package/fesm2022/clr-angular-card.mjs.map +1 -0
  7. package/fesm2022/clr-angular-collapsible-panel.mjs +6 -6
  8. package/fesm2022/clr-angular-collapsible-panel.mjs.map +1 -1
  9. package/fesm2022/clr-angular-data-datagrid.mjs +1105 -352
  10. package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -1
  11. package/fesm2022/clr-angular-data-stack-view.mjs +23 -23
  12. package/fesm2022/clr-angular-data-stack-view.mjs.map +1 -1
  13. package/fesm2022/clr-angular-data-tree-view.mjs +283 -48
  14. package/fesm2022/clr-angular-data-tree-view.mjs.map +1 -1
  15. package/fesm2022/clr-angular-data.mjs +4 -4
  16. package/fesm2022/clr-angular-data.mjs.map +1 -1
  17. package/fesm2022/clr-angular-emphasis-alert.mjs +26 -26
  18. package/fesm2022/clr-angular-emphasis-alert.mjs.map +1 -1
  19. package/fesm2022/clr-angular-emphasis-badge.mjs +3 -3
  20. package/fesm2022/clr-angular-emphasis-badge.mjs.map +1 -1
  21. package/fesm2022/clr-angular-emphasis-label.mjs +3 -3
  22. package/fesm2022/clr-angular-emphasis-label.mjs.map +1 -1
  23. package/fesm2022/clr-angular-emphasis.mjs +4 -4
  24. package/fesm2022/clr-angular-emphasis.mjs.map +1 -1
  25. package/fesm2022/clr-angular-forms-checkbox.mjs +13 -13
  26. package/fesm2022/clr-angular-forms-checkbox.mjs.map +1 -1
  27. package/fesm2022/clr-angular-forms-combobox.mjs +35 -35
  28. package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -1
  29. package/fesm2022/clr-angular-forms-common.mjs +69 -69
  30. package/fesm2022/clr-angular-forms-common.mjs.map +1 -1
  31. package/fesm2022/clr-angular-forms-datalist.mjs +17 -17
  32. package/fesm2022/clr-angular-forms-datalist.mjs.map +1 -1
  33. package/fesm2022/clr-angular-forms-datepicker.mjs +73 -73
  34. package/fesm2022/clr-angular-forms-datepicker.mjs.map +1 -1
  35. package/fesm2022/clr-angular-forms-file-input.mjs +36 -36
  36. package/fesm2022/clr-angular-forms-file-input.mjs.map +1 -1
  37. package/fesm2022/clr-angular-forms-input.mjs +10 -10
  38. package/fesm2022/clr-angular-forms-input.mjs.map +1 -1
  39. package/fesm2022/clr-angular-forms-number-input.mjs +11 -11
  40. package/fesm2022/clr-angular-forms-number-input.mjs.map +1 -1
  41. package/fesm2022/clr-angular-forms-password.mjs +11 -11
  42. package/fesm2022/clr-angular-forms-password.mjs.map +1 -1
  43. package/fesm2022/clr-angular-forms-radio.mjs +13 -13
  44. package/fesm2022/clr-angular-forms-radio.mjs.map +1 -1
  45. package/fesm2022/clr-angular-forms-range.mjs +10 -10
  46. package/fesm2022/clr-angular-forms-range.mjs.map +1 -1
  47. package/fesm2022/clr-angular-forms-select.mjs +10 -10
  48. package/fesm2022/clr-angular-forms-select.mjs.map +1 -1
  49. package/fesm2022/clr-angular-forms-textarea.mjs +10 -10
  50. package/fesm2022/clr-angular-forms-textarea.mjs.map +1 -1
  51. package/fesm2022/clr-angular-forms.mjs +4 -4
  52. package/fesm2022/clr-angular-forms.mjs.map +1 -1
  53. package/fesm2022/clr-angular-icon.mjs +81 -41
  54. package/fesm2022/clr-angular-icon.mjs.map +1 -1
  55. package/fesm2022/clr-angular-layout-breadcrumbs.mjs +10 -10
  56. package/fesm2022/clr-angular-layout-breadcrumbs.mjs.map +1 -1
  57. package/fesm2022/clr-angular-layout-main-container.mjs +7 -7
  58. package/fesm2022/clr-angular-layout-main-container.mjs.map +1 -1
  59. package/fesm2022/clr-angular-layout-nav.mjs +22 -22
  60. package/fesm2022/clr-angular-layout-nav.mjs.map +1 -1
  61. package/fesm2022/clr-angular-layout-tabs.mjs +35 -35
  62. package/fesm2022/clr-angular-layout-tabs.mjs.map +1 -1
  63. package/fesm2022/clr-angular-layout-vertical-nav.mjs +31 -31
  64. package/fesm2022/clr-angular-layout-vertical-nav.mjs.map +1 -1
  65. package/fesm2022/clr-angular-layout.mjs +4 -4
  66. package/fesm2022/clr-angular-layout.mjs.map +1 -1
  67. package/fesm2022/clr-angular-modal.mjs +26 -26
  68. package/fesm2022/clr-angular-modal.mjs.map +1 -1
  69. package/fesm2022/clr-angular-popover-common.mjs +69 -34
  70. package/fesm2022/clr-angular-popover-common.mjs.map +1 -1
  71. package/fesm2022/clr-angular-popover-dropdown.mjs +63 -26
  72. package/fesm2022/clr-angular-popover-dropdown.mjs.map +1 -1
  73. package/fesm2022/clr-angular-popover-signpost.mjs +27 -25
  74. package/fesm2022/clr-angular-popover-signpost.mjs.map +1 -1
  75. package/fesm2022/clr-angular-popover-tooltip.mjs +19 -19
  76. package/fesm2022/clr-angular-popover-tooltip.mjs.map +1 -1
  77. package/fesm2022/clr-angular-popover.mjs +4 -4
  78. package/fesm2022/clr-angular-popover.mjs.map +1 -1
  79. package/fesm2022/clr-angular-progress-progress-bars.mjs +7 -7
  80. package/fesm2022/clr-angular-progress-progress-bars.mjs.map +1 -1
  81. package/fesm2022/clr-angular-progress-spinner.mjs +7 -7
  82. package/fesm2022/clr-angular-progress-spinner.mjs.map +1 -1
  83. package/fesm2022/clr-angular-stepper.mjs +31 -31
  84. package/fesm2022/clr-angular-stepper.mjs.map +1 -1
  85. package/fesm2022/clr-angular-timeline.mjs +23 -23
  86. package/fesm2022/clr-angular-timeline.mjs.map +1 -1
  87. package/fesm2022/clr-angular-utils-conditional.mjs +16 -16
  88. package/fesm2022/clr-angular-utils-conditional.mjs.map +1 -1
  89. package/fesm2022/clr-angular-utils-loading.mjs +7 -7
  90. package/fesm2022/clr-angular-utils-loading.mjs.map +1 -1
  91. package/fesm2022/clr-angular-utils.mjs +144 -152
  92. package/fesm2022/clr-angular-utils.mjs.map +1 -1
  93. package/fesm2022/clr-angular-wizard.mjs +51 -51
  94. package/fesm2022/clr-angular-wizard.mjs.map +1 -1
  95. package/fesm2022/clr-angular.mjs +9 -4
  96. package/fesm2022/clr-angular.mjs.map +1 -1
  97. package/package.json +9 -5
  98. package/types/clr-angular-card.d.ts +110 -0
  99. package/types/clr-angular-data-datagrid.d.ts +293 -17
  100. package/types/clr-angular-data-tree-view.d.ts +126 -88
  101. package/types/clr-angular-forms-datepicker.d.ts +1 -1
  102. package/types/clr-angular-forms-file-input.d.ts +1 -1
  103. package/types/clr-angular-icon.d.ts +14 -2
  104. package/types/clr-angular-popover-common.d.ts +6 -0
  105. package/types/clr-angular-popover-dropdown.d.ts +33 -4
  106. package/types/clr-angular-utils.d.ts +61 -20
  107. package/types/clr-angular.d.ts +8 -6
  108. package/schematics/vitest.config.d.ts +0 -2
  109. package/schematics/vitest.config.js +0 -17
  110. package/schematics/vitest.config.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { TemplateRef, OnDestroy, OnInit, OnChanges, EventEmitter, ElementRef, ViewContainerRef, ChangeDetectorRef, SimpleChanges, DoCheck, IterableDiffers, TrackByFunction, QueryList, AfterContentInit, AfterViewInit, Renderer2, NgZone, EnvironmentInjector, AfterViewChecked, EmbeddedViewRef, Type } from '@angular/core';
3
- import * as i39 from '@clr/angular/utils';
4
- import { ClrCommonStringsService, IfExpandService, ClrLoadingState, ClrExpandableAnimationDirective, DomAdapter, WillyWonka, OompaLoompa } from '@clr/angular/utils';
2
+ import { TemplateRef, OnDestroy, OnInit, OnChanges, EventEmitter, ElementRef, ViewContainerRef, ChangeDetectorRef, SimpleChanges, DoCheck, IterableDiffers, TrackByFunction, QueryList, AfterContentInit, AfterViewInit, Renderer2, NgZone, EnvironmentInjector, Injector, AfterViewChecked, EmbeddedViewRef, Type } from '@angular/core';
3
+ import * as i41 from '@clr/angular/utils';
4
+ import { ClrCommonStringsService, IfExpandService, ClrLoadingState, ClrExpandableAnimationDirective, FocusableItem, DomAdapter, WillyWonka, OompaLoompa } from '@clr/angular/utils';
5
5
  import { Observable, BehaviorSubject, Subject, ReplaySubject } from 'rxjs';
6
6
  import { ModalStackService } from '@clr/angular/modal';
7
7
  import * as i1 from '@clr/angular/popover/common';
8
8
  import { ClrPopoverPosition, ClrPopoverService, ClrPopoverType } from '@clr/angular/popover/common';
9
- import * as i38 from '@angular/common';
9
+ import * as i40 from '@angular/common';
10
10
  import { NgForOfContext } from '@angular/common';
11
11
  import * as _clr_angular_data_datagrid from '@clr/angular/data/datagrid';
12
12
  import { ClrSignpost } from '@clr/angular/popover/signpost';
@@ -14,16 +14,18 @@ import { Directionality } from '@angular/cdk/bidi';
14
14
  import { ListRange } from '@angular/cdk/collections';
15
15
  import { CdkVirtualForOfContext, ScrollDispatcher, ViewportRuler, CdkVirtualForOf, CdkFixedSizeVirtualScroll } from '@angular/cdk/scrolling';
16
16
  import * as _angular_cdk_overlay from '@angular/cdk/overlay';
17
+ import * as i51 from '@clr/angular/popover/dropdown';
18
+ import { ClrDropdown, DropdownFocusHandler, RootDropdownService, ClrDropdownItem } from '@clr/angular/popover/dropdown';
17
19
  import { ClrControlLabel } from '@clr/angular/forms/common';
18
- import * as i40 from '@clr/angular/icon';
19
- import * as i41 from '@clr/angular/forms/input';
20
- import * as i42 from '@clr/angular/forms/radio';
21
- import * as i43 from '@clr/angular/forms/checkbox';
22
- import * as i44 from '@clr/angular/forms/number-input';
23
- import * as i45 from '@clr/angular/forms/select';
24
- import * as i46 from '@angular/forms';
20
+ import * as i42 from '@clr/angular/icon';
21
+ import * as i43 from '@clr/angular/forms/input';
22
+ import * as i44 from '@clr/angular/forms/radio';
23
+ import * as i45 from '@clr/angular/forms/checkbox';
24
+ import * as i46 from '@clr/angular/forms/number-input';
25
+ import * as i47 from '@clr/angular/forms/select';
26
+ import * as i48 from '@angular/forms';
25
27
  import { ControlValueAccessor } from '@angular/forms';
26
- import * as i47 from '@clr/angular/progress/spinner';
28
+ import * as i49 from '@clr/angular/progress/spinner';
27
29
 
28
30
  /**
29
31
  * Enumeration representing the sorting order of a datagrid column. It is a constant Enum,
@@ -76,6 +78,48 @@ interface ClrDatagridFilterInterface<T, S = any> {
76
78
  equals?(other: ClrDatagridFilterInterface<T, any>): boolean;
77
79
  }
78
80
 
81
+ /**
82
+ * The part of a filter that the actions menu needs. Declared here rather than importing
83
+ * ClrDatagridFilter, which would close an import cycle back through this service.
84
+ */
85
+ interface ColumnFilterHandle {
86
+ readonly active: boolean;
87
+ /**
88
+ * The id of the popover the filter renders its content into, for the menu item that opens it to
89
+ * point `aria-controls` at. Optional because it only exists once the filter has an element to
90
+ * label - a handle can register before then.
91
+ */
92
+ readonly popoverId?: string;
93
+ }
94
+ /**
95
+ * Lets `clr-dg-column-actions` and the filter of the same column find each other without either
96
+ * importing the other, and without depending on the order they are declared in.
97
+ *
98
+ * It is provided by `ClrDatagridColumn`, so every filter flavour resolves the same instance - a
99
+ * projected `clr-dg-filter` is a content child of the column, and the `clr-dg-string-filter` and
100
+ * `clr-dg-numeric-filter` the column creates for `clrDgField` live in its view.
101
+ */
102
+ declare class ColumnActionsService {
103
+ /**
104
+ * Whether the filter keeps its own toggle in the column header. An actions menu turns this off and
105
+ * opens the filter itself, so the header keeps a single control per column - unless
106
+ * `clrDgKeepFilterInHeader` asks to keep the toggle.
107
+ *
108
+ * A signal rather than a plain flag because the menu and the filter are siblings: either can be
109
+ * created first, and the filter has to react whenever the answer changes.
110
+ */
111
+ readonly filterInHeader: i0.WritableSignal<boolean>;
112
+ /**
113
+ * Whether the column has an actions menu at all, whatever it does with the filter. While it does,
114
+ * the column drops its own pin toggle, because the menu offers Pin Column instead.
115
+ */
116
+ readonly menuPresent: i0.WritableSignal<boolean>;
117
+ /** The filter rendered for this column, if it has one. */
118
+ readonly filter: i0.WritableSignal<ColumnFilterHandle>;
119
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnActionsService, never>;
120
+ static ɵprov: i0.ɵɵInjectableDeclaration<ColumnActionsService>;
121
+ }
122
+
79
123
  declare class ColumnsService {
80
124
  columns: BehaviorSubject<ColumnState>[];
81
125
  columnsStateChange: BehaviorSubject<ColumnState>;
@@ -308,13 +352,22 @@ declare class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<T, ClrD
308
352
  filterNumberMaxPlaceholder: string;
309
353
  filterNumberMinPlaceholder: string;
310
354
  disableUnsort: boolean;
355
+ /**
356
+ * Lets the user pin and unpin the column from within the datagrid. It only offers the control - the
357
+ * pinned state itself stays on `clrDgPinned`.
358
+ * The control is a pin toggle in the column header, or Pin Column in the column's
359
+ * `clr-dg-column-actions` when it has one - never both, so the header keeps one control per action.
360
+ */
361
+ pinnable: boolean;
311
362
  sortOrderChange: EventEmitter<ClrDatagridSortOrder>;
363
+ pinnedChange: EventEmitter<boolean>;
312
364
  filterValueChange: EventEmitter<any>;
313
365
  titleContainer: ElementRef<HTMLElement>;
314
366
  /**
315
367
  * A custom filter for this column that can be provided in the projected content
316
368
  */
317
369
  customFilter: boolean;
370
+ protected readonly columnActions: ColumnActionsService;
318
371
  private _colType;
319
372
  private _field;
320
373
  /**
@@ -386,12 +439,25 @@ declare class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<T, ClrD
386
439
  * Sorts the datagrid based on this column
387
440
  */
388
441
  sort(reverse?: boolean): void;
442
+ /**
443
+ * Returns the datagrid to its unsorted state. Both the tri-state title button and the sort actions
444
+ * in `clr-dg-column-actions` go through here, so the two cannot drift apart.
445
+ */
446
+ clearSort(): void;
447
+ /**
448
+ * Pins or unpins the column. Going through the `pinned` setter keeps the rendering in sync, and the
449
+ * output lets the application follow a change it did not initiate - without it a one-way
450
+ * [clrDgPinned] binding would write the old value straight back.
451
+ */
452
+ togglePinned(): void;
453
+ protected onPinToggleClick(event: MouseEvent): void;
389
454
  private listenForDetailPaneChanges;
390
455
  private setFilterToggleAriaLabel;
391
456
  private listenForSortingChanges;
392
457
  private setupDefaultFilter;
393
458
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridColumn<any>, [null, null, null, null, null, null, null, null, { optional: true; }]>;
394
- static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridColumn<any>, "clr-dg-column", never, { "filterStringPlaceholder": { "alias": "clrFilterStringPlaceholder"; "required": false; }; "filterNumberMaxPlaceholder": { "alias": "clrFilterNumberMaxPlaceholder"; "required": false; }; "filterNumberMinPlaceholder": { "alias": "clrFilterNumberMinPlaceholder"; "required": false; }; "disableUnsort": { "alias": "clrDgDisableUnsort"; "required": false; }; "pinned": { "alias": "clrDgPinned"; "required": false; }; "colType": { "alias": "clrDgColType"; "required": false; }; "field": { "alias": "clrDgField"; "required": false; }; "sortBy": { "alias": "clrDgSortBy"; "required": false; }; "sortOrder": { "alias": "clrDgSortOrder"; "required": false; }; "updateFilterValue": { "alias": "clrFilterValue"; "required": false; }; }, { "sortOrderChange": "clrDgSortOrderChange"; "filterValueChange": "clrFilterValueChange"; }, ["projectedFilter"], ["clr-dg-filter, clr-dg-string-filter, clr-dg-numeric-filter", "*"], false, [{ directive: typeof i1.ClrPopoverHostDirective; inputs: {}; outputs: {}; }]>;
459
+ static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridColumn<any>, "clr-dg-column", never, { "filterStringPlaceholder": { "alias": "clrFilterStringPlaceholder"; "required": false; }; "filterNumberMaxPlaceholder": { "alias": "clrFilterNumberMaxPlaceholder"; "required": false; }; "filterNumberMinPlaceholder": { "alias": "clrFilterNumberMinPlaceholder"; "required": false; }; "disableUnsort": { "alias": "clrDgDisableUnsort"; "required": false; }; "pinnable": { "alias": "clrDgPinnable"; "required": false; }; "pinned": { "alias": "clrDgPinned"; "required": false; }; "colType": { "alias": "clrDgColType"; "required": false; }; "field": { "alias": "clrDgField"; "required": false; }; "sortBy": { "alias": "clrDgSortBy"; "required": false; }; "sortOrder": { "alias": "clrDgSortOrder"; "required": false; }; "updateFilterValue": { "alias": "clrFilterValue"; "required": false; }; }, { "sortOrderChange": "clrDgSortOrderChange"; "pinnedChange": "clrDgPinnedChange"; "filterValueChange": "clrFilterValueChange"; }, ["projectedFilter"], ["clr-dg-filter, clr-dg-string-filter, clr-dg-numeric-filter", "*", "clr-dg-column-actions"], false, [{ directive: typeof i1.ClrPopoverHostDirective; inputs: {}; outputs: {}; }]>;
460
+ static ngAcceptInputType_pinnable: unknown;
395
461
  static ngAcceptInputType_pinned: unknown;
396
462
  }
397
463
 
@@ -766,6 +832,13 @@ declare class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit
766
832
  private _rowSelectionLabel;
767
833
  private wrappedInjector;
768
834
  private subscriptions;
835
+ /**
836
+ * The placeholder cells we create from `fixedCellTemplate` for the calculate pass. Unlike the
837
+ * cell views, which belong to their `WrappedCell`, these are created here on every pass, so
838
+ * they are ours to destroy. Detaching them from the container only unlinks them - the views
839
+ * themselves would stay alive and keep the whole row, and the datagrid with it, in memory.
840
+ */
841
+ private fixedCellViews;
769
842
  private _selectable;
770
843
  constructor(selection: Selection<T>, rowActionService: RowActionService, globalExpandable: ExpandableRowsCount, expand: DatagridIfExpandService, detailService: DetailService, displayMode: DisplayModeService, vcr: ViewContainerRef, renderer: Renderer2, el: ElementRef<HTMLElement>, commonStrings: ClrCommonStringsService, items: Items, columnsService: ColumnsService, document: any);
771
844
  /**
@@ -808,6 +881,7 @@ declare class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit
808
881
  * @deprecated related to clrDgRowSelection, which is deprecated
809
882
  */
810
883
  protected selectRow(selected: boolean, $event: any): void;
884
+ private destroyFixedCellViews;
811
885
  /**
812
886
  * Projects the cells into the display containers. Cells of pinned columns go into their static
813
887
  * container so they stay visible during horizontal scroll; the rest stay scrollable. Cells are
@@ -856,6 +930,14 @@ declare class ClrDatagridVirtualScrollDirective<T> implements AfterViewInit, DoC
856
930
  private cdkVirtualFor;
857
931
  private subscriptions;
858
932
  private topIndex;
933
+ /**
934
+ * Injectors for the CDK virtual scroll instances we create by hand, in the order they have to be
935
+ * destroyed. Destroying them is what runs the CDK teardown: their `ngOnDestroy` and, importantly,
936
+ * the `DestroyRef` cleanup `CdkVirtualScrollViewport` registers for the effect it creates on the
937
+ * application injector. Leaving them alive keeps that effect registered, which retains the
938
+ * viewport and the entire datagrid view tree for as long as the application lives.
939
+ */
940
+ private readonly cdkInjectors;
859
941
  private mutationChanges;
860
942
  private cdkVirtualForInputs;
861
943
  private _totalItems;
@@ -891,6 +973,18 @@ declare class ClrDatagridVirtualScrollDirective<T> implements AfterViewInit, DoC
891
973
  private updateAriaRowCount;
892
974
  private updateAriaRowIndexes;
893
975
  private createVirtualScrollViewportForDatagrid;
976
+ private createCdkVirtualScrollViewport;
977
+ /**
978
+ * `Directionality`, `ScrollDispatcher` and `ViewportRuler` belong to the application, not to us.
979
+ * Angular registers every value an injector hands out that has an `ngOnDestroy` - `useValue`
980
+ * providers included - and calls it from `injector.destroy()`, so putting them in an injector we
981
+ * destroy would end scroll, resize and text-direction notification for the whole application the
982
+ * first time a virtual scroll datagrid goes away. They live in this parent, which nothing destroys,
983
+ * so the viewport still resolves the very instances our host injector gave us - including a
984
+ * `Directionality` overridden by an ancestor `[dir]`.
985
+ */
986
+ private createApplicationInjector;
987
+ private createCdkVirtualForOfDirective;
894
988
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridVirtualScrollDirective<any>, never>;
895
989
  static ɵdir: i0.ɵɵDirectiveDeclaration<ClrDatagridVirtualScrollDirective<any>, "[clrVirtualScroll],[ClrVirtualScroll]", never, { "persistItems": { "alias": "clrVirtualPersistItems"; "required": false; }; "cdkVirtualForOf": { "alias": "clrVirtualRowsOf"; "required": false; }; "cdkVirtualForTrackBy": { "alias": "clrVirtualRowsTrackBy"; "required": false; }; "cdkVirtualForTemplate": { "alias": "clrVirtualRowsTemplate"; "required": false; }; "cdkVirtualForTemplateCacheSize": { "alias": "clrVirtualRowsTemplateCacheSize"; "required": false; }; "itemSize": { "alias": "clrVirtualRowsItemSize"; "required": false; }; "minBufferPx": { "alias": "clrVirtualRowsMinBufferPx"; "required": false; }; "maxBufferPx": { "alias": "clrVirtualRowsMaxBufferPx"; "required": false; }; "dataRange": { "alias": "clrVirtualDataRange"; "required": false; }; }, { "renderedRangeChange": "renderedRangeChange"; }, never, never, false, never>;
896
990
  }
@@ -1035,6 +1129,13 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
1035
1129
  */
1036
1130
  private _subscriptions;
1037
1131
  private _virtualScrollSubscriptions;
1132
+ /**
1133
+ * The placeholder columns we create from `fixedColumnTemplate` for the calculate pass. Unlike
1134
+ * the column views, which belong to their `WrappedColumn`, these are created here on every
1135
+ * pass, so they are ours to destroy. Detaching them from the container only unlinks them - the
1136
+ * views themselves would stay alive and keep the whole datagrid in memory.
1137
+ */
1138
+ private fixedColumnViews;
1038
1139
  private cachedRowsHeight;
1039
1140
  private cachedContentHeight;
1040
1141
  private resizeObserver;
@@ -1096,6 +1197,7 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
1096
1197
  * Public method to re-trigger the computation of displayed items manually
1097
1198
  */
1098
1199
  dataChanged(): void;
1200
+ private destroyFixedColumnViews;
1099
1201
  private toggleVirtualScrollSubscriptions;
1100
1202
  /**
1101
1203
  * Publishes the width of the row controls - the static container holding the select, action and
@@ -1152,6 +1254,179 @@ declare class ClrDatagridActionOverflow implements OnDestroy {
1152
1254
  static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridActionOverflow, "clr-dg-action-overflow", never, { "buttonLabel": { "alias": "clrDgActionOverflowButtonLabel"; "required": false; }; "open": { "alias": "clrDgActionOverflowOpen"; "required": false; }; }, { "openChange": "clrDgActionOverflowOpenChange"; }, never, ["*"], false, [{ directive: typeof i1.ClrPopoverHostDirective; inputs: {}; outputs: {}; }]>;
1153
1255
  }
1154
1256
 
1257
+ /**
1258
+ * Groups the actions of a single column behind one menu in the column header. It only gathers
1259
+ * controls that already exist on the column - the behavior itself stays on `ClrDatagridColumn`,
1260
+ * so the menu and the header controls can never drift apart.
1261
+ *
1262
+ * Each item is rendered only when the column can actually perform it, so the menu never offers a
1263
+ * dead option - that covers both what the column can never do, such as sorting when it is not
1264
+ * sortable, and what it cannot do right now, such as clearing a sort while nothing is sorted.
1265
+ * Anything projected into the component is appended after the built-in items.
1266
+ *
1267
+ * A column that has a filter gets a filter action automatically, and the filter drops its own toggle
1268
+ * for as long as this menu is present - the header keeps one control per column rather than two. The
1269
+ * trigger also takes over showing that the column is filtered, which the toggle used to do.
1270
+ * `clrDgKeepFilterInHeader` opts back into the toggle, and then the menu drops the filter action in
1271
+ * exchange: a column offers one way to reach its filter, never both at once.
1272
+ *
1273
+ * Projected items can be `clrDgColumnAction`s, plain `clrDropdownItem`s, or a nested `clr-dropdown`.
1274
+ * They join the arrow key order after the built-in items as long as they are projected directly -
1275
+ * an item wrapped in an element of its own is not found. A nested dropdown's own items stay in its
1276
+ * own menu.
1277
+ *
1278
+ * The component is the dropdown itself rather than wrapping one, so that a projected item can reach
1279
+ * it: injection resolves from where a node is declared, and an item declared outside this component
1280
+ * would sit outside the injector of any `clr-dropdown` in its template.
1281
+ */
1282
+ declare class ClrDatagridColumnActions extends ClrDropdown implements AfterViewInit, OnDestroy {
1283
+ protected column: ClrDatagridColumn;
1284
+ protected commonStrings: ClrCommonStringsService;
1285
+ private columnActions;
1286
+ private columnPopover;
1287
+ private changeDetectorRef;
1288
+ private injector;
1289
+ private filters;
1290
+ protected readonly ClrDatagridSortOrder: typeof ClrDatagridSortOrder;
1291
+ private _keepFilterInHeader;
1292
+ private _menuPopoverContent;
1293
+ private trigger;
1294
+ private subs;
1295
+ private projectedItemsSubscription;
1296
+ private readonly columnActionsFocusHandler;
1297
+ constructor(column: ClrDatagridColumn, commonStrings: ClrCommonStringsService, columnActions: ColumnActionsService, columnPopover: ClrPopoverService, changeDetectorRef: ChangeDetectorRef, injector: Injector, filters: FiltersProvider, parent: ClrDropdown, popoverService: ClrPopoverService, focusHandler: DropdownFocusHandler, dropdownService: RootDropdownService);
1298
+ /**
1299
+ * Keeps the filter's own toggle in the column header instead of moving it into this menu, and the
1300
+ * menu drops its filter action in exchange - a column offers one way to reach its filter at a
1301
+ * time, never two.
1302
+ */
1303
+ get keepFilterInHeader(): boolean;
1304
+ set keepFilterInHeader(value: boolean);
1305
+ /**
1306
+ * The menu is a live view of the column, so the label has to be read at render time rather than
1307
+ * cached - the column title can change, and so can the sort state it reports.
1308
+ */
1309
+ protected get triggerLabel(): string;
1310
+ protected get sortOrder(): ClrDatagridSortOrder;
1311
+ protected get canClearSort(): boolean;
1312
+ protected get hasFilter(): boolean;
1313
+ /**
1314
+ * Hiding the filter toggle also hides the only sign that a column is filtered, so the trigger and
1315
+ * the filter action carry that state instead.
1316
+ */
1317
+ protected get filterActive(): boolean;
1318
+ /**
1319
+ * Whether the filter this menu opens is open, for the filter action to report the same way the
1320
+ * toggle it replaced did. Read from the column's popover service rather than from the filter,
1321
+ * because that service is what the action opens.
1322
+ */
1323
+ protected get filterOpen(): boolean;
1324
+ /**
1325
+ * The popover the filter action opens, so it can point at what it controls - again the same thing
1326
+ * the replaced toggle pointed at.
1327
+ */
1328
+ protected get filterPopoverId(): string | null;
1329
+ /**
1330
+ * The items projected into the menu. The menu's own content query cannot see them, so they are
1331
+ * handed to the focus handler from here.
1332
+ *
1333
+ * Only direct children are queried, not descendants: a nested `clr-dropdown` is one item here - its
1334
+ * focus handler - and the items inside it belong to its own menu, not to this one.
1335
+ */
1336
+ private set projectedItems(value);
1337
+ private set menuPopoverContent(value);
1338
+ ngAfterViewInit(): void;
1339
+ ngOnDestroy(): void;
1340
+ /**
1341
+ * Returns focus to the trigger before closing, the same order `clrDropdownItem` uses - moving focus
1342
+ * first means it lands correctly even when the action opens a modal.
1343
+ */
1344
+ closeMenu(): void;
1345
+ /**
1346
+ * Re-anchors the open menu to the trigger, for an action that moves the column it belongs to
1347
+ * instead of closing the menu behind it.
1348
+ *
1349
+ * Deferred to after the next render rather than run straight away, because the action that asked
1350
+ * for this has only just been clicked - the column is relocated by the change detection that
1351
+ * follows, so measuring the trigger now would re-anchor the menu to where it already is.
1352
+ */
1353
+ repositionMenu(): void;
1354
+ /**
1355
+ * Moves focus to one of the projected actions, keeping the menu's keyboard handling in step with
1356
+ * it.
1357
+ *
1358
+ * Called by `clrDgColumnAction` when the item takes focus, so that focusing an item by any means -
1359
+ * including a plain `focus()` from outside, after an action rebuilt the menu - leaves space and
1360
+ * enter acting on that same item rather than on whatever the menu focused when it opened.
1361
+ */
1362
+ focusAction(item: FocusableItem): void;
1363
+ /**
1364
+ * The menu states a direction rather than cycling through them, so asking for the direction the
1365
+ * column already has is a no-op.
1366
+ *
1367
+ * The guard is needed because `Sort.toggle()` reads `forceReverse: false` as "toggle" rather than
1368
+ * "ascending" - `forceReverse || !this._reverse` falls through to the toggle for a falsy value - so
1369
+ * `sort(false)` on an already ascending column would flip it to descending. The tri-state title
1370
+ * button never hits that path, because it always calls `sort()` without an argument.
1371
+ */
1372
+ protected sort(descending: boolean): void;
1373
+ /**
1374
+ * Pins or unpins the column, then re-anchors this menu to the trigger.
1375
+ *
1376
+ * Pinning moves the column between the datagrid's static and scrollable containers, and the
1377
+ * trigger this menu is anchored to travels with it - far enough that the menu would otherwise be
1378
+ * left hanging next to where the column used to be. The menu stays open on purpose, so the action
1379
+ * it now offers is the one that undoes the pin the user just applied.
1380
+ *
1381
+ * The columns are relocated on the render cycle the pinned state change schedules, not while this
1382
+ * runs, so the overlay can only be re-anchored once that has happened - which `repositionMenu`
1383
+ * takes care of.
1384
+ */
1385
+ protected togglePinned(): void;
1386
+ /**
1387
+ * Opens the filter of this column, anchored to the "Filter Column" menu item itself (`#trigger`
1388
+ * above), so the popover positions off the item that was actually clicked rather than the kebab.
1389
+ *
1390
+ * The popover is driven through the column's ClrPopoverService rather than through
1391
+ * `ClrDatagridFilter.open`, because that is the one thing every filter flavour has in common - a
1392
+ * projected clr-dg-filter, and the string and numeric filters the column builds for clrDgField,
1393
+ * all share this service. Setting `origin` is all it takes to re-anchor it: `clrPopoverOrigin` is
1394
+ * itself only an assignment to that property, and with the toggle gone nothing else claims it.
1395
+ *
1396
+ * `parent` links the filter's popover to this menu's, so that scrolling while both are open closes
1397
+ * or repositions them together rather than leaving one behind. It is cleared again once the filter
1398
+ * closes, in the `openChange` subscription below, so it never outlives the menu session that set it.
1399
+ */
1400
+ protected openFilter(event: Event): void;
1401
+ static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridColumnActions, [null, null, null, { skipSelf: true; }, null, null, { optional: true; }, { optional: true; skipSelf: true; }, null, null, null]>;
1402
+ static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridColumnActions, "clr-dg-column-actions", never, { "keepFilterInHeader": { "alias": "clrDgKeepFilterInHeader"; "required": false; }; }, {}, ["projectedItems"], ["*"], false, never>;
1403
+ static ngAcceptInputType_keepFilterInHeader: unknown;
1404
+ }
1405
+
1406
+ /**
1407
+ * An application provided item in a `clr-dg-column-actions` menu. It is the dropdown item - same
1408
+ * inputs, styling and arrow key order - with what a column action needs on top: it closes the menu
1409
+ * when picked, or re-anchors it after an action that leaves it open.
1410
+ */
1411
+ declare class ClrDatagridColumnAction extends ClrDropdownItem {
1412
+ private columnActions;
1413
+ /**
1414
+ * Whether activating this item should close the menu.
1415
+ */
1416
+ canClosePopover: boolean;
1417
+ constructor(columnActions: ClrDatagridColumnActions, item: FocusableItem, dropdownService: RootDropdownService, el: ElementRef, renderer: Renderer2);
1418
+ protected onColumnActionClick(): void;
1419
+ /**
1420
+ * Focus can arrive from anywhere - the arrow keys, or a plain `focus()` from an application that
1421
+ * moved the column this action belongs to and rebuilt the menu. Reporting it keeps space and enter
1422
+ * acting on this item rather than on whatever the menu focused when it opened.
1423
+ */
1424
+ protected onFocus(): void;
1425
+ static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridColumnAction, never>;
1426
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ClrDatagridColumnAction, "[clrDgColumnAction]", never, { "canClosePopover": { "alias": "clrCanClosePopover"; "required": false; }; }, {}, never, never, false, never>;
1427
+ static ngAcceptInputType_canClosePopover: unknown;
1428
+ }
1429
+
1155
1430
  declare class ClrDatagridColumnToggle implements OnDestroy {
1156
1431
  commonStrings: ClrCommonStringsService;
1157
1432
  private columnsService;
@@ -1339,6 +1614,7 @@ declare class ClrDatagridFilter<T = any> extends DatagridFilterRegistrar<T, ClrD
1339
1614
  commonStrings: ClrCommonStringsService;
1340
1615
  private popoverService;
1341
1616
  private keyNavigation;
1617
+ protected columnActions: ColumnActionsService;
1342
1618
  openChange: EventEmitter<boolean>;
1343
1619
  ariaExpanded: boolean;
1344
1620
  popoverId: string;
@@ -1346,7 +1622,7 @@ declare class ClrDatagridFilter<T = any> extends DatagridFilterRegistrar<T, ClrD
1346
1622
  popoverType: ClrPopoverType;
1347
1623
  anchor: ElementRef<HTMLButtonElement>;
1348
1624
  private subs;
1349
- constructor(_filters: FiltersProvider<T>, commonStrings: ClrCommonStringsService, popoverService: ClrPopoverService, keyNavigation: KeyNavigationGridController);
1625
+ constructor(_filters: FiltersProvider<T>, commonStrings: ClrCommonStringsService, popoverService: ClrPopoverService, keyNavigation: KeyNavigationGridController, columnActions: ColumnActionsService);
1350
1626
  get open(): boolean;
1351
1627
  set open(open: boolean);
1352
1628
  set customFilter(filter: ClrDatagridFilterInterface<T> | RegisteredFilter<T, ClrDatagridFilterInterface<T>>);
@@ -1355,7 +1631,7 @@ declare class ClrDatagridFilter<T = any> extends DatagridFilterRegistrar<T, ClrD
1355
1631
  */
1356
1632
  get active(): boolean;
1357
1633
  ngOnDestroy(): void;
1358
- static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridFilter<any>, [null, null, null, { optional: true; }]>;
1634
+ static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridFilter<any>, [null, null, null, { optional: true; }, { optional: true; }]>;
1359
1635
  static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridFilter<any>, "clr-dg-filter", never, { "open": { "alias": "clrDgFilterOpen"; "required": false; }; "customFilter": { "alias": "clrDgFilter"; "required": false; }; }, { "openChange": "clrDgFilterOpenChange"; }, never, ["*"], false, never>;
1360
1636
  static ngAcceptInputType_open: unknown;
1361
1637
  }
@@ -1929,9 +2205,9 @@ declare const CLR_DATAGRID_DIRECTIVES: Type<any>[];
1929
2205
  declare class ClrDatagridModule {
1930
2206
  constructor();
1931
2207
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridModule, never>;
1932
- static ɵmod: i0.ɵɵNgModuleDeclaration<ClrDatagridModule, [typeof ClrDatagrid, typeof ClrDatagridActionBar, typeof ClrDatagridActionOverflow, typeof ClrDatagridCell, typeof ClrDatagridColumn, typeof ClrDatagridColumnSeparator, typeof ClrDatagridDetail, typeof ClrDatagridDetailBody, typeof ClrDatagridDetailHeader, typeof ClrDatagridFilter, typeof ClrDatagridFooter, typeof ClrDatagridHideableColumn, typeof ClrDatagridItems, typeof ClrDatagridPageSize, typeof ClrDatagridPagination, typeof ClrDatagridPlaceholder, typeof ClrDatagridRow, typeof ClrDatagridRowDetail, typeof ClrDatagridSelectionCellDirective, typeof ClrDatagridVirtualScrollDirective, typeof ClrIfDetail, typeof DatagridDetailRegisterer, typeof WrappedCell, typeof WrappedColumn, typeof WrappedRow, typeof DatagridCellRenderer, typeof DatagridHeaderRenderer, typeof DatagridMainRenderer, typeof DatagridRowDetailRenderer, typeof DatagridRowRenderer, typeof ActionableOompaLoompa, typeof DatagridWillyWonka, typeof ExpandableOompaLoompa, typeof DatagridNumericFilter, typeof DatagridStringFilter, typeof ClrDatagridColumnToggle, typeof ClrDatagridColumnToggleButton], [typeof i38.CommonModule, typeof i39.CdkDragModule, typeof i39.CdkTrapFocusModule, typeof i40.ClrIcon, typeof i41.ClrInputModule, typeof i42.ClrRadioModule, typeof i43.ClrCheckboxModule, typeof i44.ClrNumberInputModule, typeof i45.ClrSelectModule, typeof i46.FormsModule, typeof i39.ClrLoadingModule, typeof i39.ClrConditionalModule, typeof i39.ClrOutsideClickModule, typeof i39.ClrExpandableAnimationModule, typeof i47.ClrSpinnerModule, typeof i1.ClrPopoverModuleNext, typeof i39.ClrKeyFocusModule, typeof ClrDatagridSingleSelectionValueAccessor, typeof i39.ClrIfExpanded], [typeof ClrDatagrid, typeof ClrDatagridActionBar, typeof ClrDatagridActionOverflow, typeof ClrDatagridCell, typeof ClrDatagridColumn, typeof ClrDatagridColumnSeparator, typeof ClrDatagridDetail, typeof ClrDatagridDetailBody, typeof ClrDatagridDetailHeader, typeof ClrDatagridFilter, typeof ClrDatagridFooter, typeof ClrDatagridHideableColumn, typeof ClrDatagridItems, typeof ClrDatagridPageSize, typeof ClrDatagridPagination, typeof ClrDatagridPlaceholder, typeof ClrDatagridRow, typeof ClrDatagridRowDetail, typeof ClrDatagridSelectionCellDirective, typeof ClrDatagridVirtualScrollDirective, typeof ClrIfDetail, typeof DatagridDetailRegisterer, typeof WrappedCell, typeof WrappedColumn, typeof WrappedRow, typeof DatagridCellRenderer, typeof DatagridHeaderRenderer, typeof DatagridMainRenderer, typeof DatagridRowDetailRenderer, typeof DatagridRowRenderer, typeof ActionableOompaLoompa, typeof DatagridWillyWonka, typeof ExpandableOompaLoompa, typeof DatagridNumericFilter, typeof DatagridStringFilter, typeof ClrDatagridSingleSelectionValueAccessor, typeof i39.ClrIfExpanded]>;
2208
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ClrDatagridModule, [typeof ClrDatagrid, typeof ClrDatagridActionBar, typeof ClrDatagridActionOverflow, typeof ClrDatagridCell, typeof ClrDatagridColumn, typeof ClrDatagridColumnAction, typeof ClrDatagridColumnActions, typeof ClrDatagridColumnSeparator, typeof ClrDatagridDetail, typeof ClrDatagridDetailBody, typeof ClrDatagridDetailHeader, typeof ClrDatagridFilter, typeof ClrDatagridFooter, typeof ClrDatagridHideableColumn, typeof ClrDatagridItems, typeof ClrDatagridPageSize, typeof ClrDatagridPagination, typeof ClrDatagridPlaceholder, typeof ClrDatagridRow, typeof ClrDatagridRowDetail, typeof ClrDatagridSelectionCellDirective, typeof ClrDatagridVirtualScrollDirective, typeof ClrIfDetail, typeof DatagridDetailRegisterer, typeof WrappedCell, typeof WrappedColumn, typeof WrappedRow, typeof DatagridCellRenderer, typeof DatagridHeaderRenderer, typeof DatagridMainRenderer, typeof DatagridRowDetailRenderer, typeof DatagridRowRenderer, typeof ActionableOompaLoompa, typeof DatagridWillyWonka, typeof ExpandableOompaLoompa, typeof DatagridNumericFilter, typeof DatagridStringFilter, typeof ClrDatagridColumnToggle, typeof ClrDatagridColumnToggleButton], [typeof i40.CommonModule, typeof i41.CdkDragModule, typeof i41.CdkTrapFocusModule, typeof i42.ClrIcon, typeof i43.ClrInputModule, typeof i44.ClrRadioModule, typeof i45.ClrCheckboxModule, typeof i46.ClrNumberInputModule, typeof i47.ClrSelectModule, typeof i48.FormsModule, typeof i41.ClrLoadingModule, typeof i41.ClrConditionalModule, typeof i41.ClrOutsideClickModule, typeof i41.ClrExpandableAnimationModule, typeof i49.ClrSpinnerModule, typeof i1.ClrPopoverModuleNext, typeof i51.ClrDropdownModule, typeof i41.ClrKeyFocusModule, typeof ClrDatagridSingleSelectionValueAccessor, typeof i41.ClrIfExpanded], [typeof ClrDatagrid, typeof ClrDatagridActionBar, typeof ClrDatagridActionOverflow, typeof ClrDatagridCell, typeof ClrDatagridColumn, typeof ClrDatagridColumnAction, typeof ClrDatagridColumnActions, typeof ClrDatagridColumnSeparator, typeof ClrDatagridDetail, typeof ClrDatagridDetailBody, typeof ClrDatagridDetailHeader, typeof ClrDatagridFilter, typeof ClrDatagridFooter, typeof ClrDatagridHideableColumn, typeof ClrDatagridItems, typeof ClrDatagridPageSize, typeof ClrDatagridPagination, typeof ClrDatagridPlaceholder, typeof ClrDatagridRow, typeof ClrDatagridRowDetail, typeof ClrDatagridSelectionCellDirective, typeof ClrDatagridVirtualScrollDirective, typeof ClrIfDetail, typeof DatagridDetailRegisterer, typeof WrappedCell, typeof WrappedColumn, typeof WrappedRow, typeof DatagridCellRenderer, typeof DatagridHeaderRenderer, typeof DatagridMainRenderer, typeof DatagridRowDetailRenderer, typeof DatagridRowRenderer, typeof ActionableOompaLoompa, typeof DatagridWillyWonka, typeof ExpandableOompaLoompa, typeof DatagridNumericFilter, typeof DatagridStringFilter, typeof ClrDatagridSingleSelectionValueAccessor, typeof i41.ClrIfExpanded]>;
1933
2209
  static ɵinj: i0.ɵɵInjectorDeclaration<ClrDatagridModule>;
1934
2210
  }
1935
2211
 
1936
- export { ActionableOompaLoompa, CLR_DATAGRID_DIRECTIVES, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridAriaSortOrder, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSelectionCellDirective, ClrDatagridSingleSelectionValueAccessor, ClrDatagridSortOrder, ClrDatagridVirtualScrollDirective, ClrIfDetail, DatagridCellRenderer, DatagridDetailRegisterer, DatagridHeaderRenderer, DatagridMainRenderer, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridRowDetailRenderer, DatagridRowRenderer, DatagridStringFilter, DatagridWillyWonka, ExpandableOompaLoompa, Selection, SelectionType, WrappedCell, WrappedColumn, WrappedRow, selectionTypeAttribute };
2212
+ export { ActionableOompaLoompa, CLR_DATAGRID_DIRECTIVES, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridAriaSortOrder, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnAction, ClrDatagridColumnActions, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSelectionCellDirective, ClrDatagridSingleSelectionValueAccessor, ClrDatagridSortOrder, ClrDatagridVirtualScrollDirective, ClrIfDetail, DatagridCellRenderer, DatagridDetailRegisterer, DatagridHeaderRenderer, DatagridMainRenderer, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridRowDetailRenderer, DatagridRowRenderer, DatagridStringFilter, DatagridWillyWonka, ExpandableOompaLoompa, Selection, SelectionType, WrappedCell, WrappedColumn, WrappedRow, selectionTypeAttribute };
1937
2213
  export type { ClrDatagridComparatorInterface, ClrDatagridFilterInterface, ClrDatagridItemsIdentityFunction, ClrDatagridNumericFilterInterface, ClrDatagridStateInterface, ClrDatagridStringFilterInterface, ClrDatagridVirtualScrollRangeInterface };