@clr/angular 18.2.2 → 18.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "@angular/cdk": ">= 21.1.0",
26
26
  "@angular/common": ">= 21.1.0",
27
27
  "@angular/core": ">= 21.1.0",
28
- "@clr/ui": "18.2.2"
28
+ "@clr/ui": "18.3.0"
29
29
  },
30
30
  "module": "fesm2022/clr-angular.mjs",
31
31
  "typings": "types/clr-angular.d.ts",
@@ -231,5 +231,5 @@
231
231
  "dependencies": {
232
232
  "tslib": "^2.3.0"
233
233
  },
234
- "version": "18.2.2"
234
+ "version": "18.3.0"
235
235
  }
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnDestroy, OnInit, OnChanges, EventEmitter, ElementRef, ViewContainerRef, ChangeDetectorRef, SimpleChanges, DoCheck, TemplateRef, IterableDiffers, TrackByFunction, QueryList, AfterContentInit, AfterViewInit, Renderer2, NgZone, EnvironmentInjector, EmbeddedViewRef, AfterViewChecked, Type } 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
3
  import * as i39 from '@clr/angular/utils';
4
4
  import { ClrCommonStringsService, IfExpandService, ClrLoadingState, ClrExpandableAnimationDirective, DomAdapter, WillyWonka, OompaLoompa } from '@clr/angular/utils';
5
- import { Observable, Subject, BehaviorSubject, ReplaySubject } from 'rxjs';
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';
@@ -43,6 +43,27 @@ declare enum ClrDatagridAriaSortOrder {
43
43
  DESC = "descending"
44
44
  }
45
45
 
46
+ declare enum DatagridColumnChanges {
47
+ WIDTH = 0,
48
+ HIDDEN = 1,
49
+ INITIALIZE = 2,
50
+ PINNED = 3
51
+ }
52
+
53
+ interface ColumnState {
54
+ columnIndex?: number;
55
+ changes?: DatagridColumnChanges[];
56
+ width?: number;
57
+ strictWidth?: number;
58
+ hideable?: boolean;
59
+ hidden?: boolean;
60
+ pinned?: boolean;
61
+ titleTemplateRef?: TemplateRef<any>;
62
+ }
63
+ interface ColumnStateDiff extends ColumnState {
64
+ changes: DatagridColumnChanges[];
65
+ }
66
+
46
67
  interface ClrDatagridComparatorInterface<T> {
47
68
  compare(a: T, b: T): number;
48
69
  }
@@ -55,9 +76,33 @@ interface ClrDatagridFilterInterface<T, S = any> {
55
76
  equals?(other: ClrDatagridFilterInterface<T, any>): boolean;
56
77
  }
57
78
 
