refine thinking accordion layout

This commit is contained in:
Shantur Rathore
2025-11-27 13:05:52 +00:00
parent 2f40f5eedf
commit 700342670c
2 changed files with 121 additions and 44 deletions

View File

@@ -798,9 +798,7 @@ function StepCard(props: StepCardProps) {
}
}
type UsageInfo = NonNullable<ReturnType<typeof usageStats>>
const renderUsageChips = (usage: UsageInfo) => (
const renderUsageChips = (usage: NonNullable<ReturnType<typeof usageStats>>) => (
<div class="message-step-usage">
<div class="inline-flex items-center gap-1 rounded-full border border-[var(--border-base)] px-2 py-0.5 text-[10px]">
<span class="uppercase text-[9px] tracking-wide text-[var(--text-muted)]">Input</span>
@@ -919,21 +917,27 @@ function ReasoningCard(props: ReasoningCardProps) {
const toggle = () => setExpanded((prev) => !prev)
return (
<div class="message-item-base assistant-message bg-[var(--message-assistant-bg)] border-l-4 border-[var(--message-assistant-border)]">
<div class="reasoning-card-header">
<div class="flex flex-col">
<span class="text-xs text-[var(--message-assistant-border)]">Thinking</span>
</div>
<div class="reasoning-card-header-right">
<button type="button" class="reasoning-card-toggle" onClick={toggle} aria-expanded={expanded()} aria-label={expanded() ? "Collapse thinking" : "Expand thinking"}>
{expanded() ? "Collapse" : "Expand"}
</button>
<span class="reasoning-card-time">{timestamp()}</span>
</div>
</div>
<div class="message-reasoning-card">
<button
type="button"
class="message-reasoning-toggle"
onClick={toggle}
aria-expanded={expanded()}
aria-label={expanded() ? "Collapse thinking" : "Expand thinking"}
>
<span class="message-reasoning-label">Thinking</span>
<span class="message-reasoning-meta">
<span class="message-reasoning-indicator">{expanded() ? "Hide" : "View"}</span>
<span class="message-reasoning-time">{timestamp()}</span>
</span>
</button>
<Show when={expanded()}>
<div class="reasoning-card-body">
<pre class="reasoning-card-text">{reasoningText() || ""}</pre>
<div class="message-reasoning-expanded">
<div class="message-reasoning-divider" aria-hidden="true" />
<div class="message-reasoning-body">
<pre class="message-reasoning-text">{reasoningText() || ""}</pre>
</div>
</div>
</Show>
</div>

View File

@@ -186,35 +186,108 @@
@apply mt-4;
}
.reasoning-card-header {
@apply flex items-center justify-between;
.message-reasoning-card {
background-color: var(--message-assistant-bg);
border-left: 4px solid var(--message-assistant-border);
margin-top: 0;
margin-bottom: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 0;
}
.reasoning-card-header-right {
@apply flex items-center gap-2;
}
.reasoning-card-toggle {
@apply inline-flex items-center justify-center rounded border border-[var(--border-base)] text-[var(--text-muted)] bg-transparent px-3 py-0.5 text-xs font-semibold;
}
.reasoning-card-toggle:hover {
color: var(--accent-primary);
border-color: var(--accent-primary);
}
.reasoning-card-time {
@apply text-[11px] text-[var(--text-muted)];
}
.reasoning-card-body {
@apply pt-1;
}
.reasoning-card-text {
@apply whitespace-pre-wrap break-words leading-[1.1] text-[var(--text-muted)] text-sm;
font-family: inherit;
background: transparent;
.message-reasoning-toggle {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.65rem;
background: none;
border: none;
padding: 0.25rem 0.6rem;
font: inherit;
color: inherit;
text-align: left;
cursor: pointer;
transition: background-color 0.2s ease, box-shadow 0.2s ease;
}
.message-reasoning-toggle:hover {
background-color: var(--surface-hover);
}
.message-reasoning-toggle:focus-visible {
outline: none;
box-shadow: 0 0 0 1px var(--accent-primary);
}
.message-reasoning-label {
font-size: 0.75rem;
font-weight: var(--font-weight-medium);
color: var(--message-assistant-border);
}
.message-reasoning-meta {
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.message-reasoning-indicator {
line-height: 1;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 2.25rem;
height: 1.5rem;
padding: 0 0.65rem;
border: 1px solid var(--border-base);
border-radius: 0.375rem;
background-color: transparent;
color: var(--text-muted);
font-weight: var(--font-weight-semibold);
font-size: 0.85rem;
transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease, transform 0.2s ease;
}
.message-reasoning-toggle:hover .message-reasoning-indicator {
background-color: var(--surface-hover);
border-color: var(--accent-primary);
color: var(--accent-primary);
}
.message-reasoning-indicator:active {
transform: scale(0.97);
}
.message-reasoning-time {
font-size: 11px;
color: var(--text-muted);
}
.message-reasoning-expanded {
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.message-reasoning-divider {
width: 100%;
height: 1px;
background-color: var(--border-base);
}
.message-reasoning-body {
padding: 0.25rem 0.6rem 0.4rem;
}
.message-reasoning-text {
font-family: var(--font-family-mono);
font-size: var(--font-size-sm);
line-height: var(--line-height-tight);
color: var(--text-muted);
white-space: pre-wrap;
margin: 0;
}