@jielga/tmdatagrid 2.0.0-beta.0 → 2.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 (52) hide show
  1. package/README.md +32 -34
  2. package/dist/index.d.ts +164 -102
  3. package/dist/index.js +2060 -1705
  4. package/dist/index.js.map +1 -1
  5. package/dist/styles.css +1 -1
  6. package/package.json +1 -1
  7. package/skills/appearance/SKILL.md +37 -34
  8. package/skills/cell-selection/SKILL.md +19 -19
  9. package/skills/columns/SKILL.md +9 -9
  10. package/skills/data/SKILL.md +53 -53
  11. package/skills/editing/SKILL.md +152 -311
  12. package/skills/editing/references/common-mistakes.md +177 -0
  13. package/skills/editing/references/editing-api.md +56 -28
  14. package/skills/editing/references/editors-and-validation.md +26 -19
  15. package/skills/filtering/SKILL.md +51 -50
  16. package/skills/getting-started/SKILL.md +10 -10
  17. package/skills/grouping/SKILL.md +41 -43
  18. package/skills/options/SKILL.md +4 -4
  19. package/skills/rows/SKILL.md +59 -59
  20. package/skills/rows/references/rows-api.md +7 -7
  21. package/skills/server-side/SKILL.md +1 -1
  22. package/skills/testing/SKILL.md +11 -10
  23. package/src/tmdatagrid/components/TMDataGrid.module.css +13 -1
  24. package/src/tmdatagrid/components/TMDataGridCellEditor.tsx +20 -8
  25. package/src/tmdatagrid/components/TMDataGridColumnsPanel.tsx +29 -18
  26. package/src/tmdatagrid/components/TMDataGridDetailsColumn.tsx +5 -8
  27. package/src/tmdatagrid/components/TMDataGridEditActions.tsx +2 -2
  28. package/src/tmdatagrid/components/TMDataGridEditColumn.tsx +246 -86
  29. package/src/tmdatagrid/components/TMDataGridEntryRows.tsx +176 -77
  30. package/src/tmdatagrid/components/TMDataGridHeaderCell.tsx +11 -6
  31. package/src/tmdatagrid/components/TMDataGridSelectColumn.tsx +9 -5
  32. package/src/tmdatagrid/components/TMDataGridTable.module.css +47 -3
  33. package/src/tmdatagrid/components/TMDataGridTable.tsx +101 -40
  34. package/src/tmdatagrid/components/editors/TMDataGridNumberEditor.tsx +1 -1
  35. package/src/tmdatagrid/components/icons.ts +1 -0
  36. package/src/tmdatagrid/core/autosize.ts +30 -6
  37. package/src/tmdatagrid/core/capabilities.ts +15 -5
  38. package/src/tmdatagrid/core/cellExport.ts +6 -7
  39. package/src/tmdatagrid/core/cellNavigation.ts +2 -2
  40. package/src/tmdatagrid/core/cellRange.ts +6 -6
  41. package/src/tmdatagrid/core/columnOrdering.ts +30 -1
  42. package/src/tmdatagrid/core/columnUtils.ts +14 -0
  43. package/src/tmdatagrid/core/draftCellContext.ts +68 -0
  44. package/src/tmdatagrid/core/editEngine.ts +111 -37
  45. package/src/tmdatagrid/core/filterOperators.ts +6 -6
  46. package/src/tmdatagrid/core/labels.ts +13 -1
  47. package/src/tmdatagrid/core/labelsSv.ts +4 -0
  48. package/src/tmdatagrid/core/matchHighlight.ts +3 -3
  49. package/src/tmdatagrid/core/persistence.ts +3 -3
  50. package/src/tmdatagrid/core/rowSelection.ts +3 -3
  51. package/src/tmdatagrid/index.ts +3 -1
  52. package/src/tmdatagrid/useTMDataGrid.tsx +141 -99
package/dist/index.d.ts CHANGED
@@ -59,9 +59,9 @@ type TMDataGridEditActionsProps = {
59
59
  renderActions?: (args: TMDataGridEditActionsSlotArgs) => ReactNode;
60
60
  };
61
61
  /**
62
- * Batch mode's toolbar chrome: Save with the dirty-row count, and Discard.
62
+ * Draft mode's toolbar chrome: Save with the dirty-row count, and Discard.
63
63
  * Both read the edit store, so they grey out while nothing is dirty and the
64
- * Save spins while a submit is in flight. Works under any `editMode` - a
64
+ * Save spins while a submit is in flight. Works under any `editing.mode` - a
65
65
  * cellConfirm grid accumulating drafts can offer the same pair - and renders
66
66
  * nothing while editing is off.
67
67
  *
@@ -204,9 +204,9 @@ declare function optionsToComboboxData(options: ReadonlyArray<TMDataGridOption>)
204
204
  * The value shape stored in `columnFilters` for every TMDataGrid column.
205
205
  *
206
206
  * TanStack resolves `filterFn` statically per column, so the operator travels
207
- * inside the filter *value* instead. That keeps the whole filter model plain,
208
- * serialisable JSON - which is what makes it portable to a server-side
209
- * `manualFiltering` table (just forward `columnFilters` to the API).
207
+ * inside the filter *value* instead. That keeps the filter model plain,
208
+ * serialisable JSON, so a server-side `manualFiltering` table can forward
209
+ * `columnFilters` to the API unchanged.
210
210
  *
211
211
  * `value` is a string array under `isAnyOf` / `isNoneOf` (the set the cell is
212
212
  * tested against), a `[min, max]` pair under `between` (an empty string means
@@ -262,7 +262,7 @@ declare function tmDataGridFilterFn<TFeatures extends TableFeatures, TData exten
262
262
  * How commits happen - one axis, each mode a thin policy over the same
263
263
  * engine. See `editMode` on `UseTMDataGridOptions`.
264
264
  */
265
- type TMDataGridEditMode = "cell" | "cellConfirm" | "row" | "batch";
265
+ type TMDataGridEditMode = "cell" | "cellConfirm" | "row" | "draft";
266
266
  /**
267
267
  * One editing row's live form. TanStack Form's `FormApi`, not a wrapper: the
268
268
  * engine is a form library, and everything mid-edit - values, dirty state,
@@ -344,6 +344,12 @@ type TMDataGridEditRowProjection = {
344
344
  /** A row-level error - a pathless `.refine()`, or a rejected commit. */
345
345
  hasRowError: boolean;
346
346
  isSubmitting: boolean;
