@@ -142,10 +142,11 @@ export default function TopNav({
142142 breadcrumbs : RouteItem [ ] ;
143143 section : 'learn' | 'reference' | 'community' | 'blog' | 'home' | 'unknown' ;
144144} ) {
145- const [ isOpen , setIsOpen ] = useState ( false ) ;
145+ const [ isMenuOpen , setIsMenuOpen ] = useState ( false ) ;
146+ const [ showSearch , setShowSearch ] = useState ( false ) ;
147+ const [ isScrolled , setIsScrolled ] = useState ( false ) ;
146148 const scrollParentRef = useRef < HTMLDivElement > ( null ) ;
147149 const { asPath} = useRouter ( ) ;
148- const [ isScrolled , setIsScrolled ] = useState ( false ) ;
149150
150151 // HACK. Fix up the data structures instead.
151152 if ( ( routeTree as any ) . routes . length === 1 ) {
@@ -154,18 +155,18 @@ export default function TopNav({
154155
155156 // While the overlay is open, disable body scroll.
156157 useEffect ( ( ) => {
157- if ( isOpen ) {
158+ if ( isMenuOpen ) {
158159 const preferredScrollParent = scrollParentRef . current ! ;
159160 disableBodyScroll ( preferredScrollParent ) ;
160161 return ( ) => enableBodyScroll ( preferredScrollParent ) ;
161162 } else {
162163 return undefined ;
163164 }
164- } , [ isOpen ] ) ;
165+ } , [ isMenuOpen ] ) ;
165166
166167 // Close the overlay on any navigation.
167168 useEffect ( ( ) => {
168- setIsOpen ( false ) ;
169+ setIsMenuOpen ( false ) ;
169170 } , [ asPath ] ) ;
170171
171172 // Also close the overlay if the window gets resized past mobile layout.
@@ -175,7 +176,7 @@ export default function TopNav({
175176
176177 function closeIfNeeded ( ) {
177178 if ( ! media . matches ) {
178- setIsOpen ( false ) ;
179+ setIsMenuOpen ( false ) ;
179180 }
180181 }
181182
@@ -204,7 +205,6 @@ export default function TopNav({
204205 return ( ) => observer . disconnect ( ) ;
205206 } , [ ] ) ;
206207
207- const [ showSearch , setShowSearch ] = useState ( false ) ;
208208 const onOpenSearch = useCallback ( ( ) => {
209209 startTransition ( ( ) => {
210210 setShowSearch ( true ) ;
@@ -224,28 +224,28 @@ export default function TopNav({
224224 < div ref = { scrollDetectorRef } />
225225 < div
226226 className = { cn (
227- isOpen
227+ isMenuOpen
228228 ? 'h-screen sticky top-0 lg:bottom-0 lg:h-screen flex flex-col shadow-nav dark:shadow-nav-dark z-20'
229229 : 'z-50 sticky top-0'
230230 ) } >
231231 < nav
232232 className = { cn (
233233 'duration-300 backdrop-filter backdrop-blur-lg backdrop-saturate-200 transition-shadow bg-opacity-90 items-center w-full flex justify-between bg-wash dark:bg-wash-dark dark:bg-opacity-95 px-1.5 lg:pe-5 lg:ps-4 z-50' ,
234- { 'dark:shadow-nav-dark shadow-nav' : isScrolled || isOpen }
234+ { 'dark:shadow-nav-dark shadow-nav' : isScrolled || isMenuOpen }
235235 ) } >
236236 < div className = "flex items-center justify-between w-full h-16 gap-0 sm:gap-3" >
237237 < div className = "flex flex-row 3xl:flex-1 " >
238238 < button
239239 type = "button"
240240 aria-label = "Menu"
241- onClick = { ( ) => setIsOpen ( ! isOpen ) }
241+ onClick = { ( ) => setIsMenuOpen ( ! isMenuOpen ) }
242242 className = { cn (
243243 'active:scale-95 transition-transform flex lg:hidden w-12 h-12 rounded-full items-center justify-center hover:bg-primary/5 hover:dark:bg-primary-dark/5 outline-link' ,
244244 {
245- 'text-link dark:text-link-dark' : isOpen ,
245+ 'text-link dark:text-link-dark' : isMenuOpen ,
246246 }
247247 ) } >
248- { isOpen ? < IconClose /> : < IconHamburger /> }
248+ { isMenuOpen ? < IconClose /> : < IconHamburger /> }
249249 </ button >
250250 < div className = "flex 3xl:flex-1 align-center" >
251251 < NextLink
@@ -343,14 +343,14 @@ export default function TopNav({
343343 </ div >
344344 </ nav >
345345
346- { isOpen && (
346+ { isMenuOpen && (
347347 < div
348348 ref = { scrollParentRef }
349349 className = "overflow-y-scroll isolate no-bg-scrollbar lg:w-[342px] grow bg-wash dark:bg-wash-dark" >
350350 < aside
351351 className = { cn (
352352 `lg:grow lg:flex flex-col w-full pb-8 lg:pb-0 lg:max-w-custom-xs z-50` ,
353- isOpen ? 'block z-40' : 'hidden lg:block'
353+ isMenuOpen ? 'block z-40' : 'hidden lg:block'
354354 ) } >
355355 < nav
356356 role = "navigation"
@@ -383,10 +383,10 @@ export default function TopNav({
383383 < SidebarRouteTree
384384 // Don't share state between the desktop and mobile versions.
385385 // This avoids unnecessary animations and visual flicker.
386- key = { isOpen ? 'mobile-overlay' : 'desktop-or-hidden' }
386+ key = { isMenuOpen ? 'mobile-overlay' : 'desktop-or-hidden' }
387387 routeTree = { routeTree }
388388 breadcrumbs = { breadcrumbs }
389- isForceExpanded = { isOpen }
389+ isForceExpanded = { isMenuOpen }
390390 />
391391 </ Suspense >
392392 < div className = "h-16" />
0 commit comments