docs/plans/2026-04-19-slate-dom-react-tranche-5-6-execution.md
Close packages/slate-dom and packages/slate-react honestly on top of the
settled slate, slate-history, and slate-hyperscript claims.
This is not a narrow package port.
It must also close the remaining north-star runtime story that actually belongs to these packages:
slate-history and slate-hyperscript are settled enough to move onslate-domslate-reactslate-dom builds and typechecksslate-react builds and typecheckspackages/slate-react/test/app-owned-customization.tsx now existspackages/slate-react/test/large-doc-and-scroll.tsx now existspackages/slate-react/test/with-react-contract.tsx now existsslate-react still carries legacy mainline shape:
Editable still centers the old decorate(entry) surfacerun-perf-gates.md still says the full north-star perf command set is
missingpackages/slate-dom/test/bridge.tspackages/slate-dom/test/bridge.test.tspackages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tspackages/slate-react/test/provider-hooks-contract.tsxpackages/slate-react/test/provider-hooks-contract.test.tsxpackages/slate-react/test/react-editor-contract.tsxpackages/slate-react/test/react-editor-contract.test.tsxpackages/slate-react/test/surface-contract.tsxpackages/slate-react/test/surface-contract.test.tsxpackages/slate-react/test/editable-behavior.tsxpackages/slate-react/test/editable-behavior.test.tsxpackages/slate-react/test/projections-and-selection-contract.tsxpackages/slate-react/test/projections-and-selection-contract.test.tsxpackages/slate-react/test/annotation-store-contract.tsxpackages/slate-react/test/annotation-store-contract.test.tsxpackages/slate-react/test/widget-layer-contract.tsxpackages/slate-react/test/widget-layer-contract.test.tsxpackages/slate-react/test/primitives-contract.tsxpackages/slate-react/test/primitives-contract.test.tsxpackages/slate-react/src/annotation-store.tspackages/slate-react/src/hooks/use-slate-annotations.tsxpackages/slate-react/src/hooks/use-slate-projections.tsxpackages/slate-react/src/widget-store.tspackages/slate-react/src/hooks/use-slate-widgets.tsxpackages/slate-react/src/projection-context.tsxpackages/slate-react/src/hooks/use-slate-annotation-store.tsxpackages/slate-react/src/hooks/use-slate-widget-store.tsxpackages/slate-react/src/projection-store.tspackages/slate-react/src/context.tsxpackages/slate-react/src/hooks/use-slate-node-ref.tsxpackages/slate-react/src/components/slate-element.tsxpackages/slate-react/src/components/slate-spacer.tsxpackages/slate-react/src/components/slate-leaf.tsxpackages/slate-react/src/components/slate-text.tsxpackages/slate-react/src/components/slate-placeholder.tsxpackages/slate-react/src/components/text-string.tsxpackages/slate-react/src/components/zero-width-string.tsxpackages/slate-react/src/components/editable-element.tsxpackages/slate-react/src/components/void-element.tsxpackages/slate-react/test/app-owned-customization.tsxpackages/slate-react/test/app-owned-customization.test.tsxpackages/slate-react/test/large-doc-and-scroll.tsxpackages/slate-react/test/large-doc-and-scroll.test.tsxpackages/slate-react/test/with-react-contract.tsxpackages/slate-react/test/with-react-contract.test.tsxpackages/slate-react/src/components/slate.tsxpackages/slate-react/src/hooks/use-slate-selector.tsxpackages/slate-react/src/components/editable-text-blocks.tsxpackages/slate-react/src/hooks/use-slate-node-ref.tsxpackages/slate-dom/src/plugin/with-dom.tspackages/slate-react/src/large-document/create-island-plan.tspackages/slate-react/src/large-document/classify-island-kind.tspackages/slate-react/src/large-document/island-shell.tsxpackages/slate-react/src/large-document/large-document-commands.tssite/examples/ts/highlighted-text.tsxplaywright/integration/examples/highlighted-text.test.tssite/examples/ts/external-decoration-sources.tsxplaywright/integration/examples/external-decoration-sources.test.tssite/examples/ts/persistent-annotation-anchors.tsxplaywright/integration/examples/persistent-annotation-anchors.test.tssite/examples/ts/review-comments.tsxplaywright/integration/examples/review-comments.test.tsDOMEditor.toDOMPoint(...) no longer assumes globalThis.TextisBefore(...) / isAfter(...) no longer assume globalThis.Node
static constants existwindow or global
getComputedStyleslate-dom owns:
slate-react owns:
Harsh take:
slate-dom is not a tiny adapter cleanupslate-react is not a docs passSo the plan is:
decorate bucket.slate-react invent document semantics that belong in core.slate-dom stay as giant plugin glue with no direct package proof.Goal:
Work:
master-roadmap.mdrelease-readiness-decision.mdtrue-slate-rc-proof-ledger.mdreplacement-gates-scoreboard.mdrelease-file-review-ledger.mdslate-dom-legacy-draft-contract-corpus.mdslate-react-legacy-draft-contract-corpus.md
as the package merged-corpus ownersExit:
slate-dom: DOM Bridge ClosureGoal:
slate-dom package-runtime contract instead of letting DOM
truth leak through slate-react onlyPrimary source targets:
packages/slate-dom/src/plugin/dom-editor.tspackages/slate-dom/src/plugin/with-dom.tssrc/utils/**Primary proof owners to create:
packages/slate-dom/test/bridge.tspackages/slate-dom/test/clipboard-boundary.tsPrimary behavior to prove:
Browser/example owners tied to DOM closure:
mark-placeholder.test.tsplaceholder-ime.test.tszero-width-matrix.test.tsrich-inline.test.tsExpected source cleanup:
Exit:
slate-dom owns direct package proof for bridge + clipboard truthCurrent tranche-5 progress:
packages/slate-dom/test/bridge.tspackages/slate-dom/test/bridge.test.tspackages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsbun test ./test/bridge.test.tsbun test ./test/clipboard-boundary.test.tsbunx turbo build --filter=./packages/slate-dombunx turbo typecheck --filter=./packages/slate-dombun run lint:fixbun run lintslate-react: Surface Truth ResetGoal:
Immediate proof owners to restore or create:
packages/slate-react/test/provider-hooks-contract.tsxpackages/slate-react/test/react-editor-contract.tsxpackages/slate-react/test/primitives-contract.tsxpackages/slate-react/test/editable-behavior.tsxpackages/slate-react/test/projections-and-selection-contract.tsxpackages/slate-react/test/annotation-store-contract.tsxpackages/slate-react/test/widget-layer-contract.tsxpackages/slate-react/test/app-owned-customization.tsxpackages/slate-react/test/large-doc-and-scroll.tsxpackages/slate-react/test/surface-contract.tsxpackages/slate-react/test/with-react-contract.tsxCurrent legacy-ish proof files that should be treated as temporary evidence, not the final owner stack:
packages/slate-react/test/decorations.test.tsxpackages/slate-react/test/react-editor.test.tsxpackages/slate-react/test/use-selected.test.tsxpackages/slate-react/test/chunking.test.tspackages/slate-react/test/bun/*.spec.tsxExit:
Current tranche-6 progress:
packages/slate-react/test/provider-hooks-contract.tsxpackages/slate-react/test/provider-hooks-contract.test.tsxpackages/slate-react/test/react-editor-contract.tsxpackages/slate-react/test/react-editor-contract.test.tsxpackages/slate-react/test/surface-contract.tsxpackages/slate-react/test/surface-contract.test.tsxpackages/slate-react/test/editable-behavior.tsxpackages/slate-react/test/editable-behavior.test.tsxpackages/slate-react/test/projections-and-selection-contract.tsxpackages/slate-react/test/projections-and-selection-contract.test.tsxpackages/slate-react/test/annotation-store-contract.tsxpackages/slate-react/test/annotation-store-contract.test.tsxpackages/slate-react/test/widget-layer-contract.tsxpackages/slate-react/test/widget-layer-contract.test.tsxbunx vitest run ./test/provider-hooks-contract.test.tsx --config ./vitest.config.mjsbunx vitest run ./test/react-editor.test.tsx ./test/react-editor-contract.test.tsx ./test/provider-hooks-contract.test.tsx --config ./vitest.config.mjsbunx vitest run ./test/provider-hooks-contract.test.tsx ./test/react-editor-contract.test.tsx ./test/surface-contract.test.tsx --config ./vitest.config.mjsbunx vitest run ./test/provider-hooks-contract.test.tsx ./test/react-editor-contract.test.tsx ./test/surface-contract.test.tsx ./test/editable-behavior.test.tsx --config ./vitest.config.mjsbunx vitest run ./test/provider-hooks-contract.test.tsx ./test/react-editor-contract.test.tsx ./test/surface-contract.test.tsx ./test/editable-behavior.test.tsx ./test/projections-and-selection-contract.test.tsx --config ./vitest.config.mjsbunx vitest run ./test/provider-hooks-contract.test.tsx ./test/react-editor-contract.test.tsx ./test/surface-contract.test.tsx ./test/editable-behavior.test.tsx ./test/projections-and-selection-contract.test.tsx ./test/annotation-store-contract.test.tsx --config ./vitest.config.mjsbunx vitest run ./test/provider-hooks-contract.test.tsx ./test/react-editor-contract.test.tsx ./test/surface-contract.test.tsx ./test/editable-behavior.test.tsx ./test/projections-and-selection-contract.test.tsx ./test/annotation-store-contract.test.tsx ./test/widget-layer-contract.test.tsx --config ./vitest.config.mjsbunx vitest run ./test/provider-hooks-contract.test.tsx ./test/react-editor-contract.test.tsx ./test/surface-contract.test.tsx ./test/editable-behavior.test.tsx ./test/projections-and-selection-contract.test.tsx ./test/annotation-store-contract.test.tsx ./test/widget-layer-contract.test.tsx ./test/primitives-contract.test.tsx --config ./vitest.config.mjsReactEditor.focus is no longer the live blockerprojection-store.ts are now recovered
enough that app-owned/large-doc rows are no longer blocked on missing
basic store wiringslate-react Runtime Rewrite Around The Overlay KernelGoal:
Target source families to restore or create:
packages/slate-react/src/projection-store.tspackages/slate-react/src/projection-context.tsxpackages/slate-react/src/hooks/use-slate-projections.tsxpackages/slate-react/src/hooks/use-slate-range-ref-projection-store.tsxpackages/slate-react/src/decoration-sources.tspackages/slate-react/src/hooks/use-slate-decoration-sources.tsxpackages/slate-react/src/annotation-store.tspackages/slate-react/src/widget-store.tspackages/slate-react/src/hooks/use-slate-annotations.tsxpackages/slate-react/src/hooks/use-slate-widgets.tsxpackages/slate-react/src/components/slate-annotation-layer.tsxpackages/slate-react/src/components/slate-widget-layer.tsxHard rules:
useSyncExternalStore-style narrow subscriptionsExit:
decorate-first with overlay ideas bolted on topEditable / Rendering RewriteGoal:
Primary source targets:
packages/slate-react/src/components/editable.tsxpackages/slate-react/src/components/text.tsxpackages/slate-react/src/components/leaf.tsxRequired outcomes:
Hard cuts / demotions to make explicit:
decorate parity is not the flagship runtime story anymorerestore-dom assumptions survive only where real kept
browser/runtime rows still demand themExit:
Goal:
Primary source pressure:
packages/slate-react/src/chunking/**use-children.tsxwith-react.tssite/examples/ts/huge-document.tsxPlan:
Required proof:
large-doc-and-scroll.tsxExit:
These rows are not optional polish. They are part of the finish line.
Restore or harden:
site/examples/ts/highlighted-text.tsx
site/examples/ts/external-decoration-sources.tsx
site/examples/ts/persistent-annotation-anchors.tsx
site/examples/ts/review-comments.tsx
site/examples/ts/huge-document.tsx
Tie them to browser proof:
highlighted-text.test.tssearch-highlighting.test.tscode-highlighting.test.tspersistent-annotation-anchors.test.tsmentions.test.tshovering-toolbar.test.tsreview-comments browser owner if the example is kept in the live claimExit:
Goal:
Keep or recover current lanes where real:
bun run testbun run test:integration-localAdd or recover real command-backed owners for:
Target command lanes from the draft/runtime plan:
bench:react:overlay-subscriptions:localbench:replacement:huge-document:islands:localbench:replacement:huge-document:overlays:localbench:replacement:annotations:localbench:replacement:search-highlighting:localbench:replacement:code-highlighting:localCurrent repo truth:
.tmp/slate-v2/package.json.tmp/slate-v2/scripts/benchmarks/**Hard rule from the learnings:
Exit:
After code and proof land, sync:
master-roadmap.mdrelease-readiness-decision.mdtrue-slate-rc-proof-ledger.mdreplacement-gates-scoreboard.mdrelease-file-review-ledger.mdreferences/architecture-contract.mdreferences/chunking-review.mdledgers/slate-react-api.mdledgers/example-parity-matrix.mdslate-dom and slate-reactHard doc rule:
These are real today:
bunx turbo build --filter=./packages/slate-dom --filter=./packages/slate-reactbunx turbo typecheck --filter=./packages/slate-dom --filter=./packages/slate-reactCurrent narrow evidence today:
packages/slate-react/test/decorations.test.tsxpackages/slate-react/test/react-editor.test.tsxpackages/slate-react/test/use-selected.test.tsxpackages/slate-react/test/chunking.test.tsBut these are not enough for final tranche closure.
Do not call tranche 5/6 done until all of this is true:
slate-dom owns direct package proof for bridge + clipboard truthslate-react owns direct focused proof files for the kept runtime domainsslate-dom package proof + source extractionslate-react proof-owner restoreDo not try to “close slate-react first” while slate-dom still lacks honest
package proof.
That’s how you end up proving DOM behavior indirectly through React and calling it architecture.
It’s garbage.
replanslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
packages/slate-react/test/with-react-contract.tsxpackages/slate-react/test/with-react-contract.test.tsxhighlighted-text source and proof row are now fully green in Chromium:
site/examples/ts/highlighted-text.tsxplaywright/integration/examples/highlighted-text.test.tsexternal-decoration-sources source and proof row are now real and green
in Chromium:
site/examples/ts/external-decoration-sources.tsxplaywright/integration/examples/external-decoration-sources.test.tspersistent-annotation-anchors source and proof row are now real and
green in Chromium:
site/examples/ts/persistent-annotation-anchors.tsxplaywright/integration/examples/persistent-annotation-anchors.test.tsreview-comments source and proof row are now real and green in Chromium:
site/examples/ts/review-comments.tsxplaywright/integration/examples/review-comments.test.tshighlighted-text is now green:
external-decoration-sources is now green:
projectionStore.refresh({ reason: 'external' }): greenpersistent-annotation-anchors is now green:
review-comments is now green:
highlighted-textexternal-decoration-sourcespersistent-annotation-anchorsreview-commentsslate-browser/playwright now dispatches selectionchange after fallback
DOM selection writesEditable now exposes a Slate browser handle on the mounted root for
selection/range-ref helperstext/html + text/plain with
data-slate-fragment in the HTML, but not the custom fragment MIME typehighlighted-text on the public surface we actually ship:
createSlateProjectionStore + EditableBlocksexternal-decoration-sources on the public surface we actually ship:
createSlateProjectionStore(..., { dirtiness: 'external' }) +
explicit refresh({ reason: 'external' })persistent-annotation-anchors on the public surface we actually
ship:
useSlateAnnotationStore + annotationStore.projectionStore +
annotation-backed widget visibility in the current widget storereview-comments on the public surface we actually ship:
useSlateAnnotationStore + useSlateWidgetStore(editor, widgets, annotationStore) +
EditableBlockssetFragmentData() was leaking render-only wrappers into decorated
multi-leaf clipboard HTMLslate-browser/playwright was still hardcoded to localhost:3000
while Playwright serves the exported site from 3101text/html carries data-slate-fragment1.1) while the projection row asserts the block-relative rangescripts/benchmarks/browser/**,
but those files are absent from the repohighlighted-text Chromium browser proof is now greenexternal-decoration-sources Chromium browser proof is now greenpersistent-annotation-anchors Chromium browser proof is now greenreview-comments Chromium browser proof is now greenhighlighted-text Chromium selection row: greenhighlighted-text Chromium typing row: greenhighlighted-text Chromium clipboard row: greenexternal-decoration-sources Chromium external refresh row: greenpersistent-annotation-anchors Chromium anchor persistence row: greenreview-comments Chromium comment sidebar / inline slice / widget row: greenreplanslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
packages/slate-react/test/with-react-contract.tsxpackages/slate-react/test/with-react-contract.test.tsx.tmp/slate-v2/package.json only exposes core/history benchmark commands.tmp/slate-v2/scripts/benchmarks/** only contains core/history/slate filesbench:react:overlay-subscriptions:localbench:replacement:huge-document:islands:localbench:replacement:huge-document:overlays:localbench:replacement:annotations:localbench:replacement:search-highlighting:localbench:replacement:code-highlighting:localbench:react:rerender-breadth:localbench:replacement:huge-document:localbench:core:transaction:localbench:core:normalization:localbench:core:query-ref-observation:localbench:core:node-transforms:localbench:core:text-selection:localbench:core:editor-store:localbench:core:refs-projection:localbench:core:normalization:compare:localbench:core:observation:compare:localbench:core:huge-document:compare:localbench:history:compare:localbench:slate:6038:localkeep courseslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
bun run bench:react:rerender-breadth:local.tmp/slate-v2/scripts/benchmarks/browser/react/rerender-breadth.tsxrerender-breadth as the first real north-star perf ownercreateSlateProjectionStore(...)useSlateSelector(editor => ...).tmp/slate-v2bun run bench:react:rerender-breadth:localbench:react:rerender-breadth:localpackages/slate-react/tmp/slate-react-rerender-breadth-benchmark.jsonActivity breadthhuge-document-overlays, which currently needs example-surface recoveryoverlay-subscriptions, if that gives a cleaner source-scoped lanekeep courseslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
bun run bench:react:rerender-breadth:local.tmp/slate-v2/scripts/benchmarks/browser/react/rerender-breadth.tsxrerender-breadth as the live owner for React locality and
source-scoped invalidation1, right 11, right 11, right 1bun run bench:react:rerender-breadth:localbench:react:rerender-breadth:localpackages/slate-react/tmp/slate-react-rerender-breadth-benchmark.jsonActivity breadthpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
bun run bench:react:huge-document-overlays:local.tmp/slate-v2/scripts/benchmarks/browser/react/huge-document-overlays.tsx.tmp/slate-v2/scripts/benchmarks/shared/react-benchmark.tsxEditableBlocks largeDocument surface8401 and far
text/projection 040 -> 60
shells 8 -> 7
selection jumps to top-level block 100
overlay store recompute stays 011
on a far-only overlay togglebun run bench:react:rerender-breadth:local
bun run bench:react:huge-document-overlays:localbench:react:rerender-breadth:localbench:react:huge-document-overlays:localpackages/slate-react/tmp/slate-react-rerender-breadth-benchmark.jsonpackages/slate-react/tmp/slate-react-huge-document-overlays-benchmark.json.tmp/slate-v2pivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
bun run bench:react:huge-document-overlays:localbun run testbun run test:integration-localhighlighted-text rows as the actual claimed
browser ownerbunx turbo build --filter=./packages/slate-dom --filter=./packages/slate-reactbunx turbo typecheck --filter=./packages/slate-dom --filter=./packages/slate-reactbun run lint:fixbun run lintbun run testbun run test:integration-localhighlighted-text failures were outside the actual owner claim:
10 instead of 11navigator.clipboard.read() was permission-blockedbun run test
bun run test:integration-localbun run bench:react:rerender-breadth:local
bun run bench:react:huge-document-overlays:localbench:react:rerender-breadth:localbench:react:huge-document-overlays:localmaster-roadmap.mdrelease-readiness-decision.mdtrue-slate-rc-proof-ledger.mdpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
bun run bench:react:huge-document-overlays:local.tmp/slate-v2/scripts/benchmarks/browser/react/huge-document-overlays.tsx.tmp/slate-v2/scripts/benchmarks/shared/react-benchmark.tsxhighlighted-texthighlighted-text debt from the closeout storybunx turbo build --filter=./packages/slate-dom --filter=./packages/slate-reactbunx turbo typecheck --filter=./packages/slate-dom --filter=./packages/slate-reactbun run lint:fixbun run lintbun run testbun run test:integration-localbench:react:rerender-breadth:localbench:react:huge-document-overlays:localbun run test
bun run test:integration-localbun run bench:react:rerender-breadth:local
bun run bench:react:huge-document-overlays:localbench:react:rerender-breadth:localbench:react:huge-document-overlays:localpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
bun run bench:react:huge-document-overlays:localmaster-roadmap.mdreplacement-gates-scoreboard.mdrelease-readiness-decision.mdtrue-slate-rc-proof-ledger.mdrelease-file-review-ledger.mddecoration-roadmap.mdbun run test
bun run test:integration-localbun run bench:react:rerender-breadth:local
bun run bench:react:huge-document-overlays:localpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tspackages/slate-dom/test/clipboard-boundary.test.tsslate-react owner:
bun run bench:react:huge-document-overlays:localmaster-roadmap.mdtrue-slate-rc-proof-ledger.mdbun run test
bun run test:integration-localbun run bench:react:rerender-breadth:local
bun run bench:react:huge-document-overlays:localdecorate or chunkingpivotcontinue here does not unlock anything new; this owner is
exhaustedslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localcontinue calls should stay attached to this
package-runtime lane once the gates and truth-sync are greenpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localcontinue should keep producing work
inside an exhausted ownerdecorate or chunkingpivotcontinue on this owner is a no-op; nothing new inside tranche
5/6 is waiting to be unlockedslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localslate-dom / slate-reactpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localhuge-documentscroll-into-viewmark-placeholder.test.tsplaceholder-ime.test.tsdecorate or chunkingpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localexample-parity-matrix.md now explicitly classifies:
highlighted-text: extendedexternal-decoration-sources: extendedpersistent-annotation-anchors: extendedreview-comments: extendeddecorate or chunkingpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localmark-placeholder.test.tsplaceholder-ime.test.tsexample-parity-matrix.md.tmp/slate-v2/site/examples/ts/** or
.tmp/slate-v2/playwright/integration/examples/**true-slate-rc-proof-ledger.md instead of pretending absent files are
pending in-repo ownersdecorate
or chunkingpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localcode-highlightingcustom-placeholderhuge-documentmarkdown-previewmarkdown-shortcutsplaintextread-onlyscroll-into-viewshadow-domstylingtableseditable-voidsimagespaste-htmlrichtextpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:local.tmp/slate-v2/site/examples/ts/**example-parity-matrix.md now keeps only the four live v2-only current-only
examples:
highlighted-textexternal-decoration-sourcespersistent-annotation-anchorsreview-commentspivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localselect.test.ts explicitly recoveredhuge-document.test.ts explicitly explicit cutselect.test.ts already maps to richtext.test.ts and the current row
really does own the triple-click paragraph-selection intenthuge-document.test.ts really was an old chunking-UI assertion, and the
live huge-document claim is the benchmark lane insteadpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localpivotslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:localcode-highlighting, custom-placeholder, huge-document,
markdown-preview, markdown-shortcuts, plaintext, read-only,
scroll-into-view, shadow-dom, styling, tableseditable-voids, images, paste-html, richtextkeep courseslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
site/examples/ts/plaintext.tsxsite/examples/ts/read-only.tsxplaintext and read-only from the open same-path bucketplaywright/integration/examples/plaintext.test.tsplaywright/integration/examples/read-only.test.tsexample-parity-matrix.md now upgrades:
plaintext -> recoveredread-only -> recoveredbunx playwright test ./playwright/integration/examples/plaintext.test.ts ./playwright/integration/examples/read-only.test.ts --project=chromiumbun run lint:fix
bun run lintdecoratereplanslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document-overlays:local1000 block browser lane: v2 beat legacy on ready, type, select-all,
and paste5000 block browser compare: v2 typing improved from about
71ms to 65ms, but legacy chunking was around 18ms10000 blocks made v2 corridor posture viable,
but did not directly compare chunk-on / chunk-off / v2 in a live commandbench:react:rerender-breadth:localbench:react:huge-document-overlays:localbench:core:huge-document:compare:localreplanslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document:legacy-compare:local.tmp/slate-v2/scripts/benchmarks/browser/react/huge-document-legacy-compare.mjsREACT_HUGE_COMPARE_BLOCKS=1000 REACT_HUGE_COMPARE_ITERATIONS=1 REACT_HUGE_COMPARE_TYPE_OPS=10 bun run bench:react:huge-document:legacy-compare:local27.98ms47.93ms68.10ms49.50ms, chunk-off 40.02ms, chunk-on 31.30ms44.07ms, chunk-off 24.06ms, chunk-on 25.20ms10.24ms, chunk-off 2.69ms, chunk-on 2.92ms27.09ms, chunk-off 20.29ms, chunk-on
24.64ms65.32ms, chunk-off 30.37ms, chunk-on 31.13ms89.89ms, chunk-off 26.54ms, chunk-on
26.87msbench:react:rerender-breadth:localbench:react:huge-document-overlays:localbench:react:huge-document:legacy-compare:localreplanslate-dom owner:
packages/slate-dom/test/clipboard-boundary.tsslate-react owner:
bun run bench:react:huge-document:legacy-compare:localREACT_HUGE_COMPARE_BLOCKS=1000 REACT_HUGE_COMPARE_ITERATIONS=1 REACT_HUGE_COMPARE_TYPE_OPS=10 bun run bench:react:huge-document:legacy-compare:local27.32ms46.26ms66.30ms51.24ms, chunk-off 24.52ms, chunk-on 30.03ms50.61ms, chunk-off 43.37ms, chunk-on 25.17ms65.32ms, chunk-off 30.37ms, chunk-on 31.13ms89.89ms, chunk-off 26.54ms, chunk-on 26.87ms9.96ms, chunk-off 2.70ms, chunk-on 2.81ms26.64ms, chunk-off 19.91ms, chunk-on 24.50msbench:react:huge-document:legacy-compare:localbench:react:rerender-breadth:localbench:react:huge-document-overlays:localEditableBlocks largeDocument loses select/promote-then-type,
select-all, and paste in the mounted compare