import * as Tabs from '@radix-ui/react-tabs'; import { SettingsTabValues } from 'librechat-data-provider'; import React, { useState, useRef } from 'react'; import { useRecoilState } from 'recoil'; import { Lightbulb, Cog } from 'lucide-react'; import { useOnClickOutside, useMediaQuery } from '~/hooks'; import store from '~/store'; import { cn } from '~/utils'; import ConversationModeSwitch from './ConversationModeSwitch'; import { TextToSpeechSwitch, EngineTTSDropdown, AutomaticPlayback, CacheTTSSwitch, VoiceDropdown, PlaybackRate, } from './TTS'; import { DecibelSelector, EngineSTTDropdown, SpeechToTextSwitch, AutoSendTextSwitch, AutoTranscribeAudioSwitch, } from './STT'; function Speech() { const isSmallScreen = useMediaQuery('(max-width: 767px)'); const [advancedMode, setAdvancedMode] = useRecoilState(store.advancedMode); const [autoTranscribeAudio] = useRecoilState(store.autoTranscribeAudio); const [confirmClear, setConfirmClear] = useState(false); const contentRef = useRef(null); useOnClickOutside(contentRef, () => confirmClear && setConfirmClear(false), []); return (
setAdvancedMode(false)} className={cn( 'group m-1 flex items-center justify-center gap-2 rounded-md px-4 py-2 text-sm text-black transition-all duration-200 ease-in-out radix-state-active:bg-white radix-state-active:text-black dark:text-white dark:radix-state-active:bg-gray-600', isSmallScreen ? 'flex-row items-center justify-center text-sm text-gray-700 radix-state-active:bg-gray-100 radix-state-active:text-black dark:text-gray-300 dark:radix-state-active:text-white' : 'bg-white radix-state-active:bg-gray-100 dark:bg-gray-700', 'w-full', )} value="simple" style={{ userSelect: 'none' }} > Simple setAdvancedMode(true)} className={cn( 'group m-1 flex items-center justify-center gap-2 rounded-md px-4 py-2 text-sm text-black transition-all duration-200 ease-in-out radix-state-active:bg-white radix-state-active:text-black dark:text-white dark:radix-state-active:bg-gray-600', isSmallScreen ? 'flex-row items-center justify-center text-sm text-gray-700 radix-state-active:bg-gray-100 radix-state-active:text-black dark:text-gray-300 dark:radix-state-active:text-white' : 'bg-white radix-state-active:bg-gray-100 dark:bg-gray-700', 'w-full', )} value="advanced" style={{ userSelect: 'none' }} > Advanced
{autoTranscribeAudio && (
)}
); } export default React.memo(Speech);