import type { ReactNode } from 'react' import { useState } from 'react' import { Bell, ChevronDown, CircleUserRound, Folder, Grid2X2, Home, Layers3, LogOut, Menu, MessageCircle, Palette, Search, Settings2, Sparkles, WandSparkles } from 'lucide-react' import { Button } from '../primitives/Button' import { IconButton } from '../primitives/IconButton' import { SearchInput } from '../primitives/FormControls' import styles from './AppShell.module.css' import avatarImage from '../../assets/holopix/avatar.png' import loginRewardAnimation from '../../assets/holopix/login-reward.gif' import loginRewardLabel from '../../assets/holopix/login-reward-label.svg' import loginRewardPanel from '../../assets/holopix/login-reward-panel.webp' import visitorPanel from '../../assets/holopix/visitor-panel.png' export type AppRoute = 'home' | 'components' | 'models' | 'create' | 'canvas' | 'assets' interface AppShellProps { route: AppRoute; onRouteChange: (route: AppRoute) => void; children: ReactNode } const primaryNav: Array<{ id: AppRoute; label: string; icon: typeof Home; badge?: string }> = [ { id: 'home', label: '首页', icon: Home }, { id: 'models', label: '模型广场', icon: Grid2X2 }, { id: 'create', label: 'AI 创作', icon: WandSparkles }, { id: 'canvas', label: '自由画布', icon: Layers3, badge: '热门' }, { id: 'assets', label: '我的资产', icon: Folder }, ] export function AppShell({ route, onRouteChange, children }: AppShellProps) { const [sidebarOpen, setSidebarOpen] = useState(false) const [search, setSearch] = useState('') return