diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx index 6632be07a421..8eec1cc281fb 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/index.tsx @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import React, {type ComponentProps} from 'react'; +import React from 'react'; import clsx from 'clsx'; import {useThemeConfig} from '@docusaurus/theme-common'; import { @@ -18,16 +18,6 @@ import type {Props} from '@theme/Navbar/Layout'; import styles from './styles.module.css'; -function NavbarBackdrop(props: ComponentProps<'div'>) { - return ( -
- ); -} - export default function NavbarLayout({children}: Props): JSX.Element { const { navbar: {hideOnScroll, style}, @@ -56,7 +46,6 @@ export default function NavbarLayout({children}: Props): JSX.Element { }, )}> {children} - ); diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/styles.module.css b/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/styles.module.css index 8258c17f2cfd..b55753e11355 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/styles.module.css +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/Layout/styles.module.css @@ -5,10 +5,16 @@ * LICENSE file in the root directory of this source tree. */ -.navbarHideable { - transition: transform var(--ifm-transition-fast) ease; +.navbar-sidebar { + inset: 0; + margin: 0; + padding: 0; + bottom: 0; + border: 0; + height: 100%; + max-height: 100%; } -.navbarHidden { - transform: translate3d(0, calc(-100% - 2px), 0); +.navbar-sidebar::backdrop { + background-color: #0009; } diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx index b3bbaec8fae0..542947c83403 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/MobileSidebar/Layout/index.tsx @@ -5,9 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -import React from 'react'; +import React, {useEffect, useRef} from 'react'; import clsx from 'clsx'; -import {useNavbarSecondaryMenu} from '@docusaurus/theme-common/internal'; +import { + useNavbarMobileSidebar, + useNavbarSecondaryMenu, +} from '@docusaurus/theme-common/internal'; import type {Props} from '@theme/Navbar/MobileSidebar/Layout'; export default function NavbarMobileSidebarLayout({ @@ -16,8 +19,40 @@ export default function NavbarMobileSidebarLayout({ secondaryMenu, }: Props): JSX.Element { const {shown: secondaryMenuShown} = useNavbarSecondaryMenu(); + const navbarModalDialog = useRef(null); + const {shown, toggle} = useNavbarMobileSidebar(); + + useEffect(() => { + const {current: dialogEl} = navbarModalDialog; + + if (!dialogEl) return; + if (shown) { + dialogEl.showModal(); + } else { + dialogEl.close(); + } + }); + + useEffect(() => { + const {current: dialogEl} = navbarModalDialog; + + function toggleOnEscape(e: {key: string}) { + if (e.key === 'Escape') { + if (shown) { + toggle(); + } + } + } + + dialogEl?.addEventListener('keydown', toggleOnEscape); + + return () => { + dialogEl?.removeEventListener('keydown', toggleOnEscape); + }; + }, [shown, toggle]); + return ( -
+ {header}
{primaryMenu}
{secondaryMenu}
-
+ ); }