347
+ /**
348
+ * The row as drafted - the form's `state.values`. Reference-stable while no
349
+ * value changes, so a cell may subscribe to it and repaint only when its
350
+ * row's draft actually moves.
351
+ */
352
+ values: TMDataGridRowData;
347
353
  };
348
354
  /**
349
355
  * The grid-facing index of everything mid-edit. A projection synced from the
@@ -363,15 +369,21 @@ type TMDataGridEditState = {
363
369
  } | null;
364
370
  /**
365
371
  * Rows with a live form. In cell mode at most one; in row, cellConfirm and
366
- * batch, as many as the user opened - which rows are editing.
372
+ * draft, as many as the user opened - which rows are editing.
367
373
  */
368
374
  openRowIds: ReadonlyArray<string>;
369
375
  rows: Record<string, TMDataGridEditRowProjection>;
370
- /** Phase 4 - rows being created, not yet in `data`. */
376
+ /**
377
+ * Rows being created, not yet in `data`. `confirmed` is draft mode's
378
+ * "entered, awaiting Save all": the entry row renders as a value row until
379
+ * `begin` re-opens it. Under the immediate modes a confirm commits through
380
+ * `onRowAdd` and the entry is dropped, so there it never turns `true`.
381
+ */
371
382
  newRows: ReadonlyArray<{
372
383
  tempId: string;
384
+ confirmed: boolean;
373
385
  }>;
374
- /** Phase 4 - rows marked deleted under batch mode. */
386
+ /** Rows marked deleted under draft mode. */
375
387
  deletedRowIds: ReadonlyArray<string>;
376
388
  };
377
389
  type ErasedRow = Row<TMDataGridFeatures, TMDataGridRowData>;
@@ -492,24 +504,24 @@ type TMDataGridRowDeleteArgs<TData extends RowData> = {
492
504
  rowId: string;
493
505
  row: Row<TMDataGridFeatures, TData>;
494
506
  };
