From 31eb388f80780ba7e0deb65167325b79302bff3f Mon Sep 17 00:00:00 2001 From: "Thomas G. Lopes" <26071571+TGlide@users.noreply.github.com> Date: Thu, 19 Jun 2025 01:28:56 +0100 Subject: [PATCH] fix share page --- src/routes/chat/+layout.svelte | 5 +- src/routes/chat/[id]/message.svelte | 35 ++++++-- src/routes/chat/model-picker.svelte | 7 +- src/routes/share/[id]/+page.server.ts | 32 -------- src/routes/share/[id]/+page.svelte | 114 +++++++++++++++----------- 5 files changed, 96 insertions(+), 97 deletions(-) delete mode 100644 src/routes/share/[id]/+page.server.ts diff --git a/src/routes/chat/+layout.svelte b/src/routes/chat/+layout.svelte index 8552ca7..5ab3205 100644 --- a/src/routes/chat/+layout.svelte +++ b/src/routes/chat/+layout.svelte @@ -426,10 +426,7 @@ )} > {#if page.params.id && currentConversationQuery.data} - } - isPublic={currentConversationQuery.data.public} - /> + } /> {/if} {#snippet trigger(tooltip)} diff --git a/src/routes/chat/[id]/message.svelte b/src/routes/chat/[id]/message.svelte index 04d555d..a863fa9 100644 --- a/src/routes/chat/[id]/message.svelte +++ b/src/routes/chat/[id]/message.svelte @@ -7,9 +7,11 @@ import MarkdownRenderer from './markdown-renderer.svelte'; import { ImageModal } from '$lib/components/ui/image-modal'; import { sanitizeHtml } from '$lib/utils/markdown-it'; + import { on } from 'svelte/events'; + import { isHtmlElement } from '$lib/utils/is'; const style = tv({ - base: 'prose rounded-xl p-2', + base: 'prose rounded-xl p-2 max-w-full', variants: { role: { user: 'bg-secondary/50 border border-secondary/70 px-3 py-2 !text-black/80 dark:!text-primary-foreground self-end', @@ -40,7 +42,23 @@ {#if message.role !== 'system' && !(message.role === 'assistant' && message.content.length === 0 && !message.error)} -
+
{ + return on(node, 'click', (e) => { + const el = e.target as HTMLElement; + const closestCopyButton = el.closest('.copy[data-code]'); + if (!isHtmlElement(closestCopyButton)) return; + + const code = closestCopyButton.dataset.code; + if (!code) return; + + navigator.clipboard.writeText(code); + closestCopyButton.classList.add('copied'); + setTimeout(() => closestCopyButton.classList.remove('copied'), 3000); + }); + }} + > {#if message.images && message.images.length > 0}
{#each message.images as image (image.storage_id)} @@ -64,6 +82,7 @@
{message.error}
{:else if message.content_html} + {@html sanitizeHtml(message.content_html)} {:else} @@ -106,9 +125,11 @@
- + {#if message.images && message.images.length > 0} + + {/if} {/if} diff --git a/src/routes/chat/model-picker.svelte b/src/routes/chat/model-picker.svelte index 58c1a5c..37702ca 100644 --- a/src/routes/chat/model-picker.svelte +++ b/src/routes/chat/model-picker.svelte @@ -210,12 +210,7 @@ const isMobile = new IsMobile(); -{#if enabledArr.length === 0} - - -{:else} +{#if enabledArr.length} {/snippet} @@ -62,40 +65,55 @@
-
- -
-

{data.conversation.title}

-
- {#if data.conversation.updated_at} - Updated {formatDate(data.conversation.updated_at)} + {#if conversationQuery.isLoading || messagesQuery.isLoading} +
+

Loading conversation...

+
+ {:else if !conversationQuery.data} +
+

Conversation not found

+

This conversation doesn't exist or isn't shared publicly.

+
+ {:else} +
+ +
+

{conversationQuery.data.title}

+
+ {#if conversationQuery.data.updated_at} + Updated {formatDate(conversationQuery.data.updated_at)} + {/if} + Public conversation +
+
+ + +
+ {#if messagesQuery.data && messagesQuery.data.length > 0} + {#each messagesQuery.data as message (message._id)} + + {/each} + {:else} +
+

No messages in this conversation yet.

+

The conversation appears to be empty.

+
{/if} - Public conversation
- - - {#if data.messages && data.messages.length > 0} -
- {#each data.messages as message (message._id)} -
- -
- {/each} -
- {:else} -
-

No messages in this conversation yet.

-

The conversation appears to be empty.

-
- {/if} -
+ {/if}
- \ No newline at end of file +