From 6c326b18ca2a66191c2b72083e379c8f0fca4bef Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Sun, 14 Dec 2025 16:42:31 +0000 Subject: [PATCH] Close floating drawers on escape key --- .../components/instance/instance-shell2.tsx | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/ui/src/components/instance/instance-shell2.tsx b/packages/ui/src/components/instance/instance-shell2.tsx index e7d5a0b3..a12eb257 100644 --- a/packages/ui/src/components/instance/instance-shell2.tsx +++ b/packages/ui/src/components/instance/instance-shell2.tsx @@ -401,6 +401,35 @@ const InstanceShell2: Component = (props) => { } } + const closeFloatingDrawersIfAny = () => { + let handled = false + if (!leftPinned() && leftOpen()) { + setLeftOpen(false) + blurIfInside(leftDrawerContentEl()) + focusTarget(leftToggleButtonEl()) + handled = true + } + if (!rightPinned() && rightOpen()) { + setRightOpen(false) + blurIfInside(rightDrawerContentEl()) + focusTarget(rightToggleButtonEl()) + handled = true + } + return handled + } + + onMount(() => { + if (typeof window === "undefined") return + const handleEscape = (event: KeyboardEvent) => { + if (event.key !== "Escape") return + if (!closeFloatingDrawersIfAny()) return + event.preventDefault() + event.stopPropagation() + } + window.addEventListener("keydown", handleEscape, true) + onCleanup(() => window.removeEventListener("keydown", handleEscape, true)) + }) + const handleSessionSelect = (sessionId: string) => { setActiveSession(props.instance.id, sessionId) }