79
+ declare class ColumnsService {
80
+ columns: BehaviorSubject<ColumnState>[];
81
+ columnsStateChange: BehaviorSubject<ColumnState>;
82
+ private _cache;
83
+ get columnStates(): ColumnState[];
84
+ get hasHideableColumns(): boolean;
85
+ get visibleColumns(): ColumnState[];
86
+ get hasPinnedColumns(): boolean;
87
+ /**
88
+ * Tells whether the column at the given index is pinned (static). Columns and cells are
89
+ * matched by their declaration index, so this is what the header, the rows and a column aligned
90
+ * row detail use to decide which views belong in the static container.
91
+ */
92
+ isPinned(columnIndex: number): boolean;
93
+ cache(): void;
94
+ hasCache(): boolean;
95
+ resetToLastCache(): void;
96
+ emitStateChangeAt(columnIndex: number, diff: ColumnStateDiff): void;
97
+ emitStateChange(column: BehaviorSubject<ColumnState>, diff: ColumnStateDiff): void;
98
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnsService, never>;
99
+ static ɵprov: i0.ɵɵInjectableDeclaration<ColumnsService>;
100
+ }
101
+
58
102
  declare class DetailService {
59
103
  private readonly modalStackService;
60
104
  id: string;
105
+ detailWidth: number;
61
106
  private preventScroll;
62
107
  private toggleState;
63
108
  private cache;
@@ -256,7 +301,9 @@ declare class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<T, ClrD
256
301
  private vcr;
257
302
  private detailService;
258
303
  private changeDetectorRef;
259
- private commonStrings;
304
+ protected commonStrings: ClrCommonStringsService;
305
+ private columnsService;
306
+ private columnState;
260
307
  filterStringPlaceholder: string;
261
308
  filterNumberMaxPlaceholder: string;
262
309
  filterNumberMinPlaceholder: string;
@@ -286,10 +333,24 @@ declare class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<T, ClrD
286
333
  */
287
334
  private subscriptions;
288
335
  private _showSeparator;
289
- constructor(el: ElementRef<HTMLElement>, _sort: Sort<T>, filters: FiltersProvider<T>, vcr: ViewContainerRef, detailService: DetailService, changeDetectorRef: ChangeDetectorRef, commonStrings: ClrCommonStringsService);
336
+ private _pinned;
337
+ constructor(el: ElementRef<HTMLElement>, _sort: Sort<T>, filters: FiltersProvider<T>, vcr: ViewContainerRef, detailService: DetailService, changeDetectorRef: ChangeDetectorRef, commonStrings: ClrCommonStringsService, columnsService: ColumnsService, columnState: BehaviorSubject<ColumnState>);
290
338
  get isHidden(): boolean;
339
+ /**
340
+ * Whether the column is currently rendered as pinned. This can differ from the `pinned` input
341
+ * while the detail pane is open, because pinning is suspended for as long as it shows a single
342
+ * column.
343
+ */
344
+ get isPinned(): boolean;
291
345
  get showSeparator(): boolean;
292
346
  set showSeparator(value: boolean);
347
+ /**
348
+ * Pins the column to the left of the datagrid, so it stays visible while the remaining
349
+ * columns are scrolled horizontally. Pinned columns keep their declaration order and are
350
+ * rendered before the scrollable ones, right after the built-in row controls.
351
+ */
352
+ get pinned(): boolean;
353
+ set pinned(value: boolean);
293
354
  get colType(): "string" | "number";
294
355
  set colType(value: 'string' | 'number');
295
356
  get field(): string;
@@ -329,8 +390,9 @@ declare class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<T, ClrD
329
390
  private setFilterToggleAriaLabel;
330
391
  private listenForSortingChanges;
331
392
  private setupDefaultFilter;
332
- static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridColumn<any>, never>;
333
- 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; }; "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: {}; }]>;
393
+ 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: {}; }]>;
395
+ static ngAcceptInputType_pinned: unknown;
334
396
  }
335
397
 
336
398
  type ClrDatagridItemsIdentityFunction<T> = (item: T) => any;
@@ -663,6 +725,7 @@ declare class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit
663
725
  el: ElementRef<HTMLElement>;
664
726
  commonStrings: ClrCommonStringsService;
665
727
  private items;
728
+ private columnsService;
666
729
  private document;
667
730
  selectedChanged: EventEmitter<boolean>;
668
731
  expandedChange: EventEmitter<boolean>;
@@ -692,6 +755,7 @@ declare class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit
692
755
  expandAnimation: ClrExpandableAnimationDirective;
693
756
  detailButton: ElementRef<HTMLButtonElement>;
694
757
  _stickyCells: ViewContainerRef;
758
+ _pinnedCells: ViewContainerRef;
695
759
  _scrollableCells: ViewContainerRef;
696
760
  _calculatedCells: ViewContainerRef;
697
761
  _fixedCellTemplate: TemplateRef<any>;
@@ -703,7 +767,7 @@ declare class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit
703
767
  private wrappedInjector;
704
768
  private subscriptions;
705
769
  private _selectable;
706
- 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, document: any);
770
+ 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);
707
771
  /**
708
772
  * Model of the row, to use for selection
709
773
  */
