1
1
import { useState } from "react"
2
2
import { useRouter } from "next/router"
3
3
import { useTranslation } from "next-i18next"
4
- import { Box , Flex } from "@chakra-ui/react"
5
- import { useColorModeValue } from "@chakra-ui/react"
6
4
7
5
import { ChildOnlyProp } from "@/lib/types"
8
6
7
+ import { Flex } from "@/components/ui/flex"
8
+ import InlineLink from "@/components/ui/Link"
9
+
10
+ import { cn } from "@/lib/utils/cn"
11
+
9
12
import { isMobile } from "../lib/utils/isMobile"
10
13
11
14
import Emoji from "./Emoji"
12
- import InlineLink from "./Link"
13
- import OldHeading from "./OldHeading"
14
15
15
16
// Represent string as 32-bit integer
16
17
const hashCode = ( string : string ) : number => {
@@ -25,12 +26,12 @@ const hashCode = (string: string): number => {
25
26
26
27
// Theme variables from Theme.js
27
28
const colors = [
28
- "gridYellow " ,
29
- "gridBlue " ,
30
- "gridGreen " ,
31
- "gridOrange " ,
32
- "gridPink " ,
33
- "gridPurple " ,
29
+ "bg-yellow-300 " ,
30
+ "bg-blue-300 " ,
31
+ "bg-green-300 " ,
32
+ "bg-orange-100 " ,
33
+ "bg-pink-300 " ,
34
+ "bg-purple-300 " ,
34
35
]
35
36
36
37
interface ILink {
@@ -40,8 +41,6 @@ interface ILink {
40
41
41
42
type GridItemProps = {
42
43
description : string
43
- columnNumber : number
44
- rowNumber : number
45
44
emoji : string
46
45
index : number
47
46
title : string
@@ -54,85 +53,48 @@ type GridItemProps = {
54
53
}
55
54
56
55
const OpenTitle = ( { title } : { title : string } ) => {
57
- return (
58
- < OldHeading
59
- as = "h3"
60
- fontSize = { { base : "2rem" , sm : "2.5rem" } }
61
- fontWeight = { 700 }
62
- marginTop = { 0 }
63
- >
64
- { title }
65
- </ OldHeading >
66
- )
56
+ return < h3 className = "mb-8 mt-0 text-3xl font-bold sm:text-4xl" > { title } </ h3 >
67
57
}
68
58
69
59
const Title = ( { title } : { title : string } ) => {
70
- return (
71
- < OldHeading
72
- as = "h3"
73
- fontSize = { { base : "2rem" , sm : "2.5rem" } }
74
- fontWeight = { 400 }
75
- marginTop = { 0 }
76
- >
77
- { title }
78
- </ OldHeading >
79
- )
60
+ return < h3 className = "mb-8 mt-0 text-3xl font-normal sm:text-4xl" > { title } </ h3 >
80
61
}
81
62
82
63
const Subtitle = ( { children } : ChildOnlyProp ) => {
83
64
return (
84
- < OldHeading
85
- as = "h4"
86
- fontSize = { { base : "2xl" , sm : "2rem" } }
87
- fontWeight = { 600 }
88
- marginTop = { 0 }
89
- padding = { 2 }
90
- paddingBottom = { 4 }
91
- borderBottom = "1px solid"
92
- borderColor = "black300"
93
- >
65
+ < h4 className = "mb-8 mt-0 border-b border-body-medium p-2 pb-4 text-2xl font-semibold sm:text-3xl" >
94
66
{ children }
95
- </ OldHeading >
67
+ </ h4 >
96
68
)
97
69
}
98
70
99
71
const Body = ( { children } : ChildOnlyProp ) => {
100
- return (
101
- < Box fontSize = "xl" lineHeight = "140%" color = "black300" >
102
- { children }
103
- </ Box >
104
- )
72
+ return < div className = "text-xl text-gray-600" > { children } </ div >
105
73
}
106
74
107
75
const StyledEmoji = ( { emoji } : { emoji : string } ) => {
108
76
return (
109
77
< Emoji
110
- className = "order-2 m-2 self-center text-8xl hover:rotate-12 hover:duration-500 "
78
+ className = "order-2 m-2 self-center text-8xl duration-500 hover:rotate-12 "
111
79
text = { emoji }
112
80
/>
113
81
)
114
82
}
115
83
116
84
const Row = ( { children } : ChildOnlyProp ) => {
117
85
return (
118
- < Flex
119
- justify = "space-between"
120
- marginTop = { 8 }
121
- direction = { { base : "column" , md : "row" } }
122
- >
86
+ < Flex className = "mt-8 flex-col justify-between md:flex-row" >
123
87
{ children }
124
88
</ Flex >
125
89
)
126
90
}
127
91
128
92
const Column = ( { children } : ChildOnlyProp ) => {
129
- return < Box width = "100% "> { children } </ Box >
93
+ return < div className = "w-full "> { children } </ div >
130
94
}
131
95
132
96
const GridItem = ( {
133
97
description,
134
- columnNumber,
135
- rowNumber,
136
98
emoji,
137
99
index,
138
100
title,
@@ -146,38 +108,19 @@ const GridItem = ({
146
108
const handleClick = ( ) : void => {
147
109
callback ( index )
148
110
}
149
- const shadow = useColorModeValue ( "tableBox.light" , "tableBox.dark" )
150
111
const { t } = useTranslation ( "page-stablecoins" )
151
112
152
113
return (
153
114
< Flex
154
115
id = { `type-${ index } ` }
155
116
onClick = { ( ) => handleClick ( ) }
156
- gridRowStart = { isOpen ? rowNumber : `auto` }
157
- gridRowEnd = { isOpen ? `span 3` : `auto` }
158
- gridColumnStart = { isOpen ? columnNumber : `auto` }
159
- color = { isOpen ? "black300" : "text" }
160
- cursor = { isOpen ? `auto` : `pointer` }
161
- background = { isOpen ? color : "background.base" }
162
- direction = { {
163
- base : "column" ,
164
- sm : `${ isOpen ? "column" : "row" } ` ,
165
- lg : "column" ,
166
- } }
167
- justify = { {
168
- base : `${ isOpen ? "flex-start" : "space-between" } ` ,
169
- lg : "flex-start" ,
170
- } }
171
- align = { { base : "center" , lg : "flex-start" } }
172
- border = "1px solid"
173
- borderColor = "text"
174
- padding = { 6 }
175
- _hover = { {
176
- background : isOpen ? color : "ednBackground" ,
177
- transition : isOpen ? "auto" : "transform 0.5s" ,
178
- transform : isOpen ? "auto" : "skewX(-5deg)" ,
179
- boxShadow : shadow ,
180
- } }
117
+ className = { cn (
118
+ "flex-col" ,
119
+ isOpen
120
+ ? `${ color } col-start-1 row-start-1 row-end-[span_3] cursor-auto justify-start text-gray-600 transition sm:flex-col`
121
+ : "col-start-auto row-start-auto row-end-auto cursor-pointer justify-between bg-background transition-transform duration-500 hover:skew-x-[-5deg] hover:bg-background-highlight sm:flex-row" ,
122
+ "items-center border border-body p-6 hover:shadow-table-box lg:flex-col lg:items-start lg:justify-start"
123
+ ) }
181
124
>
182
125
{ isOpen ? (
183
126
< Emoji className = "mb-8 text-8xl" text = { emoji } />
@@ -228,10 +171,7 @@ const GridItem = ({
228
171
< InlineLink
229
172
key = { idx }
230
173
href = { link . url }
231
- color = "black300"
232
- _hover = { {
233
- color : "black" ,
234
- } }
174
+ className = "text-gray-600 hover:text-gray-900"
235
175
>
236
176
{ link . text }
237
177
</ InlineLink >
@@ -273,18 +213,8 @@ const StablecoinBoxGrid = ({ items }: StablecoinBoxGridProps) => {
273
213
}
274
214
275
215
return (
276
- < Box
277
- gridTemplateColumns = "3fr 1fr"
278
- gridTemplateRows = "3fr 3fr"
279
- borderRadius = "sm"
280
- my = { 16 }
281
- display = { { base : "flex" , lg : "grid" } }
282
- flexDirection = "column"
283
- maxW = "100%"
284
- >
216
+ < div className = "my-16 flex max-w-full flex-col rounded-sm lg:grid lg:grid-cols-[3fr_1fr] lg:grid-rows-[3fr_3fr]" >
285
217
{ items . map ( ( item , idx ) => {
286
- const columnNumber = 1
287
- const rowNumber = 1
288
218
const colorIdx = hashCode ( item . emoji ) % colors . length
289
219
const color = colors [ colorIdx ]
290
220
return (
@@ -297,15 +227,13 @@ const StablecoinBoxGrid = ({ items }: StablecoinBoxGridProps) => {
297
227
cons = { item . cons }
298
228
links = { item . links }
299
229
index = { idx }
300
- columnNumber = { columnNumber }
301
- rowNumber = { rowNumber }
302
230
isOpen = { idx === indexOpen }
303
231
callback = { handleSelect }
304
232
color = { color }
305
233
/>
306
234
)
307
235
} ) }
308
- </ Box >
236
+ </ div >
309
237
)
310
238
}
311
239
0 commit comments