Skip to content

Commit d1aec26

Browse files
committed
Remove detail panel tab separator
Simplify detail panel refinements
1 parent c6f6b00 commit d1aec26

9 files changed

Lines changed: 7 additions & 80 deletions

File tree

desktop/src/renderer/components/conversation/PlanApprovalComposer.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
import { useT } from '../../contexts/LocaleContext'
1111
import { useConversationStore } from '../../stores/conversationStore'
1212
import { useUIStore } from '../../stores/uiStore'
13-
import { PLAN_IMPLEMENTATION_MESSAGE } from '../../utils/planImplementation'
1413
import { startTurnWithOptimisticUI } from '../../utils/startTurn'
1514
import { ComposerShell, DECISION_MASCOT } from './ComposerShell'
1615
import { ConversationColumn } from './ConversationColumn'
@@ -74,7 +73,7 @@ export function PlanApprovalComposer({
7473
await startTurnWithOptimisticUI({
7574
threadId,
7675
workspacePath,
77-
text: PLAN_IMPLEMENTATION_MESSAGE,
76+
text: 'Implement the plan.',
7877
fallbackThreadName: t('toast.imageMessage'),
7978
fileFallbackThreadName: t('toast.fileReferenceMessage'),
8079
attachmentFallbackThreadName: t('toast.attachmentMessage'),

desktop/src/renderer/components/detail/styles/automation-viewer-tab-keyframes.css

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,3 @@
66
transform: translate(-60%);
77
}
88
}
9-
10-
@keyframes dotcraft-automation-tab-dot {
11-
0%, 100% {
12-
opacity: 0.35;
13-
transform: scale(0.8);
14-
}
15-
50% {
16-
opacity: 1;
17-
transform: scale(1);
18-
}
19-
}

desktop/src/renderer/components/detail/styles/automation-viewer-tab.css

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,3 @@
4343
position: relative;
4444
z-index: 1;
4545
}
46-
47-
.dotcraft-automation-viewer-tab__glyph {
48-
position: relative;
49-
display: inline-flex;
50-
align-items: center;
51-
justify-content: center;
52-
color: var(--accent);
53-
}
54-
55-
.dotcraft-automation-viewer-tab__dot {
56-
position: absolute;
57-
top: -1px;
58-
right: -2px;
59-
width: 4px;
60-
height: 4px;
61-
border-radius: 999px;
62-
background: var(--accent);
63-
animation: dotcraft-automation-tab-dot 1.4s ease-in-out infinite;
64-
}
65-
66-
@media (prefers-reduced-motion: reduce) {
67-
.dotcraft-automation-viewer-tab::before {
68-
animation: none;
69-
transform: translate(0);
70-
}
71-
72-
.dotcraft-automation-viewer-tab__dot {
73-
animation: none;
74-
}
75-
}

desktop/src/renderer/components/layout/DetailPanel.tsx

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -265,31 +265,12 @@ export function DetailPanel({
265265
)
266266
})}
267267

