docs(nx-dev): Update docs sidemenu enabling the close button (#23254)

This PR fixes the issue where the close button was not working in the
nx-dev documentation pages after opening the overflow menu.
Now, the close button functions correctly.
This commit is contained in:
Nicholas Cunningham 2024-05-08 14:18:37 -06:00 committed by GitHub
parent 0bfeea6be3
commit 79ee857380
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 225 additions and 81 deletions

View File

@ -57,7 +57,11 @@ export default function NxDocumentation({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={menuWithSections} navIsOpen={navIsOpen} /> <SidebarContainer
menu={menuWithSections}
toggleNav={toggleNav}
navIsOpen={navIsOpen}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -40,7 +40,11 @@ export default function AiDocs(): JSX.Element {
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<div className="hidden"> <div className="hidden">
<SidebarContainer menu={{ sections: [] }} navIsOpen={navIsOpen} /> <SidebarContainer
menu={{ sections: [] }}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
</div> </div>
<FeedContainer /> <FeedContainer />

View File

@ -223,15 +223,19 @@ export default function Changelog(props: ChangeLogProps): JSX.Element {
</div> </div>
<main id="main" role="main"> <main id="main" role="main">
<div className="mx-auto flex max-w-7xl flex-col py-8 px-4 sm:px-6 lg:px-8"> <div className="mx-auto flex max-w-7xl flex-col px-4 py-8 sm:px-6 lg:px-8">
<div className="mb-6"> <div className="mb-6">
<Breadcrumbs path={router.asPath} /> <Breadcrumbs path={router.asPath} />
</div> </div>
<div className="hidden"> <div className="hidden">
<SidebarContainer menu={menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={menu}
toggleNav={toggleNav}
navIsOpen={navIsOpen}
/>
</div> </div>
<header className="mt-0"> <header className="mt-0">
<h1 className="text-3xl font-semibold tracking-tight text-slate-900 dark:text-slate-100 sm:text-5xl"> <h1 className="text-3xl font-semibold tracking-tight text-slate-900 sm:text-5xl dark:text-slate-100">
Nx Changelog Nx Changelog
</h1> </h1>
<p className="mt-4"> <p className="mt-4">
@ -271,7 +275,7 @@ export default function Changelog(props: ChangeLogProps): JSX.Element {
v{changelog.version.split('.').slice(0, 2).join('.')} v{changelog.version.split('.').slice(0, 2).join('.')}
</a> </a>
<Link aria-hidden="true" href={`#${changelog.version}`}> <Link aria-hidden="true" href={`#${changelog.version}`}>
<LinkIcon className="ml-2 mb-1 inline h-5 w-5 opacity-0 group-hover:opacity-100" /> <LinkIcon className="mb-1 ml-2 inline h-5 w-5 opacity-0 group-hover:opacity-100" />
</Link> </Link>
</p> </p>
<p className="py-0.5 text-xs leading-5 text-slate-400 dark:text-slate-500"> <p className="py-0.5 text-xs leading-5 text-slate-400 dark:text-slate-500">

View File

@ -65,7 +65,11 @@ export default function Pages({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -65,7 +65,11 @@ export default function CloudRoot({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -65,7 +65,11 @@ export default function Pages({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -65,7 +65,11 @@ export default function PluginsRoot({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -72,7 +72,11 @@ export default function PackageDocument({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -64,7 +64,11 @@ export default function DocumentsIndex({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -74,7 +74,11 @@ export default function PackageExecutor({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -64,7 +64,11 @@ export default function ExecutorsIndex({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -74,7 +74,11 @@ export default function PackageGenerator({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -64,7 +64,11 @@ export default function GeneratorsIndex({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -68,7 +68,11 @@ export default function Package({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -92,7 +92,11 @@ export default function Packages({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
id="wrapper" id="wrapper"
data-testid="wrapper" data-testid="wrapper"

View File

@ -63,7 +63,11 @@ export default function DocumentsIndex({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -70,7 +70,11 @@ export default function Overview({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -70,7 +70,11 @@ export default function RspackPlugins({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -74,7 +74,11 @@ export default function DevServerExecutor({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -63,7 +63,11 @@ export default function ExecutorsIndex({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -74,7 +74,11 @@ export default function RspackExecutor({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -74,7 +74,11 @@ export default function ApplicationGenerator({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -74,7 +74,11 @@ export default function ConfigurationGenerator({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -63,7 +63,11 @@ export default function GeneratorsIndex({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -74,7 +74,11 @@ export default function InitGenerator({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -66,7 +66,11 @@ export default function RspackIndex({
role="main" role="main"
className="flex h-full flex-1 overflow-y-hidden" className="flex h-full flex-1 overflow-y-hidden"
> >
<SidebarContainer menu={vm.menu} navIsOpen={navIsOpen} /> <SidebarContainer
menu={vm.menu}
navIsOpen={navIsOpen}
toggleNav={toggleNav}
/>
<div <div
ref={wrapperElement} ref={wrapperElement}
id="wrapper" id="wrapper"

View File

@ -105,9 +105,11 @@ const rspackSection = {
export function SidebarContainer({ export function SidebarContainer({
menu, menu,
navIsOpen, navIsOpen,
toggleNav,
}: { }: {
menu: Menu; menu: Menu;
navIsOpen: boolean; navIsOpen: boolean;
toggleNav: (value: boolean) => void;
}): JSX.Element { }): JSX.Element {
// TODO(jack): Remove this rspack modification once we move rspack into main repo (when stable). // TODO(jack): Remove this rspack modification once we move rspack into main repo (when stable).
const menuWithRspack = useMemo(() => { const menuWithRspack = useMemo(() => {
@ -128,8 +130,12 @@ export function SidebarContainer({
return ( return (
<div id="sidebar" data-testid="sidebar"> <div id="sidebar" data-testid="sidebar">
<SidebarMobile menu={menuWithRspack} navIsOpen={navIsOpen} /> <SidebarMobile
<div className="hidden h-full w-72 flex-col border-r border-slate-200 dark:border-slate-700 dark:bg-slate-900 md:flex"> menu={menuWithRspack}
toggleNav={toggleNav}
navIsOpen={navIsOpen}
/>
<div className="hidden h-full w-72 flex-col border-r border-slate-200 md:flex dark:border-slate-700 dark:bg-slate-900">
<div className="relative flex flex-grow overflow-y-scroll p-4"> <div className="relative flex flex-grow overflow-y-scroll p-4">
<Sidebar menu={menuWithRspack} /> <Sidebar menu={menuWithRspack} />
</div> </div>

View File

@ -1,9 +1,12 @@
import { Dialog, Transition } from '@headlessui/react'; import { Dialog, Transition } from '@headlessui/react';
import { XMarkIcon } from '@heroicons/react/24/outline';
import { AlgoliaSearch } from '@nx/nx-dev/feature-search';
import { Menu, MenuItem, MenuSection } from '@nx/nx-dev/models-menu'; import { Menu, MenuItem, MenuSection } from '@nx/nx-dev/models-menu';
import cx from 'classnames'; import cx from 'classnames';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { createRef, Fragment, useCallback, useEffect, useState } from 'react'; import { createRef, Fragment, useCallback, useEffect, useState } from 'react';
import { NxIcon } from './nx-icon';
export interface SidebarProps { export interface SidebarProps {
menu: Menu; menu: Menu;
@ -11,6 +14,7 @@ export interface SidebarProps {
export interface FloatingSidebarProps { export interface FloatingSidebarProps {
menu: Menu; menu: Menu;
navIsOpen: boolean; navIsOpen: boolean;
toggleNav: (open: boolean) => void;
} }
export function Sidebar({ menu }: SidebarProps): JSX.Element { export function Sidebar({ menu }: SidebarProps): JSX.Element {
@ -177,6 +181,7 @@ function CollapsibleIcon({
export function SidebarMobile({ export function SidebarMobile({
menu, menu,
navIsOpen, navIsOpen,
toggleNav,
}: FloatingSidebarProps): JSX.Element { }: FloatingSidebarProps): JSX.Element {
const router = useRouter(); const router = useRouter();
const isCI: boolean = router.asPath.startsWith('/ci'); const isCI: boolean = router.asPath.startsWith('/ci');
@ -237,7 +242,7 @@ export function SidebarMobile({
return ( return (
<Transition.Root show={navIsOpen} as={Fragment}> <Transition.Root show={navIsOpen} as={Fragment}>
<Dialog as="div" className="relative z-40" onClose={() => void 0}> <Dialog as="div" className="relative z-40" onClose={() => void 0}>
<div className="fixed inset-0 top-[57px] z-40 flex"> <div className="fixed inset-0 z-40 flex">
<Transition.Child <Transition.Child
as={Fragment} as={Fragment}
enter="transition ease-in-out duration-300 transform" enter="transition ease-in-out duration-300 transform"
@ -247,9 +252,37 @@ export function SidebarMobile({
leaveFrom="translate-x-0" leaveFrom="translate-x-0"
leaveTo="-translate-x-full" leaveTo="-translate-x-full"
> >
<Dialog.Panel className="relative flex w-full flex-col overflow-y-auto bg-white p-4 dark:bg-slate-900"> <Dialog.Panel className="relative flex w-full flex-col overflow-y-auto bg-white dark:bg-slate-900">
{/*HEADER*/}
<div className="flex w-full items-center border-b border-slate-200 bg-slate-50 p-4 lg:hidden dark:border-slate-700 dark:bg-slate-800/60">
{/*CLOSE BUTTON*/}
<button
type="button"
className="flex focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500"
onClick={() => toggleNav(!navIsOpen)}
>
<span className="sr-only">Close sidebar</span>
<XMarkIcon className="mr-3 h-6 w-6" />
</button>
{/*SEARCH*/}
<div className="mx-4 w-auto">
<AlgoliaSearch />
</div>
{/*LOGO*/}
<div className="ml-auto flex items-center">
<Link
href="/"
className="flex flex-grow items-center px-4 text-slate-900 lg:px-0 dark:text-white"
>
<span className="sr-only">Nx</span>
<NxIcon aria-hidden="true" className="h-8 w-8" />
</Link>
</div>
</div>
<div className="p-4">
{/*SECTIONS*/} {/*SECTIONS*/}
<div className="divide-y divide-slate-200"> <div className="mt-5 divide-y divide-slate-200">
<div className="grid w-full shrink-0 grid-cols-3 items-center justify-between"> <div className="grid w-full shrink-0 grid-cols-3 items-center justify-between">
{sections.general.map((section) => ( {sections.general.map((section) => (
<Link <Link
@ -300,6 +333,7 @@ export function SidebarMobile({
))} ))}
</nav> </nav>
</div> </div>
</div>
</Dialog.Panel> </Dialog.Panel>
</Transition.Child> </Transition.Child>
</div> </div>