Skip to content

Commit 01d4929

Browse files
committed
Fix potential listener leak in ResizablePanel on destroy
1 parent d355a8f commit 01d4929

1 file changed

Lines changed: 17 additions & 3 deletions

File tree

src/lib/components/ResizablePanel.svelte

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<script lang="ts">
2+
import { onDestroy } from 'svelte';
23
import { fly } from 'svelte/transition';
34
import { cubicOut } from 'svelte/easing';
45
import { untrack } from 'svelte';
@@ -115,6 +116,9 @@
115116
}
116117
});
117118
119+
// Track active resize cleanup for component destroy
120+
let activeCleanup: (() => void) | null = null;
121+
118122
function startResize(edge: 'left' | 'right' | 'top' | 'bottom') {
119123
return (event: MouseEvent) => {
120124
event.preventDefault();
@@ -146,19 +150,29 @@
146150
}
147151
}
148152
149-
function onMouseUp() {
150-
isResizing = false;
151-
resizeEdge = null;
153+
function cleanup() {
152154
document.removeEventListener('mousemove', onMouseMove);
153155
document.removeEventListener('mouseup', onMouseUp);
154156
document.body.classList.remove('resizing-ew', 'resizing-ns');
157+
activeCleanup = null;
155158
}
156159
160+
function onMouseUp() {
161+
isResizing = false;
162+
resizeEdge = null;
163+
cleanup();
164+
}
165+
166+
activeCleanup = cleanup;
157167
document.addEventListener('mousemove', onMouseMove);
158168
document.addEventListener('mouseup', onMouseUp);
159169
document.body.classList.add((edge === 'left' || edge === 'right') ? 'resizing-ew' : 'resizing-ns');
160170
};
161171
}
172+
173+
onDestroy(() => {
174+
activeCleanup?.();
175+
});
162176
</script>
163177

164178
<!-- svelte-ignore a11y_no_static_element_interactions, a11y_no_noninteractive_element_interactions -->

0 commit comments

Comments
 (0)