Technical Documentation: udecode/plate
โน๏ธ Provenance: Multi-Tier Ingestion ยท CodeWiki Reference
Overview (`README.md`)
Plate
Templates
You can choose one of the following templates to get started:
| Option | Plate | Plugins | AI | Backend |
|---|---|---|---|---|
| Notion-like template | โ | โ | โ | โ |
| Plate playground template | โ | โ | โ | |
| Plate minimal template | โ |
Documentation
You can learn more about Plate by checking out our documentation.
Contributing
To get started, check out our contributing guide.
Contributors
We'd love for you to join us! Whether it's through giving us a ๐ star, making a ๐ฅ pull request, or sharing your plugins, your help is always appreciated.
Need more help? Join us on Discord. We're always here to guide you.
ไธญๆๆๆกฃ
ๆจๅฏไปฅ้่ฟๆฅ็ๆไปฌ็ไธญๆๆๆกฃไบ่งฃๆดๅคๅ ณไบPlate็ไฟกๆฏใๅฆๆๆจ้่ฆไธญๆๆฏๆ๏ผๆฌข่ฟๅ ๅ ฅๆไปฌ็Discordไธญๆ้ข้๏ผๆไปฌ็็คพๅบๆๅๅฐๅพไนๆ็จไธญๆไธบๆจ่งฃ็ญ้ฎ้ขใ
ๅฏนไบ่ดก็ฎ่ ๏ผๆไปฌไนๆไพไบไธญๆ่ดก็ฎๆๅ๏ผๅธฎๅฉๆจๅไธๅฐPlate็ๅผๅไธญใ
Overview (`.changeset/README.md`)
Changesets
Hello and welcome! This folder has been automatically generated by @changesets/cli, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it in our repository
We have a quick list of common questions to get you started engaging with this project in
our documentation.
Overview (`apps/www/README.md`)
Documentation
This is the documentation for the Plate project.
Usage
Anytime you make a change in the registry folder, run:
pnpm build:registryLicense
Overview (`benchmarks/editor/README.md`)
Editor Evidence
This directory is an Evidence Kit lab for editor framework benchmark research.
It replaces the old standalone Next/Vite benchmark app. The default owner is
now evidence artifacts, not browser app scaffolding.
Commands
npm run evidence:inspect
npm run research:list
npm run research:editor-frameworks:fetch
npm run test:evidence
npm run fuzz
npm run bench:evidence
npm run bench:rich-text:check
npm run bench:startup:check
npm run bench:package:gates
npm run bench:scope
npm run evidence:health
npm run evidence:refresh
npm run docs:perf
npm run docs:perf:search -- editor benchmark
npm run evidence:fullSource Map
Primary target list:
- Slate v2
- Slate
Primary source config:
research/editor-frameworks-sources.json
Primary benchmark registry:
research/benchmark-registry.json
Active Benchmark Matrix
benchmarks/results/rich-text-editors-latest.json is the broad benchmark
matrix. It imports active artifacts from research/benchmark-registry.json.
Old one-off benchmark JSON files do not count unless they are registered there.
The active scope is Slate v2 vs Slate only.
Measured Slate v2 families:
- React huge-document legacy compare
- React rerender breadth
- React huge-document overlays
- React huge-document browser trace
- React active typing breakdown
- Core normalization, query/ref observation, node transforms, text/selection,
editor store, and refs/projection - Core huge-document, normalization, observation, and history compares against
Slate - Clipboard large payload, collab readiness, and issue #6038 transaction
execution rows
Local source targets:
- Slate v2
- Slate
Slate baseline rule:
- Use Slate chunk-on as the baseline. Do not emit chunk-off rows in active
comparison output.
The first direct runtime comparison still lives in:
benchmarks/results/slate-v2-legacy-latest.json
The comprehensive result lives in:
benchmarks/results/rich-text-editors-latest.json
The health and next-action report lives in:
benchmarks/results/benchmark-health-latest.json
Rule
Do not restore the old app/template lab by default. Do not promote random
historical tmp JSON. Add a registry entry, target-owned adapter, fuzzer, corpus
case, benchmark row, or source-pass note when a comparison needs new evidence.
Overview (`benchmarks/targets/README.md`)
Benchmark Targets
This directory is the migration spine for Slate benchmark work.
The target registry answers one question: what benchmark decision are we
measuring, and how does an agent run or optimize it?
Ownership
- Benchmark implementation lives beside the runtime/package code it measures.
benchmarks/targets/slate-v2.jsonnames active benchmark targets, cohorts,
metrics, commands, correctness checks, artifacts, and source links.- Autoresearch sessions optimize one target id at a time.
- Evidence Kit is a legacy import/report archive until generated reports move
to this registry.
Commands
pnpm bench:targets:list
pnpm bench:targets:check
pnpm bench:targets:report
pnpm bench:targets:report:check
pnpm bench:targets:dry-run -- react-active-typing-breakdown
pnpm bench:targets:run -- react-active-typing-breakdown
node tooling/scripts/bench-targets.mjs autoresearch-init react-active-typing-breakdownbench:targets:dry-run is read-only. It checks the registry and prints the
Autoresearch setup plan for the target. Use autoresearch-init only when you
want to create or replace the real .tmp/slate-v2/autoresearch.* session files.
For operator workflows, invoke the slate-ar* skills instead of package
scripts.
Use pnpm bench:targets:import-evidence-kit only while migrating active rows
from benchmarks/editor/research/benchmark-registry.json. After the cutover,
edit target definitions here directly.
Target Contract
Each target has:
id: stable command-facing idquestion: decision the benchmark answersowner: runtime/package ownerfamilyandkind: grouping for reportscwdandcommand: repo-relative run location and commandmetrics: primary metric, direction, unit, and whether output printsMETRIC name=valuecorrectness: command that prevents speed wins from breaking editor behaviorartifacts: result files produced by the targetdocs: supporting evidence linksmigration: temporary provenance while Evidence Kit is being retired
Benchmark output should move toward native METRIC and ARTIFACT lines. Until
then, Autoresearch can wrap timing with metrics.printsMetric: false.
Generated Outputs
pnpm bench:targets:report writes:
benchmarks/targets/history/slate-v2-latest.jsonbenchmarks/targets/reports/slate-v2.md
These are the target-registry replacement for Evidence Kit's active
health/report surface. They summarize target status from registered artifacts.
They do not run expensive benchmarks.
pnpm bench:targets:dry-run -- <target-id> checks the registry, builds the
report model in memory, and asks Autoresearch for a setup plan for that target.
Use it before starting a real optimization loop.
Overview (`docs/editor-behavior/README.md`)
Editor Behavior Docs
This directory is the source of truth for editor-behavior standards and
coverage.
Use it to answer three different questions:
- What is the decision model?
- What behavior do we want?
- What is actually covered right now?
Start Here
- Read markdown-standards.md first.
It defines the authority methodology:- syntax specs first
- choose references per concrete surface, not by broad category default
- use candidate pools such as Typora, Obsidian, Google Docs, Notion,
GitHub, and Milkdown as routing hints, not governing winners
- If you want to resume or operate this lane without re-reading everything,
start with
commands/README.md.
File Guide
markdown-parity-matrix.md
The family-level coverage gate.
Use this to see:- which existing feature families are covered
- what evidence exists
- what is deferred
- what still blocks a release
master-roadmap.md
The canonical remaining implementation roadmap.
Use this to see:- what is already closed
- what still remains to implement
- lane order and next-batch sequencing
- which supporting plans own each remaining lane
editor-protocol-matrix.md
The exhaustive scenario matrix.
Use this to see:- the protocol schema for scenario-complete behavior coverage
- row-level scenarios, authorities, and evidence mapping
- scenario dimensions for full behavior coverage
- which rows are tested, specified, partial, or deferred
- which interaction classes are still deferred into the integration red suite
markdown-editing-spec.md
The normative behavior spec.
Use this to see:- invariants
- ownership rules
- canonical behavior examples
- locked policy calls
markdown-editing-reference-audit.md
Reference evidence.
Use this to see:- what the first Typora / Milkdown audit says
- where that first audit still matters
- where newer Obsidian research adds stronger product pressure
- where Plate had to choose
editor-behavior-architecture.md
Long-horizon architecture.
Use this when the question is:- should behavior stay plugin-scattered?
- what would a profile-driven model look like?
- how would Plate support Typora / Obsidian / Notion / Docs-style profiles cleanly?
Supporting Dirs
execution notes live under docs/plans
The main historical editor-behavior execution notes are:
2026-04-02-editor-behavior-major-execution.md
and
2026-04-03-editor-protocol-matrix-completion.md.
Use them for batch history, not as the current gate source.
Current gate truth belongs to
markdown-parity-matrix.md.
Current implementation-roadmap truth belongs to
master-roadmap.md.
This cleanup pass is tracked in
2026-04-03-editor-behavior-doc-structure.mdoperator commands live under
commands
Use this as the resume surface for reconsolidation, evidence refresh,
re-interview, re-planning, and batch launch.docs/research
Compiled external-reference research.
Use this for Typora-, Obsidian-, and Milkdown-derived source summaries,
concepts, decisions, and system maps.../raw
Private raw evidence layer.
Use this for full third-party corpora when deeper verification is needed.docs/solutions
Reusable learnings, including the editor-behavior methodology docs that were
moved out of this folder.
Reading Order
If you want the big picture
If you want the current release gate
- markdown-parity-matrix.md
- commands/README.md
- 2026-04-02-editor-behavior-major-execution.md only when you need the historical execution trail
If you want to resume or maintain the lane
- commands/README.md
- master-roadmap.md
- markdown-parity-matrix.md
- 2026-04-02-editor-behavior-major-execution.md when you need batch history
If you want concrete behavior rules
- markdown-editing-spec.md
- markdown-editing-reference-audit.md
- docs/research when you need the
compiled external-reference layer behind the audit
If you want exhaustive protocol coverage
Practical Rule
- Use the spec to define behavior.
- Use the protocol matrix to enumerate exhaustive scenarios.
- Use the parity matrix to decide whether a family is covered enough.
- Use the audit when a rule needs external grounding.
- Use the architecture doc only when the question is structural, not behavioral.
- If two docs appear to say the same thing, the spec wins for law, the protocol
matrix wins for exhaustive cases, and the parity matrix wins for ship gate.
Overview (`docs/performance/README.md`)
Performance Docs
This directory is the human-facing source of truth for Plate editor
performance work.
Read Order
- editor-performance-master-plan.md
- the main program document
- current state, key wins, remaining red lanes, and sequencing
- plate-vs-slate-benchmarks.md
- benchmark narrative and forensic history
- use this when you need to understand why a cut mattered
- editor-performance-next-phase-consensus.md
- planning artifact for the earlier โwhat nextโ decision
- useful for rationale, not for the latest numbers
- performance-benchmark-spec.md
- benchmark contract for the public Performance guide
- defines scope, workloads, and claim boundaries
- 2026-04-04-standalone-benchmark-gap-analysis.md
- why the standalone rich-markdown lab exposed a Plate mount gap
- current diagnosis and next optimization targets
- 2026-04-03-affinity-redesign-plan.md
- plan for the hard-affinity code-mark redesign
- 2026-04-03-remaining-basic-nodes-benchmark.md
- plan for the remaining
@platejs/basic-nodescensus extension
- plan for the remaining
Artifact Policy
- Durable markdown lives here.
- Raw benchmark JSON lives in .tmp/.
- Older docs may still mention
docs/plans/*.jsonfrom before the raw
artifact move. When that happens, prefer the matching file in.tmp/. - Internal one-off planning/proof notes belong under
docs/plans/, not
here, unless they are directly useful to understanding the performance story.
Release Snapshot
As of 2026-04-03:
- plain core is good enough versus Slate
- insert-text perf is good enough
nodeIdis no longer the cliff- the dedicated
nodeIdpaste/import lane now exists, and it shows:- raw import is basically cheap
- duplicate-id paste is the only remaining meaningful
withNodeIdhotspot
- code-affinity redesign landed and materially improved the worst core-plugin
lane - newly benchmarked remaining
basic-nodesplugins split cleanly:- green enough:
KbdPlugin,SubscriptPlugin,SuperscriptPlugin - still red:
HighlightPlugin,StrikethroughPlugin
- green enough:
What Is Left After Release
If we ship now, the meaningful remaining performance work is:
HighlightPlugin- currently still well behind Slate on the activated lane
StrikethroughPlugin- same story; cheap mark path still too expensive
- Table selection
- still a separate real hotspot, not solved by core editor work
- Performance-doc cleanup
- some historical JSON artifact links still need cleanup/consolidation
What Is Not Worth Chasing Right Now
- more cheap-mark surgery on bold/italic/underline
- insert-text perf
- more init-time
nodeIdsurgery without a new duplicate-paste result - chunking rhetoric without a new workload
- more code-affinity tuning unless behavior bugs appear
Overview (`docs/research/README.md`)
Agent Research Layer
This is the compiled research layer for Plate.
It exists to give future agents a stable, low-token, persistent reference
surface that sits between raw evidence and day-to-day task execution.
This is not a human PKM system. It is not an Obsidian workflow. It is not a
generic RAG bucket.
The raw evidence layer lives outside this repo in ../raw relative to the
Plate repo root. That private repo is assumed to be cloned locally when agents
need to verify or deepen compiled summaries.
Core idea
Most agent work still behaves like raw RAG:
- read the repo
- search scattered docs
- search issues, plans, and learnings
- stitch the answer together again from scratch
That works, but it wastes tokens and keeps rediscovering the same decisions,
the same caveats, and the same contradictions.
The better model is a compiled research layer:
- raw evidence stays in
../raw - compiled summaries, decisions, concepts, and system maps live here
- agents read this layer first
- agents drop to
../rawonly when they need verification, conflict
resolution, or deeper evidence
The valuable artifact is not one answer in one chat. It is the maintained
markdown layer that makes the next agent faster and less likely to repeat old
mistakes.
Layers
1. Raw evidence
Private, source-heavy, and often copyright-sensitive material.
Expected location:
../raw
Examples:
- captured third-party editor docs
- screenshots
- extracted page text
- local corpora
- transcripts
- external-source inventories
This layer is the evidence base. It is not the default answer surface.
Raw acquisition policy
Prefer the strongest stable acquisition method:
- official git repo clone
- official export or local cache
- page capture or scrape only when no better source exists
If an official git repo exists, use that as the canonical raw source instead of
inventing a scrape.
Examples:
- Milkdown: official repo cloned under
../raw/milkdown/repo - Obsidian: official help and developer-docs repos cloned under
../raw/obsidian - Typora: local cached corpus copied into
../raw/typora
Raw snapshot metadata
Every raw source family should record enough metadata that future agents can
trust what they are reading.
Record at least:
- canonical source URL or repo URL
- local raw path
- snapshot date
- current revision when available:
- git commit hash for repos
- fetched timestamp for caches or exports
- lightweight counts when useful
Raw sync policy
Do not refresh every raw source on every task. That is wasteful and noisy.
Refresh raw sources when:
- the area is active in the current task
- drift matters to the decision
- the source has likely changed since the last meaningful ingest
When a raw source is refreshed:
- update its raw README or metadata
- append
../raw/log.md - refresh affected compiled pages if the new evidence changes them
2. Compiled research
This directory, docs/research, is the agent-facing compiled layer.
It contains:
- source summaries
- decisions
- concepts
- systems
- entities
- open questions
- index and log files
This layer should be:
- concise
- metadata-first
- link-heavy
- easy to grep
- safe to keep in the public repo
3. Agent contract
Agents should treat this directory as the default read layer for repo
knowledge.
The rule is simple:
- read
docs/research/index.md - read the relevant compiled pages
- only then drop to
../rawor broader repo search
Design rules
Stable paths beat cute structure
Keep the layout boring and guessable.
Current top-level structure:
index.mdlog.mdschema.mdcommands/sources/decisions/concepts/systems/entities/open-questions/
Do not split the research layer into parallel goal-specific silos like:
editor-behavior/architecture/plate-v2/slate-v2/
That looks tidy for a week and then turns into duplicate pages and drifting
taxonomy.
Use one research layer, many domains, one page-type system.
commands/ is the one intentional support surface that is not a knowledge-type
bucket. It exists for repeatable operational workflows, not for domain pages.
One concept per file
Do not build giant mixed essays.
Good:
- one file for one source summary
- one file for one decision
- one file for one concept
- one file for one system map
- one file for one entity
Bad:
- giant pages that mix multiple concerns and force future agents to dig through
noise
Organize by knowledge type, not by temporary project goal
This research layer should be DRY at the page-type level.
Use:
sources/for compiled source summariesentities/for concrete named thingsconcepts/for reusable abstractions and vocabularysystems/for larger maps and architecture surfacesdecisions/for explicit conclusionsopen-questions/for unresolved ambiguity
Do not duplicate the same thing across multiple goal folders.
Examples:
- one page for
Typora - one page for
Slate - one page for
directional-affinity - one page for
inline-void-atom - one page for
editor-architecture-landscape - one page for
footnote-refs-are-inline-void-atoms
That page can serve many goals:
- editor-behavior work
- Plate v2 architecture work
- Slate v2 comparison work
- plugin-system analysis
The page type stays stable even when the project focus changes.
Claims point outward
This research layer is a normalized interpretation layer, not a vibe layer.
Durable claims should point to evidence in:
../raw- repo files
- source-of-truth docs
- plans
- learnings
Compiled pages stay derived
Do not copy raw third-party docs into this repo.
This research layer should contain:
- paraphrased summaries
- normalized decisions
- compact cross-source synthesis
- Plate-specific conclusions
This research layer should not contain:
- screenshots from vendor docs
- raw captured pages
- one-to-one source-card layers
- long source-shaped summaries
- quote-heavy mirrors of external docs
Rule of thumb:
- one source file -> one summary card = raw layer
- many source files -> one synthesized page = research layer
Promote durable knowledge only
This research layer is not where every exploratory note goes.
Only promote content here when it is:
- reusable
- likely to matter again
- stable enough to deserve a home
- clearer as a maintained page than as one-off chat or scratch analysis
Leave temporary exploration in docs/analysis or docs/plans.
Coverage gaps are expected unless agents maintain them proactively
This research layer will fail if agents only update it reactively from the narrow task in
front of them.
Failure modes:
- a task touches only one source, but other relevant raw evidence in
../raw
never gets ingested - a raw source exists, but no compiled source page was ever written
- a compiled page exists, but the relevant decision or concept page was never
updated - the agent answers from the visible local slice and misses a gap somewhere
else in the corpus
So the maintenance model cannot be "update whatever file the current task
happened to mention." That is how holes accumulate.
Page types
`commands/`
Operational command specs for repeatable agent workflows.
Use this for:
- full research passes
- maintenance passes
- gap-detection workflows
- ingest workflows
Do not use it to store domain knowledge itself.
`schema.md`
The minimal metadata contract for page types in this layer.
Keep it small and stable.
`index.md`
The entrypoint catalog.
This is what an agent should read first.
It should answer:
- what exists
- where it lives
- what each page is for
`log.md`
Append-only history of meaningful wiki operations.
Use it for:
- new source ingests
- important restructures
- lint passes
- major corrections
Do not turn it into a second index.
`sources/`
Compiled summaries of raw evidence.
Each source summary should say:
- what the source is
- what it added
- what it confirmed
- what it contradicted
- what compiled pages it should affect
This is where source-specific work belongs. If a page still mostly smells like
"what this source said", it probably belongs in sources/.
`decisions/`
Canonical repo-relevant choices.
These pages should say:
- the question
- the chosen answer
- the reason
- competing options
- source refs
- blast radius
If a page answers "what won?", it belongs in decisions/.
`concepts/`
Shared vocabulary and abstractions.
These pages should say:
- what the term means
- what it is not
- where it is used
If a page answers "what does this idea mean across the repo?", it belongs inconcepts/.
`systems/`
Architecture or authority maps.
These pages should say:
- boundaries
- ownership
- important internal links
- how to navigate the area
If a page answers "how does this whole area fit together?", it belongs insystems/.
`entities/`
Concrete named things.
Examples:
- editors
- reference products
- Plate packages
- plugins
If a page is about one concrete named thing, it belongs in entities/.
`open-questions/`
Known ambiguity that should not be silently โresolvedโ by agent confidence.
Use this to preserve real uncertainty.
If a page answers "we still do not know", it belongs in open-questions/.
Relationship To Other Docs
This repo should use three different layers for three different jobs.
`docs/analysis`
Scratch and exploratory thinking.
Use it for:
- workbench comparisons
- candidate lists
- ranking drafts
- architecture exploration
- temporary synthesis that is not stable yet
This is where something like
editor-architecture-candidates.md
starts.
`docs/research`
Compiled reusable knowledge.
Use it for:
- source summaries worth keeping
- reusable concept pages
- architecture maps worth reusing
- entity pages that future agents will need
- explicit decisions
This is the research brain.
`docs/editor-behavior`
Normative law and ship gate.
Use it for:
- authority model
- behavior law
- exhaustive protocol rows
- release gating
This is the law layer, not the research archive.
Rule Of Thumb
docs/analysis= exploratorydocs/research= compiled reusable knowledgedocs/editor-behavior= normative spec
Do not make one directory do all three jobs.
Migration Rules
When migrating existing docs into the research layer:
- do not move a file just because it exists
- first ask what job the file is doing:
- scratch exploration
- compiled knowledge
- normative law
- only move it into
docs/researchif it is durable compiled knowledge
Good migration examples
- a source-heavy comparison doc becomes:
- one
systems/...page - several
entities/...pages - maybe a few
decisions/...pages
- one
- repeated terminology explanations become
concepts/... - repeated product or repo summaries become
entities/...
Bad migration examples
- dumping
docs/analysis/*wholesale intodocs/research - copying
docs/editor-behavior/*intodocs/researchjust to have a second copy - making one giant "Slate v2 + Plate v2 + plugins + references" page
Specific guidance for architecture work
Something like
editor-architecture-candidates.md
should not be copied as one giant research page.
Its durable parts should decompose into pages like:
systems/editor-architecture-landscape.mdentities/prosemirror.mdentities/lexical.mdentities/slate.mdentities/tiptap.md- later, if needed,
decisions/...pages for explicit Plate choices
Core operations
Ingest
When new evidence arrives:
- read the raw source
- classify what it affects
- write or update a source summary
- update any impacted decision, concept, system, or entity pages
- update
index.md - append
log.md
Ingest alone is not enough. It only handles known sources that were already
noticed.
Query
When answering a task:
- start from
index.md - read the relevant compiled pages
- answer from the compiled research layer first
- verify against raw evidence when needed
Lint
Periodically check for:
- stale claims
- duplicated concepts
- orphan pages
- dead terminology
- contradictions
- overgrown pages that should be split
- open questions that now have answers
Lint should also detect coverage gaps, not just stale wording.
Autonomous Maintenance
This research layer should eventually be maintained by a dedicated autonomous skill or
workflow, not only by incidental task work.
Its job is to proactively improve both layers:
- the private raw evidence layer in
../raw - the compiled layer in
docs/research
Why this is needed
If the user asks a question about a goal area and the relevant evidence was
never ingested or compiled, the agent may miss the answer entirely.
That means the system must support:
- gap detection
- proactive ingest
- proactive compilation
- targeted refresh
without waiting for a human to notice every missing page manually.
Recommended skill shape
The right future skill is something like:
research-maintainer- or
research-gap-filler
Its mission is not just to summarize.
Its mission is to keep the reference system complete enough that future agents
do not fall through obvious holes.
Inputs
The skill should accept a goal, area, or question such as:
editor behavior referencesplate v2 architectureslate v2 risksplugin model
Loop
Given a goal, the skill should:
- infer the likely entities, systems, concepts, and decisions involved
- scan
docs/researchfor existing compiled coverage - scan
../rawfor relevant raw evidence - classify gaps:
- raw missing
- raw exists but compiled summary missing
- compiled summary exists but decision/concept/system pages missing
- stale compiled pages
- contradictions between compiled pages
- weakly sourced claims
- fill the highest-value gaps it can safely fill
- record what it changed in
log.md - leave explicit
open-questions/...pages where the gap cannot be filled yet
Gap classes
Use these gap classes explicitly:
- Raw gap: no relevant evidence exists in
../raw - Compile gap: raw evidence exists, but
docs/research/sources/...is missing - Synthesis gap: source summaries exist, but no concept/system/decision page
captures the reusable conclusion - Freshness gap: compiled page exists, but newer evidence likely changed it
- Contradiction gap: two compiled pages disagree or point in different
directions - Structure gap: pages exist, but they are duplicated, orphaned, or split
at the wrong boundaries
Safe autofill rules
The skill should be aggressive about structure and conservative about claims.
Safe actions:
- create missing source summary pages from existing raw evidence
- add missing backlinks and
index.mdentries - split giant mixed pages into clearer page types
- create entity or concept stubs when the source support is obvious
- open explicit question pages when evidence is still thin
Unsafe actions that need stronger evidence:
- inventing decisions without source support
- claiming coverage where only one weak source exists
- silently resolving contradictions
- creating fake completeness from repo-local vibes
Output
Each run should leave:
- updated research pages
- updated
index.md - appended
log.md - explicit open questions for unresolved gaps
And, when useful, a concise gap report saying:
- what was missing
- what was filled
- what still needs raw evidence
Trigger points
This maintenance skill should be used:
- before major research or migration tasks
- after finishing major research or migration tasks
- periodically as a research health pass
- whenever an agent notices it is answering from thin or incomplete coverage
Rule of thumb
If the current task depends on a domain that feels bigger than the currently
visible pages, do not trust the visible pages alone.
Run a gap-detection pass first.
Retrieval order
The default retrieval order is:
docs/research- primary raw evidence in
../raw - broader repo search
- external sources if still needed
If an agent searches the whole repo before checking docs/research, this layer is
failing its job.
Operational Surface
The commands in commands/ are the executable mental model for applying this
research layer in practice.
Start with:
That is the heavyweight command for improving the research layer from a goal or
domain instead of answering only from the currently visible slice.
Use schema.md to keep page
metadata consistent while the layer is still small.
Initial scope
Start with one narrow evidence corpus from ../raw, prove the ingest and
retrieval workflow, then expand to additional sources only after the first path
is stable.
Agent rules
- never edit
../rawwhile compiling conclusions unless the task is explicitly
about curating raw evidence - never add a durable claim here without evidence
- never flatten contradictions into fake certainty
- never treat compiled summaries as stronger than primary sources
- never let a reusable analysis die in chat if it belongs in this research layer
Overview (`packages/ai/README.md`)
Plate ai
Visit https://platejs.org/docs/ai to view the documentation.
License
Overview (`packages/basic-nodes/README.md`)
Plate basic elements plugin
This package implements the basic elements in a single plugin:
- block quote
- code block
- heading
- paragraph
Documentation
Check out
Basic Elements.
License
Overview (`packages/basic-styles/README.md`)
Plate basic styles
Visit https://platejs.org/docs/text-align to view the documentation.
License
Overview (`packages/callout/README.md`)
Plate callout plugins
This package implements the callout block plugins for Plate.
License
Overview (`packages/code-block/README.md`)
Plate code block plugin
This package implements the code block plugin for Plate.
Documentation
Check out
Basic Elements.
License
Overview (`packages/code-drawing/README.md`)
Plate code-drawing plugin
This package implements the code-drawing plugin for Plate, supporting PlantUml, Graphviz, Flowchart, and Mermaid diagrams.
Documentation
Check out Code Drawing.
License
Overview (`packages/combobox/README.md`)
Plate combobox
This package implements the combobox for Plate.
Documentation
Check out Playground and
Combobox.
License
Overview (`packages/comment/README.md`)
Plate comments plugin
This package implements the comments plugin for Plate.
Documentation
Check out comments.
License
Overview (`packages/core/README.md`)
Plate Core
This package provides the foundational structure of the Plate editor framework.
Documentation
Visit https://platejs.org/docs/api/core to view the documentation.
License
Overview (`packages/csv/README.md`)
Plate CSV serializer plugin
This package implements the CSV serializer for Plate.
Documentation
Check out Playground.
License
Overview (`packages/cursor/README.md`)
Plate Cursor Overlay
This package implements a cursor overlay for Plate.
Documentation
Check out
Cursor Overlay.
License
Overview (`packages/date/README.md`)
Plate date plugin
This package implements the date plugin for Plate.
Documentation
Check out date.
License
Overview (`packages/diff/README.md`)
Compute a diff of two Slate documents
License
Overview (`packages/dnd/README.md`)
Plate Drag & Drop
Visit https://platejs.org/docs/dnd to view the documentation.
License
Overview (`packages/docx/README.md`)
Plate Docx serializer plugin
This package implements the docx deserializer for Plate.
Documentation
License
Overview (`packages/emoji/README.md`)
Plate emoji plugin
This package implements the emoji plugin for Plate.
Documentation
Check out Emoji.
License
Overview (`packages/excalidraw/README.md`)
Plate excalidraw plugin
This package implements the excalidraw plugin for Plate.
Documentation
Check out
Excalidraw.
License
Overview (`packages/find-replace/README.md`)
Plate find and replace plugin
This package implements the find and replace plugin for Plate.
Documentation
Check out Find & Replace.
License
Overview (`packages/floating/README.md`)
Plate floating UI
This package implements the floating UI for Plate.
Documentation
See Link, Mention.
License
Overview (`packages/footnote/README.md`)
@platejs/footnote
Footnote plugins for Plate.
This package adds dedicated footnote reference and footnote definition nodes,
plus transforms and queries for inserting, resolving, navigating, and repairing
footnotes.
Features
- Parse GFM footnote references and definitions into Plate nodes
- Serialize footnote nodes back to markdown footnotes
- Insert a reference and matching definition with one transform
- Allocate the next free numeric identifier automatically
- Create a missing definition for an unresolved reference
- Detect and repair later duplicate definitions
- Navigate between references and definitions
Installation
npm install @platejs/footnote @platejs/markdown remark-gfmUsage
import {
FootnoteDefinitionPlugin,
FootnoteReferencePlugin,
} from '@platejs/footnote/react';
import { MarkdownPlugin } from '@platejs/markdown';
import { createPlateEditor } from 'platejs/react';
import remarkGfm from 'remark-gfm';
const editor = createPlateEditor({
plugins: [
FootnoteReferencePlugin,
FootnoteDefinitionPlugin,
MarkdownPlugin.configure({
options: {
remarkPlugins: [remarkGfm],
},
}),
],
});Package Surface
Queries:
api.footnote.nextIdapi.footnote.definitionapi.footnote.definitionsapi.footnote.definitionTextapi.footnote.duplicateDefinitionsapi.footnote.duplicateIdentifiersapi.footnote.hasDuplicateDefinitionsapi.footnote.isDuplicateDefinitionapi.footnote.isResolvedapi.footnote.references
Transforms:
tf.insert.footnotetf.footnote.createDefinitiontf.footnote.focusDefinitiontf.footnote.focusReferencetf.footnote.normalizeDuplicateDefinition
Documentation
- Footnote docs: https://platejs.org/docs/footnote
- Markdown docs: https://platejs.org/docs/markdown
License
Overview (`packages/indent/README.md`)
Plate block indentation plugin
This package implements block indentation support for Plate.
Documentation
Check out Indentation.
License
Overview (`packages/juice/README.md`)
Plate juice plugin
This package implements the juice plugin for Plate.
Given inserted HTML, juice will inline the CSS properties into the style attribute.
Documentation
Check out
Serializing HTML.
License
Overview (`packages/link/README.md`)
Plate link plugin
This package implements the link plugin for Plate.
Documentation
Check out Link.
License
Overview (`packages/list-classic/README.md`)
Plate list plugin
This package implements the list plugin for Plate.
Documentation
Check out List.
License
Overview (`packages/list/README.md`)
Plate indent list plugin
This package implements the indent list plugin for Plate.
It's a mix of indent and list plugins, also called as a "flat list"
because the list structure has no children.
Documentation
Check out List.
License
Overview (`packages/markdown/README.md`)
Plate MD serializer plugin
This package implements the Markdown serializer for Plate.
Documentation
Check out
Serializing Markdown.
License
Overview (`packages/math/README.md`)
Plate math plugin
This package implements the math plugin for Plate.
Documentation
Check out math.
License
Overview (`packages/media/README.md`)
Plate media plugins
This package implements the media plugins for Plate. It allows inserting
embeddable media such as images, YouTube or Vimeo videos and tweets into your
editor.
Includes:
- caption
- resizable
- media
- image
- iframe
Documentation
- Check out Media.
License
Overview (`packages/mention/README.md`)
Plate mention plugin
This package implements the mention plugin for Plate. It allows
autocompletion from user input.
Documentation
Check out Mention.
License
Overview (`packages/playwright/README.md`)
Interact with a Plate editor from inside a Playwright test
License
Overview (`packages/selection/README.md`)
Plate plugin for block selection
Plugin that allows you to select blocks in the drag area using the mouse or touch.
Documentation
Check out
Block Selection.
License
Overview (`packages/slash-command/README.md`)
Plate slash commands plugin
This package implements the slash commands plugin for Plate.
License
Overview (`packages/slate/README.md`)
Slate extension
Documentation
Visit https://platejs.org/docs/api/slate to view the documentation.
License
Overview (`packages/suggestion/README.md`)
Plate plugin for suggestion
License
Overview (`packages/tabbable/README.md`)
Plate tabbable plugin
This package programmatically corrects the tab order for tabbable elements inside the editor
Documentation
Check out
Tabbable.
License
Overview (`packages/table/README.md`)
Plate table plugin
This package implements the table plugin for Plate.
Documentation
Check out Table.
License
Overview (`packages/tag/README.md`)
Plate tag plugin
This package implements the tag plugin for Plate.
Documentation
Check out Tag.
License
Overview (`packages/test-utils/README.md`)
Plate test utilities
This package implements the test utilities for Plate.
License
Overview (`packages/toc/README.md`)
Table of Contents plugin
This package implements the table of contents plugin for Plate.
Documentation
Check out
Table of Contents.
License
Overview (`packages/toggle/README.md`)
Plate toggle plugin
This package implements the toggle plugin for Plate.
It's similar to the indent list plugin, in that it relies on the indent of siblings.
Documentation
Check out Toggle.
Ideas to improve this plugin
- Adding an option
initialValueof opentoggleIdsand a callbackonChange, for instance to store the state of open toggles in local storage and remember the state upon browser refresh. - Adding an option
defaultOpen. Currently, toggles are closed on initial rendering. - Adding an option to specify how to get the indent value of elements, right now we are relying on this being the default
KEY_ELEMENTfrom theindentplugin - An option to specify how to get the id of elements, right now we are using the default id attribute from the
node-idplugin. - Adding a placeholder below the toggle, like Notion does, when the toggle is expanded without any elements below.
- Make toggle button more accessible
- When indenting an element right of a closed toggle, it becomes hidden. This makes sense, but a nicer UI would be to open the toggle in that case, like Notion does.
License
Overview (`packages/utils/README.md`)
Plate utils
Documentation
Visit https://platejs.org/docs/api/utils to view the documentation.
License
Overview (`packages/yjs/README.md`)
Plate Yjs plugin
@platejs/yjs binds Plate editors to a shared Yjs document. It ships provider wrappers for IndexedDB, Hocuspocus, and WebRTC, and accepts custom providers that implement the same UnifiedProvider interface.
Read the main docs at platejs.org/docs/yjs.
Installation
Install the plugin.
npm install @platejs/yjsInstall network provider packages as needed:
npm install @hocuspocus/providernpm install y-webrtcUsage
Configure YjsPlugin with a providers array. Every configured provider receives the same plugin-owned Y.Doc and Awareness instance.
import { YjsPlugin } from '@platejs/yjs/react';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
YjsPlugin.configure({
options: {
providers: [
{
type: 'indexeddb',
options: {
docName: 'document-1',
},
},
{
type: 'hocuspocus',
options: {
name: 'document-1',
url: 'wss://collab.example.com',
},
},
{
type: 'webrtc',
options: {
roomName: 'document-1',
},
},
],
},
}),
],
skipInitialization: true,
});Call init after the editor mounts, and call destroy when it unmounts:
await editor.getApi(YjsPlugin).yjs.init({
id: 'document-1',
value: initialValue,
});
editor.getApi(YjsPlugin).yjs.destroy();Providers
| Type | Package | Purpose | Options |
|---|---|---|---|
indexeddb |
y-indexeddb |
Browser-local document persistence | { docName: string } |
hocuspocus |
@hocuspocus/provider |
WebSocket server collaboration | HocuspocusProviderConfiguration |
webrtc |
y-webrtc |
Peer-to-peer collaboration | { roomName: string; signaling?: string[]; password?: string; maxConns?: number; peerOpts?: object } |
Use the same document identifier across providers that should share one document. For example, pair docName: 'document-1' with name: 'document-1' or roomName: 'document-1'.
IndexedDB only persists Yjs updates locally. It does not transport awareness, cursors, or remote users; combine it with Hocuspocus or WebRTC for multi-user collaboration.
Shared Documents
Pass ydoc when another part of your app owns the document:
import * as Y from 'yjs';
const ydoc = new Y.Doc();
YjsPlugin.configure({
options: {
ydoc,
providers: [
{
type: 'indexeddb',
options: {
docName: 'document-1',
},
},
],
},
});Use sharedType when the editor content lives inside a nested Y.XmlText:
const parentDoc = new Y.Doc();
const editors = parentDoc.getMap('editors');
const mainContent = new Y.XmlText();
editors.set('main', mainContent);
YjsPlugin.configure({
options: {
sharedType: mainContent,
ydoc: parentDoc,
providers: [
{
type: 'indexeddb',
options: {
docName: 'document-1',
},
},
],
},
});Custom Providers
Use a pre-instantiated provider directly when you need behavior outside the built-in wrappers:
import type { UnifiedProvider } from '@platejs/yjs';
const provider: UnifiedProvider = new MyProvider({ awareness, doc: ydoc });
YjsPlugin.configure({
options: {
providers: [provider],
},
});Register reusable provider classes with registerProviderType:
import { registerProviderType } from '@platejs/yjs';
registerProviderType('custom', CustomProviderWrapper);
YjsPlugin.configure({
options: {
providers: [
{
type: 'custom',
options: {
roomName: 'document-1',
},
},
],
},
});License
Overview (`templates/plate-playground-template/README.md`)
Playground Template
A Next.js template with Plate AI, plugins and components.
Features
Requirements
- Node.js 20+
- bun
Installation
Choose one of these methods:
1. Using CLI (Recommended)
npx shadcn@latest add @plate/editor-ai2. Using Template
Use this template, then install dependencies:
bun installDevelopment
Copy the example env file:
cp .env.example .env.localConfigure .env.local:
UPLOADTHING_TOKENโ UploadThing API key (get one here)
Enter your own AI Gateway key in the editor settings to use AI. The example API routes use the caller's key.
Uploads work in local development. Before enabling production uploads, replace the development check in src/lib/uploadthing.ts with your application's session and permission checks. Add per-user upload limits.
If your application uses a shared server AI credential, authorize each request and enforce per-user usage limits before calling the provider. Keep server credentials out of client code.
Start the development server:
bun devVisit http://localhost:3000/editor to see the editor in action.
Overview (`templates/plate-template/README.md`)
Playground Template
A minimal template for building rich-text editors with Plate and Next.js.
Features
Requirements
- Node.js 20+
- bun
Installation
Choose one of these methods:
1. Using CLI (Recommended)
npx shadcn@latest add @plate/editor-basic2. Using Template
Use this template, then install dependencies:
bun installDevelopment
bun devVisit http://localhost:3000/editor to see the editor in action.
Upgrade
Using the CLI, you can upgrade to editor-ai by running:
npx shadcn@latest add @plate/editor-ai -oOverview (`tooling/cn/README.md`)
Plate
ๆจกๆฟ
ๆจๅฏไปฅ้ๆฉไปฅไธๆจกๆฟไนไธๅผๅงไฝฟ็จ๏ผ
| ้้กน | Plate | ๆไปถ | AI | ๅ็ซฏ |
|---|---|---|---|---|
| ็ฑปNotionๆจกๆฟ | โ | โ | โ | โ |
| Plateๆผ็คบๆจกๆฟ | โ | โ | โ | |
| Plateๆๅฐๆจกๆฟ | โ |
ๆๆกฃ
ๆจๅฏไปฅ้่ฟๆฅ็ๆไปฌ็ๆๆกฃไบ่งฃๆดๅคๅ ณไบPlate็ไฟกๆฏใ
่ดก็ฎ
่ฆๅผๅง่ดก็ฎ๏ผ่ฏทๆฅ็ๆไปฌ็่ดก็ฎๆๅใ
่ดก็ฎ่
ๆไปฌๅธๆๆจ่ฝๅ ๅ ฅๆไปฌ๏ผๆ ่ฎบๆฏ็ปๆไปฌไธไธช๐ๆๆ ๏ผๆไบคไธไธช๐ฅๆๅ่ฏทๆฑ๏ผ่ฟๆฏๅไบซๆจ็ๆไปถ๏ผๆจ็ๅธฎๅฉๆปๆฏๅผๅพ็งฐ่ต็ใ
้่ฆๆดๅคๅธฎๅฉ๏ผๅ ๅ ฅๆไปฌ็Discordใๆไปฌ้ๆถไธบๆจๆไพๆๅฏผใ(ๅฏไปฅๅจไธญๆ้ข้ไฝฟ็จไธญๆ่ฟ่กๆ้ฎ)
Overview (`.agents/skills/autogoal/README.md`)
Autogoal
Autogoal asks Codex to write a goal-backed plan ending with autoreview.
Install
npx skills add udecode/dotai --skill autogoalUse
Use autogoal for non-trivial work with an auditable finish line:
- debugging loops
- migrations
- benchmarks
- architecture plans
- pass-gated reviews
- multi-step issue work
Skip it for one-off answers, typo fixes, or tiny edits where the final response
can carry the evidence.
Flow
- Define the outcome, completion threshold, verification surface, constraints,
boundaries, and blocked condition. - Create or continue the active Codex goal with a short objective handle.
- Create a plan from a built-in or project template and put the full contract
there. - First checkpoint: copy every explicit prompt requirement into the plan as
checkable rows before implementation. - Work in slices and record evidence as you go.
- Run autoreview, then fix or record accepted findings.
- Run the completion check.
- Mark the goal complete only when the outcome is true and the plan passes.
Helpers
node .agents/skills/autogoal/scripts/create-goal-scratchpad.mjs \
--template task \
--with browser \
--title "short title"node .agents/skills/autogoal/scripts/check-complete.mjs docs/plans/<plan>.mdnode .agents/skills/autogoal/scripts/init-templates.mjsTemplates
Autogoal ships generic templates in skills/autogoal/assets/templates.
Installed skills expose them under .agents/skills/autogoal/assets/templates.
Project repos can keep their own templates in docs/plans/templates; the helper
prefers project templates before built-in templates.
Overview (`.agents/skills/react-useeffect/README.md`)
React useEffect Best Practices
A comprehensive guide teaching when to use useEffect in React, and more importantly, when NOT to use it. This skill is based on official React documentation and provides practical alternatives to common useEffect anti-patterns.
Purpose
Effects are an escape hatch from React's reactive paradigm. They let you synchronize with external systems like browser APIs, third-party widgets, or network requests. However, many developers overuse Effects for tasks that React handles better through other means.
This skill helps you:
- Identify when you truly need an Effect vs. when you don't
- Recognize common anti-patterns and their fixes
- Apply better alternatives like
useMemo,keyprop, and event handlers - Write Effects that are clean, maintainable, and free from race conditions
When to Use This Skill
Use this skill when you're:
- Writing or reviewing
useEffectcode - Using
useStateto store derived values - Implementing data fetching or subscriptions
- Synchronizing state between components
- Facing bugs with stale data or race conditions
- Wondering if your Effect is necessary
Trigger phrases:
- "Should I use useEffect for this?"
- "How do I fix this useEffect?"
- "My Effect is causing too many re-renders"
- "Data fetching with useEffect"
- "Reset state when props change"
- "Derived state from props"
How It Works
This skill provides guidance through three key resources:
- Quick Reference Table - Fast lookup for common scenarios with DO/DON'T patterns
- Decision Tree - Visual flowchart to determine the right approach
- Detailed Anti-Patterns - 9 common mistakes with explanations and fixes
- Better Alternatives - 8 proven patterns to replace unnecessary Effects
The skill teaches you to ask the right questions:
- Is there an external system involved?
- Am I responding to a user event or component appearance?
- Can this value be calculated during render?
- Do I need to reset state when a prop changes?
Key Features
1. Quick Reference Guide
Visual table showing the DO/DON'T for common scenarios:
- Derived state from props/state
- Expensive calculations
- Resetting state on prop change
- User event responses
- Notifying parent components
- Data fetching
2. Decision Tree
Clear flowchart that guides you from "Need to respond to something?" to the correct solution:
- User interaction โ Event handler
- Component appeared โ Effect (for external sync/analytics)
- Derived value needed โ Calculate during render (+ useMemo if expensive)
- Reset state on prop change โ Key prop
3. Anti-Pattern Recognition
Detailed examples of 9 common mistakes:
- Redundant state for derived values
- Filtering/transforming data in Effect
- Resetting state on prop change
- Event-specific logic in Effect
- Chains of Effects
- Notifying parent via Effect
- Passing data up to parent
- Fetching without cleanup (race conditions)
- App initialization in Effect
Each anti-pattern includes:
- Bad example with explanation
- Good example with fix
- Why the anti-pattern is problematic
4. Better Alternatives
8 proven patterns to replace unnecessary Effects:
- Calculate during render for derived state
useMemofor expensive calculationskeyprop to reset state- Store ID instead of object for stable references
- Event handlers for user actions
useSyncExternalStorefor external stores- Lifting state up for shared state
- Custom hooks for data fetching with cleanup
Usage Examples
Example 1: Derived State
Bad - Unnecessary Effect:
function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
const [fullName, setFullName] = useState('');
useEffect(() => {
setFullName(firstName + ' ' + lastName);
}, [firstName, lastName]);
}Good - Calculate during render:
function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
const fullName = firstName + ' ' + lastName; // Just compute it
}Example 2: Resetting State
Bad - Effect to reset:
function ProfilePage({ userId }) {
const [comment, setComment] = useState('');
useEffect(() => {
setComment('');
}, [userId]);
}Good - Key prop:
function ProfilePage({ userId }) {
return <Profile userId={userId} key={userId} />;
}
function Profile({ userId }) {
const [comment, setComment] = useState(''); // Resets automatically
}Example 3: Data Fetching with Cleanup
Bad - Race condition:
function SearchResults({ query }) {
const [results, setResults] = useState([]);
useEffect(() => {
fetchResults(query).then(json => {
setResults(json); // "hello" response may arrive after "hell"
});
}, [query]);
}Good - Cleanup flag:
function SearchResults({ query }) {
const [results, setResults] = useState([]);
useEffect(() => {
let ignore = false;
fetchResults(query).then(json => {
if (!ignore) setResults(json);
});
return () => { ignore = true; };
}, [query]);
}Example 4: Event Handler Instead of Effect
Bad - Effect watching state:
function ProductPage({ product, addToCart }) {
useEffect(() => {
if (product.isInCart) {
showNotification(`Added ${product.name}!`);
}
}, [product]);
function handleBuyClick() {
addToCart(product);
}
}Good - Handle in event:
function ProductPage({ product, addToCart }) {
function handleBuyClick() {
addToCart(product);
showNotification(`Added ${product.name}!`);
}
}When You DO Need Effects
Effects are appropriate for:
- Synchronizing with external systems - Browser APIs, third-party widgets, non-React code
- Subscriptions - WebSocket connections, global event listeners (prefer
useSyncExternalStore) - Analytics/logging - Code that needs to run because the component displayed
- Data fetching - With proper cleanup (or use your framework's built-in mechanism)
When You DON'T Need Effects
Avoid Effects for:
- Transforming data for rendering - Calculate at the top level instead
- Handling user events - Use event handlers where you know exactly what happened
- Deriving state - Just compute it:
const fullName = firstName + ' ' + lastName - Chaining state updates - Calculate all next state in the event handler
- Notifying parent components - Call the callback in the same event handler
- Resetting state - Use the
keyprop to create a fresh component instance
Best Practices
1. Start Without an Effect
Before adding an Effect, ask: "Is there an external system involved?" If no, you probably don't need an Effect.
2. Prefer Derived State
If you can calculate a value from props or state, don't store it in state with an Effect updating it.
3. Use the Right Tool
- Expensive calculation โ
useMemo - User interaction โ Event handler
- Reset on prop change โ
keyprop - External subscription โ
useSyncExternalStore - Shared state โ Lift state up
4. Always Clean Up
If your Effect subscribes, fetches, or sets timers, return a cleanup function to prevent memory leaks and race conditions.
5. Avoid Effect Chains
Multiple Effects triggering each other causes unnecessary re-renders and makes code hard to follow. Calculate everything in one place (usually an event handler).
6. Test in Strict Mode
React 18+ Strict Mode mounts components twice in development to expose missing cleanup. If your Effect breaks, you need cleanup.
7. Consider Framework Solutions
For data fetching, prefer your framework's built-in solution (Next.js, Remix) or libraries (React Query, SWR) over manual Effects.
Reference Files
This skill includes three detailed reference documents:
- SKILL.md - Quick reference table and decision tree
- anti-patterns.md - 9 common mistakes with detailed explanations
- alternatives.md - 8 better alternatives with code examples
Common Pitfalls
Multiple Re-renders
Symptom: Component re-renders many times in quick succession.
Cause: Effect that sets state based on state it depends on, creating a loop.
Fix: Calculate the final value in an event handler or during render.
Stale Data
Symptom: UI shows outdated values briefly before updating.
Cause: Using Effect to update derived state causes an extra render pass.
Fix: Calculate derived values during render instead of in state.
Race Conditions
Symptom: Fast typing shows results for old queries after new ones.
Cause: Missing cleanup in data fetching Effect.
Fix: Use cleanup flag (ignore variable) or AbortController.
Runs Twice in Development
Symptom: Effect runs twice on component mount in development.
Cause: React 18 Strict Mode intentionally mounts components twice to expose bugs.
Fix: Add proper cleanup. If it's app initialization that shouldn't run twice, use a module-level guard.
Resources
This skill is based on:
- React Official Docs: You Might Not Need an Effect
- React Official Docs: Synchronizing with Effects
- React Official Docs: Lifecycle of Reactive Effects
Summary
The golden rule: Effects are an escape hatch from React. If you're not synchronizing with an external system, you probably don't need an Effect.
Before writing useEffect, ask yourself:
- Is this responding to a user interaction? โ Use event handler
- Is this a value I can calculate from props/state? โ Calculate during render
- Is this resetting state when a prop changes? โ Use key prop
- Is this synchronizing with an external system? โ Use Effect with cleanup
Follow these patterns, and your React code will be more maintainable, performant, and bug-free.
Overview (`.agents/skills/vercel-react-best-practices/README.md`)
React Best Practices
A structured repository for creating and maintaining React Best Practices optimized for agents and LLMs.
Structure
rules/- Individual rule files (one per rule)_sections.md- Section metadata (titles, impacts, descriptions)_template.md- Template for creating new rulesarea-description.md- Individual rule files
src/- Build scripts and utilitiesmetadata.json- Document metadata (version, organization, abstract)AGENTS.md- Compiled output (generated)test-cases.json- Test cases for LLM evaluation (generated)
Getting Started
Install dependencies:
bashpnpm installBuild AGENTS.md from rules:
bashpnpm buildValidate rule files:
bashpnpm validateExtract test cases:
bashpnpm extract-tests
Creating a New Rule
- Copy
rules/_template.mdtorules/area-description.md - Choose the appropriate area prefix:
async-for Eliminating Waterfalls (Section 1)bundle-for Bundle Size Optimization (Section 2)server-for Server-Side Performance (Section 3)client-for Client-Side Data Fetching (Section 4)rerender-for Re-render Optimization (Section 5)rendering-for Rendering Performance (Section 6)js-for JavaScript Performance (Section 7)advanced-for Advanced Patterns (Section 8)
- Fill in the frontmatter and content
- Ensure you have clear examples with explanations
- Run
pnpm buildto regenerate AGENTS.md and test-cases.json
Rule File Structure
Each rule file should follow this structure:
---
title: Rule Title Here
impact: MEDIUM
impactDescription: Optional description
tags: tag1, tag2, tag3
---
## Rule Title Here
Brief explanation of the rule and why it matters.
**Incorrect (description of what's wrong):**
```typescript
// Bad code exampleCorrect (description of what's right):
// Good code exampleOptional explanatory text after examples.
Reference: Link
File Naming Convention
- Files starting with
_are special (excluded from build) - Rule files:
area-description.md(e.g.,async-parallel.md) - Section is automatically inferred from filename prefix
- Rules are sorted alphabetically by title within each section
- IDs (e.g., 1.1, 1.2) are auto-generated during build
Impact Levels
CRITICAL- Highest priority, major performance gainsHIGH- Significant performance improvementsMEDIUM-HIGH- Moderate-high gainsMEDIUM- Moderate performance improvementsLOW-MEDIUM- Low-medium gainsLOW- Incremental improvements
Scripts
pnpm build- Compile rules into AGENTS.mdpnpm validate- Validate all rule filespnpm extract-tests- Extract test cases for LLM evaluationpnpm dev- Build and validate
Contributing
When adding or modifying rules:
- Use the correct filename prefix for your section
- Follow the
_template.mdstructure - Include clear bad/good examples with explanations
- Add appropriate tags
- Run
pnpm buildto regenerate AGENTS.md and test-cases.json - Rules are automatically sorted by title - no need to manage numbers!
Acknowledgments
Originally created by @shuding at Vercel.
Overview (`docs/editor-behavior/commands/README.md`)
Editor Behavior Commands
This is the operator surface for resuming and maintaining
docs/editor-behavior.
Use it when you do not want to rediscover the workflow from scattered plans,
spec docs, and .omx artifacts.
This pack has two lanes:
- doc-governance:
maintain standards, spec, protocol, parity, audit, and evidence truth - implementation/runtime:
choose, launch, and close real code/test/product batches from the roadmap
Canonical Artifacts
- law stack:
- active execution notes:
- canonical remaining implementation roadmap:
- active supporting implementation plans:
- historical OMX artifacts:
Command Set
Doc-Governance Lane
- reconsolidate-law-stack.md
Re-sync the standards/spec/protocol/parity/audit stack when truth drifted,
including after runtime work changed behavior. - refresh-evidence-ledger.md
Refresh the evidence layer from research when doc truth or runtime planning is
blocked on weak authority. - reinterview-open-authority-gaps.md
Re-open authority questions when the law stack cannot answer them and either
doc maintenance or implementation planning is blocked by that ambiguity.
Implementation / Runtime Lane
- replan-next-batch.md
Turn current truth plus the roadmap into one concrete next runtime batch. - launch-next-ralph-batch.md
Execute the active approved runtime lane, not just the old major plan.
Fast Routing
If You Are In A Doc-Governance Problem
- If the docs disagree with each other, or a runtime batch changed behavior
without the law stack catching up, start with
reconsolidate-law-stack.md. - If the audit or research feels stale, or an implementation lane is blocked on
weak evidence, start with
refresh-evidence-ledger.md. - If the lane cannot answer โwhat should win here?โ, โwhat next?โ, or โwhat
should move up/down in priority?โ, run
reinterview-open-authority-gaps.md
before planning.
If You Are In An Implementation / Runtime Problem
- After authority is clear and you need the next executable runtime slice, run
replan-next-batch.md. - If the gate is already closed but you still need the remaining backlog order
or a narrower next slice, run
replan-next-batch.md. - When the next runtime batch is approved and concrete, run
launch-next-ralph-batch.md. - If runtime work exposes law drift, evidence debt, or unresolved authority,
bounce back to the doc-governance lane instead of forcing more code work.
Overview (`docs/research/commands/README.md`)
Research Commands
This directory contains command specs for operating the research layer.
Primary reusable entrypoint:
These pages are not knowledge pages like sources/ or concepts/.
They are operational docs that describe repeatable agent workflows.
Use them to define:
- full ingest-and-compile passes
- maintenance passes
- per-corpus completion rules for
fullmode - official-source discovery checks before declaring corpus gaps
- local-raw exhaustiveness rules before declaring
evidence gap
Current commands:
- full-pipeline.md
The full-mode sub-workflow used byresearch-wiki. - maintain.md
The maintain-mode sub-workflow used byresearch-wiki.
Overview (`docs/research/concepts/README.md`)
Concepts
This directory contains shared vocabulary and abstractions.
Each concept page should define one term cleanly and link to the systems,
decisions, entities, and sources that rely on it.
Current editor-architecture additions include:
- overlay-lane-separation.md
- durable-anchor-vs-live-handle.md
- runtime-identity-vs-tree-address.md
- source-scoped-overlay-invalidation.md
Overview (`docs/research/decisions/README.md`)
Decisions
This directory contains normalized choices and policy calls.
Each decision page should answer:
- what question was decided
- what answer won
- why it won
- what it overruled
- what sources support it
Overview (`docs/research/entities/README.md`)
Entities
This directory contains concrete named things.
Examples:
- editors like Typora or Obsidian
- reference products like Google Docs
- internal packages or plugins
Overview (`docs/research/open-questions/README.md`)
Open Questions
This directory contains unresolved ambiguity that should stay explicit.
Use it when the evidence is mixed, thin, or incomplete.
Do not silently resolve those gaps in summary pages.
Overview (`docs/research/sources/README.md`)
Sources
This directory contains compiled research summaries of raw evidence.
Each page here should summarize one raw source or one tightly related source
group from ../raw.
Do not store raw captures here.
Overview (`docs/research/systems/README.md`)
Systems
This directory contains system maps and authority maps.
Use it for larger structures:
- editor-behavior authority models
- package or subsystem maps
- cross-editor comparison surfaces
Current editor-architecture pages include:
Overview (`docs/slate-v2-draft/archive/README.md`)
date: 2026-04-07 topic: slate-v2-archive-readme
Slate v2 Archive
Archive only. Historical reference doc. For current queue and roadmap truth, see master-roadmap.md.
This folder keeps retired historical docs from the old docs/slate-v2 root
stack. These files are for archaeology, not the current replacement verdict.
Read these first instead:
- ../overview.md
- ../master-roadmap.md
- ../architecture-contract.md
- ../release-readiness-decision.md
- ../replacement-family-ledger.md
- ../full-replacement-blockers.md
- ../replacement-gates-scoreboard.md
Archive contents:
- historical benchmark and hardening writeups
- historical migration and compatibility writeups
- frozen roadmap and phase-plan artifacts
- older synthesis and status docs
Overview (`docs/slate-v2-draft/ledgers/README.md`)
date: 2026-04-13 topic: slate-v2-exact-ledgers-index
Slate v2 Exact Ledgers
Exact 1:1 legacy-file ledgers that complement the human control ledger in
release-file-review-ledger.md.
Rule:
these ledgers are the archaeology layer
they must stay exact per legacy file
they do not dictate one-current-file-per-legacy-file recovery
code proof should live in the smallest current behavior-domain owner file
dead harness files should close as
explicit-skipormapped-mixed, not
fake-recovered source cosplay
Status key:
mapped-mirrored: current proof already carries the legacy file valuemapped-recovered: current proof recovered the legacy file value on a new ownermapped-mixed: one legacy file splits into mirrored, recovered, and/or
explicit-skip subclaimssame-path-current: the same relative current test file still exists inslate-v2explicit-skip: intentionally outside the live contractneeds-triage: no honest exact mapping exists yet
Overview (`docs/slate-v2/ledgers/README.md`)
date: 2026-04-16 topic: slate-v2-ledgers-readme status: active
Ledgers
Use this folder for package, API, test, and example inventories during the
fresh-branch migration.
Status words:
recoveredextendedmixedopenpost RCcut
Current live ledgers:
- fork-issue-dossier.md
- example-parity-matrix.md
- legacy-playwright-example-tests.md
- legacy-slate-history-test-files.md
- legacy-slate-react-test-files.md
- legacy-slate-test-files.md
- slate-legacy-draft-contract-corpus.md
- slate-history-legacy-draft-contract-corpus.md
- slate-hyperscript-legacy-draft-contract-corpus.md
- slate-dom-legacy-draft-contract-corpus.md
- slate-react-legacy-draft-contract-corpus.md
- slate-editor-api.md
- slate-history-api.md
- slate-interfaces-api.md
- slate-react-api.md
- slate-transforms-api.md
Current tranche-3 owner docs:
Current tranche-3 landed waves:
- 2026-04-18-slate-v2-slate-accessor-batch-wave-plan.md
- restored direct proof owners now live in
.tmp/slate-v2:packages/slate/test/query-contract.tspackages/slate/test/legacy-editor-nodes-fixtures.tspackages/slate/test/legacy-interfaces-fixtures.ts
Historical tranche-3 planning docs:
- the parity-first tranche docs below are historical context now
- 2026-04-18-slate-v2-slate-query-first-wave-plan.md
- 2026-04-18-slate-v2-slate-accessor-batch-wave-plan.md
- 2026-04-18-slate-v2-slate-interfaces-transforms-wave-plan.md
Overview (`docs/sync/shadcn/README.md`)
Sync Shadcn
This directory tracks Plate's sync point against upstream shadcn-ui/ui
docs in ../shadcn/apps/v4.
status.jsonrecords the current upstream commit baseline.decisions.mdrecords durable keep/fork/exclude policy for Plate docs.runs/stores range-specific audits, inventories, patches, and plans.
Use .agents/skills/sync-shadcn/SKILL.md before pulling newer upstream
shadcn docs changes into apps/www.
The baseline only moves after every upstream change in a range is accounted for
as adopted, smart-merged, intentionally forked, or explicitly excluded.
Overview (`packages/udecode/cmdk/README.md`)
cmdk
Fork of cmdk with control actions.
useCommandActionshook to control the command menu.
License
Overview (`packages/udecode/cn/README.md`)
`cn` utils
React & Tailwind utils used by Plate UI.
Documentation
Visit https://platejs.org/docs/api/cn to view the documentation.
License
Overview (`packages/udecode/depset/README.md`)
depset
A command-line tool to synchronize package dependencies in your package.json to their latest versions, a specific target version, or versions matching a pattern.
Invocation
Run depset using your preferred package manager:
- npx:bash
npx depset@latest [args...] - pnpm:bash
pnpm dlx depset@latest [args...] - yarn:bash
yarn dlx depset@latest [args...] - bun:bash
bunx depset@latest [args...]
Usage
depset [package-specifier] [target-version] [options]Arguments
[package-specifier](Optional)
The package name or pattern to target. If omitted (and--yesis not used), you will be prompted.- Exact Name: e.g.,
lodash,@babel/core - Scope: e.g.,
@myorg(targets packages like@myorg/component-a,@myorg/utils) - Prefix: e.g.,
eslint-*(targets packages likeeslint-plugin-react,eslint-config-next)
- Exact Name: e.g.,
[target-version](Optional)
The maximum version to synchronize to (e.g., "1", "1.2", "1.2.3"). If omitted (and neither--latestnor--yesare used), you will be prompted. If--latestis used, this is ignored.
Options
Usage: depset [options] [package-specifier] [target-version]
Synchronize package dependencies to their latest or a specific version.
Arguments:
package-specifier Package name or pattern (e.g., "@scope/foo*", "my-package", "@myorg").
Prompts if not provided (unless -y is used).
target-version Target version (e.g., "1.2.3"). Prompts if not provided (unless -L or -y is used).
Defaults to latest if left blank in prompt or if -L is used.
Options:
-L, --latest Use the latest version, skip version prompt. (default: false)
-i, --install Automatically run install after updating package.json. (default: false)
-y, --yes Skip all confirmation prompts. (default: false)
-c, --cwd Set the current working directory. (default: current directory)
-s, --silent Silence all output except for errors. (default: false)
-v, --version Display the version number.
-h, --help Display help for command.Examples
Sync
lodashto its latest version (prompts for version if not specified with--latest):bashnpx depset@latest lodashSync all packages in the
@babelscope to their absolute latest versions, and install, skipping all prompts:bashnpx depset@latest @babel --latest --install --yesSync packages starting with
eslint-up to version8.50.0:bashnpx depset@latest "eslint-*" 8.50.0(You will be prompted to confirm changes and installation unless
-yis used)Run interactively, prompting for all inputs:
bashnpx depset@latest
Overview (`packages/udecode/react-hotkeys/README.md`)
Udecode react-hotkeys-hook fork
This is a fork of the original [email protected] and the following changes.
Documentation
Visit https://platejs.org/docs/api/react-utils to view the documentation.
License
Overview (`packages/udecode/react-utils/README.md`)
Udecode React utils
React utils used by the many packages of the Udecode ecosystem.
Documentation
Visit https://platejs.org/docs/api/react-utils to view the documentation.
License
Overview (`packages/udecode/utils/README.md`)
Udecode Utils
Utils used by the many packages of the Udecode ecosystem.
License
Overview (`tooling/templates/plate-playground-template/README.md`)
Playground Template
A Next.js template with Plate AI, plugins and components.
Features
Requirements
- Node.js 20+
- bun
Installation
Choose one of these methods:
1. Using CLI (Recommended)
npx shadcn@latest add @plate/editor-ai2. Using Template
Use this template, then install dependencies:
bun installDevelopment
Copy the example env file:
cp .env.example .env.localConfigure .env.local:
UPLOADTHING_TOKENโ UploadThing API key (get one here)
Enter your own AI Gateway key in the editor settings to use AI. The example API routes use the caller's key.
Uploads work in local development. Before enabling production uploads, replace the development check in src/lib/uploadthing.ts with your application's session and permission checks. Add per-user upload limits.
If your application uses a shared server AI credential, authorize each request and enforce per-user usage limits before calling the provider. Keep server credentials out of client code.
Start the development server:
bun devVisit http://localhost:3000/editor to see the editor in action.
Overview (`docs/research/sources/editor-architecture/README.md`)
Editor Architecture Sources
This directory holds compiled summaries for the editor-architecture comparison
lane.
Current scope:
- decorations / annotations / widget architecture
- React 19.2 perf architecture
- read/update lifecycle architecture across Lexical, ProseMirror, and Tiptap
- node/text/mark/render DX across ProseMirror, Lexical, and Tiptap
If future editor-architecture work moves into other surfaces, add separate
cluster pages instead of bloating a single mixed summary.
Current evidence is grounded in normalized raw families under ../raw, official
local repo clones under ../, plus the local plan docs that already captured
the Slate v2 decorations / annotations research.
Raw Corpus Availability
As of 2026-04-23, the Lexical, ProseMirror, Tiptap, and Tiptap Docs raw source
families are normalized under ../raw.
Current raw evidence:
../raw/lexical/repo: official Lexical repo clone.../raw/prosemirror/repo: official ProseMirror umbrella repo clone.../raw/prosemirror/packages/*: official ProseMirror package clones for
architecture evidence.../raw/tiptap/repo: official Tiptap repo clone.../raw/tiptap/docs: official Tiptap Docs repo clone.
Disposition:
- strongest evidence found: normalized official raw clones under
../raw - raw gap: closed for the current read/update architecture pass
- compile gap: closed for read/update architecture; broader product areas such
as tables, comments/suggestions, and AI tooling need separate passes if they
become active
Current pages:
- decorations-annotations-overlay-corpus.md
- prosemirror-mapped-overlays-and-bookmarks.md
- lexical-mark-store-and-decorator-split.md
- react-19-2-external-store-and-background-ui.md
- tiptap-comments-suggestions-and-node-range.md
- slate-v2-local-proof-substrate.md
- layout-measurement-and-ime-lanes.md
- lightweight-editable-surface-lower-bound.md
- service-channels-and-live-stores.md
- read-update-runtime-corpus-ledger.md
- lexical-read-update-extension-runtime.md
- prosemirror-transaction-view-dom-runtime.md
- tiptap-extension-command-react-dx.md
- node-text-mark-render-dx-corpus-ledger.md
- scroll-selection-visibility-runtime.md
- pretext-pagination-page-virtualization.md
This directory should not turn into a dump of one-off notes.
Split it further only when the lane needs deeper per-corpus source pages.
Overview (`docs/research/sources/lexical/README.md`)
Lexical Sources
This directory contains compiled research summaries derived from the official
Lexical monorepo at /Users/zbeyens/git/lexical plus the live docs entrypoints
on https://lexical.dev.
Current pages:
This layer is source-oriented. It is not yet the final decision layer.
Overview (`docs/research/sources/milkdown/README.md`)
Milkdown Sources
This directory contains compiled research summaries derived from the upstream
Milkdown raw clone in ../raw/milkdown/repo and the raw entrypoint in../raw/milkdown.
Current pages:
- corpus-overview.md
- editor-behavior-priority-map.md
- behavior-test-lanes.md
- docs-and-package-surface-map.md
- latex-trigger-surface.md
- input-autoformat-lanes.md
This layer is source-oriented. It is not yet the final concept/decision layer.
Overview (`docs/research/sources/obsidian/README.md`)
Obsidian Sources
This directory contains compiled research summaries derived from:
../raw/obsidian/help../raw/obsidian/developer
Current pages:
- corpus-overview.md
- editor-behavior-priority-map.md
- editing-modes-and-markdown-surface.md
- math-delimiters-and-pair-settings.md
- linking-navigation-and-search.md
- developer-editor-extension-surface.md
- footnotes-and-block-links.md
Overview (`docs/research/sources/prosemirror/README.md`)
ProseMirror Sources
This directory contains compiled research summaries derived from the official
ProseMirror docs entrypoints on https://prosemirror.net plus the local repo at/Users/zbeyens/git/prosemirror.
Current pages:
This layer is source-oriented. It is not yet the final decision layer.
Overview (`docs/research/sources/slate/README.md`)
Slate Sources
This directory contains compiled research summaries derived from the official
Slate repo and docs at /Users/zbeyens/git/slate and https://docs.slatejs.org.
Current pages:
This layer is source-oriented. It is not yet the final decision layer.
Overview (`docs/research/sources/tiptap/README.md`)
Tiptap Sources
This directory contains compiled research summaries derived from the normalized
Tiptap raw source family under ../raw/tiptap.
Raw entrypoints:
- docs:
../raw/tiptap/docs - source/packages:
../raw/tiptap/repo - catalog:
../raw/tiptap/catalog.md
Current pages:
This layer is source-oriented. It is not yet the final decision layer.
Overview (`docs/research/sources/typora/README.md`)
Typora Sources
This directory will hold compiled summaries derived from ../raw/typora.
It should contain:
- summary pages for important Typora docs or release-note evidence
- compact behavior extracts
- links to impacted decision, concept, and system pages
Do not store raw captured Typora docs here.
Current pages:
- corpus-overview.md
- editor-behavior-priority-map.md
- markdown-native-editing-foundations.md
- clipboard-and-delete-behavior.md
- links-images-and-html-behavior.md
- media-authoring-and-path-policy.md
- navigation-search-outline-and-toc.md
- code-math-table-and-task-surfaces.md
- math-delimiter-triggers.md
- markdown-shorthand-and-inline-autoformat.md
One-to-one source-card material now lives in:
../raw/typora/page-cards/../raw/typora/catalog.md
Overview (`templates/plate-playground-template/.agents/skills/react-useeffect/README.md`)
React useEffect Best Practices
A comprehensive guide teaching when to use useEffect in React, and more importantly, when NOT to use it. This skill is based on official React documentation and provides practical alternatives to common useEffect anti-patterns.
Purpose
Effects are an escape hatch from React's reactive paradigm. They let you synchronize with external systems like browser APIs, third-party widgets, or network requests. However, many developers overuse Effects for tasks that React handles better through other means.
This skill helps you:
- Identify when you truly need an Effect vs. when you don't
- Recognize common anti-patterns and their fixes
- Apply better alternatives like
useMemo,keyprop, and event handlers - Write Effects that are clean, maintainable, and free from race conditions
When to Use This Skill
Use this skill when you're:
- Writing or reviewing
useEffectcode - Using
useStateto store derived values - Implementing data fetching or subscriptions
- Synchronizing state between components
- Facing bugs with stale data or race conditions
- Wondering if your Effect is necessary
Trigger phrases:
- "Should I use useEffect for this?"
- "How do I fix this useEffect?"
- "My Effect is causing too many re-renders"
- "Data fetching with useEffect"
- "Reset state when props change"
- "Derived state from props"
How It Works
This skill provides guidance through three key resources:
- Quick Reference Table - Fast lookup for common scenarios with DO/DON'T patterns
- Decision Tree - Visual flowchart to determine the right approach
- Detailed Anti-Patterns - 9 common mistakes with explanations and fixes
- Better Alternatives - 8 proven patterns to replace unnecessary Effects
The skill teaches you to ask the right questions:
- Is there an external system involved?
- Am I responding to a user event or component appearance?
- Can this value be calculated during render?
- Do I need to reset state when a prop changes?
Key Features
1. Quick Reference Guide
Visual table showing the DO/DON'T for common scenarios:
- Derived state from props/state
- Expensive calculations
- Resetting state on prop change
- User event responses
- Notifying parent components
- Data fetching
2. Decision Tree
Clear flowchart that guides you from "Need to respond to something?" to the correct solution:
- User interaction โ Event handler
- Component appeared โ Effect (for external sync/analytics)
- Derived value needed โ Calculate during render (+ useMemo if expensive)
- Reset state on prop change โ Key prop
3. Anti-Pattern Recognition
Detailed examples of 9 common mistakes:
- Redundant state for derived values
- Filtering/transforming data in Effect
- Resetting state on prop change
- Event-specific logic in Effect
- Chains of Effects
- Notifying parent via Effect
- Passing data up to parent
- Fetching without cleanup (race conditions)
- App initialization in Effect
Each anti-pattern includes:
- Bad example with explanation
- Good example with fix
- Why the anti-pattern is problematic
4. Better Alternatives
8 proven patterns to replace unnecessary Effects:
- Calculate during render for derived state
useMemofor expensive calculationskeyprop to reset state- Store ID instead of object for stable references
- Event handlers for user actions
useSyncExternalStorefor external stores- Lifting state up for shared state
- Custom hooks for data fetching with cleanup
Usage Examples
Example 1: Derived State
Bad - Unnecessary Effect:
function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
const [fullName, setFullName] = useState('');
useEffect(() => {
setFullName(firstName + ' ' + lastName);
}, [firstName, lastName]);
}Good - Calculate during render:
function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
const fullName = firstName + ' ' + lastName; // Just compute it
}Example 2: Resetting State
Bad - Effect to reset:
function ProfilePage({ userId }) {
const [comment, setComment] = useState('');
useEffect(() => {
setComment('');
}, [userId]);
}Good - Key prop:
function ProfilePage({ userId }) {
return ;
}
function Profile({ userId }) {
const [comment, setComment] = useState(''); // Resets automatically
}Example 3: Data Fetching with Cleanup
Bad - Race condition:
function SearchResults({ query }) {
const [results, setResults] = useState([]);
useEffect(() => {
fetchResults(query).then(json => {
setResults(json); // "hello" response may arrive after "hell"
});
}, [query]);
}Good - Cleanup flag:
function SearchResults({ query }) {
const [results, setResults] = useState([]);
useEffect(() => {
let ignore = false;
fetchResults(query).then(json => {
if (!ignore) setResults(json);
});
return () => { ignore = true; };
}, [query]);
}Example 4: Event Handler Instead of Effect
Bad - Effect watching state:
function ProductPage({ product, addToCart }) {
useEffect(() => {
if (product.isInCart) {
showNotification(`Added ${product.name}!`);
}
}, [product]);
function handleBuyClick() {
addToCart(product);
}
}Good - Handle in event:
function ProductPage({ product, addToCart }) {
function handleBuyClick() {
addToCart(product);
showNotification(`Added ${product.name}!`);
}
}When You DO Need Effects
Effects are appropriate for:
- Synchronizing with external systems - Browser APIs, third-party widgets, non-React code
- Subscriptions - WebSocket connections, global event listeners (prefer
useSyncExternalStore) - Analytics/logging - Code that needs to run because the component displayed
- Data fetching - With proper cleanup (or use your framework's built-in mechanism)
When You DON'T Need Effects
Avoid Effects for:
- Transforming data for rendering - Calculate at the top level instead
- Handling user events - Use event handlers where you know exactly what happened
- Deriving state - Just compute it:
const fullName = firstName + ' ' + lastName - Chaining state updates - Calculate all next state in the event handler
- Notifying parent components - Call the callback in the same event handler
- Resetting state - Use the
keyprop to create a fresh component instance
Best Practices
1. Start Without an Effect
Before adding an Effect, ask: "Is there an external system involved?" If no, you probably don't need an Effect.
2. Prefer Derived State
If you can calculate a value from props or state, don't store it in state with an Effect updating it.
3. Use the Right Tool
- Expensive calculation โ
useMemo - User interaction โ Event handler
- Reset on prop change โ
keyprop - External subscription โ
useSyncExternalStore - Shared state โ Lift state up
4. Always Clean Up
If your Effect subscribes, fetches, or sets timers, return a cleanup function to prevent memory leaks and race conditions.
5. Avoid Effect Chains
Multiple Effects triggering each other causes unnecessary re-renders and makes code hard to follow. Calculate everything in one place (usually an event handler).
6. Test in Strict Mode
React 18+ Strict Mode mounts components twice in development to expose missing cleanup. If your Effect breaks, you need cleanup.
7. Consider Framework Solutions
For data fetching, prefer your framework's built-in solution (Next.js, Remix) or libraries (React Query, SWR) over manual Effects.
Reference Files
This skill includes three detailed reference documents:
- SKILL.md - Quick reference table and decision tree
- anti-patterns.md - 9 common mistakes with detailed explanations
- alternatives.md - 8 better alternatives with code examples
Common Pitfalls
Multiple Re-renders
Symptom: Component re-renders many times in quick succession.
Cause: Effect that sets state based on state it depends on, creating a loop.
Fix: Calculate the final value in an event handler or during render.
Stale Data
Symptom: UI shows outdated values briefly before updating.
Cause: Using Effect to update derived state causes an extra render pass.
Fix: Calculate derived values during render instead of in state.
Race Conditions
Symptom: Fast typing shows results for old queries after new ones.
Cause: Missing cleanup in data fetching Effect.
Fix: Use cleanup flag (ignore variable) or AbortController.
Runs Twice in Development
Symptom: Effect runs twice on component mount in development.
Cause: React 18 Strict Mode intentionally mounts components twice to expose bugs.
Fix: Add proper cleanup. If it's app initialization that shouldn't run twice, use a module-level guard.
Resources
This skill is based on:
- React Official Docs: You Might Not Need an Effect
- React Official Docs: Synchronizing with Effects
- React Official Docs: Lifecycle of Reactive Effects
Summary
The golden rule: Effects are an escape hatch from React. If you're not synchronizing with an external system, you probably don't need an Effect.
Before writing useEffect, ask yourself:
- Is this responding to a user interaction? โ Use event handler
- Is this a value I can calculate from props/state? โ Calculate during render
- Is this resetting state when a prop changes? โ Use key prop
- Is this synchronizing with an external system? โ Use Effect with cleanup
Follow these patterns, and your React code will be more maintainable, performant, and bug-free.
Overview (`templates/plate-playground-template/.agents/skills/vercel-react-best-practices/README.md`)
React Best Practices
A structured repository for creating and maintaining React Best Practices optimized for agents and LLMs.
Structure
rules/- Individual rule files (one per rule)_sections.md- Section metadata (titles, impacts, descriptions)_template.md- Template for creating new rulesarea-description.md- Individual rule files
src/- Build scripts and utilitiesmetadata.json- Document metadata (version, organization, abstract)AGENTS.md- Compiled output (generated)test-cases.json- Test cases for LLM evaluation (generated)
Getting Started
Install dependencies:
bashpnpm installBuild AGENTS.md from rules:
bashpnpm buildValidate rule files:
bashpnpm validateExtract test cases:
bashpnpm extract-tests
Creating a New Rule
- Copy
rules/_template.mdtorules/area-description.md - Choose the appropriate area prefix:
async-for Eliminating Waterfalls (Section 1)bundle-for Bundle Size Optimization (Section 2)server-for Server-Side Performance (Section 3)client-for Client-Side Data Fetching (Section 4)rerender-for Re-render Optimization (Section 5)rendering-for Rendering Performance (Section 6)js-for JavaScript Performance (Section 7)advanced-for Advanced Patterns (Section 8)
- Fill in the frontmatter and content
- Ensure you have clear examples with explanations
- Run
pnpm buildto regenerate AGENTS.md and test-cases.json
Rule File Structure
Each rule file should follow this structure:
---
title: Rule Title Here
impact: MEDIUM
impactDescription: Optional description
tags: tag1, tag2, tag3
---
## Rule Title Here
Brief explanation of the rule and why it matters.
**Incorrect (description of what's wrong):**
```typescript
// Bad code exampleCorrect (description of what's right):
// Good code exampleOptional explanatory text after examples.
Reference: Link
File Naming Convention
- Files starting with
_are special (excluded from build) - Rule files:
area-description.md(e.g.,async-parallel.md) - Section is automatically inferred from filename prefix
- Rules are sorted alphabetically by title within each section
- IDs (e.g., 1.1, 1.2) are auto-generated during build
Impact Levels
CRITICAL- Highest priority, major performance gainsHIGH- Significant performance improvementsMEDIUM-HIGH- Moderate-high gainsMEDIUM- Moderate performance improvementsLOW-MEDIUM- Low-medium gainsLOW- Incremental improvements
Scripts
pnpm build- Compile rules into AGENTS.mdpnpm validate- Validate all rule filespnpm extract-tests- Extract test cases for LLM evaluationpnpm dev- Build and validate
Contributing
When adding or modifying rules:
- Use the correct filename prefix for your section
- Follow the
_template.mdstructure - Include clear bad/good examples with explanations
- Add appropriate tags
- Run
pnpm buildto regenerate AGENTS.md and test-cases.json - Rules are automatically sorted by title - no need to manage numbers!
Acknowledgments
Originally created by @shuding at Vercel.
Overview (`templates/plate-template/.agents/skills/react-useeffect/README.md`)
React useEffect Best Practices
A comprehensive guide teaching when to use useEffect in React, and more importantly, when NOT to use it. This skill is based on official React documentation and provides practical alternatives to common useEffect anti-patterns.
Purpose
Effects are an escape hatch from React's reactive paradigm. They let you synchronize with external systems like browser APIs, third-party widgets, or network requests. However, many developers overuse Effects for tasks that React handles better through other means.
This skill helps you:
- Identify when you truly need an Effect vs. when you don't
- Recognize common anti-patterns and their fixes
- Apply better alternatives like
useMemo,keyprop, and event handlers - Write Effects that are clean, maintainable, and free from race conditions
When to Use This Skill
Use this skill when you're:
- Writing or reviewing
useEffectcode - Using
useStateto store derived values - Implementing data fetching or subscriptions
- Synchronizing state between components
- Facing bugs with stale data or race conditions
- Wondering if your Effect is necessary
Trigger phrases:
- "Should I use useEffect for this?"
- "How do I fix this useEffect?"
- "My Effect is causing too many re-renders"
- "Data fetching with useEffect"
- "Reset state when props change"
- "Derived state from props"
How It Works
This skill provides guidance through three key resources:
- Quick Reference Table - Fast lookup for common scenarios with DO/DON'T patterns
- Decision Tree - Visual flowchart to determine the right approach
- Detailed Anti-Patterns - 9 common mistakes with explanations and fixes
- Better Alternatives - 8 proven patterns to replace unnecessary Effects
The skill teaches you to ask the right questions:
- Is there an external system involved?
- Am I responding to a user event or component appearance?
- Can this value be calculated during render?
- Do I need to reset state when a prop changes?
Key Features
1. Quick Reference Guide
Visual table showing the DO/DON'T for common scenarios:
- Derived state from props/state
- Expensive calculations
- Resetting state on prop change
- User event responses
- Notifying parent components
- Data fetching
2. Decision Tree
Clear flowchart that guides you from "Need to respond to something?" to the correct solution:
- User interaction โ Event handler
- Component appeared โ Effect (for external sync/analytics)
- Derived value needed โ Calculate during render (+ useMemo if expensive)
- Reset state on prop change โ Key prop
3. Anti-Pattern Recognition
Detailed examples of 9 common mistakes:
- Redundant state for derived values
- Filtering/transforming data in Effect
- Resetting state on prop change
- Event-specific logic in Effect
- Chains of Effects
- Notifying parent via Effect
- Passing data up to parent
- Fetching without cleanup (race conditions)
- App initialization in Effect
Each anti-pattern includes:
- Bad example with explanation
- Good example with fix
- Why the anti-pattern is problematic
4. Better Alternatives
8 proven patterns to replace unnecessary Effects:
- Calculate during render for derived state
useMemofor expensive calculationskeyprop to reset state- Store ID instead of object for stable references
- Event handlers for user actions
useSyncExternalStorefor external stores- Lifting state up for shared state
- Custom hooks for data fetching with cleanup
Usage Examples
Example 1: Derived State
Bad - Unnecessary Effect:
function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
const [fullName, setFullName] = useState('');
useEffect(() => {
setFullName(firstName + ' ' + lastName);
}, [firstName, lastName]);
}Good - Calculate during render:
function Form() {
const [firstName, setFirstName] = useState('Taylor');
const [lastName, setLastName] = useState('Swift');
const fullName = firstName + ' ' + lastName; // Just compute it
}Example 2: Resetting State
Bad - Effect to reset:
function ProfilePage({ userId }) {
const [comment, setComment] = useState('');
useEffect(() => {
setComment('');
}, [userId]);
}Good - Key prop:
function ProfilePage({ userId }) {
return <Profile userId={userId} key={userId} />;
}
function Profile({ userId }) {
const [comment, setComment] = useState(''); // Resets automatically
}Example 3: Data Fetching with Cleanup
Bad - Race condition:
function SearchResults({ query }) {
const [results, setResults] = useState([]);
useEffect(() => {
fetchResults(query).then(json => {
setResults(json); // "hello" response may arrive after "hell"
});
}, [query]);
}Good - Cleanup flag:
function SearchResults({ query }) {
const [results, setResults] = useState([]);
useEffect(() => {
let ignore = false;
fetchResults(query).then(json => {
if (!ignore) setResults(json);
});
return () => { ignore = true; };
}, [query]);
}Example 4: Event Handler Instead of Effect
Bad - Effect watching state:
function ProductPage({ product, addToCart }) {
useEffect(() => {
if (product.isInCart) {
showNotification(`Added ${product.name}!`);
}
}, [product]);
function handleBuyClick() {
addToCart(product);
}
}Good - Handle in event:
function ProductPage({ product, addToCart }) {
function handleBuyClick() {
addToCart(product);
showNotification(`Added ${product.name}!`);
}
}When You DO Need Effects
Effects are appropriate for:
- Synchronizing with external systems - Browser APIs, third-party widgets, non-React code
- Subscriptions - WebSocket connections, global event listeners (prefer
useSyncExternalStore) - Analytics/logging - Code that needs to run because the component displayed
- Data fetching - With proper cleanup (or use your framework's built-in mechanism)
When You DON'T Need Effects
Avoid Effects for:
- Transforming data for rendering - Calculate at the top level instead
- Handling user events - Use event handlers where you know exactly what happened
- Deriving state - Just compute it:
const fullName = firstName + ' ' + lastName - Chaining state updates - Calculate all next state in the event handler
- Notifying parent components - Call the callback in the same event handler
- Resetting state - Use the
keyprop to create a fresh component instance
Best Practices
1. Start Without an Effect
Before adding an Effect, ask: "Is there an external system involved?" If no, you probably don't need an Effect.
2. Prefer Derived State
If you can calculate a value from props or state, don't store it in state with an Effect updating it.
3. Use the Right Tool
- Expensive calculation โ
useMemo - User interaction โ Event handler
- Reset on prop change โ
keyprop - External subscription โ
useSyncExternalStore - Shared state โ Lift state up
4. Always Clean Up
If your Effect subscribes, fetches, or sets timers, return a cleanup function to prevent memory leaks and race conditions.
5. Avoid Effect Chains
Multiple Effects triggering each other causes unnecessary re-renders and makes code hard to follow. Calculate everything in one place (usually an event handler).
6. Test in Strict Mode
React 18+ Strict Mode mounts components twice in development to expose missing cleanup. If your Effect breaks, you need cleanup.
7. Consider Framework Solutions
For data fetching, prefer your framework's built-in solution (Next.js, Remix) or libraries (React Query, SWR) over manual Effects.
Reference Files
This skill includes three detailed reference documents:
- SKILL.md - Quick reference table and decision tree
- anti-patterns.md - 9 common mistakes with detailed explanations
- alternatives.md - 8 better alternatives with code examples
Common Pitfalls
Multiple Re-renders
Symptom: Component re-renders many times in quick succession.
Cause: Effect that sets state based on state it depends on, creating a loop.
Fix: Calculate the final value in an event handler or during render.
Stale Data
Symptom: UI shows outdated values briefly before updating.
Cause: Using Effect to update derived state causes an extra render pass.
Fix: Calculate derived values during render instead of in state.
Race Conditions
Symptom: Fast typing shows results for old queries after new ones.
Cause: Missing cleanup in data fetching Effect.
Fix: Use cleanup flag (ignore variable) or AbortController.
Runs Twice in Development
Symptom: Effect runs twice on component mount in development.
Cause: React 18 Strict Mode intentionally mounts components twice to expose bugs.
Fix: Add proper cleanup. If it's app initialization that shouldn't run twice, use a module-level guard.
Resources
This skill is based on:
- React Official Docs: You Might Not Need an Effect
- React Official Docs: Synchronizing with Effects
- React Official Docs: Lifecycle of Reactive Effects
Summary
The golden rule: Effects are an escape hatch from React. If you're not synchronizing with an external system, you probably don't need an Effect.
Before writing useEffect, ask yourself:
- Is this responding to a user interaction? โ Use event handler
- Is this a value I can calculate from props/state? โ Calculate during render
- Is this resetting state when a prop changes? โ Use key prop
- Is this synchronizing with an external system? โ Use Effect with cleanup
Follow these patterns, and your React code will be more maintainable, performant, and bug-free.
Overview (`templates/plate-template/.agents/skills/vercel-react-best-practices/README.md`)
React Best Practices
A structured repository for creating and maintaining React Best Practices optimized for agents and LLMs.
Structure
rules/- Individual rule files (one per rule)_sections.md- Section metadata (titles, impacts, descriptions)_template.md- Template for creating new rulesarea-description.md- Individual rule files
src/- Build scripts and utilitiesmetadata.json- Document metadata (version, organization, abstract)AGENTS.md- Compiled output (generated)test-cases.json- Test cases for LLM evaluation (generated)
Getting Started
Install dependencies:
bashpnpm installBuild AGENTS.md from rules:
bashpnpm buildValidate rule files:
bashpnpm validateExtract test cases:
bashpnpm extract-tests
Creating a New Rule
- Copy
rules/_template.mdtorules/area-description.md - Choose the appropriate area prefix:
async-for Eliminating Waterfalls (Section 1)bundle-for Bundle Size Optimization (Section 2)server-for Server-Side Performance (Section 3)client-for Client-Side Data Fetching (Section 4)rerender-for Re-render Optimization (Section 5)rendering-for Rendering Performance (Section 6)js-for JavaScript Performance (Section 7)advanced-for Advanced Patterns (Section 8)
- Fill in the frontmatter and content
- Ensure you have clear examples with explanations
- Run
pnpm buildto regenerate AGENTS.md and test-cases.json
Rule File Structure
Each rule file should follow this structure:
---
title: Rule Title Here
impact: MEDIUM
impactDescription: Optional description
tags: tag1, tag2, tag3
---
## Rule Title Here
Brief explanation of the rule and why it matters.
**Incorrect (description of what's wrong):**
```typescript
// Bad code exampleCorrect (description of what's right):
// Good code exampleOptional explanatory text after examples.
Reference: Link
File Naming Convention
- Files starting with
_are special (excluded from build) - Rule files:
area-description.md(e.g.,async-parallel.md) - Section is automatically inferred from filename prefix
- Rules are sorted alphabetically by title within each section
- IDs (e.g., 1.1, 1.2) are auto-generated during build
Impact Levels
CRITICAL- Highest priority, major performance gainsHIGH- Significant performance improvementsMEDIUM-HIGH- Moderate-high gainsMEDIUM- Moderate performance improvementsLOW-MEDIUM- Low-medium gainsLOW- Incremental improvements
Scripts
pnpm build- Compile rules into AGENTS.mdpnpm validate- Validate all rule filespnpm extract-tests- Extract test cases for LLM evaluationpnpm dev- Build and validate
Contributing
When adding or modifying rules:
- Use the correct filename prefix for your section
- Follow the
_template.mdstructure - Include clear bad/good examples with explanations
- Add appropriate tags
- Run
pnpm buildto regenerate AGENTS.md and test-cases.json - Rules are automatically sorted by title - no need to manage numbers!
Acknowledgments
Originally created by @shuding at Vercel.
Overview (`apps/www/src/__tests__/package-integration/__deferred__/README.md`)
Deferred Integration Red Suite
This folder is for future-contract integration tests that are intentionally red.
Use it when:
- the protocol doc names an interaction class we still do not implement
- the expected future behavior is clear enough to write down now
- mixing the red spec into the normal green suite would be stupid
Do not use it for:
- vague ideas
- duplicate green tests
- package-local unit seams
Rules:
- keep specs under domain folders like
clipboard,ime,mouse-selection,
andplatform-shortcuts - use
*.deferred.spec.ts[x] - reference the future protocol lane or spec ID in the title or file
- keep the assertions public-interface focused
- do not import app-registry fluff if a smaller seam exists
Normal pnpm test and pnpm test:slow ignore this folder.
Run it explicitly with:
pnpm test:deferredThat command expects the suite to stay red. If everything suddenly passes, the
runner fails so the specs get promoted instead of rotting here.
Overview (`apps/www/src/registry/changelog/entries/README.md`)
Registry changelog entries
This directory is the source for Plate UI registry changelog entries.
One file equals one changelog event. Generated public JSON lives one directory
up in apps/www/src/registry/changelog/*.json; do not edit that JSON by hand.
Create an Entry
node tooling/scripts/generate-ui-changelog-entries.mjs \
--new 2026-06-15-fix-editor-wrapping \
--summary "Fix editor wrapping" \
--items editor,editor-static \
--kind fixThen regenerate and verify:
node tooling/scripts/generate-ui-changelog-entries.mjs --write
node tooling/scripts/generate-ui-changelog-entries.mjs --checkShape
---
id: 2026-06-15-fix-editor-wrapping
date: 2026-06-15
status: draft
kind: fix
summary: "Fix editor wrapping"
change: {"type":"source","date":"2026-06-15","commits":[]}
release: {"status":"unresolved"}
diagnostics: []
---
- **`editor`**, **`editor-static`**: Fix preserved-space wrapping in editable and static editors.Keep prose user-facing. Do not include implementation notes, test notes, or
internal architecture rationale.
Docs Index (`content/docs/index.mdx`)
title: Introduction
Plate is a React framework for building rich-text editors. It gives you a headless editor runtime, composable plugins, and optional Plate UI components that you copy into your app. Start with Plate UI for a complete editor, or use the packages directly when you need a headless setup.
Choose a Path
What Plate Owns
| Layer | What it owns | Start here |
|---|---|---|
platejs |
Core editor runtime, React bindings, and editor APIs. | Installation |
@platejs/* packages |
Headless plugins for nodes, marks, serialization, collaboration, AI, and editor behavior. | Plugin guide |
| Plate UI registry | App-local UI components, kits, editor templates, and API routes installed through the shadcn CLI. | Plate UI |
| Your app | The copied component code, styling, routing, data model, and product-specific editor behavior. | Plugin Components |
Why Plate UI?
Plate UI follows the shadcn/ui model: you copy the code, own it, and keep editing it in your app.
- Open code: The UI layer is app-local code, not a sealed component package.
- Composition: Components use predictable React and shadcn/ui conventions.
- CLI distribution: Add kits, templates, components, API routes, and docs through the shadcn CLI.
- AI-ready: Open component code and consistent registry metadata give agents real context.
- MCP-ready: The MCP setup lets AI tools inspect and apply Plate registry items.
Done. You can install the full UI path, drop down to headless packages, or start from an editor template.
FAQ
Credits
- shadcn/ui - For UI inspiration, documentation, and the CLI.
- Radix UI - For the unstyled, accessible primitives.
- Vercel - For hosting.
- Shu Ding - Typography style adapted from Nextra.
- cmdk - For the
<Command />component.
Research Index (`docs/research/index.md`)
Research Index
This is the entrypoint for the compiled agent research layer.
Top Level
- README.md
Source of truth for the research pattern, operating rules, and layer boundaries. - log.md
Append-only operational history for research ingests and restructures. - schema.md
Minimal metadata contract for the research page types.
Directories
- commands/README.md
Operational command specs for running the research workflows. - sources/README.md
Compiled summaries of raw evidence. - decisions/README.md
Canonical repo-relevant choices and policy calls. - concepts/README.md
Shared vocabulary and abstractions. - systems/README.md
Architecture and authority maps. - editor-behavior-architecture.md
Long-horizon architecture for profile-driven editor behavior. - systems/editor-architecture-landscape.md
Compiled comparison map for the editor architecture candidate lane behind the
Slate v2 overlay rewrite. - systems/slate-v2-overlay-architecture.md
Stable research-layer architecture map for the Slate v2 overlay system. - entities/README.md
Concrete named things like editors, packages, and plugins. - entities/typora.md
Seed entity page for the first editor-reference corpus. - open-questions/README.md
Known ambiguity that should not be flattened into fake certainty.
First Targets
- operational baseline:
commands/full-pipeline.md - upkeep baseline:
commands/maintain.md - Typora compiled source pages derived from
../raw/typora, starting in
sources/typora/README.md - first compiled Typora source pages:
corpus-overview.md
and
editor-behavior-priority-map.md - first Typora source-cluster syntheses:
markdown-native-editing-foundations.md,
clipboard-and-delete-behavior.md,
links-images-and-html-behavior.md,
media-authoring-and-path-policy.md,
navigation-search-outline-and-toc.md,
and
code-math-table-and-task-surfaces.md
plus
math-delimiter-triggers.md
plus
markdown-shorthand-and-inline-autoformat.md - Typora system map:
typora-behavior-map.md - first Typora-derived concepts and decisions now exist under:
concepts/,
decisions/,
and
open-questions/ - newer date/media expansion follow-up now also includes:
- editor architecture lane now also includes:
- sources/editor-architecture/README.md
- decorations-annotations-overlay-corpus.md
- narrower source clusters for:
ProseMirror,
Lexical,
Tiptap,
local Slate v2 proof,
layout/measurement/IME,
lightweight editable surfaces,
and service/store models - systems/editor-architecture-landscape.md
- systems/slate-v2-perfect-plan-steal-reject-defer-map.md
- systems/slate-v2-overlay-architecture.md
- slate-v2-overlay-architecture-cuts.md
- slate-v2-overlay-superiority-vs-legacy-and-field.md
- react-19-2-external-store-and-background-ui.md
- tanstack-virtual-and-github-large-surface-virtualization.md
- pretext-pagination-page-virtualization.md
- slate-v2-react-19-2-perf-architecture-vs-field.md
- source-scoped-overlay-invalidation.md
- slate-v2-source-scoped-overlay-invalidation.md
- slate-v2-collaborative-annotation-channels.md
- slate-v2-data-model-first-react-perfect-runtime.md
- read-update-runtime-corpus-ledger.md
- lexical-read-update-extension-runtime.md
- prosemirror-transaction-view-dom-runtime.md
- tiptap-extension-command-react-dx.md
- slate-v2-read-update-runtime-architecture.md
- slate-v2-perfect-plan-should-steal-read-update-transaction-discipline-and-extension-dx.md
- slate-v2-state-tx-public-api-and-extension-namespaces.md
- slate-v2-post-closure-architecture-review.md
- slate-v2-architecture-verdict-after-human-stress-sweep.md
- node-text-mark-render-dx-corpus-ledger.md
- scroll-selection-visibility-runtime.md
- editor-node-text-mark-dx-landscape.md
- editor-node-dx-should-use-runtime-owned-shells-and-spec-first-renderers.md
- concept pages for:
overlay-lane-separation,
durable-anchor-vs-live-handle,
runtime-identity-vs-tree-address,
and
source-scoped-overlay-invalidation - entity pages for:
ProseMirror,
Lexical,
Tiptap,
Premirror,
Pretext,
Slate,
edix,
use-editable,
rich-textarea,
VS Code,
TanStack DB,
and
EditContext
- Milkdown compiled source pages derived from
../raw/milkdown, starting in
sources/milkdown/README.md - Obsidian compiled source pages derived from
../raw/obsidian, starting in
sources/obsidian/README.md - Obsidian now also has:
- Milkdown now also has:
- autoformat follow-up now also includes:
- input-rule docs IA follow-up now also includes:
- sources/tiptap/input-rules-and-extension-doc-patterns.md
- sources/prosemirror/guide-reference-and-example-doc-patterns.md
- sources/lexical/markdown-package-and-shortcuts-doc-patterns.md
- sources/slate/walkthrough-concepts-and-api-doc-patterns.md
- systems/plugin-input-rule-doc-pattern-landscape.md
- decisions/plugin-input-rules-guide-should-lead-with-runtime-first-then-feature-owners-then-api-reference.md
- one-to-one Typora source-card layer now lives in:
../raw/typora/page-cards/and../raw/typora/catalog.md - cross-links from Typora pages into existing
docs/editor-behavior
source-of-truth docs
Slate Browser Overview (`docs/slate-browser/overview.md`)
date: 2026-04-03 topic: slate-browser-testing-framework-overview
Slate Browser Testing Framework Overview
Specialist testing/proof doc. For current queue and roadmap truth, see master-roadmap.md.
Purpose
This doc defines the specialist testing/proof lane for editor work and the
future testing-framework direction it draws from
editor-architecture-candidates.md.
This is not a โpick one runner and call it doneโ doc.
Strong take:
- the best editor testing framework is layered
- one runner to rule them all is a trap
- speed, fidelity, and coverage want different tools
slate-browser is a good name for this doc area because the main unsolved gap
is browser-facing editor behavior, not pure core semantics. This repo keeps
internal docs under docs/, so the doc lives in docs/slate-browser/.
Follow-up docs:
- framework-design.md
- api-design.md
- proof-lane-matrix.md
- next-api-candidates.md
- next-api-candidates-matrix.md
- four-way-api-deep-dive.md
- next-system-move.md
- prioritized-backlog.md
Current package:
- package:
/Users/zbeyens/git/slate-v2/packages/slate-browser - Playwright harness entrypoint:
/Users/zbeyens/git/slate-v2/packages/slate-browser/src/playwright/index.ts
Canonical root commands:
yarn build:slate-browser:playwrightyarn setup:slate-browseryarn test:slate-browseryarn test:slate-browser:coreyarn test:slate-browser:domyarn test:slate-browser:selectionyarn test:slate-browser:e2eyarn test:slate-browser:e2e:localyarn test:slate-browser:imeyarn test:slate-browser:ime:localyarn test:slate-browser:anchorsyarn test:replacement:compat:localyarn test:replacement:gate:local
Current role:
slate-browseris the specialist testing/proof lane for the master roadmap- it does not own roadmap truth or queue order
- it feeds the emitted-artifact obligations in
true-slate-rc-proof-ledger.md - the current live browser/runtime proof rows are carried by:
- if
slate-browserwork reopens, the current follow-on seam is captured in
next-system-move.md
Migration Review Rule
When a browser lane disappears or changes shape, the acceptance bar is not
"there used to be a file with that name."
The acceptance bar is:
- the contributor-facing concept still exists
- the proof owner is explicit in
proof-lane-matrix.md
or the livedocs/slate-v2verdict docs - the moved or removed lane is documented in the maintainer diff story
What We Are Optimizing For
- fast local feedback
- real browser behavior when browser behavior is the thing under test
- first-class IME/composition coverage
- deterministic selection assertions
- performance lanes that measure instead of hand-wave
- future agent-native extensibility, so an agent layer can be added later
without distorting the deterministic core design
Best Ideas By Repo
Lexical
Best steal:
- real browser IME tests with Chromium CDP
- selection assertions as first-class artifacts
- explicit browser matrix for e2e
Key files:
- /Users/zbeyens/git/lexical/packages/lexical-playground/tests/e2e/Composition.spec.mjs
- /Users/zbeyens/git/lexical/packages/lexical-playground/tests/utils/index.mjs
Take:
- this is the best model for the IME lane
- do not try to reinvent IME testing in jsdom when Lexical already proved the
right browser seam
Slate
Best steal:
- example-driven Playwright integration already exists
- mixed unit/dom/browser stack already covers real product surfaces
Key files:
- /Users/zbeyens/git/slate-v2/playwright/integration/examples/placeholder.test.ts
- /Users/zbeyens/git/slate-v2/package.json
Take:
- keep Slateโs Playwright harness
- grow it instead of replacing it
edix
Best steal:
- Vitest project split between fast unit and browser tests
- Playwright e2e plus direct IME cases in the same repo
Key files:
Take:
- this is the best small-repo shape for โfast browser contract testsโ
- especially useful for focused DOM/selection assertions that are too browser-ish
for jsdom but too small for heavyweight e2e suites
rich-textarea
Best steal:
- composition-aware selection compensation
- split between unit, browser-story, and Playwright e2e
Key files:
- /Users/zbeyens/git/rich-textarea/src/selection.ts
- /Users/zbeyens/git/rich-textarea/vitest.config.ts
- /Users/zbeyens/git/rich-textarea/e2e/textarea.spec.ts
Take:
- good model for lightweight surfaces and composition-aware selection helpers
- not enough on its own for rich-contenteditable editor coverage
Tiptap
Best steal:
- good placeholder extension tests
- decent product-DX test posture with unit + Cypress
Key files:
- /Users/zbeyens/git/tiptap/packages/extensions/tests/placeholder.spec.ts
- /Users/zbeyens/git/tiptap/package.json
Take:
- useful for extension behavior and product-layer regression shape
- not the best IME or low-level browser harness model
Premirror
Best steal:
- the cleanest written testing strategy for layout, determinism, and perf
Key file:
Take:
- best source for test-lane taxonomy and perf-governance language
- especially useful once editor testing expands into composition/layout/perf
Pretext
Best steal:
- accuracy and benchmark checks as first-class scripts
Key file:
Take:
- useful for measurement/perf verification design
- not a general editor-testing framework model
VS Code
Best steal:
- layered test entrypoints:
node, browser, extension, smoke, perf
Key file:
Take:
- strongest structure for โmany lanes, explicit commands, no one-suite delusionโ
ProseMirror
Best steal:
- almost nothing framework-specific here for our testing problem beyond
disciplined core tests
Key file:
Take:
- good engine influence
- weak direct testing-framework influence for this problem
use-editable and markdown-editor
Best steal:
- no strong testing-framework leverage for this problem
Key files:
Take:
- useful product/code references
- not testing-framework references
urql and TanStack DB
Best steal:
- project-split Vitest discipline
- explicit e2e subpackages
Key files:
Take:
- useful for repo-wide test-lane organization
- not editor-specific behavior coverage
Agent-Browser / Dev-Browser / OMX
Best steal:
- agent-native lane for actions Playwright does poorly or too rigidly
- explicit capability-coverage thinking
Key files:
- /Users/zbeyens/git/agent-browser/AGENTS.md
- /Users/zbeyens/git/dev-browser/package.json
- /Users/zbeyens/git/oh-my-codex/COVERAGE.md
Take:
- agent-native testing should be designed in as a future extension seam
- but it should not shape the first deterministic framework layers
Recommended Framework Shape
This is a layered base with a few specialized lanes on top of it.
- Layers are about dependency order.
- Lanes are about specialized risk classes.
Layer 0: Core Fast Tests
Purpose:
- pure model, transform, selection, and projection semantics
Tools:
- fast package-local runner
- current Slate mix is acceptable short-term
- longer-term, Vitest-style project splits are cleaner than Mocha/Jest drift
Steal from:
- Slate v2 proof packages
- edix Vitest split
- TanStack DB / urql test organization
Layer 1: DOM Contract Tests
Purpose:
- DOM translation, selection math, placeholder shape, clipboard DOM adaptation
- focused browser-backed contracts for one seam at a time
- no example-app orchestration
Tools:
- fast browser-backed contract tests, not only jsdom
- best future direction: Vitest browser + Playwright provider for small contract
lanes
Steal from:
- edix
vitest.config.ts - rich-textarea
vitest.config.ts
Layer 2: Example Integration Tests
Purpose:
- assert real editor behavior on real app/example surfaces
- cross-feature flows and product-shaped regressions
- use when the behavior only makes sense once the full example is mounted
Tools:
- Playwright
Steal from:
- Slate existing Playwright example tests
- VS Code multi-entry lane organization
Lane A: IME / Composition
Purpose:
- empty-state composition
- placeholder-sensitive composition
- range/selection after commit
- browser-ordering quirks
Tools:
- Chromium Playwright + CDP for first lane
- later WebKit/Safari regression lanes where needed
Steal from:
- Lexical IME e2e tests
- edix IME e2e tests
Strong take:
- this lane must exist
- jsdom composition is not enough
Lane B: Agent-Native
Purpose:
- cover actions that humans can do but deterministic browser scripts either
express badly or not at all
Examples:
- weird selection drags
- multi-step context-menu workflows
- visual proofreading of cursor/toolbar state
- copy/paste flows where OS/browser glue matters
Tools:
dev-browseragent-browser
Rules:
- every agent-native test still needs explicit assertions or artifacts
- screenshots, DOM dumps, selection dumps, and event logs must be captured
- this lane complements deterministic suites; it does not replace them
Lane C: Performance
Purpose:
- benchmark real editor behaviors without mixing them into correctness suites
Steal from:
- Premirror testing strategy
- Pretext benchmark/accuracy scripts
- VS Code explicit perf command separation
Agent-Native Review
Using the agent-native-reviewer lens, the future framework should require:
- Every critical user action has at least one deterministic test lane.
- Every action Playwright cannot faithfully express has an agent-native lane.
- Agent-native runs operate in the same workspace and examples as human tests.
- Capabilities are explicit, not tribal knowledge.
Current gap:
- Slate has Playwright example tests, but no first-class documented
agent-native lane for editor actions
That is a real framework gap.
Recommended Stack
Do not chase a single universal runner.
Best stack is:
- fast local/unit layer:
current package runners, converging toward Vitest-style project splits - browser contract layer:
Vitest browser + Playwright provider - integration/e2e layer:
Playwright - IME layer:
Playwright + Chromium CDP composition helpers - perf layer:
explicit benchmark scripts - agent-native layer:
dev-browser/agent-browser
Adoption Order
- Keep the current public package/API tranche stable.
- Strengthen
openExample(...)into a real readiness contract. - Build the renderer/input-policy gauntlet for zero-width and IME-sensitive
empty-state behavior. - Add
test:slate-browser:crossonly after that contract is stable. - Add
test:slate-browser:perfand maybetest:slate-browser:accuracy
after correctness lanes stop moving. - Keep the agent-native lane as a later extension seam, not the next core
tranche.
Bottom Line
The best future testing framework is:
- Lexicalโs IME realism
- Slateโs example-driven Playwright harness
- edix and rich-textareaโs browser-contract speed
- Premirrorโs determinism/perf discipline
- VS Codeโs layered lane organization
- agent-browser/dev-browser for agent-native parity
Not:
- one runner
- one suite
- one fake jsdom composition test pretending it solved IME
Slate V2 Draft Overview (`docs/slate-v2-draft/overview.md`)
date: 2026-04-08 topic: slate-v2-overview
Slate v2 Overview
Purpose
Front door to the live docs/slate-v2 stack.
Current Read
- live verdict now treats
Target AasGoon the proved default stack - the broader
Target Bclaim is still reopened under the exhaustive
API/public-surface audit challenge - the curated perf gate package currently clears on blocker-facing lanes in
replacement-gates-scoreboard.md - completed roadmap groundwork is now called
POC RC - the core
packages/slate/test/**deleted-family bucket is closed - the full
packages/slate-react/**deleted-family bucket is closed - the full
packages/slate-history/**package bucket is closed - major file/test deletion review is now explicitly closed
- extension model / behavior interception is now explicitly closed
- schema / normalization extensibility is now explicitly closed
- non-React / headless core usability is now explicitly closed
- operation-history-collaboration integrity is now explicitly closed
- the decoration source-scoped invalidation tranche is now the banked overlay
authority, not the next broad blocker lane - the earlier package-matrix public-surface pass is banked, but exhaustive
API/public-surface contract-width audit remains reopened under challenge - maximum parity with legacy for all examples is now reopened as a sibling
blocker lane - direct 1:1 legacy fixture proof now exists for
Editor.nodes/**and the
non-Editorinterfaces/**namespaces - the direct transform audit at
/Users/zbeyens/git/slate-v2/packages/slate/test/legacy-transforms-fixtures.ts
is green again, so the transform lane is no longer a blanket reopened family - the remaining transform debt is narrower:
explicit-skiprows
- the overlay architecture lock is complete, and its next perfection tranche is
active:- decoration sources own inline projected decoration
Bookmarkowns durable public anchors- annotation stores own anchored data
- widget stores own widget UI
- the broader program is still called
True Slate RC - the current execution owners are now:
- browser/input external-evidence work is now post-RC follow-up, not the active
current blocker lane - local Firefox and Android structural/browser rows are exhausted; the current
broader blocker lanes are exhaustive API/public-surface audit plus example
parity, and external Android keyboard-feature evidence plus broader iOS
evidence remain post-RC follow-up - the zero-regression diff seed in
true-slate-rc-proof-ledger.md
isEMPTY, so there are no hidden unreviewed browser/input files left in the
current scoped diff
Ownership
| Class | Start here |
|---|---|
| verdict | release-readiness-decision.md (primary); supporting live surfaces: replacement-family-ledger.md, replacement-gates-scoreboard.md |
| sequence | master-roadmap.md |
| evidence | true-slate-rc-proof-ledger.md, release-file-review-ledger.md, docs/slate-browser/proof-lane-matrix.md |
| perf gate | replacement-gates-scoreboard.md |
| protocol | deletion-closure-protocol.md |
| reference | architecture-contract.md, live-shape-register.md, normalization-reference.md |
| maintainer context | pr-description.md |
Vocabulary
| Historical term | Current meaning |
|---|---|
Target A |
the live default-stack verdict that corresponds to completed POC RC work |
Target B |
the older broad-replacement label that now maps to the broader True Slate RC destination |
Read In This Order
- release-readiness-decision.md
- replacement-gates-scoreboard.md
- replacement-family-ledger.md
- master-roadmap.md
- release-file-review-ledger.md
- true-slate-rc-proof-ledger.md
- decoration-roadmap.md
- 2026-04-13-slate-v2-full-no-regression-story-plan.md
- pr-description.md
Command Entry
- commands/reconsolidate-roadmap.md
is the command-pack entrypoint
Reference / Historical Specs
- architecture-contract.md
- live-shape-register.md
- normalization-reference.md
- slate-batch-engine.md
- chunking-review.md
These do not own queue or verdict truth.
Current read:
slate-batch-engine.mdis legacy retrofit context, not active remaining-work
ownershipchunking-review.mdis historical design analysis; the live runtime posture
is selector-first rendering plus semantic islands, not child-count chunking
Slate V2 Overview (`docs/slate-v2/overview.md`)
date: 2026-04-18 topic: slate-v2-overview status: active
Slate v2 Overview
Purpose
Front door to the live slate-v2 migration program.
This stack now describes the final-state program for the fresh .tmp/slate-v2
clone. It is not the old rewrite archive.
Current Read
.tmp/slate-v2is the live target.tmp/slate-v2-draftis the evidence/value bankdocs/slate-v2/**is the final-state spec lanedocs/slate-v2-draft/**is the archived prior doc lane- tranche 1 is complete:
- Bun root/tooling graph
- Bun test ownership
- package-manifest build owners
- docs ownership reset
- tranche 2 is complete:
- React 19.2.5 baseline
- Next 16.2.4 for the site/runtime lane
- TypeScript 6.0.3 baseline
- package-src HMR without package rebuilds
- low-risk compatibility fallout only
- tranche 3 is the live redesign lane:
packages/slateis being redesigned toward the native transaction engine
and snapshot/store-first API described in
architecture-contract.md- support-package work stays blocked until the
slatecore API is honestly
settled - backward compatibility is no longer the default value; compatibility keeps
only what still earns its weight - hard cuts are allowed when retrofit baggage blocks the better API
- current
packages/slateproof and perf floors stay active guardrails while
the redesign lands
- merged corpus docs now exist for:
slateslate-historyslate-hyperscriptslate-domslate-react
- the live stack again has explicit north-star docs for:
- absolute architecture release claim
- post-closure proof hardening plan
- architecture contract
- overlay roadmap
- decorations/annotations rationale
- chunking rejection and huge-doc posture
Read Order
- absolute-architecture-release-claim.md
- docs/plans/2026-04-25-slate-v2-editing-epoch-kernel-regression-closure-plan.md
- docs/plans/2026-04-24-slate-v2-post-closure-proof-hardening-plan.md
- docs/plans/2026-04-24-slate-v2-absolute-architecture-closure-plan.md
- references/architecture-contract.md
- master-roadmap.md
- release-readiness-decision.md
- replacement-gates-scoreboard.md
- true-slate-rc-proof-ledger.md
- fresh-branch-migration-plan.md
- release-file-review-ledger.md
- historical context only:
2026-04-18-001-refactor-slate-v2-parity-first-migration-plan.md - decoration-roadmap.md
- decorations-annotations-cluster.md
- references/chunking-review.md
- final-api-hard-cuts-status.md
- pr-description.md
- ledgers/README.md
Ownership
| Class | Owner |
|---|---|
| architecture claim | absolute-architecture-release-claim.md |
| execution plan | 2026-04-25-slate-v2-editing-epoch-kernel-regression-closure-plan.md, 2026-04-24-slate-v2-post-closure-proof-hardening-plan.md, 2026-04-24-slate-v2-absolute-architecture-closure-plan.md, and fresh-branch-migration-plan.md |
| tranche order | master-roadmap.md |
| review state | release-file-review-ledger.md |
| readiness claim | release-readiness-decision.md |
| gate status | replacement-gates-scoreboard.md |
| proof status | true-slate-rc-proof-ledger.md |
| maintainer drift story | pr-description.md |
Archive Rule
If a doc belongs to the old rewrite program and is not live migration truth, it
belongs in docs/slate-v2-draft/**.
Editor Test Harvester Lexical Test Index (`docs/editor-test-harvester/lexical/test-index.md`)
Lexical Portable Test-Name Index
source report: report.md
target: ../lexical
generated_at: 2026-05-08
last_consolidated_at: 2026-05-09
consolidation: portable runnable file count still 137; extracted line count still 1996; no missing or stale index files.
Indexed runnable portable and portable-mixed files: 137.
Extracted test/describe/it lines: 1996.
Files with zero extracted names: 0.
The extractor records literal, dynamic, and multiline titles by line pointer. Dynamic rows still need local reading before an apply pass, but they are no longer hidden behind a file-name-only route.
`../lexical/packages/lexical-code-shiki/src/__tests__/unit/LexicalCodeNodeTabs.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-code-shiki/src/__tests__/unit/LexicalCodeNodeTabs.test.ts:47describe: LexicalCodeNode tests../lexical/packages/lexical-code-shiki/src/__tests__/unit/LexicalCodeNodeTabs.test.ts:49describe: Tabs../lexical/packages/lexical-code-shiki/src/__tests__/unit/LexicalCodeNodeTabs.test.ts:96test: testing ${scenario[2]}: ${scenario[0]} => ${scenario[1]} (${direction})
`../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:60describe: LexicalCodeNode tests../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:62test: CodeNode.constructor../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:73test: CodeNode.createDOM()../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:90test: CodeNode.updateDOM()../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:111test: CodeNode.exportJSON() should return and object conforming to the expected schema../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:133test: CodeNode.insertNewAfter()../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:167test: $createCodeNode()../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:179test: can tab with collapsed selection../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:215test: can tab with non-collapsed selection../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:239test: can indent/outdent one line by forward selecting all line (with tabs)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:279test: can indent/outdent one line by backward selecting all line (with tabs)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:319test: can indent/outdent with collapsed selection at start of line (with tabs)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:357test: can indent/outdent multiline (with tabs)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:391test: can indent at the start of the second line../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:409test: can indent when selection has a CodeNode element (with indent)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:435test: can outdent at arbitrary points in the line (with tabs)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:459test: code blocks can shift lines (with tab)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:479test: code blocks can shift multiple lines (with tab)../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:513describe: arrows../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:514describe: rtl code lines../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:537test: MOVE_TO_END moves caret to visual right../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:559test: MOVE_TO_START moves caret to visual left../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:1006describe: initial editor state before transforms../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.ts:1007test: can be registered after initial editor state (regression #7014)
`../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNodeTabs.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNodeTabs.test.ts:34describe: LexicalCodeNode tests../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNodeTabs.test.ts:36describe: Tabs../lexical/packages/lexical-code/src/__tests__/unit/LexicalCodeNodeTabs.test.ts:83test: testing ${scenario[2]}: ${scenario[0]} => ${scenario[1]} (${direction})
`../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:205describe: LexicalHistory tests../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:248test: LexicalHistory after clearing../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:284test: LexicalHistory.Redo after Quote Node../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:352test: LexicalHistory in sequence: change, undo, redo, undo, change../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:437test: undoStack selection points to the same editor../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:481test: Changes to TextNode leaf are detected properly #6409../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:541describe: SharedHistoryExtension../lexical/packages/lexical-history/src/__tests__/unit/LexicalHistory.test.tsx:542test: can create a parent editor
`../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts:25describe: HTML../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts:42test: [Lexical -> HTML]: ${name}../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts:64test: [Lexical -> HTML]: Use provided selection../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts:111test: [Lexical -> HTML]: Default selection (undefined) should serialize entire editor state../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts:156test: dynamic or multiline title../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts:186test: If alignment is set on the paragraph, it should take precedence over its parent block alignment../lexical/packages/lexical-html/src/__tests__/unit/LexicalHtml.test.ts:216test: It should output correctly nodes whose export is DocumentFragment
`../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:44describe: LexicalListItemNode tests../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:46test: ListItemNode.constructor../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:60test: ListItemNode.createDOM()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:85describe: ListItemNode.updateDOM()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:86test: base../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:119test: nested list../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:158describe: ListItemNode.replace()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:206test: another list item node../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:239test: first list item with a non list item node../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:294test: last list item with a non list item node../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:323test: middle list item with a non list item node../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:354test: the only list item with a non list item node../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:397describe: ListItemNode.remove()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:401test: siblings are not nested../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:469test: the previous sibling is nested../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:549test: the next sibling is nested../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:629test: both siblings are nested../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:718test: the previous sibling is nested deeper than the next sibling../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:828test: the next sibling is nested deeper than the previous sibling../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:939test: both siblings are deeply nested../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1063describe: ListItemNode.insertNewAfter(): non-empty list items../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1111test: first list item../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1142test: last list item../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1173test: middle list item../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1204test: the only list item../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1251test: $createListItemNode()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1265test: $isListItemNode()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1275describe: ListItemNode.setIndent()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1296it: indents and outdents list item../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1356it: handles fractional indent values../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1369test: Can serialize a node that is not attached../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1388test: ListItemNode marker style inheritance on indent../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1415test: Default: Splitting a list resets numbering to 1 (Backward Compatibility)../lexical/packages/lexical-list/src/__tests__/unit/LexicalListItemNode.test.ts:1455test: Option Enabled: Splitting a list preserves numbering (Smart Behavior)
`../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:54describe: LexicalListNode tests../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:56test: ListNode.constructor../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:70test: ListNode.getTag()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:83test: ListNode.createDOM()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:108test: ListNode.createDOM() correctly applies classes to a nested ListNode../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:189test: ListNode.updateDOM()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:214test: ListNode.append() should properly transform a ListItemNode../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:231test: ListNode.append() should properly transform a ListNode../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:253test: ListNode.append() should properly transform a ParagraphNode../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:269test: ListNode.append() should wrap an InlineNode in a ListItemNode without converting it to TextNode../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:308test: ListNode.splice() should wrap multiple non-ListItem nodes in individual ListItem nodes../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:341test: Should update list children when switching from checklist to bullet../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:367test: Should clear checklist attributes when nesting lists../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:425test: $createListNode()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:439test: $isListNode()../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:449test: $createListNode() with tag name (backward compatibility)../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:462describe: LexicalListNode subclassing tests ($config)../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:494describe: ListNode as-is../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:497test: applies transform../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:513describe: ListNodeConfig (no replacement)../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:516test: applies transform../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:532describe: ListNodeSubclass (no replacement)../lexical/packages/lexical-list/src/__tests__/unit/LexicalListNode.test.ts:535test: applies transform
`../lexical/packages/lexical-list/src/__tests__/unit/ListExtension.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-list/src/__tests__/unit/ListExtension.test.ts:23describe: ListExtension../lexical/packages/lexical-list/src/__tests__/unit/ListExtension.test.ts:36it: Creates the list../lexical/packages/lexical-list/src/__tests__/unit/ListExtension.test.ts:47describe: CheckListExtension../lexical/packages/lexical-list/src/__tests__/unit/ListExtension.test.ts:61it: Preserves numbering when configured via extension../lexical/packages/lexical-list/src/__tests__/unit/ListExtension.test.ts:118it: Creates the list
`../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:82describe: insertList../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:84test: inserting with empty root selection../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:106test: inserting in root selection with existing child../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:131test: inserting with empty shadow root selection../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:160test: formatting empty list items../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:187test: preserves element-anchored selection when converting paragraph with linebreak to list../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:233describe: $handleListInsertParagraph../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:235test: exits list when list item is completely empty../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:262test: exits list when list item contains only whitespace../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:291test: extends list when list item contains non-whitespace content../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:317test: extends list when list item contains a decorator node../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:343test: splits list when the empty element is not the last one../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:386describe: $handleIndent../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:389test: creates a new nested sublist../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:422describe: $handleOutdent../lexical/packages/lexical-list/src/__tests__/unit/formatList.test.ts:424test: removes the nested list and replaces list item
`../lexical/packages/lexical-list/src/__tests__/unit/registerListStrictIndentTransform.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-list/src/__tests__/unit/registerListStrictIndentTransform.test.ts:19describe: Lexical List StrictIndentTransform tests../lexical/packages/lexical-list/src/__tests__/unit/registerListStrictIndentTransform.test.ts:26test: applyStrictListIndentation
`../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:15describe: Lexical List Utils tests../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:17test: getListDepth should return the 1-based depth of a list with one levels../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:35test: getListDepth should return the 1-based depth of a list with two levels../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:68test: getListDepth should return the 1-based depth of a list with five levels../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:113test: getTopListNode should return the top list node when the list is a direct child of the RootNode../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:144test: getTopListNode should return the top list node when the list is not a direct child of the RootNode../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:176test: getTopListNode should return the top list node when the list item is deeply nested.../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:214test: isLastItemInList should return true if the listItem is the last in a nested list.../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:249test: isLastItemInList should return true if the listItem is the last in a non-nested list.../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:275test: isLastItemInList should return false if the listItem is not the last in a nested list.../lexical/packages/lexical-list/src/__tests__/unit/utils.test.ts:310test: isLastItemInList should return true if the listItem is not the last in a non-nested list.
`../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:257describe: Markdown../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:818it: dynamic or multiline title../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:866it: dynamic or multiline title../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:916it: dynamic or multiline title../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:950it: should not remove leading node and transform if replace returns false../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:997it: should remove leading node and execute transform if replace does not return false../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1044it: can round-trip nested fenced code blocks (4 backticks wrapping 3 backticks)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1080it: can round-trip deeply nested fenced code blocks (5 backticks wrapping 4 backticks)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1117it: computes fence dynamically when code block content contains backticks../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1145describe: list marker../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1146it: should remember marker used on import../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1168it: should not use [ as a marker for an implicit check list../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1192it: should remember the marker for checkbox with an explicit marker../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1217it: should remember marker used on export../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1245describe: Enter key triggers../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1246it: dynamic or multiline title../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1286it: dynamic or multiline title../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1326it: should not transform on Enter when replace returns false../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1381describe: normalizeMarkdown - shouldMergeAdjacentLines = true../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1382it: should combine lines separated by a single \n unless they are in a codeblock../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1446it: tables../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1455it: merges adjacent plain text lines with a single space../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1461it: merges while trimming the next line and inserting a single space../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1467it: does not merge across HTML-like tags (opening, content, closing, after)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1476it: does not merge the fence line with the first line after a code block../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1482it: trims hard-break trailing spaces when merging adjacent lines../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1488it: treats whitespace-only lines as empty separators (no merge across them)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1498it: mdx start tag followed by content, than closing tag preceded by content../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1507describe: normalizeMarkdown - shouldMergeAdjacentLines = false../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1508it: should not combine lines separated by a single \n../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1575it: tables../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1584it: preserves trailing whitespace on content lines../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1589it: collapses whitespace-only lines to empty (paragraph separator)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1594it: preserves leading whitespace on content lines../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1600describe: markdown hard line break import../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1601it: preserves hard line break when shouldPreserveNewLines is true../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1641it: preserves backslash hard line break when shouldPreserveNewLines is true../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1682describe: markdown whitespace import (default mode)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1696it: preserves trailing whitespace on a standalone paragraph line (default mode)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1722it: preserves leading whitespace on a standalone paragraph line (default mode)../lexical/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts:1747it: handles two-space hard line break in default mode (adjacent lines merged into LineBreak)
`../lexical/packages/lexical-markdown/src/__tests__/unit/MarkdownTransformers.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-markdown/src/__tests__/unit/MarkdownTransformers.test.ts:52describe: LINK../lexical/packages/lexical-markdown/src/__tests__/unit/MarkdownTransformers.test.ts:53test: text before a markdown link is preserved../lexical/packages/lexical-markdown/src/__tests__/unit/MarkdownTransformers.test.ts:68test: formatted text before a markdown link is preserved../lexical/packages/lexical-markdown/src/__tests__/unit/MarkdownTransformers.test.ts:90test: LINK is not too greedy if there is a preceding match that was not processed../lexical/packages/lexical-markdown/src/__tests__/unit/MarkdownTransformers.test.ts:123test: markdown link should not be created inside another link.
`../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs`
category: portable-mixed
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:29describe: Auto Links../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:32test: Can convert url-like text into links../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:33test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:63test: Can convert url-like text into links for email../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:67test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:92test: Can destruct links if add non-spacing text in front or right after it../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:96test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:156test: Can create link when pasting text with urls../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:160test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:191test: Can create link for email when pasting text with urls../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:195test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:225test: Does not create redundant auto-link../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:226test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:263test: Can create links when pasting text with multiple autolinks in a row separated by non-alphanumeric characters, but not whitespaces../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:267test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:300test: Handles multiple autolinks in a row../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:301test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:337test: Handles autolink following an invalid autolink../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:341test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:360test: Handles autolink following an invalid autolink to email../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:364test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:391test: Can convert url-like text with formatting into links../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:395test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:440test: Can convert url-like text with styles into links../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:444test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:491test: Can convert URL into an autolink../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:542test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:543test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:567test: Can convert URL into an email autolink../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:583test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:584test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:607test: Can not convert bad URLs into links../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:639test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:655test: Can not convert bad URLs into email links../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:678test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:694test: Can unlink the autolink and then make it link again../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:698test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:755test: Unlinked autolink is preserved when adding punctuation before or after it../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:759test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:842test: Adding an invalid character will destruct an unlinked autolink../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:846test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:896test: Adding an emoji inside an unlinked autolink will destruct it../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:900test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:955test: Pressing Enter inside an AutoLinkNode does not insert extra paragraph../lexical/packages/lexical-playground/__tests__/e2e/AutoLinks.spec.mjs:959test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/AutoScroll.spec.mjs`
category: portable
family: beforeinput-input / browser-engine
target: .tmp/slate-v2/packages/slate-react/test/model-input-strategy-contract.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/AutoScroll.spec.mjs:17test: Auto scroll while typing../lexical/packages/lexical-playground/__tests__/e2e/AutoScroll.spec.mjs:66test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/AutoScroll.spec.mjs:69test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs:27test: Autocomplete../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs:31test: Can autocomplete a word../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs:79test: Can autocomplete in the same format as the original text../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs:83test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs:161test: Undo does not cause an exception../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs:166test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Autocomplete.spec.mjs:168test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:24test: displays overflow on text../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:25test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:82test: handles auto link nodes../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:83test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:124test: displays overflow on token nodes../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:130test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:160test: can type new lines inside overflow../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:165test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:215test: can delete text in front and overflow is recomputed../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:220test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:287test: can delete text in front and overflow is recomputed (token nodes)../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:291test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:332test: can overflow in lists../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:333test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:353test: can delete an overflowed paragraph../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:358test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:393test: handles accented characters../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:394test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:426test: handles graphemes../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:427test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:444test: CharacterLimit../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:445test: UTF-16../lexical/packages/lexical-playground/__tests__/e2e/CharacterLimit.spec.mjs:453test: UTF-8
`../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:34test: Clear All Formatting../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:36test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:39test: Can clear BIU formatting../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:60test: Should preserve the default styling of links and quoted text../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:107test: Should preserve the default styling of hashtags and mentions../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:188test: Can clear left/center/right alignment when BIU formatting already applied../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:210test: Can clear left/center/right alignment when BIU formatting not applied../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:231test: Can clear when only indent/outdent alignment is applied../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:252test: Can clear indent/outdent alignment when other formatting options like BIU or left/right/center align are also applied../lexical/packages/lexical-playground/__tests__/e2e/ClearFormatting.spec.mjs:279test: Should clear formatting of selected text which spans over 1 paragraph
`../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:34test: CodeBlock../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:36test: Can create code block with markdown../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:108test: Can create code block with markdown and wrap existing text../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:173test: Can select multiple paragraphs and convert to code block../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:177test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:234test: Can select partial paragraphs and convert to code block../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:238test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:300test: Can select a line within line breaks and convert to code block../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:304test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:351test: Can switch highlighting language in a toolbar../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:423test: Can maintain indent when creating new lines../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:428test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:515test: Can indent text via tab when selecting the line with Shift+Down../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:520test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:603test: Can (un)indent multiple lines at once../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:608test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:924test: Can move around lines with option+arrow keys../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:928test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:1111test: prevents selection and typing outside code block boundaries../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:1115test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:1267test: When pressing CMD/Ctrl + Left, CMD/Ctrl + Right, the cursor should go to the start of the code../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:1271test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:1350test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs:1410test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs`
category: portable
family: collaboration-remote / history-undo-redo
target: .tmp/slate-v2/packages/slate/test/collab-history-runtime-contract.ts; future slate-yjs browser lane
../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:33test: Collaboration../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:36test: Undo with collaboration on../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:42test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:220test: Remove dangling text from YJS when there is no preceding text node../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:226test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:295test: Merge dangling text into preceding text node../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:301test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:387test: Undo/redo where text node is split by formatting change../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:393test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:512test: Undo/redo where text node is split by inline element node../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:518test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:644test: $handleNormalizationMergeConflicts handles nodes that have been reparented../lexical/packages/lexical-playground/__tests__/e2e/Collaboration.spec.mjs:648test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/ColumnLayoutBackspaceAtEnd.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/ColumnLayoutBackspaceAtEnd.spec.mjs:17test: Layout - removes layout completely when both columns are empty and backspace is pressed at the first layout item../lexical/packages/lexical-playground/__tests__/e2e/ColumnLayoutBackspaceAtEnd.spec.mjs:22test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs`
category: portable
family: ime-composition / history-undo-redo
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/packages/slate-browser/src/playwright/ime.ts; .tmp/slate-v2/packages/slate-history/test
../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:33test: Composition../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:35test: Handles Hiragana characters../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:88test: Handles Arabic characters with diacritics../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:173test: IME../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:174test: Can type Hiragana via IME../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:176test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:258test: Can type Hiragana via IME between line breaks../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:263test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:371test: Can type Hiragana via IME into a new bold format../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:377test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:445test: Can type Hiragana via IME between emojis../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:449test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:636test: Can type Hiragana via IME at the end of a mention../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:641test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:746test: Can type Hiragana via IME part way through a mention../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:751test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:852test: Typing after mention with IME should not break it../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:858test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:920test: Can type Hiragana via IME with hashtags../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:926test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1078test: Can type, delete and cancel Hiragana via IME../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1083test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1211test: Floating toolbar should not be displayed when using IME../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1217test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1276test: Typeahead menu should not close during IME composition../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1281test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1325test: Can replace multiple formatted text nodes with IME composition (Korean)../lexical/packages/lexical-playground/__tests__/e2e/Composition.spec.mjs:1331test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:22test: HTML CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:25test: Copy + paste multi line html with extra newlines../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:30test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:53test: Copy + paste a code block with BR../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:54test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:135test: Copy + paste a paragraph element between horizontal rules../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:140test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:199test: Paste top level element in the middle of paragraph../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/HTMLCopyAndPaste.spec.mjs:204test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs:26test: HTML Image CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs:31test: Copy + paste HTML of a figure with img and figcaption../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs:37test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs:134test: Copy + paste an image../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs:135test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs:172test: Copy + paste + undo multiple image../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ImageHTMLCopyAndPaste.spec.mjs:177test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:34test: HTML Links CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:37test: Copy + paste an anchor element../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:38test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:99test: Copy + paste in front of or after a link../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:103test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:130test: Copy + paste link by selecting its (partial) content../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:134test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:166test: Copy + paste empty link #3193../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:167test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:213test: Paste a link into text../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:214test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:247test: Paste text into a link../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:248test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:284test: Paste formatted text into a link../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:285test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:326test: Paste a link into a link../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:327test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:366test: Paste multiple blocks into a link../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/LinksHTMLCopyAndPaste.spec.mjs:367test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:21test: HTML Lists CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:24test: Copy + paste a list element../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:25test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:93test: Copy + paste a Lexical nested list../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:94test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:129test: Copy + paste (Nested List - directly nested ul)../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:133test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:217test: Copy + paste (Nested List - li with non-list content plus ul child)../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:221test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:299test: Copy + paste a checklist../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:300test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:372test: Paste top level element in the middle of list../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:377test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:425test: Copy + paste a nested divs in a list../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/ListsHTMLCopyAndPaste.spec.mjs:426test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:19test: HTML Tables CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:24test: Copy + paste (Table - Google Docs)../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:29test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:31test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:95test: Copy + paste (Table - Google Docs with custom widths)../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:100test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:161test: Copy + paste (Table - Quip)../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:162test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:233test: Copy + paste (Table - Google Sheets)../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:234test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:306test: Copy + paste - Merge Grids../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:307test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:308test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:434test: Copy + paste nested block and inline html in a table../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:439test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:441test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:534test: Copy + paste table with merged cells and unequal number of cells in rows../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:539test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:691test: Copy + paste table with empty row../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TablesHTMLCopyAndPaste.spec.mjs:696test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TextFormatHTMLCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TextFormatHTMLCopyAndPaste.spec.mjs:17test: HTML CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TextFormatHTMLCopyAndPaste.spec.mjs:20test: Copy + paste html with BIU formatting../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TextFormatHTMLCopyAndPaste.spec.mjs:21test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TextFormatHTMLCopyAndPaste.spec.mjs:70test: Copy + paste html with highlight formatting../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/html/TextFormatHTMLCopyAndPaste.spec.mjs:74test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ContextMenuCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ContextMenuCopyAndPaste.spec.mjs:23test: ContextMenuCopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ContextMenuCopyAndPaste.spec.mjs:29test: Basic copy-paste #6231../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ContextMenuCopyAndPaste.spec.mjs:30test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ContextMenuCopyAndPaste.spec.mjs:56test: Rich text Copy and Paste with different Font Size../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ContextMenuCopyAndPaste.spec.mjs:62test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:33test: CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:35test: Basic copy + paste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:222test: Copy and paste heading../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:228test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:229test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:230test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:278test: Copy and paste between sections../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:743test: Copy and paste an inline element into a leaf node../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:747test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:796test: Copy + paste multi-line plain text into rich text produces separate paragraphs../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:800test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:819test: Pasting a decorator node on a blank line inserts before the line../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:826test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:875test: Copy and paste paragraph into quote../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:876test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:905test: Process font-size from content copied from Google Docs/MS Word../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:909test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:933test: test font-size in pt and px both are processed correctly../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:937test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/CopyAndPaste.spec.mjs:965test: Cut then copy empty selection preserves clipboard
`../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:30test: Lists CopyAndPaste../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:33test: Copy and paste of partial list items into an empty editor../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:37test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:139test: Copy and paste of partial list items into the list../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:143test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:280test: Copy list items and paste back into list../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:285test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:399test: Copy list items and paste into list../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:404test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:405test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:533test: Copy and paste of list items and paste back into list on an existing item../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:538test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:663test: Copy and paste two paragraphs into list on an existing item../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:667test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:766test: Copy and paste two paragraphs at the end of a list../lexical/packages/lexical-playground/__tests__/e2e/CopyAndPaste/lexical/ListsCopyAndPaste.spec.mjs:770test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs:20test: DateTime../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs:23test: can insert a DateTime node via the Insert dropdown../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs:27test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs:62test: Datetime should be inserted into the link../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs:66test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs:114test: Datetime should apply the current selection format../lexical/packages/lexical-playground/__tests__/e2e/DateTime.spec.mjs:118test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:18test: DraggableBlock../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:21test: Paragraph one can be successfully dragged below paragraph two../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:27test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:28test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:29test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:70test: Dragging a paragraph to the end of itself does not change the content../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:76test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:77test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:78test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:112test: Drag a paragraph to the bottom of its previous paragraph and nothing happens../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:118test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:119test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:120test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:154test: Dragging the first paragraph to an empty space in the middle of the editor works correctly../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:160test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:161test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/DraggableBlock.spec.mjs:162test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/ElementFormat.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/ElementFormat.spec.mjs:20test: Element format../lexical/packages/lexical-playground/__tests__/e2e/ElementFormat.spec.mjs:22test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/ElementFormat.spec.mjs:26test: Can indent/align paragraph when caret is within link../lexical/packages/lexical-playground/__tests__/e2e/ElementFormat.spec.mjs:59test: Can center align an empty paragraph
`../lexical/packages/lexical-playground/__tests__/e2e/Emoticons.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/Emoticons.spec.mjs:24test: Emoticons../lexical/packages/lexical-playground/__tests__/e2e/Emoticons.spec.mjs:26test: Can handle a single emoticon../lexical/packages/lexical-playground/__tests__/e2e/Emoticons.spec.mjs:107test: Can enter multiple emoticons../lexical/packages/lexical-playground/__tests__/e2e/Emoticons.spec.mjs:573test: Can handle single emoticon replaced with text
`../lexical/packages/lexical-playground/__tests__/e2e/EquationNode.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/EquationNode.spec.mjs:60test: EquationNode../lexical/packages/lexical-playground/__tests__/e2e/EquationNode.spec.mjs:62test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/EquationNode.spec.mjs:68test: inline EquationNode is wrapped in a paragraph../lexical/packages/lexical-playground/__tests__/e2e/EquationNode.spec.mjs:86test: block EquationNode is a child of the root
`../lexical/packages/lexical-playground/__tests__/e2e/Events.spec.mjs`
category: portable
family: beforeinput-input / browser-engine
target: .tmp/slate-v2/packages/slate-react/test/model-input-strategy-contract.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Events.spec.mjs:18test: Events../lexical/packages/lexical-playground/__tests__/e2e/Events.spec.mjs:21test: Autocapitalization (MacOS specific)../lexical/packages/lexical-playground/__tests__/e2e/Events.spec.mjs:96test: Add period with double-space after emoji (MacOS specific) #3953
`../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:23test: Extensions../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:25test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:47test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:128test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:183test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:189test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:190test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:237test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Extensions.spec.mjs:274test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Focus.spec.mjs`
category: portable
family: beforeinput-input / browser-engine
target: .tmp/slate-v2/packages/slate-react/test/model-input-strategy-contract.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Focus.spec.mjs:18test: Focus../lexical/packages/lexical-playground/__tests__/e2e/Focus.spec.mjs:20test: can tab out of the editor../lexical/packages/lexical-playground/__tests__/e2e/Focus.spec.mjs:23test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Focus.spec.mjs:34test: selection remains internally when clicking outside the editor../lexical/packages/lexical-playground/__tests__/e2e/Focus.spec.mjs:38test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:28test: Hashtags../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:30test: Can handle a single hashtag../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:90test: Can handle adjacent hashtags../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:195test: Can insert many hashtags mixed with text and delete them all correctly../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:269test: Hashtag inherits format../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:270test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:290test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:329test: Should not break while skipping invalid hashtags #5703../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:365test: Can handle hashtags following multiple invalid hashtags../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:420test: Should not break when pasting multiple matches../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:424test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:444test: Should not break while importing and exporting multiple matches../lexical/packages/lexical-playground/__tests__/e2e/Hashtags.spec.mjs:448test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsBackspaceAtStart.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsBackspaceAtStart.spec.mjs:19test: Headings - stays as a heading when you backspace at the start of a heading with no previous sibling nodes present../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsBackspaceAtStart.spec.mjs:24test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsEnterAtEnd.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsEnterAtEnd.spec.mjs:18test: Headings - changes to a paragraph when you press enter at the end of a heading../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsEnterAtEnd.spec.mjs:23test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsEnterInMiddle.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsEnterInMiddle.spec.mjs:23test: Headings - stays as a heading when you press enter in the middle of a heading../lexical/packages/lexical-playground/__tests__/e2e/Headings/HeadingsEnterInMiddle.spec.mjs:28test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:35test: HorizontalRule../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:37test: Can create a horizontal rule and move selection around it../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:41test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:158test: Will add a horizontal rule at the end of a current TextNode and move selection to the new ParagraphNode.../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:162test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:210test: Will add a horizontal rule and split a TextNode across 2 paragraphs if the caret is in the middle of the TextNode, moving selection to the start of the new ParagraphNode.../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:214test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:272test: Will add a horizontal rule and split a TextNode across 2 ListItemNode if the caret is in the middle of the TextNode, moving selection to the start of the new ParagraphNode../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:276test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:341test: Will add a horizontal rule and split a TextNode across 2 ListItemNode if the caret is in an empty ListItemNode, moving selection to the start of the new ListItemNode (#6849)../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:345test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:399test: Can copy and paste a horizontal rule../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:400test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:489test: Can delete empty paragraph after a horizontal rule without deleting the horizontal rule../lexical/packages/lexical-playground/__tests__/e2e/HorizontalRule.spec.mjs:495test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:35test: Images../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:37test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:40test: Can create a decorator and move selection around it../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:45test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:219test: Can add images and delete them correctly../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:223test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:391test: Can add images by arbitrary URL../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:396test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:442test: Can be dragged and dropped correctly when the image is clicked../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:448test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:449test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:450test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:535test: Cannot be dragged without being clicked../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:539test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:577test: Select image, then select text - EditorState._selection updates with mousedown #2901../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:584test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:585test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:615test: Node selection: can select multiple image nodes and replace them with a new image../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:620test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:725test: Can resolve selection correctly when the image is clicked and dragged right../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:731test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:770test: Verifies image dimensions are properly calculated for both SVG and JPG formats../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:775test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:820test: Dimensionless SVG renders with a visible bounding box instead of collapsing../lexical/packages/lexical-playground/__tests__/e2e/Images.spec.mjs:825test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:41test: Identation../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:46test: Can create content and indent and outdent it all../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:53test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:461test: Can only indent paragraph until the max depth../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:465test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:479test: Can only indent until the max depth when list is empty../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:483test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:591test: Can only indent until the max depth when list has content../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:595test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:704test: Can only indent until the max depth a list with nested lists../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:708test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:1007test: Cannot have negative indents (#7410)../lexical/packages/lexical-playground/__tests__/e2e/Indentation.spec.mjs:1008test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Keyboard.spec.mjs`
category: portable
family: beforeinput-input / browser-engine
target: .tmp/slate-v2/packages/slate-react/test/model-input-strategy-contract.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Keyboard.spec.mjs:21test: Keyboard shortcuts../lexical/packages/lexical-playground/__tests__/e2e/Keyboard.spec.mjs:26test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Keyboard.spec.mjs:32test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs`
category: portable
family: beforeinput-input / browser-engine
target: .tmp/slate-v2/packages/slate-react/test/model-input-strategy-contract.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:179test: Keyboard shortcuts../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:181test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:186test: Can use ${format} format with the shortcut../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:211test: Can use ${alignment} with the shortcut../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:229test: Can use ${style} with the shortcut../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:246test: Can increase and decrease font size with the shortcuts../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:264test: Can clear formatting with the shortcut../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:312test: Can toggle Insert Code Block with the shortcut../lexical/packages/lexical-playground/__tests__/e2e/KeyboardShortcuts.spec.mjs:335test: Can indent and outdent with the shortcuts
`../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs`
category: portable-mixed
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs:24test: Keywords../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs:26test: Can create a decorator and move selection around it../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs:190test: Can type congrats[Team]!../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs:217test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs:223test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs:354test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Keywords.spec.mjs:358test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:39test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:42describe: Links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:44test: Can convert a text node into a link../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:127test: Can convert multi-formatted text into a link (backward)../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:244test: Can convert multi-formatted text into a link (forward)../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:361test: Can create a link in a list and insert a paragraph at the start../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:410test: Can create a link with some text after, insert paragraph, then backspace, it should merge correctly../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:495test: Can backspace across a link and it deletes text, not the whole link../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:551test: Can create a link then replace it with plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:590test: Can create a link then replace it with plain text #2../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:616test: Can create a link then partly replace it with plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:649test: Inserting text either side of links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:673test: Inserting text before links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:674test: Start-of-paragraph links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:721test: Can insert text before a start-of-paragraph link, via typing../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:727test: Can insert text before a start-of-paragraph link, via pasting plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:734test: Can insert text before a start-of-paragraph link, via pasting HTML../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:741test: Can insert text before a start-of-paragraph link, via pasting Lexical text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:748test: Mid-paragraph links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:795test: Can insert text before a mid-paragraph link, via typing../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:801test: Can insert text before a mid-paragraph link, via pasting plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:807test: Can insert text before a mid-paragraph link, via pasting HTML../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:813test: Can insert text before a mid-paragraph link, via pasting Lexical text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:820test: End-of-paragraph links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:865test: Can insert text before an end-of-paragraph link, via typing../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:871test: Can insert text before an end-of-paragraph link, via pasting plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:878test: Can insert text before an end-of-paragraph link, via pasting HTML../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:885test: Can insert text before an end-of-paragraph link, via pasting Lexical text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:893test: Inserting text after links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:894test: Start-of-paragraph links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:940test: Can insert text after a start-of-paragraph link, via typing../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:946test: Can insert text after a start-of-paragraph link, via pasting plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:953test: Can insert text after a start-of-paragraph link, via pasting HTML../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:960test: Can insert text after a start-of-paragraph link, via pasting Lexical text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:967test: Mid-paragraph links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1014test: Can insert text after a mid-paragraph link, via typing../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1020test: Can insert text after a mid-paragraph link, via pasting plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1027test: Can insert text after a mid-paragraph link, via pasting HTML../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1034test: Can insert text after a mid-paragraph link, via pasting Lexical text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1041test: End-of-paragraph links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1087test: Can insert text after an end-of-paragraph link, via typing../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1093test: Can insert text after an end-of-paragraph link, via pasting plain text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1100test: Can insert text after an end-of-paragraph link, via pasting HTML../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1107test: Can insert text after an end-of-paragraph link, via pasting Lexical text../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1116test: Can convert multi-formatted text into a link and then modify text after../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1241test: It can insert text inside a link after a formatted text node../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1326test: It can insert text inside a link before a formatted text node../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1414test: Can edit link with collapsed selection../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1454test: Can type text before and after../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1506test: Can delete text up to a link and then add text after../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1570test: Can convert part of a text node into a link with forwards selection../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1662test: Can convert part of a text node into a link with backwards selection../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1766test: Can convert part of a text node into a link and change block type../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1814test: Can create multiline links../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1850test: Can handle pressing Enter inside a Link../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1888test: Can handle pressing Enter inside a Link containing multiple TextNodes../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1931test: Can handle pressing Enter at the beginning of a Link../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1965test: Can handle pressing Enter at the end of a Link../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1969test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:1999test: Can add, edit and remove links on images../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:2005test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:2150test: Can add, edit and remove links on multiple selected images../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:2156test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:2406test: Link attributes../lexical/packages/lexical-playground/__tests__/e2e/Links.spec.mjs:2411test: Can add attributes with paste
`../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:75test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:78test: Checklist focus option../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:79test: (shouldDisableFocusOnClickChecklist: true) Keeps focus outside the editor when clicking a checklist item../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:83test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:120test: (shouldDisableFocusOnClickChecklist: false) Moves focus into the editor/listItem when clicking a checklist item../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:124test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:169describe: Nested List../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:172test: Can create a list and partially copy some content out of it../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:224test: Should outdent if indented when the backspace key is pressed../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:316test: Should outdent if indented when the backspace key is pressed only at the front../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:367test: Should retain selection style when exiting list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:447test: Can indent/outdent multiple list nodes in a list with multiple levels of indentation../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:671test: Can indent a list with a list item in between nested lists../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:719test: Can create a list and then toggle it back to original state.../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:923test: Can toggle format for multi-line list of each type without losing indentation state.../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1242test: Can create a list containing inline blocks and then toggle it back to original state.../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1329test: Can create multiple bullet lists and then toggle off the list.../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1446test: Can create an unordered list and convert it to an ordered list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1487test: Can create a single item unordered list with text and convert it to an ordered list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1523test: Can create a multi-line unordered list and convert it to an ordered list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1614test: Can create a multi-line unordered list and convert it to an ordered list when no nodes are in the selection../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1698test: Can create an indented multi-line unordered list and convert it to an ordered list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:1831test: Can create an indented multi-line unordered list and convert individual lists in the nested structure to a numbered list.../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2117test: Should merge selected nodes into existing list siblings of the same type when formatting to a list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2194test: Should NOT merge selected nodes into existing list siblings of a different type when formatting to a list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2270test: Should create list with start number markdown../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2301test: Should not process paragraph markdown inside list.../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2318test: Un-indents list empty list items when the user presses enter../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2371test: Converts a List with one ListItem to a Paragraph when Normal is selected in the format menu../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2400test: Converts the last ListItem in a List with multiple ListItem to a Paragraph when Normal is selected in the format menu../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2439test: Converts the middle ListItem in a List with multiple ListItem to a Paragraph when Normal is selected in the format menu../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2489test: Can create check list, toggle it to bullet-list and back../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2617test: can navigate and check/uncheck with keyboard../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2683test: replaces existing element node../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2707test: remove list breaks when selection in empty nested list item../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2739test: remove list breaks when selection in empty nested list item 2../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2789test: new list item should preserve format from previous list item even after new list item is indented../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2827test: collapseAtStart for trivial bullet list../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2848test: collapseAtStart for bullet list with text../lexical/packages/lexical-playground/__tests__/e2e/List.spec.mjs:2873test: collapseAtStart for bullet list with text inside autolink
`../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:55describe: Markdown../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:219test: Should create stylized (e.g. BIUS) text from plain text using a markdown shortcut e.g. ${markdownText}../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:224test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:250test: Should create stylized (e.g. BIUS) text from already stylized text using a markdown shortcut e.g. ${markdownText}../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:255test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:308test: Should test markdown with the (${markdownText}) trigger. Should include undo and redo.../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:313test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:333test: Should test importing markdown (${markdownText}) trigger.../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:338test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:380describe: Markdown../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:382test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:654test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:678test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:690test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:698test: can undo/redo nested transformations../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:763test: can convert already styled text (overlapping ranges)../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:810test: can convert markdown text into rich text../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:839test: can type text with markdown../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:845test: intraword text format../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:871test: can export text format next to a newline../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:907test: can import single decorator node (#2604)../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:909test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:941test: can import several text match transformers in a same line (#5385)../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:945test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:1007test: does not use code-formatted text in text format transformers (#7349)../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:1028test: can adjust selection after text match transformer../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:1055test: keep list marker on its own items../lexical/packages/lexical-playground/__tests__/e2e/Markdown.spec.mjs:1069test: keep list marker on its own items with copy/paste
`../lexical/packages/lexical-playground/__tests__/e2e/MaxLength.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/MaxLength.spec.mjs:24test: MaxLength../lexical/packages/lexical-playground/__tests__/e2e/MaxLength.spec.mjs:29test: can restrict the text to specified length../lexical/packages/lexical-playground/__tests__/e2e/MaxLength.spec.mjs:56test: can restrict pasted text to specified length../lexical/packages/lexical-playground/__tests__/e2e/MaxLength.spec.mjs:73test: can restrict emojis on boundaries../lexical/packages/lexical-playground/__tests__/e2e/MaxLength.spec.mjs:125test: paste with empty paragraph in between #3773../lexical/packages/lexical-playground/__tests__/e2e/MaxLength.spec.mjs:142test: paste with empty paragraph at end #3773
`../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:29test: Mentions../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:32test: Can enter the Luke Skywalker mention../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:105test: Can enter and delete part of the Luke Skywalker mention../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:200test: Can enter and backspace part of the Luke Skywalker mention in the middle../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:276test: Can enter and delete part of the Luke Skywalker mention in the middle../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:352test: Can enter and backspace part of the Luke Skywalker mention../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:524test: Can enter multiple Luke Skywalker mentions and then delete them from start../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:858test: Can enter a mention then delete it and partially remove text after../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:940test: Pasting over a mention does not lead to crash../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:992test: Sets correct attributes on typeahead menu container../lexical/packages/lexical-playground/__tests__/e2e/Mentions.spec.mjs:996test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Mutations.spec.mjs`
category: portable
family: beforeinput-input / browser-engine
target: .tmp/slate-v2/packages/slate-react/test/model-input-strategy-contract.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Mutations.spec.mjs:51test: Mutations../lexical/packages/lexical-playground/__tests__/e2e/Mutations.spec.mjs:53test: Text mutation observers also manage the selection../lexical/packages/lexical-playground/__tests__/e2e/Mutations.spec.mjs:156test: Can restore the DOM to the editor state state
`../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:44test: Keyboard Navigation../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:47test: can type several paragraphs../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:66test: can move to the beginning of the current line, then back to the end of the current line../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:105test: can move to the top of the editor../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:116test: can move one word to the right../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:153test: can move to the beginning of the previous word../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:198test: can move to the bottom of the editor../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:219test: can move to the beginning of the current paragraph../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:242test: can move to the top of the editor, then to the bottom of the current paragraph../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:260test: can navigate through the plain text word by word../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:474test: can navigate through the formatted text word by word../lexical/packages/lexical-playground/__tests__/e2e/Navigation.spec.mjs:795test: can navigate through the text with emoji word by word
`../lexical/packages/lexical-playground/__tests__/e2e/Placeholder.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/Placeholder.spec.mjs:20test: Placeholder../lexical/packages/lexical-playground/__tests__/e2e/Placeholder.spec.mjs:22test: Displays a placeholder when no content is present
`../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:59describe: Selection../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:63test: does not focus the editor on load../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:84test: keeps single active selection for nested editors../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:90test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:139test: can wrap post-linebreak nodes into new element../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:143test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:171test: can delete text by line backwards with CMD+delete../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:175test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:210test: can delete text by line forwards with opt+CMD+delete../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:214test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:258test: can delete text by line forwards with control+K../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:268test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:312test: can delete line which ends with element backwards with CMD+delete../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:316test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:351test: can delete line which starts with element forwards with opt+CMD+delete../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:355test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:511test: can delete line by collapse../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:512test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:532test: Can insert inline element within text and put selection after it../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:536test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:552test: Can delete at boundary #4221../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:553test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:590test: Can select all with node selection../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:591test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:606test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:611test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:649test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:654test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:697test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:698test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:737test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:738test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:780test: Can delete block elements../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:781test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:836test: Can delete sibling elements forward../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:842test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:860test: Can adjust triple click selection../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:865test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:891test: Can adjust triple click selection with../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:896test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:933test: Select all from Node selection #4658../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:935test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:952test: Select all (DecoratorNode at start) #4670../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:957test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:976test: Can use block controls on selections including decorator nodes #5371../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:981test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1008test: Select previous with RTL (DecoratorNode) #7685../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1013test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1035test: Select next with RTL (DecoratorNode) #7685../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1040test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1063test: Move left from DecoratorNode in RTL #7771../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1068test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1096test: Move right from DecoratorNode in RTL #7771../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1101test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1128test: Move right from last node in RTL #7775../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1133test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1145test: Move left from last node in RTL #7775../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1151test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1152test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1170test: Can delete table node present at the end #5543../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1176test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1193test: Triple-clicking last cell in table should not select entire document../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1199test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1248test: Selecting table cell then dragging to outside of table should select entire table../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1254test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1295test: Can persist the text format from the paragraph../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1299test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1338test: toggle format at the start of paragraph to a different format persists the format../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1342test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1379test: formatting is persisted after deleting all nodes from the paragraph node../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1383test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1410test: Can persist the text style (color) from the paragraph../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1414test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1449test: shift+arrowdown into a table selects the whole table../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1455test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1456test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1471test: shift+arrowup into a table selects the whole table../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1477test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1478test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1493test: shift+arrowdown into a table, when the table is the last node, selects the whole table../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1497test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1515test: shift+arrowup into a table, when the table is the first node, selects the whole table../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1519test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1537test: shift+arrowdown into a table, when the table is the only node, selects the whole table../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1541test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1566test: shift+arrowup into a table, when the table is the only node, selects the whole table../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1572test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1597test: shift+arrowdown into a table does not select element after../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1603test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1622test: shift+arrowup into a table does not select element before../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1628test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1646test: programatic update on blurred editor does not kill selection../lexical/packages/lexical-playground/__tests__/e2e/Selection.spec.mjs:1651test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/SelectionAlwaysOnDisplay.spec.mjs`
category: portable-mixed
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/SelectionAlwaysOnDisplay.spec.mjs:20test: SelectionAlwaysOnDisplay../lexical/packages/lexical-playground/__tests__/e2e/SelectionAlwaysOnDisplay.spec.mjs:24test: retain selection works../lexical/packages/lexical-playground/__tests__/e2e/SelectionAlwaysOnDisplay.spec.mjs:25test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/SelectionAlwaysOnDisplay.spec.mjs:62test: retain selection works with reverse selection../lexical/packages/lexical-playground/__tests__/e2e/SelectionAlwaysOnDisplay.spec.mjs:67test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/SpecialTexts.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/SpecialTexts.spec.mjs:18test: Special Text../lexical/packages/lexical-playground/__tests__/e2e/SpecialTexts.spec.mjs:27test: should handle a single special text../lexical/packages/lexical-playground/__tests__/e2e/SpecialTexts.spec.mjs:45test: should handle multiple special texts../lexical/packages/lexical-playground/__tests__/e2e/SpecialTexts.spec.mjs:69test: should not work when the option to use brackets for highlighting is disabled
`../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs:20test: Tab../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs:22test: can tab + IME../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs:27test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs:94test: can tab inside code block #4399../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs:95test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs:124test: can go to start of line after a tab character../lexical/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs:128test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:92describe: Tables../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:93test: Can a table be inserted from the toolbar../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:98test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:137test: Can type inside of table cell../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:142test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:185test: Can exit the first cell of a table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:190test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:231test: Can exit the last cell of a table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:236test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:276test: Can exit the first cell of a nested table into the parent table cell../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:281test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:304test: Can exit the last cell of a nested table into the parent table cell../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:309test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:334test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:340test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:441test: Can type text after a table that is the last node../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:447test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:499test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:505test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:593test: Can enter a table from a paragraph underneath via the left arrow key../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:598test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:621describe: Can navigate table with keyboard../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:622test: Can navigate cells horizontally../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:627test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:721test: Can navigate cells vertically../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:726test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:756test: Should not navigate cells when typeahead menu is open and focused../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:761test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:795test: Can select cells using Table selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:801test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:857test: Can select cells using Table selection via keyboard../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:863test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:941test: Can style text using Table selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:947test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1008test: Can style on empty table cells and paragraphs with no text../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1013test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1071test: Align selection style for table cells../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1076test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1143test: Can copy + paste (internal) using Table selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1149test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1238test: Can clear text using Table selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1244test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1303test: Range Selection is corrected when it contains a partial Table.../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1308test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1344test: Select All when document contains tables adds custom table styles.../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1349test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1399test: Can delete all with node selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1404test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1423test: Can delete all with range selection anchored in table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1428test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1464test: Horizontal rule inside cell../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1465test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1500test: Table selection: can select multiple cells and insert a decorator../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1506test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1564test: Table selection: can backspace lines, backspacing empty cell does not destroy it #3278../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1569test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1642test: Can remove new lines in a collapsible section inside of a table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1648test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1747test: Resize merged cells width (1)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1753test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1757test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1834test: Resize merged cells width (2)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1840test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1918test: Resize merged cells height../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1924test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:1925test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2013test: Merge/unmerge cells (1)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2014test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2105test: Merge/unmerge cells (2)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2106test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2241test: Merge/unmerge with already merged cells../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2247test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2556test: Merged cell tab navigation forward../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2561test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2562test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2702test: Merged cell tab navigation reverse../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2707test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2708test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2850test: Merge with content../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2851test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2939test: Select multiple merged cells (selection expands to a rectangle)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:2945test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3077test: Merge multiple merged cells and then unmerge../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3083test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3222test: Insert row above (with conflicting merged cell)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3227test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3290test: Insert column before (with conflicting merged cell)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3295test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3356test: Insert column before (with selected cell with rowspan > 1)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3361test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3416test: Insert column before (with 1+ selected cells in a row)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3421test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3493test: Delete rows (with conflicting merged cell)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3499test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3561test: Delete selected rows (with merged cell overflowing selection from top and bottom)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3566test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3752test: Delete selected rows (with merged cell overflowing selection from the top)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3757test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3947test: Delete selected rows (with merged cell overflowing selection from the bottom)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:3952test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4142test: Delete columns (with conflicting merged cell)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4147test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4208test: Delete columns backward../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4214test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4263test: Delete columns forward at end of table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4268test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4316test: Deselect when click outside #3785 #4138../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4321test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4345test: Background color to cell../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4346test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4382test: Cell merge feature disabled../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4383test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4479test: Cell background color feature disabled../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4484test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4521test: Add column header after merging cells #4378../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4526test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4622test: Can align text using Table selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4628test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4702test: Paste and insert new lines after unmerging cells../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4707test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4875test: Can delete table row when previous cell is a merged cell../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:4880test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5100test: Can delete table row when siblings are merged cell../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5105test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5318test: Can insert multiple rows above the selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5324test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5325test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5521test: Can insert multiple rows below the selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5527test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5528test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5723test: with context menu../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5725test: Can select cells using Table selection and cut them with the context menu../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5732test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5735test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5841test: Cannot insert nested tables../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5842test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5889test: Cannot paste tables inside table cells../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5894test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5948test: Can paste tables inside table cells (with hasNestedTables)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:5953test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6031test: Can paste and autofit tables inside table cells (with hasNestedTables, hasFitNestedTables)../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6036test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6037test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6128test: Click and drag to create selection in Firefox #7245../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6133test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6522test: Resize row with merged cells spanning multiple rows../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6528test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6529test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6619test: Table action menu is hidden when cell overflows../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6627test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6628test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6665test: Can expand table to fit content when pasting table into table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6670test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6904test: Can paste table containing merged cells into table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:6909test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7127test: Can paste table into table while having table selection../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7132test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7227test: Can delete table when fully selected with merged cells../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7232test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7233test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7273test: Ctrl+A selects all cells in table with merged cells when table is only content../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7279test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7333test: Drag-select column in 2x2 table selects all cells in that column../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7338test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7514test: Can clear table selection in table by selecting cell in another table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7519test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7573test: Table selection is properly cleared when clicking and dragging a cell in the same table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7578test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7638test: shift-selection tests../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7639test: Range-select from above table into it selects the entire table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7644test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7676test: Range-select from below table into it selects the entire table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7681test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7711test: Range-select from inside table to text above it selects the entire table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7716test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7747test: Range-select from inside table to text below it selects the entire table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7752test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7782test: nested table shift-selection tests../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7800test: Range-select from above nested table into it selects the entire table, but not the outer table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7806test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7807test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7808test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7837test: Range-select from below nested table into it selects the entire table, but not the outer table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7843test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7844test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7867test: Range-select from inside nested table to text above it selects the entire table, but not the outer table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7873test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7874test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7875test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7901test: Range-select from inside nested table to text below it selects the entire table, but not the outer table../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7907test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7908test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Tables.spec.mjs:7909test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs`
category: portable
family: beforeinput-input / browser-engine
target: .tmp/slate-v2/packages/slate-react/test/model-input-strategy-contract.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:27test: TextEntry../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:29test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:49test: Can insert text and replace it../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:50test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:69test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:73test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:113test: Can insert a paragraph between two text nodes../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:117test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:146test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:174test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:202test: Paragraphed text entry and selection../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:273test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:301test: Can type characters, and select and replace a part../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:353test: Can select and delete a word../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:395test: First paragraph backspace handling../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:476test: Mix of paragraphs and break points../lexical/packages/lexical-playground/__tests__/e2e/TextEntry.spec.mjs:600test: Empty paragraph and new line node selection
`../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:37describe: TextFormatting../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:39test: Can create bold text using the shortcut../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:43test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:93test: Can create italic text using the shortcut../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:97test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:147test: Can select text and boldify it with the shortcut../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:151test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:203test: Should not format the text in the subsequent paragraph after a triple click selection event.../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:207test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:245test: Can select text and italicify it with the shortcut../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:249test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:301test: Can select text and underline+strikethrough../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:305test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:424test: Can select text and change it to ${format}../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:428test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:500test: Pressing ${key} resets ${format} format../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:504test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:532test: Can select text and increase the font-size../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:536test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:571test: Can select text with different size and increase the font-size relatively../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:575test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:596test: Can select text and decrease the font-size../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:600test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:635test: Can select text with different size and decrease the font-size relatively../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:639test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:660test: Can select text and change the font-size and font-family../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:664test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:749test: Can select text and update font size by entering the value../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:753test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:790test: Can select text with different size and update font size by entering the value../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:794test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:817test: Can select multiple text parts and format them with shortcuts../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:822test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:996test: Can insert range of formatted text and select part and replace with character../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1000test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1093test: Regression #2439: can format backwards when at first text node boundary../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1097test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1144test: The active state of the button in the toolbar should to be displayed correctly../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1148test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1182test: Regression #2523: can toggle format when selecting a TextNode edge followed by a non TextNode;../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1186test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1240test: Multiline selection format ignores new lines../lexical/packages/lexical-playground/__tests__/e2e/TextFormatting.spec.mjs:1245test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs`
category: portable-mixed
family: mixed portable invariant
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:33test: Toolbar../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:43test: Insert image caption + table../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:50test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:271test: Center align image../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:273test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:351test: When we select three textNodes with different formatting at the same time, the selection formatting should show no formatting at all../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:356test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:373test: Selecting empty paragraphs has empty selection format../lexical/packages/lexical-playground/__tests__/e2e/Toolbar.spec.mjs:378test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/1055-fast-typing-undo.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/1055-fast-typing-undo.spec.mjs:18test: Regression test #1055../lexical/packages/lexical-playground/__tests__/regression/1055-fast-typing-undo.spec.mjs:20test: Adds new editor state into undo stack right after undo was done../lexical/packages/lexical-playground/__tests__/regression/1055-fast-typing-undo.spec.mjs:24test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/1083-backspace-with-element-at-front.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/1083-backspace-with-element-at-front.spec.mjs:23test: Regression test #1083../lexical/packages/lexical-playground/__tests__/regression/1083-backspace-with-element-at-front.spec.mjs:25test: Backspace with ElementNode at the front of the paragraph../lexical/packages/lexical-playground/__tests__/regression/1083-backspace-with-element-at-front.spec.mjs:29test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/1083-backspace-with-element-at-front.spec.mjs:66test: Backspace with ElementNode at the front of the selection../lexical/packages/lexical-playground/__tests__/regression/1083-backspace-with-element-at-front.spec.mjs:70test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/1113-link-newline-at-end.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/1113-link-newline-at-end.spec.mjs:18test: Regression test #1113../lexical/packages/lexical-playground/__tests__/regression/1113-link-newline-at-end.spec.mjs:20test: Selects new line when inserting a new line at the end of a link../lexical/packages/lexical-playground/__tests__/regression/1113-link-newline-at-end.spec.mjs:24test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/1258-delete-forward.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/regression/1258-delete-forward.spec.mjs:22test: Regression test #1258../lexical/packages/lexical-playground/__tests__/regression/1258-delete-forward.spec.mjs:24test: Can delete forward with keyboard
`../lexical/packages/lexical-playground/__tests__/regression/1384-insert-nodes.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/1384-insert-nodes.spec.mjs:21test: Regression test #1384../lexical/packages/lexical-playground/__tests__/regression/1384-insert-nodes.spec.mjs:23test: Properly pastes in code blocks../lexical/packages/lexical-playground/__tests__/regression/1384-insert-nodes.spec.mjs:28test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/1730-delete-backword.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/regression/1730-delete-backword.spec.mjs:19test: Regression test #1730../lexical/packages/lexical-playground/__tests__/regression/1730-delete-backword.spec.mjs:21test: Can delete backward with keyboard
`../lexical/packages/lexical-playground/__tests__/regression/221-editing-hashtags.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/221-editing-hashtags.spec.mjs:20test: Regression test #221../lexical/packages/lexical-playground/__tests__/regression/221-editing-hashtags.spec.mjs:22test: Can handle space in hashtag../lexical/packages/lexical-playground/__tests__/regression/221-editing-hashtags.spec.mjs:64test: Can handle delete in hashtag../lexical/packages/lexical-playground/__tests__/regression/221-editing-hashtags.spec.mjs:106test: Can handle backspace into hashtag
`../lexical/packages/lexical-playground/__tests__/regression/230-navigation-around-hashtags.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/230-navigation-around-hashtags.spec.mjs:20test: Regression test #230../lexical/packages/lexical-playground/__tests__/regression/230-navigation-around-hashtags.spec.mjs:22test: Is able to right arrow before hashtag after inserting text node
`../lexical/packages/lexical-playground/__tests__/regression/231-empty-text-nodes.spec.mjs`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/231-empty-text-nodes.spec.mjs:24test: Regression test #231../lexical/packages/lexical-playground/__tests__/regression/231-empty-text-nodes.spec.mjs:26test: Does not generate segment error when editing empty text nodes
`../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs:24test: Regression test #3136../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs:26test: Correctly pastes rich content when the selection is followed by an inline element../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs:30test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs:47it: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs:67test: Correctly pastes rich content when the selection is preceded by an inline element../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs:71test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/3136-insert-nodes-adjacent-to-inline.spec.mjs:89it: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/3433-merge-markdown-lists.spec.mjs`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/3433-merge-markdown-lists.spec.mjs:17test: Regression test #3433../lexical/packages/lexical-playground/__tests__/regression/3433-merge-markdown-lists.spec.mjs:19test: can merge markdown lists created immediately before existing lists../lexical/packages/lexical-playground/__tests__/regression/3433-merge-markdown-lists.spec.mjs:23test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/379-backspace-with-mentions.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/379-backspace-with-mentions.spec.mjs:20test: Regression test #379../lexical/packages/lexical-playground/__tests__/regression/379-backspace-with-mentions.spec.mjs:22test: Is able to correctly handle backspace press at the line boundary
`../lexical/packages/lexical-playground/__tests__/regression/399-open-line.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/399-open-line.spec.mjs:20test: Regression test #399../lexical/packages/lexical-playground/__tests__/regression/399-open-line.spec.mjs:22test: Supports Ctrl-O as an open line command
`../lexical/packages/lexical-playground/__tests__/regression/429-swapping-emoji.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/429-swapping-emoji.spec.mjs:19test: Regression test #429../lexical/packages/lexical-playground/__tests__/regression/429-swapping-emoji.spec.mjs:21test: Can add new lines before the line with emoji
`../lexical/packages/lexical-playground/__tests__/regression/4661-insert-column-selection.spec.mjs`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/4661-insert-column-selection.spec.mjs:22test: Regression test #4661../lexical/packages/lexical-playground/__tests__/regression/4661-insert-column-selection.spec.mjs:26test: inserting 2 columns before inserts before selection../lexical/packages/lexical-playground/__tests__/regression/4661-insert-column-selection.spec.mjs:31test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/4661-insert-column-selection.spec.mjs:98test: inserting 2 columns after inserts after selection../lexical/packages/lexical-playground/__tests__/regression/4661-insert-column-selection.spec.mjs:103test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/4697-repeated-table-selection.spec.mjs`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/4697-repeated-table-selection.spec.mjs:19test: Regression test #4697../lexical/packages/lexical-playground/__tests__/regression/4697-repeated-table-selection.spec.mjs:21test: repeated table selection results in table selection../lexical/packages/lexical-playground/__tests__/regression/4697-repeated-table-selection.spec.mjs:27test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/4872-full-row-span-cell-merge.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/4872-full-row-span-cell-merge.spec.mjs:19test: Regression test #4872../lexical/packages/lexical-playground/__tests__/regression/4872-full-row-span-cell-merge.spec.mjs:21test: merging two full rows does not break table selection../lexical/packages/lexical-playground/__tests__/regression/4872-full-row-span-cell-merge.spec.mjs:27test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/4876-unmerge-cell.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/4876-unmerge-cell.spec.mjs:21test: Regression test #4876../lexical/packages/lexical-playground/__tests__/regression/4876-unmerge-cell.spec.mjs:23test: unmerging cells should add cells to correct rows../lexical/packages/lexical-playground/__tests__/regression/4876-unmerge-cell.spec.mjs:28test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/5251-paste-into-inline-element.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/5251-paste-into-inline-element.spec.mjs:29test: Regression test #5251../lexical/packages/lexical-playground/__tests__/regression/5251-paste-into-inline-element.spec.mjs:31test: Correctly pastes rich content inside an inline element../lexical/packages/lexical-playground/__tests__/regression/5251-paste-into-inline-element.spec.mjs:35test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/5583-select-list-followed-by-element-node.spec.mjs`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/5583-select-list-followed-by-element-node.spec.mjs:25test: Regression test #5251../lexical/packages/lexical-playground/__tests__/regression/5583-select-list-followed-by-element-node.spec.mjs:27test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/5583-select-list-followed-by-element-node.spec.mjs:31test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs:22test: Regression test #6870../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs:24test: left arrow moves selection around decorators near tables../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs:29test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs:30test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs:66test: left arrow expands selection around decorators near tables../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs:71test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/6870-table-left-arrow-selection.spec.mjs:72test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/6974-delete-character-backward.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/regression/6974-delete-character-backward.spec.mjs:21test: Regression tests for #6974../lexical/packages/lexical-playground/__tests__/regression/6974-delete-character-backward.spec.mjs:26test: deleteCharacter merges children from adjacent blocks even if the previous leaf is an inline decorator../lexical/packages/lexical-playground/__tests__/regression/6974-delete-character-backward.spec.mjs:31test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/7163-graphemes.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/regression/7163-graphemes.spec.mjs:21test: Grapheme deleteCharacter../lexical/packages/lexical-playground/__tests__/regression/7163-graphemes.spec.mjs:133test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/7163-graphemes.spec.mjs:135test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/7246-delete-character-backward-list.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/regression/7246-delete-character-backward-list.spec.mjs:21test: Regression tests for #7246../lexical/packages/lexical-playground/__tests__/regression/7246-delete-character-backward-list.spec.mjs:26test: deleteCharacter merges children from block adjacent to ListNode../lexical/packages/lexical-playground/__tests__/regression/7246-delete-character-backward-list.spec.mjs:31test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/7266-column-header-merged-cells.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/7266-column-header-merged-cells.spec.mjs:22test: Regression test #7266../lexical/packages/lexical-playground/__tests__/regression/7266-column-header-merged-cells.spec.mjs:25test: toggling column header with merged column cells should only apply column header to the selected column../lexical/packages/lexical-playground/__tests__/regression/7266-column-header-merged-cells.spec.mjs:30test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/7266-column-header-merged-cells.spec.mjs:136test: toggling row header with merged row cells should only apply row header to the selected row../lexical/packages/lexical-playground/__tests__/regression/7266-column-header-merged-cells.spec.mjs:141test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/7319-delete-character-backward-nodeselection.spec.mjs`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/regression/7319-delete-character-backward-nodeselection.spec.mjs:19test: Regression tests for #7319../lexical/packages/lexical-playground/__tests__/regression/7319-delete-character-backward-nodeselection.spec.mjs:24test: deleteCharacter after hr with RangeSelection../lexical/packages/lexical-playground/__tests__/regression/7319-delete-character-backward-nodeselection.spec.mjs:29test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/7319-delete-character-backward-nodeselection.spec.mjs:62test: deleteCharacter after hr with NodeSelection../lexical/packages/lexical-playground/__tests__/regression/7319-delete-character-backward-nodeselection.spec.mjs:67test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/7354-firefox-decorator-paste.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/7354-firefox-decorator-paste.spec.mjs:23test: HTML CopyAndPaste../lexical/packages/lexical-playground/__tests__/regression/7354-firefox-decorator-paste.spec.mjs:26test: Copy + paste multi line html with extra newlines../lexical/packages/lexical-playground/__tests__/regression/7354-firefox-decorator-paste.spec.mjs:31test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/7635-SELECTION_INSERT_CLIPBOARD_NODES_COMMAND.spec.mjs`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-playground/__tests__/regression/7635-SELECTION_INSERT_CLIPBOARD_NODES_COMMAND.spec.mjs:34test: Regression #7635../lexical/packages/lexical-playground/__tests__/regression/7635-SELECTION_INSERT_CLIPBOARD_NODES_COMMAND.spec.mjs:39test: Paste into image caption../lexical/packages/lexical-playground/__tests__/regression/7635-SELECTION_INSERT_CLIPBOARD_NODES_COMMAND.spec.mjs:40test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs`
category: portable
family: ime-composition / history-undo-redo
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/packages/slate-browser/src/playwright/ime.ts; .tmp/slate-v2/packages/slate-history/test
../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:36test: Regression #8153../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:39test: Can delete all text selected with Cmd+A after IME composition end on Safari../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:45test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:46test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:47test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:73test: Can delete multi-paragraph selection with Shift+ArrowUp after IME composition end on Safari../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:79test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:80test: dynamic or multiline title../lexical/packages/lexical-playground/__tests__/regression/8153-safari-ime-delete-selection.spec.mjs:81test: dynamic or multiline title
`../lexical/packages/lexical-playground/__tests__/unit/ImageHTML.test.ts`
category: portable-mixed
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-playground/__tests__/unit/ImageHTML.test.ts:26describe: ImageNode HTML serialization../lexical/packages/lexical-playground/__tests__/unit/ImageHTML.test.ts:27describe: ImageNode export../lexical/packages/lexical-playground/__tests__/unit/ImageHTML.test.ts:28it: with no caption../lexical/packages/lexical-playground/__tests__/unit/ImageHTML.test.ts:54it: with plain text caption
`../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:38describe: LexicalHeadingNode tests../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:40test: HeadingNode.constructor../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:51test: HeadingNode.createDOM()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:75test: HeadingNode.updateDOM()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:101test: HeadingNode.insertNewAfter() empty../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:123test: HeadingNode.insertNewAfter() middle../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:147test: HeadingNode.insertNewAfter() end../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:173test: HeadingNode.setTag()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:200test: $createHeadingNode()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:211test: $isHeadingNode()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.ts:219test: creates a h2 with text and can insert a new paragraph after
`../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.ts:21describe: LexicalQuoteNode tests../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.ts:23test: QuoteNode.constructor../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.ts:33test: QuoteNode.createDOM()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.ts:49test: QuoteNode.updateDOM()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.ts:66test: QuoteNode.insertNewAfter()../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.ts:87test: $createQuoteNode()
`../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalTabNode.test.ts`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalTabNode.test.ts:23describe: LexicalTabNode tests../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalTabNode.test.ts:25test: INSERT_TAB_COMMAND applies selection format and style to TabNode../lexical/packages/lexical-rich-text/src/__tests__/unit/LexicalTabNode.test.ts:58test: format preserved when typing between tabs inserted in bold text
`../lexical/packages/lexical-selection/src/__tests__/unit/$sliceSelectedTextNodeContent.test.ts`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-selection/src/__tests__/unit/$sliceSelectedTextNodeContent.test.ts:21describe: $sliceSelectedTextNodeContent../lexical/packages/lexical-selection/src/__tests__/unit/$sliceSelectedTextNodeContent.test.ts:55describe: clone../lexical/packages/lexical-selection/src/__tests__/unit/$sliceSelectedTextNodeContent.test.ts:56test: does not clone with full selection (both nodes)../lexical/packages/lexical-selection/src/__tests__/unit/$sliceSelectedTextNodeContent.test.ts:72test: clones only with partial selection (last node)../lexical/packages/lexical-selection/src/__tests__/unit/$sliceSelectedTextNodeContent.test.ts:95test: clones only with partial selection (first node)../lexical/packages/lexical-selection/src/__tests__/unit/$sliceSelectedTextNodeContent.test.ts:116test: can slice a node from both sides
`../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:125describe: LexicalSelection tests../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:228test: Expect initial output to be a block with no text.../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:234test: Bold format preserved when typing between consecutive line breaks../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:294test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1295test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1309test: insert text one selected node element selection../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1333test: getNodes resolves nested block nodes../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1355describe: Block selection moves when new nodes are inserted../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1958describe: Selection correctly resolves to a sibling ElementNode when a node is removed../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1959test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1988describe: Selection correctly resolves to a sibling ElementNode when a selected node child is removed../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:1989test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2023describe: Selection correctly resolves to a sibling ElementNode that has multiple children with the correct offset when a node is removed../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2024test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2075test: isBackward../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2119describe: Decorator text content for selection../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2200it: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2234describe: insertParagraph../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2235test: three text nodes at offset 0 on third node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2280test: four text nodes at offset 0 on third node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2328it: adjust offset for inline elements text formatting../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2373describe: Node.replace../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2428test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2447describe: Testing that $getStyleObjectFromRawCSS handles unformatted css text../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2448test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2503describe: Testing that getStyleObjectFromRawCSS handles values with colons../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2504test: dynamic or multiline title../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2559describe: $patchStyle../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2560it: should patch the style with the new style object../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2610it: should patch the style with property function../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2666describe: $setBlocksType../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2667test: Collapsed selection in text../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2706test: Collapsed selection in element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2741test: Two elements, same top-element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2780test: Two empty elements, same top-element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2821test: Two elements, same top-element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2860test: Collapsed in element inside top-element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2904test: Collapsed in text inside top-element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:2948test: Full editor selection with a mix of top-elements../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:3012test: Paragraph with links to heading with links../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:3060test: Nested list../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.tsx:3103test: Nested list with listItem twice indented from its parent
`../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:90describe: LexicalSelectionHelpers tests../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:91describe: Collapsed../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:92test: Can handle a text point../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:267test: Has correct text point after removal after merge../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:348test: Has correct text point after removal after merge (2)../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:424test: Has correct text point adjust to element point after removal of a single empty text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:485test: Has correct element point after removal of an empty text node in a group #1../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:551test: Has correct element point after removal of an empty text node in a group #2../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:627test: Has correct text point after removal of an empty text node in a group #3../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:703test: Can handle an element point on empty element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:840test: Can handle a start element point../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:993test: Can handle an end element point../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1146test: Has correct element point after merge from middle../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1217test: Has correct element point after merge from end../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1289describe: Simple range../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1290test: Can handle multiple text points../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1467test: Can handle multiple element points../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1624test: Can handle a mix of text and element points../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1794describe: can insert non-element nodes correctly../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1795describe: with an empty paragraph node selected../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1796test: a single text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1835test: two text nodes../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1876test: link insertion without parent element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1921test: a single heading node with a child text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1965describe: with a paragraph node selected on some existing text../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:1966test: a single text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2007test: two text nodes../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2052test: a single heading node with a child text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2099test: a paragraph with a child text and a child italic text and a child text../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2171describe: with a fully-selected text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2172test: a single text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2214describe: with a fully-selected text node followed by an inline element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2215test: a single text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2261describe: with a fully-selected text node preceded by an inline element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2262test: a single text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2308test: can insert a linebreak node before an inline element node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2333describe: can insert block element nodes correctly../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2334describe: with a fully-selected text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2335test: a paragraph node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2380describe: with a fully-selected text node followed by an inline element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2381test: a paragraph node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2430describe: with a fully-selected text node preceded by an inline element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2431test: a paragraph node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2480test: Can insert link into empty paragraph../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2499test: Can insert link into empty paragraph (2)../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2519test: Can insert an ElementNode after ShadowRoot../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2541describe: extract../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2542test: Should return the selected node when collapsed on a TextNode../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2578describe: insertNodes../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2583it: can insert element next to top level decorator node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2614it: can insert when previous selection was null../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2643it: can insert when before empty text node../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2663it: last node is LineBreakNode../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2691describe: $patchStyleText../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2692test: can patch a selection anchored to the end of a TextNode before an inline element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2748test: can patch a selection anchored to the end of a TextNode at the end of a paragraph../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2798test: can patch a selection that ends on an element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2851test: can patch a reversed selection that ends on an element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2904test: can patch a selection that starts and ends on an element../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2946test: can clear a style../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:2984test: can toggle a style on a collapsed selection../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:3033test: updates cached styles when setting on a collapsed selection../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:3082test: $getSelectionStyleValueForProperty returns consistent value regardless of selection direction../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:3141test: $getSelectionStyleValueForProperty ignores nodes with zero characters selected at boundaries../lexical/packages/lexical-selection/src/__tests__/unit/LexicalSelectionHelpers.test.ts:3232test: preserve backward selection when changing style of 2 different text nodes
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:32describe: LexicalTableCellNode tests../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:34test: TableCellNode.constructor../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:48test: TableCellNode.createDOM()../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:103test: TableCellNode.importDOM../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:255test: dynamic or multiline title../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:270test: dynamic or multiline title../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:285test: DOM Conversion: without scope defaults to ROW header../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:304test: DOM Conversion: in first row without scope becomes ROW header../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:324test: DOM Conversion: in first column of non-first row becomes COLUMN header../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableCellNode.test.ts:350test: DOM Conversion: in thead without scope becomes ROW header
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:51describe: TableExtension../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:67it: Creates a table with INSERT_TABLE_COMMAND../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:101it: Prevents nested tables by default../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:141it: Allows nested tables when hasNestedTables is true../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:184describe: $insertGeneratedNodes../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:185test: SELECTION_INSERT_CLIPBOARD_NODES_COMMAND handler prevents pasting whole table into cells by default../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:236test: SELECTION_INSERT_CLIPBOARD_NODES_COMMAND handler allows pasting whole table into a single cell when hasNestedTables is true../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:292test: SELECTION_INSERT_CLIPBOARD_NODES_COMMAND handler allows extending table when hasNestedTables is true../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:365describe: colWidths../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:366it: removes colWidths if it is an empty array../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:388it: uses the last column width if the column count is greater than the number of column widths../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:410it: shortens the colWidths if the column count is less than the number of column widths../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:433describe: SELECT_ALL_COMMAND../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:434it: Selects all cells in table without merged cells when table is only content../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:519it: Selects all cells in table with merged cells when table is only content../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:618it: Does not intercept SELECT_ALL_COMMAND when cursor is outside table../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableExtension.test.ts:656it: Does not intercept SELECT_ALL_COMMAND when there is paragraph after table
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx:53describe: LexicalTableMobileSelection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx:108test: mouse click should set anchor cell for selection (existing behavior)../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx:137test: touch tap on single cell should not create table selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx:164test: touch tap between different cells should not create table selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx:201test: touch drag (with isSelecting=true) should still create table selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx:241test: mixed pointer types should be handled correctly../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableMobileSelection.test.tsx:272test: mouse leaving browser window during selection should stop selection
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:105describe: LexicalTableNode tests../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:107describe: hasHorizontalScroll={${hasHorizontalScroll}}../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:140test: TableNode.constructor../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:152test: TableNode.createDOM()../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:169test: TableNode.createDOM() and updateDOM() style../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:278test: TableNode.exportDOM() with range selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:349test: TableNode.exportDOM() with partial table selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:405test: Copy table from an external source../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:456test: Copy table with caption/tbody/thead/tfoot from an external source../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:600test: Copy table with caption from an external source../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:770test: Copy table from an external source like gdoc with formatting../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:835test: Cut table in the middle of a range selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:865test: Cut table as last node in range selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:893test: Cut table as first node in range selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:921test: Cut table is whole selection, should remove it../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:962test: Cut subsection of table cells, should just clear contents../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:1067test: Table plain text output validation../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:1117test: Toggle row striping ON/OFF../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:1182test: Toggle frozen first column ON/OFF../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:1696test: Change Table-level alignment../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:1759test: Update column widths../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:1841describe: hasHorizontalScroll false -> true../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx:1859test: table is re-rendered when scroll changes
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTablePlugin.test.tsx`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTablePlugin.test.tsx:26describe: LexicalTablePlugin../lexical/packages/lexical-table/src/__tests__/unit/LexicalTablePlugin.test.tsx:43test: INSERT_TABLE_COMMAND inserts a table../lexical/packages/lexical-table/src/__tests__/unit/LexicalTablePlugin.test.tsx:77test: INSERT_TABLE_COMMAND inserts a table when the editor is blurred
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableRowNode.test.ts`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableRowNode.test.ts:20describe: LexicalTableRowNode tests../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableRowNode.test.ts:22test: TableRowNode.constructor../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableRowNode.test.ts:34test: TableRowNode.createDOM()
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableSelection.test.tsx`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableSelection.test.tsx:34describe: table selection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableSelection.test.tsx:70describe: regression #7076../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableSelection.test.tsx:71test: $patchStyleText works on a TableSelection../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableSelection.test.tsx:93test: $patchStyleText applies styles to empty table cells../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableSelection.test.tsx:127describe: regression #7140../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableSelection.test.tsx:128test: selection points to missing nodes after deleting table rows
`../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts`
category: portable
family: tables-grid / selection-dom-mapping
target: .tmp/slate-v2/playwright/stress/generated-editing.test.ts; .tmp/slate-v2/playwright/integration/examples/tables.test.ts; .tmp/slate-v2/packages/slate/test/transforms/insertFragment
../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:58describe: $moveTableColumn../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:73test: moves a column forward../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:105test: moves a column backward../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:137test: moves a column to the first position../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:169test: moves a column to the last position../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:201test: is a no-op when origin equals target../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:233test: is a no-op when origin is out of bounds../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:265test: is a no-op when target is out of bounds../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:297test: is a no-op when origin is negative../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:329test: reorders colWidths when present../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:360test: does not modify table with merged cells../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:425test: swaps adjacent columns../lexical/packages/lexical-table/src/__tests__/unit/LexicalTableUtils.test.ts:458test: preserves table structure after move
`../lexical/packages/lexical-utils/src/__tests__/unit/LexicalUtilsInsertNodeToNearestRoot.test.tsx`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-utils/src/__tests__/unit/LexicalUtilsInsertNodeToNearestRoot.test.tsx:26describe: LexicalUtils#insertNodeToNearestRoot../lexical/packages/lexical-utils/src/__tests__/unit/LexicalUtilsInsertNodeToNearestRoot.test.tsx:139it: dynamic or multiline title
`../lexical/packages/lexical-utils/src/__tests__/unit/LexicalUtilsSplitNode.test.tsx`
category: portable
family: core package behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical-utils/src/__tests__/unit/LexicalUtilsSplitNode.test.tsx:18describe: LexicalUtils#splitNode../lexical/packages/lexical-utils/src/__tests__/unit/LexicalUtilsSplitNode.test.tsx:104it: dynamic or multiline title../lexical/packages/lexical-utils/src/__tests__/unit/LexicalUtilsSplitNode.test.tsx:138it: throws when splitting root
`../lexical/packages/lexical/src/__tests__/unit/CodeBlock.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical/src/__tests__/unit/CodeBlock.test.ts:23describe: CodeBlock tests../lexical/packages/lexical/src/__tests__/unit/CodeBlock.test.ts:117test: Code block html paste: ${testCase.name}
`../lexical/packages/lexical/src/__tests__/unit/HTMLCopyAndPaste.test.ts`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical/src/__tests__/unit/HTMLCopyAndPaste.test.ts:24describe: HTMLCopyAndPaste tests../lexical/packages/lexical/src/__tests__/unit/HTMLCopyAndPaste.test.ts:110test: HTML copy paste: ${testCase.name}../lexical/packages/lexical/src/__tests__/unit/HTMLCopyAndPaste.test.ts:135test: iOS fix: Word predictions should be handled as plain text to maintain selection formatting
`../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:167describe: LexicalEditor tests../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:244describe: registerNodeTransform../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:245it: Calls the RootNode transform last on every update../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:357describe: read()../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:358it: Can read the editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:409it: runs transforms the editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:445it: can be nested in an update or read../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:481it: Should create an editor with an initial editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:526it: Should handle nested updates in the correct sequence../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:671it: nested update after selection update triggers exactly 1 update../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:698it: update does not call onUpdate callback when no dirty nodes../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:713it: editor.focus() callback is called../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:728it: Synchronously runs three transforms, two of them depend on the other../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:775it: Synchronously runs three transforms, two of them depend on the other (2)../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:841it: Synchronously runs three transforms, two of them depend on previously merged text content../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:912it: text transform runs when node is removed../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:943it: transforms only run on nodes that were explicitly marked as dirty../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:992it: transforms do not discard unintentional dirtyElements../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1072describe: transforms on siblings../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1110it: on remove../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1118it: on replace../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1127it: on insertBefore../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1136it: on insertAfter../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1145it: on splitText../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1155it: on append../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1165it: Detects infinite recursivity on transforms../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1186it: Should be able to update an editor state without a root element../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1221it: Should be able to recover from an update error../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1258it: Should be able to handle a change in root element../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1322it: dynamic or multiline title../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1349describe: With node decorators../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1384it: Should correctly render React component into Lexical node #1../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1428it: Should correctly render React component into Lexical node #2../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1523describe: parseEditorState()../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1532it: exportJSON API - parses parsed JSON../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1552describe: range selection../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1576it: Parses the nodes of a stringified editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1624it: Parses the text content of the editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1634describe: node selection../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1660it: Parses the nodes of a stringified editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1708it: Parses the text content of the editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1719describe: $parseSerializedNode()../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1720it: parses serialized nodes../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1744describe: Node children../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1761it: moves node to different tree branches../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1816it: moves node to different tree branches (inverse)../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1851it: moves node to different tree branches (node appended twice in two different branches)../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1893it: can subscribe and unsubscribe from commands and the callback is fired../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1921it: removes the command from the command map when no listener are attached../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1962it: can register transforms before updates../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:1988it: textcontent listener../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2049it: mutation listener../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2146it: rejects creating an editor with invalid LexicalNode parent class../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2158it: mutation listener on newly initialized editor../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2166it: mutation listener with setEditorState../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2226it: mutation listener set for original node should work with the replaced node../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2323it: mutation listener should work with the replaced node../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2380it: multiple update tags../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2402it: mutation listeners does not trigger when other node types are mutated../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2422it: mutation listeners with normalization../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2468it: dynamic or multiline title../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2586it: editable listener../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2603it: does not add new listeners while triggering existing../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2690it: allows using the same listener for multiple node types../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2719it: calls mutation listener with initial state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2787it: can use discrete for synchronous updates../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2814it: can use discrete after a non-discrete update to flush the entire queue../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2841it: can use discrete after a non-discrete setEditorState to flush the entire queue../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2871it: can use discrete in a nested update to flush the entire queue../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2898it: can read in a nested update../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2917it: does not include linebreak into inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2934it: reconciles state without root element../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2945describe: node replacement../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2946it: should work correctly../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:2983it: should fail if node keys are re-used../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3021it: dynamic or multiline title../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3074it: dynamic or multiline title../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3123it: recovers from reconciler failure and trigger proper prev editor state../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3161it: should call importDOM methods only once../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3183describe: setRootElement../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3184it: root element count is always positive../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3200it: should handle root element moving between documents../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3224describe: html config../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3225it: should override export output function../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3272it: should override import conversion function../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3312describe: selection../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3313it: updates the DOM selection../lexical/packages/lexical/src/__tests__/unit/LexicalEditor.test.tsx:3355it: does not update the Lexical->DOM selection with skip-dom-selection
`../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:11describe: LexicalEditor listeners../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:12describe: registerRootListener../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:13test: can return a function that is called when unregistered../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:31test: updates the function on each call../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:47test: works when the root element changes too../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:80describe: registerEditableListener../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:81test: can return a function that is called when unregistered../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:102test: updates the function on each call../lexical/packages/lexical/src/__tests__/unit/LexicalEditorListener.test.ts:125test: works when editable state changes
`../lexical/packages/lexical/src/__tests__/unit/LexicalEditorState.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalEditorState.test.ts:23describe: LexicalEditorState tests../lexical/packages/lexical/src/__tests__/unit/LexicalEditorState.test.ts:25test: constructor../lexical/packages/lexical/src/__tests__/unit/LexicalEditorState.test.ts:34test: read()../lexical/packages/lexical/src/__tests__/unit/LexicalEditorState.test.ts:107test: toJSON()../lexical/packages/lexical/src/__tests__/unit/LexicalEditorState.test.ts:123test: ensure garbage collection works as expected
`../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts:15describe: LexicalElementHelpers tests../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts:16describe: addClassNamesToElement() and removeClassNamesFromElement()../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts:17test: basic../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts:28test: empty../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts:44test: multiple../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts:55test: space separated../lexical/packages/lexical/src/__tests__/unit/LexicalElementHelpers.test.ts:67test: multiple spaces
`../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:18describe: defineExtension../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:19it: does not change identity../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:32it: infers the expected type (base case)../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:37it: infers the expected type (config inference)../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:42it: infers the expected type (output inference)../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:54it: can define an extension without config../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:59it: infers the correct init type../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:71describe: declarePeerDependency../lexical/packages/lexical/src/__tests__/unit/LexicalExtensionCore.test.ts:72it: validates the type argument
`../lexical/packages/lexical/src/__tests__/unit/LexicalListPlugin.test.tsx`
category: portable
family: serialization-parsing / marks-inline
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-history/test; .tmp/slate-v2/playwright/integration/examples/richtext.test.ts
../lexical/packages/lexical/src/__tests__/unit/LexicalListPlugin.test.tsx:42describe: @lexical/list tests../lexical/packages/lexical/src/__tests__/unit/LexicalListPlugin.test.tsx:85test: Toggle an empty list on/off../lexical/packages/lexical/src/__tests__/unit/LexicalListPlugin.test.tsx:140test: Can create a list and indent/outdent it../lexical/packages/lexical/src/__tests__/unit/LexicalListPlugin.test.tsx:223test: $setBlocksType does not cause invalid ListItemNode children - regression #7036
`../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:98describe: LexicalNode tests../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:122test: LexicalNode.constructor../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:138test: LexicalNode.constructor: type change detected../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:151test: LexicalNode.clone()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:160test: LexicalNode.afterCloneFrom()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:227test: LexicalNode.getType()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:236test: LexicalNode.isAttached()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:253test: LexicalNode.isSelected()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:278test: LexicalNode.isSelected(): selected text node../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:296test: LexicalNode.isSelected(): selected block node range../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:344test: LexicalNode.isSelected(): with custom range selection../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:375describe: LexicalNode.isSelected(): with inline decorator node../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:491test: dynamic or multiline title../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:536test: LexicalNode.getKey()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:540test: LexicalNode.getParent()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:556test: LexicalNode.getParentOrThrow()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:572test: LexicalNode.getTopLevelElement()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:611test: LexicalNode.getTopLevelElementOrThrow()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:632test: LexicalNode.getParents()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:652test: LexicalNode.getPreviousSibling()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:676test: LexicalNode.getPreviousSiblings()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:715test: LexicalNode.getNextSibling()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:736test: LexicalNode.getNextSiblings()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:764test: LexicalNode.getCommonAncestor()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:817test: LexicalNode.isBefore()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:845test: LexicalNode.isParentOf()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:860test: LexicalNode.getNodesBetween()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:908test: LexicalNode.isToken()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:928test: LexicalNode.isSegmented()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:948test: LexicalNode.isDirectionless()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:971test: LexicalNode.getLatest()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:980test: LexicalNode.getLatest(): garbage collected node../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1002test: LexicalNode.getTextContent()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1016test: LexicalNode.getTextContentSize()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1025test: LexicalNode.createDOM()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1042test: LexicalNode.updateDOM()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1052test: LexicalNode.remove()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1078test: LexicalNode.replace()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1088test: LexicalNode.replace(): from another parent../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1117test: LexicalNode.replace(): text../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1134test: LexicalNode.replace(): token../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1151test: LexicalNode.replace(): segmented../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1168test: LexicalNode.replace(): directionless../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1186test: LexicalNode.replace() within canBeEmpty: false../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1212test: LexicalNode.insertAfter()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1223test: LexicalNode.insertAfter(): text../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1240test: LexicalNode.insertAfter(): token../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1257test: LexicalNode.insertAfter(): segmented../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1274test: LexicalNode.insertAfter(): directionless../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1292test: LexicalNode.insertAfter() move blocks around../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1329test: LexicalNode.insertAfter() move blocks around #2../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1372test: LexicalNode.insertBefore()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1383test: LexicalNode.insertBefore(): from another parent../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1404test: LexicalNode.insertBefore(): text../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1421test: LexicalNode.insertBefore(): token../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1438test: LexicalNode.insertBefore(): segmented../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1455test: LexicalNode.insertBefore(): directionless../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1472test: LexicalNode.selectNext()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1488test: LexicalNode.selectNext(): no next sibling../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1498test: LexicalNode.selectNext(): non-text node../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1510describe: LexicalNode.$config()../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1511test: importJSON() with no boilerplate../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1541test: clone() with no boilerplate../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1622describe: LexicalNode.$config() without registration../lexical/packages/lexical/src/__tests__/unit/LexicalNode.test.ts:1623test: static getType() before registration
`../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:117describe: LexicalNode state../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:129test: state.$set() and state.$get() need to be inside an update../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:148test: __state is not an enumerable property../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:158test: getState and setState../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:181test: import and export state../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:201test: states cannot be registered with the same key string../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:222test: nodeGetter() and nodeSetter()../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:240test: flat config serialization round-trip../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:269test: default value should not be exported../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:300test: getState returns immutable values, setState require an Object literal../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:336test: setting state shouldnโt affect previous reconciled versions of the node../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:386describe: nodeStatesAreEquivalent../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:387test: undefined states are equivalent../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:390test: merges text nodes with different number of default state values../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:430test: TextNode merging only with equivalent state../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:493test: different versions of the same state are not equivalent../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:589describe: resetOnCopyNode../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:590test: state with resetOnCopyNode: true is reset when using $copyNode../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:610test: state with resetOnCopyNode: false is preserved when using $copyNode../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:630test: state without resetOnCopyNode option is preserved when using $copyNode../lexical/packages/lexical/src/__tests__/unit/LexicalNodeState.test.ts:649test: multiple states with different resetOnCopyNode configurations
`../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx:24describe: LexicalNormalization tests../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx:26describe: $normalizeSelection../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx:33test: paragraph to text nodes${reversedStr}../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx:61test: paragraph to text node + element${reversedStr}../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx:89test: paragraph to text node + decorator${reversedStr}../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx:117test: text + text node${reversedStr}../lexical/packages/lexical/src/__tests__/unit/LexicalNormalization.test.tsx:145test: paragraph to test element to text + text${reversedStr}
`../lexical/packages/lexical/src/__tests__/unit/LexicalReconciler.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalReconciler.test.ts:21describe: LexicalReconciler../lexical/packages/lexical/src/__tests__/unit/LexicalReconciler.test.ts:23test: Should set direction of root node children to auto if root node has no direction../lexical/packages/lexical/src/__tests__/unit/LexicalReconciler.test.ts:43test: Should not set direction of root node children if root node has direction../lexical/packages/lexical/src/__tests__/unit/LexicalReconciler.test.ts:64test: Should allow overriding direction of root node children when root node has no direction../lexical/packages/lexical/src/__tests__/unit/LexicalReconciler.test.ts:96test: Should allow overriding direction of root node children when root node has direction../lexical/packages/lexical/src/__tests__/unit/LexicalReconciler.test.ts:119test: Should update root children when root node direction changes
`../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:55describe: LexicalSelection tests../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:57describe: Inserting text either side of inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:124describe: Inserting text before inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:125describe: Start-of-paragraph inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:153test: Can insert text before a start-of-paragraph inline element, using insertText../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:160test: Can insert text before a start-of-paragraph inline element, using insertNodes../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:167describe: Mid-paragraph inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:194test: Can insert text before a mid-paragraph inline element, using insertText../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:200test: Can insert text before a mid-paragraph inline element, using insertNodes../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:207describe: End-of-paragraph inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:234test: Can insert text before an end-of-paragraph inline element, using insertText../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:240test: Can insert text before an end-of-paragraph inline element, using insertNodes../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:248describe: Inserting text after inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:249describe: Start-of-paragraph inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:276test: Can insert text after a start-of-paragraph inline element, using insertText../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:283test: Can insert text after a start-of-paragraph inline element, using insertNodes../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:290describe: Mid-paragraph inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:317test: Can insert text after a mid-paragraph inline element, using insertText../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:324test: Can insert text after a mid-paragraph inline element, using insertNodes../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:331describe: End-of-paragraph inline elements../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:359test: Can insert text after an end-of-paragraph inline element, using insertText../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:366test: Can insert text after an end-of-paragraph inline element, using insertNodes../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:375describe: insertText()../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:376test: inserts into existing paragraph node when selection is on parent of paragraph../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:395describe: removeText../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:396describe: with a leading TextNode and a trailing token TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:415test: remove all text../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:438test: remove initial TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:461test: remove trailing token TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:486test: remove initial TextNode and partial token TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:511test: remove partial initial TextNode and partial token TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:539describe: with a leading token TextNode and a trailing TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:557test: remove all text../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:580test: remove trailing TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:605test: remove leading token TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:628test: remove partial leading token TextNode and trailing TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:657test: remove partial token TextNode and partial trailing TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:685describe: with a leading TextNode and a trailing segmented TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:704test: remove all text../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:727test: remove initial TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:750test: remove trailing segmented TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:775test: remove initial TextNode and partial segmented TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:802test: remove partial initial TextNode and partial segmented TextNode../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:844describe: Regression tests for #6701../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:845test: insertNodes fails an invariant when there is no Block ancestor../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:887describe: getNodes()../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:924describe: $selectAll()../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:925test: with test document../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:952test: with leading inline decorator../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:984test: with trailing inline decorator../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1017test: with leading empty inline element../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1053test: with trailing empty inline element../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1090test: after removing empty paragraph../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1124test: Manual select all without normalization../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1149test: Manual select all from first text to last empty paragraph../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1174test: Manual select with focus collapsed between inline decorators../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1209test: Manual select with focus collapsed after inline decorator../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1245test: Manual select with focus between inline decorators../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1287test: select only the paragraph (not normalized)../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1312test: select around the paragraph (not normalized)../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1341test: selection collapsed inside an empty element../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1353test: select an empty ListItemNode (collapsed)../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1373describe: extract()../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1410test: Manual select all without normalization../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1437test: Manual select all from first text to last empty paragraph../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1464test: select partial TextNode extracts paragraph text../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1479test: select partial TextNode extracts link text../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1492test: select multiple partial TextNode extracts text../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1509test: select last offset TextNode as first node removes node../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1534test: select 0 offset TextNode as last node removes node../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1558describe: Regression #7081../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1560test: Firefox selection & paste before linebreak../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1592describe: Regression #7173../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1594test: Can insertNodes of multiple blocks with a target of an initial empty block and the entire next block../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1618describe: Regression #3181../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1620test: Point.isBefore edge case with mixed TextNode & ElementNode and matching descendants../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1657describe: Regression #8067../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1659test: Formatting issue when replacing text with format../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1681describe: Regression #8098../lexical/packages/lexical/src/__tests__/unit/LexicalSelection.test.ts:1683test: Do not apply format and style when moving to different node
`../lexical/packages/lexical/src/__tests__/unit/LexicalSerialization.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalSerialization.test.ts:104describe: LexicalSerialization tests../lexical/packages/lexical/src/__tests__/unit/LexicalSerialization.test.ts:106test: serializes and deserializes from JSON
`../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts:31describe: LexicalUpdateTags tests../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts:33test: Built-in update tags work correctly../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts:52test: $addUpdateTag and $hasUpdateTag work correctly../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts:62test: Multiple update tags can be added../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts:75test: Update tags via editor.update() options work../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts:88test: Update tags are cleared after update../lexical/packages/lexical/src/__tests__/unit/LexicalUpdateTags.test.ts:103test: Update tags affect editor behavior
`../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:44describe: LexicalUtils tests../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:46test: scheduleMicroTask(): native../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:62test: scheduleMicroTask(): promise../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:82test: emptyFunction()../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:88test: resetRandomKey()../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:100test: generateRandomKey()../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:110test: isArray()../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:115test: isSelectionWithinEditor()../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:154test: getTextDirection()../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:187test: isExactShortcutMatch() matches by event.key for single-letter../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:209test: isExactShortcutMatch() matches to event.key for ASCII remapped layout (English (US) Dvorak)../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:237test: isExactShortcutMatch() fallback to event.code for single-letter in event.key via non-English layout../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:259test: isExactShortcutMatch() matches special keys../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:288test: isExactShortcutMatch() matches optional keys../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:323test: isTokenOrSegmented()../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:338test: $getNodeByKey../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:361test: $nodesOfType../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:390describe: $onUpdate../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:391test: deferred even when there are no dirty nodes../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:421test: added fn runs after update, original onUpdate, and prior calls to $onUpdate../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:450test: adding fn throws outside update../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:457test: getCachedTypeToNodeMap../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:510test: scrollIntoViewIfNeeded respects scroll-padding on document element../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:550describe: $applyNodeReplacement../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:589test: validates replace node configuration../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:615test: validates replace node type withKlass../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:641test: validates replace node type change../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:673test: validates replace node key change../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:700test: validates replace node configuration withKlass../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:726test: validates nested replace node configuration../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:756test: validates nested replace node configuration withKlass../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:789test: nested replace node configuration works../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:826describe: $copyNode../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:859test: does not mark the original as dirty../lexical/packages/lexical/src/__tests__/unit/LexicalUtils.test.ts:887test: returns a shallow copy
`../lexical/packages/lexical/src/__tests__/unit/mergeRegister.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/__tests__/unit/mergeRegister.test.ts:11describe: mergeRegister../lexical/packages/lexical/src/__tests__/unit/mergeRegister.test.ts:12it: calls all of the clean-up functions../lexical/packages/lexical/src/__tests__/unit/mergeRegister.test.ts:17it: calls the clean-up functions in reverse order
`../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts`
category: portable
family: selection-dom-mapping / void-atom
target: .tmp/slate-v2/packages/slate/test; .tmp/slate-v2/packages/slate-react/test/editable-behavior.test.tsx; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:88describe: LexicalCaret../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:90describe: $getChildCaret../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:92test: direction ${direction}../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:198describe: $getSiblingCaret../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:200test: direction ${direction}../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:439describe: $caretRangeFromSelection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:440test: collapsed text point selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:499test: full text node selection (${direction})../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:549test: single text node non-empty selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:598test: multiple text node non-empty selection (${direction})../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:694describe: $removeTextFromCaretRange../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:696describe: ported Headings e2e tests../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:697test: Pressing return in the middle of a heading creates a new heading below../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:727describe: ported File e2e tests../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:728test: $selectAll() with nesting and a trailing decorator../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:758describe: ported Table e2e tests../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:759test: Can delete all with range selection anchored in table../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:795describe: ported LexicalSelection tests../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:796test: remove partial initial TextNode and partial segmented TextNode../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:857describe: single block../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:869test: remove second TextNode when wrapped in a LinkNode that will become empty../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:918test: remove first TextNode with second in token mode../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:960test: collapsed text point selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1020describe: full text node internal selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1023test: ${text} node (${direction})../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1098describe: full text node biased selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1108test: ${text} node (${direction} ${anchorBias} ${focusBias})../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1253describe: single text node non-empty partial selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1258test: ${direction} ${anchorEdgeOffset}:${-focusEdgeOffset}../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1319describe: multiple text node selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1333test: ${direction} ${texts[nodeIndexStart]} ${startFn.name} ${texts[nodeIndexEnd]} ${endFn.name}../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1481describe: multiple blocks../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1495describe: multiple text node selection../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1509test: ${direction} ${texts[nodeIndexStart]} ${startFn.name} ${texts[nodeIndexEnd]} ${endFn.name}../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1652test: remove range between list and nested list../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1694describe: Ordering../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1732describe: $comparePointCaretNext../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1733test: trivial caret checks../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1764test: TextPointCaret checks single origin../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1822test: TextPointCaret multiple origin../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1848describe: $getCommonAncestor../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1849test: trivial node checks../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1896test: dynamic or multiline title../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1954describe: LexicalSelectionHelpers../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1956describe: with a fully-selected text node preceded by an inline element../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1957test: a single text node../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1994describe: $splitAtPointCaretNext../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:1996test: Does not split a TextNode at the beginning../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:2012test: Splits a TextNode in the middle../lexical/packages/lexical/src/caret/__tests__/unit/LexicalCaret.test.ts:2031test: Splits a ParagraphNode
`../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:32describe: traversals.md../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:34describe: Traversal Strategies../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:73describe: Adjacent Caret Traversals../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:74test: $iterSiblings../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:109test: root has no siblings../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:119test: root has paragraph children../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:144test: iteration does not include the origin../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:161describe: Depth First Caret Traversals../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:162describe: $iterCaretsDepthFirst../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:163test: via generator../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:214test: via CaretRange../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:249describe: $iterNodesDepthFirst../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:269test: includes only wholly included nodes../lexical/packages/lexical/src/caret/__tests__/unit/docs-traversals.test.ts:297test: full traversal
`../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:35describe: LexicalElementNode tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:100describe: exportJSON()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:101test: should return and object conforming to the expected schema../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:120test: serializes only the first TextNode style and format../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:163test: serializes the same way without a root element../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:181describe: getChildren()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:182test: no children../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:191test: some children../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:199describe: getAllTextNodes()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:200test: basic../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:209test: nested../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:240describe: getFirstChild()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:241test: basic../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:252test: empty../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:260describe: getLastChild()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:261test: basic../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:272test: empty../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:280describe: getTextContent()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:281test: basic../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:287test: empty../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:294test: nested../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:323describe: getTextContentSize()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:324test: basic../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:332test: child node getTextContentSize() can be overridden and is then reflected when calling the same method on parent node../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:344describe: splice../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:451it: Plain text: ${testCase.name}../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:594it: Nested elements: ${testCase.name}../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:657it: Running transforms for inserted nodes, their previous siblings and new siblings../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:704describe: getDOMSlot tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:755test: can create wrapper../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:789test: DOM selection uses getDOMSlot element for element selections../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:812describe: indexPath../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:813test: no path../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:817test: only child../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:823test: nested child../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.tsx:831test: nested child with siblings
`../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalGC.test.tsx`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalGC.test.tsx:25describe: LexicalGC tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalGC.test.tsx:27test: RootNode.clear() with a child and subchild../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalGC.test.tsx:41test: RootNode.clear() with a child and three subchildren../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalGC.test.tsx:59test: RootNode.clear() with a child and three subchildren, subchild ${i} removed first../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalGC.test.tsx:95test: RootNode.clear() with a complex tree, nodes ${removeKeys.toString()} removed first
`../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.ts:14describe: LexicalLineBreakNode tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.ts:16test: LineBreakNode.constructor../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.ts:27test: LineBreakNode.exportJSON() should return and object conforming to the expected schema../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.ts:44test: LineBreakNode.createDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.ts:55test: LineBreakNode.updateDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.ts:65test: LineBreakNode.$isLineBreakNode()
`../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:27describe: LexicalParagraphNode tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:29test: ParagraphNode.constructor../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:41test: ParagraphNode.exportJSON() should return and object conforming to the expected schema../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:64test: ParagraphNode.createDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:82test: ParagraphNode.updateDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:103test: ParagraphNode.insertNewAfter()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:128test: $createParagraphNode()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:141test: $isParagraphNode()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalParagraphNode.test.ts:151test: ParagraphNode.importDOM handles both CSS text-align and legacy align attribute
`../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:30describe: LexicalRootNode tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:61test: RootNode.constructor../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:71test: RootNode.exportJSON() should return and object conforming to the expected schema../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:92test: RootNode.clone()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:99test: RootNode.createDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:104test: RootNode.updateDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:109test: RootNode.isAttached()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:113test: RootNode.isRootNode()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:117test: Cached getTextContent with decorators../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:134test: RootNode.clear() to handle selection update../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:164test: RootNode is selected when its selected child is removed../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:194test: RootNode is not selected when all children are removed with no selection../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:216test: RootNode __cachedText incremental update #8096../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:239test: RootNode __cachedText../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:292test: RootNode __cachedText (empty paragraph)../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.ts:302test: RootNode __cachedText (inlines)
`../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx`
category: portable
family: clipboard-paste / browser-engine
target: .tmp/slate-v2/packages/slate/test/clipboard-contract.ts; .tmp/slate-v2/packages/slate-dom/test/clipboard-boundary.test.ts; .tmp/slate-v2/playwright/integration/examples/paste-html.test.ts; .tmp/slate-v2/playwright/stress/generated-editing.test.ts
../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:44describe: LexicalTabNode tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:56test: can paste plain text with tabs and newlines in plain text../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:70test: can paste plain text with tabs and newlines in rich text../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:85test: can paste HTML with tabs and new lines #4429../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:104test: can paste HTML with tabs and new lines (2)../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:122test: element indents when selection at the start of the block../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:140test: elements indent when selection spans across multiple blocks../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:175test: element tabs when selection is not at the start (1)../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:191test: element tabs when selection is not at the start (2)../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:210test: element tabs when selection is not at the start (3)../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:229test: elements tabs when selection is not at the start and overlaps another tab../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:252test: can type between two (leaf nodes) canInsertBeforeAfter false../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:266test: can be serialized and deserialized../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:291describe: TabNode at selection boundaries with normal TextNode sibling (#7602)../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx:298test: dynamic or multiline title
`../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx`
category: portable
family: portable editor behavior
target: .tmp/slate-v2/packages/slate/test; add focused browser proof only when behavior depends on DOM/runtime transport
../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:74describe: LexicalTextNode tests../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:133describe: exportJSON()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:134test: should return and object conforming to the expected schema../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:156describe: root.getTextContent()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:157test: writable nodes../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:185test: prepend node../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:205describe: setTextContent()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:206test: writable nodes../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:232test: getFormatFlags(${formatFlag})../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:248test: predicate for ${formatFlag}../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:260test: toggling for ${formatFlag}../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:284test: setting subscript clears superscript../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:297test: setting superscript clears subscript../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:310test: clearing subscript does not set superscript../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:323test: clearing superscript does not set subscript../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:336test: capitalization formats are mutually exclusive../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:362test: selectPrevious()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:384test: selectNext()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:409describe: select()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:454describe: splitText()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:455test: convert segmented node into plain text../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:499test: splitText moves composition key to last node../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:627test: with detached parent../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:639test: copies state to all nodes../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:662test: copies state to all nodes (segmented)../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:680describe: createDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:792describe: has parent node../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:813describe: updateDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:914describe: exportDOM()../lexical/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx:965test: mergeWithSibling
Editor Test Harvester Portabletext Test Index (`docs/editor-test-harvester/portabletext/test-index.md`)
Portable Text Portable Test Index
Source: ../portabletext
Generated: 2026-05-29
Indexed runnable portable/portable-mixed rows: 200
Line/name anchors: 1944
This index records every runnable portable and portable-mixed source file with extracted test names or feature/scenario names. It does not copy test bodies, fixtures, helpers, snapshots, or expected output blobs.
| # | Source | Category | Family | Anchor count | Extracted names |
|---|---|---|---|---|---|
| 1 | packages/editor/gherkin-tests/block-objects.test.ts |
portable | PT-H03 | 13 | packages/editor/gherkin-spec/block-objects.feature:2 Feature: Block Objectspackages/editor/gherkin-spec/block-objects.feature:8 Scenario: Pressing ArrowUp on a lonely imagepackages/editor/gherkin-spec/block-objects.feature:18 Scenario: Pressing ArrowDown on a lonely imagepackages/editor/gherkin-spec/block-objects.feature:28 Scenario: Pressing ArrowDown on image at the bottompackages/editor/gherkin-spec/block-objects.feature:39 Scenario: ArrowRight before an image selects itpackages/editor/gherkin-spec/block-objects.feature:50 Scenario: ArrowLeft after an image selects itpackages/editor/gherkin-spec/block-objects.feature:61 Scenario: Pressing Delete before an imagepackages/editor/gherkin-spec/block-objects.feature:77 Scenario: Pressing Delete in an empty paragraph before an imagepackages/editor/gherkin-spec/block-objects.feature:95 Scenario: Pressing Backspace after an imagepackages/editor/gherkin-spec/block-objects.feature:111 Scenario: Pressing Backspace in an empty paragraph after an imagepackages/editor/gherkin-spec/block-objects.feature:123 Scenario Outline: Deleting a lonely imagepackages/editor/gherkin-spec/block-objects.feature:135 Scenario Outline: Deleting an image with text abovepackages/editor/gherkin-spec/block-objects.feature:154 Scenario Outline: Deleting an image with text below |
| 2 | packages/editor/gherkin-tests/delete.test.ts |
portable | PT-H05 | 15 | packages/editor/gherkin-spec/delete.feature:1 Feature: Deletepackages/editor/gherkin-spec/delete.feature:6 Scenario Outline: Deleting expanded selectionpackages/editor/gherkin-spec/delete.feature:19 Scenario Outline: Deleting wordpackages/editor/gherkin-spec/delete.feature:35 Scenario Outline: Deleting code points in complex scriptspackages/editor/gherkin-spec/delete.feature:51 Scenario Outline: Deleting line backwardpackages/editor/gherkin-spec/delete.feature:66 Scenario: Deleting line backward at start of block merges blockspackages/editor/gherkin-spec/delete.feature:83 Scenario: Cutting selected textpackages/editor/gherkin-spec/delete.feature:92 Scenario: Cutting across blockspackages/editor/gherkin-spec/delete.feature:109 Scenario: Deleting word backward at block boundary merges blockspackages/editor/gherkin-spec/delete.feature:126 Scenario: Deleting word forward at block boundary merges blockspackages/editor/gherkin-spec/delete.feature:143 Scenario: Cutting with collapsed selection is a no-oppackages/editor/gherkin-spec/delete.feature:150 Scenario: Deleting line backward in empty blockpackages/editor/gherkin-spec/delete.feature:156 Scenario: Deleting line backward only affects current blockpackages/editor/gherkin-spec/delete.feature:177 Scenario Outline: Merging blocks preserves markspackages/editor/gherkin-spec/delete.feature:194 Scenario Outline: Merging blocks triggers span normalization |
| 3 | packages/editor/gherkin-tests/inline-objects.test.ts |
portable | PT-H03 | 7 | packages/editor/gherkin-spec/inline-objects.feature:2 Feature: Inline Objectspackages/editor/gherkin-spec/inline-objects.feature:8 Scenario: Writing after inserting an inline objectpackages/editor/gherkin-spec/inline-objects.feature:17 Scenario: Pressing Delete before an inline objectpackages/editor/gherkin-spec/inline-objects.feature:24 Scenario: Pressing Backspace after an inline objectpackages/editor/gherkin-spec/inline-objects.feature:30 Scenario: Adding a decorator across an inline objectpackages/editor/gherkin-spec/inline-objects.feature:36 Scenario: Adding an annotation across an inline objectpackages/editor/gherkin-spec/inline-objects.feature:45 Scenario: Removing an annotation across an inline block |
| 4 | packages/editor/gherkin-tests/insert.block.test.ts |
portable | PT-H04 | 25 | packages/editor/gherkin-spec/insert.block.feature:1 Feature: Insert Blockpackages/editor/gherkin-spec/insert.block.feature:6 Scenario Outline: Inserting block object on an empty editor without selecting itpackages/editor/gherkin-spec/insert.block.feature:17 Scenario Outline: Inserting block object on an empty editor and selecting itpackages/editor/gherkin-spec/insert.block.feature:32 Scenario Outline: Inserting block object on an empty text blockpackages/editor/gherkin-spec/insert.block.feature:52 Scenario Outline: Inserting block object on empty headingpackages/editor/gherkin-spec/insert.block.feature:63 Scenario Outline: Inserting block object on empty list itempackages/editor/gherkin-spec/insert.block.feature:74 Scenario Outline: Inserting and selecting block object on text selectionpackages/editor/gherkin-spec/insert.block.feature:102 Scenario Outline: Inserting block object on text selection without selecting itpackages/editor/gherkin-spec/insert.block.feature:122 Scenario Outline: Inserting and selecting block object on cross-block selectionpackages/editor/gherkin-spec/insert.block.feature:146 Scenario Outline: Inserting a block object on a cross-block selection without selecting itpackages/editor/gherkin-spec/insert.block.feature:162 Scenario Outline: Inserting text block on an empty editorpackages/editor/gherkin-spec/insert.block.feature:173 Scenario Outline: Inserting and selecting text block on an empty editorpackages/editor/gherkin-spec/insert.block.feature:191 Scenario Outline: Inserting and selecting text block on an empty selected editorpackages/editor/gherkin-spec/insert.block.feature:209 Scenario Outline: Inserting block object on block objectpackages/editor/gherkin-spec/insert.block.feature:233 Scenario Outline: Inserting and selecting block object on block objectpackages/editor/gherkin-spec/insert.block.feature:250 Scenario Outline: Inserting block object on block objectspackages/editor/gherkin-spec/insert.block.feature:272 Scenario Outline: Inserting block object on text blockpackages/editor/gherkin-spec/insert.block.feature:294 Scenario Outline: Inserting text block on block objectpackages/editor/gherkin-spec/insert.block.feature:306 Scenario Outline: Inserting text block on text blockpackages/editor/gherkin-spec/insert.block.feature:325 Scenario Outline: Inserting and selecting text block on text blockpackages/editor/gherkin-spec/insert.block.feature:363 Scenario Outline: Inserting text block on text selectionpackages/editor/gherkin-spec/insert.block.feature:392 Scenario Outline: Inserting text block on cross-block text selectionpackages/editor/gherkin-spec/insert.block.feature:424 Scenario Outline: Inserting inline object on block objectpackages/editor/gherkin-spec/insert.block.feature:435 Scenario Outline: Inserting block object on inline objectpackages/editor/gherkin-spec/insert.block.feature:446 Scenario Outline: Inserting text block on inline object |
| 5 | packages/editor/gherkin-tests/insert.blocks.test.ts |
portable | PT-H04 | 8 | packages/editor/gherkin-spec/insert.blocks.feature:1 Feature: Insert Blockspackages/editor/gherkin-spec/insert.blocks.feature:6 Scenario Outline: Inserting blocks on an empty editorpackages/editor/gherkin-spec/insert.blocks.feature:23 Scenario Outline: Inserting block objects an empty editorpackages/editor/gherkin-spec/insert.blocks.feature:33 Scenario Outline: Inserting blocks on a block objectpackages/editor/gherkin-spec/insert.blocks.feature:42 Scenario: Inserting text blocks on a block objectpackages/editor/gherkin-spec/insert.blocks.feature:52 Scenario Outline: Inserting blocks on a text blockpackages/editor/gherkin-spec/insert.blocks.feature:81 Scenario: Pasting text blocks between two text blockspackages/editor/gherkin-spec/insert.blocks.feature:96 Scenario Outline: Inserting text block with annotation |
| 6 | packages/editor/gherkin-tests/insert.break.test.ts |
portable | PT-H04 | 6 | packages/editor/gherkin-spec/insert.break.feature:1 Feature: Insert Breakpackages/editor/gherkin-spec/insert.break.feature:6 Scenario Outline: Breaking text blockpackages/editor/gherkin-spec/insert.break.feature:21 Scenario Outline: Breaking second text blockpackages/editor/gherkin-spec/insert.break.feature:43 Scenario: Breaking before inline objectpackages/editor/gherkin-spec/insert.break.feature:55 Scenario: Pressing Enter when selecting the entire contentpackages/editor/gherkin-spec/insert.break.feature:74 Scenario: Pressing Enter on a block object |
| 7 | packages/editor/gherkin-tests/insert.child.test.ts |
portable | PT-H04 | 6 | packages/editor/gherkin-spec/insert.child.feature:1 Feature: Insert Childpackages/editor/gherkin-spec/insert.child.feature:6 Scenario Outline: Inserting span on spanpackages/editor/gherkin-spec/insert.child.feature:23 Scenario: Inserting inline object in spanpackages/editor/gherkin-spec/insert.child.feature:35 Scenario: Inserting span on block objectpackages/editor/gherkin-spec/insert.child.feature:51 Scenario: Inserting span on block object without selectionpackages/editor/gherkin-spec/insert.child.feature:67 Scenario: Inserting span on text block without selection |
| 8 | packages/editor/gherkin-tests/insert.text.test.ts |
portable | PT-H04 | 2 | packages/editor/gherkin-spec/insert.text.feature:1 Feature: Insert textpackages/editor/gherkin-spec/insert.text.feature:6 Scenario Outline: Inserting text on expanded selection |
| 9 | packages/editor/gherkin-tests/paste.test.ts |
portable-mixed | PT-H06 | 4 | packages/editor/gherkin-spec/paste.feature:1 Feature: Pastepackages/editor/gherkin-spec/paste.feature:6 Scenario Outline: Pasting text block into a text blockpackages/editor/gherkin-spec/paste.feature:32 Scenario: Pasting text/plain into a text blockpackages/editor/gherkin-spec/paste.feature:40 Scenario: Pasting text/html into a text block |
| 10 | packages/editor/gherkin-tests/removing-blocks.test.ts |
portable | PT-H05 | 3 | packages/editor/gherkin-spec/removing-blocks.feature:1 Feature: Removing Blockspackages/editor/gherkin-spec/removing-blocks.feature:7 Scenario: Pressing Delete in empty block with text belowpackages/editor/gherkin-spec/removing-blocks.feature:28 Scenario: Pressing Backspace in empty block with text below |
| 11 | packages/editor/gherkin-tests/selection-adjustment.test.ts |
portable | PT-H01 | 4 | packages/editor/gherkin-spec/selection-adjustment.feature:1 Feature: Selection Adjustmentpackages/editor/gherkin-spec/selection-adjustment.feature:7 Scenario: Selection is kept if another editor inserts a line abovepackages/editor/gherkin-spec/selection-adjustment.feature:16 Scenario: Selection is kept if another editor deletes the line abovepackages/editor/gherkin-spec/selection-adjustment.feature:25 Scenario: Selection is kept if another editor backspace-deletes empty lines above |
| 12 | packages/editor/gherkin-tests/selection.test.ts |
portable | PT-H01 | 5 | packages/editor/gherkin-spec/selection.feature:1 Feature: Selectionpackages/editor/gherkin-spec/selection.feature:6 Scenario: Expanding collapsed selection backwards from empty linepackages/editor/gherkin-spec/selection.feature:14 Scenario: Expanding selection backwards, then forwardspackages/editor/gherkin-spec/selection.feature:30 Scenario: Reducing hanging selectionpackages/editor/gherkin-spec/selection.feature:46 Scenario: Reducing selection hanging onto empty line |
| 13 | packages/editor/gherkin-tests/splitting-blocks.test.ts |
portable | PT-H04 | 19 | packages/editor/gherkin-spec/splitting-blocks.feature:1 Feature: Splitting Blockspackages/editor/gherkin-spec/splitting-blocks.feature:7 Scenario: Splitting block at the beginningpackages/editor/gherkin-spec/splitting-blocks.feature:17 Scenario: Splitting block in the middlepackages/editor/gherkin-spec/splitting-blocks.feature:31 Scenario: Splitting block at the endpackages/editor/gherkin-spec/splitting-blocks.feature:45 Scenario: Splitting empty block creates a new block belowpackages/editor/gherkin-spec/splitting-blocks.feature:57 Scenario: Soft-splitting block at the beginningpackages/editor/gherkin-spec/splitting-blocks.feature:67 Scenario: Soft-splitting block in the middlepackages/editor/gherkin-spec/splitting-blocks.feature:77 Scenario: Soft-splitting block at the endpackages/editor/gherkin-spec/splitting-blocks.feature:87 Scenario: Splitting styled block at t |