Thomas G. Lopes
commited on
Commit
·
0ce274f
1
Parent(s):
7991bc0
improve auto scroll
Browse files
package.json
CHANGED
@@ -41,7 +41,7 @@
|
|
41 |
"prettier": "^3.1.1",
|
42 |
"prettier-plugin-svelte": "^3.2.6",
|
43 |
"prettier-plugin-tailwindcss": "^0.6.11",
|
44 |
-
"runed": "^0.
|
45 |
"svelte": "^5.20.4",
|
46 |
"svelte-check": "^4.0.0",
|
47 |
"tailwind-merge": "^3.0.2",
|
|
|
41 |
"prettier": "^3.1.1",
|
42 |
"prettier-plugin-svelte": "^3.2.6",
|
43 |
"prettier-plugin-tailwindcss": "^0.6.11",
|
44 |
+
"runed": "^0.25.0",
|
45 |
"svelte": "^5.20.4",
|
46 |
"svelte-check": "^4.0.0",
|
47 |
"tailwind-merge": "^3.0.2",
|
pnpm-lock.yaml
CHANGED
@@ -97,8 +97,8 @@ importers:
|
|
97 |
specifier: ^0.6.11
|
98 |
version: 0.6.11([email protected]([email protected])([email protected]))([email protected])
|
99 |
runed:
|
100 |
-
specifier: ^0.
|
101 |
-
version: 0.
|
102 |
svelte:
|
103 |
specifier: ^5.20.4
|
104 |
version: 5.23.0
|
@@ -1861,8 +1861,8 @@ packages:
|
|
1861 |
peerDependencies:
|
1862 |
svelte: ^5.7.0
|
1863 |
|
1864 |
-
runed@0.
|
1865 |
-
resolution: {integrity: sha512-
|
1866 |
peerDependencies:
|
1867 |
svelte: ^5.7.0
|
1868 |
|
@@ -3731,7 +3731,7 @@ snapshots:
|
|
3731 |
esm-env: 1.2.2
|
3732 |
svelte: 5.23.0
|
3733 |
|
3734 |
-
runed@0.
|
3735 |
dependencies:
|
3736 |
esm-env: 1.2.2
|
3737 |
svelte: 5.23.0
|
|
|
97 |
specifier: ^0.6.11
|
98 |
version: 0.6.11([email protected]([email protected])([email protected]))([email protected])
|
99 |
runed:
|
100 |
+
specifier: ^0.25.0
|
101 |
+
version: 0.25.0([email protected])
|
102 |
svelte:
|
103 |
specifier: ^5.20.4
|
104 |
version: 5.23.0
|
|
|
1861 |
peerDependencies:
|
1862 |
svelte: ^5.7.0
|
1863 |
|
1864 |
+
runed@0.25.0:
|
1865 |
+
resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==}
|
1866 |
peerDependencies:
|
1867 |
svelte: ^5.7.0
|
1868 |
|
|
|
3731 |
esm-env: 1.2.2
|
3732 |
svelte: 5.23.0
|
3733 |
|
3734 |
+
runed@0.25.0([email protected]):
|
3735 |
dependencies:
|
3736 |
esm-env: 1.2.2
|
3737 |
svelte: 5.23.0
|
src/lib/components/debug-menu.svelte
CHANGED
@@ -9,6 +9,7 @@
|
|
9 |
import type { ToastData } from "./toaster.svelte.js";
|
10 |
import { addToast } from "./toaster.svelte.js";
|
11 |
import { models } from "$lib/state/models.svelte";
|
|
|
12 |
|
13 |
let innerWidth = $state<number>();
|
14 |
let innerHeight = $state<number>();
|
@@ -25,6 +26,13 @@
|
|
25 |
};
|
26 |
|
27 |
const actions: Action[] = [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
{ label: "Toggle Theme", cb: toggleTheme },
|
29 |
{
|
30 |
label: "Log session to console",
|
|
|
9 |
import type { ToastData } from "./toaster.svelte.js";
|
10 |
import { addToast } from "./toaster.svelte.js";
|
11 |
import { models } from "$lib/state/models.svelte";
|
12 |
+
import { last } from "$lib/utils/array.js";
|
13 |
|
14 |
let innerWidth = $state<number>();
|
15 |
let innerHeight = $state<number>();
|
|
|
26 |
};
|
27 |
|
28 |
const actions: Action[] = [
|
29 |
+
{
|
30 |
+
label: "Set long text",
|
31 |
+
cb: () => {
|
32 |
+
const conv = session.project.conversations[0]!;
|
33 |
+
last(conv.messages)!.content = "This is a lot of text. ".repeat(10000);
|
34 |
+
},
|
35 |
+
},
|
36 |
{ label: "Toggle Theme", cb: toggleTheme },
|
37 |
{
|
38 |
label: "Log session to console",
|
src/lib/components/inference-playground/conversation.svelte
CHANGED
@@ -1,11 +1,12 @@
|
|
1 |
<script lang="ts">
|
2 |
import type { Conversation } from "$lib/types.js";
|
3 |
|
|
|
|
|
|
|
4 |
import IconPlus from "~icons/carbon/add";
|
5 |
import CodeSnippets from "./code-snippets.svelte";
|
6 |
import Message from "./message.svelte";
|
7 |
-
import { ScrollState } from "$lib/spells/scroll-state.svelte";
|
8 |
-
import { watch } from "runed";
|
9 |
|
10 |
interface Props {
|
11 |
conversation: Conversation;
|
@@ -20,13 +21,20 @@
|
|
20 |
element: () => messageContainer,
|
21 |
offset: { bottom: 100 },
|
22 |
});
|
|
|
23 |
|
24 |
watch(
|
25 |
() => conversation.messages.at(-1)?.content,
|
26 |
() => {
|
27 |
-
const shouldScroll =
|
28 |
if (!shouldScroll) return;
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
}
|
31 |
);
|
32 |
|
|
|
1 |
<script lang="ts">
|
2 |
import type { Conversation } from "$lib/types.js";
|
3 |
|
4 |
+
import { ScrollState } from "$lib/spells/scroll-state.svelte";
|
5 |
+
import { watch } from "runed";
|
6 |
+
import { tick } from "svelte";
|
7 |
import IconPlus from "~icons/carbon/add";
|
8 |
import CodeSnippets from "./code-snippets.svelte";
|
9 |
import Message from "./message.svelte";
|
|
|
|
|
10 |
|
11 |
interface Props {
|
12 |
conversation: Conversation;
|
|
|
21 |
element: () => messageContainer,
|
22 |
offset: { bottom: 100 },
|
23 |
});
|
24 |
+
const atBottom = $derived(scrollState.arrived.bottom);
|
25 |
|
26 |
watch(
|
27 |
() => conversation.messages.at(-1)?.content,
|
28 |
() => {
|
29 |
+
const shouldScroll = atBottom && !scrollState.isScrolling;
|
30 |
if (!shouldScroll) return;
|
31 |
+
try {
|
32 |
+
tick().then(() => {
|
33 |
+
scrollState.scrollToBottom();
|
34 |
+
});
|
35 |
+
} catch {
|
36 |
+
// noop
|
37 |
+
}
|
38 |
}
|
39 |
);
|
40 |
|