fix(trajectory): keep fold controls available

This commit is contained in:
_Kerman
2026-07-31 11:39:37 +08:00
parent 72eb82858a
commit 4b8316dcd5
4 changed files with 7 additions and 16 deletions

View File

@@ -149,7 +149,7 @@
font: var(--dsw-font-xxs-12); font: var(--dsw-font-xxs-12);
} }
.action:hover:not(:disabled) { .action:hover {
color: var(--dsw-alias-label-primary); color: var(--dsw-alias-label-primary);
background: var(--dsw-alias-interactive-bg-hover); background: var(--dsw-alias-interactive-bg-hover);
} }
@@ -159,11 +159,6 @@
outline-offset: 1px; outline-offset: 1px;
} }
.action:disabled {
color: var(--dsw-alias-label-dimmed);
cursor: not-allowed;
}
.actionIcon { .actionIcon {
color: var(--dsw-alias-label-tertiary); color: var(--dsw-alias-label-tertiary);
font: 14px/14px var(--ds-font-family-code); font: 14px/14px var(--ds-font-family-code);

View File

@@ -12,14 +12,10 @@ export interface TrajectoryToolbarProps {
actualTime: boolean actualTime: boolean
/** Select complete wall-clock timing or idle-compressed timing. */ /** Select complete wall-clock timing or idle-compressed timing. */
onActualTimeChange: (actualTime: boolean) => void onActualTimeChange: (actualTime: boolean) => void
/** Number of turns containing more than one row. */
collapsibleTurns: number
/** Whether every collapsible turn is currently folded. */ /** Whether every collapsible turn is currently folded. */
allTurnsCollapsed: boolean allTurnsCollapsed: boolean
/** Fold or expand every collapsible turn. */ /** Fold or expand every collapsible turn. */
onToggleAllTurns: () => void onToggleAllTurns: () => void
/** Number of assistant messages followed by tool calls. */
collapsibleAssistants: number
/** Whether every collapsible assistant's tool calls are currently folded. */ /** Whether every collapsible assistant's tool calls are currently folded. */
allAssistantsCollapsed: boolean allAssistantsCollapsed: boolean
/** Fold or expand tool calls under every collapsible assistant. */ /** Fold or expand tool calls under every collapsible assistant. */
@@ -40,10 +36,8 @@ export function TrajectoryToolbar({
onActualDurationChange, onActualDurationChange,
actualTime, actualTime,
onActualTimeChange, onActualTimeChange,
collapsibleTurns,
allTurnsCollapsed, allTurnsCollapsed,
onToggleAllTurns, onToggleAllTurns,
collapsibleAssistants,
allAssistantsCollapsed, allAssistantsCollapsed,
onToggleAllAssistants, onToggleAllAssistants,
searchQuery, searchQuery,
@@ -91,7 +85,6 @@ export function TrajectoryToolbar({
aria-label={allTurnsCollapsed ? 'Expand turns' : 'Collapse turns'} aria-label={allTurnsCollapsed ? 'Expand turns' : 'Collapse turns'}
aria-pressed={allTurnsCollapsed} aria-pressed={allTurnsCollapsed}
title={allTurnsCollapsed ? 'Expand turns' : 'Collapse turns'} title={allTurnsCollapsed ? 'Expand turns' : 'Collapse turns'}
disabled={collapsibleTurns === 0}
onClick={onToggleAllTurns} onClick={onToggleAllTurns}
> >
<span className={css.actionIcon} aria-hidden="true"> <span className={css.actionIcon} aria-hidden="true">
@@ -105,7 +98,6 @@ export function TrajectoryToolbar({
aria-label={allAssistantsCollapsed ? 'Expand calls' : 'Collapse calls'} aria-label={allAssistantsCollapsed ? 'Expand calls' : 'Collapse calls'}
aria-pressed={allAssistantsCollapsed} aria-pressed={allAssistantsCollapsed}
title={allAssistantsCollapsed ? 'Expand calls' : 'Collapse calls'} title={allAssistantsCollapsed ? 'Expand calls' : 'Collapse calls'}
disabled={collapsibleAssistants === 0}
onClick={onToggleAllAssistants} onClick={onToggleAllAssistants}
> >
<span className={css.actionIcon} aria-hidden="true"> <span className={css.actionIcon} aria-hidden="true">

View File

@@ -489,10 +489,8 @@ export function TrajectoryView({
setActualTime(nextActualTime) setActualTime(nextActualTime)
setTimelineSelection(null) setTimelineSelection(null)
}} }}
collapsibleTurns={collapsibleTurnIds.length}
allTurnsCollapsed={allTurnsCollapsed} allTurnsCollapsed={allTurnsCollapsed}
onToggleAllTurns={toggleAllTurns} onToggleAllTurns={toggleAllTurns}
collapsibleAssistants={collapsibleAssistantIds.length}
allAssistantsCollapsed={allAssistantsCollapsed} allAssistantsCollapsed={allAssistantsCollapsed}
onToggleAllAssistants={toggleAllAssistants} onToggleAllAssistants={toggleAllAssistants}
searchQuery={searchQuery} searchQuery={searchQuery}

View File

@@ -361,6 +361,12 @@ describe('tab switching in ConversationRoot', () => {
fireEvent.click(screen.getByRole('tab', { name: 'Trajectory' })) fireEvent.click(screen.getByRole('tab', { name: 'Trajectory' }))
expect(screen.getByRole('toolbar', { name: 'Trajectory toolbar' })).toBeTruthy() expect(screen.getByRole('toolbar', { name: 'Trajectory toolbar' })).toBeTruthy()
expect(screen.getByText('No timing data')).toBeTruthy() expect(screen.getByText('No timing data')).toBeTruthy()
expect(screen.getByRole<HTMLButtonElement>('button', {
name: 'Collapse turns',
}).disabled).toBe(false)
expect(screen.getByRole<HTMLButtonElement>('button', {
name: 'Collapse calls',
}).disabled).toBe(false)
expect(screen.queryByRole('row')).toBeNull() expect(screen.queryByRole('row')).toBeNull()
expect(screen.queryByText(/turns ·/)).toBeNull() expect(screen.queryByText(/turns ·/)).toBeNull()
}) })