Skip to content

Commit ab255bf

Browse files
committed
Migrate developers/index.ts to Shadcn
1 parent 4051a0b commit ab255bf

File tree

1 file changed

+59
-96
lines changed

1 file changed

+59
-96
lines changed

src/pages/developers/index.tsx

Lines changed: 59 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,97 @@
1-
import { ReactNode } from "react"
1+
import { HTMLAttributes, ReactNode } from "react"
22
import { GetStaticProps } from "next"
33
import { useTranslation } from "next-i18next"
44
import { serverSideTranslations } from "next-i18next/serverSideTranslations"
5-
import {
6-
Box,
7-
chakra,
8-
Flex,
9-
Heading,
10-
SimpleGrid,
11-
Stack,
12-
TextProps,
13-
useColorModeValue,
14-
} from "@chakra-ui/react"
155

166
import { BasePageProps, ChildOnlyProp, Lang } from "@/lib/types"
177

18-
import ButtonLink from "@/components/Buttons/ButtonLink"
198
import Callout from "@/components/Callout"
209
import Card, { CardProps } from "@/components/Card"
2110
import FeedbackCard from "@/components/FeedbackCard"
11+
import Heading from "@/components/Heading"
2212
import HubHero from "@/components/Hero/HubHero"
23-
import { Image } from "@/components/Image"
24-
import InlineLink from "@/components/Link"
13+
import { TwImage } from "@/components/Image"
2514
import MainArticle from "@/components/MainArticle"
26-
import OldHeading from "@/components/OldHeading"
27-
import Text from "@/components/OldText"
2815
import PageMetadata from "@/components/PageMetadata"
2916
import Translation from "@/components/Translation"
17+
import { ButtonLink } from "@/components/ui/buttons/Button"
18+
import { Flex, Stack, VStack } from "@/components/ui/flex"
19+
import InlineLink from "@/components/ui/Link"
3020

21+
import { cn } from "@/lib/utils/cn"
3122
import { existsNamespace } from "@/lib/utils/existsNamespace"
3223
import { getLastDeployDate } from "@/lib/utils/getLastDeployDate"
3324
import { getLocaleTimestamp } from "@/lib/utils/time"
3425
import { getRequiredNamespacesForPage } from "@/lib/utils/translations"
3526

27+
import useColorModeValue from "@/hooks/useColorModeValue"
3628
import SpeedRunEthereumImage from "@/public/images/dev-tools/speed-run-ethereum-banner.png"
3729
import DevelopersImage from "@/public/images/developers-eth-blocks.png"
3830
import DogeImage from "@/public/images/doge-computer.png"
3931
import HeroImage from "@/public/images/heroes/developers-hub-hero.jpg"
4032

4133
const Page = (props: ChildOnlyProp) => (
42-
<Flex
43-
flexDirection="column"
44-
alignItems="center"
45-
w="full"
46-
my={0}
47-
mx="auto"
48-
{...props}
49-
/>
34+
<VStack className="mx-auto my-0 w-full" {...props} />
5035
)
5136

5237
const GrayContainer = (props: ChildOnlyProp) => (
53-
<Box
54-
w="full"
55-
py={16}
56-
px={0}
57-
mt={8}
58-
bg="grayBackground"
59-
boxShadow="inset 0px 1px 0px var(--eth-colors-tableItemBoxShadow)"
38+
<div
39+
className="mt-8 w-full border-t bg-background-highlight px-0 py-16 shadow-table-item-box"
6040
{...props}
6141
/>
6242
)
6343

6444
const Content = (props: ChildOnlyProp) => (
65-
<Box as={MainArticle} py={4} px={8} w="full" {...props} />
45+
<MainArticle className="w-full px-8 py-4" {...props} />
6646
)
6747

