fix(ui): unify bottom-right notifications and improve dialog interactions

- Move operation feedback into a shared floating stack to prevent layout shifts
- Allow identical errors to reappear after dismissal
- Support keyboard navigation, scrolling, and focus restoration in dialogs
- Add notification interaction regression tests
- Remove code comments throughout the project
This commit is contained in:
lzt404 committed 2026-09-15 02:39:03 +08:00
1 parent aaa6806e26
commit 18a9bfbaa9
60 files changed
+614 -402

No files matched your search

+53 -10
View File
@@ -4477,16 +4477,6 @@ textarea:focus-visible {
color: var(--theme-2f6b3f);
}
.action-feedback.inline-notice.api-access-page-notice {
position: fixed;
right: 24px;
bottom: 24px;
z-index: 80;
width: min(360px, calc(100vw - 32px));
margin: 0;
box-shadow: 0 14px 34px rgba(45, 42, 38, 0.18);
}
.real-provider-workbench {
grid-template-columns: 240px minmax(0, 1fr);
}
@@ -7450,6 +7440,16 @@ textarea:focus-visible {
place-items: center;
padding: 20px;
border-radius: inherit;
isolation: isolate;
}
/* Blur the backdrop without making it a containing block for fixed notices. */
.codex-catalog-confirm::before {
content: '';
position: absolute;
inset: 0;
z-index: -1;
border-radius: inherit;
background: rgba(45, 42, 38, 0.35);
backdrop-filter: blur(2px);
}
@@ -14039,3 +14039,46 @@ body.table-col-resizing * {
.harness-context-window > label > span { display: flex; flex-wrap: wrap; gap: 6px; }
.harness-context-source { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.harness-context-source > button { padding: 4px 8px; font-size: 12px; }
/* Operation feedback is shared across pages and dialogs, outside their layout. */
.app-notice-stack {
position: fixed;
right: 24px;
bottom: var(--notice-bottom, 24px);
z-index: 10000;
display: flex;
flex-direction: column;
gap: 10px;
width: min(480px, calc(100vw - 48px));
max-height: calc(100vh - var(--notice-bottom, 24px) - 24px);
max-height: calc(100dvh - var(--notice-bottom, 24px) - 24px);
overflow-y: auto;
overscroll-behavior: contain;
pointer-events: none;
}
.app-notice-entry {
flex: none;
min-width: 0;
pointer-events: auto;
}
.app-notice-entry .action-feedback.inline-notice {
margin: 0;
box-shadow: 0 4px 16px rgba(45, 42, 38, 0.18);
}
/* Persistent agent state uses reserved rows; transient results float above it. */
.agent-shared-feedback {
grid-template-rows: 20px 36px;
}
.agent-shared-feedback > .agent-write-state,
.agent-shared-feedback > small {
min-height: 0;
overflow: auto;
}
.agent-model-status {
display: block;
height: 20px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}