docs/plans/2026-04-27-slate-v2-mentions-inline-void-keyboard-navigation.md
Done.
Fix /examples/mentions keyboard navigation before and after inline void
mentions, from both left and right entry points.
/Users/zbeyens/git/slate-v2./Users/zbeyens/git/plate-2./examples/mentions.inlines, richtext, embeds,
highlighted-text, and shadow-dom; mentions needs route-specific proof.dev-browser reproduced the bug with real keyboard input:
[1,0]@32 ArrowRight landed at [1,2]@1 instead of [1,2]@0.[1,2]@0 ArrowLeft landed at [1,0]@31 instead of [1,0]@32.unit: 'character' traversal flattening atomic inline
voids to zero-length text. That made the next character after the atom become
the first movement target.slate; existing
.changeset/selectable-void-navigation.md was widened to cover inline voids.dev-browser on persistent Chrome. Done./examples/mentions Playwright regression for left and right
navigation around a mention. Done.Editor.positions character traversal.dev-browser, scoped typecheck/lint, and relevant
browser proof. Done.PLAYWRIGHT_BASE_URL=http://localhost:3100 bunx playwright test ./playwright/integration/examples/mentions.test.ts --project=chromium --grep "arrow keys skip over mentions" --workers=1 --retries=0 failed with [1,2]@1 instead of [1,2]@0.bun test ./packages/slate/test/query-contract.ts -t "atomic boundaries" failed with [0,2]@1 instead of [0,2]@0.bun test ./packages/slate/test/query-contract.ts -t "atomic boundaries"PLAYWRIGHT_BASE_URL=http://localhost:3100 bunx playwright test ./playwright/integration/examples/mentions.test.ts --project=chromium --grep "arrow keys skip over mentions" --workers=1 --retries=0dev-browser --connect http://127.0.0.1:9222 on /examples/mentions confirmed Slate and DOM selection at [1,2]@0, [1,0]@32, [1,4]@0, [1,2]@4.PLAYWRIGHT_BASE_URL=http://localhost:3100 bunx playwright test ./playwright/integration/examples/mentions.test.ts --project=chromium --workers=1 --retries=0PLAYWRIGHT_BASE_URL=http://localhost:3100 bunx playwright test ./playwright/integration/examples/inlines.test.ts --project=chromium --grep "arrow keys skip over read-only inline" --workers=1 --retries=0PLAYWRIGHT_BASE_URL=http://localhost:3100 bunx playwright test ./playwright/integration/examples/highlighted-text.test.ts --project=chromium --grep "keeps projected text movement model-owned and editable" --workers=1 --retries=0PLAYWRIGHT_BASE_URL=http://localhost:3100 bunx playwright test ./playwright/integration/examples/shadow-dom.test.ts --project=chromium --grep "keeps shadow DOM ArrowLeft movement model-owned inside the shadow root" --workers=1 --retries=0bun test ./packages/slate/test/query-contract.tsbun --filter slate typecheckbun typecheck:rootbun lint:fix