@@ -22,6 +22,8 @@ import LanguagePicker from "@/components/LanguagePicker"
22
22
import { BaseLink } from "@/components/Link"
23
23
import Search from "@/components/Search"
24
24
25
+ import { isMobile } from "@/lib/utils/isMobile"
26
+
25
27
import { DESKTOP_LANGUAGE_BUTTON_NAME , NAV_PY } from "@/lib/constants"
26
28
27
29
import Menu from "./Menu"
@@ -33,6 +35,7 @@ const Nav = () => {
33
35
const { toggleColorMode, linkSections, mobileNavProps } = useNav ( )
34
36
const { locale } = useRouter ( )
35
37
const { t } = useTranslation ( "common" )
38
+ const isDesktop = ! isMobile ( )
36
39
const searchModalDisclosure = useDisclosure ( )
37
40
const navWrapperRef = useRef ( null )
38
41
const languagePickerState = useDisclosure ( )
@@ -95,76 +98,80 @@ const Nav = () => {
95
98
justifyContent = { { base : "flex-end" , md : "space-between" } }
96
99
ms = { { base : 3 , xl : 8 } }
97
100
>
98
- < Menu hideBelow = "md" sections = { linkSections } />
101
+ { /* avoid rendering desktop Menu version on mobile */ }
102
+ { isDesktop && < Menu hideBelow = "md" sections = { linkSections } /> }
103
+
99
104
< Flex alignItems = "center" /* justifyContent="space-between" */ >
100
105
< Search { ...searchModalDisclosure } />
101
-
102
106
{ /* Desktop */ }
103
- < HStack hideBelow = "md" gap = "0" >
104
- < IconButton
105
- transition = "transform 0.5s, color 0.2s"
106
- icon = { ThemeIcon }
107
- aria-label = { themeIconAriaLabel }
108
- variant = "ghost"
109
- isSecondary
110
- px = { { base : "2" , xl : "3" } }
111
- _hover = { {
112
- transform : "rotate(10deg)" ,
113
- color : "primary.hover" ,
114
- } }
115
- onClick = { toggleColorMode }
116
- />
117
-
118
- { /* Locale-picker menu */ }
119
- < LanguagePicker
120
- placement = "bottom-end"
121
- minH = "unset"
122
- maxH = "75vh"
123
- w = "xs"
124
- inset = "unset"
125
- top = "unset"
126
- menuState = { languagePickerState }
127
- >
128
- < MenuButton
129
- as = { Button }
130
- name = { DESKTOP_LANGUAGE_BUTTON_NAME }
131
- ref = { languagePickerRef }
107
+ { /* avoid rendering desktop LanguagePicker version on mobile */ }
108
+ { isDesktop && (
109
+ < HStack hideBelow = "md" gap = "0" >
110
+ < IconButton
111
+ transition = "transform 0.5s, color 0.2s"
112
+ icon = { ThemeIcon }
113
+ aria-label = { themeIconAriaLabel }
132
114
variant = "ghost"
133
- color = "body.base"
134
- transition = "color 0.2s"
115
+ isSecondary
135
116
px = { { base : "2" , xl : "3" } }
136
117
_hover = { {
118
+ transform : "rotate(10deg)" ,
137
119
color : "primary.hover" ,
138
- "& svg" : {
139
- transform : "rotate(10deg)" ,
140
- transition : "transform 0.5s" ,
141
- } ,
142
- } }
143
- _active = { {
144
- color : "primary.hover" ,
145
- bg : "primary.lowContrast" ,
146
- } }
147
- sx = { {
148
- "& svg" : {
149
- transform : "rotate(0deg)" ,
150
- transition : "transform 0.5s" ,
151
- } ,
152
120
} }
121
+ onClick = { toggleColorMode }
122
+ />
123
+
124
+ { /* Locale-picker menu */ }
125
+ < LanguagePicker
126
+ placement = "bottom-end"
127
+ minH = "unset"
128
+ maxH = "75vh"
129
+ w = "xs"
130
+ inset = "unset"
131
+ top = "unset"
132
+ menuState = { languagePickerState }
153
133
>
154
- < Icon
155
- as = { BsTranslate }
156
- fontSize = "2xl"
157
- verticalAlign = "middle"
158
- me = { 2 }
159
- />
160
- < Text hideBelow = "lg" as = "span" >
161
- { t ( "common:languages" ) }
162
- </ Text >
163
- { locale ! . toUpperCase ( ) }
164
- </ MenuButton >
165
- </ LanguagePicker >
166
- </ HStack >
167
- { /* Mobile */ }
134
+ < MenuButton
135
+ as = { Button }
136
+ name = { DESKTOP_LANGUAGE_BUTTON_NAME }
137
+ ref = { languagePickerRef }
138
+ variant = "ghost"
139
+ color = "body.base"
140
+ transition = "color 0.2s"
141
+ px = { { base : "2" , xl : "3" } }
142
+ _hover = { {
143
+ color : "primary.hover" ,
144
+ "& svg" : {
145
+ transform : "rotate(10deg)" ,
146
+ transition : "transform 0.5s" ,
147
+ } ,
148
+ } }
149
+ _active = { {
150
+ color : "primary.hover" ,
151
+ bg : "primary.lowContrast" ,
152
+ } }
153
+ sx = { {
154
+ "& svg" : {
155
+ transform : "rotate(0deg)" ,
156
+ transition : "transform 0.5s" ,
157
+ } ,
158
+ } }
159
+ >
160
+ < Icon
161
+ as = { BsTranslate }
162
+ fontSize = "2xl"
163
+ verticalAlign = "middle"
164
+ me = { 2 }
165
+ />
166
+ < Text hideBelow = "lg" as = "span" >
167
+ { t ( "common:languages" ) }
168
+ </ Text >
169
+ { locale ! . toUpperCase ( ) }
170
+ </ MenuButton >
171
+ </ LanguagePicker >
172
+ </ HStack >
173
+ ) }
174
+
168
175
< MobileNavMenu
169
176
{ ...mobileNavProps }
170
177
linkSections = { linkSections }
0 commit comments