From a36e366b58baae0784499238959e6701aa2257e8 Mon Sep 17 00:00:00 2001 From: Jeuner <62662523+Jeuners@users.noreply.github.com> Date: Fri, 28 Aug 2026 15:16:14 +0200 Subject: [PATCH] fix(ui): Mic- und Anhang-Icon sichtbar, Warte-Cursor blinkt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zwei Stellen, an denen die Oberfläche tot wirkte. Mic und Anhang waren grau: 🎙 und 📎 sind in den Emoji-Fonts fest eingefärbt, `color` greift bei ihnen nicht. Damit liefen auch die vorhandenen Zustandsregeln ins Leere — .btn-mic.recording (rot) und .transcribing (orange) färbten nur den Rahmen, nie das Icon. Jetzt SVG in currentColor, dazu ein akzentfarbener Rahmen, damit Mic, Anhang und "Senden" als eine Gruppe lesbar sind. Der Platzhalter vor dem ersten Token war ein statisches ▍ und sah nach Stillstand aus, obwohl die Antwort lief — bei kaltem Modell dauert das mehrere Sekunden. Blinkt jetzt über das vorhandene blink-Keyframe. Eigene Klasse .stream-caret, weil .caret schon das Aufklapp-Dreieck des Denkprozesses ist und sonst mitgeblinkt hätte. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015AUP4R3rgq4XwVs4bVf7uh --- web/src/components/ChatMessage.tsx | 14 +++++++-- web/src/components/Composer.tsx | 49 ++++++++++++++++++++++++++++-- web/src/styles.css | 16 ++++++++-- 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/web/src/components/ChatMessage.tsx b/web/src/components/ChatMessage.tsx index 5268a18..1e7a41a 100644 --- a/web/src/components/ChatMessage.tsx +++ b/web/src/components/ChatMessage.tsx @@ -127,9 +127,17 @@ export function ChatMessage({ ) : null ) : (
- - {message.content || "▍"} - + {message.content ? ( + + {message.content} + + ) : ( + // Noch kein Token da. Der Cursor blinkt, damit die Wartezeit — bei + // kaltem Modell mehrere Sekunden — nicht wie ein Stillstand wirkt. + + ▍ + + )}
)} diff --git a/web/src/components/Composer.tsx b/web/src/components/Composer.tsx index a9be94f..25dbd83 100644 --- a/web/src/components/Composer.tsx +++ b/web/src/components/Composer.tsx @@ -105,6 +105,51 @@ async function readAsTextAttachment(file: File): Promise { }; } +/** + * Icons als SVG statt Emoji. + * + * 🎙 und 📎 sind in den Emoji-Fonts fest grau eingefärbt — `color` greift bei + * ihnen nicht. Damit blieben auch die Zustandsfarben unten wirkungslos + * (Aufnahme rot, Transkription orange): sie färbten nur den Rahmen. Als SVG + * mit `currentColor` zieht die Farbe wieder durch. + */ +const ICON = { + width: 18, + height: 18, + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + strokeWidth: 1.8, + strokeLinecap: "round" as const, + strokeLinejoin: "round" as const, +}; + +function MicIcon() { + return ( + + ); +} + +function RecordIcon() { + return ( + + ); +} + +function ClipIcon() { + return ( + + ); +} + export function Composer({ streaming, disabled, @@ -311,7 +356,7 @@ export function Composer({ } disabled={transcribing || disabled} > - {recording ? "●" : transcribing ? "…" : "🎙"} + {recording ? : transcribing ? "…" : }