apex-grid 3.6.0 → 4.0.0-beta.2

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 (151) hide show
  1. package/CHANGELOG.md +301 -0
  2. package/LICENSE.md +2 -1
  3. package/README.md +117 -18
  4. package/components/cell.d.ts +13 -1
  5. package/components/cell.js +28 -13
  6. package/components/cell.js.map +1 -1
  7. package/components/grid.d.ts +175 -28
  8. package/components/grid.js +183 -63
  9. package/components/grid.js.map +1 -1
  10. package/components/header-row.d.ts +0 -6
  11. package/components/header-row.js +1 -19
  12. package/components/header-row.js.map +1 -1
  13. package/components/header.js +39 -2
  14. package/components/header.js.map +1 -1
  15. package/components/paginator.d.ts +20 -5
  16. package/components/paginator.js +54 -17
  17. package/components/paginator.js.map +1 -1
  18. package/components/row.js +149 -40
  19. package/components/row.js.map +1 -1
  20. package/components/toolbar.d.ts +5 -1
  21. package/components/toolbar.js +4 -1
  22. package/components/toolbar.js.map +1 -1
  23. package/components/virtualize-rows.d.ts +38 -0
  24. package/components/virtualize-rows.js +286 -0
  25. package/components/virtualize-rows.js.map +1 -0
  26. package/components/virtualizer.d.ts +71 -1
  27. package/components/virtualizer.js +105 -29
  28. package/components/virtualizer.js.map +1 -1
  29. package/controllers/dom.d.ts +10 -3
  30. package/controllers/dom.js +5 -5
  31. package/controllers/dom.js.map +1 -1
  32. package/controllers/navigation.d.ts +63 -0
  33. package/controllers/navigation.js +295 -21
  34. package/controllers/navigation.js.map +1 -1
  35. package/controllers/pagination.d.ts +7 -6
  36. package/controllers/pagination.js +27 -28
  37. package/controllers/pagination.js.map +1 -1
  38. package/controllers/row-pin.d.ts +6 -0
  39. package/controllers/row-pin.js +8 -2
  40. package/controllers/row-pin.js.map +1 -1
  41. package/controllers/row-reorder.d.ts +12 -4
  42. package/controllers/row-reorder.js +20 -6
  43. package/controllers/row-reorder.js.map +1 -1
  44. package/controllers/selection.d.ts +32 -10
  45. package/controllers/selection.js +33 -10
  46. package/controllers/selection.js.map +1 -1
  47. package/controllers/sort.js +2 -3
  48. package/controllers/sort.js.map +1 -1
  49. package/controllers/state.d.ts +18 -5
  50. package/controllers/state.js +53 -46
  51. package/controllers/state.js.map +1 -1
  52. package/custom-elements.json +1762 -339
  53. package/docs/assets/hierarchy.js +1 -1
  54. package/docs/assets/search.js +1 -1
  55. package/docs/classes/ApexGrid.html +166 -66
  56. package/docs/classes/ApexGridPaginator.html +39 -8
  57. package/docs/classes/ApexGridToolbar.html +9 -5
  58. package/docs/functions/localize.html +2 -2
  59. package/docs/hierarchy.html +1 -1
  60. package/docs/index.html +123 -20
  61. package/docs/interfaces/ApexPageChangedEvent.html +3 -1
  62. package/docs/interfaces/BaseApexCellContext.html +18 -5
  63. package/docs/interfaces/BaseApexEditorContext.html +20 -5
  64. package/docs/interfaces/BaseFilterExpression.html +1 -1
  65. package/docs/interfaces/CSVExportOptions.html +1 -1
  66. package/docs/interfaces/DataPipelineConfiguration.html +4 -9
  67. package/docs/interfaces/ExportOptions.html +1 -1
  68. package/docs/interfaces/GridSelectionConfiguration.html +19 -4
  69. package/docs/interfaces/PaginationConfiguration.html +11 -4
  70. package/docs/interfaces/PaginationState.html +4 -2
  71. package/docs/media/_token-values.scss +42 -16
  72. package/docs/media/package.json +12 -4
  73. package/docs/types/DataPipelineParams.html +2 -2
  74. package/docs/types/PaginationMode.html +5 -4
  75. package/docs/variables/EN_LOCALE.html +2 -2
  76. package/i18n/en.d.ts +2 -0
  77. package/i18n/en.js +2 -0
  78. package/i18n/en.js.map +1 -1
  79. package/i18n/es.js +2 -0
  80. package/i18n/es.js.map +1 -1
  81. package/ignite-ui.d.ts +1 -0
  82. package/ignite-ui.js +4 -0
  83. package/ignite-ui.js.map +1 -0
  84. package/internal/column-types.d.ts +11 -1
  85. package/internal/column-types.js +8 -6
  86. package/internal/column-types.js.map +1 -1
  87. package/internal/design-system.d.ts +32 -0
  88. package/internal/design-system.js +66 -0
  89. package/internal/design-system.js.map +1 -0
  90. package/internal/export.d.ts +6 -0
  91. package/internal/export.js +4 -0
  92. package/internal/export.js.map +1 -1
  93. package/internal/feature-module.d.ts +7 -0
  94. package/internal/feature-module.js.map +1 -1
  95. package/internal/flip.d.ts +28 -16
  96. package/internal/flip.js +42 -10
  97. package/internal/flip.js.map +1 -1
  98. package/internal/icons.d.ts +2 -16
  99. package/internal/icons.js +0 -8
  100. package/internal/icons.js.map +1 -1
  101. package/internal/ignite-ui.d.ts +10 -0
  102. package/internal/ignite-ui.js +118 -0
  103. package/internal/ignite-ui.js.map +1 -0
  104. package/internal/index.d.ts +4 -2
  105. package/internal/index.js +3 -2
  106. package/internal/index.js.map +1 -1
  107. package/internal/types.d.ts +75 -19
  108. package/internal/types.js.map +1 -1
  109. package/operations/filter/types.d.ts +1 -1
  110. package/operations/filter/types.js.map +1 -1
  111. package/package.json +7 -2
  112. package/styles/_token-blocks.css.d.ts +1 -0
  113. package/styles/_token-blocks.css.js +3 -0
  114. package/styles/_token-blocks.css.js.map +1 -0
  115. package/styles/_tokens.css.js +1 -1
  116. package/styles/_tokens.css.js.map +1 -1
  117. package/styles/body-cell/body-cell.css.js +1 -1
  118. package/styles/body-cell/body-cell.css.js.map +1 -1
  119. package/styles/body-cell/cell-renderers.css.js +1 -1
  120. package/styles/body-cell/cell-renderers.css.js.map +1 -1
  121. package/styles/body-row/body-row.css.js +1 -1
  122. package/styles/body-row/body-row.css.js.map +1 -1
  123. package/styles/document-tokens.css.js +1 -1
  124. package/styles/document-tokens.css.js.map +1 -1
  125. package/styles/grid/_grid.base.css.js +1 -1
  126. package/styles/grid/_grid.base.css.js.map +1 -1
  127. package/styles/grid/grid.css.js +1 -1
  128. package/styles/grid/grid.css.js.map +1 -1
  129. package/styles/group-header-row/group-header-row.css.js +1 -1
  130. package/styles/group-header-row/group-header-row.css.js.map +1 -1
  131. package/styles/header-cell/header-cell.css.js +1 -1
  132. package/styles/header-cell/header-cell.css.js.map +1 -1
  133. package/styles/header-row/header-row.base.css.js +1 -1
  134. package/styles/header-row/header-row.base.css.js.map +1 -1
  135. package/styles/ignite-ui/ignite-ui-dark.css.d.ts +1 -0
  136. package/styles/ignite-ui/ignite-ui-dark.css.js +3 -0
  137. package/styles/ignite-ui/ignite-ui-dark.css.js.map +1 -0
  138. package/styles/ignite-ui/ignite-ui-document.css.d.ts +1 -0
  139. package/styles/ignite-ui/ignite-ui-document.css.js +3 -0
  140. package/styles/ignite-ui/ignite-ui-document.css.js.map +1 -0
  141. package/styles/ignite-ui/ignite-ui.css.d.ts +1 -0
  142. package/styles/ignite-ui/ignite-ui.css.js +3 -0
  143. package/styles/ignite-ui/ignite-ui.css.js.map +1 -0
  144. package/styles/paginator/paginator.css.js +1 -1
  145. package/styles/paginator/paginator.css.js.map +1 -1
  146. package/styles/toolbar/toolbar.css.js +1 -1
  147. package/styles/toolbar/toolbar.css.js.map +1 -1
  148. package/tokens.css +14 -15
  149. package/operations/pagination.d.ts +0 -19
  150. package/operations/pagination.js +0 -12
  151. package/operations/pagination.js.map +0 -1
