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 (
);
}