import React, { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Check, ChevronDown, Volume2, Music, Mic, Radio } from 'lucide-react'; import { cn } from '@/public/lib/utils'; interface SettingsTabContentProps { onSettingChange?: (key: string, value: any) => void; } interface SettingOption { label: string; value: string; } const modeOptions: SettingOption[] = [ { label: 'Auto Mode', value: 'auto' }, { label: 'Manual Mode', value: 'manual' }, ]; const resolutionOptions: SettingOption[] = [ { label: '720P', value: '720p' }, { label: '1080P', value: '1080p' }, ]; const overlayOptions: SettingOption[] = [ { label: 'None', value: 'none' }, { label: 'Light Leaks', value: 'light_leaks' }, { label: 'Film Grain', value: 'film_grain' }, { label: 'Dust', value: 'dust' }, ]; const transitionOptions: SettingOption[] = [ { label: 'None', value: 'none' }, { label: 'Dynamic Cut', value: 'dynamic_cut' }, { label: 'Zoom Pop', value: 'zoom_pop' }, { label: 'Smooth Fade', value: 'smooth_fade' }, ]; const subtitleOptions: SettingOption[] = [ { label: 'None', value: 'none' }, { label: 'Hormozi', value: 'hormozi' }, { label: 'Castor', value: 'castor' }, { label: 'Modern', value: 'modern' }, ]; const watermarkOptions: SettingOption[] = [ { label: 'None', value: 'none' }, { label: 'Simple', value: 'simple' }, { label: 'Branded', value: 'branded' }, ]; const textEffectOptions: SettingOption[] = [ { label: 'Minimal', value: 'minimal' }, { label: 'Plain', value: 'plain' }, { label: 'Dramatic', value: 'dramatic' }, { label: 'Corporate', value: 'corporate' }, ]; export function SettingsTabContent({ onSettingChange }: SettingsTabContentProps) { const [selectedMode, setSelectedMode] = useState('auto'); const [selectedResolution, setSelectedResolution] = useState('1080p'); const [selectedOverlay, setSelectedOverlay] = useState('light_leaks'); const [selectedTransition, setSelectedTransition] = useState('none'); const [selectedSubtitle, setSelectedSubtitle] = useState('hormozi'); const [selectedWatermark, setSelectedWatermark] = useState('none'); const [selectedTextEffect, setSelectedTextEffect] = useState('minimal'); const [sfxVolume, setSfxVolume] = useState(75); const [mediaVolume, setMediaVolume] = useState(75); const [musicVolume, setMusicVolume] = useState(80); const [voiceVolume, setVoiceVolume] = useState(80); const [openDropdown, setOpenDropdown] = useState(null); const handleDropdownToggle = (key: string) => { setOpenDropdown(openDropdown === key ? null : key); }; const renderDropdown = ( key: string, label: string, options: SettingOption[], value: string, onChange: (value: string) => void ) => (
handleDropdownToggle(key)} whileHover={{ scale: 1.01 }} whileTap={{ scale: 0.99 }} > {options.find(opt => opt.value === value)?.label || value} {openDropdown === key && ( {options.map((option) => ( { onChange(option.value); handleDropdownToggle(key); onSettingChange?.(key, option.value); }} whileHover={{ x: 4 }} > {option.label} {value === option.value && } ))} )}
); const renderVolumeSlider = ( icon: React.ReactNode, label: string, value: number, onChange: (value: number) => void ) => (
{icon} {label}
{ const newValue = parseInt(e.target.value); onChange(newValue); onSettingChange?.(label, newValue); }} /> {value}%
); return ( {/* 基础设置组 */}

基础设置

{/* 工作模式 */}
{renderDropdown('mode', 'Mode', modeOptions, selectedMode, setSelectedMode)}
{/* 分辨率 */}
{renderDropdown('resolution', 'Resolution', resolutionOptions, selectedResolution, setSelectedResolution)}
{/* 视觉效果组 */}

视觉效果

{/* 叠加效果 */}
{renderDropdown('overlay', 'Overlay Preset', overlayOptions, selectedOverlay, setSelectedOverlay)}
{/* 转场设定 */}
{renderDropdown('transition', 'Transition Preset', transitionOptions, selectedTransition, setSelectedTransition)}
{/* 文字样式组 */}

文字样式

{/* 字幕风格 */}
{renderDropdown('subtitle', 'Subtitle Preset', subtitleOptions, selectedSubtitle, setSelectedSubtitle)}
{/* 文字效果 */}
{renderDropdown('textEffect', 'Text Preset', textEffectOptions, selectedTextEffect, setSelectedTextEffect)}
{/* 贴纸预设 */}
{renderDropdown('watermark', 'Sticker Preset', watermarkOptions, selectedWatermark, setSelectedWatermark)}
{/* 音频设置组 */}

音频设置

{/* 音效主音量 */}
{renderVolumeSlider( , "音效主音量", sfxVolume, setSfxVolume )}
{/* 配音主音量 */}
{renderVolumeSlider( , "配音主音量", voiceVolume, setVoiceVolume )}
{/* 媒体音频主音量 */}
{renderVolumeSlider( , "媒体音频主音量", mediaVolume, setMediaVolume )}
{/* 音乐主音量 */}
{renderVolumeSlider( , "音乐主音量", musicVolume, setMusicVolume )}
{/* 音量混合提示 */}

音量混合提示

建议保持音效、配音、媒体音频和音乐之间的适当平衡,以获得最佳听觉体验

); }