Skip to content

Commit fd5f7b0

Browse files
committed
refactor: share provider presentation metadata
1 parent 7aabf37 commit fd5f7b0

3 files changed

Lines changed: 58 additions & 22 deletions

File tree

src/dashboard.tsx

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { estimateContextBudget, discoverProjectCwd, type ContextBudget } from '.
1212
import { dateKey } from './day-aggregator.js'
1313
import { createTerminalProgressReporter } from './parse-progress.js'
1414
import { CompareView } from './compare.js'
15+
import { providerColor, providerLabel } from './provider-colors.js'
1516
import { join } from 'path'
1617

1718
type Period = 'today' | 'week' | '30days' | 'month' | 'all'
@@ -53,15 +54,6 @@ const PANEL_COLORS = {
5354
bash: '#F5A05B',
5455
}
5556

56-
const PROVIDER_COLORS: Record<string, string> = {
57-
claude: '#FF8C42',
58-
codex: '#5BF5A0',
59-
cursor: '#00B4D8',
60-
opencode: '#A78BFA',
61-
pi: '#F472B6',
62-
all: '#FF8C42',
63-
}
64-
6557
const CATEGORY_COLORS: Record<TaskCategory, string> = {
6658
coding: '#5B9EF5',
6759
debugging: '#F55B5B',
@@ -449,16 +441,6 @@ function BashBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; pw: n
449441
)
450442
}
451443

452-
const PROVIDER_DISPLAY_NAMES: Record<string, string> = {
453-
all: 'All',
454-
claude: 'Claude',
455-
codex: 'Codex',
456-
cursor: 'Cursor',
457-
opencode: 'OpenCode',
458-
pi: 'Pi',
459-
}
460-
function getProviderDisplayName(name: string): string { return PROVIDER_DISPLAY_NAMES[name] ?? name }
461-
462444
function PeriodTabs({ active, providerName, showProvider }: { active: Period; providerName?: string; showProvider?: boolean }) {
463445
return (
464446
<Box justifyContent="space-between" paddingX={1}>
@@ -469,9 +451,7 @@ function PeriodTabs({ active, providerName, showProvider }: { active: Period; pr
469451
</Text>
470452
))}
471453
</Box>
472-
{showProvider && providerName && (
473-
<Box><Text color={DIM}>| </Text><Text color={ORANGE} bold>[p]</Text><Text bold color={PROVIDER_COLORS[providerName] ?? ORANGE}> {getProviderDisplayName(providerName)}</Text></Box>
474-
)}
454+
{showProvider && providerName && <Box><Text color={DIM}>| </Text><Text color={ORANGE} bold>[p]</Text><Text bold color={providerColor(providerName)}> {providerLabel(providerName)}</Text></Box>}
475455
</Box>
476456
)
477457
}

src/provider-colors.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
export const PROVIDER_COLORS: Record<string, string> = {
2+
all: '#FF8C42',
3+
claude: '#FF8C42',
4+
codex: '#5BF5A0',
5+
cursor: '#00B4D8',
6+
opencode: '#A78BFA',
7+
pi: '#F472B6',
8+
copilot: '#6495ED',
9+
}
10+
11+
const PROVIDER_LABELS: Record<string, string> = {
12+
all: 'All',
13+
claude: 'Claude',
14+
codex: 'Codex',
15+
cursor: 'Cursor',
16+
opencode: 'OpenCode',
17+
pi: 'Pi',
18+
copilot: 'Copilot',
19+
}
20+
21+
export function providerLabel(name: string): string {
22+
return PROVIDER_LABELS[name] ?? name
23+
}
24+
25+
export function providerColor(name: string): string {
26+
return PROVIDER_COLORS[name] ?? '#CCCCCC'
27+
}

tests/provider-colors.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { describe, it, expect } from 'vitest'
2+
3+
import { PROVIDER_COLORS, providerColor, providerLabel } from '../src/provider-colors.js'
4+
5+
describe('provider presentation metadata', () => {
6+
it('exports the shared provider palette', () => {
7+
expect(PROVIDER_COLORS).toEqual({
8+
all: '#FF8C42',
9+
claude: '#FF8C42',
10+
codex: '#5BF5A0',
11+
cursor: '#00B4D8',
12+
opencode: '#A78BFA',
13+
pi: '#F472B6',
14+
copilot: '#6495ED',
15+
})
16+
})
17+
18+
it('maps provider names to labels', () => {
19+
expect(providerLabel('all')).toBe('All')
20+
expect(providerLabel('opencode')).toBe('OpenCode')
21+
expect(providerLabel('unknown')).toBe('unknown')
22+
})
23+
24+
it('maps provider names to colors with a neutral fallback', () => {
25+
expect(providerColor('all')).toBe('#FF8C42')
26+
expect(providerColor('opencode')).toBe('#A78BFA')
27+
expect(providerColor('unknown')).toBe('#CCCCCC')
28+
})
29+
})

0 commit comments

Comments
 (0)