@@ -692,17 +692,19 @@ export interface ApexGridEventMap<T extends object> {
692
692
  *
693
693
  * The grid is styled out of the box through `--ag-*` CSS custom properties —
694
694
  * there is no theme to import and no `configureTheme()` call. Override `--ag-*`
695
- * tokens on the host (or any ancestor) to rebrand; where an Ignite UI palette is
696
- * present, the brand tokens auto-tint from it. For dark mode, set
697
- * the `theme="dark"` attribute on the host for the built-in slate dark palette
698
- * (further `--ag-*` overrides still compose on top). Add `tinted` (e.g.
699
- * `theme="tinted"` or `theme="dark tinted"`) to mix the brand into the chrome
700
- * so the grid wears its brand even at rest. See the README "Getting Started"
701
- * and "Theming" sections for the full example and token list.
695
+ * tokens on the host (or any ancestor) to rebrand; the family `--apx-*` tokens
696
+ * (`--apx-accent`, `--apx-fore`, `--apx-grid`, `--apx-surface`,
697
+ * `--apx-font-family`, `--apx-radius-factor`) apply where no `--ag-*` token is
698
+ * set. To follow an Ignite UI theme, import the `apex-grid/ignite-ui` add-on.
699
+ * For dark mode, set the `theme="dark"` attribute on the host for the built-in
700
+ * slate dark palette (further `--ag-*` overrides still compose on top). Add
701
+ * `tinted` (e.g. `theme="tinted"` or `theme="dark tinted"`) to mix the brand
702
+ * into the chrome so the grid wears its brand even at rest. See the README
703
+ * "Getting Started" and "Theming" sections for the full example and token list.
702
704
  *
703
705
  * @element apex-grid
704
706
  *
705
- * @attr {string} theme - Space-separated theme flags. `dark` opts into the built-in dark palette; `tinted` mixes `--ag-brand` into the chrome surfaces. Combine as `theme="dark tinted"`.
707
+ * @attr {string} theme - Space-separated theme flags. `dark` opts into the built-in dark palette; `tinted` mixes `--ag-brand` into the chrome surfaces. Combine as `theme="dark tinted"`. With the `apex-grid/ignite-ui` add-on a grid without `dark` or `light` follows the Ignite UI variant, and `light` keeps it light.
706
708
  *
707
709
  * @fires sorting - Emitted when sorting is initiated through the UI.
708
710
  * @fires sorted - Emitted when a sort operation initiated through the UI has completed.
@@ -727,9 +729,35 @@ export interface ApexGridEventMap<T extends object> {
727
729
  * @fires treeRowExpanding - Cancellable. Emitted before a tree-row expansion change (tree mode).
728
730
  * @fires treeRowExpanded - Emitted after a tree-row expansion change has been applied.
729
731
  *
732
+ * @csspart table - The element with the `grid` (or `treegrid`) role, `aria-rowcount` and `aria-colcount`: holds the header rows, pinned rows and body.
730
733
  * @csspart live-region - Visually-hidden ARIA live region used for screen-reader announcements.
734
+ * @csspart paginator-host - The `<apex-grid-paginator>` element; the grid re-exports its parts below.
735
+ * @csspart paginator - The paginator's root container.
736
+ * @csspart paginator-size - The page-size selector wrapper.
737
+ * @csspart paginator-info - The "1-25 of 100" summary.
738
+ * @csspart paginator-controls - The first/prev/next/last button cluster.
739
+ * @csspart paginator-page - The "page / count" label.
740
+ * @csspart paginator-button - Each of the first, previous, next and last buttons.
741
+ * @csspart paginator-first - The first page button.
742
+ * @csspart paginator-prev - The previous page button.
743
+ * @csspart paginator-next - The next page button.
744
+ * @csspart paginator-last - The last page button.
745
+ * @csspart toolbar-host - The `<apex-grid-toolbar>` element; the grid re-exports its parts below.
746
+ * @csspart toolbar - The toolbar's container.
747
+ * @csspart toolbar-search - The quick-filter input wrapper.
748
+ * @csspart search-field - The bordered field holding the search icon and input.
749
+ * @csspart search-icon - The leading search icon.
750
+ * @csspart search-input - The quick-filter input.
751
+ * @csspart toolbar-actions - The trailing actions area.
752
+ * @csspart toolbar-action - A host-contributed action button.
753
+ * @csspart export - The export menu wrapper.
754
+ * @csspart export-trigger - The export menu trigger button.
755
+ * @csspart export-icon - The download icon in the trigger.
756
+ * @csspart export-caret - The caret icon in the trigger.
757
+ * @csspart export-menu - The export dropdown menu.
758
+ * @csspart export-menu-item - An item in the export menu.
731
759
  *
732
- * @cssprop [--ag-brand] - Brand color for selection, focus rings, and accents. Auto-tints from `--ig-primary-500` where an Ignite UI palette is present.
760
+ * @cssprop [--ag-brand] - Brand color for selection, focus rings, and accents. Falls back to `--apx-accent`, then (with the `apex-grid/ignite-ui` add-on) the Ignite UI primary.
733
761
  * @cssprop [--ag-brand-strong] - Brand color for hover / pressed states.
734
762
  * @cssprop [--ag-grid-shadow] - Grid edge/shadow override. Default is a flat 1px hairline edge; set to `var(--ag-shadow-card)` (`var(--ag-dark-shadow-card)` on a dark grid) for the elevated card look, or `none` to remove it.
735
763
  * @cssprop [--ag-grid-bg] - Host card background. Defaults to a subtle light gradient; override with a flat color (or use `theme="dark"`) for dark themes.
@@ -755,8 +783,12 @@ export interface ApexGridEventMap<T extends object> {
755
783
  * @cssprop [--ag-dark-shadow-card] - Elevated card shadow for dark grids (see `--ag-grid-shadow`).
756
784
  * @cssprop [--ag-row-h] - Row height.
757
785
  * @cssprop [--ag-header-h] - Header height.
758
- * @cssprop [--ag-radius] - Outer card corner radius.
759
- * @cssprop [--ag-font] - Grid font family.
786
+ * @cssprop [--ag-radius] - Outer card corner radius. The radii (`--ag-radius`, `-sm`, `-xs`, not the pill) scale with `--apx-radius-factor` while it is set (single lengths only).
787
+ * @cssprop [--ag-font] - Grid font family. Falls back to `--apx-font-family`, then (with the `apex-grid/ignite-ui` add-on) the Ignite UI `--ig-font-family`.
788
+ * @cssprop [--ag-overlay] - Background of the enterprise popups (filter builder, set filter, AI panel, tool panel, status bar). Unset, each keeps its built-in colour; set it with `--ag-overlay-text`.
789
+ * @cssprop [--ag-overlay-text] - Text color of the enterprise popups; their lines, muted text and hover wash are mixed from the two.
790
+ * @cssprop [--ag-dark-overlay] - Popup background on dark grids.
791
+ * @cssprop [--ag-dark-overlay-text] - Popup text color on dark grids.
760
792
  * @cssprop [--ag-fs-cell] - Cell font size.
761
793
  *
762
794
  * @see {@link https://github.com/apexcharts/apex-grid/blob/main/packages/core/src/styles/_tokens.scss | _tokens.scss} for the complete `--ag-*` token list.
@@ -773,15 +805,23 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
773
805
  #private;
774
806
  static get tagName(): string;
775
807
  static styles: import("lit").CSSResult;
808
+ /**
809
+ * The `rowRecycling` every grid starts with: `true` unless the page global
810
+ * `__apexRowKeying` is `'item'`, which the test runner sets for its second
811
+ * suite run so every grid in it keeps record-keyed rows.
812
+ *
813
+ * @internal Test-only, for the suite-wide keying switch. Not public API.
814
+ */
815
+ static defaultRowRecycling: boolean;
776
816
  /**
777
817
  * Registers `<apex-grid>` and its internal dependencies with the custom-element
778
818
  * registry. Idempotent — safe to call more than once.
779
819
  *
780
820
  * @remarks
781
- * Registering the element is only step one of four required for a visible, styled
782
- * grid. You must also configure an Ignite UI theme + CSS, give the host a bounded
783
- * height, and avoid overriding `display` on the host. See the README
784
- * "Getting Started" section for the full setup.
821
+ * Registering the element is only step one of three required for a visible, styled
822
+ * grid. You must also give the host a bounded height and avoid overriding
823
+ * `display` on the host. See the README "Getting Started" section for the
824
+ * full setup.
785
825
  */
786
826
  static register(): void;
787
827
  protected stateController: StateController<T>;
@@ -977,6 +1017,33 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
977
1017
  * @attr column-separator
978
1018
  */
979
1019
  columnSeparator: boolean;
1020
+ /**
1021
+ * Reuses body row elements across records. On by default: a scroll, sort or
1022
+ * filter re-binds the rendered rows to the records now in view instead of
1023
+ * building rows for them, which makes jumps and sorts cheaper on large
1024
+ * grids. Set to `false` (or the `row-recycling="false"` attribute) to
1025
+ * restore record-keyed rows, where each row element stays with its record.
1026
+ * `undefined` or `null` (a framework prop that was set and then dropped)
1027
+ * restores the default, so only `false` opts out.
1028
+ *
1029
+ * @remarks
1030
+ * A row element (and its cells) shows another record after a scroll or a
1031
+ * sort, so cell and editor templates must derive everything they render
1032
+ * from their context on each render, and must not keep state in the
1033
+ * elements they create. `ctx.row` and `ctx.parent` are row and cell
1034
+ * elements that may show another record later: read `ctx.data` for the
1035
+ * record, and do not hold `ctx.row` or `ctx.parent` across an `await`. A
1036
+ * template that keeps element state wraps itself in
1037
+ * `keyed(ctx.data, html...)` so the state never shows on the wrong record
1038
+ * (it is rebuilt on every rebind). Turn recycling off for templates that
1039
+ * must keep element state across a sort or a move, such as some
1040
+ * third-party widgets.
1041
+ *
1042
+ * @attr row-recycling
1043
+ * @default true
1044
+ */
1045
+ get rowRecycling(): boolean;
1046
+ set rowRecycling(value: boolean);
980
1047
  /**
981
1048
  * Inline editing configuration for the grid.
982
1049
  *
@@ -997,13 +1064,14 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
997
1064
  * @remarks
998
1065
  * Selection is disabled by default. Set `enabled: true` and (optionally)
999
1066
  * `mode` (`'single' | 'multiple'`) and `showCheckboxColumn` to opt in.
1067
+ * `isRowSelectable` keeps chosen rows (a pinned total row) out of it.
1000
1068
  *
1001
1069
  * @example
1002
1070
  * ```ts
1003
1071
  * grid.selection = { enabled: true, mode: 'multiple', showCheckboxColumn: true };
1004
1072
  * ```
1005
1073
  */
1006
- selection?: GridSelectionConfiguration;
1074
+ selection?: GridSelectionConfiguration<T>;
1007
1075
  /**
1008
1076
  * The currently selected rows, in insertion order.
1009
1077
  *
@@ -1020,7 +1088,8 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1020
1088
  * adding to it in `'multiple'` mode.
1021
1089
  *
1022
1090
  * @returns `true` if the selection changed, `false` if the change was
1023
- * rejected by a `rowSelecting` listener or selection is disabled.
1091
+ * rejected by a `rowSelecting` listener, the row is not selectable
1092
+ * (`selection.isRowSelectable`) or selection is disabled.
1024
1093
  */
1025
1094
  selectRow(row: T): Promise<boolean>;
1026
1095
  /**
@@ -1032,8 +1101,8 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1032
1101
  */
1033
1102
  toggleRowSelection(row: T): Promise<boolean>;
1034
1103
  /**
1035
- * Selects every row in the current view ({@link dataView}). No-op in
1036
- * `'single'` selection mode.
1104
+ * Selects every selectable row in the current view ({@link dataView}).
1105
+ * No-op in `'single'` selection mode.
1037
1106
  */
1038
1107
  selectAllRows(): Promise<boolean>;
1039
1108
  /**
@@ -1107,6 +1176,43 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1107
1176
  * stay `true` by default.
1108
1177
  */
1109
1178
  columnMenu: boolean;
1179
+ /**
1180
+ * Whether the column header rows are shown. On by default. Set to `false`
1181
+ * (or the `show-header="false"` attribute) for a compact table, such as a
1182
+ * short dashboard tile, where the rows get the header's room.
1183
+ *
1184
+ * @remarks
1185
+ * Hidden headers take no space, paint nothing and take no pointer, and the
1186
+ * built-in header controls leave the tab order, so resizing, the column
1187
+ * menu, drag reorder and the filter panel are unavailable until the header
1188
+ * returns (an open column menu closes). A focusable control rendered by a
1189
+ * `headerTemplate` stays in the tab order: give it `tabindex="-1"` while
1190
+ * the header is hidden. The column header row
1191
+ * stays in the accessibility tree, so screen readers still announce the
1192
+ * column names, and `aria-rowcount` / `aria-rowindex` do not change. Sort,
1193
+ * filter, column widths and the page are kept.
1194
+ *
1195
+ * @attr show-header
1196
+ */
1197
+ showHeader: boolean;
1198
+ /**
1199
+ * Whether this grid follows the design-system add-on (`apex-grid/ignite-ui`).
1200
+ * `false`, reflected as `design-system="off"`, turns the Ignite UI colours
1201
+ * and font off for this grid; the Ignite UI variant still picks its mode.
1202
+ * Without the add-on it changes nothing.
1203
+ *
1204
+ * @attr design-system
1205
+ */
1206
+ designSystem: boolean;
1207
+ /**
1208
+ * Whether this grid reads the family `--apx-*` tokens and, with the
1209
+ * `apex-grid/ignite-ui` add-on, Ignite UI (the variant included). `false`,
1210
+ * reflected as `tokens="off"`, turns them off for the grid and the content
1211
+ * it renders, so it keeps the built-in look and the `--ag-*` tokens you set.
1212
+ *
1213
+ * @attr tokens
1214
+ */
1215
+ tokens: boolean;
1110
1216
  /**
1111
1217
  * Column groups rendered as spanning headers above the column header row.
1112
1218
  *
@@ -1238,7 +1344,9 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1238
1344
  *
1239
1345
  * @remarks
1240
1346
  * Since the grid has virtualization, this property returns only the currently rendered
1241
- * chunk of elements in the DOM.
1347
+ * chunk of elements in the DOM. With `rowRecycling` on (the default) an element can
1348
+ * show another record after a scroll, sort or filter; read its `data` each time
1349
+ * rather than keeping the element as a handle to a record.
1242
1350
  */
1243
1351
  get rows(): ApexGridRow<T>[];
1244
1352
  /**
@@ -1254,23 +1362,34 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1254
1362
  * Use this when you need to iterate the columns in the same order the grid
1255
1363
  * actually displays them (for example to build a column chooser). Public APIs
1256
1364
  * like {@link ApexGrid.getColumn} continue to operate on the user-supplied
1257
- * {@link ApexGrid.columns} array.
1365
+ * {@link ApexGrid.columns} array. Each read builds a new array, so read it
1366
+ * once and keep the result rather than reading it inside a loop.
1258
1367
  */
1259
1368
  get displayColumns(): ReadonlyArray<ColumnConfiguration<T>>;
1260
1369
  /**
1261
- * The total number of items in the {@link ApexGrid.dataView} collection.
1370
+ * The post-filter, post-sort row count. With pagination enabled it counts
1371
+ * the rows paged through, so rows pinned to the top or bottom (they show on
1372
+ * every page) are left out. In `'remote'` pagination mode, the
1373
+ * `pagination.totalItems` you supplied (the rows the server holds for the
1374
+ * current filter).
1262
1375
  *
1263
1376
  * @remarks
1264
- * This is always the post-filter, post-sort row count — pagination does not change it.
1265
- * Use {@link ApexGrid.pageItems} to read the rows currently rendered into the body.
1377
+ * The current page does not change it. Use {@link ApexGrid.pageItems} to read
1378
+ * the rows currently rendered into the body.
1266
1379
  */
1267
1380
  get totalItems(): number;
1381
+ /**
1382
+ * The rows the body pages through: {@link ApexGrid.dataView} without the
1383
+ * pinned rows, which render in their own sticky bands on every page. The
1384
+ * page slice and the page count both read it, so they always agree.
1385
+ */
1386
+ protected get bodyRows(): ReadonlyArray<T>;
1268
1387
  /**
1269
1388
  * The records currently rendered into the virtualized body.
1270
1389
  *
1271
1390
  * @remarks
1272
- * Equal to {@link ApexGrid.dataView} when pagination is disabled. With pagination
1273
- * enabled (`'local'` mode) this is the active page slice.
1391
+ * Equal to {@link ApexGrid.dataView} without the pinned rows when pagination is
1392
+ * disabled. With pagination enabled (`'local'` mode) this is the active page slice.
1274
1393
  */
1275
1394
  get pageItems(): ReadonlyArray<T>;
1276
1395
  /**
@@ -1319,10 +1438,12 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1319
1438
  * so with an async pipeline hook they fire after the rows changed.
1320
1439
  */
1321
1440
  protected pipelineSettled(): Promise<void>;
1441
+ protected willUpdate(changed: Map<PropertyKey, unknown>): void;
1322
1442
  protected updated(): void;
1323
1443
  addEventListener<K extends keyof M, M extends ApexGridEventMap<T> & HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: M[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
1324
1444
  removeEventListener<K extends keyof M, M extends ApexGridEventMap<T> & HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: M[K]) => unknown, options?: boolean | EventListenerOptions): void;
1325
1445
  connectedCallback(): void;
1446
+ disconnectedCallback(): void;
1326
1447
  protected firstUpdated(): void;
1327
1448
  /**
1328
1449
  * Performs a filter operation in the grid based on the passed expression(s).
@@ -1746,8 +1867,16 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1746
1867
  /**
1747
1868
  * Tabbing into the grid body lands on the scroll container; forward focus to
1748
1869
  * the active cell (when one exists) so the roving tab stop is honored.
1870
+ * Also tells navigation whether this body, not a grid nested in it, now
1871
+ * holds focus.
1749
1872
  */
1750
1873
  protected bodyFocusHandler(event: FocusEvent): void;
1874
+ /**
1875
+ * Focus left something in the body; see {@link NavigationController.focusLeft}.
1876
+ * Captured, so the body stops owning focus before a handler further down
1877
+ * (an editor committing on focus loss) runs and lets queued work see it.
1878
+ */
1879
+ protected bodyFocusOutHandler(event: FocusEvent): void;
1751
1880
  /**
1752
1881
  * Forwards body-cell pointer interactions (press / drag-over / release) to
1753
1882
  * feature modules via {@link StateController.handleCellInteraction}. Gated on
@@ -1757,10 +1886,12 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1757
1886
  */
1758
1887
  protected bodyPointerHandler(event: PointerEvent): void;
1759
1888
  protected renderGroupHeaderRow(): import("lit-html").TemplateResult<1> | typeof nothing;
1889
+ /**
1890
+ * With {@link ApexGrid.showHeader} off the header rows stay in the DOM,
1891
+ * visually hidden, so assistive technology keeps the column names.
1892
+ */
1760
1893
  protected renderHeaderRow(): import("lit-html").TemplateResult<1>;
1761
1894
  protected renderBody(): import("lit-html").TemplateResult<1>;
1762
- /** Number of chrome rows above the body (group header + header + optional filter). */
1763
- protected get headerRowCount(): number;
1764
1895
  protected renderPinnedTop(): import("lit-html").TemplateResult<1> | typeof nothing;
1765
1896
  protected renderPinnedBottom(): import("lit-html").TemplateResult<1> | typeof nothing;
1766
1897
  protected renderFilterRow(): import("lit-html").TemplateResult<1> | typeof nothing;
@@ -1773,6 +1904,13 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1773
1904
  * don't have to coordinate consumer DOM placement.
1774
1905
  */
1775
1906
  protected renderLiveRegion(): import("lit-html").TemplateResult<1>;
1907
+ /**
1908
+ * Floating "ghost" of the column header being dragged for reorder. Rendered
1909
+ * here, next to the row ghost, rather than in the header row: a fixed
1910
+ * element still paints inside its parent's stacking context, so inside the
1911
+ * header row it slid under the group header row and the pinned-top band.
1912
+ */
1913
+ protected renderColumnDragGhost(): import("lit-html").TemplateResult<1> | typeof nothing;
1776
1914
  /**
1777
1915
  * Floating "ghost" of the row being pointer-dragged for reorder. Rendered at
1778
1916
  * the top of the shadow tree (outside the virtualizer) so its `position: fixed`
@@ -1780,6 +1918,15 @@ export declare class ApexGrid<T extends object> extends EventEmitterBase<ApexGri
1780
1918
  * time so it mirrors the row's visible content and column widths.
1781
1919
  */
1782
1920
  protected renderRowDragGhost(): import("lit-html").TemplateResult<1> | typeof nothing;
1921
+ /**
1922
+ * The element with the `grid` (or `treegrid`) role and the table semantics.
1923
+ * It owns only rows: the header rows, the pinned bands and the body. The
1924
+ * toolbar, filter panel, paginator and live region stay outside it. The
1925
+ * host's own `aria-label`, `aria-labelledby` and `aria-describedby` name it:
1926
+ * referenced elements go through element reflection where the browser has
1927
+ * it, and their text is copied where it does not.
1928
+ */
1929
+ protected renderTable(): import("lit-html").TemplateResult<1>;
1783
1930
  protected render(): import("lit-html").TemplateResult<1>;
1784
1931
  /**
1785
1932
  * Sets the live region's announcement text. Screen readers configured to