refine thinking accordion layout
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user