1
0
mirror of https://github.com/coalaura/whiskr.git synced 2025-12-02 20:22:52 +00:00

scroll into view button

This commit is contained in:
Laura
2025-11-03 00:56:45 +01:00
parent 90b1509e94
commit 85ed078058
2 changed files with 45 additions and 0 deletions

View File

@@ -777,6 +777,21 @@ body:not(.loading) #loading {
display: none; display: none;
} }
#messages .message.in-view .scroll-view {
opacity: 0;
pointer-events: none;
}
#messages .message .scroll-view {
position: absolute;
bottom: 5px;
right: 2px;
background-image: url(icons/up.svg);
width: 14px;
height: 14px;
transition: 150ms;
}
#chat { #chat {
display: flex; display: flex;
position: relative; position: relative;
@@ -1011,6 +1026,7 @@ body.loading #version,
.message .statistics .tps::before, .message .statistics .tps::before,
.message .statistics .tokens::before, .message .statistics .tokens::before,
.message .statistics .cost::before, .message .statistics .cost::before,
.message .scroll-view,
#json, #json,
#search, #search,
#scrolling, #scrolling,

View File

@@ -145,6 +145,18 @@
} }
} }
const observer = new IntersectionObserver(
entries => {
for (const entry of entries) {
entry.target.parentElement.classList.toggle("in-view", entry.isIntersecting);
}
},
{
root: $messages,
threshold: 1.0,
}
);
class Message { class Message {
#destroyed = false; #destroyed = false;
@@ -219,6 +231,8 @@
this.#_message.appendChild(_wrapper); this.#_message.appendChild(_wrapper);
observer.observe(_wrapper);
// message role // message role
const _role = make("div"); const _role = make("div");
@@ -231,6 +245,7 @@
_wrapper.appendChild(this.#_tags); _wrapper.appendChild(this.#_tags);
// message body
const _body = make("div", "body"); const _body = make("div", "body");
this.#_message.appendChild(_body); this.#_message.appendChild(_body);
@@ -478,6 +493,20 @@
this.#_message.appendChild(this.#_statistics); this.#_message.appendChild(this.#_statistics);
// scroll into view
const _scroll = make("button", "scroll-view");
_scroll.title = "Scroll message into view";
this.#_message.appendChild(_scroll);
_scroll.addEventListener("click", () => {
this.#_message.scrollIntoView({
behavior: "smooth",
block: "start",
});
});
// add to dom // add to dom
$messages.appendChild(this.#_message); $messages.appendChild(this.#_message);