-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Expand file tree
/
Copy pathQuickSettingsContent.tsx
More file actions
112 lines (101 loc) · 3.51 KB
/
QuickSettingsContent.tsx
File metadata and controls
112 lines (101 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import { Moon, Sun } from 'lucide-react';
import { useTranslation } from 'react-i18next';
import { DarkModeToggle } from '../../../shared/view/ui';
import LanguageSelector from '../../../shared/view/ui/LanguageSelector';
import {
INPUT_SETTING_TOGGLES,
SETTING_ROW_CLASS,
TOOL_DISPLAY_TOGGLES,
VIEW_OPTION_TOGGLES,
} from '../constants';
import type {
PreferenceToggleItem,
PreferenceToggleKey,
QuickSettingsPreferences,
} from '../types';
import QuickSettingsSection from './QuickSettingsSection';
import QuickSettingsToggleRow from './QuickSettingsToggleRow';
import QuickSettingsTtsSection from './QuickSettingsTtsSection';
import QuickSettingsWhisperSection from './QuickSettingsWhisperSection';
import { useTts } from '../../../contexts/TtsContext';
function QuickSettingsTtsWrapper() {
const tts = useTts();
if (!tts) return null;
if (tts.availableVoices.length === 0) return null;
return (
<QuickSettingsTtsSection
enabled={tts.enabled}
onToggle={tts.toggle}
rate={tts.rate}
onRateChange={tts.setRate}
pitch={tts.pitch}
onPitchChange={tts.setPitch}
voiceURI={tts.voiceURI}
onVoiceChange={tts.setVoiceURI}
lang={tts.lang}
onLangChange={tts.setLang}
filteredVoices={tts.filteredVoices}
availableLanguages={tts.availableLanguages}
onTestVoice={tts.testVoice}
isSpeaking={tts.isSpeaking}
onStop={tts.stop}
/>
);
}
type QuickSettingsContentProps = {
isDarkMode: boolean;
isMobile: boolean;
preferences: QuickSettingsPreferences;
onPreferenceChange: (key: PreferenceToggleKey, value: boolean) => void;
};
export default function QuickSettingsContent({
isDarkMode,
isMobile,
preferences,
onPreferenceChange,
}: QuickSettingsContentProps) {
const { t } = useTranslation('settings');
const renderToggleRows = (items: PreferenceToggleItem[]) => (
items.map(({ key, labelKey, icon }) => (
<QuickSettingsToggleRow
key={key}
label={t(labelKey)}
icon={icon}
checked={preferences[key]}
onCheckedChange={(value) => onPreferenceChange(key, value)}
/>
))
);
return (
<div className={`flex-1 space-y-6 overflow-y-auto overflow-x-hidden bg-background p-4 ${isMobile ? 'pb-mobile-nav' : ''}`}>
<QuickSettingsSection title={t('quickSettings.sections.appearance')}>
<div className={SETTING_ROW_CLASS}>
<span className="flex items-center gap-2 text-sm text-gray-900 dark:text-white">
{isDarkMode ? (
<Moon className="h-4 w-4 text-gray-600 dark:text-gray-400" />
) : (
<Sun className="h-4 w-4 text-gray-600 dark:text-gray-400" />
)}
{t('quickSettings.darkMode')}
</span>
<DarkModeToggle />
</div>
<LanguageSelector compact />
</QuickSettingsSection>
<QuickSettingsSection title={t('quickSettings.sections.toolDisplay')}>
{renderToggleRows(TOOL_DISPLAY_TOGGLES)}
</QuickSettingsSection>
<QuickSettingsSection title={t('quickSettings.sections.viewOptions')}>
{renderToggleRows(VIEW_OPTION_TOGGLES)}
</QuickSettingsSection>
<QuickSettingsSection title={t('quickSettings.sections.inputSettings')}>
{renderToggleRows(INPUT_SETTING_TOGGLES)}
<p className="ml-3 text-xs text-gray-500 dark:text-gray-400">
{t('quickSettings.sendByCtrlEnterDescription')}
</p>
</QuickSettingsSection>
<QuickSettingsTtsWrapper />
<QuickSettingsWhisperSection />
</div>
);
}