feat: v0.6.0 light mode, command palette, dialogs, toasts
- Light mode with the house ☀/◐ toggle and lt_theme preference; light terminal palette; Claude runs with dark-ansi so its colours follow the palette; tmux and the statusLine use ANSI colours. - Command palette (⌕, Ctrl+Shift+P) with session, terminal, view, link and help commands. - .lt-modal dialogs for new/rename/end and a keyboard shortcuts sheet. - .lt-toast results for actions, uploads, copy and CI. - ttyd dropped the reply of fast one-shot commands; replies now wait for the browser to hang up, and the client hangs up as soon as it has one. - Sessions panel re-fetches after an action instead of reusing a stale poll. Closes #31 Closes #32 Closes #33 Closes #34 Closes #35 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+61
-26
@@ -15,30 +15,65 @@ const writeOnlyClipboard = {
|
||||
},
|
||||
};
|
||||
|
||||
// LotusGuild TDS tokens (web_template base.css :root) mapped onto the ANSI palette.
|
||||
export const THEME = Object.freeze({
|
||||
background: '#010304',
|
||||
foreground: '#c4d9ee',
|
||||
cursor: '#FF6B00',
|
||||
cursorAccent: '#010304',
|
||||
selectionBackground: 'rgba(0, 212, 255, 0.30)',
|
||||
selectionInactiveBackground: 'rgba(0, 212, 255, 0.15)',
|
||||
black: '#0d1520',
|
||||
red: '#FF2D55',
|
||||
green: '#00FF88',
|
||||
yellow: '#FFB300',
|
||||
blue: '#3A8DFF',
|
||||
magenta: '#BF5FFF',
|
||||
cyan: '#00D4FF',
|
||||
white: '#c4d9ee',
|
||||
brightBlack: '#3e607a',
|
||||
brightRed: '#FF5C7A',
|
||||
brightGreen: '#33FFAA',
|
||||
brightYellow: '#FFD700',
|
||||
brightBlue: '#6AA8FF',
|
||||
brightMagenta: '#D08CFF',
|
||||
brightCyan: '#33DFFF',
|
||||
brightWhite: '#FFFFFF',
|
||||
// Terminal palettes from the LotusGuild TDS tokens (devdesk#31).
|
||||
//
|
||||
// DevDesk runs Claude with its `dark-ansi` theme, so Claude draws with these 16
|
||||
// colours instead of fixed RGB: body text is bright white, secondary text is
|
||||
// white, the band behind your messages is bright black, and text on coloured
|
||||
// backgrounds is black. Claude's theme is per process and printed text keeps its
|
||||
// colours, so instead of switching Claude, the light palette inverts the grey
|
||||
// ramp: bright white is ink, white is muted ink, bright black a light band and
|
||||
// black the page. Anything written for dark terminals, Claude's scrollback
|
||||
// included, stays readable, and toggling is instant.
|
||||
export const THEMES = Object.freeze({
|
||||
dark: Object.freeze({
|
||||
background: '#010304',
|
||||
foreground: '#c4d9ee',
|
||||
cursor: '#FF6B00',
|
||||
cursorAccent: '#010304',
|
||||
selectionBackground: 'rgba(0, 212, 255, 0.30)',
|
||||
selectionInactiveBackground: 'rgba(0, 212, 255, 0.15)',
|
||||
black: '#0d1520',
|
||||
red: '#FF2D55',
|
||||
green: '#00FF88',
|
||||
yellow: '#FFB300',
|
||||
blue: '#3A8DFF',
|
||||
magenta: '#BF5FFF',
|
||||
cyan: '#00D4FF',
|
||||
white: '#9fb6cc',
|
||||
brightBlack: '#3e607a',
|
||||
brightRed: '#FF5C7A',
|
||||
brightGreen: '#33FFAA',
|
||||
brightYellow: '#FFD700',
|
||||
brightBlue: '#6AA8FF',
|
||||
brightMagenta: '#D08CFF',
|
||||
brightCyan: '#33DFFF',
|
||||
brightWhite: '#FFFFFF',
|
||||
}),
|
||||
light: Object.freeze({
|
||||
background: '#f4f6fa',
|
||||
foreground: '#16202e',
|
||||
cursor: '#c44e00',
|
||||
cursorAccent: '#f4f6fa',
|
||||
selectionBackground: 'rgba(0, 98, 184, 0.22)',
|
||||
selectionInactiveBackground: 'rgba(0, 98, 184, 0.12)',
|
||||
black: '#eef1f6',
|
||||
red: '#b5001f',
|
||||
green: '#006d35',
|
||||
yellow: '#8a5a00',
|
||||
blue: '#1f4fbf',
|
||||
magenta: '#6b2fb8',
|
||||
cyan: '#006b86',
|
||||
white: '#556578',
|
||||
brightBlack: '#c9d1dc',
|
||||
brightRed: '#cc1f3d',
|
||||
brightGreen: '#00803e',
|
||||
brightYellow: '#9a6400',
|
||||
brightBlue: '#0062b8',
|
||||
brightMagenta: '#7e3fd0',
|
||||
brightCyan: '#007f9e',
|
||||
brightWhite: '#16202e',
|
||||
}),
|
||||
});
|
||||
|
||||
export const FONT_FAMILY = '"JetBrains Mono", "Fira Code", "Cascadia Code", monospace';
|
||||
@@ -55,7 +90,7 @@ export async function loadFonts(size) {
|
||||
}
|
||||
}
|
||||
|
||||
export function createTerminal(container, { fontSize, onShiftEnter }) {
|
||||
export function createTerminal(container, { fontSize, theme = 'dark', onShiftEnter }) {
|
||||
const term = new Terminal({
|
||||
fontFamily: FONT_FAMILY,
|
||||
fontSize,
|
||||
@@ -65,7 +100,7 @@ export function createTerminal(container, { fontSize, onShiftEnter }) {
|
||||
allowProposedApi: true, // unicode11
|
||||
macOptionIsMeta: true,
|
||||
drawBoldTextInBrightColors: false,
|
||||
theme: THEME,
|
||||
theme: THEMES[theme],
|
||||
});
|
||||
|
||||
const fit = new FitAddon();
|
||||
|
||||
Reference in New Issue
Block a user