Spaces:
Running
on
Inf2
Running
on
Inf2
fix: improve layout responsiveness in ChatMessage component by binding message dimensions and adjusting classes
Browse files
src/lib/components/chat/ChatMessage.svelte
CHANGED
|
@@ -50,6 +50,8 @@
|
|
| 50 |
|
| 51 |
let contentEl: HTMLElement | undefined = $state();
|
| 52 |
let isCopied = $state(false);
|
|
|
|
|
|
|
| 53 |
|
| 54 |
$effect(() => {
|
| 55 |
// referenced to appease linter for currently-unused props
|
|
@@ -115,7 +117,11 @@
|
|
| 115 |
|
| 116 |
{#if message.from === "assistant"}
|
| 117 |
<div
|
| 118 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
data-message-id={message.id}
|
| 120 |
data-message-role="assistant"
|
| 121 |
role="presentation"
|
|
@@ -187,24 +193,29 @@
|
|
| 187 |
</div>
|
| 188 |
|
| 189 |
{#if message.routerMetadata || (!loading && message.content)}
|
| 190 |
-
<div
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
{#if message.routerMetadata && (!isLast || !loading)}
|
| 192 |
<div
|
| 193 |
-
class="mr-2 flex items-center gap-1.5 whitespace-nowrap text-
|
| 194 |
>
|
| 195 |
-
<span class="rounded bg-gray-100 px-1.5
|
| 196 |
{message.routerMetadata.route}
|
| 197 |
</span>
|
| 198 |
<span class="text-gray-500">with</span>
|
| 199 |
{#if publicConfig.isHuggingChat}
|
| 200 |
<a
|
| 201 |
href="/chat/settings/{message.routerMetadata.model}"
|
| 202 |
-
class="rounded bg-gray-100 px-1.5
|
| 203 |
>
|
| 204 |
{message.routerMetadata.model.split("/").pop()}
|
| 205 |
</a>
|
| 206 |
{:else}
|
| 207 |
-
<span class="rounded bg-gray-100 px-1.5
|
| 208 |
{message.routerMetadata.model.split("/").pop()}
|
| 209 |
</span>
|
| 210 |
{/if}
|
|
|
|
| 50 |
|
| 51 |
let contentEl: HTMLElement | undefined = $state();
|
| 52 |
let isCopied = $state(false);
|
| 53 |
+
let messageWidth: number = $state(0);
|
| 54 |
+
let messageInfoWidth: number = $state(0);
|
| 55 |
|
| 56 |
$effect(() => {
|
| 57 |
// referenced to appease linter for currently-unused props
|
|
|
|
| 117 |
|
| 118 |
{#if message.from === "assistant"}
|
| 119 |
<div
|
| 120 |
+
bind:offsetWidth={messageWidth}
|
| 121 |
+
class="group relative -mb-4 flex w-fit max-w-full items-start justify-start gap-4 pb-4 leading-relaxed max-sm:mb-1 {message.routerMetadata &&
|
| 122 |
+
messageInfoWidth >= messageWidth
|
| 123 |
+
? 'mb-1'
|
| 124 |
+
: ''}"
|
| 125 |
data-message-id={message.id}
|
| 126 |
data-message-role="assistant"
|
| 127 |
role="presentation"
|
|
|
|
| 193 |
</div>
|
| 194 |
|
| 195 |
{#if message.routerMetadata || (!loading && message.content)}
|
| 196 |
+
<div
|
| 197 |
+
class="absolute -bottom-3.5 {message.routerMetadata && messageInfoWidth > messageWidth
|
| 198 |
+
? 'left-1 pl-1 lg:pl-7'
|
| 199 |
+
: 'right-1'} flex max-w-[calc(100dvw-40px)] items-center gap-0.5 overflow-hidden"
|
| 200 |
+
bind:offsetWidth={messageInfoWidth}
|
| 201 |
+
>
|
| 202 |
{#if message.routerMetadata && (!isLast || !loading)}
|
| 203 |
<div
|
| 204 |
+
class="mr-2 flex items-center gap-1.5 truncate whitespace-nowrap text-[.65rem] text-gray-400 dark:text-gray-400 sm:text-xs"
|
| 205 |
>
|
| 206 |
+
<span class="truncate rounded bg-gray-100 px-1.5 font-mono dark:bg-gray-800 sm:py-px">
|
| 207 |
{message.routerMetadata.route}
|
| 208 |
</span>
|
| 209 |
<span class="text-gray-500">with</span>
|
| 210 |
{#if publicConfig.isHuggingChat}
|
| 211 |
<a
|
| 212 |
href="/chat/settings/{message.routerMetadata.model}"
|
| 213 |
+
class="truncate rounded bg-gray-100 px-1.5 font-mono hover:text-gray-500 dark:bg-gray-800 dark:hover:text-gray-300 sm:py-px"
|
| 214 |
>
|
| 215 |
{message.routerMetadata.model.split("/").pop()}
|
| 216 |
</a>
|
| 217 |
{:else}
|
| 218 |
+
<span class="truncate rounded bg-gray-100 px-1.5 font-mono dark:bg-gray-800 sm:py-px">
|
| 219 |
{message.routerMetadata.model.split("/").pop()}
|
| 220 |
</span>
|
| 221 |
{/if}
|