Skip to content

Commit 31e5ed3

Browse files
authored
Merge pull request #13984 from ethereum/shadcn-tab
Shadcn migration - tabs
2 parents 6b5ad1c + 475d0dd commit 31e5ed3

File tree

6 files changed

+93
-57
lines changed

6 files changed

+93
-57
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"@radix-ui/react-radio-group": "^1.2.0",
4848
"@radix-ui/react-slot": "^1.1.0",
4949
"@radix-ui/react-switch": "^1.1.0",
50+
"@radix-ui/react-tabs": "^1.1.0",
5051
"@radix-ui/react-tooltip": "^1.1.2",
5152
"@radix-ui/react-visually-hidden": "^1.1.0",
5253
"@socialgouv/matomo-next": "^1.8.0",

src/components/Tabs.tsx

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/components/ui/tabs.tsx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import * as React from "react"
2+
import * as TabsPrimitive from "@radix-ui/react-tabs"
3+
4+
import { cn } from "@/lib/utils/cn"
5+
6+
const Tabs = TabsPrimitive.Root
7+
8+
const TabsList = React.forwardRef<
9+
React.ElementRef<typeof TabsPrimitive.List>,
10+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>
11+
>(({ className, ...props }, ref) => (
12+
<TabsPrimitive.List
13+
ref={ref}
14+
className={cn(
15+
"inline-flex h-10 items-center justify-center rounded-md bg-background-highlight p-1",
16+
className
17+
)}
18+
{...props}
19+
/>
20+
))
21+
TabsList.displayName = TabsPrimitive.List.displayName
22+
23+
const TabsTrigger = React.forwardRef<
24+
React.ElementRef<typeof TabsPrimitive.Trigger>,
25+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
26+
>(({ className, ...props }, ref) => (
27+
<TabsPrimitive.Trigger
28+
ref={ref}
29+
className={cn(
30+
"inline-flex items-center justify-center whitespace-nowrap rounded-t border-b border-b-primary px-4 py-1.5 ring-offset-background transition-all focus-visible:outline focus-visible:outline-4 focus-visible:-outline-offset-1 focus-visible:outline-primary-hover disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-primary data-[state=active]:text-body-inverse",
31+
className
32+
)}
33+
{...props}
34+
/>
35+
))
36+
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
37+
38+
const TabsContent = React.forwardRef<
39+
React.ElementRef<typeof TabsPrimitive.Content>,
40+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
41+
>(({ className, ...props }, ref) => (
42+
<TabsPrimitive.Content
43+
ref={ref}
44+
className={cn(
45+
"mt-4 rounded-lg border p-6 ring-offset-background focus-visible:outline focus-visible:outline-4 focus-visible:-outline-offset-1 focus-visible:outline-primary-hover",
46+
className
47+
)}
48+
{...props}
49+
/>
50+
))
51+
TabsContent.displayName = TabsPrimitive.Content.displayName
52+
53+
export { Tabs, TabsContent, TabsList, TabsTrigger }

src/pages/get-eth.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type { GetStaticProps, InferGetStaticPropsType } from "next/types"
22
import { useTranslation } from "next-i18next"
33
import { serverSideTranslations } from "next-i18next/serverSideTranslations"
44
import type { ReactNode } from "react"
5-
import { useBreakpointValue } from "@chakra-ui/react"
65

76
import type { BasePageProps, ChildOnlyProp, Lang } from "@/lib/types"
87

@@ -38,6 +37,7 @@ import { trackCustomEvent } from "@/lib/utils/matomo"
3837
import { getLocaleTimestamp } from "@/lib/utils/time"
3938
import { getRequiredNamespacesForPage } from "@/lib/utils/translations"
4039

