Fix some causes of memorr leaks#2874
Merged
Merged
Conversation
Ensure dynamic-position listeners and detached overlays are fully cleaned up when components disconnect or unregister. This also tracks attached scroll targets so teardown can reliably remove the exact listeners that were added.
lucafoscili
approved these changes
Jun 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request focuses on improving the cleanup and lifecycle management of dynamically positioned UI elements in several Ketchup components. The main changes ensure that all event listeners and DOM references are properly removed when components are disconnected or elements are no longer needed, preventing memory leaks and orphaned DOM nodes. The changes also introduce more reliable tracking and removal of scroll event listeners for dynamic positioning.
Dynamic Positioning and Cleanup Improvements:
dynamicPosition.stop()anddynamicPosition.unregister()for dynamically positioned elements (such as cards, menus, and panels) inkup-cardandkup-data-tableduring component teardown to ensure proper cleanup. [1] [2] [3] [4] [5]KupDynamicPosition.unregister()method to remove detached elements from the global container, sever object references (likeoriginalPathandanchor), and clear thekupDynamicPositionproperty, aiding garbage collection and preventing orphaned DOM nodes.scrollListenerTargetsproperty, ensuring reliable and leak-free removal during cleanup. [1] [2]Codebase Consistency:
KupDynamicPositionElementtype where needed, ensuring type safety and consistency.Interactable Cleanup:
kup-box, extended the cleanup of interactable elements during disconnect to include touch interactions, not just drag and drop.