dnd-kit measures the drag overlay's first child and uses that rect for
collision detection. A preview smaller than the row it represents shifts
the collision centre and, with closestCenter, the resulting drop position.
The preview now fills the overlay wrapper, which dnd-kit sizes from the
dragged element, keeping drop targeting identical to before the overlay.
Also drops the redundant drag cancel wrapper.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TEnUVARPnSqXijiz8KiLiE
The rundown list is virtualised, so dragging an entry far enough for its
row to leave the render window unmounts the draggable. dnd-kit then loses
both the rect used for collision detection and the data attached to the
active element: the dragged element stopped being rendered and the drop
had no effect.
- render a drag overlay (portaled to the body) with a lightweight preview
of the dragged entry, which keeps the drag visible and gives dnd-kit a
stable rect for collision detection
- keep a copy of the active element data from drag start, and use it on
drag end when dnd-kit falls back to empty data
- sortable entries stay in place as a dimmed placeholder while dragging,
since the overlay now represents the moving element
- clear the drag state on drag cancel
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TEnUVARPnSqXijiz8KiLiE
Search every text field with optional filters, keep result selection stable, and expose clearer match context and counts. Cover query parsing, matching, mixed-entry indexing, and the reveal flow.
* fix: issue where a count-to-end would lead to incorrect expected times
* fix: include add time in overtime when countToEnd
* fix: ui and server use same calculation for expected end