"use client" import {memo, useEffect, useState} from "react" import {AnimatePresence, motion} from "motion/react" import {Button} from "@/components/ui/button" import {Bell, Info, Maximize2, Minimize2, Moon, Search, Settings, Sun} from "lucide-react" import {useUser} from "@/contexts/user-context" import {useBellRing} from "@/contexts/bell-ring-context" import {useNotificationSettings} from "@/contexts/notification-settings-context" import {SidebarTrigger} from "@/components/ui/sidebar" import {useTheme} from "next-themes" import {useRouter} from "next/navigation" import {SearchDialog} from "@/components/layout/search-dialog" import {Kbd} from "@/components/ui/kbd" /** * 铃铛按钮组件 */ const BellButton = memo(function BellButton() { const { isRinging } = useBellRing() const { showBell, isMounted } = useNotificationSettings() const [isClickAnimating, setIsClickAnimating] = useState(false) if (!isMounted) return null if (!showBell) return null const handleClick = () => { setIsClickAnimating(true) setTimeout(() => setIsClickAnimating(false), 600) } return ( ) }) /** * 站点头部组件 * 用于显示站点头部 * * @example * ```tsx * * ``` */ export function SiteHeader({ isFullWidth = false, onToggleFullWidth }: { isFullWidth?: boolean, onToggleFullWidth?: (value: boolean) => void }) { const { user } = useUser() const { setTheme, resolvedTheme } = useTheme() const router = useRouter() const [mounted, setMounted] = useState(false) const [searchOpen, setSearchOpen] = useState(false) const [metaKey, setMetaKey] = useState("⌘") useEffect(() => { setMounted(true) if (typeof navigator !== 'undefined' && !navigator.userAgent?.includes("Mac")) { setMetaKey("Ctrl") } }, []) return (
{user?.need_change_password && (
为了您的账号安全,请立即修改密码!
)}
{user?.nickname || user?.username || "Guest"}
setSearchOpen(true)}>
搜索 {metaKey} K
{mounted && }
) } function AppBanner() { const [isVisible, setIsVisible] = useState(false) const bannerKey = 'ldc-banner-dismissed-script' useEffect(() => { const dismissed = localStorage.getItem(bannerKey) if (!dismissed) { setIsVisible(true) } }, []) const handleDismiss = () => { localStorage.setItem(bannerKey, 'true') setIsVisible(false) } return ( {isVisible && (

最新通知 查看详情

)}
) }