import { useState, useEffect } from 'react'; import { Modal, Tabs, Text, Group, rem, Button, Box } from '@mantine/core'; import { Settings, Palette, SlidersHorizontal, GitBranch, Info, } from 'lucide-react'; import { GeneralTab } from '@/components/settings/GeneralTab'; import { VersionsTab } from '@/components/settings/VersionsTab'; import { AppearanceTab } from '@/components/settings/AppearanceTab'; import { AboutTab } from '@/components/settings/AboutTab'; import type { Screen } from '@/types'; interface SettingsModalProps { opened: boolean; onClose: () => void; currentScreen?: Screen; } export const SettingsModal = ({ opened, onClose, currentScreen, }: SettingsModalProps) => { const [activeTab, setActiveTab] = useState('general'); const showVersionsTab = currentScreen !== 'download' && currentScreen !== 'welcome'; useEffect(() => { if (!showVersionsTab && activeTab === 'versions') { setActiveTab('general'); } }, [showVersionsTab, activeTab]); useEffect(() => { if (opened) { setActiveTab('general'); const originalOverflow = document.body.style.overflow; const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; document.body.style.overflow = 'hidden'; document.body.style.paddingRight = `${scrollbarWidth}px`; return () => { document.body.style.overflow = originalOverflow; document.body.style.paddingRight = ''; }; } }, [opened]); return ( Settings } size="xl" centered lockScroll={false} styles={{ body: { height: '440px', padding: 0, display: 'flex', flexDirection: 'column', position: 'relative', }, content: { height: '500px', paddingBottom: 0, }, }} transitionProps={{ duration: 200, }} > value && setActiveTab(value)} orientation="vertical" variant="pills" styles={{ root: { flex: 1, minHeight: 0, }, panel: { height: '100%', overflow: 'auto', paddingLeft: '24px', paddingRight: '24px', }, tabLabel: { textAlign: 'left', justifyContent: 'flex-start', }, }} > } > General {showVersionsTab && ( } > Versions )} } > Appearance } > About {showVersionsTab && ( )} ); };