68-
const Subtitle = (props: TextProps) => (
69-
<Text fontSize="xl" lineHeight="140%" color="text200" {...props} />
48+
const Subtitle = ({
49+
className,
50+
...props
51+
}: HTMLAttributes<HTMLHeadingElement>) => (
52+
<p className={cn("leading-xs text-body-medium", className)} {...props} />
7053
)
7154

72-
const MonoSubtitle = (props: ChildOnlyProp) => <OldHeading mb={0} {...props} />
55+
const MonoSubtitle = (props: ChildOnlyProp) => (
56+
<h2 className="mb-0 mt-6" {...props} />
57+
)
58+
59+
const H2 = (props: ChildOnlyProp) => <h2 className="mb-8 mt-12" {...props} />
60+
61+
const H3 = (props: ChildOnlyProp) => <h3 className="mb-8 mt-10" {...props} />
62+
63+
const Text = (props: ChildOnlyProp) => <p className="mb-6" {...props} />
7364

7465
const StyledCardContainer = (props: ChildOnlyProp) => (
75-
<SimpleGrid columns={[1, 1, 2, 4]} mx={-4} mt={8} mb={12} {...props} />
66+
<div
67+
className="-mx-4 mb-12 mt-8 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4"
68+
{...props}
69+
/>
7670
)
7771

7872
const TwoColumnContent = (props: ChildOnlyProp) => (
7973
<Flex
80-
justifyContent="space-between"
81-
alignItems={{ base: "flex-start", lg: "center" }}
82-
flexDirection={{ base: "column", lg: "row" }}
83-
w="100%"
74+
className="w-full flex-col items-start justify-between lg:flex-row lg:items-center"
8475
{...props}
8576
/>
8677
)
8778

8879
const ThreeColumnContent = (props: ChildOnlyProp) => (
8980
<Flex
90-
py={0}
91-
px={8}
92-
w="full"
93-
justifyContent="space-between"
94-
alignItems={{ base: "flex-start", lg: "flex-start" }}
95-
flexDirection={{ base: "column", lg: "row" }}
81+
className="flex-col items-start justify-between px-8 py-0 lg:flex-row"
9682
{...props}
9783
/>
9884
)
9985

10086
const Column = (props: ChildOnlyProp) => (
101-
<Box flex="1 1 33%" mb={6} me={8} w="full" {...props} />
87+
<div className="mb-6 me-8 w-full flex-1 basis-1/3" {...props} />
10288
)
10389
const RightColumn = (props: ChildOnlyProp) => (
104-
<Box flex="1 1 33%" mb={6} me={0} w="full" {...props} />
90+
<div className="mb-6 me-0 w-full flex-1 basis-1/3" {...props} />
10591
)
10692
const IntroColumn = (props: ChildOnlyProp) => (
107-
<Box
108-
flex="1 1 33%"
109-
mb={6}
110-
mt={{ base: 0, lg: 32 }}
111-
me={{ base: 0, sm: 8 }}
112-
w="full"
93+
<div
94+
className="mb-6 me-0 mt-0 w-full flex-1 basis-1/3 sm:me-8 lg:mt-32"
11395
{...props}
11496
/>
11597
)
@@ -134,44 +116,26 @@ const StyledCard = (props: CardProps) => {
134116
)
135117
}
136118

137-
const StyledCallout = chakra(Callout, {
138-
baseStyle: {
139-
flex: { base: "auto", md: "1 1 416px" },
140-
},
141-
})
142-
143119
const SpeedRunEthereumBanner = ({
144120
title,
145121
linkLabel,
146122
}: {
147123
title: string
148124
linkLabel: string
149125
}) => (
150-
<Box position="relative" mb={{ xl: 12 }}>
151-
<Image
126+
<div className="relative xl:mb-12">
127+
<TwImage
128+
className="h-[450px] xl:h-auto"
152129
src={SpeedRunEthereumImage}
153130
alt="SpeedRunEthereum banner"
154131
sizes="100vw"
155132
style={{ width: "100vw", objectFit: "cover", objectPosition: "20%" }}
156-
h={{
157-
base: "450px",
158-
xl: "auto",
159-
}}
160133
/>
161-
<Stack
162-
spacing={{ base: "3", md: "4" }}
163-
p={{ base: "6", lg: "8" }}
164-
position="absolute"
165-
insetInlineStart={{ md: "8" }}
166-
maxW={{ base: "lg", xl: "xl" }}
167-
top={{ base: "0", md: "50" }}
168-
wordBreak="break-word"
169-
alignItems="flex-start"
170-
>
134+
<Stack className="absolute top-0 max-w-lg items-start space-y-3 break-words p-6 md:top-12 md:ms-8 md:space-y-4 lg:p-8 xl:max-w-xl">
171135
<Heading>{title}</Heading>
172136
<ButtonLink href="https://speedrunethereum.com/">{linkLabel}</ButtonLink>
173137
</Stack>
174-
</Box>
138+
</div>
175139
)
176140

