import React, { useState, useRef } from 'react'; import * as Tabs from '@radix-ui/react-tabs'; import { MessageSquare, Command } from 'lucide-react'; import { SettingsTabValues } from 'librechat-data-provider'; import type { TDialogProps } from '~/common'; import { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild } from '@headlessui/react'; import { GearIcon, DataIcon, SpeechIcon, UserIcon, ExperimentIcon } from '~/components/svg'; import { General, Chat, Speech, Beta, Commands, Data, Account } from './SettingsTabs'; import { useMediaQuery, useLocalize, TranslationKeys } from '~/hooks'; import { cn } from '~/utils'; export default function Settings({ open, onOpenChange }: TDialogProps) { const isSmallScreen = useMediaQuery('(max-width: 767px)'); const localize = useLocalize(); const [activeTab, setActiveTab] = useState(SettingsTabValues.GENERAL); const tabRefs = useRef({}); const handleKeyDown = (event: React.KeyboardEvent) => { const tabs = [ SettingsTabValues.GENERAL, SettingsTabValues.CHAT, SettingsTabValues.BETA, SettingsTabValues.COMMANDS, SettingsTabValues.SPEECH, SettingsTabValues.DATA, SettingsTabValues.ACCOUNT, ]; const currentIndex = tabs.indexOf(activeTab); switch (event.key) { case 'ArrowDown': event.preventDefault(); setActiveTab(tabs[(currentIndex + 1) % tabs.length]); break; case 'ArrowUp': event.preventDefault(); setActiveTab(tabs[(currentIndex - 1 + tabs.length) % tabs.length]); break; case 'Home': event.preventDefault(); setActiveTab(tabs[0]); break; case 'End': event.preventDefault(); setActiveTab(tabs[tabs.length - 1]); break; } }; const settingsTabs: { value: SettingsTabValues; icon: React.JSX.Element; label: TranslationKeys }[] = [ { value: SettingsTabValues.GENERAL, icon: , label: 'com_nav_setting_general', }, { value: SettingsTabValues.CHAT, icon: , label: 'com_nav_setting_chat', }, { value: SettingsTabValues.BETA, icon: , label: 'com_nav_setting_beta', }, { value: SettingsTabValues.COMMANDS, icon: , label: 'com_nav_commands', }, { value: SettingsTabValues.SPEECH, icon: , label: 'com_nav_setting_speech', }, { value: SettingsTabValues.DATA, icon: , label: 'com_nav_setting_data', }, { value: SettingsTabValues.ACCOUNT, icon: , label: 'com_nav_setting_account', }, ]; const handleTabChange = (value: string) => { setActiveTab(value as SettingsTabValues); }; return ( ); }