+ {/* Drop indicator overlay */}
+ {isOver && isDropTarget && (
+
+ )}
+
+ {/* Header bar with drag handle - uses app theme CSS variables */}
+
+ {/* Drag handle */}
+
+
+ {/* Terminal icon and label */}
+
+
+
+ bash
+
+ {/* Font size indicator - only show when not default */}
+ {fontSize !== DEFAULT_FONT_SIZE && (
+
+ )}
+
+
+ {/* Zoom and action buttons */}
+
+ {/* Zoom controls */}
+
+
+
+
+
+ {/* Split/close buttons */}
+
+
+
+
+
+
+ {/* Terminal container - uses terminal theme */}
+
+
+ );
+}
diff --git a/apps/app/src/config/terminal-themes.ts b/apps/app/src/config/terminal-themes.ts
new file mode 100644
index 00000000..eb85a203
--- /dev/null
+++ b/apps/app/src/config/terminal-themes.ts
@@ -0,0 +1,367 @@
+/**
+ * Terminal themes that match the app themes
+ * Each theme provides colors for xterm.js terminal emulator
+ */
+
+import type { ThemeMode } from "@/store/app-store";
+
+export interface TerminalTheme {
+ background: string;
+ foreground: string;
+ cursor: string;
+ cursorAccent: string;
+ selectionBackground: string;
+ selectionForeground?: string;
+ black: string;
+ red: string;
+ green: string;
+ yellow: string;
+ blue: string;
+ magenta: string;
+ cyan: string;
+ white: string;
+ brightBlack: string;
+ brightRed: string;
+ brightGreen: string;
+ brightYellow: string;
+ brightBlue: string;
+ brightMagenta: string;
+ brightCyan: string;
+ brightWhite: string;
+}
+
+// Dark theme (default)
+const darkTheme: TerminalTheme = {
+ background: "#0a0a0a",
+ foreground: "#d4d4d4",
+ cursor: "#d4d4d4",
+ cursorAccent: "#0a0a0a",
+ selectionBackground: "#264f78",
+ black: "#1e1e1e",
+ red: "#f44747",
+ green: "#6a9955",
+ yellow: "#dcdcaa",
+ blue: "#569cd6",
+ magenta: "#c586c0",
+ cyan: "#4ec9b0",
+ white: "#d4d4d4",
+ brightBlack: "#808080",
+ brightRed: "#f44747",
+ brightGreen: "#6a9955",
+ brightYellow: "#dcdcaa",
+ brightBlue: "#569cd6",
+ brightMagenta: "#c586c0",
+ brightCyan: "#4ec9b0",
+ brightWhite: "#ffffff",
+};
+
+// Light theme
+const lightTheme: TerminalTheme = {
+ background: "#ffffff",
+ foreground: "#383a42",
+ cursor: "#383a42",
+ cursorAccent: "#ffffff",
+ selectionBackground: "#add6ff",
+ black: "#383a42",
+ red: "#e45649",
+ green: "#50a14f",
+ yellow: "#c18401",
+ blue: "#4078f2",
+ magenta: "#a626a4",
+ cyan: "#0184bc",
+ white: "#fafafa",
+ brightBlack: "#4f525e",
+ brightRed: "#e06c75",
+ brightGreen: "#98c379",
+ brightYellow: "#e5c07b",
+ brightBlue: "#61afef",
+ brightMagenta: "#c678dd",
+ brightCyan: "#56b6c2",
+ brightWhite: "#ffffff",
+};
+
+// Retro / Cyberpunk theme - neon green on black
+const retroTheme: TerminalTheme = {
+ background: "#000000",
+ foreground: "#39ff14",
+ cursor: "#39ff14",
+ cursorAccent: "#000000",
+ selectionBackground: "#39ff14",
+ selectionForeground: "#000000",
+ black: "#000000",
+ red: "#ff0055",
+ green: "#39ff14",
+ yellow: "#ffff00",
+ blue: "#00ffff",
+ magenta: "#ff00ff",
+ cyan: "#00ffff",
+ white: "#39ff14",
+ brightBlack: "#555555",
+ brightRed: "#ff5555",
+ brightGreen: "#55ff55",
+ brightYellow: "#ffff55",
+ brightBlue: "#55ffff",
+ brightMagenta: "#ff55ff",
+ brightCyan: "#55ffff",
+ brightWhite: "#ffffff",
+};
+
+// Dracula theme
+const draculaTheme: TerminalTheme = {
+ background: "#282a36",
+ foreground: "#f8f8f2",
+ cursor: "#f8f8f2",
+ cursorAccent: "#282a36",
+ selectionBackground: "#44475a",
+ black: "#21222c",
+ red: "#ff5555",
+ green: "#50fa7b",
+ yellow: "#f1fa8c",
+ blue: "#bd93f9",
+ magenta: "#ff79c6",
+ cyan: "#8be9fd",
+ white: "#f8f8f2",
+ brightBlack: "#6272a4",
+ brightRed: "#ff6e6e",
+ brightGreen: "#69ff94",
+ brightYellow: "#ffffa5",
+ brightBlue: "#d6acff",
+ brightMagenta: "#ff92df",
+ brightCyan: "#a4ffff",
+ brightWhite: "#ffffff",
+};
+
+// Nord theme
+const nordTheme: TerminalTheme = {
+ background: "#2e3440",
+ foreground: "#d8dee9",
+ cursor: "#d8dee9",
+ cursorAccent: "#2e3440",
+ selectionBackground: "#434c5e",
+ black: "#3b4252",
+ red: "#bf616a",
+ green: "#a3be8c",
+ yellow: "#ebcb8b",
+ blue: "#81a1c1",
+ magenta: "#b48ead",
+ cyan: "#88c0d0",
+ white: "#e5e9f0",
+ brightBlack: "#4c566a",
+ brightRed: "#bf616a",
+ brightGreen: "#a3be8c",
+ brightYellow: "#ebcb8b",
+ brightBlue: "#81a1c1",
+ brightMagenta: "#b48ead",
+ brightCyan: "#8fbcbb",
+ brightWhite: "#eceff4",
+};
+
+// Monokai theme
+const monokaiTheme: TerminalTheme = {
+ background: "#272822",
+ foreground: "#f8f8f2",
+ cursor: "#f8f8f2",
+ cursorAccent: "#272822",
+ selectionBackground: "#49483e",
+ black: "#272822",
+ red: "#f92672",
+ green: "#a6e22e",
+ yellow: "#f4bf75",
+ blue: "#66d9ef",
+ magenta: "#ae81ff",
+ cyan: "#a1efe4",
+ white: "#f8f8f2",
+ brightBlack: "#75715e",
+ brightRed: "#f92672",
+ brightGreen: "#a6e22e",
+ brightYellow: "#f4bf75",
+ brightBlue: "#66d9ef",
+ brightMagenta: "#ae81ff",
+ brightCyan: "#a1efe4",
+ brightWhite: "#f9f8f5",
+};
+
+// Tokyo Night theme
+const tokyonightTheme: TerminalTheme = {
+ background: "#1a1b26",
+ foreground: "#a9b1d6",
+ cursor: "#c0caf5",
+ cursorAccent: "#1a1b26",
+ selectionBackground: "#33467c",
+ black: "#15161e",
+ red: "#f7768e",
+ green: "#9ece6a",
+ yellow: "#e0af68",
+ blue: "#7aa2f7",
+ magenta: "#bb9af7",
+ cyan: "#7dcfff",
+ white: "#a9b1d6",
+ brightBlack: "#414868",
+ brightRed: "#f7768e",
+ brightGreen: "#9ece6a",
+ brightYellow: "#e0af68",
+ brightBlue: "#7aa2f7",
+ brightMagenta: "#bb9af7",
+ brightCyan: "#7dcfff",
+ brightWhite: "#c0caf5",
+};
+
+// Solarized Dark theme
+const solarizedTheme: TerminalTheme = {
+ background: "#002b36",
+ foreground: "#839496",
+ cursor: "#839496",
+ cursorAccent: "#002b36",
+ selectionBackground: "#073642",
+ black: "#073642",
+ red: "#dc322f",
+ green: "#859900",
+ yellow: "#b58900",
+ blue: "#268bd2",
+ magenta: "#d33682",
+ cyan: "#2aa198",
+ white: "#eee8d5",
+ brightBlack: "#002b36",
+ brightRed: "#cb4b16",
+ brightGreen: "#586e75",
+ brightYellow: "#657b83",
+ brightBlue: "#839496",
+ brightMagenta: "#6c71c4",
+ brightCyan: "#93a1a1",
+ brightWhite: "#fdf6e3",
+};
+
+// Gruvbox Dark theme
+const gruvboxTheme: TerminalTheme = {
+ background: "#282828",
+ foreground: "#ebdbb2",
+ cursor: "#ebdbb2",
+ cursorAccent: "#282828",
+ selectionBackground: "#504945",
+ black: "#282828",
+ red: "#cc241d",
+ green: "#98971a",
+ yellow: "#d79921",
+ blue: "#458588",
+ magenta: "#b16286",
+ cyan: "#689d6a",
+ white: "#a89984",
+ brightBlack: "#928374",
+ brightRed: "#fb4934",
+ brightGreen: "#b8bb26",
+ brightYellow: "#fabd2f",
+ brightBlue: "#83a598",
+ brightMagenta: "#d3869b",
+ brightCyan: "#8ec07c",
+ brightWhite: "#ebdbb2",
+};
+
+// Catppuccin Mocha theme
+const catppuccinTheme: TerminalTheme = {
+ background: "#1e1e2e",
+ foreground: "#cdd6f4",
+ cursor: "#f5e0dc",
+ cursorAccent: "#1e1e2e",
+ selectionBackground: "#45475a",
+ black: "#45475a",
+ red: "#f38ba8",
+ green: "#a6e3a1",
+ yellow: "#f9e2af",
+ blue: "#89b4fa",
+ magenta: "#cba6f7",
+ cyan: "#94e2d5",
+ white: "#bac2de",
+ brightBlack: "#585b70",
+ brightRed: "#f38ba8",
+ brightGreen: "#a6e3a1",
+ brightYellow: "#f9e2af",
+ brightBlue: "#89b4fa",
+ brightMagenta: "#cba6f7",
+ brightCyan: "#94e2d5",
+ brightWhite: "#a6adc8",
+};
+
+// One Dark theme
+const onedarkTheme: TerminalTheme = {
+ background: "#282c34",
+ foreground: "#abb2bf",
+ cursor: "#528bff",
+ cursorAccent: "#282c34",
+ selectionBackground: "#3e4451",
+ black: "#282c34",
+ red: "#e06c75",
+ green: "#98c379",
+ yellow: "#e5c07b",
+ blue: "#61afef",
+ magenta: "#c678dd",
+ cyan: "#56b6c2",
+ white: "#abb2bf",
+ brightBlack: "#5c6370",
+ brightRed: "#e06c75",
+ brightGreen: "#98c379",
+ brightYellow: "#e5c07b",
+ brightBlue: "#61afef",
+ brightMagenta: "#c678dd",
+ brightCyan: "#56b6c2",
+ brightWhite: "#ffffff",
+};
+
+// Synthwave '84 theme
+const synthwaveTheme: TerminalTheme = {
+ background: "#262335",
+ foreground: "#ffffff",
+ cursor: "#ff7edb",
+ cursorAccent: "#262335",
+ selectionBackground: "#463465",
+ black: "#262335",
+ red: "#fe4450",
+ green: "#72f1b8",
+ yellow: "#fede5d",
+ blue: "#03edf9",
+ magenta: "#ff7edb",
+ cyan: "#03edf9",
+ white: "#ffffff",
+ brightBlack: "#614d85",
+ brightRed: "#fe4450",
+ brightGreen: "#72f1b8",
+ brightYellow: "#f97e72",
+ brightBlue: "#03edf9",
+ brightMagenta: "#ff7edb",
+ brightCyan: "#03edf9",
+ brightWhite: "#ffffff",
+};
+
+// Theme mapping
+const terminalThemes: Record