From 01300a81de8d6dc79715708ee8e15ccebb0847b2 Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Mon, 9 Feb 2026 16:20:33 +0000 Subject: [PATCH] fix(ui): unify thinking controls with icon buttons --- packages/ui/src/components/message-block.tsx | 97 +++++++++++-------- packages/ui/src/components/message-item.tsx | 13 --- .../ui/src/styles/messaging/message-base.css | 20 +++- 3 files changed, 73 insertions(+), 57 deletions(-) diff --git a/packages/ui/src/components/message-block.tsx b/packages/ui/src/components/message-block.tsx index 8b1dcb48..0fd2aaf7 100644 --- a/packages/ui/src/components/message-block.tsx +++ b/packages/ui/src/components/message-block.tsx @@ -1,5 +1,5 @@ import { For, Match, Show, Switch, createEffect, createMemo, createSignal, untrack } from "solid-js" -import { ExternalLink, FoldVertical, Trash2 } from "lucide-solid" +import { ChevronsDownUp, ChevronsUpDown, ExternalLink, FoldVertical, Trash2 } from "lucide-solid" import MessageItem from "./message-item" import ToolCall from "./tool-call" import type { InstanceMessageStore } from "../stores/message-v2/instance-store" @@ -1010,10 +1010,13 @@ function ReasoningCard(props: ReasoningCardProps) { const toggle = () => setExpanded((prev) => !prev) + const viewHideLabel = () => + expanded() ? t("messageBlock.reasoning.indicator.hide") : t("messageBlock.reasoning.indicator.view") + const hasDeleteTarget = () => Boolean(props.partId) const canDelete = () => hasDeleteTarget() && !deleting() - const handleDelete = async (event: Event) => { + const handleDelete = async (event: MouseEvent) => { event.preventDefault() event.stopPropagation() if (!canDelete()) return @@ -1033,56 +1036,66 @@ function ReasoningCard(props: ReasoningCardProps) { return (
- + +
+ - { - if (event.key === "Enter" || event.key === " ") { - handleDelete(event) - } - }} + disabled={!canDelete()} aria-label={t("messagePart.actions.deleteTitle")} title={t("messagePart.actions.deleteTitle")} > - {deleting() ? t("messagePart.actions.deleting") : t("messagePart.actions.delete")} - + {timestamp()} - - +
+
diff --git a/packages/ui/src/components/message-item.tsx b/packages/ui/src/components/message-item.tsx index f974aefb..7041d130 100644 --- a/packages/ui/src/components/message-item.tsx +++ b/packages/ui/src/components/message-item.tsx @@ -305,19 +305,6 @@ export default function MessageItem(props: MessageItemProps) { >
diff --git a/packages/ui/src/styles/messaging/message-base.css b/packages/ui/src/styles/messaging/message-base.css index 13b3551c..b9060a9e 100644 --- a/packages/ui/src/styles/messaging/message-base.css +++ b/packages/ui/src/styles/messaging/message-base.css @@ -298,11 +298,20 @@ gap: 0; } +.message-reasoning-header { + display: flex; + align-items: stretch; + justify-content: space-between; + gap: 0.5rem; +} + .message-reasoning-toggle { - width: 100%; + flex: 1 1 auto; + min-width: 0; + width: auto; display: flex; align-items: center; - justify-content: space-between; + justify-content: flex-start; gap: 0.65rem; background: none; border: none; @@ -314,6 +323,13 @@ transition: background-color 0.2s ease, box-shadow 0.2s ease; } +.message-reasoning-actions { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.25rem 0.6rem 0.25rem 0; +} + .message-reasoning-toggle:hover { background-color: var(--surface-hover); }