victor HF Staff commited on
Commit
c62aca6
·
1 Parent(s): 17a7bb7

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
- class="group relative -mb-4 flex w-fit max-w-full items-start justify-start gap-4 pb-4 leading-relaxed"
 
 
 
 
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 class="absolute -bottom-3.5 right-1 flex items-center gap-0.5">
 
 
 
 
 
191
  {#if message.routerMetadata && (!isLast || !loading)}
192
  <div
193
- class="mr-2 flex items-center gap-1.5 whitespace-nowrap text-xs text-gray-400 dark:text-gray-400"
194
  >
195
- <span class="rounded bg-gray-100 px-1.5 py-0.5 font-mono dark:bg-gray-800">
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 py-0.5 font-mono hover:text-gray-500 dark:bg-gray-800 dark:hover:text-gray-300"
203
  >
204
  {message.routerMetadata.model.split("/").pop()}
205
  </a>
206
  {:else}
207
- <span class="rounded bg-gray-100 px-1.5 py-0.5 font-mono dark:bg-gray-800">
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}