'use client' /** * # NAV 主题说明 * 主题开发者 [emengweb](https://github.com/emengweb) * 开启方式 在blog.config.js 将主题配置为 `NAV` */ import CONFIG from './config' import { useEffect, useState, createContext, useContext } from 'react' import Footer from './components/Footer' import TopNavBar from './components/TopNavBar' import { useGlobal } from '@/lib/global' import Announcement from './components/Announcement' import PageNavDrawer from './components/PageNavDrawer' import FloatTocButton from './components/FloatTocButton' import { AdSlot } from '@/components/GoogleAdsense' import JumpToTopButton from './components/JumpToTopButton' import CategoryItem from './components/CategoryItem' import TagItemMini from './components/TagItemMini' import Comment from '@/components/Comment' import TocDrawer from './components/TocDrawer' import NotionPage from '@/components/NotionPage' import { ArticleLock } from './components/ArticleLock' import { Transition } from '@headlessui/react' import { Style } from './style' import BlogPostListAll from './components/BlogPostListAll' import BlogPostCard from './components/BlogPostCard' import Link from 'next/link' import dynamic from 'next/dynamic' import { MenuItem } from './components/MenuItem' import LogoBar from './components/LogoBar' import { siteConfig } from '@/lib/config' import Live2D from '@/components/Live2D' import BlogArchiveItem from './components/BlogArchiveItem' import NotionIcon from '@/components/NotionIcon' const WWAds = dynamic(() => import('@/components/WWAds'), { ssr: false }) // 主题全局变量 const ThemeGlobalNav = createContext() export const useNavGlobal = () => useContext(ThemeGlobalNav) /** * 基础布局 * 采用左右两侧布局,移动端使用顶部导航栏 * @returns {JSX.Element} * @constructor */ const LayoutBase = (props) => { const { customMenu, children, post, allNavPages, categoryOptions, slotLeft, slotTop } = props const { onLoading } = useGlobal() const [tocVisible, changeTocVisible] = useState(false) const [pageNavVisible, changePageNavVisible] = useState(false) const [filteredNavPages, setFilteredNavPages] = useState(allNavPages) const showTocButton = post?.toc?.length > 1 useEffect(() => { setFilteredNavPages(allNavPages) }, [post]) let links = customMenu // 默认使用自定义菜单,否则将遍历所有的category生成菜单 if (!siteConfig('NAV_USE_CUSTOM_MENU', null, CONFIG)) { links = categoryOptions && categoryOptions?.map(c => { return { id: c.name, title: `# ${c.name}`, to: `/category/${c.name}`, show: true } }) } return ( {/* 样式 */}