qwen-code/packages/web-shell/client/themeContext.ts
ytahdn c61006b978
feat(web-shell): daemon web-shell improvements — token usage, settings, retry, streaming metrics, hidden commands (#5066)
* feat(web-shell): daemon web-shell improvements

- Align daemon token usage with structured DaemonTokenUsage type
- Optimize settings panel with i18n, theme/language pickers, compact mode
- Handle missing session recovery (404/410) with configurable behavior
- Restore settings event signal bump for workspace changes
- Prevent queued prompt loss on useEffect dependency change
- Align streaming loading indicator with CLI metrics logic
- Add Ctrl+Y retry for turn_error with daemon support
- Hide non-essential UI elements on narrow screens (≤700px)
- Prevent loading indicator flicker on page refresh
- Hydrate displayName from persisted session title on load

* fix(web-shell): harden retry affordance

* fix(web-shell): gate retry handling

---------

Co-authored-by: ytahdn <ytahdn@gmail.com>
2026-06-13 02:58:08 +00:00

40 lines
1.1 KiB
TypeScript

import { createContext, useContext } from 'react';
export const WebShellThemeId = {
Dark: 'dark',
Light: 'light',
} as const;
export type WebShellTheme =
(typeof WebShellThemeId)[keyof typeof WebShellThemeId];
export const WEB_SHELL_THEMES: readonly WebShellTheme[] = [
WebShellThemeId.Dark,
WebShellThemeId.Light,
];
const ThemeContext = createContext<WebShellTheme>(WebShellThemeId.Dark);
export const ThemeProvider = ThemeContext.Provider;
export function useTheme(): WebShellTheme {
return useContext(ThemeContext);
}
export const THEME_SETTING_KEY = 'ui.theme';
export const LANGUAGE_SETTING_KEY = 'general.language';
export function themeSettingToWebShellTheme(
value: unknown,
fallback?: WebShellTheme,
): WebShellTheme | undefined {
if (value === WebShellThemeId.Light || value === 'Qwen Light')
return WebShellThemeId.Light;
if (value === WebShellThemeId.Dark || value === 'Qwen Dark')
return WebShellThemeId.Dark;
return fallback;
}
export function webShellThemeToSettingValue(theme: WebShellTheme): string {
return theme === WebShellThemeId.Light ? 'Qwen Light' : 'Qwen Dark';
}