fix: settings modal dismiss — add close button, fix backdrop click

This commit is contained in:
Brian Krabach
2026-03-30 03:27:47 -07:00
parent 6f598524a9
commit 424a4f5377
4 changed files with 56 additions and 1 deletions
+1
View File
@@ -1444,6 +1444,7 @@ function bindStaticEventListeners() {
// Settings dialog bindings // Settings dialog bindings
on($('settings-btn'), 'click', openSettings); on($('settings-btn'), 'click', openSettings);
on($('settings-btn-expanded'), 'click', openSettings); on($('settings-btn-expanded'), 'click', openSettings);
on($('settings-close-btn'), 'click', closeSettings);
on($('settings-backdrop'), 'click', closeSettings); on($('settings-backdrop'), 'click', closeSettings);
const settingsDialog = $('settings-dialog'); const settingsDialog = $('settings-dialog');
if (settingsDialog) settingsDialog.addEventListener('cancel', closeSettings); if (settingsDialog) settingsDialog.addEventListener('cancel', closeSettings);
+4
View File
@@ -78,6 +78,10 @@
<!-- ── Settings ─────────────────────────────────────────────────────────────────────── --> <!-- ── Settings ─────────────────────────────────────────────────────────────────────── -->
<div id="settings-backdrop" class="settings-backdrop hidden"></div> <div id="settings-backdrop" class="settings-backdrop hidden"></div>
<dialog id="settings-dialog" class="settings-dialog"> <dialog id="settings-dialog" class="settings-dialog">
<div class="settings-dialog-header">
<h2 class="settings-dialog-title">Settings</h2>
<button id="settings-close-btn" class="settings-close-btn" aria-label="Close settings">&times;</button>
</div>
<div class="settings-layout"> <div class="settings-layout">
<nav class="settings-tabs"> <nav class="settings-tabs">
<button class="settings-tab settings-tab--active" data-tab="display">Display</button> <button class="settings-tab settings-tab--active" data-tab="display">Display</button>
+37 -1
View File
@@ -934,15 +934,51 @@ body {
padding: 0; padding: 0;
overflow: hidden; overflow: hidden;
margin: 0; margin: 0;
display: flex;
flex-direction: column;
} }
.settings-dialog::backdrop { .settings-dialog::backdrop {
background: transparent; background: transparent;
pointer-events: none; /* let clicks fall through to #settings-backdrop */
}
.settings-dialog-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 16px;
border-bottom: 1px solid var(--border);
flex-shrink: 0;
}
.settings-dialog-title {
margin: 0;
font-size: 14px;
font-weight: 600;
color: var(--text);
}
.settings-close-btn {
background: none;
border: none;
color: var(--text-muted);
font-size: 20px;
cursor: pointer;
padding: 2px 6px;
border-radius: 4px;
line-height: 1;
}
.settings-close-btn:hover {
color: var(--text);
background: var(--bg-surface);
} }
.settings-layout { .settings-layout {
display: flex; display: flex;
height: 100%; flex: 1;
min-height: 0;
} }
.settings-tabs { .settings-tabs {
+14
View File
@@ -1048,3 +1048,17 @@ def test_html_new_session_tab_controls() -> None:
soup = _SOUP soup = _SOUP
for id_ in ("setting-template", "setting-template-reset"): for id_ in ("setting-template", "setting-template-reset"):
assert soup.find(id=id_), f"Missing element with id='{id_}'" assert soup.find(id=id_), f"Missing element with id='{id_}'"
def test_html_settings_close_btn_exists() -> None:
"""settings-dialog must contain a #settings-close-btn button to dismiss the modal."""
soup = _SOUP
close_btn = soup.find(id="settings-close-btn")
assert close_btn is not None, "Missing #settings-close-btn inside settings dialog"
# Must be inside the settings dialog
dialog = soup.find(id="settings-dialog")
assert dialog is not None, "Missing #settings-dialog"
# Verify close button is a descendant of the dialog
assert dialog.find(id="settings-close-btn") is not None, (
"#settings-close-btn must be a descendant of #settings-dialog"
)