diff --git a/src/lib/components/layout/Sidebar/ChatItem.svelte b/src/lib/components/layout/Sidebar/ChatItem.svelte index 216f792c29..62878d2efe 100644 --- a/src/lib/components/layout/Sidebar/ChatItem.svelte +++ b/src/lib/components/layout/Sidebar/ChatItem.svelte @@ -132,6 +132,43 @@ !active && (effectiveReadAt === null || (updatedAt !== null && updatedAt > effectiveReadAt)); $: showInlineActions = id === $chatId || confirmEdit || mouseOver || selected; + $: chatItemClass = ` w-full flex justify-between rounded-xl px-2 py-1.5 ${ + id === $chatId || confirmEdit + ? ($settings?.highContrastMode ?? false) + ? 'bg-black/[0.035] dark:bg-white/[0.06] selected' + : 'bg-black/[0.035] dark:bg-white/[0.045] selected' + : selected + ? ($settings?.highContrastMode ?? false) + ? 'bg-black/[0.035] dark:bg-white/[0.055] selected' + : 'bg-black/[0.035] dark:bg-white/[0.045] selected' + : ' hover:bg-gray-50 dark:hover:bg-gray-900 group-hover:bg-gray-50 dark:group-hover:bg-gray-900' + } whitespace-nowrap text-ellipsis transition`; + + const selectChatHandler = () => { + openPreview = false; + dispatch('select'); + + if ($selectedFolder) { + selectedFolder.set(null); + } + + if ($mobile) { + showSidebar.set(false); + } + + // Optimistically mark as read in UI when clicked + unread = false; + lastReadAt = Date.now() / 1000; + }; + + const renameChatFromDoubleClick = async (e: MouseEvent) => { + if (readonly) return; + e.preventDefault(); + e.stopPropagation(); + + doubleClicked = true; + renameHandler(); + }; const loadChat = async () => { if (!chat) { @@ -460,6 +497,48 @@ }; +{#snippet chatItemContent()} + {#if ownerUserId} + + + + {/if} + + + {#if active} +
+ +
+ {/if} + +
+ {#if unread} +
+
+
+ {/if} +
+ {title} +
+
+ + + {#if (updatedAt ?? createdAt) && !showInlineActions} +
+ {formatTimeAgo((updatedAt ?? createdAt) as number)} +
+ {/if} +{/snippet} + + {:else if $mobile} + + {@render chatItemContent()} + {:else} { - openPreview = false; - dispatch('select'); - - if ($selectedFolder) { - selectedFolder.set(null); - } - - if ($mobile) { - showSidebar.set(false); - } - - // Optimistically mark as read in UI when clicked - unread = false; - lastReadAt = Date.now() / 1000; - }} - ondblclick={async (e) => { - if (readonly) return; - e.preventDefault(); - e.stopPropagation(); - - doubleClicked = true; - renameHandler(); - }} + onclick={selectChatHandler} + ondblclick={renameChatFromDoubleClick} draggable="false" > - {#if ownerUserId} - - - - {/if} - - - {#if active} -
- -
- {/if} - -
- {#if unread} -
-
-
- {/if} -
- {title} -
-
- - - {#if (updatedAt ?? createdAt) && !showInlineActions} -
- {formatTimeAgo((updatedAt ?? createdAt) as number)} -
- {/if} + {@render chatItemContent()}