From 88d2fbfee9fb55fa3bbb5c8708cfba82720c1fba Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Sun, 7 Jun 2026 15:27:58 +0900 Subject: feat(chat): restyle transcript — left-aligned, bubbleless assistant, tool cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All messages flow left in one column via the DaisyUI chat-start grid: - user keeps a primary speech bubble; - assistant/system/error render in a transparent (invisible) chat-bubble so they read as plain prose yet inherit identical left spacing, capped to a readable max-w-5xl column; - tool call/result render as regular (non-speech) rounded cards, nested in the same grid so they line up too; - role header labels dropped; chat-wide left padding added. Alignment uses specificity-based variants (no !important). --- src/features/chat/ui/ChatView.svelte | 97 +++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 36 deletions(-) (limited to 'src/features/chat/ui') diff --git a/src/features/chat/ui/ChatView.svelte b/src/features/chat/ui/ChatView.svelte index cb6069b..0234852 100644 --- a/src/features/chat/ui/ChatView.svelte +++ b/src/features/chat/ui/ChatView.svelte @@ -4,44 +4,69 @@ let { chunks }: { chunks: readonly RenderedChunk[] } = $props(); -
+
{#each chunks as rendered, i (rendered.seq != null ? `c${rendered.seq}` : `p${i}`)} -
-
{rendered.role}
-
- {#if rendered.chunk.type === "text"} -

{rendered.chunk.text}

- {:else if rendered.chunk.type === "thinking"} -
- Thinking + {#if rendered.role === "user"} + +
+
+ {#if rendered.chunk.type === "text"}

{rendered.chunk.text}

-
- {:else if rendered.chunk.type === "tool-call"} -
- {rendered.chunk.toolName} -
{JSON.stringify(rendered.chunk.input, null, 2)}
-
- {:else if rendered.chunk.type === "tool-result"} -
- {rendered.chunk.toolName} -
{rendered.chunk.content}
-
- {:else if rendered.chunk.type === "error"} - - {:else if rendered.chunk.type === "system"} -
{rendered.chunk.text}
- {/if} + {/if} +
-
+ {:else if rendered.chunk.type === "tool-call" || rendered.chunk.type === "tool-result"} + +
+
+ {#if rendered.chunk.type === "tool-call"} +
+ {rendered.chunk.toolName} +
{JSON.stringify(rendered.chunk.input, null, 2)}
+
+ {:else} +
+ {rendered.chunk.toolName} +
{rendered.chunk.content}
+
+ {/if} +
+
+ {:else} + +
+
+ {#if rendered.chunk.type === "text"} +

{rendered.chunk.text}

+ {:else if rendered.chunk.type === "thinking"} +
+ Thinking +

{rendered.chunk.text}

+
+ {:else if rendered.chunk.type === "error"} + + {:else if rendered.chunk.type === "system"} +
{rendered.chunk.text}
+ {/if} +
+
+ {/if} {/each}
-- cgit v1.2.3