268-
{/* Separator — only visible when both system and viewer tabs exist */}
269-
{openSystemTabs.length > 0 && viewerTabs.length > 0 && (
270-
<div
271-
aria-hidden
272-
style={{
273-
alignSelf: 'center',
274-
width: '1px',
275-
height: '16px',
276-
backgroundColor: 'var(--glass-border)',
277-
flexShrink: 0
278-
}}
279-
/>
280-
)}
281-
282268
{/* Viewer tabs — label + leading icon slot that becomes the close button on hover. */}
283269
{viewerTabs.map((tab) => {
284270
const automationActive = tab.kind === 'browser' && tab.automationActive === true
285271
const icon = tab.kind === 'browser'
286272
? (automationActive
287-
? (
288-
<span className="dotcraft-automation-viewer-tab__glyph" aria-hidden="true">
289-
<MousePointer2 size={14} strokeWidth={2} />
290-
<span className="dotcraft-automation-viewer-tab__dot" />
291-
</span>
292-
)
273+
? <MousePointer2 size={14} strokeWidth={2} aria-hidden style={{ display: 'block', color: 'var(--accent)' }} />
293274
: browserTabIcon(tab.faviconDataUrl))
294275
: tab.kind === 'terminal'
295276
? <SquareTerminal size={14} strokeWidth={2} aria-hidden style={{ display: 'block' }} />

desktop/src/renderer/tests/MessageStream.test.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { LocaleProvider } from '../contexts/LocaleContext'
55
import { MessageStream } from '../components/conversation/MessageStream'
66
import { useConversationStore } from '../stores/conversationStore'
77
import { useThreadStore } from '../stores/threadStore'
8-
import { PLAN_IMPLEMENTATION_MESSAGE } from '../utils/planImplementation'
98
import type { ThreadGoal } from '../types/thread'
109
import type { FileDiff } from '../types/toolCall'
1110
import { installDesktopApiMock } from './desktopApiMock'
@@ -165,7 +164,7 @@ describe('MessageStream', () => {
165164
id: 'u1',
166165
type: 'userMessage',
167166
status: 'completed',
168-
text: PLAN_IMPLEMENTATION_MESSAGE,
167+
text: 'Implement the plan.',
169168
createdAt: new Date().toISOString()
170169
},
171170
{
@@ -181,7 +180,7 @@ describe('MessageStream', () => {
181180

182181
renderWithLocale(<MessageStream />)
183182

184-
expect(screen.getByText(PLAN_IMPLEMENTATION_MESSAGE)).toBeInTheDocument()
183+
expect(screen.getByText('Implement the plan.')).toBeInTheDocument()
185184
expect(screen.getByText('Executing accepted plan now.')).toBeInTheDocument()
186185
})
187186

desktop/src/renderer/tests/PlanApprovalComposer.test.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { useConnectionStore } from '../stores/connectionStore'
77
import { useConversationStore } from '../stores/conversationStore'
88
import { useThreadStore } from '../stores/threadStore'
99
import { useUIStore } from '../stores/uiStore'
10-
import { PLAN_IMPLEMENTATION_MESSAGE } from '../utils/planImplementation'
1110
import { installDesktopApiMock } from './desktopApiMock'
1211

1312
const appServerSendRequest = vi.fn()
@@ -148,7 +147,7 @@ describe('PlanApprovalComposer', () => {
148147
'turn/start',
149148
expect.objectContaining({
150149
threadId: 'thread-1',
151-
input: [{ type: 'text', text: PLAN_IMPLEMENTATION_MESSAGE }]
150+
input: [{ type: 'text', text: 'Implement the plan.' }]
152151
})
153152
)
154153
})
@@ -157,7 +156,7 @@ describe('PlanApprovalComposer', () => {
157156
expect(useConversationStore.getState().turns).toEqual([
158157
expect.objectContaining({
159158
id: 'turn-server-1',
160-
items: [expect.objectContaining({ type: 'userMessage', text: PLAN_IMPLEMENTATION_MESSAGE })]
159+
items: [expect.objectContaining({ type: 'userMessage', text: 'Implement the plan.' })]
161160
})
162161
])
163162
})
@@ -180,7 +179,7 @@ describe('PlanApprovalComposer', () => {
180179
'turn/start',
181180
expect.objectContaining({
182181
threadId: 'thread-1',
183-
input: [{ type: 'text', text: PLAN_IMPLEMENTATION_MESSAGE }]
182+
input: [{ type: 'text', text: 'Implement the plan.' }]
184183
})
185184
)
186185
})

desktop/src/renderer/utils/formatCompactCount.test.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,4 @@ describe('formatCompactCount', () => {
1515
])('formats %s as %s', (value, expected) => {
1616
expect(formatCompactCount(value)).toBe(expected)
1717
})
18-
19-
it.each([-1, Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY])(
20-
'treats invalid count %s as zero',
21-
(value) => {
22-
expect(formatCompactCount(value)).toBe('0')
23-
}
24-
)
2518
})

desktop/src/renderer/utils/formatCompactCount.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ const COMPACT_COUNT_UNITS = ['', 'k', 'M', 'B'] as const
22

33
/** Formats a non-negative count with decimal compact units and at most one decimal place. */
44
export function formatCompactCount(value: number): string {
5-
if (!Number.isFinite(value) || value < 0) return '0'
6-
75
const count = Math.round(value)
86
if (count < 1_000) return String(count)
97

desktop/src/renderer/utils/planImplementation.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)