-
-
Notifications
You must be signed in to change notification settings - Fork 351
Add Light Mode Support #450
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev-1.10.0
Are you sure you want to change the base?
Conversation
|
I have a problem staying focued on dark mode ... probably because I can't see worth a crap after 40. Please let me know if i missed anything or you'd like anything tweeked. |
7ab4391 to
9ffbf6f
Compare
|
Boy did I ever come at that wrong. I could have walked into an unlocked front door, but decided it would be easier to dig a tunel from the street into the basement ¯\_(ツ)_/¯ ... All that said, this is probably feature complete. Its possible I missed something or didn't dig deep enoug into a sub menu to find something that did't quite work. (60f6243 turns out to be just such a miss). let me know if you have any questions or need a change. |
|
Also, i've changed your PR to use the latest dev-x.x.x version. This includes several new features like RBAC/Docker, which all added new components. Would you mind updating the new files, and resolving some of the merge conflicts that came with it? |
f4641c9 to
01a2223
Compare
Implements full light/dark mode support across the entire Termix application
with automatic theme switching, semantic CSS variables, and theme-aware
components for both desktop and mobile platforms.
- Added comprehensive semantic CSS variable system with light/dark variants
- Light mode (:root): 30+ semantic variables for backgrounds, borders, text
- Dark mode (.dark): Full override set maintaining visual consistency
- Theme-aware scrollbar styling with CSS custom properties
- Semantic color mappings: bg-canvas, bg-elevated, bg-surface, etc.
- Text color semantics: foreground-secondary, foreground-subtle
- Border semantics: border-edge, border-edge-panel, etc.
- Added termixDark and termixLight terminal theme variants
- Auto-switching "termix" theme adapts to app theme (light/dark/system)
- Full ANSI color palette optimized for both light and dark backgrounds
- Seamless integration with xterm.js terminal emulator
- Desktop Terminal: Auto-switches theme based on app settings
- TerminalPreview: Theme-aware preview in settings
- Terminal wrapper backgrounds match terminal theme colors
- AppView: Dynamic background calculation for terminal containers
- TopNavbar: Theme-aware backgrounds and borders
- LeftSidebar: Semantic background and text colors
- Tab system: Contrasting borders (white in dark, near-black in light)
- Tab backgrounds: Active/inactive states with proper theming
- Host cards: Theme-aware containers and hover states
- Dashboard: Themed panels, widgets, and update log
- Server Stats: All 8 widgets (CPU, Memory, Disk, Network, Uptime, Processes, System, LoginStats)
- File Manager: Grid, sidebar, context menus, dialogs all themed
- Host Manager: Editor and viewer with semantic colors
- Credentials Manager: Editor, selector, viewer themed
- Admin Settings: Restructured with card-based layout
- Command Palette: Theme-aware search interface
- SSH Tools: Sidebar and tools themed
- Auth forms: Login/signup with theme-aware inputs
- User Profile: Complete redesign with tabbed interface
- Password Reset: Themed form components
- Electron login: Theme-aware electron-specific auth
- SSHAuthDialog: Themed authentication prompts
- TOTPDialog: Two-factor auth themed
- FolderEditDialog: Theme-aware folder management
- CompressDialog, PermissionsDialog: All dialogs themed
- DiffViewer: Code diff with theme support
- Terminal: Auto-switches between termixDark/termixLight
- Keyboard: New kb-light-theme.css for light mode keyboard
- TerminalKeyboard: Dynamic theme class switching
- Full ANSI color support matching desktop
- MobileApp: Theme-aware container backgrounds
- BottomNavbar: Themed navigation bar
- LeftSidebar: Mobile sidebar with semantic colors
- Host cards: Consistent theming with desktop
- Auth: Mobile authentication themed
- Navigation hosts: FolderCard and Host themed
- All navigation components using semantic classes
- Alert: Descriptions use text-foreground for readability
- Badge: Theme-aware badge variants
- Button: Enhanced theming for all variants
- Input: White background in light mode, proper dark mode
- Resizable: Theme-aware resize handles
Replaced all hard-coded dark mode classes with semantic alternatives:
- bg-dark-bg → bg-background / bg-canvas
- bg-dark-bg-darker → bg-bg-elevated
- bg-dark-bg-panel → bg-bg-surface
- border-dark-border → border-border-base / border-edge
- text-dark-text-secondary → text-muted-foreground
- hover:bg-dark-hover → hover:bg-bg-hover / hover:bg-accent
- useTheme hook integration across all themed components
- System theme detection: window.matchMedia("(prefers-color-scheme: dark)")
- Theme context properly propagated to all components
- CSS custom properties for runtime theme switching
- Eliminated all hardcoded hex colors from component classes
- Maintained exact visual appearance in dark mode
- Clean, accessible light mode with proper contrast ratios
**New Files:**
- src/ui/mobile/apps/terminal/kb-light-theme.css
**Modified Core:**
- src/index.css (224 line changes)
- src/constants/terminal-themes.ts (57 additions)
- src/main.tsx (theme initialization)
**Modified Desktop (46 files):**
- Apps: Terminal, FileManager, Server, Dashboard, HostManager, Credentials
- Navigation: TopNavbar, LeftSidebar, AppView, Tab, TabDropdown
- Auth: Auth.tsx, ElectronLoginForm.tsx
- User: UserProfile, PasswordReset, ElectronVersionCheck
- Widgets: All 8 server stat widgets
- Dialogs: SSH, TOTP, Folder, Compress, Permissions, Diff
**Modified Mobile (18 files):**
- Terminal, Keyboard, MobileApp
- Navigation: BottomNavbar, LeftSidebar
- Auth, Host cards, Folder cards
**Modified UI Components:**
- alert.tsx, badge.tsx, button.tsx, input.tsx, resizable.tsx
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
CodeMirror editors for private and public key inputs now automatically switch between dark (oneDark) and light (githubLight) themes based on the application theme setting. Changes: - Install @uiw/codemirror-theme-github package - Import githubLight theme and useTheme hook - Add theme detection logic (dark/light/system) - Replace hard-coded oneDark theme with dynamic editorTheme variable - Apply theme to both private key and public key editors Fixes CodeMirror appearing in dark mode regardless of app theme setting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Changed only the --background variable from #18181b to #09090b to match the Termix main branch login page background color. Changes: - .dark --background: #18181b → #09090b 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Changed the sidebar background color from #27272a to #18181b in dark mode. Changes: - .dark --sidebar: #27272a → #18181b 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Changed the muted background color (used by tab bars) from #3f3f46 to #27272a in dark mode. Changes: - .dark --muted: #3f3f46 → #27272a Affects: bg-muted class used by tabs, button bars, and muted UI elements. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Changed the card background color (used by alerts and cards) from #27272a to #18181b in dark mode. Changes: - .dark --card: #27272a → #18181b Affects: bg-card class used by Alert components, Card components, and other card-based UI elements. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Changed the primary text color from #ffffff to #fafafa in dark mode to match card and alert text colors. Changes: - .dark --foreground: #ffffff → #fafafa Affects: All primary text using text-foreground class including body text, alert descriptions, and general UI text elements. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
…anch Changed alert description text from text-foreground to text-muted-foreground to match the styling in Termix-Main branch for consistent muted text appearance in alert components. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Changed toggle/switch background from transparent white (#ffffff26) to solid #18181b to match main branch toggle styling. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Changed import from @/ui/desktop/apps/server/Server.tsx to @/ui/desktop/apps/server-stats/ServerStats.tsx to match the actual file structure after rebase. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
bd96aeb to
3112ebf
Compare
|
@LukeGus I've addressed the visual inconsistancies. If you find any more feel free to apply your prefered colors to the variables/classes. Virtually all of the inconsistencies were from poor conversions of oklch() conversions to hex. The PR's been rebased onto Termix-SSH:dev-1.10.0, and while i didn't find anything that stood out as an immediat issue all other added features need testing and it absolutely should have another set of eyes or two to ensure there are no visual regressions. |





Overview
This PR implements light mode support for Termix, adding a comprehensive theme system that enables automatic switching between light and dark modes based on user preference or system settings.
What's Changed
Theme Infrastructure
index.csswith separate definitions for light (:root) and dark (.dark) modestermixDarkandtermixLightvariants with optimized ANSI color palettes for each modeComponent Updates
Updated components across desktop and mobile to use semantic CSS classes instead of hard-coded dark mode values:
Desktop (~46 files)
Mobile (~18 files)
kb-light-theme.cssfor mobile keyboardUI Components
Technical Approach
bg-dark-*,border-dark-*) with semantic alternatives (bg-canvas,bg-elevated,border-edge)useThemehook for runtime theme detectionwindow.matchMedia("(prefers-color-scheme: dark)")Files Changed
72 files changed: 1,278 additions, 602 deletions
Class Migration Reference
Background Classes
bg-dark-bgbg-canvas#fcfcfc#18181bbg-dark-bg-darkerbg-canvas#fcfcfc#18181bbg-dark-bg-darkestbg-deepest#e5e7eb#09090bbg-dark-bg-panelbg-surface#f3f4f6#1b1b1ebg-dark-bg-inputbg-field#ffffff#222225bg-dark-bg-buttonbg-button#f3f4f6#23232abg-dark-bg-activebg-active#e5e7eb#1d1d1fbg-dark-bg-headerbg-header#eeeeef#131316bg-dark-hoverbg-hover#f3f4f6#2d2d30bg-dark-bg-panel-hoverbg-surface-hover#e5e7eb#232327bg-dark-bg-lightbg-light#fafafa#141416bg-dark-bg-very-lightbg-subtle#f5f5f5#101014bg-dark-activebg-interact#d1d5db#2a2a2cbg-dark-hover-altbg-hover-alt#e5e7eb#2a2a2dbg-dark-pressedbg-pressed#d1d5db#1a1a1cbg-elevated#ffffff#0e0e10Border Classes
border-dark-borderborder-edge#e5e7eb#303032border-dark-border-panelborder-edge-panel#d1d5db#222224border-dark-border-lightborder-edge-subtle#f3f4f6#5a5a5dborder-dark-border-mediumborder-edge-medium#d1d5db#373739border-dark-border-hoverborder-edge-hover#d1d5db#434345border-dark-border-activeborder-edge-active#9ca3af#2d2d30Text Classes
text-whitetext-foreground#18181b#fafafatext-gray-300text-foreground-secondary#334155#d1d5dbtext-gray-400text-muted-foreground#71717a#9ca3aftext-gray-500text-foreground-subtle#94a3b8#6b7280text-dark-text-secondarytext-muted-foreground#71717a#9ca3afScrollbar Styling
--scrollbar-thumb#c1c1c3#434345--scrollbar-thumb-hover#a1a1a3#5a5a5d--scrollbar-track#f3f4f6#18181bCore shadcn/ui Variables (Also Updated)
--background#ffffff#09090b--foreground#18181b#fafafa--card#ffffff#18181b--muted#f4f4f5#27272a--sidebar#f9f9f9#18181b--input#e4e4e7#ffffff26Usage Examples
Before:
After:
Tabs Example:
Notes
Testing Suggestions
Co-Authored-By: Claude Sonnet 4.5 [email protected]