Variant A of #196: VS Code-style multi-cursor limited to "select all
occurrences of a word (or the selection) and type into all at once", built on
top of the existing SearchAndReplace mass-transaction machinery.
- New `MultiCursor` Tiptap extension (packages/editor-ext/src/lib/multi-cursor/):
Cmd/Ctrl+Shift+L selects all occurrences, Cmd/Ctrl+D adds the next, typing /
Backspace / Delete apply to every cursor in ONE reverse-order transaction (so a
single undo reverts the whole multi-edit), Esc / click / navigation collapse.
- Cursors live in plugin state and are remapped on every docChanged — covering
remote Yjs edits (applied as ordinary transactions) with no collab-specific code.
- Extracted a shared `findOccurrences` util so SearchAndReplace and MultiCursor
no longer duplicate the occurrence walk (behaviour-preserving).
- Conscious v1 out-of-scope boundaries (Variant B) documented in the extension.
Registered in mainExtensions; carets styled distinctly from collaborative carets.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>