@box-kite/react 0.0.1 → 2.0.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 (280) hide show
  1. package/.claude/rules/box-kite-rules.md +65 -0
  2. package/.claude/skills/box-kite/SKILL.md +138 -0
  3. package/.claude/skills/box-kite/references/components.md +235 -0
  4. package/.claude/skills/box-kite/references/extending.md +42 -0
  5. package/.claude/skills/box-kite/references/patterns.md +27 -0
  6. package/.claude/skills/box-kite/references/styling.md +222 -0
  7. package/.cursor/rules/box-kite.mdc +73 -0
  8. package/AGENTS.md +102 -0
  9. package/BOX_AI_CONTEXT.md +2804 -0
  10. package/BOX_KITE_AI_CONTEXT.md +2804 -0
  11. package/LICENSE +21 -0
  12. package/README.md +744 -7
  13. package/a11y.cjs +1 -0
  14. package/a11y.d.ts +15 -0
  15. package/a11y.mjs +4 -0
  16. package/anchor.cjs +1 -0
  17. package/anchor.d.ts +14 -0
  18. package/anchor.mjs +3 -0
  19. package/behavior.cjs +1 -0
  20. package/behavior.mjs +277 -0
  21. package/box.cjs +1 -0
  22. package/box.d.ts +46 -0
  23. package/box.mjs +23 -0
  24. package/client.cjs +1 -0
  25. package/client.mjs +164 -0
  26. package/components/accordion.cjs +1 -0
  27. package/components/accordion.d.ts +114 -0
  28. package/components/accordion.mjs +251 -0
  29. package/components/baseSvg.cjs +1 -0
  30. package/components/baseSvg.d.ts +5 -0
  31. package/components/baseSvg.mjs +21 -0
  32. package/components/button.cjs +1 -0
  33. package/components/button.d.ts +19 -0
  34. package/components/button.mjs +19 -0
  35. package/components/chart.cjs +1 -0
  36. package/components/chart.d.ts +83 -0
  37. package/components/chart.mjs +236 -0
  38. package/components/checkbox.cjs +1 -0
  39. package/components/checkbox.d.ts +36 -0
  40. package/components/checkbox.mjs +38 -0
  41. package/components/combobox/comboboxChips.d.ts +21 -0
  42. package/components/combobox/comboboxListbox.d.ts +47 -0
  43. package/components/combobox.cjs +1 -0
  44. package/components/combobox.d.ts +121 -0
  45. package/components/combobox.mjs +563 -0
  46. package/components/dataGrid/components/dataGridAggregateValue.d.ts +10 -0
  47. package/components/dataGrid/components/dataGridBody.d.ts +7 -0
  48. package/components/dataGrid/components/dataGridBottomBar.d.ts +6 -0
  49. package/components/dataGrid/components/dataGridCell.d.ts +16 -0
  50. package/components/dataGrid/components/dataGridCellEditor.d.ts +15 -0
  51. package/components/dataGrid/components/dataGridCellPlaceholder.d.ts +14 -0
  52. package/components/dataGrid/components/dataGridCellRowDetail.d.ts +6 -0
  53. package/components/dataGrid/components/dataGridCellRowSelection.d.ts +6 -0
  54. package/components/dataGrid/components/dataGridCellText.d.ts +6 -0
  55. package/components/dataGrid/components/dataGridCellTree.d.ts +16 -0
  56. package/components/dataGrid/components/dataGridColumnFilter.d.ts +9 -0
  57. package/components/dataGrid/components/dataGridColumnGroups.d.ts +7 -0
  58. package/components/dataGrid/components/dataGridContent.d.ts +6 -0
  59. package/components/dataGrid/components/dataGridDataSourceError.d.ts +12 -0
  60. package/components/dataGrid/components/dataGridDetailRow.d.ts +8 -0
  61. package/components/dataGrid/components/dataGridEmptyColumns.d.ts +6 -0
  62. package/components/dataGrid/components/dataGridExport.d.ts +10 -0
  63. package/components/dataGrid/components/dataGridFilterCell.d.ts +11 -0
  64. package/components/dataGrid/components/dataGridFilterRow.d.ts +6 -0
  65. package/components/dataGrid/components/dataGridFooter.d.ts +11 -0
  66. package/components/dataGrid/components/dataGridGlobalFilter.d.ts +6 -0
  67. package/components/dataGrid/components/dataGridGroupRow.d.ts +8 -0
  68. package/components/dataGrid/components/dataGridHeader.d.ts +6 -0
  69. package/components/dataGrid/components/dataGridHeaderCell.d.ts +9 -0
  70. package/components/dataGrid/components/dataGridHeaderCellContextMenu.d.ts +11 -0
  71. package/components/dataGrid/components/dataGridHeaderCellResizer.d.ts +14 -0
  72. package/components/dataGrid/components/dataGridLoader.d.ts +11 -0
  73. package/components/dataGrid/components/dataGridPagination.d.ts +6 -0
  74. package/components/dataGrid/components/dataGridRow.d.ts +8 -0
  75. package/components/dataGrid/components/dataGridTopBar.d.ts +6 -0
  76. package/components/dataGrid/components/dataGridTopBarContextMenu.d.ts +6 -0
  77. package/components/dataGrid/contracts/dataGridContract.d.ts +671 -0
  78. package/components/dataGrid/export/gridExport.d.ts +10 -0
  79. package/components/dataGrid/gridNavigationContext.d.ts +32 -0
  80. package/components/dataGrid/models/aggregateCellModel.d.ts +34 -0
  81. package/components/dataGrid/models/aggregationModel.d.ts +32 -0
  82. package/components/dataGrid/models/cellKeys.d.ts +11 -0
  83. package/components/dataGrid/models/cellModel.d.ts +44 -0
  84. package/components/dataGrid/models/columnModel.d.ts +160 -0
  85. package/components/dataGrid/models/columnVisibilityModel.d.ts +24 -0
  86. package/components/dataGrid/models/dataSourceModel.d.ts +177 -0
  87. package/components/dataGrid/models/detailRowModel.d.ts +22 -0
  88. package/components/dataGrid/models/editModel.d.ts +77 -0
  89. package/components/dataGrid/models/exportModel.d.ts +51 -0
  90. package/components/dataGrid/models/filterModel.d.ts +22 -0
  91. package/components/dataGrid/models/gridModel.d.ts +293 -0
  92. package/components/dataGrid/models/groupRowCellModel.d.ts +34 -0
  93. package/components/dataGrid/models/groupRowModel.d.ts +68 -0
  94. package/components/dataGrid/models/headerCellModel.d.ts +83 -0
  95. package/components/dataGrid/models/paginationModel.d.ts +32 -0
  96. package/components/dataGrid/models/rowModel.d.ts +46 -0
  97. package/components/dataGrid/models/sourceGroupRowModel.d.ts +45 -0
  98. package/components/dataGrid/models/sourceLevel.d.ts +71 -0
  99. package/components/dataGrid/models/sourceRowModel.d.ts +29 -0
  100. package/components/dataGrid/models/sourceTreeRowModel.d.ts +23 -0
  101. package/components/dataGrid/models/treeModel.d.ts +94 -0
  102. package/components/dataGrid/models/treeRow.d.ts +22 -0
  103. package/components/dataGrid/models/treeRowModel.d.ts +50 -0
  104. package/components/dataGrid/models/viewportModel.d.ts +44 -0
  105. package/components/dataGrid/useGrid.d.ts +8 -0
  106. package/components/dataGrid/useGridNavigation.d.ts +21 -0
  107. package/components/dataGrid.cjs +1 -0
  108. package/components/dataGrid.d.ts +4 -0
  109. package/components/dataGrid.mjs +4907 -0
  110. package/components/dialog.cjs +1 -0
  111. package/components/dialog.d.ts +151 -0
  112. package/components/dialog.mjs +223 -0
  113. package/components/dropdown/dropdownContext.d.ts +44 -0
  114. package/components/dropdown/dropdownItems.d.ts +22 -0
  115. package/components/dropdown/dropdownRowRenderer.d.ts +8 -0
  116. package/components/dropdown/dropdownSearch.d.ts +21 -0
  117. package/components/dropdown/utils.d.ts +1 -0
  118. package/components/dropdown.cjs +1 -0
  119. package/components/dropdown.d.ts +77 -0
  120. package/components/dropdown.mjs +491 -0
  121. package/components/flex.cjs +1 -0
  122. package/components/flex.d.ts +6 -0
  123. package/components/flex.mjs +16 -0
  124. package/components/form.cjs +1 -0
  125. package/components/form.d.ts +10 -0
  126. package/components/form.mjs +58 -0
  127. package/components/grid.cjs +1 -0
  128. package/components/grid.d.ts +6 -0
  129. package/components/grid.mjs +16 -0
  130. package/components/icon.cjs +1 -0
  131. package/components/icon.d.ts +37 -0
  132. package/components/icon.mjs +41 -0
  133. package/components/menu.cjs +1 -0
  134. package/components/menu.d.ts +234 -0
  135. package/components/menu.mjs +422 -0
  136. package/components/overlay.cjs +1 -0
  137. package/components/overlay.d.ts +47 -0
  138. package/components/overlay.mjs +52 -0
  139. package/components/popover.cjs +1 -0
  140. package/components/popover.d.ts +100 -0
  141. package/components/popover.mjs +69 -0
  142. package/components/presence.cjs +1 -0
  143. package/components/presence.d.ts +36 -0
  144. package/components/presence.mjs +11 -0
  145. package/components/progress.cjs +1 -0
  146. package/components/progress.d.ts +47 -0
  147. package/components/progress.mjs +28 -0
  148. package/components/radioButton.cjs +1 -0
  149. package/components/radioButton.d.ts +32 -0
  150. package/components/radioButton.mjs +32 -0
  151. package/components/radioGroup.cjs +1 -0
  152. package/components/radioGroup.d.ts +51 -0
  153. package/components/radioGroup.mjs +83 -0
  154. package/components/select.cjs +1 -0
  155. package/components/select.d.ts +51 -0
  156. package/components/select.mjs +36 -0
  157. package/components/semantics.cjs +1 -0
  158. package/components/semantics.d.ts +39 -0
  159. package/components/semantics.mjs +17 -0
  160. package/components/slider.cjs +1 -0
  161. package/components/slider.d.ts +98 -0
  162. package/components/slider.mjs +250 -0
  163. package/components/svg.cjs +1 -0
  164. package/components/svg.d.ts +65 -0
  165. package/components/svg.mjs +141 -0
  166. package/components/switch.cjs +1 -0
  167. package/components/switch.d.ts +29 -0
  168. package/components/switch.mjs +25 -0
  169. package/components/tabs.cjs +1 -0
  170. package/components/tabs.d.ts +87 -0
  171. package/components/tabs.mjs +324 -0
  172. package/components/textarea.cjs +1 -0
  173. package/components/textarea.d.ts +41 -0
  174. package/components/textarea.mjs +33 -0
  175. package/components/textbox.cjs +1 -0
  176. package/components/textbox.d.ts +38 -0
  177. package/components/textbox.mjs +33 -0
  178. package/components/toaster.cjs +1 -0
  179. package/components/toaster.d.ts +106 -0
  180. package/components/toaster.mjs +295 -0
  181. package/components/tooltip.cjs +1 -0
  182. package/components/tooltip.d.ts +98 -0
  183. package/components/tooltip.mjs +110 -0
  184. package/components/visuallyHidden.cjs +1 -0
  185. package/components/visuallyHidden.d.ts +6 -0
  186. package/components/visuallyHidden.mjs +23 -0
  187. package/docs/a11y.md +199 -0
  188. package/docs/anchor.md +139 -0
  189. package/docs/components.md +48 -0
  190. package/docs/index.md +11 -0
  191. package/docs/props.md +1777 -0
  192. package/effects.cjs +1 -0
  193. package/effects.mjs +6 -0
  194. package/forms.cjs +1 -0
  195. package/forms.mjs +21 -0
  196. package/gridExport.cjs +2 -0
  197. package/gridExport.mjs +244 -0
  198. package/icons/dotsIcon.d.ts +2 -0
  199. package/icons/expandIcon.d.ts +2 -0
  200. package/icons/groupingIcon.d.ts +2 -0
  201. package/icons/pinIcon.d.ts +2 -0
  202. package/icons/searchIcon.d.ts +2 -0
  203. package/icons/sortIcon.d.ts +2 -0
  204. package/identity.cjs +1 -0
  205. package/identity.mjs +12 -0
  206. package/keyboard.cjs +1 -0
  207. package/keyboard.mjs +30 -0
  208. package/layer.cjs +1 -0
  209. package/layer.mjs +127 -0
  210. package/motion.cjs +1 -0
  211. package/motion.mjs +66 -0
  212. package/package.json +327 -7
  213. package/placement.cjs +1 -0
  214. package/placement.mjs +180 -0
  215. package/platform.cjs +1 -0
  216. package/platform.mjs +45 -0
  217. package/react/a11y/callbacks.d.ts +12 -0
  218. package/react/a11y/useControllableState.d.ts +25 -0
  219. package/react/a11y/useDismiss.d.ts +25 -0
  220. package/react/a11y/useFocusReturn.d.ts +18 -0
  221. package/react/a11y/useRovingFocus.d.ts +84 -0
  222. package/react/anchor/useAnchorPosition.d.ts +79 -0
  223. package/react/animation/usePresence.d.ts +32 -0
  224. package/react/boxClassNames.d.ts +25 -0
  225. package/react/boxProps.d.ts +49 -0
  226. package/react/boxTagProps.d.ts +7 -0
  227. package/react/clientRuntime.d.ts +11 -0
  228. package/react/dialog/useScrollLock.d.ts +12 -0
  229. package/react/effects.d.ts +10 -0
  230. package/react/forms/labelledControl.d.ts +17 -0
  231. package/react/forms/placeholderProp.d.ts +13 -0
  232. package/react/hooks/usePortalContainer.d.ts +6 -0
  233. package/react/hooks/useVirtualization.d.ts +32 -0
  234. package/react/hooks/useVisibility.d.ts +9 -0
  235. package/react/identity/useIdentifier.d.ts +17 -0
  236. package/react/popover/usePopoverLayer.d.ts +87 -0
  237. package/react/reactTypes.d.ts +10 -0
  238. package/react/resolveStyles.d.ts +18 -0
  239. package/react/styleElements.d.ts +3 -0
  240. package/react/svg/attributesInProps.d.ts +4 -0
  241. package/react/svg/svgNaming.d.ts +15 -0
  242. package/react/theme/theme.d.ts +26 -0
  243. package/react/theme/themeContext.d.ts +7 -0
  244. package/react/useStyles.d.ts +22 -0
  245. package/react-shared.cjs +1 -0
  246. package/react-shared.mjs +122 -0
  247. package/rolldown-runtime.cjs +1 -0
  248. package/rsc.cjs +1 -0
  249. package/rsc.d.ts +27 -0
  250. package/rsc.mjs +18 -0
  251. package/ssg.cjs +1 -0
  252. package/ssg.d.ts +24 -0
  253. package/ssg.mjs +25 -0
  254. package/utils/accordion/accordionUtils.d.ts +48 -0
  255. package/utils/anchor/anchorUtils.d.ts +79 -0
  256. package/utils/animation/animationUtils.d.ts +29 -0
  257. package/utils/array/arrayUtils.d.ts +15 -0
  258. package/utils/array/lazyList.d.ts +10 -0
  259. package/utils/box/boxUtils.d.ts +5 -0
  260. package/utils/chart/chartPalette.d.ts +15 -0
  261. package/utils/chart/chartUtils.d.ts +92 -0
  262. package/utils/combobox/comboboxUtils.d.ts +89 -0
  263. package/utils/dom/domUtils.d.ts +32 -0
  264. package/utils/environment/environmentUtils.d.ts +28 -0
  265. package/utils/export/csvUtils.d.ts +23 -0
  266. package/utils/export/downloadUtils.d.ts +12 -0
  267. package/utils/export/xlsxUtils.d.ts +56 -0
  268. package/utils/export/zipUtils.d.ts +26 -0
  269. package/utils/fn/fnUtils.d.ts +4 -0
  270. package/utils/form/formUtils.d.ts +8 -0
  271. package/utils/keyboard/typeaheadUtils.d.ts +31 -0
  272. package/utils/memo.d.ts +10 -0
  273. package/utils/menu/menuUtils.d.ts +25 -0
  274. package/utils/object/objectUtils.d.ts +13 -0
  275. package/utils/slider/sliderUtils.d.ts +67 -0
  276. package/utils/string/fuzzySearch.d.ts +27 -0
  277. package/utils/string/stringUtils.d.ts +4 -0
  278. package/utils/tabs/tabsUtils.d.ts +75 -0
  279. package/utils/toast/toastStore.d.ts +73 -0
  280. package/utils/virtual/virtualUtils.d.ts +47 -0