@@ -744,6 +808,13 @@ declare class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit
744
808
  * @deprecated related to clrDgRowSelection, which is deprecated
745
809
  */
746
810
  protected selectRow(selected: boolean, $event: any): void;
811
+ /**
812
+ * Projects the cells into the display containers. Cells of pinned columns go into their static
813
+ * container so they stay visible during horizontal scroll; the rest stay scrollable. Cells are
814
+ * matched with their column by declaration index, and iterating in that order keeps both groups
815
+ * aligned with the header.
816
+ */
817
+ private insertCellViews;
747
818
  private rangeSelect;
748
819
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridRow<any>, never>;
749
820
  static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridRow<any>, "clr-dg-row", never, { "detailDisabled": { "alias": "clrDgDetailDisabled"; "required": false; }; "detailHidden": { "alias": "clrDgDetailHidden"; "required": false; }; "skeletonLoading": { "alias": "clrDgSkeletonLoading"; "required": false; }; "item": { "alias": "clrDgItem"; "required": false; }; "clrDgSelectable": { "alias": "clrDgSelectable"; "required": false; }; "selected": { "alias": "clrDgSelected"; "required": false; }; "expanded": { "alias": "clrDgExpanded"; "required": false; }; "clrDgDetailOpenLabel": { "alias": "clrDgDetailOpenLabel"; "required": false; }; "clrDgDetailCloseLabel": { "alias": "clrDgDetailCloseLabel"; "required": false; }; "clrDgRowSelectionLabel": { "alias": "clrDgRowSelectionLabel"; "required": false; }; }, { "selectedChanged": "clrDgSelectedChange"; "expandedChange": "clrDgExpandedChange"; }, ["dgCells"], ["clr-dg-action-overflow", "clr-dg-cell", "clr-dg-row-detail"], false, never>;
@@ -902,6 +973,7 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
902
973
  commonStrings: ClrCommonStringsService;
903
974
  keyNavigation: KeyNavigationGridController;
904
975
  private zone;
976
+ private columnsService;
905
977
  loadingMoreItems: boolean;
906
978
  clrDgSingleSelectionAriaLabel: string;
907
979
  clrDgSingleActionableAriaLabel: string;
@@ -947,6 +1019,7 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
947
1019
  rowsWrapper: ElementRef<HTMLElement>;
948
1020
  scrollableColumns: ViewContainerRef;
949
1021
  _projectedDisplayColumns: ViewContainerRef;
1022
+ _projectedStickyColumns: ViewContainerRef;
950
1023
  _projectedCalculationColumns: ViewContainerRef;
951
1024
  _displayedRows: ViewContainerRef;
952
1025
  _calculationRows: ViewContainerRef;
@@ -956,6 +1029,7 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
956
1029
  activeCellCoords: CellCoordinates;
957
1030
  SELECTION_TYPE: typeof SelectionType;
958
1031
  private selectAllCheckbox;
1032
+ private rowControls;
959
1033
  /**
960
1034
  * Subscriptions to all the services and queries changes
961
1035
  */
@@ -964,7 +1038,12 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
964
1038
  private cachedRowsHeight;
965
1039
  private cachedContentHeight;
966
1040
  private resizeObserver;
967
- constructor(organizer: DatagridRenderOrganizer, items: Items<T>, expandableRows: ExpandableRowsCount, selection: Selection<T>, rowActionService: RowActionService, stateProvider: StateProvider<T>, displayMode: DisplayModeService, renderer: Renderer2, detailService: DetailService, document: any, el: ElementRef<HTMLElement>, page: Page, commonStrings: ClrCommonStringsService, keyNavigation: KeyNavigationGridController, zone: NgZone);
1041
+ /**
1042
+ * Watches the row controls for anything that changes their width without going through a render
1043
+ * cycle - a density change, or an application restyling them.
1044
+ */
1045
+ private rowControlsObserver;
1046
+ constructor(organizer: DatagridRenderOrganizer, items: Items<T>, expandableRows: ExpandableRowsCount, selection: Selection<T>, rowActionService: RowActionService, stateProvider: StateProvider<T>, displayMode: DisplayModeService, renderer: Renderer2, detailService: DetailService, document: any, el: ElementRef<HTMLElement>, page: Page, commonStrings: ClrCommonStringsService, keyNavigation: KeyNavigationGridController, zone: NgZone, columnsService: ColumnsService);
968
1047
  /**
969
1048
  * Freezes the datagrid while data is loading
970
1049
  */
