From 5790a5d7cf85deda92bf2e58477558b4a4ebc726 Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Thu, 24 Apr 2025 11:36:34 -0700 Subject: Add a theme preview and update the theme when highlight changes. (#151) --- packages/cli/src/ui/components/ThemeDialog.tsx | 38 +++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'packages/cli/src/ui/components/ThemeDialog.tsx') diff --git a/packages/cli/src/ui/components/ThemeDialog.tsx b/packages/cli/src/ui/components/ThemeDialog.tsx index b3e4f063..62ede336 100644 --- a/packages/cli/src/ui/components/ThemeDialog.tsx +++ b/packages/cli/src/ui/components/ThemeDialog.tsx @@ -9,13 +9,21 @@ import { Box, Text } from 'ink'; import { Colors } from '../colors.js'; import { themeManager } from '../themes/theme-manager.js'; import { RadioButtonSelect } from './shared/RadioButtonSelect.js'; +import { DiffRenderer } from './messages/DiffRenderer.js'; +import { colorizeCode } from '../utils/CodeColorizer.js'; interface ThemeDialogProps { /** Callback function when a theme is selected */ onSelect: (themeName: string) => void; + + /** Callback function when a theme is highlighted */ + onHighlight: (themeName: string) => void; } -export function ThemeDialog({ onSelect }: ThemeDialogProps): React.JSX.Element { +export function ThemeDialog({ + onSelect, + onHighlight, +}: ThemeDialogProps): React.JSX.Element { const themeItems = themeManager.getAvailableThemes().map((theme) => ({ label: theme.active ? `${theme.name} (Active)` : theme.name, value: theme.name, @@ -38,12 +46,40 @@ export function ThemeDialog({ onSelect }: ThemeDialogProps): React.JSX.Element { items={themeItems} initialIndex={initialIndex} onSelect={onSelect} + onHighlight={onHighlight} /> (Use ↑/↓ arrows and Enter to select) + + + Preview + + {colorizeCode( + `# Source code +print("Hello, World!") +`, + 'python', + )} + + + + ); } -- cgit v1.2.3