fix: settings modal dismiss — add close button, fix backdrop click
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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">×</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>
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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"
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user