Skip to content

Commit 576e1ad

Browse files
authored
Merge pull request #13449 from ethereum/shadcn-mobile-menu
Shadcn migration - mobile menu
2 parents 8710c5d + a0a4760 commit 576e1ad

20 files changed

+647
-398
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"@hookform/resolvers": "^3.8.0",
3737
"@radix-ui/react-accordion": "^1.2.0",
3838
"@radix-ui/react-checkbox": "^1.1.1",
39+
"@radix-ui/react-dialog": "^1.1.1",
3940
"@radix-ui/react-navigation-menu": "^1.2.0",
4041
"@radix-ui/react-popover": "^1.1.1",
4142
"@radix-ui/react-radio-group": "^1.2.0",
@@ -76,6 +77,7 @@
7677
"remark-gfm": "^3.0.1",
7778
"tailwind-merge": "^2.3.0",
7879
"tailwindcss-animate": "^1.0.7",
80+
"usehooks-ts": "^3.1.0",
7981
"yaml-loader": "^0.8.0"
8082
},
8183
"devDependencies": {
@@ -124,8 +126,7 @@
124126
"tsconfig-paths-webpack-plugin": "4.1.0",
125127
"typescript": "^5.5.2",
126128
"unified": "^10.0.0",
127-
"unist-util-visit": "^5.0.0",
128-
"usehooks-ts": "^3.1.0"
129+
"unist-util-visit": "^5.0.0"
129130
},
130131
"resolutions": {
131132
"jackspeak": "2.1.1",

src/components/FeedbackWidget/useFeedbackWidget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { useRouter } from "next/router"
33

44
import { trackCustomEvent } from "@/lib/utils/matomo"
55

6-
import useDisclosure from "@/hooks/useDisclosure"
6+
import { useDisclosure } from "@/hooks/useDisclosure"
77
import { useSurvey } from "@/hooks/useSurvey"
88

99
export const useFeedbackWidget = () => {

src/components/Nav/Mobile/ExpandIcon.tsx

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { motion } from "framer-motion"
2-
import { Icon } from "@chakra-ui/react"
32

43
const expandedPathVariants = {
54
closed: {
@@ -17,14 +16,9 @@ type ExpandIconProps = {
1716
}
1817

1918
const ExpandIcon = ({ isOpen }: ExpandIconProps) => (
20-
<Icon
19+
<svg
2120
viewBox="0 0 24 25"
22-
width={6}
23-
height={6}
24-
position="relative"
25-
strokeWidth="2px"
26-
display="inline-block"
27-
stroke="currentColor"
21+
className="relative inline-block h-6 w-6 stroke-current stroke-2 group-hover:text-primary-hover"
2822
>
2923
<motion.path
3024
variants={expandedPathVariants}
@@ -34,7 +28,7 @@ const ExpandIcon = ({ isOpen }: ExpandIconProps) => (
3428
stroke-width="2"
3529
/>
3630
<path d="M7.375 12.5L16.625 12.5" stroke-width="2" />
37-
</Icon>
31+
</svg>
3832
)
3933

4034
export default ExpandIcon
Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
1+
import { forwardRef } from "react"
12
import type { IconType } from "react-icons"
2-
import { type ButtonProps, Icon } from "@chakra-ui/react"
33

4-
import { Button } from "@/components/Buttons"
4+
import {
5+
Button,
6+
type ButtonProps,
7+
} from "../../../../tailwind/ui/buttons/Button"
58

69
type FooterButtonProps = ButtonProps & {
710
icon: IconType
811
}
912

10-
const FooterButton = ({ icon, ...props }: FooterButtonProps) => (
11-
<Button
12-
leftIcon={<Icon as={icon} />}
13-
sx={{ span: { m: 0 } }}
14-
variant="ghost"
15-
flexDir="column"
16-
alignItems="center"
17-
color="body.base"
18-
px="1"
19-
{...props}
20-
/>
13+
const FooterButton = forwardRef<HTMLButtonElement, FooterButtonProps>(
14+
({ icon: Icon, children, ...props }, ref) => (
15+
<Button
16+
ref={ref}
17+
className="flex h-fit flex-col items-center px-1 text-body"
18+
variant="ghost"
19+
{...props}
20+
>
21+
<Icon className="h-6 w-6" />
22+
{children}
23+
</Button>
24+
)
2125
)
26+
FooterButton.displayName = "FooterButton"
2227

2328
export default FooterButton

src/components/Nav/Mobile/FooterItemText.tsx

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,8 @@
1-
import { Text } from "@chakra-ui/react"
2-
31
import { ChildOnlyProp } from "@/lib/types"
42

53
const FooterItemText = (props: ChildOnlyProp) => (
6-
<Text
7-
fontSize="sm"
8-
lineHeight="base"
9-
fontWeight="normal"
10-
letterSpacing="wider"
11-
mt="2"
12-
textTransform="uppercase"
13-
textAlign="center"
14-
opacity={0.7}
15-
_hover={{ opacity: 1 }}
4+
<p
5+
className="mt-2 text-center text-sm font-normal uppercase leading-base tracking-wider opacity-70 hover:opacity-100"
166
{...props}
177
/>
188
)
Lines changed: 29 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1+
import { forwardRef } from "react"
12
import { motion } from "framer-motion"
23
import { useTranslation } from "next-i18next"
3-
import { type ButtonProps, Icon } from "@chakra-ui/react"
44

5-
import { IconButton } from "@/components/Buttons"
5+
import { cn } from "@/lib/utils/cn"
66

77
import { HAMBURGER_BUTTON_ID } from "@/lib/constants"
88

9+
import {
10+
Button,
11+
type ButtonProps,
12+
} from "../../../../tailwind/ui/buttons/Button"
13+
914
const hamburgerSvg =
1015
"M 2 13 l 10 0 l 0 0 l 10 0 M 4 19 l 8 0 M 12 19 l 8 0 M 2 25 l 10 0 l 0 0 l 10 0"
1116
const glyphSvg =
@@ -18,57 +23,36 @@ const hamburgerVariants = {
1823

1924
type HamburgerProps = ButtonProps & {
2025
isMenuOpen: boolean
21-
onToggle: () => void
2226
}
2327

24-
const HamburgerButton = ({
25-
isMenuOpen,
26-
onToggle,
27-
...props
28-
}: HamburgerProps) => {
29-
const { t } = useTranslation("common")
30-
31-
return (
32-
<IconButton
33-
id={HAMBURGER_BUTTON_ID}
34-
onClick={onToggle}
35-
aria-label={t("aria-toggle-search-button")}
36-
variant="ghost"
37-
isSecondary
38-
px={0}
39-
color="body.base"
40-
icon={
41-
<Icon
28+
const HamburgerButton = forwardRef<HTMLButtonElement, HamburgerProps>(
29+
({ isMenuOpen, className, ...props }, ref) => {
30+
const { t } = useTranslation("common")
31+
32+
return (
33+
<Button
34+
ref={ref}
35+
id={HAMBURGER_BUTTON_ID}
36+
aria-label={t("aria-toggle-search-button")}
37+
className={cn("px-2 py-0 text-body", className)}
38+
variant="ghost"
39+
{...props}
40+
>
41+
<svg
4242
viewBox="0 0 24 40"
43-
pointerEvents={isMenuOpen ? "none" : "auto"}
44-
mx={0.5}
45-
width={6}
46-
height={10}
47-
position="relative"
48-
strokeWidth="2px"
49-
_hover={{
50-
color: "primary.base",
51-
"& > path": {
52-
stroke: "primary.base",
53-
},
54-
}}
55-
sx={{
56-
"& > path": {
57-
stroke: "text",
58-
fill: "none",
59-
},
60-
}}
43+
className="relative h-10 w-6 stroke-body stroke-2 hover:stroke-primary hover:text-primary [&>path]:fill-none hover:[&>path]:stroke-primary"
6144
>
6245
<motion.path
6346
variants={hamburgerVariants}
6447
initial={false}
6548
animate={isMenuOpen ? "open" : "closed"}
6649
/>
67-
</Icon>
68-
}
69-
{...props}
70-
/>
71-
)
72-
}
50+
</svg>
51+
</Button>
52+
)
53+
}
54+
)
55+
56+
HamburgerButton.displayName = "HamburgerButton"
7357

7458
export default HamburgerButton

0 commit comments

Comments
 (0)