@@ -0,0 +1,51 @@
1
+ import { DataGridExportOptions, ExportTable, Key } from '../contracts/dataGridContract';
2
+ import { default as ColumnModel } from './columnModel';
3
+ import { default as GridModel } from './gridModel';
4
+ /**
5
+ * What an export writes, decided here and rendered by nobody: the columns, the rows the filters and the
6
+ * sort left, and the grouping as levels rather than as indentation. Both formats are handed this same
7
+ * table, which is why a CSV and a workbook of the same grid hold the same figures.
8
+ *
9
+ * It is a model rather than part of the writers so that it can be tested without producing a file, and so
10
+ * the writers stay in the lazy chunk — this is the only export code the grid's own bundle carries.
11
+ */
12
+ export default class ExportModel<TRow> {
13
+ readonly grid: GridModel<TRow>;
14
+ constructor(grid: GridModel<TRow>);
15
+ /**
16
+ * The columns a file gets: the visible data columns, **plus** the ones grouping took off the screen.
17
+ * A grouped column is not hidden — its values moved to the group rows — and a spreadsheet with no
18
+ * Country column in it is not the grid that was exported.
19
+ */
20
+ columns(keys?: Key[]): ColumnModel<TRow>[];
21
+ /** A column's heading, which is its own `header` or the key it reads. */
22
+ header(column: ColumnModel<TRow>): string;
23
+ /** Its width in characters — the unit a spreadsheet sizes columns in, from the pixels the grid uses. */
24
+ width(column: ColumnModel<TRow>): number;
25
+ /**
26
+ * One row's value for one column: the column's own `exportValue` when it has one, else the raw field —
27
+ * either way through the edits, so a file carries what the grid is showing rather than what it was given.
28
+ */
29
+ private value;
30
+ /** A column's aggregate over a set of rows, or null where it has no aggregation. */
31
+ private aggregateOf;
32
+ /**
33
+ * The table. Group rows carry their own value in the column they group by and a total in every column
34
+ * that aggregates; a collapsed group exports collapsed, so the file opens looking like the screen.
35
+ */
36
+ table(options?: DataGridExportOptions): ExportTable;
37
+ /**
38
+ * A tree, as Excel's outline: a row's level is its depth and a shut row exports `collapsed`, with
39
+ * everything under it `hidden` — the same two flags a collapsed group writes, so the file opens
40
+ * looking like the screen. The rows are walked rather than the models: a shut row builds none of its
41
+ * children, and an export writes the whole tree.
42
+ */
43
+ private walkTree;
44
+ /**
45
+ * The grand totals, over the rows the filters left. The label goes in the leading column with nothing
46
+ * of its own to say — the same column it occupies on screen when that column is exported at all.
47
+ */
48
+ private footerRow;
49
+ /** The file's name, without an extension: what was asked for, else the grid's title, else `export`. */
50
+ fileName(options?: DataGridExportOptions): string;
51
+ }
@@ -0,0 +1,22 @@
1
+ import { ColumnFilters } from '../contracts/dataGridContract';
2
+ import { default as GridModel } from './gridModel';
3
+ /**
4
+ * Filtering concern: grid-level filter state + the derived flags the UI needs. Per-column
5
+ * filter config/value/parse helpers live on ColumnModel; the coupled mutations (page-reset,
6
+ * server-state events, filteredData) live on GridModel.
7
+ */
8
+ export default class FilterModel<TRow> {
9
+ readonly grid: GridModel<TRow>;
10
+ constructor(grid: GridModel<TRow>);
11
+ get globalFilterValue(): string;
12
+ get columnFilters(): ColumnFilters<TRow>;
13
+ get hasActiveFilters(): boolean;
14
+ get filterStats(): {
15
+ filtered: number;
16
+ total: number;
17
+ };
18
+ /** Whether any visible column is filterable (controls the filter row's visibility). */
19
+ get hasFilterableColumns(): boolean;
20
+ setGlobalFilter: (value: string) => void;
21
+ clearAllFilters: () => void;
22
+ }
@@ -0,0 +1,293 @@
1
+ import { ComponentsAndVariants } from '../../../types';
2
+ import { ColumnFilters, DataGridCsvOptions, DataGridProps, DataGridXlsxOptions, ExportConfig, FilterValue, Key, PaginationState, PinPositionInput, SortDirection } from '../contracts/dataGridContract';
3
+ import { default as AggregationModel } from './aggregationModel';
4
+ import { default as ColumnModel } from './columnModel';
5
+ import { default as ColumnVisibilityModel } from './columnVisibilityModel';
6
+ import { default as DataSourceModel } from './dataSourceModel';
7
+ import { default as DetailRowModel } from './detailRowModel';
8
+ import { default as EditModel } from './editModel';
9
+ import { default as ExportModel } from './exportModel';
10
+ import { default as FilterModel } from './filterModel';
11
+ import { default as GroupRowModel } from './groupRowModel';
12
+ import { default as PaginationModel } from './paginationModel';
13
+ import { default as RowModel } from './rowModel';
14
+ import { default as TreeModel } from './treeModel';
15
+ import { default as ViewportModel } from './viewportModel';
16
+ export { GROUPING_CELL_KEY, ROW_DETAIL_CELL_KEY, ROW_NUMBER_CELL_KEY, ROW_SELECTION_CELL_KEY } from './cellKeys';
17
+ export declare const DEFAULT_ROW_NUMBER_COLUMN_WIDTH = 70;
18
+ export default class GridModel<TRow> {
19
+ props: DataGridProps<TRow>;
20
+ constructor(props: DataGridProps<TRow>, onChange?: () => void);
21
+ private _version;
22
+ private readonly listeners;
23
+ /** Subscribe to changes; returns an unsubscribe function. */
24
+ subscribe: (listener: () => void) => (() => void);
25
+ /** Monotonic snapshot version — stable between changes, increments on notify(). */
26
+ getSnapshot: () => number;
27
+ /** Signal subscribers that state changed and a re-render is needed. */
28
+ notify: () => void;
29
+ /**
30
+ * Sync incoming props. Called during render by the framework adapter — clears
31
+ * the affected memos but does NOT notify (no extra render cycle; memos recompute
32
+ * lazily on next access).
33
+ */
34
+ setProps(props: DataGridProps<TRow>): void;
35
+ /**
36
+ * The rows the grid was handed. `data` is optional because `def.dataSource` replaces it, and every
37
+ * reader goes through here so that "no rows yet" is one empty array rather than a check at each site.
38
+ */
39
+ get data(): TRow[];
40
+ /**
41
+ * Every row the grid can act on right now. With a datasource that is the blocks it holds rather than
42
+ * the table behind them — a select-all cannot reach rows nobody has fetched, and saying otherwise is
43
+ * the one thing a server-backed grid must not do.
44
+ */
45
+ get loadedRows(): TRow[];
46
+ get componentName(): keyof ComponentsAndVariants;
47
+ private _identifier;
48
+ /**
49
+ * A unique prefix for the ids this grid wires ARIA with. Supplied by the adapter, because only
50
+ * the adapter can produce one that survives hydration — `useIdentifier` in React's case.
51
+ */
52
+ get identifier(): string;
53
+ setIdentifier(identifier: string): void;
54
+ /** The title's id: a grid is not named by the rows in it, so it is named by this. */
55
+ get titleId(): string;
56
+ get resizerStyle(): 'visible' | 'hover' | 'hidden';
57
+ get resizeMode(): 'smooth' | 'instant';
58
+ readonly sourceColumns: import('../../../utils/memo').Memo<ColumnModel<TRow>[]>;
59
+ readonly columns: import('../../../utils/memo').Memo<{
60
+ start: ColumnModel<TRow>[];
61
+ middle: ColumnModel<TRow>[];
62
+ end: ColumnModel<TRow>[];
63
+ flat: ColumnModel<TRow>[];
64
+ leafs: ColumnModel<TRow>[];
65
+ visibleLeafs: ColumnModel<TRow>[];
66
+ userVisibleLeafs: ColumnModel<TRow>[];
67
+ maxDeath: number;
68
+ }>;
69
+ readonly headerRows: import('../../../utils/memo').Memo<ColumnModel<TRow>[][]>;
70
+ readonly gridTemplateColumns: import('../../../utils/memo').Memo<string>;
71
+ private _globalFilterValue;
72
+ get globalFilterValue(): string;
73
+ private _columnFilters;
74
+ get columnFilters(): ColumnFilters<TRow>;
75
+ /** Which columns the global filter searches: the ones named, or every column of the caller's own. */
76
+ private readonly globalFilterColumns;
77
+ /**
78
+ * Whether one row survives the filters — all three of them, in the order they cost: the caller's own
79
+ * predicates, the global search box, then the column filters. A row rather than an array, because a
80
+ * tree is filtered a node at a time (a match keeps its ancestors) rather than in one pass.
81
+ */
82
+ rowMatchesFilters(row: TRow): boolean;
83
+ /** Whether anything is filtering at all — what says a filtering pass can be skipped outright. */
84
+ get hasRowFilters(): boolean;
85
+ private matchesGlobalFilter;
86
+ private matchesColumnFilters;
87
+ /**
88
+ * Check if a cell value matches a filter
89
+ */
90
+ private matchesFilter;
91
+ /**
92
+ * Get filtered data (applies external, global, then column filters)
93
+ */
94
+ get filteredData(): TRow[];
95
+ private fireServerStateChange;
96
+ /** Both pager callbacks: the one carrying a reason, and the `(page, pageSize)` pair it replaces. */
97
+ private firePaginationChange;
98
+ /**
99
+ * A query that changed underneath the pager sends it back to the first page. Returns where the page now
100
+ * is, which is what the server-state snapshot asks the server for.
101
+ */
102
+ private resetToFirstPage;
103
+ /**
104
+ * Set global filter value
105
+ */
106
+ setGlobalFilter: (value: string) => void;
107
+ /**
108
+ * Set a single column filter
109
+ */
110
+ setColumnFilter: (columnKey: Key, filter: FilterValue | undefined) => void;
111
+ /**
112
+ * Clear all column filters
113
+ */
114
+ clearColumnFilters: () => void;
115
+ /**
116
+ * Clear all filters (global + column)
117
+ */
118
+ clearAllFilters: () => void;
119
+ /**
120
+ * Get unique values for a column (used for multiselect filter options)
121
+ */
122
+ getColumnUniqueValues: (columnKey: Key) => (string | number | boolean | null)[];
123
+ /**
124
+ * Check if any filter is active
125
+ */
126
+ get hasActiveFilters(): boolean;
127
+ /**
128
+ * Get count of filtered rows vs total rows
129
+ */
130
+ get filterStats(): {
131
+ filtered: number;
132
+ total: number;
133
+ };
134
+ /** How many rows the query holds altogether: the server's count where there is one, else what is here. */
135
+ get totalRowCount(): number;
136
+ readonly rows: import('../../../utils/memo').Memo<(RowModel<TRow> | GroupRowModel<TRow>)[]>;
137
+ /**
138
+ * The columns the group row's label cell covers: the grouping cell itself and the data columns beside it in
139
+ * its own pin, stopping at the first one carrying an aggregate — past that each column draws a value of its
140
+ * own, and a number under the wrong heading is worse than a label with less room. With nothing aggregating
141
+ * the span is every one of them, which is what it was before aggregates existed.
142
+ */
143
+ readonly groupingSpan: import('../../../utils/memo').Memo<ColumnModel<TRow>[]>;
144
+ readonly flatRows: import('../../../utils/memo').Memo<(RowModel<TRow> | GroupRowModel<TRow> | DetailRowModel<TRow>)[]>;
145
+ get rowHeight(): number;
146
+ readonly sizes: import('../../../utils/memo').Memo<Record<string, string>>;
147
+ private _containerWidth;
148
+ get containerWidth(): number;
149
+ /**
150
+ * The DOM element that carries the column-sizing CSS variables (the grid container).
151
+ * Set by the React adapter. During a resize drag the adapter writes the width vars
152
+ * here directly — bypassing React re-renders — and only commits to state on release.
153
+ */
154
+ private _sizingElement;
155
+ get sizingElement(): HTMLElement | null;
156
+ setSizingElement: (el: HTMLElement | null) => void;
157
+ /**
158
+ * Which way the grid reads, resolved off the element the widths are written to. A model with no
159
+ * element yet — a server render, a headless host — reads as left to right, the initial value.
160
+ */
161
+ get isRtl(): boolean;
162
+ setContainerWidth: (width: number) => void;
163
+ readonly flexWidths: import('../../../utils/memo').Memo<Record<Key, number>>;
164
+ getFlexWidth(key: Key): number | undefined;
165
+ readonly DEFAULT_ROW_HEIGHT_PX = 48;
166
+ readonly MIN_COLUMN_WIDTH_PX = 48;
167
+ readonly DEFAULT_COLUMN_WIDTH_PX = 200;
168
+ expandedGroupRow: Set<Key>;
169
+ private _expandedDetailRows;
170
+ get expandedDetailRows(): Set<Key>;
171
+ /** The row whose panel a user action just opened, for the row itself to bring into view once. */
172
+ private _revealDetailKey;
173
+ /**
174
+ * Taken by the detail row on the render that puts it in the DOM, and only then: an `auto` panel's
175
+ * real height exists nowhere else, and the virtualization offsets carry an estimate for it.
176
+ */
177
+ takeDetailReveal(rowKey: Key): boolean;
178
+ toggleDetailRow: (rowKey: Key) => void;
179
+ private _page;
180
+ private _pageSize?;
181
+ get page(): number;
182
+ get pageSize(): number;
183
+ get pageSizeOptions(): number[] | undefined;
184
+ get isPaginated(): boolean;
185
+ get paginationState(): PaginationState | undefined;
186
+ changePage: (page: number) => void;
187
+ changePageSize: (size: number) => void;
188
+ readonly rowOffsets: import('../../../utils/memo').Memo<{
189
+ offsets: number[];
190
+ totalHeight: number;
191
+ }>;
192
+ /** Headless virtualization (windowing math; scrollTop is owned by the adapter). */
193
+ readonly viewport: ViewportModel<TRow>;
194
+ /** Backs the top-bar column-visibility menu. */
195
+ readonly columnVisibility: ColumnVisibilityModel<TRow>;
196
+ /** Filtering concern (grid-level state + derived flags). */
197
+ readonly filter: FilterModel<TRow>;
198
+ /** Pagination concern (navigation + row-range derivations). */
199
+ readonly pagination: PaginationModel<TRow>;
200
+ /** Aggregation concern (which columns aggregate, and the footer's grand totals). */
201
+ readonly aggregation: AggregationModel<TRow>;
202
+ /** Export concern (the columns, rows and levels both file formats are written from). */
203
+ readonly exporter: ExportModel<TRow>;
204
+ /** Server row model: the blocks ~def.dataSource~ has answered, and the ones still in flight. */
205
+ readonly source: DataSourceModel<TRow>;
206
+ /** Tree data: the shape `def.treeData` describes, and which of its rows are open. */
207
+ readonly tree: TreeModel<TRow>;
208
+ /** Cell editing: which cell is open, what a commit is judged by, and the values the grid has accepted. */
209
+ readonly edits: EditModel<TRow>;
210
+ /**
211
+ * Throw the fetched blocks away and ask for them again. The grid invalidates on its own whenever it
212
+ * changes the query; this is for the half it cannot see — a filter of the page's own, a row somebody
213
+ * saved, a tenant that changed underneath the closure ~getRows~ was written in.
214
+ */
215
+ refresh: () => void;
216
+ /**
217
+ * Which export buttons the top bar shows, and the options they press with. `export: true` resolves to
218
+ * one shared record rather than a fresh one, so the buttons' handlers keep their identity.
219
+ */
220
+ get exportConfig(): ExportConfig | undefined;
221
+ /**
222
+ * Download the grid as a CSV. Both writers are behind an `import()`, so the format is fetched on the
223
+ * first press and a grid nobody exports from carries neither.
224
+ */
225
+ exportCsv: (options?: DataGridCsvOptions) => Promise<void>;
226
+ /** Download the grid as an `.xlsx`, with its groups as Excel's own outline levels. */
227
+ exportXlsx: (options?: DataGridXlsxOptions) => Promise<void>;
228
+ /** Whether any user-facing column is currently visible (else the empty-columns state shows). */
229
+ get hasVisibleColumns(): boolean;
230
+ get isEmpty(): boolean;
231
+ /** Header select-all checkbox state. */
232
+ get allRowsSelected(): boolean;
233
+ get someRowsSelected(): boolean;
234
+ private _selectionAnnounced;
235
+ /**
236
+ * What the grid's live region says. Ticking a checkbox halfway down a virtualized grid changes nothing a
237
+ * screen reader would read, so the count is announced instead — and it stays empty until a selection has
238
+ * happened, since some readers announce a region that already holds text on mount.
239
+ */
240
+ get selectionAnnouncement(): string;
241
+ /** The columns currently grouped, resolved from groupColumns keys (backs the top-bar group chips). */
242
+ get groupedColumns(): ColumnModel<TRow>[];
243
+ selectedRows: Set<Key>;
244
+ get inlineStartEdge(): number;
245
+ get inlineEndEdge(): number;
246
+ readonly inlineStartEdgeVarName = "--inline-start-edge";
247
+ readonly rowHeightVarName = "--row-height";
248
+ readonly viewportWidthVarName = "--viewport-width";
249
+ private readonly _idMap;
250
+ private _autoId;
251
+ private readonly _idFactory;
252
+ getRowKey(row: TRow): Key;
253
+ setSortColumn: (columnKey: Key, sortDirection?: SortDirection) => void;
254
+ pinColumn: (uniqueKey: string, pin?: PinPositionInput) => void;
255
+ toggleGrouping: (columnKey: Key) => void;
256
+ unGroupAll: () => void;
257
+ /** Grouping changed, so every open path names a group that is not there and every block is stale. */
258
+ private collapseGroups;
259
+ /** Bumped by every expand and collapse, so the adapter's fetch effect asks for the level just opened. */
260
+ private _expansion;
261
+ get expansionVersion(): number;
262
+ /**
263
+ * Whether a group row is open. Explicit state wins: a group somebody has opened or shut is where they
264
+ * left it, and `def.groupDefaultExpanded` answers for every group nobody has touched. Client-side
265
+ * grouping only — with a datasource, a level that has never been fetched has no rows to open.
266
+ */
267
+ isGroupExpanded(groupRowKey: Key, depth: number): boolean;
268
+ /** Group rows shut by hand, which is what a `groupDefaultExpanded` grid needs to remember. */
269
+ private _collapsedGroupRow;
270
+ toggleGroupRow: (groupRowKey: Key, expanded?: boolean) => void;
271
+ /**
272
+ * A tree row opened or shut. The walk over the rows is a different walk — and where the tree is lazy the
273
+ * level just opened has not been asked for yet, which is what the bumped version tells the fetch effect.
274
+ */
275
+ treeExpansionChanged(): void;
276
+ toggleRowSelection: (rowKey: Key) => void;
277
+ /** `all` is the header checkbox rather than a count: a group covering every row is still not select-all. */
278
+ toggleRowsSelection: (rowKeys: Key[], all?: boolean) => void;
279
+ toggleSelectAllRows: () => void;
280
+ toggleColumnVisibility: (columnKey: Key) => void;
281
+ setWidth: (columnKey: Key, width: number) => void;
282
+ private _groupColumns?;
283
+ get groupColumns(): Set<Key>;
284
+ set groupColumns(value: Set<Key>);
285
+ private _hiddenColumns?;
286
+ get hiddenColumns(): Set<Key>;
287
+ set hiddenColumns(value: Set<Key>);
288
+ columnWidths: Map<Key, number>;
289
+ private _sortColumn?;
290
+ get sortColumn(): Key | undefined;
291
+ private _sortDirection?;
292
+ get sortDirection(): SortDirection | undefined;
293
+ }
@@ -0,0 +1,34 @@
1
+ import { default as AggregateCellModel } from './aggregateCellModel';
2
+ import { default as ColumnModel } from './columnModel';
3
+ import { default as GridModel } from './gridModel';
4
+ import { default as GroupRowModel } from './groupRowModel';
5
+ /**
6
+ * How a cell participates in a group row's layout: `grouping` is the expand/label cell spanning the
7
+ * grouped columns, `selection` the select-all cell, `aggregate` a column totalling the rows under the group,
8
+ * `spacer` a pinned or leading cell with its own value, and `hidden` a data column absorbed into the
9
+ * grouping cell's span.
10
+ */
11
+ export type GroupRowCellKind = 'grouping' | 'selection' | 'aggregate' | 'spacer' | 'hidden';
12
+ export default class GroupRowCellModel<TRow> {
13
+ readonly grid: GridModel<TRow>;
14
+ readonly row: GroupRowModel<TRow>;
15
+ readonly column: ColumnModel<TRow>;
16
+ constructor(grid: GridModel<TRow>, row: GroupRowModel<TRow>, column: ColumnModel<TRow>);
17
+ get value(): string | number | null;
18
+ get isExpanded(): boolean;
19
+ get isFirst(): boolean;
20
+ get isLast(): boolean;
21
+ get cellKind(): GroupRowCellKind;
22
+ /**
23
+ * The aggregate over the rows under this group, on the columns that have one. A server group brings its
24
+ * own total down with it, since the rows it is over were never in the browser to add up.
25
+ */
26
+ private readonly _aggregate;
27
+ get aggregate(): AggregateCellModel<TRow> | null;
28
+ get depthPadding(): number;
29
+ get gridColumnSpan(): number;
30
+ get widthVar(): string;
31
+ get isEndPinned(): boolean;
32
+ /** Grouping cell shows a right border only when the grouping column is left-pinned. */
33
+ get hasGroupingBorder(): boolean;
34
+ }
@@ -0,0 +1,68 @@
1
+ import { AggregateValue, Key } from '../contracts/dataGridContract';
2
+ import { default as ColumnModel } from './columnModel';
3
+ import { default as DetailRowModel } from './detailRowModel';
4
+ import { default as GridModel } from './gridModel';
5
+ import { default as GroupRowCellModel } from './groupRowCellModel';
6
+ import { default as RowModel } from './rowModel';
7
+ export default class GroupRowModel<TRow> {
8
+ readonly grid: GridModel<TRow>;
9
+ readonly groupColumn: ColumnModel<TRow>;
10
+ readonly rows: RowModel<TRow>[] | GroupRowModel<TRow>[];
11
+ readonly rowIndex: number;
12
+ constructor(grid: GridModel<TRow>, groupColumn: ColumnModel<TRow>, rows: RowModel<TRow>[] | GroupRowModel<TRow>[], rowIndex: number, groupValue: Key);
13
+ protected _groupValue: Key;
14
+ /**
15
+ * The value this group collects. A getter rather than a parameter property so a subclass can read it
16
+ * from somewhere else — a field would shadow the override outright, which is what `useDefineForClassFields`
17
+ * does to a base class's own properties.
18
+ */
19
+ get groupValue(): Key;
20
+ /** What the expand cell reads: the value, and how many rows are under it. */
21
+ get label(): string;
22
+ /** Whether the group's rows have arrived at all. Always, until a server answers a level — see `SourceGroupRowModel`. */
23
+ get placeholder(): boolean;
24
+ /** Whether the select-all checkbox is offered: a group can only select the rows the grid holds. */
25
+ get selectable(): boolean;
26
+ /**
27
+ * An aggregate the grid was handed rather than one it works out. Nothing server-side can be totalled in
28
+ * the browser — the rows are not here — so a server group row carries its own totals and this is where
29
+ * they come from; `undefined` means "compute it", which is every client-side group.
30
+ */
31
+ aggregateValue(_column: ColumnModel<TRow>): AggregateValue | undefined;
32
+ get key(): Key;
33
+ parentRow?: GroupRowModel<TRow>;
34
+ private readonly _cells;
35
+ get cells(): GroupRowCellModel<TRow>[];
36
+ /**
37
+ * The cells this row actually renders, each with the column it starts at. A `hidden` cell is a
38
+ * data column the grouping cell has absorbed into its span: no element, and nothing to navigate
39
+ * to — which is why a group row's cell positions and its `aria-colindex` values differ.
40
+ */
41
+ private readonly _renderedCells;
42
+ get renderedCells(): {
43
+ cell: GroupRowCellModel<TRow>;
44
+ columnIndex: number;
45
+ }[];
46
+ /** Fewer than the column count — the width the grid navigation sees for this row. */
47
+ get cellCount(): number;
48
+ /**
49
+ * Where a cell starts in column-index space. The cells the grouping cell spans are not rendered
50
+ * at all, so an ordinal here is short of its column by however many of them came before it.
51
+ */
52
+ columnOf(cell: number): number;
53
+ get selected(): boolean;
54
+ get indeterminate(): boolean;
55
+ get expanded(): boolean;
56
+ get depth(): number;
57
+ get count(): number;
58
+ get flatRows(): (RowModel<TRow> | GroupRowModel<TRow> | DetailRowModel<TRow>)[];
59
+ get allRows(): RowModel<TRow>[];
60
+ get groupingColumn(): ColumnModel<TRow>;
61
+ get groupingColumnGridColumn(): number;
62
+ /** Whether the label cell has swallowed this column, which is what leaves it with no cell of its own. */
63
+ spans(column: ColumnModel<TRow>): boolean;
64
+ readonly kind: "group";
65
+ toggleRow(): void;
66
+ /** Select/deselect every leaf row under this group. */
67
+ toggleSelectAll: () => void;
68
+ }
@@ -0,0 +1,83 @@
1
+ import { SortDirection } from '../contracts/dataGridContract';
2
+ import { default as ColumnModel } from './columnModel';
3
+ /** All derived state for rendering a column's header cell and its context menu. */
4
+ export default class HeaderCellModel<TRow> {
5
+ readonly column: ColumnModel<TRow>;
6
+ constructor(column: ColumnModel<TRow>);
7
+ private get grid();
8
+ /** Header label. `null` for the row-number and selection cells (rendered specially). */
9
+ get label(): string | number | null;
10
+ /**
11
+ * A name for a header that draws nothing. The row-number and row-detail columns are blank on
12
+ * screen by design, and a blank column header leaves every cell under it unlabelled — which is
13
+ * the one thing a screen reader relies on when it reads a cell out.
14
+ */
15
+ get hiddenLabel(): string | undefined;
16
+ get isSortable(): boolean;
17
+ get isSorted(): boolean;
18
+ get sortDirection(): SortDirection | undefined;
19
+ get showResizer(): boolean;
20
+ get showContextMenu(): boolean;
21
+ /** Grid column span: a leaf occupies one column, a group header spans its leaf count. */
22
+ get gridColumn(): number;
23
+ /** 1-based `aria-colindex`: the first column this header covers. */
24
+ get columnIndex(): number;
25
+ /** `aria-colspan`, left off when the header covers a single column. */
26
+ get columnSpan(): number | undefined;
27
+ /** `aria-rowspan`: a leaf declared above the deepest level reaches down to the bottom row. */
28
+ get rowSpan(): number | undefined;
29
+ /**
30
+ * `aria-sort`. A sortable column that is not the sorted one still carries `none`: that is what
31
+ * tells a screen reader the column *can* be sorted, and leaving it off says the opposite.
32
+ */
33
+ get ariaSort(): 'ascending' | 'descending' | 'none' | undefined;
34
+ /** What the resizer names itself. A separator carries no text, so it has nothing else to go on. */
35
+ get resizerLabel(): string;
36
+ /** `aria-valuenow`: how wide the column is right now, in px. */
37
+ get width(): number;
38
+ /** `aria-valuemin`: every leaf the header covers at the narrowest the grid allows. */
39
+ get minWidth(): number;
40
+ /**
41
+ * `aria-valuemax`. There is no width the grid refuses — a drag can take a column past the
42
+ * viewport and scroll to it — so the ceiling the keyboard offers is the grid's own width, raised
43
+ * to whatever a drag has already made it so that `aria-valuenow` stays inside the range.
44
+ */
45
+ get maxWidth(): number;
46
+ /** Room for the sort icon, which sits where the reading ends — so an end-aligned header needs it in front. */
47
+ get paddingStart(): number | undefined;
48
+ get paddingEnd(): number | undefined;
49
+ /** Variant flags for the header cell. */
50
+ get variant(): {
51
+ isPinned: boolean;
52
+ isFirstStartPinned: boolean;
53
+ isLastStartPinned: boolean;
54
+ isFirstEndPinned: boolean;
55
+ isLastEndPinned: boolean;
56
+ isSortable: boolean;
57
+ isRowNumber: boolean;
58
+ isFirstLeaf: boolean;
59
+ isLastLeaf: boolean;
60
+ };
61
+ /** Variant flags for the context-menu trigger button. */
62
+ get contextMenuButtonVariant(): {
63
+ isPinned: boolean;
64
+ isFirstStartPinned: boolean;
65
+ isLastStartPinned: boolean;
66
+ isFirstEndPinned: boolean;
67
+ isLastEndPinned: boolean;
68
+ isSortable: boolean;
69
+ isRowNumber: boolean;
70
+ };
71
+ private get sections();
72
+ get canSortAsc(): boolean;
73
+ get canSortDesc(): boolean;
74
+ get canClearSort(): boolean;
75
+ get canPinStart(): boolean;
76
+ get canPinEnd(): boolean;
77
+ get canUnpin(): boolean;
78
+ get canGroupBy(): boolean;
79
+ get canUnGroupAll(): boolean;
80
+ get hasSortSection(): boolean;
81
+ get hasPinSection(): boolean;
82
+ get hasGroupSection(): boolean;
83
+ }
@@ -0,0 +1,32 @@
1
+ import { PaginationState } from '../contracts/dataGridContract';
2
+ import { default as GridModel } from './gridModel';
3
+ /**
4
+ * Pagination concern: navigation state + derived row range for the bottom bar / pager.
5
+ * The coupled mutations (page-reset on filter/sort, server-state events) live on GridModel;
6
+ * this model owns the navigation behavior and derivations the UI needs.
7
+ */
8
+ export default class PaginationModel<TRow> {
9
+ readonly grid: GridModel<TRow>;
10
+ constructor(grid: GridModel<TRow>);
11
+ get isPaginated(): boolean;
12
+ get state(): PaginationState | undefined;
13
+ get pageSizeOptions(): number[] | undefined;
14
+ get page(): number;
15
+ get pageSize(): number;
16
+ get totalPages(): number;
17
+ get totalItems(): number;
18
+ get canGoPrev(): boolean;
19
+ get canGoNext(): boolean;
20
+ /** 1-based index of the first row on the current page. */
21
+ get startItem(): number;
22
+ /** 1-based index of the last row on the current page (clamped to totalItems). */
23
+ get endItem(): number;
24
+ changePage: (page: number) => void;
25
+ changePageSize: (size: number) => void;
26
+ firstPage: () => void;
27
+ prevPage: () => void;
28
+ nextPage: () => void;
29
+ lastPage: () => void;
30
+ /** Parse a raw page-jump input and navigate (clamped to [1, totalPages]); ignores non-numeric input. */
31
+ jumpToPage: (raw: string) => void;
32
+ }
@@ -0,0 +1,46 @@
1
+ import { Key } from '../contracts/dataGridContract';
2
+ import { default as CellModel } from './cellModel';
3
+ import { default as DetailRowModel } from './detailRowModel';
4
+ import { default as GridModel } from './gridModel';
5
+ import { default as GroupRowModel } from './groupRowModel';
6
+ export default class RowModel<TRow> {
7
+ readonly grid: GridModel<TRow>;
8
+ readonly rowIndex: number;
9
+ constructor(grid: GridModel<TRow>, data: TRow, rowIndex: number);
10
+ protected _data: TRow;
11
+ /**
12
+ * The row's values. A getter rather than a parameter property so a subclass can read them from
13
+ * somewhere else — `SourceRowModel` reads them out of the block cache, which is what lets a block
14
+ * arriving change what a row shows without a single model being rebuilt.
15
+ */
16
+ get data(): TRow;
17
+ private _key?;
18
+ /**
19
+ * Resolved lazily: getRowKey() can call crypto.randomUUID(), so building a model for every
20
+ * row would generate a key for thousands of off-screen rows. Only rows that actually render
21
+ * (or are otherwise inspected) pay the cost. getRowKey itself is idempotent per row.
22
+ */
23
+ get key(): Key;
24
+ parentRow?: GroupRowModel<TRow>;
25
+ readonly count = 1;
26
+ readonly kind: "row";
27
+ /** Whether this is a row the server has not sent yet — see `SourceRowModel`, which answers it live. */
28
+ get placeholder(): boolean;
29
+ /** Whether clicking the row toggles its detail panel. */
30
+ get expandOnRowClick(): boolean;
31
+ toggleDetail: () => void;
32
+ private readonly _cells;
33
+ get cells(): CellModel<TRow>[];
34
+ /** One cell per visible column — the width the grid navigation sees for this row. */
35
+ get cellCount(): number;
36
+ /** Where a cell starts in column-index space: one cell per column, so its own ordinal. */
37
+ columnOf(cell: number): number;
38
+ get selected(): boolean;
39
+ /** Half-selected, which only a tree row with the cascade on can be. */
40
+ get indeterminate(): boolean;
41
+ /** Select or deselect this row. A tree row under `selection: 'cascade'` takes its subtree with it. */
42
+ toggleSelection: () => void;
43
+ get expanded(): boolean;
44
+ get flatRows(): (RowModel<TRow> | DetailRowModel<TRow>)[];
45
+ get allRows(): this;
46
+ }