The dnd model had no home: the plugin README carries the recipe, and
Rendering and Containers carry fragments. The page states the ownership
story, the editor owns event translation, move semantics, destination
fitting, self-drop cancellation, and the drag ghost; registrations own
draggable markup; `@portabletext/plugin-dnd` owns optional indicator
presentation, and unpacks it: the seven `drag.*` events and their
payloads, split versus snap versus no-op with the mixed-fit outcome
stated, internal versus external drags (dragging out writes the same
formats copying does), draggable markup for block objects and
text-block drag handles, and a `dragover` observer that forwards the
event it handles. Sidebar order 5, after Clipboard; one cross-link from
Rendering's drop-indicators bullet.
The dnd model had no home: the plugin README carries the mounting recipe, and the Rendering and Containers pages carry fragments. This page states the ownership story and unpacks it: the editor owns event translation, move semantics, destination fitting, self-drop cancellation, and the drag ghost; registrations own draggable markup;
@portabletext/plugin-dndowns optional indicator presentation.Content is claim-verified against source: the seven
drag.*events with their real public payloads (dragstartpromises onlyposition.selection;originEventis a reduced object, not the browserDragEvent), the three outcomes of an entire-block internal drop (split, snap, no-op) with the mixed-fit result and its discarded-blocks consequence stated, drag handles on text blocks, and that dragging out of the editor writes the same clipboard formats copying does. Thedragoverobserver example forwards the event it handles, because a behavior that doesn't forward kills the drag; the same ownership ondrag.dropis the documented way to cancel a drop.Sits at sidebar order 5, after Clipboard, whose structure it mirrors. Part of the v8 docs arc alongside the migration guide (#3146).