@@ -998,6 +1077,7 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
998
1077
  get allSelected(): boolean;
999
1078
  set allSelected(value: boolean);
1000
1079
  get virtualScroll(): ClrDatagridVirtualScrollDirective<any>;
1080
+ protected get isDetailOverlay(): boolean;
1001
1081
  ngAfterContentInit(): void;
1002
1082
  /**
1003
1083
  * Our setup happens in the view of some of our components, so we wait for it to be done before starting
@@ -1017,6 +1097,27 @@ declare class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, O
1017
1097
  */
1018
1098
  dataChanged(): void;
1019
1099
  private toggleVirtualScrollSubscriptions;
1100
+ /**
1101
+ * Publishes the width of the row controls - the static container holding the select, action and
1102
+ * caret cells - as a custom property, which is where the pinned columns read the offset they
1103
+ * became static at. They are static right after the controls rather than at the edge of the datagrid,
1104
+ * and `position: sticky` always measures its offsets from that edge, so the distance between the
1105
+ * two has to be measured and handed to the stylesheet.
1106
+ *
1107
+ * The header and the rows get their own value: the header renders one caret column for both
1108
+ * kinds of caret where a row renders one cell per caret, so the two containers are not
1109
+ * necessarily the same width.
1110
+ *
1111
+ * Nothing reads this property unless a column is pinned - `.datagrid-pinned-cells` is the only
1112
+ * consumer, and it is `display: none` while empty - so the measurement is skipped entirely
1113
+ * otherwise. It matters on a datagrid with many rows: `getBoundingClientRect()` forces the
1114
+ * browser to resolve any pending layout first, and on a large datagrid that resolution is not
1115
+ * cheap. Both boxes are read before either write for the same reason - writing the custom
1116
+ * property is itself layout-affecting (`.datagrid-pinned-cells` reads it back for its own
1117
+ * position and width), so reading again in between would force that resolution twice.
1118
+ */
1119
+ private updateRowControlsWidth;
1120
+ private setRowControlsWidth;
1020
1121
  private handleResizeChanges;
1021
1122
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagrid<any>, never>;
1022
1123
  static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagrid<any>, "clr-datagrid", never, { "loadingMoreItems": { "alias": "clrLoadingMoreItems"; "required": false; }; "clrDgSingleSelectionAriaLabel": { "alias": "clrDgSingleSelectionAriaLabel"; "required": false; }; "clrDgSingleActionableAriaLabel": { "alias": "clrDgSingleActionableAriaLabel"; "required": false; }; "clrDetailExpandableAriaLabel": { "alias": "clrDetailExpandableAriaLabel"; "required": false; }; "clrDgDisablePageFocus": { "alias": "clrDgDisablePageFocus"; "required": false; }; "customSelectAllEnabled": { "alias": "clrDgCustomSelectAllEnabled"; "required": false; }; "selectAllDisabled": { "alias": "clrDgSelectAllDisabled"; "required": false; }; "loading": { "alias": "clrDgLoading"; "required": false; }; "selectionType": { "alias": "clrDgSelectionType"; "required": false; }; "selected": { "alias": "clrDgSelected"; "required": false; }; "clrDgPreserveSelection": { "alias": "clrDgPreserveSelection"; "required": false; }; "rowSelectionMode": { "alias": "clrDgRowSelection"; "required": false; }; "identityFn": { "alias": "clrDgItemsIdentityFn"; "required": false; }; }, { "selectedChanged": "clrDgSelectedChange"; "refresh": "clrDgRefresh"; "customSelectAll": "clrDgCustomSelectAll"; }, ["iterator", "placeholder", "_virtualScroll", "columns", "rows"], ["clr-dg-action-bar", "clr-dg-placeholder", "clr-dg-footer", "[clrIfDetail],clr-dg-detail"], false, never>;
