From 5790a5d7cf85deda92bf2e58477558b4a4ebc726 Mon Sep 17 00:00:00 2001
From: Jacob Richman <jacob314@gmail.com>
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}
       />
       <Box marginTop={1}>
         <Text color={Colors.SubtleComment}>
           (Use ↑/↓ arrows and Enter to select)
         </Text>
       </Box>
+
+      <Box marginTop={1} flexDirection="column">
+        <Text bold>Preview</Text>
+        <Box
+          borderStyle="single"
+          borderColor={Colors.SubtleComment}
+          padding={1}
+          flexDirection="column"
+        >
+          {colorizeCode(
+            `# Source code
+print("Hello, World!")
+`,
+            'python',
+          )}
+          <Box marginTop={1} />
+          <DiffRenderer
+            diffContent={`--- a/old_file.txt
++++ b/new_file.txt
+@@ -1,4 +1,5 @@
+ This is a context line.
+-This line was deleted.
++This line was added.
+`}
+          />
+        </Box>
+      </Box>
     </Box>
   );
 }
-- 
cgit v1.2.3

