Skip to content

Commit 1b1e712

Browse files
authored
fix(tables): prevent resize overlay artifacts during drag (#2479)
* fix(tables): prevent resize overlay artifacts during drag * fix(tables): prevent stuck resize drag when pointer leaves window
1 parent bc7cba3 commit 1b1e712

5 files changed

Lines changed: 523 additions & 48 deletions

File tree

packages/super-editor/src/components/SuperEditor.vue

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ const openPopover = (component, props, position) => {
302302
const tableResizeState = reactive({
303303
visible: false,
304304
tableElement: null,
305+
dragging: false,
305306
});
306307
307308
/**
@@ -553,6 +554,9 @@ const isNearRowBoundary = (event, tableElement) => {
553554
* @returns {void}
554555
*/
555556
const updateTableResizeOverlay = (event) => {
557+
// Don't change overlay visibility while a resize drag is active
558+
if (tableResizeState.dragging) return;
559+
556560
// Throttle: skip if called too frequently
557561
const now = Date.now();
558562
if (now - lastUpdateTableResizeTimestamp < TABLE_RESIZE_THROTTLE_MS) {
@@ -594,6 +598,17 @@ const updateTableResizeOverlay = (event) => {
594598
* Hide table resize overlay (on mouse leave)
595599
*/
596600
const hideTableResizeOverlay = () => {
601+
if (tableResizeState.dragging) return;
602+
tableResizeState.visible = false;
603+
tableResizeState.tableElement = null;
604+
};
605+
606+
const onTableResizeStart = () => {
607+
tableResizeState.dragging = true;
608+
};
609+
610+
const onTableResizeEnd = () => {
611+
tableResizeState.dragging = false;
597612
tableResizeState.visible = false;
598613
tableResizeState.tableElement = null;
599614
};
@@ -735,7 +750,12 @@ const handleOverlayUpdates = (event) => {
735750
} else {
736751
updateTableResizeOverlay(event);
737752
}
738-
updateImageResizeOverlay(event);
753+
// Don't evaluate image overlay during an active table resize drag —
754+
// without the oversized table overlay, pointer events can reach images
755+
// and spuriously activate the image resize overlay mid-drag.
756+
if (!tableResizeState.dragging) {
757+
updateImageResizeOverlay(event);
758+
}
739759
};
740760
741761
/**
@@ -1207,6 +1227,8 @@ onBeforeUnmount(() => {
12071227
:editor="activeEditor"
12081228
:visible="tableResizeState.visible"
12091229
:tableElement="tableResizeState.tableElement"
1230+
@resize-start="onTableResizeStart"
1231+
@resize-end="onTableResizeEnd"
12101232
/>
12111233
<!-- Image resize overlay for interactive image resizing -->
12121234
<ImageResizeOverlay

0 commit comments

Comments
 (0)