40+
import { useBreakpointValue } from "@/hooks/useBreakpointValue"
4141
import uniswap from "@/public/images/dapps/uni.png"
4242
import dapps from "@/public/images/doge-computer.png"
4343
import oneinch from "@/public/images/exchanges/1inch.png"
@@ -104,6 +104,12 @@ const GetEthPage = ({
104104
}: InferGetStaticPropsType<typeof getStaticProps>) => {
105105
const { t } = useTranslation("page-get-eth")
106106

107+
const walletImageWidth = useBreakpointValue({
108+
base: "full",
109+
sm: "60%",
110+
md: "50%",
111+
})
112+
107113
const tokenSwaps: CardListItem[] = [
108114
{
109115
title: "Uniswap",
@@ -144,12 +150,6 @@ const GetEthPage = ({
144150
},
145151
]
146152

147-
const walletImageWidth = useBreakpointValue({
148-
base: "full",
149-
sm: "60%",
150-
md: "50%",
151-
})
152-
153153
return (
154154
<MainArticle>
155155
<Stack className="gap-16 p-8">

src/pages/what-is-ethereum.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import MainArticle from "@/components/MainArticle"
3030
import PageMetadata from "@/components/PageMetadata"
3131
import { StandaloneQuizWidget } from "@/components/Quiz/QuizWidget"
3232
import StatErrorMessage from "@/components/StatErrorMessage"
33-
import Tabs from "@/components/Tabs"
3433
import Tooltip from "@/components/Tooltip"
3534
import Translation from "@/components/Translation"
3635
import { Button, ButtonLink } from "@/components/ui/buttons/Button"
@@ -42,6 +41,7 @@ import {
4241
SwiperNavigation,
4342
SwiperSlide,
4443
} from "@/components/ui/swiper"
44+
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
4545

4646
import { cn } from "@/lib/utils/cn"
4747
import { existsNamespace } from "@/lib/utils/existsNamespace"
@@ -288,7 +288,7 @@ const WhatIsEthereumPage = ({
288288
</Stack>
289289
),
290290
},
291-
]
291+
] as const
292292

293293
const slides = [
294294
{ eventName: "Payments slide" },
@@ -383,15 +383,28 @@ const WhatIsEthereumPage = ({
383383
<TwoColumnContent>
384384
<Width60>
385385
<Tabs
386-
onTabClick={(index) => {
386+
defaultValue="0"
387+
onValueChange={(index) => {
387388
trackCustomEvent({
388389
eventCategory: `Blockchain/crypto tab`,
389390
eventAction: `Clicked`,
390391
eventName: tabs[index].eventName,
391392
})
392393
}}
393-
tabs={tabs}
394-
/>
394+
>
395+
<TabsList>
396+
{tabs.map((tab, index) => (
397+
<TabsTrigger key={index} value={index.toString()}>
398+
{tab.title}
399+
</TabsTrigger>
400+
))}
401+
</TabsList>
402+
{tabs.map((tab, index) => (
403+
<TabsContent key={index} value={index.toString()}>
404+
{tab.content}
405+
</TabsContent>
406+
))}
407+
</Tabs>
395408
</Width60>
396409
<Width40 />
397410
</TwoColumnContent>

yarn.lock

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4187,6 +4187,20 @@
41874187
"@radix-ui/react-use-previous" "1.1.0"
41884188
"@radix-ui/react-use-size" "1.1.0"
41894189

4190+
"@radix-ui/react-tabs@^1.1.0":
4191+
version "1.1.0"
4192+
resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz#0a6db1caed56776a1176aae68532060e301cc1c0"
4193+
integrity sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==
4194+
dependencies:
4195+
"@radix-ui/primitive" "1.1.0"
4196+
"@radix-ui/react-context" "1.1.0"
4197+
"@radix-ui/react-direction" "1.1.0"
4198+
"@radix-ui/react-id" "1.1.0"
4199+
"@radix-ui/react-presence" "1.1.0"
4200+
"@radix-ui/react-primitive" "2.0.0"
4201+
"@radix-ui/react-roving-focus" "1.1.0"
4202+
"@radix-ui/react-use-controllable-state" "1.1.0"
4203+
41904204
"@radix-ui/react-tooltip@^1.1.2":
41914205
version "1.1.2"
41924206
resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.2.tgz#c42db2ffd7dcc6ff3d65407c8cb70490288f518d"

0 commit comments

Comments
 (0)