/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import React, {type ReactNode} from 'react'; import clsx from 'clsx'; import { useThemeConfig, ErrorCauseBoundary, ThemeClassNames, } from '@docusaurus/theme-common'; import { splitNavbarItems, useNavbarMobileSidebar, } from '@docusaurus/theme-common/internal'; import NavbarItem, {type Props as NavbarItemConfig} from '@theme/NavbarItem'; import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle'; import SearchBar from '@theme/SearchBar'; import NavbarMobileSidebarToggle from '@theme/Navbar/MobileSidebar/Toggle'; import NavbarLogo from '@theme/Navbar/Logo'; import NavbarSearch from '@theme/Navbar/Search'; import styles from './styles.module.css'; function useNavbarItems() { // TODO temporary casting until ThemeConfig type is improved return useThemeConfig().navbar.items as NavbarItemConfig[]; } function NavbarItems({items}: {items: NavbarItemConfig[]}): ReactNode { return ( <> {items.map((item, i) => ( new Error( `A theme navbar item failed to render. Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config: ${JSON.stringify(item, null, 2)}`, {cause: error}, ) }> ))} ); } function NavbarContentLayout({ left, right, }: { left: ReactNode; right: ReactNode; }) { return (
{left}
{right}
); } export default function NavbarContent(): ReactNode { const mobileSidebar = useNavbarMobileSidebar(); const items = useNavbarItems(); const [leftItems, rightItems] = splitNavbarItems(items); const searchBarItem = items.find((item) => item.type === 'search'); return ( {!mobileSidebar.disabled && } } right={ // TODO stop hardcoding items? // Ask the user to add the respective navbar items => more flexible <> {!searchBarItem && ( )} } /> ); }