docs/solutions/logic-errors/2026-04-04-v2-editable-blocks-need-structure-preserving-dom-reconciliation-for-mixed-inline-editing.md
EditableBlocks started as an honest public surface for narrow text-block
proofs.
The next expansion was mixed-inline editing:
The first red showed the root problem fast:
Editable DOM commit path flattened the whole root back into one
text blockThat destroyed the structure the selection paths still referred to.
Editable now accepts snapshotFromDom(...).
EditableTextBlocks uses that seam to:
data-slate-node="text" ownerThat keeps mixed-inline edits honest:
For a public editor surface, DOM reconciliation must preserve the editor shape the surface claims to support.
If the surface says “mixed inline is real” but DOM commits collapse everything back into one text node, the public API is lying.
The durable seam is not “extract all plain text from the root.” It is “preserve the current tree shape and refresh the text leaves that DOM input actually changed.”
For slate-react-v2 public editing surfaces:
If typing or paste makes the structure collapse while the visible text still looks correct, the reconciliation seam is too shallow.