import Comment from '@/components/Comment' import replaceSearchResult from '@/components/Mark' import NotionPage from '@/components/NotionPage' import ShareBar from '@/components/ShareBar' import { siteConfig } from '@/lib/config' import { useGlobal } from '@/lib/global' import { isBrowser } from '@/lib/utils' import { Transition } from '@headlessui/react' import dynamic from 'next/dynamic' import Link from 'next/link' import { useRouter } from 'next/router' import { createContext, useContext, useEffect, useRef } from 'react' import ArticleAdjacent from './components/ArticleAdjacent' import ArticleCopyright from './components/ArticleCopyright' import { ArticleLock } from './components/ArticleLock' import ArticleRecommend from './components/ArticleRecommend' import BlogPostArchive from './components/BlogPostArchive' import BlogPostListPage from './components/BlogPostListPage' import BlogPostListScroll from './components/BlogPostListScroll' import ButtonJumpToComment from './components/ButtonJumpToComment' import ButtonRandomPostMini from './components/ButtonRandomPostMini' import Card from './components/Card' import Footer from './components/Footer' import Header from './components/Header' import Hero from './components/Hero' import PostHero from './components/PostHero' import RightFloatArea from './components/RightFloatArea' import SearchNav from './components/SearchNav' import SideRight from './components/SideRight' import SlotBar from './components/SlotBar' import TagItemMini from './components/TagItemMini' import TocDrawer from './components/TocDrawer' import TocDrawerButton from './components/TocDrawerButton' import CONFIG from './config' import { Style } from './style' const AlgoliaSearchModal = dynamic( () => import('@/components/AlgoliaSearchModal'), { ssr: false } ) // 主题全局状态 const ThemeGlobalHexo = createContext() export const useHexoGlobal = () => useContext(ThemeGlobalHexo) /** * 基础布局 采用左右两侧布局,移动端使用顶部导航栏 * @param props * @returns {JSX.Element} * @constructor */ const LayoutBase = props => { const { post, children, slotTop, className } = props const { onLoading, fullWidth } = useGlobal() const router = useRouter() const showRandomButton = siteConfig('HEXO_MENU_RANDOM', false, CONFIG) const headerSlot = post ? ( ) : router.route === '/' && siteConfig('HEXO_HOME_BANNER_ENABLE', null, CONFIG) ? ( ) : null const drawerRight = useRef(null) const tocRef = isBrowser ? document.getElementById('article-wrapper') : null // 悬浮按钮内容 const floatSlot = ( <> {post?.toc?.length > 1 && (
{ drawerRight?.current?.handleSwitchVisible() }} />
)} {post && } {showRandomButton && } ) // Algolia搜索框 const searchModal = useRef(null) return (