From 61565139a8a6e27b78a46941ae41ea9e3089c82a Mon Sep 17 00:00:00 2001 From: shrimbly Date: Wed, 11 Mar 2026 08:49:54 +1300 Subject: [PATCH] fix: add Escape and click-outside dismiss for presets popup The easing presets popup could only be closed by clicking the toggle button again. Now it also closes on Escape key or clicking outside the popup area. Co-Authored-By: Claude Opus 4.6 --- src/components/nodes/ControlPanel.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/components/nodes/ControlPanel.tsx b/src/components/nodes/ControlPanel.tsx index 8810f0d6..95e8be98 100644 --- a/src/components/nodes/ControlPanel.tsx +++ b/src/components/nodes/ControlPanel.tsx @@ -885,6 +885,25 @@ function EaseCurveControls({ node }: { node: Node }) { const [showPresets, setShowPresets] = useState(false); const presetsButtonRef = useRef(null); + useEffect(() => { + if (!showPresets) return; + + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === "Escape") setShowPresets(false); + }; + const handleClickOutside = (e: MouseEvent) => { + if (presetsButtonRef.current?.contains(e.target as HTMLElement)) return; + setShowPresets(false); + }; + + window.addEventListener("keydown", handleKeyDown); + document.addEventListener("mousedown", handleClickOutside); + return () => { + window.removeEventListener("keydown", handleKeyDown); + document.removeEventListener("mousedown", handleClickOutside); + }; + }, [showPresets]); + const inheritedEdge = useMemo(() => { return edges.find((e) => e.target === node.id && e.targetHandle === "easeCurve") || null; }, [edges, node.id]);