/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import React, { useMemo } from 'react'; import { Button, Dropdown } from '@douyinfe/semi-ui'; import { Sun, Moon, Monitor } from 'lucide-react'; import { useActualTheme } from '../../../context/Theme'; const ThemeToggle = ({ theme, onThemeToggle, t }) => { const actualTheme = useActualTheme(); const themeOptions = useMemo( () => [ { key: 'light', icon: , buttonIcon: , label: t('浅色模式'), description: t('始终使用浅色主题'), }, { key: 'dark', icon: , buttonIcon: , label: t('深色模式'), description: t('始终使用深色主题'), }, { key: 'auto', icon: , buttonIcon: , label: t('自动模式'), description: t('跟随系统主题设置'), }, ], [t], ); const getItemClassName = (isSelected) => isSelected ? '!bg-semi-color-primary-light-default !font-semibold' : 'hover:!bg-semi-color-fill-1'; const currentButtonIcon = useMemo(() => { const currentOption = themeOptions.find((option) => option.key === theme); return currentOption?.buttonIcon || themeOptions[2].buttonIcon; }, [theme, themeOptions]); return ( {themeOptions.map((option) => ( onThemeToggle(option.key)} className={getItemClassName(theme === option.key)} >
{option.label} {option.description}
))} {theme === 'auto' && ( <>
{t('当前跟随系统')}: {actualTheme === 'dark' ? t('深色') : t('浅色')}
)} } >