From 1bb4f1bc33fcc229fdae5920579b0e6898967d35 Mon Sep 17 00:00:00 2001 From: Mansour Kheffache Date: Wed, 9 Sep 2026 21:03:50 +0200 Subject: [PATCH] fix(web): keep dialog controls clickable over desktop titlebars Exclude shared dialog popups from Electron window dragging. Tall theme search results place the close button over the titlebar drag region, which intercepted its center while leaving the bottom edge clickable. Verified native Electron center clicks before and after, the full browser theme flow, all 4,453 web tests, web typecheck, and targeted lint/format checks. Standards and spec reviews found no issues. Implemented with GPT-6-Astra in Codex. --- apps/web/src/components/ui/dialog-styles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/components/ui/dialog-styles.ts b/apps/web/src/components/ui/dialog-styles.ts index 15e9e8880742..b35cb37782a2 100644 --- a/apps/web/src/components/ui/dialog-styles.ts +++ b/apps/web/src/components/ui/dialog-styles.ts @@ -2,7 +2,7 @@ const DIALOG_BACKDROP_CLASS = "dialog-backdrop fixed inset-0 z-50 transition-all duration-200 data-ending-style:opacity-0 data-starting-style:opacity-0"; const DIALOG_POPUP_CLASS = - "dialog-glass -translate-y-[calc(1.25rem*var(--nested-dialogs))] relative flex min-h-0 w-full min-w-0 scale-[calc(1-0.1*var(--nested-dialogs))] flex-col rounded-2xl border opacity-[calc(1-0.1*var(--nested-dialogs))] outline-none transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform data-nested:data-ending-style:translate-y-8 data-nested:data-starting-style:translate-y-8 data-nested-dialog-open:origin-top data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0"; + "dialog-glass [-webkit-app-region:no-drag] -translate-y-[calc(1.25rem*var(--nested-dialogs))] relative flex min-h-0 w-full min-w-0 scale-[calc(1-0.1*var(--nested-dialogs))] flex-col rounded-2xl border opacity-[calc(1-0.1*var(--nested-dialogs))] outline-none transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform data-nested:data-ending-style:translate-y-8 data-nested:data-starting-style:translate-y-8 data-nested-dialog-open:origin-top data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0"; const DIALOG_MOBILE_SHEET_CLASS = "max-sm:max-w-none max-sm:rounded-none max-sm:border-x-0 max-sm:border-t max-sm:border-b-0 max-sm:opacity-[calc(1-min(var(--nested-dialogs),1))] max-sm:data-ending-style:translate-y-4 max-sm:data-starting-style:translate-y-4";