Per-cell undo / redo
View sourceCmd+Z reverts the most recent commit on the focused row; Cmd+Shift+Z (Mac) or Ctrl+Y (Windows) re-applies it. Per-row scope, capped at 10 entries per row. Built in — no consumer wiring.
Try this
Watch the [source] tag in the commit log: keyboard / undo / redo.
- Edit any cell, commit it, then press Cmd+Z — the value reverts and a new commit fires with
source: "undo". - Press Cmd+Shift+Z to redo.
- Edit the SAME row 3 times, then undo 3 times. The stack walks backwards through that row only.
- Edit a different row — the undo stack is per-row, so this row keeps its own history.
Gesture matrix
| Platform | Undo | Redo |
|---|---|---|
| Mac | Cmd+Z | Cmd+Shift+Z |
| Windows | Ctrl+Z | Ctrl+Y or Ctrl+Shift+Z |
Semantics
- Per-row scope.Each row maintains its own undo stack. Cmd+Z on row A undoes A's most recent commit, not row B's. Matches Excel / Google Sheets convention.
- Capped at 10 entries per row. When the cap is reached, the oldest entry shifts out. Bounds memory regardless of how aggressively a single row is edited.
- Redo stack clears on new commits. Typing a new value invalidates pending redos — the user has chosen a new history branch.
- No-op while editing.If an editor is currently mounted, Cmd+Z is the input's native undo (in-progress text), not the grid's.
onCellEditCommit gets a source
When the grid restores a value, it fires onCellEditCommit with source: "undo" or source: "redo". Most consumers can treat undo/redo identically to a normal commit. Branch on event.source if you need to skip secondary side-effects (audit log entry, collaborator notification) that the original commit already triggered.