Phase 2: Split pane terminals, custom themes, and password strength meter
Split Pane Layout: - Add SplitPaneManager with recursive tree-based pane splitting - Support horizontal (Cmd+Shift+E) and vertical (Cmd+Shift+D) splits - Draggable resize dividers with 100px minimum pane size - Hover-visible close button to unsplit panes - Session picker in new panes for connecting separate terminals - Automatic xterm refit on all pane resize operations Custom Terminal Themes: - Add themes.js with 8 preset colour schemes: Charcoal (default), Solarized Dark, Monokai, Nord, Dracula, One Dark, Gruvbox Dark, Tokyo Night - Add TerminalTheme preference to AppPreferences model - Add colour scheme selector to Settings → Terminal tab - Live-apply theme changes to all active terminals on save - TerminalManager now uses themed colours instead of hardcoded values Master Password Strength Meter: - Add visual strength bar to vault creation dialog - Entropy estimation based on length, character diversity, uniqueness - Four levels: Weak (red), Fair (amber), Good (green), Strong (green) - Animated transitions on strength changes - Charcoal-themed CSS matching modal design
This commit is contained in:
@@ -73,6 +73,12 @@ class Settings {
|
||||
try {
|
||||
await window.go.api.Service.SavePreferences(this._prefs);
|
||||
this.app.state.setPreferences(this._prefs);
|
||||
|
||||
// Apply terminal colour theme change immediately.
|
||||
if (this.app.terminals && this._prefs.terminalTheme) {
|
||||
this.app.terminals.applyTheme(this._prefs.terminalTheme);
|
||||
}
|
||||
|
||||
this.app.notifications.success('Settings saved');
|
||||
this.close();
|
||||
} catch (err) {
|
||||
@@ -205,6 +211,13 @@ class Settings {
|
||||
*/
|
||||
_renderTerminalTab(body) {
|
||||
const p = this._prefs;
|
||||
|
||||
// Terminal colour theme selector
|
||||
const themes = window.NexusTerminal.listTerminalThemes();
|
||||
body.appendChild(this._settingField('select', 'terminalTheme', 'Colour scheme', p.terminalTheme || 'charcoal', {
|
||||
options: themes,
|
||||
}));
|
||||
|
||||
body.appendChild(this._settingField('text', 'defaultFontFamily', 'Font family', p.defaultFontFamily, {
|
||||
placeholder: 'JetBrains Mono, Menlo, Monaco, Consolas, monospace',
|
||||
}));
|
||||
@@ -455,7 +468,7 @@ class Settings {
|
||||
};
|
||||
|
||||
const fields = [
|
||||
'theme', 'defaultProtocol', 'confirmOnClose', 'confirmOnDisconnect',
|
||||
'theme', 'terminalTheme', 'defaultProtocol', 'confirmOnClose', 'confirmOnDisconnect',
|
||||
'showStatusBar', 'sidebarWidth', 'defaultFontFamily', 'defaultFontSize',
|
||||
'defaultScrollback', 'defaultCursorStyle',
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user