Skip to content

Commit 1623088

Browse files
authored
Merge pull request #1375 from keyboardstaff/chat-nav-buttons
feat(ui): reposition chat nav buttons as floating overlay in bottom-right of chat area
2 parents eef6d6d + 1539424 commit 1623088

3 files changed

Lines changed: 61 additions & 20 deletions

File tree

webui/components/chat/input/progress.html

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,6 @@ <h4 id="progress-bar-stop-speech" x-data x-cloak x-show="$store.speech.isSpeakin
1818
<span class="icon material-symbols-outlined">volume_off</span>
1919
</span>
2020
</h4>
21-
<div id="chat-nav-buttons" aria-label="Chat navigation">
22-
<button class="btn-icon-action" title="Scroll to top" x-on:click="$store.chatNavigation.scrollToTop()">
23-
<span class="material-symbols-outlined">vertical_align_top</span>
24-
</button>
25-
<button class="btn-icon-action" title="Previous user message" x-on:click="$store.chatNavigation.scrollToPrevUserMessage()">
26-
<span class="material-symbols-outlined">keyboard_arrow_up</span>
27-
</button>
28-
<button class="btn-icon-action" title="Next user message" x-on:click="$store.chatNavigation.scrollToNextUserMessage()">
29-
<span class="material-symbols-outlined">keyboard_arrow_down</span>
30-
</button>
31-
<button class="btn-icon-action" title="Scroll to bottom" x-on:click="$store.chatNavigation.scrollToBottom()">
32-
<span class="material-symbols-outlined">vertical_align_bottom</span>
33-
</button>
34-
</div>
3521
<x-extension id="chat-nav-after"></x-extension>
3622
</div>
3723
<x-extension id="chat-input-progress-end"></x-extension>
@@ -44,11 +30,6 @@ <h4 id="progress-bar-stop-speech" x-data x-cloak x-show="$store.speech.isSpeakin
4430
#progress-bar-box h4 { margin: 0; }
4531
#progress-bar-right { display: flex; align-items: center; gap: var(--spacing-sm); flex-shrink: 0; margin-left: auto; margin-right: calc(5.5rem + var(--spacing-xs)); }
4632
#progress-bar-right > x-extension { display: contents; }
47-
#chat-nav-buttons { display: flex; align-items: center; gap: 2px; opacity: 0.85; }
48-
#chat-nav-buttons .btn-icon-action { padding: var(--spacing-xs); }
49-
#chat-nav-buttons .btn-icon-action {
50-
border: none !important;
51-
}
5233
.shiny-text { background: linear-gradient(to right, var(--color-primary-dark) 20%, var(--color-text) 40%, var(--color-text) 60%, var(--color-primary-dark) 60%); background-size: 200% auto; color: transparent; -webkit-background-clip: text; background-clip: text; animation: shine 1s linear infinite; }
5334
@keyframes shine { to { background-position: -200% center; } }
5435
</style>

webui/index.css

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,48 @@ img {
415415
transition: margin-left var(--transition-speed) ease-in-out;
416416
}
417417

418+
/* Chat area wrapper – contains chat-history + floating nav buttons */
419+
#chat-area-wrapper {
420+
position: relative;
421+
display: flex;
422+
flex-direction: column;
423+
flex-grow: 1;
424+
min-height: 0;
425+
}
426+
427+
/* Chat Navigation Buttons – vertical, floating bottom-right of chat area */
428+
#chat-nav-buttons {
429+
position: absolute;
430+
right: var(--spacing-md);
431+
bottom: var(--spacing-md);
432+
display: flex;
433+
flex-direction: column;
434+
align-items: center;
435+
gap: 2px;
436+
z-index: 100;
437+
opacity: 0;
438+
transition: opacity 0.2s ease;
439+
pointer-events: none;
440+
}
441+
#chat-area-wrapper:hover #chat-nav-buttons,
442+
#chat-nav-buttons:hover {
443+
opacity: 0.85;
444+
pointer-events: auto;
445+
}
446+
#chat-nav-buttons .btn-icon-action {
447+
padding: var(--spacing-xs);
448+
border: none !important;
449+
border-radius: 50%;
450+
background: var(--color-panel);
451+
box-shadow: 0 1px 4px rgba(0,0,0,0.18);
452+
}
453+
@media (max-width: 768px) {
454+
#chat-nav-buttons {
455+
opacity: 0.85;
456+
pointer-events: auto;
457+
}
458+
}
459+
418460
/* Scrollbar styles for right panel */
419461
#right-panel.expanded {
420462
margin-left: 0;

webui/index.html

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,25 @@
9797
<x-component path="welcome/welcome-screen.html"></x-component>
9898
</div>
9999
<!-- Message History (actual messages) -->
100-
<div id="chat-history" x-data x-show="!$store.welcomeStore || !$store.welcomeStore.isVisible"></div>
100+
<div id="chat-area-wrapper" x-data x-show="!$store.welcomeStore || !$store.welcomeStore.isVisible">
101+
<div id="chat-history"></div>
102+
103+
<!-- Chat Navigation Buttons (floating over chat area) -->
104+
<div id="chat-nav-buttons" aria-label="Chat navigation" x-cloak>
105+
<button class="btn-icon-action" title="Scroll to top" @click="$store.chatNavigation.scrollToTop()">
106+
<span class="material-symbols-outlined">vertical_align_top</span>
107+
</button>
108+
<button class="btn-icon-action" title="Previous user message" @click="$store.chatNavigation.scrollToPrevUserMessage()">
109+
<span class="material-symbols-outlined">keyboard_arrow_up</span>
110+
</button>
111+
<button class="btn-icon-action" title="Next user message" @click="$store.chatNavigation.scrollToNextUserMessage()">
112+
<span class="material-symbols-outlined">keyboard_arrow_down</span>
113+
</button>
114+
<button class="btn-icon-action" title="Scroll to bottom" @click="$store.chatNavigation.scrollToBottom()">
115+
<span class="material-symbols-outlined">vertical_align_bottom</span>
116+
</button>
117+
</div>
118+
</div>
101119

102120
<!-- NEW: Toast Stack Component -->
103121
<div style="position: relative; height: 0;">

0 commit comments

Comments
 (0)