docs/plans/2026-04-03-slate-browser-first-tranche-plan.md
Build the first working slate-browser package tranche in .tmp/slate-v2:
packages/slate-browserdescribe / it/Users/zbeyens/git/slate-v2/packages/slate-browsertest:slate-browsertest:slate-browser:coretest:slate-browser:domtest:slate-browser:e2etest:slate-browser:imebun-types/test-globalsPLAYWRIGHT_BASE_URLyarn exec playwright install chromium, not ad hoc npx playwright installNODE_OPTIONSbun test src/coreyarn workspace slate-browser testPLAYWRIGHT_BASE_URL=http://localhost:3200 yarn test:slate-browser:e2ePLAYWRIGHT_BASE_URL=http://localhost:3200 yarn test:slate-browser:imeyarn build:rollupyarn lint:typescript0 on new TS filesAPPROVEslate-browser docs plus the narrow solution docs first.tmp/slate-v2:
assertSelection now normalizes FEFF zero-width DOM offsets back to Slate
offset 0assertDomSelection stays raw and proves the browser is really at native
offset 1 on the placeholder path -only
zero-width shapescopy event plus captured payloadselectAllInEditor(...) now waits for selection sync before
selection-sensitive helper assertionsconst editor = await openExample(page, name)editor.focus()editor.type(...)editor.press(...)editor.selectAll()editor.assert.text/html/selection/domSelection/placeholderVisibleeditor.clipboard.copy/copyPayloadeditor.ime.enableKeyEvents/composeslate-react-v2yarn workspace slate-browser testPLAYWRIGHT_BASE_URL=http://localhost:3200 yarn test:slate-browser:e2ePLAYWRIGHT_BASE_URL=http://localhost:3200 yarn test:slate-browser:imePLAYWRIGHT_BASE_URL=http://localhost:3200 yarn test:slate-browser:clipboardPLAYWRIGHT_BASE_URL=http://localhost:3200 yarn test:slate-browser:anchorsyarn workspace slate-react-v2 testyarn build:rollupyarn lint:typescript