From e4d65d03511ce5d0f6a3a71852b1a16309ce942b Mon Sep 17 00:00:00 2001 From: G30 <50341825+silentoplayz@users.noreply.github.com> Date: Wed, 9 Sep 2026 12:11:38 -0400 Subject: [PATCH] fix: close modal shortcut closes only the top modal (#29830) --- src/lib/components/common/ConfirmDialog.svelte | 9 +++++++-- src/lib/components/common/Drawer.svelte | 9 ++++++++- src/lib/components/common/ImagePreview.svelte | 7 ++++++- src/lib/components/common/Modal.svelte | 9 ++++++++- src/routes/(app)/+layout.svelte | 4 ---- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/lib/components/common/ConfirmDialog.svelte b/src/lib/components/common/ConfirmDialog.svelte index 8a336aa441..c1d2a5e0da 100644 --- a/src/lib/components/common/ConfirmDialog.svelte +++ b/src/lib/components/common/ConfirmDialog.svelte @@ -3,6 +3,8 @@ import { onMount, getContext, createEventDispatcher, onDestroy, tick } from 'svelte'; import * as FocusTrap from 'focus-trap'; + import { settings } from '$lib/stores'; + import { matchKeybinding, Shortcut } from '$lib/shortcuts'; const i18n = getContext('i18n'); const dispatch = createEventDispatcher(); @@ -45,7 +47,10 @@ }; const handleKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape') { + if ( + event.key === 'Escape' || + ($settings?.keyboardShortcuts !== false && matchKeybinding(event) === Shortcut.CLOSE_MODAL) + ) { cancelHandler(); } @@ -113,7 +118,7 @@
{ cancelHandler(); diff --git a/src/lib/components/common/Drawer.svelte b/src/lib/components/common/Drawer.svelte index 191dd31c83..3f782af2e1 100644 --- a/src/lib/components/common/Drawer.svelte +++ b/src/lib/components/common/Drawer.svelte @@ -2,6 +2,8 @@ import { onDestroy, onMount } from 'svelte'; import { flyAndScale } from '$lib/utils/transitions'; import { fade, fly, slide } from 'svelte/transition'; + import { settings } from '$lib/stores'; + import { matchKeybinding, Shortcut } from '$lib/shortcuts'; export let show = false; export let className = ''; @@ -12,7 +14,12 @@ let mounted = false; const handleKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape' && isTopModal()) { + if ( + (event.key === 'Escape' || + ($settings?.keyboardShortcuts !== false && + matchKeybinding(event) === Shortcut.CLOSE_MODAL)) && + isTopModal() + ) { console.log('Escape'); show = false; } diff --git a/src/lib/components/common/ImagePreview.svelte b/src/lib/components/common/ImagePreview.svelte index 97ddd2ea6d..49ac722044 100644 --- a/src/lib/components/common/ImagePreview.svelte +++ b/src/lib/components/common/ImagePreview.svelte @@ -6,6 +6,8 @@ const { saveAs } = fileSaver; import { WEBUI_BASE_URL } from '$lib/constants'; + import { settings } from '$lib/stores'; + import { matchKeybinding, Shortcut } from '$lib/shortcuts'; import PanzoomContainer from '$lib/components/common/PanzoomContainer.svelte'; import XMark from '$lib/components/icons/XMark.svelte'; @@ -18,7 +20,10 @@ let previewElement = null; const handleKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape') { + if ( + event.key === 'Escape' || + ($settings?.keyboardShortcuts !== false && matchKeybinding(event) === Shortcut.CLOSE_MODAL) + ) { console.log('Escape'); show = false; } diff --git a/src/lib/components/common/Modal.svelte b/src/lib/components/common/Modal.svelte index 9d6afc534b..8e031a5bce 100644 --- a/src/lib/components/common/Modal.svelte +++ b/src/lib/components/common/Modal.svelte @@ -4,6 +4,8 @@ import { flyAndScale } from '$lib/utils/transitions'; import * as FocusTrap from 'focus-trap'; + import { settings } from '$lib/stores'; + import { matchKeybinding, Shortcut } from '$lib/shortcuts'; export let show = true; export let size = 'md'; export let containerClassName = 'p-3'; @@ -40,7 +42,12 @@ }; const handleKeyDown = (event: KeyboardEvent) => { - if (event.key === 'Escape' && isTopModal()) { + if ( + (event.key === 'Escape' || + ($settings?.keyboardShortcuts !== false && + matchKeybinding(event) === Shortcut.CLOSE_MODAL)) && + isTopModal() + ) { console.log('Escape'); show = false; } diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 0c96091268..7f8906c2d0 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -328,10 +328,6 @@ console.log('Shortcut triggered: SHOW_SHORTCUTS'); event.preventDefault(); showSettings.set('shortcuts'); - } else if (shortcut === Shortcut.CLOSE_MODAL) { - console.log('Shortcut triggered: CLOSE_MODAL'); - event.preventDefault(); - showSettings.set(false); } else if (shortcut === Shortcut.OPEN_MODEL_SELECTOR) { console.log('Shortcut triggered: OPEN_MODEL_SELECTOR'); event.preventDefault();