@@ -1051,41 +1152,6 @@ declare class ClrDatagridActionOverflow implements OnDestroy {
1051
1152
  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: {}; }]>;
1052
1153
  }
1053
1154
 
1054
- declare enum DatagridColumnChanges {
1055
- WIDTH = 0,
1056
- HIDDEN = 1,
1057
- INITIALIZE = 2
1058
- }
1059
-
1060
- interface ColumnState {
1061
- columnIndex?: number;
1062
- changes?: DatagridColumnChanges[];
1063
- width?: number;
1064
- strictWidth?: number;
1065
- hideable?: boolean;
1066
- hidden?: boolean;
1067
- titleTemplateRef?: TemplateRef<any>;
1068
- }
1069
- interface ColumnStateDiff extends ColumnState {
1070
- changes: DatagridColumnChanges[];
1071
- }
1072
-
1073
- declare class ColumnsService {
1074
- columns: BehaviorSubject<ColumnState>[];
1075
- columnsStateChange: BehaviorSubject<ColumnState>;
1076
- private _cache;
1077
- get columnStates(): ColumnState[];
1078
- get hasHideableColumns(): boolean;
1079
- get visibleColumns(): ColumnState[];
1080
- cache(): void;
1081
- hasCache(): boolean;
1082
- resetToLastCache(): void;
1083
- emitStateChangeAt(columnIndex: number, diff: ColumnStateDiff): void;
1084
- emitStateChange(column: BehaviorSubject<ColumnState>, diff: ColumnStateDiff): void;
1085
- static ɵfac: i0.ɵɵFactoryDeclaration<ColumnsService, never>;
1086
- static ɵprov: i0.ɵɵInjectableDeclaration<ColumnsService>;
1087
- }
1088
-
1089
1155
  declare class ClrDatagridColumnToggle implements OnDestroy {
1090
1156
  commonStrings: ClrCommonStringsService;
1091
1157
  private columnsService;
@@ -1208,11 +1274,15 @@ declare class ClrDatagridDetail {
1208
1274
  ariaLabel: string;
1209
1275
  header: ClrDatagridDetailHeader;
1210
1276
  constructor(detailService: DetailService, commonStrings: ClrCommonStringsService);
1277
+ get detailWidth(): number;
1278
+ set detailWidth(value: number | null | undefined);
1279
+ get isCustomWidth(): boolean;
1280
+ get width(): number | null;
1211
1281
  get labelledBy(): string;
1212
1282
  get label(): string;
1213
1283
  close(): void;
1214
1284
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridDetail, never>;
1215
- static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridDetail, "clr-dg-detail", never, { "ariaLabelledBy": { "alias": "clrDetailAriaLabelledBy"; "required": false; }; "ariaLabel": { "alias": "clrDetailAriaLabel"; "required": false; }; }, {}, ["header"], ["*"], false, never>;
1285
+ static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridDetail, "clr-dg-detail", never, { "ariaLabelledBy": { "alias": "clrDetailAriaLabelledBy"; "required": false; }; "ariaLabel": { "alias": "clrDetailAriaLabel"; "required": false; }; "detailWidth": { "alias": "clrDetailWidth"; "required": false; }; }, {}, ["header"], ["*"], false, never>;
1216
1286
  }
1217
1287
 
1218
1288
  declare class ClrDatagridDetailBody {
@@ -1320,24 +1390,46 @@ declare class ClrIfDetail implements OnInit, OnDestroy {
1320
1390
  * Generic bland container serving various purposes for Datagrid.
1321
1391
  * For instance, it can help span a text over multiple rows in detail view.
1322
1392
  */
1323
- declare class ClrDatagridRowDetail implements AfterContentInit, OnDestroy {
1393
+ declare class ClrDatagridRowDetail implements AfterContentInit, AfterViewInit, AfterViewChecked, OnDestroy {
1324
1394
  selection: Selection;
1325
1395
  rowActionService: RowActionService;
1326
1396
  expand: DatagridIfExpandService;
1327
1397
  expandableRows: ExpandableRowsCount;
1328
1398
  commonStrings: ClrCommonStringsService;
1399
+ private columnsService;
1400
+ private displayMode;
1329
1401
  _beginningOfExpandableContentAriaText: string;
1330
1402
  _endOfExpandableContentAriaText: string;
1331
1403
  replacedRow: boolean;
1404
+ /**
1405
+ * Whether the detail lays its cells out in the same columns as the row, which it does when it
1406
+ * holds one cell per column and at least one of those columns is pinned. The cells of the pinned
1407
+ * columns are then static alongside the ones in the row above.
1408
+ */
1409
+ columnAligned: boolean;
1332
1410
  SELECTION_TYPE: typeof SelectionType;
1333
1411
  cells: QueryList<ClrDatagridCell>;
1412
+ private _pinnedCells;
1413
+ private _scrollableCells;
1414
+ private _plainCells;
1334
1415
  private subscriptions;
1335
- constructor(selection: Selection, rowActionService: RowActionService, expand: DatagridIfExpandService, expandableRows: ExpandableRowsCount, commonStrings: ClrCommonStringsService);
1416
+ private cellsMoved;
1417
+ private lastLayout;
1418
+ private hadCells;
1419
+ constructor(selection: Selection, rowActionService: RowActionService, expand: DatagridIfExpandService, expandableRows: ExpandableRowsCount, commonStrings: ClrCommonStringsService, columnsService: ColumnsService, displayMode: DisplayModeService);
1336
1420
  set replace(value: boolean);
1337
1421
  get beginningOfExpandableContentAriaText(): string;
1338
1422
  get endOfExpandableContentAriaText(): string;
1339
1423
  ngAfterContentInit(): void;
1424
+ ngAfterViewInit(): void;
1425
+ ngAfterViewChecked(): void;
1340
1426
  ngOnDestroy(): void;
1427
+ /**
1428
+ * Moves the cells into the containers that lay them out in the same columns as the row, or back
1429
+ * out of them once that stops making sense.
1430
+ */
1431
+ private syncColumnAlignment;
1432
+ private moveCell;
1341
1433
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridRowDetail, never>;
1342
1434
  static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridRowDetail, "clr-dg-row-detail", never, { "_beginningOfExpandableContentAriaText": { "alias": "clrRowDetailBeginningAriaText"; "required": false; }; "_endOfExpandableContentAriaText": { "alias": "clrRowDetailEndAriaText"; "required": false; }; "replace": { "alias": "clrDgReplace"; "required": false; }; }, {}, ["cells"], ["*"], false, never>;
1343
1435
  }
@@ -1708,6 +1800,7 @@ declare class DatagridCellRenderer implements OnDestroy {
1708
1800
  resetState(state: ColumnState): void;
1709
1801
  setWidth(state: ColumnState): void;
1710
1802
  setHidden(state: ColumnState): void;
1803
+ setPinned(state: ColumnState): void;
1711
1804
  private clearWidth;
1712
1805
  static ɵfac: i0.ɵɵFactoryDeclaration<DatagridCellRenderer, never>;
1713
1806
  static ɵdir: i0.ɵɵDirectiveDeclaration<DatagridCellRenderer, "clr-dg-cell", never, {}, {}, never, never, false, never>;
@@ -1733,6 +1826,7 @@ declare class DatagridHeaderRenderer implements OnDestroy {
1733
1826
  setColumnState(index: number): void;
1734
1827
  setWidth(state: ColumnState): void;
1735
1828
  setHidden(state: ColumnState): void;
1829
+ setPinned(state: ColumnState): void;
1736
1830
  private clearWidth;
1737
1831
  private detectStrictWidth;
1738
1832
  private computeWidth;
@@ -47,14 +47,17 @@ declare class ClrCheckboxContainer extends ClrAbstractContainer implements After
47
47
  protected controlClassService: ControlClassService;
48
48
  protected ngControlService: NgControlService;
49
49
  role: string;
50
+ ariaLabelledBy: string;
50
51
  checkboxes: QueryList<ClrCheckbox>;
51
52
  private inline;
53
+ private _generatedId;
52
54
  constructor(layoutService: LayoutService, controlClassService: ControlClassService, ngControlService: NgControlService);
53
55
  get clrInline(): boolean | string;
54
56
  set clrInline(value: boolean | string);
55
57
  protected get allCheckboxesDisabled(): boolean;
56
58
  ngAfterContentInit(): void;
57
59
  private setAriaRoles;
60
+ private setAriaLabelledBy;
58
61
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrCheckboxContainer, [{ optional: true; }, null, null]>;
59
62
  static ɵcmp: i0.ɵɵComponentDeclaration<ClrCheckboxContainer, "clr-checkbox-container,clr-toggle-container", never, { "clrInline": { "alias": "clrInline"; "required": false; }; }, {}, ["checkboxes"], ["label", "clr-checkbox-wrapper,clr-toggle-wrapper", "clr-control-helper", "clr-control-error", "clr-control-success"], false, never>;
60
63
  }
@@ -27,7 +27,6 @@ declare class ClrRadioContainer extends ClrAbstractContainer implements AfterCon
27
27
  role: string;
28
28
  ariaLabelledBy: string;
29
29
  radios: QueryList<ClrRadio>;
30
- groupLabel: ElementRef<HTMLElement>;
31
30
  private inline;
32
31
  private _generatedId;
33
32
  constructor(layoutService: LayoutService, controlClassService: ControlClassService, ngControlService: NgControlService);
@@ -37,7 +36,7 @@ declare class ClrRadioContainer extends ClrAbstractContainer implements AfterCon
37
36
  private setAriaRoles;
38
37
  private setAriaLabelledBy;
39
38
  static ɵfac: i0.ɵɵFactoryDeclaration<ClrRadioContainer, [{ optional: true; }, null, null]>;
40
- static ɵcmp: i0.ɵɵComponentDeclaration<ClrRadioContainer, "clr-radio-container", never, { "clrInline": { "alias": "clrInline"; "required": false; }; }, {}, ["groupLabel", "radios"], ["label", "clr-radio-wrapper", "clr-control-helper", "clr-control-error", "clr-control-success"], false, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<ClrRadioContainer, "clr-radio-container", never, { "clrInline": { "alias": "clrInline"; "required": false; }; }, {}, ["radios"], ["label", "clr-radio-wrapper", "clr-control-helper", "clr-control-error", "clr-control-success"], false, never>;
41
40
  }
42
41
 
43
42
  declare class ClrRadioModule {
@@ -115,6 +115,14 @@ declare class ClarityIcons {
115
115
  * Returns a readonly reference of the icon registry.
116
116
  */
117
117
  static get registry(): Readonly<IconRegistry>;
118
+ /**
119
+ * Looks up a single icon shape by name without copying the entire registry.
120
+ *
121
+ * Prefer this over indexing into `registry` (e.g. `registry[name]`) in hot paths like icon
122
+ * rendering: `registry` spreads the whole (potentially large) registry into a new object on
123
+ * every access, which becomes expensive/memory-churning when many icons render or re-render.
124
+ */
125
+ static getIconShape(name: string): IconRegistrySources[string] | undefined;
118
126
  static addIcons(...shapes: IconShapeTuple[]): void;
119
127
  /**
120
128
  * @description