177141
export const getStaticProps = (async ({ locale }) => {
@@ -294,10 +258,10 @@ const DevelopersPage = () => {
294258
/>
295259
<TwoColumnContent>
296260
<IntroColumn>
297-
<OldHeading>
261+
<H2>
298262
<Translation id="page-developers-index:page-developers-about" />
299-
</OldHeading>
300-
<Subtitle mb={6}>
263+
</H2>
264+
<Subtitle className="mb-6">
301265
<Translation id="page-developers-index:page-developers-about-desc" />
302266
</Subtitle>
303267
<Text>
@@ -310,7 +274,8 @@ const DevelopersPage = () => {
310274
</InlineLink>
311275
</Text>
312276
</IntroColumn>
313-
<StyledCallout
277+
<Callout
278+
className="flex-auto md:flex-[1_1_416px]"
314279
image={DevelopersImage}
315280
titleKey="page-developers-index:page-developers-improve-ethereum"
316281
descriptionKey="page-developers-index:page-developers-improve-ethereum-desc"
@@ -321,21 +286,21 @@ const DevelopersPage = () => {
321286
<Translation id="page-developers-index:page-developers-contribute" />
322287
</ButtonLink>
323288
</div>
324-
</StyledCallout>
289+
</Callout>
325290
</TwoColumnContent>
326291
</Content>
327292
<GrayContainer>
328293
<Content>
329-
<OldHeading>
294+
<H2>
330295
<Translation id="page-developers-index:page-developers-explore-documentation" />
331-
</OldHeading>
296+
</H2>
332297
</Content>
333298

334299
<ThreeColumnContent>
335300
<Column>
336-
<OldHeading as="h3" fontSize={{ base: "xl", md: "2xl" }}>
301+
<H3>
337302
<Translation id="page-developers-index:page-developers-docs-introductions" />
338-
</OldHeading>
303+
</H3>
339304
<InlineLink href="/developers/docs/intro-to-ethereum/">
340305
<Translation id="page-developers-index:page-developers-intro-eth-link" />
341306
</InlineLink>
@@ -377,18 +342,16 @@ const DevelopersPage = () => {
377342
<Text>
378343
<Translation id="page-developers-index:page-developers-language-desc" />
379344
</Text>
380-
<Image
381-
hideBelow="lg"
345+
<TwImage
346+
className="mt-16 hidden max-w-[400px] lg:block"
382347
src={DogeImage}
383348
alt={t("page-assets-doge")}
384-
maxW="400px"
385-
mt={16}
386349
/>
387350
</Column>
388351
<Column>
389-
<OldHeading as="h3" fontSize={{ base: "xl", md: "2xl" }}>
352+
<H3>
390353
<Translation id="page-developers-index:page-developers-fundamentals" />
391-
</OldHeading>
354+
</H3>
392355
<InlineLink href="/developers/docs/accounts/">
393356
<Translation id="page-developers-index:page-developers-accounts-link" />
394357
</InlineLink>
@@ -453,9 +416,9 @@ const DevelopersPage = () => {
453416
</Text>
454417
</Column>
455418
<RightColumn>
456-
<OldHeading as="h3" fontSize={{ base: "xl", md: "2xl" }}>
419+
<H3>
457420
<Translation id="page-developers-index:page-developers-stack" />
458-
</OldHeading>
421+
</H3>
459422
<InlineLink href="/developers/docs/smart-contracts/">
460423
<Translation id="page-developers-index:page-developers-smart-contracts-link" />
461424
</InlineLink>
@@ -504,9 +467,9 @@ const DevelopersPage = () => {
504467
<Text>
505468
<Translation id="page-developers-index:page-developers-dev-env-desc" />
506469
</Text>
507-
<OldHeading as="h3" fontSize={{ base: "xl", md: "2xl" }}>
470+
<H3>
508471
<Translation id="page-developers-index:page-developers-advanced" />
509-
</OldHeading>
472+
</H3>
510473
<InlineLink href="/developers/docs/standards/tokens/">
511474
<Translation id="page-developers-index:page-developers-token-standards-link" />
512475
</InlineLink>

0 commit comments

Comments
 (0)