diff --git a/packages/docusaurus-theme-classic/src/theme-classic.d.ts b/packages/docusaurus-theme-classic/src/theme-classic.d.ts index bbd4d109fe..5c23c13105 100644 --- a/packages/docusaurus-theme-classic/src/theme-classic.d.ts +++ b/packages/docusaurus-theme-classic/src/theme-classic.d.ts @@ -227,8 +227,12 @@ declare module '@theme/DocSidebar/Desktop/CollapseButton' { export default function CollapseButton(props: Props): JSX.Element; } -declare module '@theme/DocSidebar/Desktop/Filter' { - export default function Filter(): JSX.Element; +declare module '@theme/DocSidebar/Common/Filter' { + export interface Props { + readonly className?: string; + } + + export default function Filter(props: Props): JSX.Element; } declare module '@theme/DocSidebarItem' { diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/Filter/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Common/Filter/index.tsx similarity index 87% rename from packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/Filter/index.tsx rename to packages/docusaurus-theme-classic/src/theme/DocSidebar/Common/Filter/index.tsx index a1714ff24b..d9cae74a12 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/Filter/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Common/Filter/index.tsx @@ -8,14 +8,15 @@ import React from 'react'; import clsx from 'clsx'; import {useDocsFilter} from '@docusaurus/theme-common'; +import type {Props} from '@theme/DocSidebar/Desktop/Filter'; import styles from './styles.module.css'; -function Filter(): JSX.Element { +function Filter({className}: Props): JSX.Element { const {setFilterTerm, filterTerm = ''} = useDocsFilter(); return ( -
+
{hideOnScroll && } - {filterableSidebar && } + {filterableSidebar && } {hideableSidebar && }
diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/styles.module.css b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/styles.module.css index 8d7734af15..7fcaf4f5e4 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/styles.module.css +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Desktop/styles.module.css @@ -43,6 +43,10 @@ margin-right: 0.5rem; height: 2rem; } + + .filter { + padding: 0.5rem; + } } .sidebarLogo { diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Mobile/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Mobile/index.tsx index 48314ab6b1..25982044ab 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Mobile/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Mobile/index.tsx @@ -8,37 +8,49 @@ import React from 'react'; import clsx from 'clsx'; import { + useThemeConfig, NavbarSecondaryMenuFiller, type NavbarSecondaryMenuComponent, ThemeClassNames, useNavbarMobileSidebar, + useDocsFilter, + filterDocsSidebar, } from '@docusaurus/theme-common'; import DocSidebarItems from '@theme/DocSidebarItems'; +import Filter from '@theme/DocSidebar/Common/Filter'; import type {Props} from '@theme/DocSidebar/Mobile'; +import styles from './styles.module.css'; + // eslint-disable-next-line react/function-component-definition const DocSidebarMobileSecondaryMenu: NavbarSecondaryMenuComponent = ({ sidebar, path, }) => { + const {filterableSidebar} = useThemeConfig(); + const {filterTerm} = useDocsFilter(); + const filteredSidebar = filterDocsSidebar(sidebar, filterTerm); const mobileSidebar = useNavbarMobileSidebar(); return ( - + <> + {filterableSidebar && } +
    + { + // Mobile sidebar should only be closed if the category has a link + if (item.type === 'category' && item.href) { + mobileSidebar.toggle(); + } + if (item.type === 'link') { + mobileSidebar.toggle(); + } + }} + level={1} + /> +
+ ); }; diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/Mobile/styles.module.css b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Mobile/styles.module.css new file mode 100644 index 0000000000..9a584564ec --- /dev/null +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/Mobile/styles.module.css @@ -0,0 +1,10 @@ +/** + * 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. + */ + +.filter { + margin-bottom: 0.7rem; +}