Files
tkmind_go/ui/desktop/src/utils/settings.ts
T
2026-06-18 13:43:00 +00:00

118 lines
3.0 KiB
TypeScript

export interface ExternalGoosedConfig {
enabled: boolean;
url: string;
secret: string;
certFingerprint?: string;
}
export interface KeyboardShortcuts {
focusWindow: string | null;
quickLauncher: string | null;
newChat: string | null;
newChatWindow: string | null;
openDirectory: string | null;
settings: string | null;
find: string | null;
findNext: string | null;
findPrevious: string | null;
alwaysOnTop: string | null;
toggleNavigation: string | null;
}
export type DefaultKeyboardShortcuts = {
[K in keyof KeyboardShortcuts]: string;
};
export interface SessionSharingConfig {
enabled: boolean;
baseUrl: string;
}
export type LanguageSetting = 'system' | 'en' | 'es' | 'hi' | 'ja' | 'ko' | 'ru' | 'tr' | 'zh-CN';
export interface Settings {
// Desktop app settings
showMenuBarIcon: boolean;
showDockIcon: boolean;
enableWakelock: boolean;
enableNotifications: boolean;
spellcheckEnabled: boolean;
externalGoosed: ExternalGoosedConfig;
globalShortcut?: string | null;
keyboardShortcuts: KeyboardShortcuts;
// UI preferences (migrated from localStorage)
theme: 'dark' | 'light';
useSystemTheme: boolean;
language: LanguageSetting;
responseStyle: string;
showPricing: boolean;
sessionSharing: SessionSharingConfig;
seenAnnouncementIds: string[];
}
export type SettingKey = keyof Settings;
export const defaultKeyboardShortcuts: DefaultKeyboardShortcuts = {
focusWindow: 'CommandOrControl+Alt+G',
quickLauncher: 'CommandOrControl+Alt+Shift+G',
newChat: 'CommandOrControl+T',
newChatWindow: 'CommandOrControl+N',
openDirectory: 'CommandOrControl+O',
settings: 'CommandOrControl+,',
find: 'CommandOrControl+F',
findNext: 'CommandOrControl+G',
findPrevious: 'CommandOrControl+Shift+G',
alwaysOnTop: 'CommandOrControl+Shift+T',
toggleNavigation: 'CommandOrControl+/',
};
export const defaultSettings: Settings = {
// Desktop app settings
showMenuBarIcon: true,
showDockIcon: true,
enableWakelock: false,
enableNotifications: true,
spellcheckEnabled: true,
keyboardShortcuts: defaultKeyboardShortcuts,
externalGoosed: {
enabled: false,
url: '',
secret: '',
},
// UI preferences
theme: 'light',
useSystemTheme: true,
language: 'system',
responseStyle: 'concise',
showPricing: true,
sessionSharing: {
enabled: false,
baseUrl: '',
},
seenAnnouncementIds: [],
};
export function getKeyboardShortcuts(settings: Settings): KeyboardShortcuts {
if (!settings.keyboardShortcuts && settings.globalShortcut !== undefined) {
const focusShortcut = settings.globalShortcut;
let launcherShortcut: string | null = null;
if (focusShortcut) {
if (focusShortcut.includes('Shift')) {
launcherShortcut = focusShortcut;
} else {
launcherShortcut = focusShortcut.replace(/\+([Gg])$/, '+Shift+$1');
}
}
return {
...defaultKeyboardShortcuts,
focusWindow: focusShortcut,
quickLauncher: launcherShortcut,
};
}
return { ...defaultKeyboardShortcuts, ...settings.keyboardShortcuts };
}