import React, { useState } from 'react'; import { Play, Lock, Activity, Zap } from 'lucide-react'; import { MOCK_SCENARIOS } from '../constants'; import { Scenario } from '../types'; interface LibraryProps { onPlay: (scenario: Scenario) => void; } const Library: React.FC = ({ onPlay }) => { const categories = ['全部', '职场', '邻家', '科幻', 'ASMR']; const [activeCategory, setActiveCategory] = useState('全部'); const filtered = activeCategory === '全部' ? MOCK_SCENARIOS : MOCK_SCENARIOS.filter(s => s.category === activeCategory || s.tags.includes(activeCategory)); const getIntensityColor = (intensity: string) => { switch(intensity) { case 'Low': return 'text-[#34D399]'; case 'Medium': return 'text-[#60A5FA]'; case 'High': return 'text-[#FBBF24]'; case 'Extreme': return 'text-[#F472B6]'; default: return 'text-white/50'; } }; return (
{/* Filter Bar */}
{categories.map(cat => { const isActive = activeCategory === cat; return ( ); })}
{/* List Layout */}
{filtered.map(scenario => (
onPlay(scenario)} className="group relative flex items-center p-3 rounded-2xl bg-[#4c1d95]/20 border border-white/10 overflow-hidden active:scale-[0.98] transition-all duration-300 backdrop-blur-md hover:border-[#C084FC]/40 hover:bg-[#4c1d95]/40 hover:shadow-[0_4px_20px_rgba(0,0,0,0.2)]" > {/* Left: Thumbnail */}
{scenario.title} {scenario.isLocked && (
)}
{/* Center: Info */}
{scenario.category}
{scenario.intensity}

{scenario.title}

{/* Tags */}
{scenario.tags.slice(0, 3).map((tag, i) => ( #{tag} ))}
{/* Right: Action Button */}
{scenario.isLocked ? : }
))}
{/* Empty State */} {filtered.length === 0 && (

暂无相关剧本

)}
); }; export default Library;