mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			59 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | 'use client' | ||
|  | import { | ||
|  |   RiComputerLine, | ||
|  |   RiMoonLine, | ||
|  |   RiSunLine, | ||
|  | } from '@remixicon/react' | ||
|  | import { useTheme } from 'next-themes' | ||
|  | import cn from '@/utils/classnames' | ||
|  | 
 | ||
|  | export type Theme = 'light' | 'dark' | 'system' | ||
|  | 
 | ||
|  | export default function ThemeSwitcher() { | ||
|  |   const { theme, setTheme } = useTheme() | ||
|  | 
 | ||
|  |   const handleThemeChange = (newTheme: Theme) => { | ||
|  |     setTheme(newTheme) | ||
|  |   } | ||
|  | 
 | ||
|  |   return ( | ||
|  |     <div className='flex items-center rounded-[10px] bg-components-segmented-control-bg-normal p-0.5'> | ||
|  |       <div | ||
|  |         className={cn( | ||
|  |           'rounded-lg px-2 py-1 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary', | ||
|  |           theme === 'system' && 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-sm hover:bg-components-segmented-control-item-active-bg hover:text-text-accent-light-mode-only', | ||
|  |         )} | ||
|  |         onClick={() => handleThemeChange('system')} | ||
|  |       > | ||
|  |         <div className='p-0.5'> | ||
|  |           <RiComputerLine className='h-4 w-4' /> | ||
|  |         </div> | ||
|  |       </div> | ||
|  |       <div className={cn('h-[14px] w-px bg-transparent', theme === 'dark' && 'bg-divider-regular')}></div> | ||
|  |       <div | ||
|  |         className={cn( | ||
|  |           'rounded-lg px-2 py-1 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary', | ||
|  |           theme === 'light' && 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-sm hover:bg-components-segmented-control-item-active-bg hover:text-text-accent-light-mode-only', | ||
|  |         )} | ||
|  |         onClick={() => handleThemeChange('light')} | ||
|  |       > | ||
|  |         <div className='p-0.5'> | ||
|  |           <RiSunLine className='h-4 w-4' /> | ||
|  |         </div> | ||
|  |       </div> | ||
|  |       <div className={cn('h-[14px] w-px bg-transparent', theme === 'system' && 'bg-divider-regular')}></div> | ||
|  |       <div | ||
|  |         className={cn( | ||
|  |           'rounded-lg px-2 py-1 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary', | ||
|  |           theme === 'dark' && 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-sm hover:bg-components-segmented-control-item-active-bg hover:text-text-accent-light-mode-only', | ||
|  |         )} | ||
|  |         onClick={() => handleThemeChange('dark')} | ||
|  |       > | ||
|  |         <div className='p-0.5'> | ||
|  |           <RiMoonLine className='h-4 w-4' /> | ||
|  |         </div> | ||
|  |       </div> | ||
|  |     </div> | ||
|  |   ) | ||
|  | } |