feat(queue): drag rows outside queue to remove; trash ghost outside bounds (#420)

* feat(queue): drag rows outside queue to remove; trash ghost outside bounds

- Document-level psy-drop when cursor leaves queue rect (main + mini)
- DragDropContext: drop coordinates on psy-detail; optional wrapRef on OverlayScrollArea
- Trash icon on drag ghost only outside registered queue hit-test regions

* docs(changelog): add queue drag-out removal for PR #420
This commit is contained in:
cucadmuh
2026-05-02 02:36:35 +03:00
committed by GitHub
parent fca084acf9
commit 274ac5b3b4
5 changed files with 174 additions and 11 deletions
+9 -1
View File
@@ -20,6 +20,8 @@ export type OverlayScrollAreaProps = {
viewportScrollBehaviorAuto?: boolean;
/** Ref to the scrollable element (querySelector, scrollIntoView, etc.). */
viewportRef?: React.Ref<HTMLDivElement>;
/** Ref to the outer wrapper (incl. overlay scrollbar rail). */
wrapRef?: React.Ref<HTMLDivElement>;
/** Optional id on the viewport (e.g. main app scroll for route pages). */
viewportId?: string;
/** Optional wheel handler on the scrollable viewport. */
@@ -49,6 +51,7 @@ export default function OverlayScrollArea({
railInset = 'none',
viewportScrollBehaviorAuto = false,
viewportRef: viewportRefProp,
wrapRef: wrapRefProp,
viewportId,
viewportOnWheel,
viewportOnTouchMove,
@@ -109,6 +112,11 @@ export default function OverlayScrollArea({
assignRef(viewportRefProp, el);
};
const setWrapNode = (el: HTMLDivElement | null) => {
wrapRef.current = el;
assignRef(wrapRefProp, el);
};
const rootClass = [
'overlay-scroll',
RAIL_INSET_CLASS[railInset],
@@ -121,7 +129,7 @@ export default function OverlayScrollArea({
const viewportClass = ['overlay-scroll__viewport', viewportClassName].filter(Boolean).join(' ');
return (
<div ref={wrapRef} className={rootClass} onMouseMove={onMouseMove}>
<div ref={setWrapNode} className={rootClass} onMouseMove={onMouseMove}>
<div
id={viewportId}
ref={setViewportNode}