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
+
9
10
import { isMobile } from "../lib/utils/isMobile"
10
11
11
12
import Emoji from "./Emoji"
12
- import InlineLink from "./Link"
13
- import OldHeading from "./OldHeading"
14
13
15
14
// Represent string as 32-bit integer
16
15
const hashCode = ( string : string ) : number => {
@@ -25,12 +24,12 @@ const hashCode = (string: string): number => {
25
24
26
25
// Theme variables from Theme.js
27
26
const colors = [
28
- "gridYellow " ,
29
- "gridBlue " ,
30
- "gridGreen " ,
31
- "gridOrange " ,
32
- "gridPink " ,
33
- "gridPurple " ,
27
+ "bg-yellow-300 " ,
28
+ "bg-blue-300 " ,
29
+ "bg-green-300 " ,
30
+ "bg-orange-100 " ,
31
+ "bg-pink-300 " ,
32
+ "bg-purple-300 " ,
34
33
]
35
34
36
35
interface ILink {
@@ -40,8 +39,6 @@ interface ILink {
40
39
41
40
type GridItemProps = {
42
41
description : string
43
- columnNumber : number
44
- rowNumber : number
45
42
emoji : string
46
43
index : number
47
44
title : string
@@ -54,85 +51,48 @@ type GridItemProps = {
54
51
}
55
52
56
53
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
- )
54
+ return < h3 className = "mb-8 mt-0 text-3xl font-bold sm:text-4xl" > { title } </ h3 >
67
55
}
68
56
69
57
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
- )
58
+ return < h3 className = "mb-8 mt-0 text-3xl font-normal sm:text-4xl" > { title } </ h3 >
80
59
}
81
60
82
61
const Subtitle = ( { children } : ChildOnlyProp ) => {
83
62
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
- >
63
+ < h4 className = "mb-8 mt-0 border-b border-body-medium p-2 pb-4 text-2xl font-semibold sm:text-3xl" >
94
64
{ children }
95
- </ OldHeading >
65
+ </ h4 >
96
66
)
97
67
}
98
68
99
69
const Body = ( { children } : ChildOnlyProp ) => {
100
- return (
101
- < Box fontSize = "xl" lineHeight = "140%" color = "black300" >
102
- { children }
103
- </ Box >
104
- )
70
+ return < div className = "text-xl text-gray-600" > { children } </ div >
105
71
}
106
72
107
73
const StyledEmoji = ( { emoji } : { emoji : string } ) => {
108
74
return (
109
75
< Emoji
110
- className = "order-2 m-2 self-center text-8xl hover:rotate-12 hover:duration-500 "
76
+ className = "order-2 m-2 self-center text-8xl duration-500 hover:rotate-12 "
111
77
text = { emoji }
112
78
/>
113
79
)
114
80
}
115
81
116
82
const Row = ( { children } : ChildOnlyProp ) => {
117
83
return (
118
- < Flex
119
- justify = "space-between"
120
- marginTop = { 8 }
121
- direction = { { base : "column" , md : "row" } }
122
- >
84
+ < Flex className = "mt-8 flex-col justify-between md:flex-row" >
123
85
{ children }
124
86
</ Flex >
125
87
)
126
88
}
127
89
128
90
const Column = ( { children } : ChildOnlyProp ) => {
129
- return < Box width = "100% "> { children } </ Box >
91
+ return < div className = "w-full "> { children } </ div >
130
92
}
131
93
132
94
const GridItem = ( {
133
95
description,
134
- columnNumber,
135
- rowNumber,
136
96
emoji,
137
97
index,
138
98
title,
@@ -146,38 +106,13 @@ const GridItem = ({
146
106
const handleClick = ( ) : void => {
147
107
callback ( index )
148
108
}
149
- const shadow = useColorModeValue ( "tableBox.light" , "tableBox.dark" )
150
109
const { t } = useTranslation ( "page-stablecoins" )
151
110
152
111
return (
153
112
< Flex
154
113
id = { `type-${ index } ` }
155
114
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
- } }
115
+ className = { `flex-col ${ isOpen ? `${ color } col-start-1 row-start-1 row-end-[span_3] cursor-auto justify-start text-gray-600 transition sm:flex-col` : "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" } items-center border border-body p-6 hover:shadow-table-box lg:flex-col lg:items-start lg:justify-start` }
181
116
>
182
117
{ isOpen ? (
183
118
< Emoji className = "mb-8 text-8xl" text = { emoji } />
@@ -228,10 +163,7 @@ const GridItem = ({
228
163
< InlineLink
229
164
key = { idx }
230
165
href = { link . url }
231
- color = "black300"
232
- _hover = { {
233
- color : "black" ,
234
- } }
166
+ className = "text-gray-600 hover:text-gray-900"
235
167
>
236
168
{ link . text }
237
169
</ InlineLink >
@@ -273,18 +205,8 @@ const StablecoinBoxGrid = ({ items }: StablecoinBoxGridProps) => {
273
205
}
274
206
275
207
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
- >
208
+ < 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
209
{ items . map ( ( item , idx ) => {
286
- const columnNumber = 1
287
- const rowNumber = 1
288
210
const colorIdx = hashCode ( item . emoji ) % colors . length
289
211
const color = colors [ colorIdx ]
290
212
return (
@@ -297,15 +219,13 @@ const StablecoinBoxGrid = ({ items }: StablecoinBoxGridProps) => {
297
219
cons = { item . cons }
298
220
links = { item . links }
299
221
index = { idx }
300
- columnNumber = { columnNumber }
301
- rowNumber = { rowNumber }
302
222
isOpen = { idx === indexOpen }
303
223
callback = { handleSelect }
304
224
color = { color }
305
225
/>
306
226
)
307
227
} ) }
308
- </ Box >
228
+ </ div >
309
229
)
310
230
}
311
231
0 commit comments