495
- /** What `submitAll` hands `onEditCommitBatch` - everything pending at once. */
496
- type TMDataGridEditCommitBatchArgs<TData extends RowData> = {
507
+ /** What `submitAll` hands `onEditCommitDrafts` - everything pending at once. */
508
+ type TMDataGridEditCommitDraftsArgs<TData extends RowData> = {
497
509
  /** Every valid dirty existing row. */
498
510
  rows: Array<TMDataGridEditCommitArgs<TData>>;
499
511
  /** Every valid new row from the entry block. */
500
512
  added: Array<TMDataGridRowAddArgs<TData>>;
501
- /** Ids marked deleted while the batch accumulated. */
513
+ /** Ids marked deleted while the drafts accumulated. */
502
514
  deleted: Array<string>;
503
515
  };
504
516
  /**
505
517
  * The data path a column edits, or `null` for a column that has none.
506
518
  *
507
519
  * `accessorKey` is the true path and Form addresses fields by dot-path, so
508
- * nested rows work for free: `accessorKey: "address.city"` edits
509
- * `values.address.city`. A column built on `accessorFn` has no path and is
510
- * not editable unless `meta.edit.field` names one. TanStack's default column
511
- * id turns dots into underscores - which is why this starts from
512
- * `accessorKey`, never from `id`.
520
+ * nested rows need no extra handling: `accessorKey: "address.city"` edits
521
+ * `values.address.city`. A column built on `accessorFn` has no path and is not
522
+ * editable unless `meta.edit.field` names one. TanStack's default column id
523
+ * turns dots into underscores, which is why this starts from `accessorKey` and
524
+ * never from `id`.
513
525
  */
514
526
  declare function getEditFieldName(column: {
515
527
  columnDef: {
@@ -567,7 +579,7 @@ type TMDataGridEditApi = {
567
579
  deactivate: () => void;
568
580
  /** Drops every draft. */
569
581
  cancelAll: () => void;
570
- /** Commits every open row - batch mode's save. `true` when all landed. */
582
+ /** Commits every open row - draft mode's save. `true` when all landed. */
571
583
  submitAll: () => Promise<boolean>;
572
584
  /** Writes the type's empty value into a cell and commits it - Delete. */
573
585
  clearCell: (rowId: string, columnId: string) => Promise<boolean>;
@@ -575,12 +587,12 @@ type TMDataGridEditApi = {
575
587
  * Opens a new entry row (the sticky block under the header) seeded from
576
588
  * `newRowDefaults`. Returns its temporary id - a form with no backing row
577
589
  * yet. Committing it calls `onRowAdd` (immediate modes) or joins
578
- * `submitAll`'s `added` (batch).
590
+ * `submitAll`'s `added` (draft).
579
591
  */
580
592
  addRow: () => string;
581
593
  /**
582
594
  * Deletes a row: `onRowDelete` straight away under the immediate modes;
583
- * under batch it toggles the id in `deletedRowIds` - the row renders
595
+ * under draft it toggles the id in `deletedRowIds` - the row renders
584
596
  * struck through until `submitAll` reports it. On an uncommitted entry
585
597
  * row it just discards the entry.
586
598
  */
@@ -701,8 +713,16 @@ type TMDataGridLabels = {
701
713
  discardNewRow: string;
702
714
  /** The lane's trash can. */
703
715
  deleteRow: string;
704
- /** The lane's undo on a row marked deleted (batch). */
716
+ /** The lane's undo on a row marked deleted (draft). */
705
717
  restoreRow: string;
718
+ /** The lane's undo on a row with a dirty draft (draft) - drops it. */
719
+ revertRow: string;
720
+ /** The lane's state icon on a confirmed entry row (draft). */
721
+ rowStateNew: string;
722
+ /** The lane's state icon on a row with a dirty draft (draft). */
723
+ rowStateEdited: string;
724
+ /** The lane's state icon on a row marked deleted (draft). */
725
+ rowStateDeleted: string;
706
726
  cellCount: (count: number) => string;
707
727
  copy: string;
708
728
  exportCsv: string;
@@ -819,11 +839,11 @@ type GridState = TableState<TMDataGridFeatures>;
819
839
  /**
820
840
  * Persistence deliberately does not use Mantine's `useLocalStorage`.
821
841
  *
822
- * That hook owns a piece of state and returns `[value, setValue]`. Here the
823
- * table already owns the state and storage only mirrors it, so routing writes
842
+ * That hook holds a piece of state and returns `[value, setValue]`. Here the
843
+ * table already holds the state and storage only mirrors it, so routing writes
824
844
  * through the hook would keep a second copy and trigger a React state update on
825
845
  * every change, including every pointer move during a column resize. Its
826
- * defaults also work against this use: `getInitialValueInEffect: true` delivers
846
+ * defaults also conflict with this use: `getInitialValueInEffect: true` delivers
827
847
  * the stored value after mount, while `initialState` is only read on the first
828
848
  * render, and `sync: true` would let two open tabs overwrite each other's
829
849
  * column layout.
@@ -983,10 +1003,17 @@ type TMDataGridFeatureFlags = {
983
1003
  * its own grouping can still say `enableGrouping: true` to override.
984
1004
  */
985
1005
  grouping: boolean;
986
- /** Whether cells can be edited at all - `editMode` was set. */
1006
+ /** Whether cells can be edited at all - the `editing` option was set. */
987
1007
  editing: boolean;
988
1008
  /** The commit policy, or `null` while editing is off. */
989
1009
  editMode: TMDataGridEditMode | null;
1010
+ /**
1011
+ * Whether a confirmed entry row stays pinned in the sticky entry block
1012
+ * until Save all - `editing.newRowsSticky`, draft mode only. Off by
1013
+ * default: a confirmed row joins the scrolling flow instead, so entering
1014
+ * many rows cannot fill the viewport with sticky chrome.
1015
+ */
1016
+ editNewRowsSticky: boolean;
990
1017
  /** The generated row-number gutter - `enableRowNumbers`. Off by default. */
991
1018
  rowNumbers: boolean;
992
1019
  /**
@@ -1003,7 +1030,7 @@ type TMDataGridFeatureFlags = {
1003
1030
  */
1004
1031
  matchHighlighting: boolean;
1005
1032
  };
1006
- declare function readFeatureFlags<TData extends RowData>(options: Pick<UseTMDataGridOptions<TData>, "enableSorting" | "enableColumnFilters" | "enableGlobalFilter" | "enableHiding" | "enableColumnPinning" | "enableColumnResizing" | "enableColumnOrdering" | "enableRowSelection" | "enableMultiRowSelection" | "selectionMode" | "showSelectedBackground" | "cellSelection" | "enablePagination" | "manualPagination" | "enableGrouping" | "editMode" | "enableRowNumbers" | "enableRowPinning" | "enableMatchHighlighting">): TMDataGridFeatureFlags;
1033
+ declare function readFeatureFlags<TData extends RowData>(options: Pick<UseTMDataGridOptions<TData>, "enableSorting" | "enableColumnFilters" | "enableGlobalFilter" | "enableHiding" | "enableColumnPinning" | "enableColumnResizing" | "enableColumnOrdering" | "enableRowSelection" | "enableMultiRowSelection" | "selectionMode" | "showSelectedBackground" | "cellSelection" | "enablePagination" | "manualPagination" | "enableGrouping" | "editing" | "enableRowNumbers" | "enableRowPinning" | "enableMatchHighlighting">): TMDataGridFeatureFlags;
1007
1034
  /**
1008
1035
  * What one column's header may offer.
1009
1036
  *
@@ -1049,8 +1076,8 @@ declare function getGridCapabilities(table: TMDataGridTable<TMDataGridRowData>,
1049
1076
  * Ids, because every other thing the grid does moves cells around: sorting
1050
1077
  * reorders rows, filtering removes them, dragging a header reorders columns. A
1051
1078
  * coordinate pair would silently come to mean a different cell after any of
1052
- * them, while a pair of ids either still resolves or does not resolve at all -
1053
- * and "does not resolve" is a state the grid can handle honestly.
1079
+ * them, while a pair of ids either still resolves or does not resolve at all,
1080
+ * and the grid handles "does not resolve" explicitly.
1054
1081
  *
1055
1082
  * Indices are what navigation is actually computed in, so they are resolved
1056
1083
  * from the ids on each keystroke and turned straight back. See resolveCellMove.
@@ -1129,11 +1156,11 @@ type ResolveRangeBoundsArgs = {
1129
1156
  * Turns a range into the rectangle to paint and copy, or `null` when either
1130
1157
  * corner no longer exists.
1131
1158
  *
1132
- * A corner goes missing whenever a filter drops its row or a column is hidden,
1133
- * and the honest answer then is that there is no rectangle - better than
1134
- * guessing at a replacement corner and quietly copying cells the user never
1135
- * selected. The range itself is left alone: clearing it here would throw away
1136
- * a selection that comes straight back when the filter is lifted.
1159
+ * A corner goes missing whenever a filter drops its row or a column is hidden.
1160
+ * There is then no rectangle, rather than a guessed replacement corner that
1161
+ * would copy cells the user never selected. The range itself is left alone:
1162
+ * clearing it here would discard a selection that returns as soon as the filter
1163
+ * is cleared.
1137
1164
  */
1138
1165
  declare function resolveRangeBounds({ range, rowIndexOf, columnIndexOf }: ResolveRangeBoundsArgs): TMDataGridRangeBounds | null;
1139
1166
  /** Whether a cell is inside the rectangle. */
@@ -1141,7 +1168,7 @@ declare function isWithinBounds(bounds: TMDataGridRangeBounds | null, rowIndex:
1141
1168
  /** How many cells the rectangle covers. `0` for no range at all. */
1142
1169
  declare function boundsCellCount(bounds: TMDataGridRangeBounds | null): number;
1143
1170
  /**
1144
- * Which edges of the rectangle a cell sits on, for the outline.
1171
+ * Which edges of the rectangle a cell lies on, for the outline.
1145
1172
  *
1146
1173
  * The border is drawn per cell rather than as one box over the top, because the
1147
1174
  * body is a scrolling CSS grid with sticky columns in it: an overlay would have
@@ -1157,14 +1184,14 @@ declare function boundsEdges(bounds: TMDataGridRangeBounds | null, rowIndex: num
1157
1184
  //#endregion
1158
1185
  //#region .types-tmp/useTMDataGrid.d.ts
1159
1186
  /**
1160
- * Per-column configuration the TMDataGrid chrome reads.
1187
+ * Per-column configuration the grid's own components read.
1161
1188
  *
1162
- * A stage that owns behaviour gets a namespace - `filter` and `edit`, each
1189
+ * The filter and edit stages each get a namespace, `filter` and `edit`,
1163
1190
  * mirroring the feature's runtime API. What the column *is* stays flat:
1164
1191
  * `label`, `type`, `options`, `align`, `flex`, `autoSize`, `enableOrdering`.
1165
- * `type` and `options` in particular are shared ground - one declaration of
1166
- * each feeds the filter panel and the cell editor alike, which is why they sit
1167
- * outside both namespaces.
1192
+ * `type` and `options` are read by both stages, so one declaration of each
1193
+ * feeds the filter panel and the cell editor, which is why they sit outside
1194
+ * both namespaces.
1168
1195
  */
1169
1196
  type TMDataGridColumnMeta = {
1170
1197
  /** Name shown in menus and the column manager. Falls back to a string header. */
@@ -1515,7 +1542,7 @@ type TMDataGridApi<TData extends RowData> = {
1515
1542
  * The edit engine - open forms, dirty/error projections, and the verbs
1516
1543
  * (`begin`, `commit`, `cancel`, `submitAll`). `edit.getForm(rowId)` hands
1517
1544
  * out the same TanStack Form the inline editors write through, so a drawer
1518
- * or detail panel can share a row's draft. Inert until `editMode` is set.
1545
+ * or detail panel can share a row's draft. Inert until `editing` is set.
1519
1546
  */
1520
1547
  edit: TMDataGridEditApi;
1521
1548
  /** Table-level feature switches, re-read from options on every render. */
@@ -1558,19 +1585,13 @@ type TMDataGridApi<TData extends RowData> = {
1558
1585
  */
1559
1586
  scrollToRow: (args: TMDataGridScrollToRowArgs) => boolean;
1560
1587
  /**
1561
- * @internal Wiring for `TMDataGrid.Table`, which owns the virtualizer and
1562
- * fills this in. Not part of the supported surface.
1588
+ * @internal Wiring for `TMDataGrid.Table`, which holds the virtualizer and
1589
+ * fills this in. Not part of the public API.
1563
1590
  */
1564
1591
  scrollerRef: MutableRefObject<TMDataGridScroller>;
1565
1592
  };
1566
- /** The editing callbacks every mode shares. See {@link TMDataGridEditingOptions}. */
1593
+ /** The editing members every mode shares. See {@link TMDataGridEditingOptions}. */
1567
1594
  type TMDataGridEditingCallbacks<TData extends RowData> = {
1568
- /**
1569
- * `getRowId` stops being optional once editing is on: the forms are keyed
1570
- * by row id and live outside the DOM, and the index fallback points at a
1571
- * different record after any sort.
1572
- */
1573
- getRowId: NonNullable<TableOptions<TMDataGridFeatures, TData>["getRowId"]>;
1574
1595
  /**
1575
1596
  * Form-level validators for the whole editing row - where cross-field
1576
1597
  * rules live. TanStack Form's own vocabulary, Standard Schema included:
@@ -1596,10 +1617,10 @@ type TMDataGridEditingCallbacks<TData extends RowData> = {
1596
1617
  * draft visible with a busy marker - and a rejection keeps the form open
1597
1618
  * with the error on the row.
1598
1619
  *
1599
- * `changes` is the per-field diff (one entry in cell mode) for consumers
1600
- * who PATCH; `value` is the whole edited row for those who save records.
1620
+ * `changes` is the per-field diff (one entry in cell mode), for a PATCH.
1621
+ * `value` is the entire edited row, for saving a record.
1601
1622
  */
1602
- onEditCommit?: (args: TMDataGridEditCommitArgs<TData>) => void | Promise<void>;
1623
+ onCommit?: (args: TMDataGridEditCommitArgs<TData>) => void | Promise<void>;
1603
1624
  /**
1604
1625
  * Seed values for `edit.addRow()` - the entry row's starting point. A
1605
1626
  * function is called per added row (fresh timestamps, empty arrays).
@@ -1607,34 +1628,37 @@ type TMDataGridEditingCallbacks<TData extends RowData> = {
1607
1628
  newRowDefaults?: TData | (() => TData);
1608
1629
  /**
1609
1630
  * Called when an entry row commits: `Enter` or the lane's ✓ under the
1610
- * immediate modes, `submitAll` under batch. Create the record and let it
1631
+ * immediate modes, `submitAll` under draft. Create the record and let it
1611
1632
  * arrive back through `data`; the engine's `tempId` never leaves the grid.
1612
1633
  */
1613
1634
  onRowAdd?: (args: TMDataGridRowAddArgs<TData>) => void | Promise<void>;
1614
1635
  /**
1615
1636
  * Called by `edit.deleteRow` under the immediate modes - confirmation, if
1616
- * any, belongs in here. Under batch, deletions accumulate in
1637
+ * any, belongs in here. Under draft, deletions accumulate in
1617
1638
  * `edit.state.deletedRowIds` instead and are reported by `submitAll`.
1618
1639
  * Setting this also puts the trash can in the edit lane.
1619
1640
  */
1620
1641
  onRowDelete?: (args: TMDataGridRowDeleteArgs<TData>) => void | Promise<void>;
1621
1642
  };
1622
1643
  /**
1623
- * The editing options travel together, and the type states it: without
1624
- * `editMode` none of them has anything to act on, so passing one is a
1625
- * compile error rather than a dead option; with it, `getRowId` becomes
1626
- * required; and `onEditCommitBatch` exists only under `"batch"` - the one
1627
- * mode whose `submitAll` calls it.
1628
- *
1629
- * `editMode` itself turns cell editing on and picks how commits happen. Off
1630
- * by default.
1644
+ * The `editing` option: one object that turns editing on and holds
1645
+ * everything about it. `mode` picks what counts as a commit and which
1646
+ * controls trigger it; the other members act within that mode.
1631
1647
  *
1632
1648
  * | Mode | Commit | Cancel |
1633
1649
  * | ---- | ------ | ------ |
1634
1650
  * | `"cell"` | Enter, Tab, blur - Sheets | Escape |
1635
1651
  * | `"cellConfirm"` | ✓ or Enter only; blur keeps the draft | ✕ or Escape |
1636
1652
  * | `"row"` | Save in the edit lane, or Ctrl+Enter | Cancel, or Escape |
1637
- * | `"batch"` | `edit.submitAll()` | `edit.cancelAll()` |
1653
+ * | `"draft"` | `edit.submitAll()` | `edit.cancelAll()` |
1654
+ *
1655
+ * Setting `editing` makes `getRowId` required - drafts are keyed by row id,
1656
+ * and the index fallback would name a different record after any sort - and
1657
+ * `onCommitDrafts` exists only under `mode: "draft"`, the one mode whose
1658
+ * `submitAll` calls it.
1659
+ *
1660
+ * The object may be written inline: the callbacks are read through a ref
1661
+ * every render, so its identity does not matter.
1638
1662
  *
1639
1663
  * One TanStack Form per editing row; drafts survive scrolling because the
1640
1664
  * forms live outside the DOM, keyed by row id. Which columns edit, and with
@@ -1642,30 +1666,42 @@ type TMDataGridEditingCallbacks<TData extends RowData> = {
1642
1666
  * built-in editor, and `enabled`, `field`, `editor`, `validate` and `mapValue`
1643
1667
  * override the rest.
1644
1668
  */
1645
- type TMDataGridEditingOptions<TData extends RowData> = (TMDataGridEditingCallbacks<TData> & {
1646
- editMode: "batch";
1669
+ type TMDataGridEditingOptions<TData extends RowData> = TMDataGridEditingCallbacks<TData> & ({
1670
+ mode: "draft";
1647
1671
  /**
1648
- * Batch mode's save, called once by `edit.submitAll()` with every
1672
+ * Draft mode's save, called once by `edit.submitAll()` with every
1649
1673
  * valid dirty row. Without it, `submitAll` falls back to the per-row
1650
- * {@link TMDataGridEditingCallbacks.onEditCommit} loop. Rows failing
1674
+ * {@link TMDataGridEditingCallbacks.onCommit} loop. Rows failing
1651
1675
  * validation stay open either way; a rejection keeps every draft.
1652
1676
  */
1653
- onEditCommitBatch?: (args: TMDataGridEditCommitBatchArgs<TData>) => void | Promise<void>;
1654
- }) | (TMDataGridEditingCallbacks<TData> & {
1655
- editMode: Exclude<TMDataGridEditMode, "batch">;
1656
- /** Only `"batch"`'s `submitAll` ever calls it - see the other branch. */
1657
- onEditCommitBatch?: never;
1658
- }) | {
1659
- editMode?: never;
1660
- rowValidators?: never;
1661
- isRowEditable?: never;
1662
- onEditCommit?: never;
1663
- onEditCommitBatch?: never;
1664
- newRowDefaults?: never;
1665
- onRowAdd?: never;
1666
- onRowDelete?: never;
1667
- };
1668
- type UseTMDataGridOptions<TData extends RowData> = Omit<TableOptions<TMDataGridFeatures, TData>, "features"> & TMDataGridEditingOptions<TData> & {
1677
+ onCommitDrafts?: (args: TMDataGridEditCommitDraftsArgs<TData>) => void | Promise<void>;
1678
+ /**
1679
+ * Keep confirmed entry rows pinned in the sticky entry block until
1680
+ * Save all. Off by default: a confirmed row joins the scrolling
1681
+ * flow above the body rows instead - the block a row is *typed*
1682
+ * into is always sticky, but entered rows scroll, so entering many
1683
+ * cannot fill the viewport with sticky chrome.
1684
+ */
1685
+ newRowsSticky?: boolean;
1686
+ } | {
1687
+ mode: Exclude<TMDataGridEditMode, "draft">;
1688
+ /** Only `"draft"`'s `submitAll` ever calls it - see the other branch. */
1689
+ onCommitDrafts?: never;
1690
+ /** Confirmed entry rows exist only under `"draft"` - see there. */
1691
+ newRowsSticky?: never;
1692
+ });
1693
+ type UseTMDataGridOptions<TData extends RowData> = Omit<TableOptions<TMDataGridFeatures, TData>, "features"> & ({
1694
+ editing?: undefined;
1695
+ } | {
1696
+ /** Turns editing on. See {@link TMDataGridEditingOptions}. */
1697
+ editing: TMDataGridEditingOptions<TData>;
1698
+ /**
1699
+ * Required once `editing` is set: the forms are keyed by row id and
1700
+ * live outside the DOM, and the index fallback points at a different
1701
+ * record after any sort.
1702
+ */
1703
+ getRowId: NonNullable<TableOptions<TMDataGridFeatures, TData>["getRowId"]>;
1704
+ }) & {
1669
1705
  /**
1670
1706
  * Restore and persist table state across mounts. Two keys, because the two
1671
1707
  * kinds of state have different lifetimes - see {@link TMDataGridPersistence}.
@@ -1885,9 +1921,9 @@ type UseTMDataGridOptions<TData extends RowData> = Omit<TableOptions<TMDataGridF
1885
1921
  * Defaults to 160.
1886
1922
  *
1887
1923
  * An estimate, not a height: every mounted row is measured, so the real one
1888
- * takes over as soon as the panel is on screen. It keeps the scrollbar honest
1889
- * for panels that open off screen (restored `expanded` state, say), and being
1890
- * roughly right is enough.
1924
+ * takes over as soon as the panel is on screen. It keeps the scrollbar
1925
+ * accurate for panels that open off screen, such as restored `expanded`
1926
+ * state. An approximate value is enough.
1891
1927
  */
1892
1928
  renderDetailsEstHeight?: number;
1893
1929
  /**
@@ -1911,7 +1947,7 @@ type UseTMDataGridOptions<TData extends RowData> = Omit<TableOptions<TMDataGridF
1911
1947
  * flag on, so `<TMDataGrid.Footer />` renders its pager without further
1912
1948
  * options.
1913
1949
  */
1914
- declare function useTMDataGrid<TData extends RowData>({ persist, labels: labelsOverride, enableColumnOrdering, enablePagination, enableRowNumbers, selectionMode, showSelectedBackground, defaultHighlightedRowId, onHighlightedRowChange, cellSelection, onFocusedCellChange, editMode, rowValidators, isRowEditable, onEditCommit, onEditCommitBatch, newRowDefaults, onRowAdd, onRowDelete, renderDetails, renderDetailsEstHeight, overscan, ...options }: UseTMDataGridOptions<TData>): TMDataGridApi<TData>;
1950
+ declare function useTMDataGrid<TData extends RowData>({ persist, labels: labelsOverride, enableColumnOrdering, enablePagination, enableRowNumbers, selectionMode, showSelectedBackground, defaultHighlightedRowId, onHighlightedRowChange, cellSelection, onFocusedCellChange, editing, renderDetails, renderDetailsEstHeight, overscan, ...options }: UseTMDataGridOptions<TData>): TMDataGridApi<TData>;
1915
1951
  /**
1916
1952
  * Opens the filter panel for a column, seeding an empty filter row when the
1917
1953
  * column has none yet - mirrors "Filter" in the column header menu.
@@ -2213,9 +2249,9 @@ declare function toClipboardText(matrix: TMDataGridCellMatrix): string;
2213
2249
  * | UTF-8 BOM | without it Excel reads the file as ANSI, and å ä ö arrive broken |
2214
2250
  * | CRLF line endings | what Excel writes, and what its importer is happiest with |
2215
2251
  *
2216
- * The `sep=` line is Excel's alone; other readers show it as a first row. That
2217
- * is the trade this makes - the file is for Excel, and "it just opens" is worth
2218
- * more than being a well-behaved CSV nobody was going to feed to a parser.
2252
+ * The `sep=` line is Excel's alone; other readers show it as a first row. This
2253
+ * export targets Excel, so opening correctly there takes priority over strict
2254
+ * CSV.
2219
2255
  */
2220
2256
  declare function toExcelCsv(matrix: TMDataGridCellMatrix, { separator }: {
2221
2257
  separator: string;
@@ -2226,7 +2262,7 @@ declare function toExcelCsv(matrix: TMDataGridCellMatrix, { separator }: {
2226
2262
  * The async clipboard API only resolves for a document that has the focus and a
2227
2263
  * user gesture behind it - both true when this runs off Ctrl+C or a menu item.
2228
2264
  * It is still allowed to reject (a permissions policy, a page that lost focus
2229
- * mid-copy), so the result is a boolean rather than a promise nobody checks.
2265
+ * mid-copy), so the result is a boolean the caller can act on.
2230
2266
  */
2231
2267
  declare function writeClipboardText(text: string): Promise<boolean>;
2232
2268
  /**
@@ -2473,9 +2509,9 @@ type TMDataGridTableProps<TData extends RowData> = {
2473
2509
  */
2474
2510
  reachEndThreshold?: number;
2475
2511
  /**
2476
- * Accessible name for the grid - what a screen reader announces on entry,
2477
- * and what `getByRole("grid", { name })` matches. Worth setting on any page
2478
- * holding more than one grid; without it they are all just "grid".
2512
+ * Accessible name for the grid: what a screen reader announces on entry, and
2513
+ * what `getByRole("grid", { name })` matches. Set it on any page holding more
2514
+ * than one grid; without it they are all announced as "grid".
2479
2515
  */
2480
2516
  "aria-label"?: string;
2481
2517
  /** As {@link "aria-label"}, pointing at an element that already names it. */
@@ -2483,9 +2519,9 @@ type TMDataGridTableProps<TData extends RowData> = {
2483
2519
  };
2484
2520
  /**
2485
2521
  * The scrollable grid surface. Always virtualized: only the rows inside the
2486
- * viewport (plus overscan) are mounted - which is what makes the default
2487
- * no-pagination mode viable at any row count. Pagination is opt-in via
2488
- * `enablePagination` (or implied by `manualPagination`).
2522
+ * viewport (plus overscan) are mounted, which is what makes the default
2523
+ * no-pagination mode work at any row count. Pagination is opt in through
2524
+ * `enablePagination`, or implied by `manualPagination`.
2489
2525
  */
2490
2526
  declare function TMDataGridTable$1<TData extends RowData = TMDataGridRowData>({ onRowClick, onCellClick, onCellDoubleClick, onCellContextMenu, rowClassName, rowStyle, striped, onScrollToTop, onScrollToBottom, onScrollToLeft, onScrollToRight, renderEmptyState, renderRowContextMenu, renderColumnMenuItems, rowContextMenuProps, cellExport, onReachEnd, reachEndThreshold, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy }: TMDataGridTableProps<TData>): import("react").JSX.Element;
2491
2527
  //#endregion
@@ -2775,6 +2811,16 @@ declare function isColumnEditableForRow(column: ColumnLike, row: Row<TMDataGridF
2775
2811
  * chevron, and wants the padding.
2776
2812
  */
2777
2813
  declare function isControlColumn(columnId: string): boolean;
2814
+ /**
2815
+ * Whether the grid generated this column rather than the consumer declaring it
2816
+ * - the four control lanes plus the tree column.
2817
+ *
2818
+ * These hold the grid's own chrome, and they keep the edges of the row: the
2819
+ * generated left lanes before every consumer column, the edit lane after all of
2820
+ * them. `isControlColumn` answers a narrower question about layout, and leaves
2821
+ * the tree column out because it is padded like a data column.
2822
+ */
2823
+ declare function isGeneratedColumn(columnId: string): boolean;
2778
2824
  /**
2779
2825
  * Whether a column may be moved. Ordering is the one column feature TanStack
2780
2826
  * has no column option for, so the switch lives in `meta.enableOrdering`.
@@ -2829,7 +2875,9 @@ declare function aggregateColumn<TData extends RowData>({ table, columnId, fn }:
2829
2875
  *
2830
2876
  * Mounted cells only: under virtualization the unmounted rows do not exist to
2831
2877
  * be measured, so this reads the visible window plus overscan - the same
2832
- * trade AG Grid's autosize makes by default.
2878
+ * trade AG Grid's autosize makes by default. With no rows mounted at all the
2879
+ * header is the only thing left to measure, which is a width that fits the
2880
+ * title and nothing else - see `hasMountedCells`.
2833
2881
  */
2834
2882
  declare function measureColumnContentWidth({ container, columnId }: {
2835
2883
  /** The grid's scroll container - anything enclosing the column's cells. */
@@ -2928,6 +2976,20 @@ type MoveColumnArgs = {
2928
2976
  * updates that array as well.
2929
2977
  */
2930
2978
  declare function moveColumn({ table, columnId, targetId, side }: MoveColumnArgs): void;
2979
+ /**
2980
+ * Puts the generated lanes back on the outside of both pinned lanes: the ones
2981
+ * on the left before every consumer column, the edit lane after all of them.
2982
+ *
2983
+ * `column.pin("right")` appends, so pinning a column right would otherwise drop
2984
+ * it outside the edit lane, so the row's Save and Delete would no longer be
2985
+ * last in the row. Pinning left appends too, which is already correct there,
2986
+ * but the same pass keeps both lanes in place whatever a consumer writes into
2987
+ * `columnPinning` directly.
2988
+ *
2989
+ * Relative order is preserved inside each part, so a user's own arrangement of
2990
+ * the pinned columns survives.
2991
+ */
2992
+ declare function keepGeneratedColumnsOutermost(pinning: ColumnPinningState): ColumnPinningState;
2931
2993
  type ColumnStepArgs = {
2932
2994
  table: GridTable;
2933
2995
  columnId: string;
@@ -2998,9 +3060,9 @@ type ResolveRowSelectionClickArgs<TData extends RowData> = {
2998
3060
  /**
2999
3061
  * Whether this gesture is allowed to clear rows it did not touch.
3000
3062
  *
3001
- * `true` for a bare row click, where replacing is the whole point. `false` for
3002
- * a checkbox, which is only ever additive - ticking one box has never cleared
3003
- * the others, and shift-clicking one adds the range rather than becoming it.
3063
+ * `true` for a bare row click, which replaces the selection. `false` for a
3064
+ * checkbox, which is only ever additive: ticking one box does not clear the
3065
+ * others, and shift-clicking one adds the range rather than replacing it.
3004
3066
  */
3005
3067
  canReplaceSelection: boolean;
3006
3068
  };
@@ -3044,4 +3106,4 @@ declare function getSelectableRowIds<TData extends RowData>(row: Row<TMDataGridF
3044
3106
  */
3045
3107
  declare function resolveRowSelectionClick<TData extends RowData>({ rows, rowId, anchorRowId, modifiers, selection, canReplaceSelection }: ResolveRowSelectionClickArgs<TData>): ResolvedRowSelection;
3046
3108
  //#endregion
3047
- export { type BuildCellMatrixArgs, type ColumnStepArgs, DATA_STATE_SLICES, DEFAULT_CELL_EXPORT_OPTIONS, DEFAULT_TMDATAGRID_SIZE, DETAILS_COLUMN_ID, DgAutocompleteFilter, DgDateRangeFilter, DgRangeSliderFilter, DgTriStateFilter, EDIT_COLUMN_ID, FILTER_OPERATOR_LABELS, GROUP_COLUMN_ID, type MoveColumnArgs, PERSIST_PAYLOAD_VERSION, ROW_NUMBER_COLUMN_ID, type ResolveCellMoveArgs, type ResolveRangeBoundsArgs, type ResolveRowSelectionClickArgs, type ResolvedRowSelection, SELECT_COLUMN_ID, SETTINGS_STATE_SLICES, SIZE_CONTROL_SIZE, SIZE_ROW_HEIGHT, TMDATAGRID_LABELS_EN, TMDATAGRID_LABELS_SV, TMDataGrid, type TMDataGridAggregationName, type TMDataGridApi, TMDataGridBooleanEditor, type TMDataGridCapabilities, type TMDataGridCellCoords, type TMDataGridCellEventArgs, type TMDataGridCellExportOptions, type TMDataGridCellMatrix, type TMDataGridCellNav, type TMDataGridCellPosition, type TMDataGridCellRange, type TMDataGridCellSelectionMode, type TMDataGridColumnCapabilities, type TMDataGridColumnEditOptions, type TMDataGridColumnFilterOptions, type TMDataGridColumnLayout, type TMDataGridColumnMenuItemsArgs, type TMDataGridColumnMenuItemsRenderer, type TMDataGridColumnMeta, type TMDataGridColumnRegion, type TMDataGridColumnType, type TMDataGridContextValue, type TMDataGridDataSlice, TMDataGridDateEditor, type TMDataGridDetailsArgs, type TMDataGridDetailsRenderer, type TMDataGridDropSide, TMDataGridEditActions, type TMDataGridEditActionsActions, type TMDataGridEditActionsControls, type TMDataGridEditActionsProps, type TMDataGridEditActionsSlotArgs, type TMDataGridEditActionsState, type TMDataGridEditApi, type TMDataGridEditChange, type TMDataGridEditCommitArgs, type TMDataGridEditCommitBatchArgs, type TMDataGridEditField, type TMDataGridEditMode, type TMDataGridEditRowProjection, type TMDataGridEditState, type TMDataGridEditValueMap, type TMDataGridEditValueMapArgs, type TMDataGridEditingOptions, type TMDataGridEditorArgs, type TMDataGridEditorComponent, type TMDataGridExpandAllArgs, type TMDataGridExpandTarget, type TMDataGridFeatureFlags, type TMDataGridFeatures, type TMDataGridFieldValidate, type TMDataGridFilterControlArgs, type TMDataGridFilterControlComponent, type TMDataGridFilterOperator, TMDataGridFilterPills, type TMDataGridFilterPillsProps, type TMDataGridFilterValue, TMDataGridFilterValueInput, type TMDataGridFooterProps, type TMDataGridLabels, type TMDataGridLabelsOverride, TMDataGridMultiSelectEditor, TMDataGridNumberEditor, type TMDataGridOption, type TMDataGridOptionsArgs, type TMDataGridOptionsSource, type TMDataGridPaginationActions, type TMDataGridPaginationApi, type TMDataGridPaginationControls, type TMDataGridPaginationSlotArgs, type TMDataGridPaginationState, type TMDataGridPersistKey, type TMDataGridPersistence, type TMDataGridProps, type TMDataGridQuickSearchMode, type TMDataGridRangeBounds, type TMDataGridRowAddArgs, type TMDataGridRowClickModifiers, type TMDataGridRowContextMenuArgs, type TMDataGridRowContextMenuRenderer, type TMDataGridRowData, type TMDataGridRowDeleteArgs, type TMDataGridRowEditForm, type TMDataGridRowStyle, type TMDataGridRowValidators, type TMDataGridScrollAlign, type TMDataGridScrollToRowArgs, TMDataGridSearch, type TMDataGridSearchProps, TMDataGridSelectEditor, type TMDataGridSelectionMode, type TMDataGridSettingsSlice, type TMDataGridSize, type TMDataGridStorageMode, TMDataGridStringEditor, type TMDataGridTable, type TMDataGridTableMeta, type TMDataGridTableProps, type TMDataGridUiActions, type TMDataGridUiState, type TMDataGridUiStore, type UseTMDataGridOptions, aggregateColumn, areAllRowsExpanded, autosizeColumn, boundsCellCount, boundsEdges, buildCellMatrix, buildGridCellMatrix, clearedValueForType, createTMDataGridColumnHelper, downloadTextFile, emptyValueForOperator, exportGridToCsv, formatExportValue, formatFilterLabel, formatGroupValue, fuzzyGlobalFilterFn, getColumnCapabilities, getColumnDefaultOperator, getColumnFilterControl, getColumnLabel, getColumnRegion, getColumnType, getDefaultOperator, getDisplayedRows, getEditFieldName, getGridCapabilities, getGroupDataRows, getOperatorsForType, getSelectableRowIds, getStepTargetColumn, getTMDataGridPaginationApi, isColumnEditableForRow, isColumnReorderable, isControlColumn, isFilterActive, isPagingActive, isSameCell, isWithinBounds, measureColumnContentWidth, mergeLabels, moveColumn, moveColumnByStep, normalizeFieldValidate, openColumnFilter, operatorNeedsValue, operatorTakesArrayValue, operatorTakesRangeValue, optionsToComboboxData, readFeatureFlags, resolveCellMove, resolveColumnOptions, resolveExpandAll, resolveRangeBounds, resolveRowSelectionClick, tmDataGridFeatures, toClipboardText, toExcelCsv, useCellControlTabIndex, useTMDataGrid, useTMDataGridContext, writeClipboardText };
3109
+ export { type BuildCellMatrixArgs, type ColumnStepArgs, DATA_STATE_SLICES, DEFAULT_CELL_EXPORT_OPTIONS, DEFAULT_TMDATAGRID_SIZE, DETAILS_COLUMN_ID, DgAutocompleteFilter, DgDateRangeFilter, DgRangeSliderFilter, DgTriStateFilter, EDIT_COLUMN_ID, FILTER_OPERATOR_LABELS, GROUP_COLUMN_ID, type MoveColumnArgs, PERSIST_PAYLOAD_VERSION, ROW_NUMBER_COLUMN_ID, type ResolveCellMoveArgs, type ResolveRangeBoundsArgs, type ResolveRowSelectionClickArgs, type ResolvedRowSelection, SELECT_COLUMN_ID, SETTINGS_STATE_SLICES, SIZE_CONTROL_SIZE, SIZE_ROW_HEIGHT, TMDATAGRID_LABELS_EN, TMDATAGRID_LABELS_SV, TMDataGrid, type TMDataGridAggregationName, type TMDataGridApi, TMDataGridBooleanEditor, type TMDataGridCapabilities, type TMDataGridCellCoords, type TMDataGridCellEventArgs, type TMDataGridCellExportOptions, type TMDataGridCellMatrix, type TMDataGridCellNav, type TMDataGridCellPosition, type TMDataGridCellRange, type TMDataGridCellSelectionMode, type TMDataGridColumnCapabilities, type TMDataGridColumnEditOptions, type TMDataGridColumnFilterOptions, type TMDataGridColumnLayout, type TMDataGridColumnMenuItemsArgs, type TMDataGridColumnMenuItemsRenderer, type TMDataGridColumnMeta, type TMDataGridColumnRegion, type TMDataGridColumnType, type TMDataGridContextValue, type TMDataGridDataSlice, TMDataGridDateEditor, type TMDataGridDetailsArgs, type TMDataGridDetailsRenderer, type TMDataGridDropSide, TMDataGridEditActions, type TMDataGridEditActionsActions, type TMDataGridEditActionsControls, type TMDataGridEditActionsProps, type TMDataGridEditActionsSlotArgs, type TMDataGridEditActionsState, type TMDataGridEditApi, type TMDataGridEditChange, type TMDataGridEditCommitArgs, type TMDataGridEditCommitDraftsArgs, type TMDataGridEditField, type TMDataGridEditMode, type TMDataGridEditRowProjection, type TMDataGridEditState, type TMDataGridEditValueMap, type TMDataGridEditValueMapArgs, type TMDataGridEditingOptions, type TMDataGridEditorArgs, type TMDataGridEditorComponent, type TMDataGridExpandAllArgs, type TMDataGridExpandTarget, type TMDataGridFeatureFlags, type TMDataGridFeatures, type TMDataGridFieldValidate, type TMDataGridFilterControlArgs, type TMDataGridFilterControlComponent, type TMDataGridFilterOperator, TMDataGridFilterPills, type TMDataGridFilterPillsProps, type TMDataGridFilterValue, TMDataGridFilterValueInput, type TMDataGridFooterProps, type TMDataGridLabels, type TMDataGridLabelsOverride, TMDataGridMultiSelectEditor, TMDataGridNumberEditor, type TMDataGridOption, type TMDataGridOptionsArgs, type TMDataGridOptionsSource, type TMDataGridPaginationActions, type TMDataGridPaginationApi, type TMDataGridPaginationControls, type TMDataGridPaginationSlotArgs, type TMDataGridPaginationState, type TMDataGridPersistKey, type TMDataGridPersistence, type TMDataGridProps, type TMDataGridQuickSearchMode, type TMDataGridRangeBounds, type TMDataGridRowAddArgs, type TMDataGridRowClickModifiers, type TMDataGridRowContextMenuArgs, type TMDataGridRowContextMenuRenderer, type TMDataGridRowData, type TMDataGridRowDeleteArgs, type TMDataGridRowEditForm, type TMDataGridRowStyle, type TMDataGridRowValidators, type TMDataGridScrollAlign, type TMDataGridScrollToRowArgs, TMDataGridSearch, type TMDataGridSearchProps, TMDataGridSelectEditor, type TMDataGridSelectionMode, type TMDataGridSettingsSlice, type TMDataGridSize, type TMDataGridStorageMode, TMDataGridStringEditor, type TMDataGridTable, type TMDataGridTableMeta, type TMDataGridTableProps, type TMDataGridUiActions, type TMDataGridUiState, type TMDataGridUiStore, type UseTMDataGridOptions, aggregateColumn, areAllRowsExpanded, autosizeColumn, boundsCellCount, boundsEdges, buildCellMatrix, buildGridCellMatrix, clearedValueForType, createTMDataGridColumnHelper, downloadTextFile, emptyValueForOperator, exportGridToCsv, formatExportValue, formatFilterLabel, formatGroupValue, fuzzyGlobalFilterFn, getColumnCapabilities, getColumnDefaultOperator, getColumnFilterControl, getColumnLabel, getColumnRegion, getColumnType, getDefaultOperator, getDisplayedRows, getEditFieldName, getGridCapabilities, getGroupDataRows, getOperatorsForType, getSelectableRowIds, getStepTargetColumn, getTMDataGridPaginationApi, isColumnEditableForRow, isColumnReorderable, isControlColumn, isFilterActive, isGeneratedColumn, isPagingActive, isSameCell, isWithinBounds, keepGeneratedColumnsOutermost, measureColumnContentWidth, mergeLabels, moveColumn, moveColumnByStep, normalizeFieldValidate, openColumnFilter, operatorNeedsValue, operatorTakesArrayValue, operatorTakesRangeValue, optionsToComboboxData, readFeatureFlags, resolveCellMove, resolveColumnOptions, resolveExpandAll, resolveRangeBounds, resolveRowSelectionClick, tmDataGridFeatures, toClipboardText, toExcelCsv, useCellControlTabIndex, useTMDataGrid, useTMDataGridContext, writeClipboardText };