From f41e6dac6dfb8c0f32c6e63229ea60427c25a2b1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:26:52 -0700 Subject: [PATCH 001/273] theme: implement purple for primary tw --- src/styles/global.css | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index 9749d52a936..0f2feb38570 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -19,6 +19,20 @@ --gray-800: #1b1b1b; --gray-900: #141414; + --purple-100: #f1eafa; + --purple-200: #e2d3fb; + --purple-250: #d1baf7; + --purple-300: #c0a1f3; + --purple-400: #ba96ea; + --purple-500: #af88ef; + --purple-600: #8c56d1; + --purple-700: #7b43c2; + --purple-750: #6c24df; + --purple-800: #561bb5; + --purple-850: #41128b; + --purple-900: #342b40; + --purple-950: #2b0961; + --blue-50: #f6f6ff; --blue-100: #ebebff; --blue-200: #d6d6ff; @@ -58,11 +72,11 @@ --yellow-500: #bd8400; /* Semantic Colors: Light mode */ - --primary: var(--blue-500); - --primary-high-contrast: var(--blue-800); - --primary-low-contrast: var(--blue-100); - --primary-hover: var(--blue-400); - --primary-visited: var(--blue-700); + --primary: var(--purple-750); + --primary-high-contrast: var(--purple-850); + --primary-low-contrast: var(--purple-200); + --primary-hover: var(--purple-800); + --primary-visited: var(--purple-800); /* ! Deprecating primary-light */ --primary-light: var(--blue-100); /* ! Deprecating primary-dark */ @@ -119,11 +133,11 @@ [data-theme="dark"] { /* Semantic Colors: Dark mode */ - --primary: var(--orange-500); - --primary-high-contrast: var(--orange-100); - --primary-low-contrast: var(--orange-800); - --primary-hover: var(--orange-400); - --primary-visited: var(--orange-550); + --primary: var(--purple-500); + --primary-high-contrast: var(--purple-250); + --primary-low-contrast: var(--purple-950); + --primary-hover: var(--purple-300); + --primary-visited: var(--purple-300); /* ! Deprecating primary-light */ --primary-light: var(--orange-100); /* ! Deprecating primary-dark */ From 1e62fd4e3789e59d59c30b0c7980ab2cb58cf9e0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 26 Jul 2024 19:17:06 -0700 Subject: [PATCH 002/273] styles: load inter weight 900, linting --- src/styles/fonts.css | 129 +++++++++++++++++++++++++++++++++---------- 1 file changed, 100 insertions(+), 29 deletions(-) diff --git a/src/styles/fonts.css b/src/styles/fonts.css index d9e62abd6a8..213b5fbc7fd 100644 --- a/src/styles/fonts.css +++ b/src/styles/fonts.css @@ -1,4 +1,4 @@ -/* css imported from https://fonts.googleapis.com/css2?family=Inter:wght@400;700 */ +/* css imported from https://fonts.googleapis.com/css2?family=Inter:wght@400;700;900 */ /* cyrillic-ext */ @font-face { @@ -9,7 +9,7 @@ src: url(/fonts/inter/cyrillic-ext.woff2) format("woff2"); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; - } +} /* cyrillic */ @font-face { font-family: "Inter"; @@ -36,7 +36,7 @@ font-display: swap; src: url(/fonts/inter/greek.woff2) format("woff2"); unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, - U+03A3-03FF; + U+03A3-03FF; } /* vietnamese */ @font-face { @@ -46,7 +46,7 @@ font-display: swap; src: url(/fonts/inter/vietnamese.woff2) format("woff2"); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, + U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; } /* latin-ext */ @@ -58,7 +58,7 @@ src: url(/fonts/inter/latin-ext.woff2) format("woff2"); unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; - } +} /* latin */ @font-face { font-family: "Inter"; @@ -67,9 +67,10 @@ font-display: swap; src: url(/fonts/inter/latin.woff2) format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, - U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, + U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } + /* cyrillic-ext */ @font-face { font-family: "Inter"; @@ -78,7 +79,7 @@ font-display: swap; src: url(/fonts/inter/cyrillic-ext.woff2) format("woff2"); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; + U+FE2E-FE2F; } /* cyrillic */ @font-face { @@ -106,7 +107,7 @@ font-display: swap; src: url(/fonts/inter/greek.woff2) format("woff2"); unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, - U+03A3-03FF; + U+03A3-03FF; } /* vietnamese */ @font-face { @@ -118,8 +119,8 @@ unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; - } - /* latin-ext */ +} +/* latin-ext */ @font-face { font-family: "Inter"; font-style: normal; @@ -127,7 +128,7 @@ font-display: swap; src: url(/fonts/inter/latin-ext.woff2) format("woff2"); unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, - U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; + U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { @@ -137,49 +138,119 @@ font-display: swap; src: url(/fonts/inter/latin.woff2) format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, - U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, + U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url(/fonts/inter/cyrillic-ext.woff2) format("woff2"); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, + U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url(/fonts/inter/cyrillic.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url(/fonts/inter/greek-ext.woff2) format("woff2"); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url(/fonts/inter/greek.woff2) format("woff2"); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, + U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url(/fonts/inter/vietnamese.woff2) format("woff2"); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, + U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, + U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url(/fonts/inter/latin-ext.woff2) format("woff2"); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, + U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url(/fonts/inter/latin.woff2) format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, + U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, + U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } /* css imported from https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400 */ /* cyrillic-ext */ @font-face { - font-family: 'IBM Plex Mono'; + font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; - src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format('truetype'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; + src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format("truetype"); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, + U+FE2E-FE2F; } /* cyrillic */ @font-face { - font-family: 'IBM Plex Mono'; + font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; - src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format('truetype'); + src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format("truetype"); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* vietnamese */ @font-face { - font-family: 'IBM Plex Mono'; + font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; - src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format('truetype'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; + src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format("truetype"); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, + U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, + U+1EA0-1EF9, U+20AB; } /* latin-ext */ @font-face { - font-family: 'IBM Plex Mono'; + font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; - src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format('truetype'); - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; + src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format("truetype"); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, + U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { - font-family: 'IBM Plex Mono'; + font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; - src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format('truetype'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} \ No newline at end of file + src: url(/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf) format("truetype"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, + U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, + U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} From e2c1ac4de36c17b81c56f1708871aa52fbd6d8b6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 07:52:08 -0700 Subject: [PATCH 003/273] refactor: migrate Morpher to tw, new theme remove Chakra dependency --- src/components/Morpher.tsx | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/components/Morpher.tsx b/src/components/Morpher.tsx index 36e157bad76..ec89f1b2d6e 100644 --- a/src/components/Morpher.tsx +++ b/src/components/Morpher.tsx @@ -1,7 +1,5 @@ import { useEffect, useState } from "react" -import { useBreakpointValue } from "@chakra-ui/react" - -import { Button } from "@/components/Buttons" +import { useMediaQuery } from "usehooks-ts" import { DESKTOP_LANGUAGE_BUTTON_NAME, @@ -9,6 +7,8 @@ import { MOBILE_LANGUAGE_BUTTON_NAME, } from "@/lib/constants" +import { Button } from "../../tailwind/ui/buttons/Button" + const Morpher = () => { const [state, setState] = useState({ text: "Ethereum", @@ -125,6 +125,8 @@ const Morpher = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, []) + const isLarge = useMediaQuery("(min-width: 48rem)") // TW md breakpoint, 768px + const handleMobileClick = () => { if (!document) return ;(document.getElementById(HAMBURGER_BUTTON_ID) as HTMLButtonElement).click() @@ -147,25 +149,16 @@ const Morpher = () => { ).click() } - const handleClick = - useBreakpointValue({ - base: handleMobileClick, - md: handleDesktopClick, - }) || handleDesktopClick - return ( - + <> + + ) } From c53fd85a3ea1ed85d692821c5f4ee15a0745204f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 08:11:31 -0700 Subject: [PATCH 004/273] feat: migrate and update HomeHero tw, new design --- src/components/Hero/HomeHero/index.tsx | 52 +++++++++++--------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index c4408f80b5e..9deab28a2e4 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -1,10 +1,8 @@ +import NextImage from "next/image" import { useTranslation } from "next-i18next" -import { Box, Heading, Stack, Text, VStack } from "@chakra-ui/react" import type { CommonHeroProps } from "@/lib/types" -import { ButtonLink } from "@/components/Buttons" -import { Image } from "@/components/Image" import Morpher from "@/components/Morpher" export type HomeHeroProps = Pick @@ -12,40 +10,32 @@ export type HomeHeroProps = Pick const HomeHero = ({ heroImg }: HomeHeroProps) => { const { t } = useTranslation("page-index") return ( - - - +
+ - - - - - - - {t("page-index:page-index-title")} - - {t("page-index:page-index-description")} - - {t("page-index:page-index-title-button")} - - - - - +
+
+ +
+

{t("page-index:page-index-title")}

+

+ The leading platform for innovative apps and Ethereum-backed + blockchain networks +

+
+
+ ) } From 27ece812772e7d2b781451323469d5c4e58ed4f5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 09:15:43 -0700 Subject: [PATCH 005/273] chore: import icon svg assets --- src/components/icons/choose-network-icon.svg | 3 ++ src/components/icons/get-eth-icon.svg | 39 +++++++++++++++++++ src/components/icons/pick-wallet-icon.svg | 40 ++++++++++++++++++++ src/components/icons/try-apps-icon.svg | 13 +++++++ 4 files changed, 95 insertions(+) create mode 100644 src/components/icons/choose-network-icon.svg create mode 100644 src/components/icons/get-eth-icon.svg create mode 100644 src/components/icons/pick-wallet-icon.svg create mode 100644 src/components/icons/try-apps-icon.svg diff --git a/src/components/icons/choose-network-icon.svg b/src/components/icons/choose-network-icon.svg new file mode 100644 index 00000000000..22706cd00bd --- /dev/null +++ b/src/components/icons/choose-network-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/icons/get-eth-icon.svg b/src/components/icons/get-eth-icon.svg new file mode 100644 index 00000000000..3fd9af8a4fc --- /dev/null +++ b/src/components/icons/get-eth-icon.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/icons/pick-wallet-icon.svg b/src/components/icons/pick-wallet-icon.svg new file mode 100644 index 00000000000..2e3235b664e --- /dev/null +++ b/src/components/icons/pick-wallet-icon.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/icons/try-apps-icon.svg b/src/components/icons/try-apps-icon.svg new file mode 100644 index 00000000000..bce0c5b9cd3 --- /dev/null +++ b/src/components/icons/try-apps-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file From 51e1532304bd22d13bad3ecf6c98304dcd428262 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 12:16:14 -0700 Subject: [PATCH 006/273] theme: add accent color tokens --- src/styles/global.css | 4 ++++ tailwind.config.ts | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/styles/global.css b/src/styles/global.css index 0f2feb38570..7c15de51d54 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -93,6 +93,10 @@ --background: white; --background-highlight: var(--gray-100); + --accent-a: #C32E8A; + --accent-b: #3C4CEB; + --accent-c: #29948F; + --disabled: var(--gray-400); /* ! Deprecating neutral */ diff --git a/tailwind.config.ts b/tailwind.config.ts index 5e6cb29630a..c2b5b6612a1 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -48,6 +48,11 @@ const config = { dark: "var(--primary-dark)", pressed: "var(--primary-pressed)", }, + accent: { + a: "var(--accent-a)", + b: "var(--accent-b)", + c: "var(--accent-c)", + }, body: { DEFAULT: "var(--body)", medium: "var(--body-medium)", From 2fa1e0f6e81db47e075147f610c29096bc989790 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 12:17:43 -0700 Subject: [PATCH 007/273] create: SvgButtonLink component --- src/components/Buttons/SvgButtonLink.tsx | 34 ++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/components/Buttons/SvgButtonLink.tsx diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx new file mode 100644 index 00000000000..23303594575 --- /dev/null +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -0,0 +1,34 @@ +import { FunctionComponent, ReactNode, SVGProps } from "react" + +import { cn } from "@/lib/utils/cn" + +type SvgButtonLinkProps = { + Svg: FunctionComponent> + label: string + children: ReactNode + href: string + className?: string + size?: number +} + +const SvgButtonLink = ({ + label, + children, + Svg, + className, + ...props +}: SvgButtonLinkProps) => ( + +
+
+ +
+
+

{label}

+

{children}

+
+
+
+) + +export default SvgButtonLink From d9c16a79608a1ba1ce1809d880c1cb611fda4f25 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 12:18:43 -0700 Subject: [PATCH 008/273] feat: implement subhero CTAs --- src/pages/index.tsx | 53 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index ba4ef4e4847..c51777462a3 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -24,10 +24,15 @@ import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import ActionCard from "@/components/ActionCard" import ButtonLink from "@/components/Buttons/ButtonLink" +import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import CalloutBanner from "@/components/CalloutBanner" import CodeModal from "@/components/CodeModal" import CommunityEvents from "@/components/CommunityEvents" import HomeHero from "@/components/Hero/HomeHero" +import ChooseNetworkIcon from "@/components/icons/choose-network-icon.svg" +import GetEthIcon from "@/components/icons/get-eth-icon.svg" +import PickWalletIcon from "@/components/icons/pick-wallet-icon.svg" +import TryAppsIcon from "@/components/icons/try-apps-icon.svg" import { Image } from "@/components/Image" import LazyLoadComponent from "@/components/LazyLoadComponent" import MainArticle from "@/components/MainArticle" @@ -356,6 +361,37 @@ const HomePage = ({ const cardBoxShadow = useToken("colors", "cardBoxShadow") + const SubHeroCTAs = [ + { + label: "Pick a wallet", + description: "Create accounts, manage assets", + href: "/wallets/find-wallet/", + Svg: PickWalletIcon, + colorClass: "text-primary", + }, + { + label: "Get ETH", + description: "The currency of Ethereum", + href: "/get-eth/", + Svg: GetEthIcon, + colorClass: "text-accent-a", + }, + { + label: "Choose a network", + description: "Enjoy minimal fees", + href: "/layer-2/", // TODO: Update with new networks page when ready + Svg: ChooseNetworkIcon, + colorClass: "text-accent-b", + }, + { + label: "Try apps", + description: "See what Ethereum can do", + href: "/dapps/", + Svg: TryAppsIcon, + colorClass: "text-accent-c", + }, + ] + return ( - +
- +
+
+ {SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( + + {description} + + ))} +
{/* Getting Started Section */} From 0c7dc537645b1caf319e4d46f7c2547f96b19dd2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 12:37:12 -0700 Subject: [PATCH 009/273] gutting: rm old, template new --- src/pages/index.tsx | 557 ++++---------------------------------------- 1 file changed, 42 insertions(+), 515 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c51777462a3..d894466c7bf 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,45 +1,21 @@ -import { lazy, ReactNode, Suspense, useState } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { FaGithub } from "react-icons/fa" -import { - Box, - chakra, - Divider, - Flex, - FlexProps, - Heading, - HeadingProps, - Icon, - SimpleGridProps, - SkeletonText, - Stack, - useToken, -} from "@chakra-ui/react" +import { Flex } from "@chakra-ui/react" -import { AllMetricData, BasePageProps, ChildOnlyProp, Lang } from "@/lib/types" +import { AllMetricData, BasePageProps, Lang } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" -import ActionCard from "@/components/ActionCard" -import ButtonLink from "@/components/Buttons/ButtonLink" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" -import CalloutBanner from "@/components/CalloutBanner" -import CodeModal from "@/components/CodeModal" -import CommunityEvents from "@/components/CommunityEvents" import HomeHero from "@/components/Hero/HomeHero" import ChooseNetworkIcon from "@/components/icons/choose-network-icon.svg" import GetEthIcon from "@/components/icons/get-eth-icon.svg" import PickWalletIcon from "@/components/icons/pick-wallet-icon.svg" import TryAppsIcon from "@/components/icons/try-apps-icon.svg" -import { Image } from "@/components/Image" -import LazyLoadComponent from "@/components/LazyLoadComponent" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" -import TitleCardList from "@/components/TitleCardList" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" -import Translation from "@/components/Translation" import { existsNamespace } from "@/lib/utils/existsNamespace" import { getLastDeployDate } from "@/lib/utils/getLastDeployDate" @@ -61,152 +37,7 @@ import { fetchNodes } from "@/lib/api/fetchNodes" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" -import devfixed from "@/public/images/developers-eth-blocks.png" -import dogefixed from "@/public/images/doge-computer.png" -import enterprise from "@/public/images/enterprise-eth.png" -import ethfixed from "@/public/images/eth.png" -import finance from "@/public/images/finance_transparent.png" -import future from "@/public/images/future_transparent.png" -import hackathon from "@/public/images/hackathon_transparent.png" import hero from "@/public/images/home/hero.png" -import impact from "@/public/images/impact_transparent.png" -import infrastructure from "@/public/images/infrastructure_transparent.png" -import infrastructurefixed from "@/public/images/infrastructure_transparent.png" -import merge from "@/public/images/upgrades/merge.png" -import robotfixed from "@/public/images/wallet-cropped.png" -import ethereum from "@/public/images/what-is-ethereum.png" - -// lazy loaded components -const Codeblock = lazy(() => - Promise.all([ - import("@/components/Codeblock"), - // Add a delay to prevent the skeleton from flashing - new Promise((resolve) => setTimeout(resolve, 1000)), - ]).then(([module]) => module) -) -const StatsBoxGrid = lazy(() => import("@/components/StatsBoxGrid")) - -const Skeleton = () => ( - - - -) - -const SectionHeading = (props: HeadingProps) => ( - -) - -const SectionDecription = (props: ChildOnlyProp) => ( - -) - -const ImageContainer = (props: FlexProps & { children: ReactNode }) => ( - -) - -const CardContainer = (props: { - children: ReactNode - minChildWidth: SimpleGridProps["minChildWidth"] -}) => ( - *": { - minW: props.minChildWidth, - }, - }} - > - {props.children} - -) - -const ContentBox = (props: ChildOnlyProp) => ( - -) - -const StyledActionCard = chakra(ActionCard, { - baseStyle: { - background: "background.base", - borderRadius: "sm", - border: "1px", - borderColor: "text", - margin: 0, - }, -}) - -const StyledTitleCardList = chakra(TitleCardList) - -const GrayContainer = (props: ChildOnlyProp) => ( - -) - -const MainSectionContainer = (props: { - children: ReactNode - containerBg: FlexProps["bg"] -}) => ( - - {props.children} - -) - -const FeatureContent = (props: ChildOnlyProp) => ( - -) - -const Row = (props: { children: ReactNode; isReversed?: boolean }) => ( - - {props.children} - -) - -const ButtonLinkRow = (props: ChildOnlyProp) => ( - -) const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) @@ -260,71 +91,9 @@ const HomePage = ({ }: InferGetStaticPropsType) => { const { t } = useTranslation(["common", "page-index"]) const { locale, asPath } = useRouter() - const [isModalOpen, setModalOpen] = useState(false) - const [activeCode, setActiveCode] = useState(0) const dir = isLangRightToLeft(locale as Lang) ? "rtl" : "ltr" - const toggleCodeExample = (id: number): void => { - setActiveCode(id) - setModalOpen(true) - } - - const cards = [ - { - image: robotfixed, - title: t("page-index:page-index-get-started-wallet-title"), - description: t("page-index:page-index-get-started-wallet-description"), - alt: t("page-index:page-index-get-started-wallet-image-alt"), - href: "/wallets/find-wallet/", - }, - { - image: ethfixed, - title: t("page-index:page-index-get-started-eth-title"), - description: t("page-index:page-index-get-started-eth-description"), - alt: t("page-index:page-index-get-started-eth-image-alt"), - href: "/get-eth/", - }, - { - image: dogefixed, - title: t("page-index:page-index-get-started-dapps-title"), - description: t("page-index:page-index-get-started-dapps-description"), - alt: t("page-index:page-index-get-started-dapps-image-alt"), - href: "/dapps/", - }, - { - image: devfixed, - title: t("page-index:page-index-get-started-devs-title"), - description: t("page-index:page-index-get-started-devs-description"), - alt: t("page-index:page-index-get-started-devs-image-alt"), - href: "/developers/", - }, - ] - - const touts = [ - { - image: merge, - alt: t("page-index:page-index-tout-upgrades-image-alt"), - title: t("page-index:page-index-tout-upgrades-title"), - description: t("page-index:page-index-tout-upgrades-description"), - href: "/roadmap/", - }, - { - image: infrastructurefixed, - alt: t("page-index:page-index-tout-enterprise-image-alt"), - title: t("page-index:page-index-tout-enterprise-title"), - description: t("page-index:page-index-tout-enterprise-description"), - href: "/enterprise/", - }, - { - image: enterprise, - alt: t("page-index:page-index-tout-community-image-alt"), - title: t("page-index:page-index-tout-community-title"), - description: t("page-index:page-index-tout-community-description"), - href: "/community/", - }, - ] - - const codeExamples: Array = [ + const codeExamples: CodeExample[] = [ { title: t("page-index:page-index-developers-code-example-title-0"), description: t( @@ -359,7 +128,12 @@ const HomePage = ({ }, ] - const cardBoxShadow = useToken("colors", "cardBoxShadow") + // TODO: Remove when used + console.log("Values to use:", { + communityEvents, + metricResults, + codeExamples, + }) const SubHeroCTAs = [ { @@ -392,6 +166,32 @@ const HomePage = ({ }, ] + const comingSoon = [ + { + header: "A new way to use the internet", + tag: "Use cases", + }, + { + header: "The strongest ecosystem", + tag: "Activity", + }, + { + header: "Understanding Ethereum", + tag: "Learn", + }, + { header: "The internet is changing" }, + { + header: "Bockchain's biggest builder community", + tag: "Builders", + }, + { + header: "Built by the community", + tag: "Ethereum.org community", + }, + { header: "Ethereum news" }, + { header: "Ethereum events" }, + { header: "Join ethereum.org" }, + ] return ( ))} - {/* Getting Started Section */} - - - - - - - - - - - - - {t("page-index:page-index-get-started-image-alt")} - - - - {cards.map((card, idx) => ( - - ))} - - - - {/* What is Eth Section */} - - - - - - - - - - - - - - - - - - - - {t("page-index:page-index-what-is-ethereum-image-alt")} - - - - {/* Finance Section */} - - - - - - - - - - - - - - - - - {t("page-index:page-index-defi-image-alt")} - - - - {/* NFT Section */} - - - - - - - - - - - - - - - - - {t("page-index:page-index-nft-alt")} - - - - {/* Internet Section */} - - - - - - - - - - - - - - - - - - - - - {t("page-index:page-index-internet-image-alt")} - - - - - {/* Developer Section */} - - - - - - - - - - - - - - - - - - - {/* Render CodeModal & Codeblock conditionally */} - {isModalOpen && ( - - }> - - {codeExamples[activeCode].code} - - - - )} - - - {/* Eth Today Section */} - - - - - - - - - - - } - componentProps={{ data: metricResults }} - intersectionOptions={{ - root: null, - rootMargin: "500px", - threshold: 0, - }} - /> - - - - {/* Explore Section */} - - - - - - - - {touts.map((tout, idx) => { - return ( - - ) - })} - - - - - - - } - variant="outline" - isSecondary - > - GitHub - - - - + {/* Temporary coming soon section template */} + {comingSoon.map(({ header, tag }: { header: string; tag?: string }) => ( +
+ {tag &&

{tag}

} +

{header}

+
+ ))}
) } From 871d8ff92d2066d596eeaf842108c5e73f40a750 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 13:28:08 -0700 Subject: [PATCH 010/273] chore: update assets --- src/components/icons/block-heap.svg | 3 +++ .../icons/{get-eth-icon.svg => eth-token.svg} | 0 .../icons/{pick-wallet-icon.svg => eth-wallet.svg} | 0 .../{choose-network-icon.svg => network-layers.svg} | 0 .../icons/{try-apps-icon.svg => phone-homescreen.svg} | 0 src/components/icons/roadmap-sign.svg | 3 +++ src/components/icons/whitepaper.svg | 8 ++++++++ src/pages/index.tsx | 10 +++++----- 8 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 src/components/icons/block-heap.svg rename src/components/icons/{get-eth-icon.svg => eth-token.svg} (100%) rename src/components/icons/{pick-wallet-icon.svg => eth-wallet.svg} (100%) rename src/components/icons/{choose-network-icon.svg => network-layers.svg} (100%) rename src/components/icons/{try-apps-icon.svg => phone-homescreen.svg} (100%) create mode 100644 src/components/icons/roadmap-sign.svg create mode 100644 src/components/icons/whitepaper.svg diff --git a/src/components/icons/block-heap.svg b/src/components/icons/block-heap.svg new file mode 100644 index 00000000000..e0148843025 --- /dev/null +++ b/src/components/icons/block-heap.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/icons/get-eth-icon.svg b/src/components/icons/eth-token.svg similarity index 100% rename from src/components/icons/get-eth-icon.svg rename to src/components/icons/eth-token.svg diff --git a/src/components/icons/pick-wallet-icon.svg b/src/components/icons/eth-wallet.svg similarity index 100% rename from src/components/icons/pick-wallet-icon.svg rename to src/components/icons/eth-wallet.svg diff --git a/src/components/icons/choose-network-icon.svg b/src/components/icons/network-layers.svg similarity index 100% rename from src/components/icons/choose-network-icon.svg rename to src/components/icons/network-layers.svg diff --git a/src/components/icons/try-apps-icon.svg b/src/components/icons/phone-homescreen.svg similarity index 100% rename from src/components/icons/try-apps-icon.svg rename to src/components/icons/phone-homescreen.svg diff --git a/src/components/icons/roadmap-sign.svg b/src/components/icons/roadmap-sign.svg new file mode 100644 index 00000000000..48a0e529555 --- /dev/null +++ b/src/components/icons/roadmap-sign.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/icons/whitepaper.svg b/src/components/icons/whitepaper.svg new file mode 100644 index 00000000000..7679a9f94d4 --- /dev/null +++ b/src/components/icons/whitepaper.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d894466c7bf..d5fcc25c1a2 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -9,10 +9,10 @@ import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import HomeHero from "@/components/Hero/HomeHero" -import ChooseNetworkIcon from "@/components/icons/choose-network-icon.svg" -import GetEthIcon from "@/components/icons/get-eth-icon.svg" -import PickWalletIcon from "@/components/icons/pick-wallet-icon.svg" -import TryAppsIcon from "@/components/icons/try-apps-icon.svg" +import EthTokenIcon from "@/components/icons/eth-token.svg" +import PickWalletIcon from "@/components/icons/eth-wallet.svg" +import ChooseNetworkIcon from "@/components/icons/network-layers.svg" +import TryAppsIcon from "@/components/icons/phone-homescreen.svg" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" @@ -147,7 +147,7 @@ const HomePage = ({ label: "Get ETH", description: "The currency of Ethereum", href: "/get-eth/", - Svg: GetEthIcon, + Svg: EthTokenIcon, colorClass: "text-accent-a", }, { From 2622945fdb37cc80a0ac1ed2f37529f5b5fc50b8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 14:28:38 -0700 Subject: [PATCH 011/273] theme: add 4xl rounded (2rem, 32px) --- tailwind.config.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index c2b5b6612a1..4eebdabb71a 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -127,6 +127,10 @@ const config = { "accordion-down": "accordion-down 0.2s ease-out", "accordion-up": "accordion-up 0.2s ease-out", }, + // Add custom border-radius tailwinds extension for "4xl" as "2rem" + borderRadius: { + "4xl": "2rem" /* 32px */, + }, }, }, plugins: [require("tailwindcss-animate")], From a2c9bb6d08cf54c272205c35fcce4a562d812c45 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 14:28:53 -0700 Subject: [PATCH 012/273] create: HomeSection component --- src/components/HomeSection/index.tsx | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/components/HomeSection/index.tsx diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx new file mode 100644 index 00000000000..73b5f1f1af3 --- /dev/null +++ b/src/components/HomeSection/index.tsx @@ -0,0 +1,47 @@ +import NextImage, { type StaticImageData } from "next/image" +import type { ReactNode } from "react" + +import { cn } from "@/lib/utils/cn" + +type HomeSectionProps = { + tag: string + title: ReactNode + imgSrc: StaticImageData + reverse?: boolean + className?: string + children?: ReactNode +} + +const HomeSection = ({ + tag, + title, + imgSrc, + reverse, + className, + children, +}: HomeSectionProps) => { + return ( +
+ +
+
+ {tag} +
+

{title}

+ {children} +
+
+ ) +} + +export default HomeSection From 22cd484ad7293b37b6b74306fbb8ee2ecc3e3423 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 14:31:05 -0700 Subject: [PATCH 013/273] init: template activity home section --- src/pages/index.tsx | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d5fcc25c1a2..9f86e7a39af 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -9,6 +9,7 @@ import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import HomeHero from "@/components/Hero/HomeHero" +import HomeSection from "@/components/HomeSection" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" import ChooseNetworkIcon from "@/components/icons/network-layers.svg" @@ -37,6 +38,7 @@ import { fetchNodes } from "@/lib/api/fetchNodes" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" +import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import hero from "@/public/images/home/hero.png" const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) @@ -221,6 +223,35 @@ const HomePage = ({ ))} + + +
+

Activity from all the Ethereum networks

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+
+
+ {/* Temporary coming soon section template */} {comingSoon.map(({ header, tag }: { header: string; tag?: string }) => (
From 223e0364f633497cd342271079f4c394cf7343cf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 14:41:43 -0700 Subject: [PATCH 014/273] fix: text alignment --- src/components/Buttons/SvgButtonLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 23303594575..d888841077b 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -23,7 +23,7 @@ const SvgButtonLink = ({
-
+

{label}

{children}

From 91c96974a8e7dfcd0eacc8174644d548fa5d9dcc Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 14:51:58 -0700 Subject: [PATCH 015/273] feat: use HomeSection, pass section images --- src/components/HomeSection/index.tsx | 12 ++++----- src/pages/index.tsx | 37 +++++++++++++++++----------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 73b5f1f1af3..3b478cdb043 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -6,8 +6,8 @@ import { cn } from "@/lib/utils/cn" type HomeSectionProps = { tag: string title: ReactNode - imgSrc: StaticImageData - reverse?: boolean + imgSrc?: StaticImageData // TODO: Revert to required before prod + imageLast?: boolean className?: string children?: ReactNode } @@ -16,7 +16,7 @@ const HomeSection = ({ tag, title, imgSrc, - reverse, + imageLast, className, children, }: HomeSectionProps) => { @@ -24,14 +24,14 @@ const HomeSection = ({
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 9f86e7a39af..c25aeaf8cbb 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -38,7 +38,10 @@ import { fetchNodes } from "@/lib/api/fetchNodes" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" +import buildersImage from "@/public/images/heroes/developers-hub-hero.jpg" import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" +import learnImage from "@/public/images/heroes/learn-hub-hero.png" +import communityImage from "@/public/images/heroes/quizzes-hub-hero.png" import hero from "@/public/images/home/hero.png" const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) @@ -170,29 +173,33 @@ const HomePage = ({ const comingSoon = [ { - header: "A new way to use the internet", + title: "A new way to use the internet", tag: "Use cases", }, { - header: "The strongest ecosystem", + title: "The strongest ecosystem", tag: "Activity", + imgSrc: activityImage, }, { - header: "Understanding Ethereum", + title: "Understanding Ethereum", tag: "Learn", + imgSrc: learnImage, }, - { header: "The internet is changing" }, + { title: "The internet is changing" }, { - header: "Bockchain's biggest builder community", + title: "Bockchain's biggest builder community", tag: "Builders", + imgSrc: buildersImage, }, { - header: "Built by the community", + title: "Built by the community", tag: "Ethereum.org community", + imgSrc: communityImage, }, - { header: "Ethereum news" }, - { header: "Ethereum events" }, - { header: "Join ethereum.org" }, + { title: "Ethereum news" }, + { title: "Ethereum events" }, + { title: "Join ethereum.org" }, ] return ( {/* Temporary coming soon section template */} - {comingSoon.map(({ header, tag }: { header: string; tag?: string }) => ( -
- {tag &&

{tag}

} -

{header}

-
+ {comingSoon.map(({ title, tag, imgSrc }) => ( + ))}
) From 10de68ffbebb886c7873ae4f47de80557adf8032 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 14:56:34 -0700 Subject: [PATCH 016/273] refactor: move padding to container level --- src/components/HomeSection/index.tsx | 2 +- src/pages/index.tsx | 97 ++++++++++++++-------------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 3b478cdb043..de27394049f 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -23,7 +23,7 @@ const HomeSection = ({ return (
-
- {SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( - - {description} - - ))} -
- -
-

Activity from all the Ethereum networks

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
-
+
+
+ {SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( + + {description} + + ))}
- - {/* Temporary coming soon section template */} - {comingSoon.map(({ title, tag, imgSrc }) => ( - ))} + tag="Activity" + title="The strongest ecosystem" + imgSrc={activityImage} + > +
+

Activity from all the Ethereum networks

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+

$44.89B

+

Total value held on Ethereum [More info icon]

+
+
+
+
+ + {/* Temporary coming soon section template */} + {comingSoon.map(({ title, tag, imgSrc }) => ( + + ))} +
) } From fe2654cdbcf357baba1637bb38712dc35a60b8d6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 16:37:40 -0700 Subject: [PATCH 017/273] style: HomeSection and heading theming --- src/components/HomeSection/index.tsx | 19 ++++++++++++++----- tailwind.config.ts | 1 + 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index de27394049f..688d7830b7b 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -23,21 +23,30 @@ const HomeSection = ({ return (
-
+
{tag}
-

{title}

+

{title}

{children}
diff --git a/tailwind.config.ts b/tailwind.config.ts index 4eebdabb71a..0b68381d5a6 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -16,6 +16,7 @@ const config = { monospace: "var(--font-mono)", }, fontSize: { + "7xl": ["4rem", "1.1"], // [7xl, 6xs] "6xl": ["3.75rem", "1.2"], // [6xl, 4xs] "5xl": ["3rem", "1.2"], // [5xl, 4xs] "4xl": ["2.25rem", "1.2"], // [4xl, 4xs] From a6dce124d487a088a2df6e254a6d584b717cc6d1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:12:30 -0700 Subject: [PATCH 018/273] feat: add BigNumber component --- src/components/BigNumber/index.tsx | 53 ++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/components/BigNumber/index.tsx diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx new file mode 100644 index 00000000000..70a9a659cc1 --- /dev/null +++ b/src/components/BigNumber/index.tsx @@ -0,0 +1,53 @@ +import { type ReactNode } from "react" +import { MdInfoOutline } from "react-icons/md" + +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover" + +import { cn } from "@/lib/utils/cn" + +import { BaseLink } from "../Link" + +type BigNumberProps = { + children: ReactNode + value: ReactNode + sourceName?: string + sourceUrl?: string + className?: string +} + +const BigNumber = ({ + children, + value, + sourceName, + sourceUrl, + className, +}: BigNumberProps) => { + return ( +
+
{value}
+
+ {children} + {sourceName && sourceUrl && ( + + + + + + {sourceName} + + + )} +
+
+ ) +} +export default BigNumber From 121dc0d0bbe74bc11ea0b7bf604e1ffc0b0bd649 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:14:18 -0700 Subject: [PATCH 019/273] iter: implement new stat box with dummy data --- src/pages/index.tsx | 84 ++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 926e90f9a2a..22c1a9c1275 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -7,6 +7,7 @@ import { Flex } from "@chakra-ui/react" import { AllMetricData, BasePageProps, Lang } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" +import BigNumber from "@/components/BigNumber" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import HomeHero from "@/components/Hero/HomeHero" import HomeSection from "@/components/HomeSection" @@ -176,17 +177,13 @@ const HomePage = ({ title: "A new way to use the internet", tag: "Use cases", }, - { - title: "The strongest ecosystem", - tag: "Activity", - imgSrc: activityImage, - }, { title: "Understanding Ethereum", tag: "Learn", imgSrc: learnImage, + imageLast: true, }, - { title: "The internet is changing" }, + { title: "The internet is changing", tag: "" }, { title: "Bockchain's biggest builder community", tag: "Builders", @@ -196,10 +193,11 @@ const HomePage = ({ title: "Built by the community", tag: "Ethereum.org community", imgSrc: communityImage, + imageLast: true, }, - { title: "Ethereum news" }, - { title: "Ethereum events" }, - { title: "Join ethereum.org" }, + { title: "Ethereum news", tag: "" }, + { title: "Ethereum events", tag: "" }, + { title: "Join ethereum.org", tag: "" }, ] return (
-
+
{SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( -
-

Activity from all the Ethereum networks

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
-
-

$44.89B

-

Total value held on Ethereum [More info icon]

-
+
+

+ Activity from all Ethereum networks +

+
+ {/* TODO: Plug in real data */} + + Total value held on Ethereum + + + + Transactions in the last 24h + + + + Average transaction cost + + + + Value protecting Ethereum +
{/* Temporary coming soon section template */} - {comingSoon.map(({ title, tag, imgSrc }) => ( - + {comingSoon.map((item) => ( + ))}
From 5932f6048e6647f20e2526a9a77cf03f3b9738c3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:33:14 -0700 Subject: [PATCH 020/273] Update SvgButtonLink.tsx --- src/components/Buttons/SvgButtonLink.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index d888841077b..f2e1a9bd7b6 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -4,7 +4,7 @@ import { cn } from "@/lib/utils/cn" type SvgButtonLinkProps = { Svg: FunctionComponent> - label: string + label?: string children: ReactNode href: string className?: string @@ -24,8 +24,8 @@ const SvgButtonLink = ({
-

{label}

-

{children}

+ {label &&

{label}

} + {children}
From e616586e0649b800ee0743645bf3b9e070e3816d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:33:25 -0700 Subject: [PATCH 021/273] theme: add 128 token --- tailwind.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index 0b68381d5a6..7ee6855fc9b 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -113,6 +113,7 @@ const config = { 10.5: "2.625rem", 19: "4.75rem", // Nav height 31: "7.75rem", // FeedbackWidget conditional bottom offset + 128: "32rem", }, keyframes: { "accordion-down": { From 8875bffc4e2da93f60c21d740d5f6c89e464b76e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:34:14 -0700 Subject: [PATCH 022/273] update: HomeSection component --- src/components/HomeSection/index.tsx | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 688d7830b7b..9b012bb7edc 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -7,7 +7,6 @@ type HomeSectionProps = { tag: string title: ReactNode imgSrc?: StaticImageData // TODO: Revert to required before prod - imageLast?: boolean className?: string children?: ReactNode } @@ -16,33 +15,17 @@ const HomeSection = ({ tag, title, imgSrc, - imageLast, className, children, }: HomeSectionProps) => { return ( -
+
-
+
{tag}
From 56f19900b033dd65554f93a7b8ebcb7515764375 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:34:33 -0700 Subject: [PATCH 023/273] feat: add Understanding Ethereum section to homepage --- src/pages/index.tsx | 82 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 7 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 22c1a9c1275..825fc11f860 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -2,6 +2,7 @@ import type { GetStaticProps, InferGetStaticPropsType } from "next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" +import { MdChevronRight } from "react-icons/md" import { Flex } from "@chakra-ui/react" import { AllMetricData, BasePageProps, Lang } from "@/lib/types" @@ -11,10 +12,13 @@ import BigNumber from "@/components/BigNumber" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import HomeHero from "@/components/Hero/HomeHero" import HomeSection from "@/components/HomeSection" +import BlockHeap from "@/components/icons/block-heap.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" import ChooseNetworkIcon from "@/components/icons/network-layers.svg" import TryAppsIcon from "@/components/icons/phone-homescreen.svg" +import RoadmapSign from "@/components/icons/roadmap-sign.svg" +import Whitepaper from "@/components/icons/whitepaper.svg" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" @@ -30,6 +34,8 @@ import { import { BASE_TIME_UNIT } from "@/lib/constants" +import { ButtonLink } from "../../tailwind/ui/buttons/Button" + import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" @@ -172,17 +178,39 @@ const HomePage = ({ }, ] + const popularTopics = [ + { + label: "What is Ethereum?", + Svg: EthTokenIcon, + href: "/what-is-ethereum/", + }, + { + label: "What are crypto wallets?", + Svg: PickWalletIcon, + href: "/wallets/", + }, + { + label: "How to start? (step by step)", + Svg: BlockHeap, + href: "/guides/", + }, + { + label: "Ethereum Whitepaper", + Svg: Whitepaper, + href: "/whitepaper/", + }, + { + label: "Ethereum roadmap", + Svg: RoadmapSign, + href: "/roadmap/", + }, + ] + const comingSoon = [ { title: "A new way to use the internet", tag: "Use cases", }, - { - title: "Understanding Ethereum", - tag: "Learn", - imgSrc: learnImage, - imageLast: true, - }, { title: "The internet is changing", tag: "" }, { title: "Bockchain's biggest builder community", @@ -193,7 +221,7 @@ const HomePage = ({ title: "Built by the community", tag: "Ethereum.org community", imgSrc: communityImage, - imageLast: true, + className: "flex-col-reverse", }, { title: "Ethereum news", tag: "" }, { title: "Ethereum events", tag: "" }, @@ -278,6 +306,46 @@ const HomePage = ({
+ +
+

+ Cryptocurrency can feel overwhelming. Don't worry, these + materials are designed to help you understand Ethereum in just a + few minutes. +

+
+

Popular topics

+
+ {popularTopics.map(({ label, Svg, href }) => ( + +

+ {label} +

+
+ ))} +
+
+ + Other topics + +
+
+
+
+ {/* Temporary coming soon section template */} {comingSoon.map((item) => ( From c781c1b786932ef4162c3a4272b68fd518bf7daf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 12:31:23 -0700 Subject: [PATCH 024/273] temp: coming soon placeholders --- src/pages/index.tsx | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 825fc11f860..bee0f7cf042 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -207,22 +207,6 @@ const HomePage = ({ ] const comingSoon = [ - { - title: "A new way to use the internet", - tag: "Use cases", - }, - { title: "The internet is changing", tag: "" }, - { - title: "Bockchain's biggest builder community", - tag: "Builders", - imgSrc: buildersImage, - }, - { - title: "Built by the community", - tag: "Ethereum.org community", - imgSrc: communityImage, - className: "flex-col-reverse", - }, { title: "Ethereum news", tag: "" }, { title: "Ethereum events", tag: "" }, { title: "Join ethereum.org", tag: "" }, @@ -259,6 +243,10 @@ const HomePage = ({ ))}
+ + 👷‍♀️🚧🔜 + + + + 👷‍♀️🚧🔜 + + + + 👷‍♀️🚧🔜 + + + + 👷‍♀️🚧🔜 + + {/* Temporary coming soon section template */} {comingSoon.map((item) => ( From b368715363786370535de654f35886f4f575ade5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 12:43:58 -0700 Subject: [PATCH 025/273] init: builders portal section --- src/components/HomeSection/index.tsx | 4 +++- src/pages/index.tsx | 22 +++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 9b012bb7edc..d0b2e96e581 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -29,7 +29,9 @@ const HomeSection = ({
{tag}
-

{title}

+

+ {title} +

{children}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index bee0f7cf042..5ba3153a6a2 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -343,7 +343,27 @@ const HomePage = ({ title="Blockchain's biggest builder community" imgSrc={buildersImage} > - 👷‍♀️🚧🔜 +

+ Ethereum is home to Web3’s largest and most vibrant developer + ecosystem. Use JavaScript and Python, or learn a smart contract + language like Solidity or Vyper to write your own app. +

+
+ + Builder's Portal + + + Documentation + +
+
Date: Sun, 28 Jul 2024 12:48:08 -0700 Subject: [PATCH 026/273] fix: image positioning for flipped --- src/components/HomeSection/index.tsx | 12 ++++++++++-- src/pages/index.tsx | 5 +++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index d0b2e96e581..9760a57d164 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -7,6 +7,7 @@ type HomeSectionProps = { tag: string title: ReactNode imgSrc?: StaticImageData // TODO: Revert to required before prod + isFlipped?: boolean className?: string children?: ReactNode } @@ -15,17 +16,24 @@ const HomeSection = ({ tag, title, imgSrc, + isFlipped, className, children, }: HomeSectionProps) => { return ( -
+
-
+
{tag}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5ba3153a6a2..9c665c3e09c 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -298,7 +298,7 @@ const HomePage = ({ tag="Learn" title="Understanding Ethereum" imgSrc={learnImage} - className="lg:flex-row-reverse" + isFlipped >

@@ -370,7 +370,8 @@ const HomePage = ({ tag="Ethereum.org Community" title="Built by the community" imgSrc={communityImage} - className="flex-col-reverse" + isFlipped + className="" > 👷‍♀️🚧🔜 From 92a16229c0ce753350aaf356c94f41b2df111369 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 14:04:40 -0700 Subject: [PATCH 027/273] feat: add code examples section and functionality --- src/components/icons/angle-brackets.svg | 4 ++ src/intl/en/page-index.json | 8 ++-- src/pages/index.tsx | 55 ++++++++++++++++++++++++- src/styles/global.css | 2 + tailwind.config.ts | 1 + 5 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 src/components/icons/angle-brackets.svg diff --git a/src/components/icons/angle-brackets.svg b/src/components/icons/angle-brackets.svg new file mode 100644 index 00000000000..c9e6664af1a --- /dev/null +++ b/src/components/icons/angle-brackets.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 9a4befae773..1e3e74e3c22 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -39,13 +39,13 @@ "page-index-developers-button": "Developer portal", "page-index-developers-code-examples": "Code examples", "page-index-developers-code-example-title-0": "Your own bank", - "page-index-developers-code-example-description-0": "You can build a bank powered by logic you've programmed.", + "page-index-developers-code-example-description-0": "Build a bank powered by logic you've programmed", "page-index-developers-code-example-title-1": "Your own currency", - "page-index-developers-code-example-description-1": "You can create tokens that you can transfer and use across applications.", + "page-index-developers-code-example-description-1": "Create tokens that you can transfer and use across applications", "page-index-developers-code-example-title-2": "A JavaScript Ethereum wallet", - "page-index-developers-code-example-description-2": "You can use existing languages to interact with Ethereum and other applications.", + "page-index-developers-code-example-description-2": "Use existing languages to interact with Ethereum and other applications", "page-index-developers-code-example-title-3": "An open, permissionless DNS", - "page-index-developers-code-example-description-3": "You can reimagine existing services as decentralized, open applications.", + "page-index-developers-code-example-description-3": "Reimagine existing services as decentralized, open applications", "page-index-network-stats-title": "Ethereum today", "page-index-network-stats-subtitle": "The latest network statistics", "page-index-network-stats-total-eth-staked": "Total ETH staked", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 9c665c3e09c..3e15ff35de9 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,17 +1,21 @@ +import { Suspense, useState } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" import { MdChevronRight } from "react-icons/md" -import { Flex } from "@chakra-ui/react" +import { Flex, Skeleton } from "@chakra-ui/react" import { AllMetricData, BasePageProps, Lang } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import BigNumber from "@/components/BigNumber" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" +import Codeblock from "@/components/Codeblock" +import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" import HomeSection from "@/components/HomeSection" +import AngleBrackets from "@/components/icons/angle-brackets.svg" import BlockHeap from "@/components/icons/block-heap.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" @@ -105,6 +109,14 @@ const HomePage = ({ const { locale, asPath } = useRouter() const dir = isLangRightToLeft(locale as Lang) ? "rtl" : "ltr" + const [isModalOpen, setModalOpen] = useState(false) + const [activeCode, setActiveCode] = useState(0) + + const toggleCodeExample = (id: number): void => { + setActiveCode(id) + setModalOpen(true) + } + const codeExamples: CodeExample[] = [ { title: t("page-index:page-index-developers-code-example-title-0"), @@ -363,7 +375,46 @@ const HomePage = ({ Documentation

-
+
+
+
+ +
+

+ {t("page-index:page-index-developers-code-examples")} +

+
+ {codeExamples.map(({ title, description }, idx) => ( + + ))} +
+ {isModalOpen && ( + // TODO: Migrate CodeModal, CodeBlock, Skeleton from Chakra-UI to tailwind/shad-cn + + }> + + {codeExamples[activeCode].code} + + + + )} Date: Sun, 28 Jul 2024 14:25:36 -0700 Subject: [PATCH 028/273] theme: update button outline to use primary --- tailwind/ui/buttons/Button.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tailwind/ui/buttons/Button.tsx b/tailwind/ui/buttons/Button.tsx index b47893105b6..79d9eec6da9 100644 --- a/tailwind/ui/buttons/Button.tsx +++ b/tailwind/ui/buttons/Button.tsx @@ -15,7 +15,8 @@ const buttonVariants = cva( variant: { solid: "!text-background bg-primary border-transparent disabled:bg-disabled disabled:text-background hover:text-background hover:bg-primary-hover hover:shadow-button-hover active:shadow-none", - outline: "hover:shadow-button-hover active:shadow-none", + outline: + "border-primary !text-primary fill-primary hover:shadow-button-hover active:shadow-none", ghost: "border-transparent", link: "border-transparent font-bold underline py-0 px-1 active:text-primary", }, From c63cbe3fe60924c98896abb78ad56c7f13300907 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 14:26:16 -0700 Subject: [PATCH 029/273] init: community section --- src/lib/constants.ts | 2 ++ src/pages/index.tsx | 42 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 6fb77b22af1..f16b1d069a1 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -25,6 +25,8 @@ export const LOCALES_CODES = BUILD_LOCALES // Site urls export const SITE_URL = "https://ethereum.org" export const DISCORD_PATH = "/discord/" +export const GITHUB_REPO_URL = + "https://github.com/ethereum/ethereum-org-website" export const EDIT_CONTENT_URL = `https://github.com/ethereum/ethereum-org-website/tree/dev/` export const MAIN_CONTENT_ID = "main-content" export const WEBSITE_EMAIL = "website@ethereum.org" diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3e15ff35de9..a00d63f7397 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -3,6 +3,7 @@ import type { GetStaticProps, InferGetStaticPropsType } from "next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" +import { FaDiscord, FaGithub } from "react-icons/fa" import { MdChevronRight } from "react-icons/md" import { Flex, Skeleton } from "@chakra-ui/react" @@ -36,7 +37,7 @@ import { isLangRightToLeft, } from "@/lib/utils/translations" -import { BASE_TIME_UNIT } from "@/lib/constants" +import { BASE_TIME_UNIT, GITHUB_REPO_URL } from "@/lib/constants" import { ButtonLink } from "../../tailwind/ui/buttons/Button" @@ -422,9 +423,44 @@ const HomePage = ({ title="Built by the community" imgSrc={communityImage} isFlipped - className="" > - 👷‍♀️🚧🔜 +
+

+ The ethereum.org website is built and maintained by hundreds of + translators, coders, designers, copywriters, and enthusiastic + community members each month. +

+

+ Come ask questions, connect with people around the world and + contribute to the website. You will get relevant practical + experience and be guided during the process! +

+

+ Ethereum.org community is the perfect place to start and learn. +

+
+
+ + + + + + + + More on ethereum.org + +
{/* Temporary coming soon section template */} From b1548cf0123ece79d7c30b285efb016d1bff532d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:12:51 -0700 Subject: [PATCH 030/273] create: reusable WindowBox component --- src/components/WindowBox/index.tsx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/components/WindowBox/index.tsx diff --git a/src/components/WindowBox/index.tsx b/src/components/WindowBox/index.tsx new file mode 100644 index 00000000000..6bdca8ac714 --- /dev/null +++ b/src/components/WindowBox/index.tsx @@ -0,0 +1,21 @@ +import { FunctionComponent, ReactNode, SVGProps } from "react" + +type WindowBoxProps = { + title: ReactNode + Svg: FunctionComponent> + children?: ReactNode +} + +const WindowBox = ({ title, children, Svg }: WindowBoxProps) => ( +
+
+
+ +
+

{title}

+
+ {children} +
+) + +export default WindowBox From f139f5213da977ee32eaa9bbfb478400291a8c25 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:13:13 -0700 Subject: [PATCH 031/273] theme: add gradient, import svg, linting --- src/components/icons/calendar.svg | 3 +++ src/styles/global.css | 1 + tailwind.config.ts | 1 + 3 files changed, 5 insertions(+) create mode 100644 src/components/icons/calendar.svg diff --git a/src/components/icons/calendar.svg b/src/components/icons/calendar.svg new file mode 100644 index 00000000000..c319e2ed94f --- /dev/null +++ b/src/components/icons/calendar.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/styles/global.css b/src/styles/global.css index 71f7c00c4b6..301acb869f5 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -135,6 +135,7 @@ --table-item-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); --primary-highlight-gradient: linear-gradient(180deg, rgba(167, 121, 226, 0.05) 0%, rgba(167, 121, 226, 0.00) 100%); + --accept-gradient: linear-gradient(0deg, rgba(185, 185, 241, 0.24) 0%, rgba(84, 132, 234, 0.08) 100%); } [data-theme="dark"] { diff --git a/tailwind.config.ts b/tailwind.config.ts index cff7e020e97..9e184204d6a 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -90,6 +90,7 @@ const config = { backgroundImage: { "bg-main-gradient": "var(--bg-main-gradient)", "primary-highlight-gradient": "var(--primary-highlight-gradient)", + "accent-gradient": "var(--accept-gradient)", }, boxShadow: { "table-box": "var(--table-box-shadow)", From 46eb9fb82f9eff80a5562b0bbc93a8d3f90cfbda Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:13:43 -0700 Subject: [PATCH 032/273] init: add Next calls section, dummy data --- src/pages/index.tsx | 76 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index a00d63f7397..c60c9474624 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -5,6 +5,7 @@ import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" import { FaDiscord, FaGithub } from "react-icons/fa" import { MdChevronRight } from "react-icons/md" +import { RxExternalLink } from "react-icons/rx" import { Flex, Skeleton } from "@chakra-ui/react" import { AllMetricData, BasePageProps, Lang } from "@/lib/types" @@ -18,6 +19,7 @@ import HomeHero from "@/components/Hero/HomeHero" import HomeSection from "@/components/HomeSection" import AngleBrackets from "@/components/icons/angle-brackets.svg" import BlockHeap from "@/components/icons/block-heap.svg" +import Calendar from "@/components/icons/calendar.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" import ChooseNetworkIcon from "@/components/icons/network-layers.svg" @@ -27,7 +29,9 @@ import Whitepaper from "@/components/icons/whitepaper.svg" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" +import WindowBox from "@/components/WindowBox" +import { cn } from "@/lib/utils/cn" import { existsNamespace } from "@/lib/utils/existsNamespace" import { getLastDeployDate } from "@/lib/utils/getLastDeployDate" import { runOnlyOnce } from "@/lib/utils/runOnlyOnce" @@ -39,7 +43,7 @@ import { import { BASE_TIME_UNIT, GITHUB_REPO_URL } from "@/lib/constants" -import { ButtonLink } from "../../tailwind/ui/buttons/Button" +import { Button, ButtonLink } from "../../tailwind/ui/buttons/Button" import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" @@ -219,6 +223,25 @@ const HomePage = ({ }, ] + const dummyCalendarData = [ + { + date: "May 29, 2024 at 18:00", + title: "ethereum.org Community Call - May 2024", + }, + { + date: "Jul 25, 2024", + title: "☎️ ethereum.org Community Call - July 2024", + }, + { + date: "Jul 3, 2024", + title: "🛠 QA session - ethereum.org portal", + }, + { + date: "May 8, 2024", + title: + "👾 Live coding session - Implementing a visual testing component on ethereum.org", + }, + ] const comingSoon = [ { title: "Ethereum news", tag: "" }, { title: "Ethereum events", tag: "" }, @@ -376,15 +399,10 @@ const HomePage = ({ Documentation
-
-
-
- -
-

- {t("page-index:page-index-developers-code-examples")} -

-
+ {codeExamples.map(({ title, description }, idx) => ( ))} -
+ + {isModalOpen && ( // TODO: Migrate CodeModal, CodeBlock, Skeleton from Chakra-UI to tailwind/shad-cn
+ + + {dummyCalendarData.map(({ date, title }, idx) => ( +
+
+

{date}

+

+ {title} +

+
+ +
+ ))} +
{/* Temporary coming soon section template */} From 4f357340eb2f6e7c7a329ab39c34ac7b10944734 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 20:18:14 -0700 Subject: [PATCH 033/273] iter: make imgSrc optional --- src/components/HomeSection/index.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 9760a57d164..d02713cf4a1 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -28,11 +28,13 @@ const HomeSection = ({ className )} > - + {imgSrc && ( + + )}
{tag} From c11e3e805b1bd27583816e4c36acd5fb6ab261e5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 20:18:52 -0700 Subject: [PATCH 034/273] create: npx shadcn-ui@latest add card --- src/components/ui/card.tsx | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/components/ui/card.tsx diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 00000000000..6faf98b08f6 --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils/cn" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } From 2ea7d873664a9366a8349e55d6307a59c57d7fad Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 20:19:10 -0700 Subject: [PATCH 035/273] chore: add icon animation --- src/components/Buttons/SvgButtonLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index f2e1a9bd7b6..92ddc2a3735 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -21,7 +21,7 @@ const SvgButtonLink = ({
- +
{label &&

{label}

} From f7e629e10249676528a15857e88c0b383bdf46a2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 28 Jul 2024 22:10:20 -0700 Subject: [PATCH 036/273] init: upcoming events --- src/pages/index.tsx | 81 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c60c9474624..bf79e2a6b63 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -29,6 +29,7 @@ import Whitepaper from "@/components/icons/whitepaper.svg" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" +import { Card, CardContent, CardHeader } from "@/components/ui/card" import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" @@ -41,6 +42,8 @@ import { isLangRightToLeft, } from "@/lib/utils/translations" +import events from "@/data/community-events.json" + import { BASE_TIME_UNIT, GITHUB_REPO_URL } from "@/lib/constants" import { Button, ButtonLink } from "../../tailwind/ui/buttons/Button" @@ -242,11 +245,18 @@ const HomePage = ({ "👾 Live coding session - Implementing a visual testing component on ethereum.org", }, ] + const comingSoon = [ { title: "Ethereum news", tag: "" }, - { title: "Ethereum events", tag: "" }, { title: "Join ethereum.org", tag: "" }, ] + + const upcomingEvents = events + .sort( + (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() + ) + .slice(0, 3) + return (
-
+
{SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( ))} + + {/* TODO: News sub-section */} + +

We have many community events scheduled around the globe

+
+ {/* Temporary coming soon section template */} {comingSoon.map((item) => ( From d44b7ba37d97af3b85e6384b06c874a9f3dce703 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 29 Jul 2024 13:27:29 -0700 Subject: [PATCH 037/273] style: bold bignumbers value --- src/components/BigNumber/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx index 70a9a659cc1..63b243ecd44 100644 --- a/src/components/BigNumber/index.tsx +++ b/src/components/BigNumber/index.tsx @@ -33,7 +33,7 @@ const BigNumber = ({ className )} > -
{value}
+
{value}
{children} {sourceName && sourceUrl && ( From 5cc62898195c689729311d52ed5296061da833b7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 31 Jul 2024 19:29:16 -0700 Subject: [PATCH 038/273] feat: add error state to BigNumbers --- src/components/BigNumber/index.tsx | 38 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx index 63b243ecd44..95744b61e5c 100644 --- a/src/components/BigNumber/index.tsx +++ b/src/components/BigNumber/index.tsx @@ -1,4 +1,5 @@ import { type ReactNode } from "react" +import { useTranslation } from "next-i18next" import { MdInfoOutline } from "react-icons/md" import { @@ -13,7 +14,7 @@ import { BaseLink } from "../Link" type BigNumberProps = { children: ReactNode - value: ReactNode + value?: ReactNode sourceName?: string sourceUrl?: string className?: string @@ -26,6 +27,7 @@ const BigNumber = ({ sourceUrl, className, }: BigNumberProps) => { + const { t } = useTranslation("common") return (
-
{value}
-
- {children} - {sourceName && sourceUrl && ( - - - - - - {sourceName} - - - )} -
+ {value ? ( + <> +
{value}
+
+ {children} + {sourceName && sourceUrl && ( + + + + + + {sourceName} + + + )} +
+ + ) : ( + {t("loading-error-refresh")} + )}
) } From 9af99e1e282983b03936f6cbc9b2acc79aaceeb1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:18:07 -0700 Subject: [PATCH 039/273] revamp: metric api fetching data schema --- src/lib/api/fetchNodes.ts | 21 +++++------------- src/lib/api/fetchTotalEthStaked.ts | 28 ++++++++---------------- src/lib/api/fetchTotalValueLocked.ts | 23 ++++---------------- src/lib/api/fetchTxCount.ts | 23 ++++++-------------- src/lib/constants.ts | 3 +-- src/lib/types.ts | 32 ++++++---------------------- 6 files changed, 32 insertions(+), 98 deletions(-) diff --git a/src/lib/api/fetchNodes.ts b/src/lib/api/fetchNodes.ts index 37f22e7f9ec..c3d58684e27 100644 --- a/src/lib/api/fetchNodes.ts +++ b/src/lib/api/fetchNodes.ts @@ -1,8 +1,4 @@ -import type { - EtherscanNodeResponse, - MetricReturnData, - TimestampedData, -} from "@/lib/types" +import type { EtherscanNodeResponse, MetricReturnData } from "@/lib/types" import { DAYS_TO_FETCH, ETHERSCAN_API_URL } from "@/lib/constants" @@ -33,18 +29,11 @@ export const fetchNodes = async (): Promise => { } const json: EtherscanNodeResponse = await response.json() - const data: TimestampedData[] = json.result - .map(({ UTCDate, TotalNodeCount }) => ({ - timestamp: new Date(UTCDate).getTime(), - value: +TotalNodeCount, - })) - .sort((a, b) => a.timestamp - b.timestamp) - const { value } = data[data.length - 1] + // Today's value at start (only value) of array + const value = json.result[0].TotalNodeCount - return { - data, // historical data: { timestamp: unix-milliseconds, value } - value, // current value (number, unformatted) - } + // current value (number, unformatted) + return { value } } catch (error: unknown) { console.error((error as Error).message) return { error: (error as Error).message } diff --git a/src/lib/api/fetchTotalEthStaked.ts b/src/lib/api/fetchTotalEthStaked.ts index c0215fd04c8..76714105f54 100644 --- a/src/lib/api/fetchTotalEthStaked.ts +++ b/src/lib/api/fetchTotalEthStaked.ts @@ -16,33 +16,23 @@ export const fetchTotalEthStaked = async (): Promise => { ) try { - const ethStakedResponse = await fetch(url, { + const response = await fetch(url, { headers: { "X-Dune-API-Key": DUNE_API_KEY }, }) - if (!ethStakedResponse.ok) { - console.log(ethStakedResponse.status, ethStakedResponse.statusText) + if (!response.ok) { + console.log(response.status, response.statusText) throw new Error("Failed to fetch eth staked data") } - const ethStakedJson: EthStakedResponse = await ethStakedResponse.json() + const json: EthStakedResponse = await response.json() const { result: { rows = [] }, - } = ethStakedJson + } = json + // Today's value at start of array + const value = rows[0].cum_deposited_eth - const data = rows.map((row) => ({ - timestamp: new Date(row.time).getTime(), - value: row.cum_deposited_eth, - })) - - // data is already sorted...but just in case - data.sort((a, b) => a.timestamp - b.timestamp) - - const { value } = data[data.length - 1] - - return { - data, - value, - } + // current value (number, unformatted) + return { value } } catch (error: unknown) { console.error((error as Error).message) return { error: (error as Error).message } diff --git a/src/lib/api/fetchTotalValueLocked.ts b/src/lib/api/fetchTotalValueLocked.ts index 5299b86792b..877a0f70022 100644 --- a/src/lib/api/fetchTotalValueLocked.ts +++ b/src/lib/api/fetchTotalValueLocked.ts @@ -1,14 +1,6 @@ -import takeRightWhile from "lodash/takeRightWhile" - import { DefiLlamaTVLResponse, MetricReturnData } from "@/lib/types" -import { DAYS_TO_FETCH } from "@/lib/constants" - export const fetchTotalValueLocked = async (): Promise => { - const now = new Date() - const startDate = new Date(now.setDate(now.getDate() - DAYS_TO_FETCH)) - const startTimestamp = Math.round(startDate.getTime() / 1000) - try { const response = await fetch(`https://api.llama.fi/charts/Ethereum`) if (!response.ok) { @@ -17,18 +9,11 @@ export const fetchTotalValueLocked = async (): Promise => { } const json: DefiLlamaTVLResponse = await response.json() - const data = takeRightWhile(json, ({ date }) => +date > startTimestamp) - .map(({ date, totalLiquidityUSD }) => ({ - timestamp: +date * 1000, - value: totalLiquidityUSD, - })) - .sort((a, b) => a.timestamp - b.timestamp) - const { value } = data[data.length - 1] + // Today's value at end of array + const value = json[json.length - 1].totalLiquidityUSD - return { - data, // historical data: { timestamp: unix-milliseconds, value } - value, // current value (number, unformatted) - } + // current value (number, unformatted) + return { value } } catch (error: unknown) { console.error((error as Error).message) return { error: (error as Error).message } diff --git a/src/lib/api/fetchTxCount.ts b/src/lib/api/fetchTxCount.ts index a68c2f633df..144f545a3f0 100644 --- a/src/lib/api/fetchTxCount.ts +++ b/src/lib/api/fetchTxCount.ts @@ -1,8 +1,4 @@ -import type { - EtherscanTxCountResponse, - MetricReturnData, - TimestampedData, -} from "@/lib/types" +import type { EtherscanTxCountResponse, MetricReturnData } from "@/lib/types" import { DAYS_TO_FETCH, ETHERSCAN_API_URL } from "@/lib/constants" @@ -19,7 +15,7 @@ export const fetchTxCount = async (): Promise => { action: "dailytx", startdate: startDate, enddate: endDate, - sort: "asc", + sort: "desc", apikey: apiKey, }).toString() @@ -33,18 +29,11 @@ export const fetchTxCount = async (): Promise => { } const json: EtherscanTxCountResponse = await response.json() - const data: TimestampedData[] = json.result - .map(({ unixTimeStamp, transactionCount }) => ({ - timestamp: +unixTimeStamp * 1000, // unix milliseconds - value: transactionCount, - })) - .sort((a, b) => a.timestamp - b.timestamp) - const { value } = data[data.length - 1] + // Today's value at start (only value) of array + const value = json.result[0].transactionCount - return { - data, // historical data: { timestamp: unix-milliseconds, value } - value, // current value (number, unformatted) - } + // current value (number, unformatted) + return { value } } catch (error: unknown) { console.error((error as Error).message) return { diff --git a/src/lib/constants.ts b/src/lib/constants.ts index f16b1d069a1..387c7a1e6f4 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -73,8 +73,7 @@ export const REGULAR_RATES: ReportsModel.RegularRate[] = [ export const languagePathRootRegExp = /^.+\/content\/translations\/[a-z-]*\// // Metrics -export const DAYS_TO_FETCH = 90 -export const RANGES = ["30d", "90d"] as const +export const DAYS_TO_FETCH = 1 export const BEACONCHA_IN_URL = "https://beaconcha.in/" export const ETHERSCAN_API_URL = "https://api.etherscan.io" export const DUNE_API_URL = "https://api.dune.com" diff --git a/src/lib/types.ts b/src/lib/types.ts index b7faea71248..2e882116c85 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -508,19 +508,7 @@ export type StakingStatsData = { apr: number } -export type TimestampedData = { - timestamp: number - value: T -} - -export type MetricDataValue = - | { - error: string - } - | { - data: Data - value: Value - } +export type ValueOrError = { value: T } | { error: string } export type EtherscanNodeResponse = { result: { @@ -545,27 +533,21 @@ export type DefiLlamaTVLResponse = { totalLiquidityUSD: number }[] -export type MetricReturnData = MetricDataValue< - TimestampedData[], - number -> +export type MetricReturnData = ValueOrError -export type StatsBoxState = MetricDataValue[], string> +export type StatsBoxState = ValueOrError -export type MetricSection = +export type MetricName = | "totalEthStaked" | "nodeCount" | "totalValueLocked" | "txCount" - -export type AllMetricData = Record +export type AllMetricData = Record export type StatsBoxMetric = { - title: string - description: string + label: string + description?: string state: StatsBoxState - buttonContainer: JSX.Element - range: string apiUrl: string apiProvider: string } From 0a3ce4a329cb75dc7c3ba049579e0b98face8277 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:18:31 -0700 Subject: [PATCH 040/273] revamp: StatsBoxGrid components --- src/components/StatsBoxGrid/GridItem.tsx | 223 --- src/components/StatsBoxGrid/RangeSelector.tsx | 48 - .../StatsBoxGrid/StatsBoxGrid.stories.tsx | 1195 ----------------- src/components/StatsBoxGrid/index.tsx | 42 +- .../StatsBoxGrid/useStatsBoxGrid.tsx | 94 +- 5 files changed, 35 insertions(+), 1567 deletions(-) delete mode 100644 src/components/StatsBoxGrid/GridItem.tsx delete mode 100644 src/components/StatsBoxGrid/RangeSelector.tsx delete mode 100644 src/components/StatsBoxGrid/StatsBoxGrid.stories.tsx diff --git a/src/components/StatsBoxGrid/GridItem.tsx b/src/components/StatsBoxGrid/GridItem.tsx deleted file mode 100644 index c970b2358e3..00000000000 --- a/src/components/StatsBoxGrid/GridItem.tsx +++ /dev/null @@ -1,223 +0,0 @@ -import { - CategoryScale, - Chart as ChartJS, - Filler, - LinearScale, - LineElement, - PointElement, - ScriptableContext, -} from "chart.js" -import ChartDataLabels from "chartjs-plugin-datalabels" -import { Line } from "react-chartjs-2" -import { MdInfoOutline } from "react-icons/md" -import { Box, Flex, Icon, Text } from "@chakra-ui/react" - -import type { StatsBoxMetric, TimestampedData } from "@/lib/types" - -import { RANGES } from "@/lib/constants" - -import InlineLink from "../Link" -import OldText from "../OldText" -import StatErrorMessage from "../StatErrorMessage" -import Tooltip from "../Tooltip" -import Translation from "../Translation" - -const tooltipContent = (metric: StatsBoxMetric) => ( -
- {" "} - {metric.apiProvider} -
-) - -type GridItemProps = { - metric: StatsBoxMetric -} - -// ChartJS config -ChartJS.register( - CategoryScale, - LinearScale, - PointElement, - LineElement, - Filler, - // to avoid a production error, we must include this plugin even if we do - // not use it (we are using it on the energy consumption chart) - ChartDataLabels -) - -export const GridItem = ({ metric }: GridItemProps) => { - const { title, description, state, buttonContainer, range } = metric - const hasError = "error" in state - const hasData = "data" in state - - const value = hasError ? ( - - ) : ( - - - {state.value}{" "} - - - - - - - - - - ) - - // Returns either 90 or 30-day data range depending on `range` selection - const filteredData = (data: TimestampedData[]) => { - if (range === RANGES[1]) return [...data] - - return data.filter(({ timestamp }) => { - const millisecondRange = 1000 * 60 * 60 * 24 * 30 - const now = new Date().getTime() - - return timestamp >= now - millisecondRange - }) - } - - const minValue = hasData - ? state.data.reduce( - (prev, { value }) => (prev < value ? prev : value), - Infinity - ) - : 0 - - const maxValue = hasData - ? state.data.reduce((prev, { value }) => (prev > value ? prev : value), 0) - : 0 - - // ChartJS options - const chartOptions = { - // chart styles - borderColor: "#8884db", - borderWidth: 1, - tension: 0.3, - fill: true, - backgroundColor: (context: ScriptableContext<"line">) => { - const ctx = context.chart.ctx - const gradient = ctx.createLinearGradient(0, 0, 0, 220) - // gradient.addColorStop(offset, color) - gradient.addColorStop(0, "#8884d84d") - gradient.addColorStop(0.85, "#ffffff00") - - return gradient - }, - pointRadius: 0, - maintainAspectRatio: false, - // chart legend/title config - plugins: { - legend: { - display: false, // hide chart legend - }, - title: { - display: false, // hide titles - }, - // force disabling chart labels because when the user do an internal - // navigation, labels are displayed incorrectly (probably a bug in - // chart.js or the react wrapper) - datalabels: { - display: false, - }, - }, - // chart labels config - scales: { - y: { - display: false, // hide Y axis labels - grid: { - display: false, - }, - min: minValue, - max: maxValue, - }, - x: { - display: false, // hide X axis labels - grid: { - display: false, - }, - }, - }, - } - - const filteredRange = filteredData(hasData ? state.data : []) - - const chartData = { - labels: filteredRange, - datasets: [ - { - data: filteredRange.map((item) => item.value), - }, - ], - } - - return ( - - - - {title} - - {description} - - {hasData && ( - - - - )} - - - {value} - - {hasData && ( - - {buttonContainer} - - )} - - - ) -} diff --git a/src/components/StatsBoxGrid/RangeSelector.tsx b/src/components/StatsBoxGrid/RangeSelector.tsx deleted file mode 100644 index f20c2bd0a9b..00000000000 --- a/src/components/StatsBoxGrid/RangeSelector.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { Button } from "@chakra-ui/react" - -import { MatomoEventOptions, trackCustomEvent } from "@/lib/utils/matomo" - -import { RANGES } from "@/lib/constants" - -type RangeSelectorProps = { - state: string - setState: (state: string) => void - matomo: MatomoEventOptions -} - -export const RangeSelector = ({ - state, - setState, - matomo, -}: RangeSelectorProps) => ( -
- {RANGES.map((range, idx) => ( - - ))} -
-) diff --git a/src/components/StatsBoxGrid/StatsBoxGrid.stories.tsx b/src/components/StatsBoxGrid/StatsBoxGrid.stories.tsx deleted file mode 100644 index f728befcea7..00000000000 --- a/src/components/StatsBoxGrid/StatsBoxGrid.stories.tsx +++ /dev/null @@ -1,1195 +0,0 @@ -import { Meta, StoryObj } from "@storybook/react" - -import ChartComponent from "." - -const meta = { - title: "Molecules / Display Content / Charts / StatsBoxGrid", - component: ChartComponent, -} satisfies Meta - -export default meta - -const data = { - totalEthStaked: { - data: [ - { - timestamp: 1711046914939, - value: 31264816, - }, - { - timestamp: 1711478914750, - value: 31293710, - }, - { - timestamp: 1711910914539, - value: 31252698, - }, - { - timestamp: 1712342914293, - value: 31276284, - }, - { - timestamp: 1712774913817, - value: 31335770, - }, - { - timestamp: 1713206913617, - value: 31433722, - }, - { - timestamp: 1713638913307, - value: 31567738, - }, - { - timestamp: 1714070913106, - value: 31792826, - }, - { - timestamp: 1714502912732, - value: 31962077, - }, - { - timestamp: 1714934912550, - value: 32161756, - }, - { - timestamp: 1715366912357, - value: 32318268, - }, - { - timestamp: 1715798912177, - value: 32346523, - }, - { - timestamp: 1716230911985, - value: 32140059, - }, - { - timestamp: 1716662911731, - value: 32144667, - }, - { - timestamp: 1717094911536, - value: 32159580, - }, - { - timestamp: 1717526911328, - value: 32402137, - }, - { - timestamp: 1717958911024, - value: 32529753, - }, - { - timestamp: 1718390910942, - value: 32654772, - }, - { - timestamp: 1718822910942, - value: 32737397, - }, - ], - value: 32737397, - }, - nodeCount: { - data: [ - { - timestamp: 1710979200000, - value: 8846, - }, - { - timestamp: 1711065600000, - value: 8188, - }, - { - timestamp: 1711152000000, - value: 7010, - }, - { - timestamp: 1711238400000, - value: 6877, - }, - { - timestamp: 1711324800000, - value: 7268, - }, - { - timestamp: 1711411200000, - value: 8107, - }, - { - timestamp: 1711497600000, - value: 6914, - }, - { - timestamp: 1711584000000, - value: 7616, - }, - { - timestamp: 1711670400000, - value: 8245, - }, - { - timestamp: 1711756800000, - value: 7984, - }, - { - timestamp: 1711843200000, - value: 7139, - }, - { - timestamp: 1711929600000, - value: 8311, - }, - { - timestamp: 1712016000000, - value: 8158, - }, - { - timestamp: 1712102400000, - value: 9454, - }, - { - timestamp: 1712188800000, - value: 8151, - }, - { - timestamp: 1712275200000, - value: 8194, - }, - { - timestamp: 1712361600000, - value: 8002, - }, - { - timestamp: 1712448000000, - value: 8290, - }, - { - timestamp: 1712534400000, - value: 7496, - }, - { - timestamp: 1712620800000, - value: 7854, - }, - { - timestamp: 1712707200000, - value: 7593, - }, - { - timestamp: 1712793600000, - value: 6285, - }, - { - timestamp: 1712880000000, - value: 6850, - }, - { - timestamp: 1712966400000, - value: 6287, - }, - { - timestamp: 1713052800000, - value: 7289, - }, - { - timestamp: 1713139200000, - value: 6868, - }, - { - timestamp: 1713225600000, - value: 6195, - }, - { - timestamp: 1713312000000, - value: 6476, - }, - { - timestamp: 1713398400000, - value: 6859, - }, - { - timestamp: 1713484800000, - value: 7235, - }, - { - timestamp: 1713571200000, - value: 6027, - }, - { - timestamp: 1713657600000, - value: 7191, - }, - { - timestamp: 1713744000000, - value: 7596, - }, - { - timestamp: 1713830400000, - value: 7052, - }, - { - timestamp: 1713916800000, - value: 7170, - }, - { - timestamp: 1714003200000, - value: 8531, - }, - { - timestamp: 1714089600000, - value: 7841, - }, - { - timestamp: 1714176000000, - value: 7195, - }, - { - timestamp: 1714262400000, - value: 7741, - }, - { - timestamp: 1714348800000, - value: 7895, - }, - { - timestamp: 1714435200000, - value: 8027, - }, - { - timestamp: 1714521600000, - value: 7028, - }, - { - timestamp: 1714608000000, - value: 6629, - }, - { - timestamp: 1714694400000, - value: 6143, - }, - { - timestamp: 1714780800000, - value: 6528, - }, - { - timestamp: 1714867200000, - value: 6359, - }, - { - timestamp: 1714953600000, - value: 7558, - }, - { - timestamp: 1715040000000, - value: 7096, - }, - { - timestamp: 1715126400000, - value: 6759, - }, - { - timestamp: 1715212800000, - value: 6935, - }, - { - timestamp: 1715299200000, - value: 5857, - }, - { - timestamp: 1715385600000, - value: 5258, - }, - { - timestamp: 1715472000000, - value: 6815, - }, - { - timestamp: 1715558400000, - value: 6587, - }, - { - timestamp: 1715644800000, - value: 6013, - }, - { - timestamp: 1715731200000, - value: 5951, - }, - { - timestamp: 1715817600000, - value: 6260, - }, - { - timestamp: 1715904000000, - value: 6786, - }, - { - timestamp: 1715990400000, - value: 6319, - }, - { - timestamp: 1716076800000, - value: 6494, - }, - { - timestamp: 1716163200000, - value: 6885, - }, - { - timestamp: 1716249600000, - value: 6747, - }, - { - timestamp: 1716336000000, - value: 0, - }, - { - timestamp: 1716422400000, - value: 5859, - }, - { - timestamp: 1716508800000, - value: 6153, - }, - { - timestamp: 1716595200000, - value: 5336, - }, - { - timestamp: 1716681600000, - value: 5277, - }, - { - timestamp: 1716768000000, - value: 5319, - }, - { - timestamp: 1716854400000, - value: 4743, - }, - { - timestamp: 1716940800000, - value: 5852, - }, - { - timestamp: 1717027200000, - value: 6014, - }, - { - timestamp: 1717113600000, - value: 5984, - }, - { - timestamp: 1717200000000, - value: 5909, - }, - { - timestamp: 1717286400000, - value: 5056, - }, - { - timestamp: 1717372800000, - value: 4446, - }, - { - timestamp: 1717459200000, - value: 4245, - }, - { - timestamp: 1717545600000, - value: 5257, - }, - { - timestamp: 1717632000000, - value: 4735, - }, - { - timestamp: 1717718400000, - value: 4454, - }, - { - timestamp: 1717804800000, - value: 4845, - }, - { - timestamp: 1717891200000, - value: 5292, - }, - { - timestamp: 1717977600000, - value: 5224, - }, - { - timestamp: 1718064000000, - value: 5034, - }, - { - timestamp: 1718150400000, - value: 5108, - }, - { - timestamp: 1718236800000, - value: 5886, - }, - { - timestamp: 1718323200000, - value: 5310, - }, - { - timestamp: 1718409600000, - value: 4182, - }, - { - timestamp: 1718496000000, - value: 4873, - }, - { - timestamp: 1718582400000, - value: 6107, - }, - { - timestamp: 1718668800000, - value: 5653, - }, - ], - value: 5653, - }, - totalValueLocked: { - data: [ - { - timestamp: 1711065600000, - value: 112244661480.2202, - }, - { - timestamp: 1711152000000, - value: 110190192300.0835, - }, - { - timestamp: 1711238400000, - value: 111073589588.7738, - }, - { - timestamp: 1711324800000, - value: 113634706183.9239, - }, - { - timestamp: 1711411200000, - value: 119601181065.50461, - }, - { - timestamp: 1711497600000, - value: 118195537110.08882, - }, - { - timestamp: 1711584000000, - value: 118607194697.73175, - }, - { - timestamp: 1711670400000, - value: 118246750821.37906, - }, - { - timestamp: 1711756800000, - value: 118283614370.13524, - }, - { - timestamp: 1711843200000, - value: 120448819041.86978, - }, - { - timestamp: 1711929600000, - value: 119620445071.31076, - }, - { - timestamp: 1712016000000, - value: 112692670247.1247, - }, - { - timestamp: 1712102400000, - value: 112485442989.18071, - }, - { - timestamp: 1712188800000, - value: 113602568195.16336, - }, - { - timestamp: 1712275200000, - value: 111959253114.345, - }, - { - timestamp: 1712361600000, - value: 114132015553.75801, - }, - { - timestamp: 1712448000000, - value: 115851240566.14578, - }, - { - timestamp: 1712534400000, - value: 123130301692.1496, - }, - { - timestamp: 1712620800000, - value: 124547851876.65347, - }, - { - timestamp: 1712707200000, - value: 120899586471.45726, - }, - { - timestamp: 1712793600000, - value: 122385636017.12401, - }, - { - timestamp: 1712880000000, - value: 123151578066.06805, - }, - { - timestamp: 1712966400000, - value: 113784803211.6668, - }, - { - timestamp: 1713052800000, - value: 106536975620.96655, - }, - { - timestamp: 1713139200000, - value: 113189403518.79079, - }, - { - timestamp: 1713225600000, - value: 107708745426.17822, - }, - { - timestamp: 1713312000000, - value: 108684368474.94485, - }, - { - timestamp: 1713398400000, - value: 107162474320.61333, - }, - { - timestamp: 1713484800000, - value: 110090672664.77606, - }, - { - timestamp: 1713571200000, - value: 108572626750.28156, - }, - { - timestamp: 1713657600000, - value: 112998105936.53021, - }, - { - timestamp: 1713744000000, - value: 114451840616.87883, - }, - { - timestamp: 1713830400000, - value: 113726006496.89804, - }, - { - timestamp: 1713916800000, - value: 116757806473.36693, - }, - { - timestamp: 1714003200000, - value: 111069125672.59727, - }, - { - timestamp: 1714089600000, - value: 112788830205.30832, - }, - { - timestamp: 1714176000000, - value: 112413080674.99602, - }, - { - timestamp: 1714262400000, - value: 118333313305.13948, - }, - { - timestamp: 1714348800000, - value: 114616820172.5089, - }, - { - timestamp: 1714435200000, - value: 110828487877.77112, - }, - { - timestamp: 1714521600000, - value: 105363073148.13794, - }, - { - timestamp: 1714608000000, - value: 108187152890.4916, - }, - { - timestamp: 1714694400000, - value: 109094689870.53958, - }, - { - timestamp: 1714780800000, - value: 115263926362.20056, - }, - { - timestamp: 1714867200000, - value: 115393194183.03171, - }, - { - timestamp: 1714953600000, - value: 116588409789.4379, - }, - { - timestamp: 1715040000000, - value: 114437792284.27107, - }, - { - timestamp: 1715126400000, - value: 111428115073.99696, - }, - { - timestamp: 1715212800000, - value: 110350740294.4409, - }, - { - timestamp: 1715299200000, - value: 112861640750.64597, - }, - { - timestamp: 1715385600000, - value: 108441023395.26541, - }, - { - timestamp: 1715472000000, - value: 109441892417.54547, - }, - { - timestamp: 1715558400000, - value: 110641475045.34535, - }, - { - timestamp: 1715644800000, - value: 108922287180.79155, - }, - { - timestamp: 1715731200000, - value: 109040151657.00539, - }, - { - timestamp: 1715817600000, - value: 112482393192.17567, - }, - { - timestamp: 1715904000000, - value: 113380081979.20108, - }, - { - timestamp: 1715990400000, - value: 116999947777.71738, - }, - { - timestamp: 1716076800000, - value: 116028326673.59668, - }, - { - timestamp: 1716163200000, - value: 115872329763.73926, - }, - { - timestamp: 1716249600000, - value: 136497979086.03397, - }, - { - timestamp: 1716336000000, - value: 137054108833.94127, - }, - { - timestamp: 1716422400000, - value: 140518562022.72626, - }, - { - timestamp: 1716508800000, - value: 135408923028.20445, - }, - { - timestamp: 1716595200000, - value: 138208686011.70172, - }, - { - timestamp: 1716681600000, - value: 139486607005.51178, - }, - { - timestamp: 1716768000000, - value: 142846997319.63187, - }, - { - timestamp: 1716854400000, - value: 142531945072.63226, - }, - { - timestamp: 1716940800000, - value: 141121193824.71576, - }, - { - timestamp: 1717027200000, - value: 138725735009.70367, - }, - { - timestamp: 1717113600000, - value: 139914667465.12717, - }, - { - timestamp: 1717200000000, - value: 140783758431.06125, - }, - { - timestamp: 1717286400000, - value: 140938344621.71402, - }, - { - timestamp: 1717372800000, - value: 141998084417.63138, - }, - { - timestamp: 1717459200000, - value: 140576362732.24146, - }, - { - timestamp: 1717545600000, - value: 142350140219.98376, - }, - { - timestamp: 1717632000000, - value: 144489824995.8935, - }, - { - timestamp: 1717718400000, - value: 143873369582.8502, - }, - { - timestamp: 1717804800000, - value: 139851333923.40503, - }, - { - timestamp: 1717891200000, - value: 139504362600.96533, - }, - { - timestamp: 1717977600000, - value: 139472790889.50482, - }, - { - timestamp: 1718064000000, - value: 134258723500.63882, - }, - { - timestamp: 1718150400000, - value: 135115327423.08612, - }, - { - timestamp: 1718236800000, - value: 133815904283.74007, - }, - { - timestamp: 1718323200000, - value: 134093306755.8546, - }, - { - timestamp: 1718409600000, - value: 134652071708.52539, - }, - { - timestamp: 1718496000000, - value: 135962988210.06384, - }, - { - timestamp: 1718582400000, - value: 134753260036.98149, - }, - { - timestamp: 1718668800000, - value: 131216214582.94562, - }, - { - timestamp: 1718755200000, - value: 135239859252.39319, - }, - ], - value: 135239859252.39319, - }, - txCount: { - data: [ - { - timestamp: 1710979200000, - value: 1331198, - }, - { - timestamp: 1711065600000, - value: 1323924, - }, - { - timestamp: 1711152000000, - value: 1297609, - }, - { - timestamp: 1711238400000, - value: 1230758, - }, - { - timestamp: 1711324800000, - value: 1279190, - }, - { - timestamp: 1711411200000, - value: 1315082, - }, - { - timestamp: 1711497600000, - value: 1272273, - }, - { - timestamp: 1711584000000, - value: 1287078, - }, - { - timestamp: 1711670400000, - value: 1304561, - }, - { - timestamp: 1711756800000, - value: 1239605, - }, - { - timestamp: 1711843200000, - value: 1245309, - }, - { - timestamp: 1711929600000, - value: 1245715, - }, - { - timestamp: 1712016000000, - value: 1239577, - }, - { - timestamp: 1712102400000, - value: 1211600, - }, - { - timestamp: 1712188800000, - value: 1091267, - }, - { - timestamp: 1712275200000, - value: 1242174, - }, - { - timestamp: 1712361600000, - value: 1201522, - }, - { - timestamp: 1712448000000, - value: 1177838, - }, - { - timestamp: 1712534400000, - value: 1221235, - }, - { - timestamp: 1712620800000, - value: 1226401, - }, - { - timestamp: 1712707200000, - value: 1207941, - }, - { - timestamp: 1712793600000, - value: 1213672, - }, - { - timestamp: 1712880000000, - value: 1322052, - }, - { - timestamp: 1712966400000, - value: 1162426, - }, - { - timestamp: 1713052800000, - value: 1133064, - }, - { - timestamp: 1713139200000, - value: 1187906, - }, - { - timestamp: 1713225600000, - value: 1178451, - }, - { - timestamp: 1713312000000, - value: 1164902, - }, - { - timestamp: 1713398400000, - value: 1235484, - }, - { - timestamp: 1713484800000, - value: 1182165, - }, - { - timestamp: 1713571200000, - value: 1152540, - }, - { - timestamp: 1713657600000, - value: 1133785, - }, - { - timestamp: 1713744000000, - value: 1178253, - }, - { - timestamp: 1713830400000, - value: 1199365, - }, - { - timestamp: 1713916800000, - value: 1171434, - }, - { - timestamp: 1714003200000, - value: 1186539, - }, - { - timestamp: 1714089600000, - value: 1177416, - }, - { - timestamp: 1714176000000, - value: 1103918, - }, - { - timestamp: 1714262400000, - value: 1140939, - }, - { - timestamp: 1714348800000, - value: 1224677, - }, - { - timestamp: 1714435200000, - value: 1262466, - }, - { - timestamp: 1714521600000, - value: 1206626, - }, - { - timestamp: 1714608000000, - value: 1223696, - }, - { - timestamp: 1714694400000, - value: 1194608, - }, - { - timestamp: 1714780800000, - value: 1163073, - }, - { - timestamp: 1714867200000, - value: 1145911, - }, - { - timestamp: 1714953600000, - value: 1190232, - }, - { - timestamp: 1715040000000, - value: 1231931, - }, - { - timestamp: 1715126400000, - value: 1159221, - }, - { - timestamp: 1715212800000, - value: 1126649, - }, - { - timestamp: 1715299200000, - value: 1154535, - }, - { - timestamp: 1715385600000, - value: 1113685, - }, - { - timestamp: 1715472000000, - value: 1055429, - }, - { - timestamp: 1715558400000, - value: 1163122, - }, - { - timestamp: 1715644800000, - value: 1182521, - }, - { - timestamp: 1715731200000, - value: 1197067, - }, - { - timestamp: 1715817600000, - value: 1218766, - }, - { - timestamp: 1715904000000, - value: 1112590, - }, - { - timestamp: 1715990400000, - value: 1082308, - }, - { - timestamp: 1716076800000, - value: 1022057, - }, - { - timestamp: 1716163200000, - value: 1124081, - }, - { - timestamp: 1716249600000, - value: 1198696, - }, - { - timestamp: 1716336000000, - value: 1188672, - }, - { - timestamp: 1716422400000, - value: 1156304, - }, - { - timestamp: 1716508800000, - value: 1164101, - }, - { - timestamp: 1716595200000, - value: 1157033, - }, - { - timestamp: 1716681600000, - value: 1139013, - }, - { - timestamp: 1716768000000, - value: 1159616, - }, - { - timestamp: 1716854400000, - value: 1105315, - }, - { - timestamp: 1716940800000, - value: 1172771, - }, - { - timestamp: 1717027200000, - value: 1149944, - }, - { - timestamp: 1717113600000, - value: 1175396, - }, - { - timestamp: 1717200000000, - value: 1119675, - }, - { - timestamp: 1717286400000, - value: 1076974, - }, - { - timestamp: 1717372800000, - value: 1152786, - }, - { - timestamp: 1717459200000, - value: 1164380, - }, - { - timestamp: 1717545600000, - value: 1178477, - }, - { - timestamp: 1717632000000, - value: 1154720, - }, - { - timestamp: 1717718400000, - value: 1184232, - }, - { - timestamp: 1717804800000, - value: 1156305, - }, - { - timestamp: 1717891200000, - value: 1142399, - }, - { - timestamp: 1717977600000, - value: 1180168, - }, - { - timestamp: 1718064000000, - value: 1177067, - }, - { - timestamp: 1718150400000, - value: 1224208, - }, - { - timestamp: 1718236800000, - value: 1230853, - }, - { - timestamp: 1718323200000, - value: 1184071, - }, - { - timestamp: 1718409600000, - value: 1137118, - }, - { - timestamp: 1718496000000, - value: 1123092, - }, - { - timestamp: 1718582400000, - value: 1143178, - }, - { - timestamp: 1718668800000, - value: 1147395, - }, - ], - value: 1147395, - }, -} - -export const Basic: StoryObj = { - args: { - data, - }, -} diff --git a/src/components/StatsBoxGrid/index.tsx b/src/components/StatsBoxGrid/index.tsx index bda92a8f3a0..b017193ec08 100644 --- a/src/components/StatsBoxGrid/index.tsx +++ b/src/components/StatsBoxGrid/index.tsx @@ -1,31 +1,35 @@ -import { SimpleGrid } from "@chakra-ui/react" - import type { AllMetricData } from "@/lib/types" -import { GridItem } from "./GridItem" +import BigNumber from "../BigNumber" + import { useStatsBoxGrid } from "./useStatsBoxGrid" type StatsBoxGridProps = { - data: AllMetricData + metricResults: AllMetricData } +const StatsBoxGrid = ({ metricResults }: StatsBoxGridProps) => { + const metrics = useStatsBoxGrid(metricResults) -const StatsBoxGrid = ({ data }: StatsBoxGridProps) => { - const metrics = useStatsBoxGrid(data) - + const gridBorderClasses = [ + "border-b border-body-light xl:border-e xl:pe-8", + "border-b border-body-light xl:ps-8", + "border-b border-body-light xl:border-b-0 xl:border-e xl:pe-8", + "xl:ps-8", + ] return ( - - {metrics.map((metric, idx) => ( - +
+ {metrics.map(({ label, apiProvider, apiUrl, state }, idx) => ( + + {label} + ))} - +
) } diff --git a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx index 1651b0a801a..91b8a9acc01 100644 --- a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx +++ b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx @@ -1,4 +1,8 @@ -import { useState } from "react" +/** + * TODO: Update metric for new homepage: + * - Replace TVL DeFi with "Total value held on Ethereum" + * - Replace Node Count with "Average transaction cost" + */ import { useRouter } from "next/router" import { useTranslation } from "next-i18next" @@ -6,10 +10,6 @@ import type { AllMetricData, Lang, StatsBoxMetric } from "@/lib/types" import { getLocaleForNumberFormat } from "@/lib/utils/translations" -import { RANGES } from "@/lib/constants" - -import { RangeSelector } from "./RangeSelector" - const formatTotalStaked = (amount: number, locale: string): string => { return new Intl.NumberFormat(locale, { notation: "compact", @@ -52,124 +52,54 @@ export const useStatsBoxGrid = ({ const { t } = useTranslation("page-index") const { locale } = useRouter() - const [selectedRangeTotalStaked, setSelectedRangeTotalStaked] = - useState(RANGES[0]) - const [selectedRangeTvl, setSelectedRangeTvl] = useState(RANGES[0]) - const [selectedRangeNodes, setSelectedRangeNodes] = useState( - RANGES[0] - ) - const [selectedRangeTxs, setSelectedRangeTxs] = useState(RANGES[0]) - const localeForNumberFormat = getLocaleForNumberFormat(locale! as Lang) const totalEtherStaked = "error" in totalEthStaked ? { error: totalEthStaked.error } : { - data: totalEthStaked.data, value: formatTotalStaked(totalEthStaked.value, localeForNumberFormat), } const valueLocked = "error" in totalValueLocked ? { error: totalValueLocked.error } - : { - data: totalValueLocked.data, - value: formatTVL(totalValueLocked.value, localeForNumberFormat), - } + : { value: formatTVL(totalValueLocked.value, localeForNumberFormat) } const txs = "error" in txCount ? { error: txCount.error } - : { - data: txCount.data, - value: formatTxs(txCount.value, localeForNumberFormat), - } + : { value: formatTxs(txCount.value, localeForNumberFormat) } const nodes = "error" in nodeCount ? { error: nodeCount.error } - : { - data: nodeCount.data, - value: formatNodes(nodeCount.value, localeForNumberFormat), - } + : { value: formatNodes(nodeCount.value, localeForNumberFormat) } const metrics: StatsBoxMetric[] = [ { apiProvider: "Dune Analytics", apiUrl: "https://dune.com/", - title: t("page-index-network-stats-total-eth-staked"), - description: t("page-index-network-stats-total-eth-staked-explainer"), - buttonContainer: ( - - ), + label: t("page-index-network-stats-total-eth-staked"), state: totalEtherStaked, - range: selectedRangeTotalStaked, }, { apiProvider: "Etherscan", apiUrl: "https://etherscan.io/", - title: t("page-index-network-stats-tx-day-description"), - description: t("page-index-network-stats-tx-day-explainer"), - buttonContainer: ( - - ), + label: t("page-index-network-stats-tx-day-description"), state: txs, - range: selectedRangeTxs, }, { apiProvider: "DeFi Llama", apiUrl: "https://defillama.com/", - title: t("page-index-network-stats-value-defi-description"), - description: t("page-index-network-stats-value-defi-explainer"), - buttonContainer: ( - - ), + label: t("page-index-network-stats-value-defi-description"), state: valueLocked, - range: selectedRangeTvl, }, { apiProvider: "Etherscan", apiUrl: "https://etherscan.io/nodetracker", - title: t("page-index-network-stats-nodes-description"), - description: t("page-index-network-stats-nodes-explainer"), - buttonContainer: ( - - ), + label: t("page-index-network-stats-nodes-description"), state: nodes, - range: selectedRangeNodes, }, ] From f3c3196562e4506362281f002c4f5f064d506434 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:19:45 -0700 Subject: [PATCH 041/273] feat: add StatsBoxGrid to homepage --- src/intl/en/page-index.json | 4 ++-- src/pages/index.tsx | 44 ++++--------------------------------- 2 files changed, 6 insertions(+), 42 deletions(-) diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 1e3e74e3c22..3e7464c4f8a 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -48,11 +48,11 @@ "page-index-developers-code-example-description-3": "Reimagine existing services as decentralized, open applications", "page-index-network-stats-title": "Ethereum today", "page-index-network-stats-subtitle": "The latest network statistics", - "page-index-network-stats-total-eth-staked": "Total ETH staked", + "page-index-network-stats-total-eth-staked": "Value protecting Ethereum", "page-index-network-stats-eth-price-description": "ETH price (USD)", "page-index-network-stats-eth-price-explainer": "The latest price for 1 ether. You can buy as little as 0.000000000000000001 – you don't need to buy 1 whole ETH.", "page-index-network-stats-total-eth-staked-explainer": "The total amount of ETH currently being staked and securing the network.", - "page-index-network-stats-tx-day-description": "Transactions today", + "page-index-network-stats-tx-day-description": "Transactions in the last 24h", "page-index-network-stats-tx-day-explainer": "The number of transactions successfully processed on the network in the last 24 hours.", "page-index-network-stats-value-defi-description": "Value locked in DeFi (USD)", "page-index-network-stats-value-defi-explainer": "The amount of money in decentralized finance (DeFi) applications, the Ethereum digital economy.", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index bf79e2a6b63..2b0fe7ccc2a 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -8,10 +8,9 @@ import { MdChevronRight } from "react-icons/md" import { RxExternalLink } from "react-icons/rx" import { Flex, Skeleton } from "@chakra-ui/react" -import { AllMetricData, BasePageProps, Lang } from "@/lib/types" +import type { AllMetricData, BasePageProps, Lang } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" -import BigNumber from "@/components/BigNumber" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" @@ -28,6 +27,7 @@ import RoadmapSign from "@/components/icons/roadmap-sign.svg" import Whitepaper from "@/components/icons/whitepaper.svg" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" +import StatsBoxGrid from "@/components/StatsBoxGrid" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import { Card, CardContent, CardHeader } from "@/components/ui/card" import WindowBox from "@/components/WindowBox" @@ -163,8 +163,6 @@ const HomePage = ({ // TODO: Remove when used console.log("Values to use:", { communityEvents, - metricResults, - codeExamples, }) const SubHeroCTAs = [ @@ -255,7 +253,7 @@ const HomePage = ({ .sort( (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() ) - .slice(0, 3) + .slice(0, 3) // Show 3 events ending soonest return ( Activity from all Ethereum networks

-
- {/* TODO: Plug in real data */} - - Total value held on Ethereum - - - - Transactions in the last 24h - - - - Average transaction cost - - - - Value protecting Ethereum - -
+
From 25d3a5623f4f0b0045b6fddb08e620fd6e48e2dd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:20:35 -0700 Subject: [PATCH 042/273] style: add focus animation to SvgButtonLink --- src/components/Buttons/SvgButtonLink.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 92ddc2a3735..93c6552fab3 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -18,10 +18,16 @@ const SvgButtonLink = ({ className, ...props }: SvgButtonLinkProps) => ( - +
-
- +
+
{label &&

{label}

} From 3efa41cfc21f35cd614f3555bf25f1008adb9d17 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:51:39 -0700 Subject: [PATCH 043/273] feat: implement calendar data --- src/components/WindowBox/index.tsx | 2 +- src/pages/index.tsx | 51 +++++++++++------------------- 2 files changed, 20 insertions(+), 33 deletions(-) diff --git a/src/components/WindowBox/index.tsx b/src/components/WindowBox/index.tsx index 6bdca8ac714..f233a02ba12 100644 --- a/src/components/WindowBox/index.tsx +++ b/src/components/WindowBox/index.tsx @@ -7,7 +7,7 @@ type WindowBoxProps = { } const WindowBox = ({ title, children, Svg }: WindowBoxProps) => ( -
+
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2b0fe7ccc2a..0d4189cbae1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -5,7 +5,6 @@ import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" import { FaDiscord, FaGithub } from "react-icons/fa" import { MdChevronRight } from "react-icons/md" -import { RxExternalLink } from "react-icons/rx" import { Flex, Skeleton } from "@chakra-ui/react" import type { AllMetricData, BasePageProps, Lang } from "@/lib/types" @@ -46,7 +45,7 @@ import events from "@/data/community-events.json" import { BASE_TIME_UNIT, GITHUB_REPO_URL } from "@/lib/constants" -import { Button, ButtonLink } from "../../tailwind/ui/buttons/Button" +import { ButtonLink } from "../../tailwind/ui/buttons/Button" import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" @@ -160,11 +159,6 @@ const HomePage = ({ }, ] - // TODO: Remove when used - console.log("Values to use:", { - communityEvents, - }) - const SubHeroCTAs = [ { label: "Pick a wallet", @@ -224,26 +218,6 @@ const HomePage = ({ }, ] - const dummyCalendarData = [ - { - date: "May 29, 2024 at 18:00", - title: "ethereum.org Community Call - May 2024", - }, - { - date: "Jul 25, 2024", - title: "☎️ ethereum.org Community Call - July 2024", - }, - { - date: "Jul 3, 2024", - title: "🛠 QA session - ethereum.org portal", - }, - { - date: "May 8, 2024", - title: - "👾 Live coding session - Implementing a visual testing component on ethereum.org", - }, - ] - const comingSoon = [ { title: "Ethereum news", tag: "" }, { title: "Join ethereum.org", tag: "" }, @@ -255,6 +229,10 @@ const HomePage = ({ ) .slice(0, 3) // Show 3 events ending soonest + const calendar = communityEvents.upcomingEventData + .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) + .slice(0, 4) // Show next 4 events on the calendar + return ( - {dummyCalendarData.map(({ date, title }, idx) => ( + {calendar.map(({ date, title, calendarLink }, idx) => (
-

{date}

+

+ {new Intl.DateTimeFormat(locale, { + month: "long", + day: "2-digit", + year: "numeric", + hour: "numeric", + minute: "numeric", + }).format(new Date(date))} +

- + Add to calendar +
))} From 9947bbe5feea97bdf8bb9f72f934d6089b3d2290 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:45:54 -0700 Subject: [PATCH 044/273] feat: Event fallback image, see all button --- public/images/event-fallback.svg | 32 ++++++++++++++++++++++++++++++++ src/pages/index.tsx | 20 ++++++++++++++++---- 2 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 public/images/event-fallback.svg diff --git a/public/images/event-fallback.svg b/public/images/event-fallback.svg new file mode 100644 index 00000000000..3e03c83f6a0 --- /dev/null +++ b/public/images/event-fallback.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 0d4189cbae1..5e9aedab9b1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -56,6 +56,7 @@ import { fetchNodes } from "@/lib/api/fetchNodes" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" +import EventFallback from "@/public/images/event-fallback.svg" import buildersImage from "@/public/images/heroes/developers-hub-hero.jpg" import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import learnImage from "@/public/images/heroes/learn-hub-hero.png" @@ -499,6 +500,8 @@ const HomePage = ({ href={href} className="md:w-1/3 md:max-w-128" key={title} + target="_blank" + rel="noopener noreferrer" > - - {imageUrl && ( + + {imageUrl ? ( // eslint-disable-next-line @next/next/no-img-element + ) : ( + )} - {/* TODO: Handle event image */}
@@ -544,6 +548,14 @@ const HomePage = ({ )}
+
+ + See all events + +
{/* Temporary coming soon section template */} {comingSoon.map((item) => ( From df69cc226815a7b8ce31e9aaed1ddeaa16b0efeb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:57:53 -0700 Subject: [PATCH 045/273] theme: add "lg" button size large text, larger padding, larger border radius; for initial use on homepage --- tailwind/ui/buttons/Button.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/tailwind/ui/buttons/Button.tsx b/tailwind/ui/buttons/Button.tsx index 79d9eec6da9..99d19962ae1 100644 --- a/tailwind/ui/buttons/Button.tsx +++ b/tailwind/ui/buttons/Button.tsx @@ -21,6 +21,7 @@ const buttonVariants = cva( link: "border-transparent font-bold underline py-0 px-1 active:text-primary", }, size: { + lg: "text-lg py-3 px-8 [&>svg]:text-2xl rounded-lg", md: "min-h-10.5 px-4 py-2 [&>svg]:text-2xl", sm: "text-xs min-h-[31px] py-1.5 px-2 [&>svg]:text-md", }, From 40bf4b7a14dad9f555788f2ef2aa1a469c673290 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:59:30 -0700 Subject: [PATCH 046/273] refactor: use button size "lg" on homepage --- src/pages/index.tsx | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5e9aedab9b1..63b7142a05d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -312,10 +312,7 @@ const HomePage = ({ ))}
- + Other topics
@@ -340,13 +337,15 @@ const HomePage = ({
Builder's Portal Documentation @@ -411,25 +410,24 @@ const HomePage = ({ Ethereum.org community is the perfect place to start and learn.

-
+
- + More on ethereum.org
@@ -551,7 +549,8 @@ const HomePage = ({
See all events From 9a750cc69fccb874320351743885ac9fa79b9035 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:46:59 -0700 Subject: [PATCH 047/273] feat: add Join ethereum.org section --- src/components/icons/layer-2.svg | 6 +++ src/pages/index.tsx | 77 +++++++++++++++++++++++++++----- src/styles/global.css | 31 ++++++------- tailwind.config.ts | 3 +- 4 files changed, 88 insertions(+), 29 deletions(-) create mode 100644 src/components/icons/layer-2.svg diff --git a/src/components/icons/layer-2.svg b/src/components/icons/layer-2.svg new file mode 100644 index 00000000000..f32bf2d5d96 --- /dev/null +++ b/src/components/icons/layer-2.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 63b7142a05d..6fdf664695d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -3,7 +3,7 @@ import type { GetStaticProps, InferGetStaticPropsType } from "next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { FaDiscord, FaGithub } from "react-icons/fa" +import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa" import { MdChevronRight } from "react-icons/md" import { Flex, Skeleton } from "@chakra-ui/react" @@ -20,6 +20,7 @@ import BlockHeap from "@/components/icons/block-heap.svg" import Calendar from "@/components/icons/calendar.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" +import Layer2Icon from "@/components/icons/layer-2.svg" import ChooseNetworkIcon from "@/components/icons/network-layers.svg" import TryAppsIcon from "@/components/icons/phone-homescreen.svg" import RoadmapSign from "@/components/icons/roadmap-sign.svg" @@ -219,10 +220,7 @@ const HomePage = ({ }, ] - const comingSoon = [ - { title: "Ethereum news", tag: "" }, - { title: "Join ethereum.org", tag: "" }, - ] + const comingSoon = [{ title: "Ethereum news", tag: "" }] const upcomingEvents = events .sort( @@ -438,7 +436,7 @@ const HomePage = ({ key={title} className={cn( "flex flex-col justify-between gap-6 border-t px-6 py-4 xl:flex-row", - idx === 0 && "bg-accent-gradient" + idx === 0 && "bg-accent-gradient-a" )} >
+ {/* Temporary coming soon section template */} + {comingSoon.map((item) => ( + + ))} +

We have many community events scheduled around the globe

@@ -517,7 +520,7 @@ const HomePage = ({ className="max-w-full object-cover object-center" /> ) : ( - + )} @@ -556,10 +559,62 @@ const HomePage = ({
- {/* Temporary coming soon section template */} - {comingSoon.map((item) => ( - - ))} + +
+
+

Join ethereum.org

+

+ This website is open source with hundreds of community + contributors. You can propose edits to any of the content on this + site. +

+
+ {/* TODO: Fix icon sizing, fix button/icon layout on mobile */} +
+ +

+ Find out all the different ways you can help ethereum.org grow + and be better. +

+
+ +

+ Contribute to code, content, articles etc. +

+
+ +

+ To ask questions, coordinate contribution and join community + calls. +

+
+ +

+ To keep up with our updates and important news. +

+
+
+
) diff --git a/src/styles/global.css b/src/styles/global.css index 301acb869f5..d126a4a7727 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -124,18 +124,17 @@ --tooltip-shadow: rgba(0, 0, 0, 0.24); --switch-background: var(--gray-300); --hub-hero-content-bg: rgba(255, 255, 255, 0.8); - --bg-main-gradient: linear-gradient( - 102.7deg, - rgba(185, 185, 241, 0.2) 0%, - rgba(84, 132, 234, 0.2) 51.56%, - rgba(58, 142, 137, 0.2) 100% - ); + --bg-main-gradient: linear-gradient(102.7deg, + rgba(185, 185, 241, 0.2) 0%, + rgba(84, 132, 234, 0.2) 51.56%, + rgba(58, 142, 137, 0.2) 100%); --table-box-shadow: 0 14px 66px rgba(0, 0, 0, 0.07), 0 10px 17px rgba(0, 0, 0, 0.03), 0 4px 7px rgba(0, 0, 0, 0.05); --table-item-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); --primary-highlight-gradient: linear-gradient(180deg, rgba(167, 121, 226, 0.05) 0%, rgba(167, 121, 226, 0.00) 100%); - --accept-gradient: linear-gradient(0deg, rgba(185, 185, 241, 0.24) 0%, rgba(84, 132, 234, 0.08) 100%); + --accent-gradient-a: linear-gradient(0deg, rgba(185, 185, 241, 0.24) 0%, rgba(84, 132, 234, 0.08) 100%); + --accent-gradient-b: radial-gradient(127.67% 82.36% at 50% -30.36%, rgba(201, 179, 245, 0.16)0%, rgba(201, 179, 245, 0.48)33%, rgba(136, 170, 241, 0.16)66%, rgba(255, 255, 255, 0.00)100%) } [data-theme="dark"] { @@ -181,12 +180,10 @@ --tooltip-shadow: rgba(255, 255, 255, 0.24); --switch-background: rgba(255, 255, 255, 0.24); --hub-hero-content-bg: rgba(34, 34, 34, 0.8); - --bg-main-gradient: linear-gradient( - 102.7deg, - rgba(185, 185, 241, 0.2) 0%, - rgba(84, 132, 234, 0.2) 51.56%, - rgba(58, 142, 137, 0.2) 100% - ); + --bg-main-gradient: linear-gradient(102.7deg, + rgba(185, 185, 241, 0.2) 0%, + rgba(84, 132, 234, 0.2) 51.56%, + rgba(58, 142, 137, 0.2) 100%); --table-box-shadow: 0 14px 66px hsla(0, 0%, 96.1%, 0.07), 0 10px 17px hsla(0, 0%, 96.1%, 0.03), 0 4px 7px hsla(0, 0%, 96.1%, 0.05); --table-item-box-shadow: 0 1px 1px hsla(0, 0%, 100%, 0.1); @@ -249,8 +246,8 @@ li { margin-bottom: calc(1.45rem / 2); - & > ol, - & > ul { + &>ol, + &>ul { margin-inline-start: 1.45rem; margin-block: calc(1.45rem / 2); margin-top: calc(1.45rem / 2); @@ -260,7 +257,7 @@ @apply last:mb-0; } - & > p { + &>p { margin-bottom: calc(1.45rem / 2); } } @@ -271,4 +268,4 @@ samp { @apply font-monospace text-base leading-base; } -} +} \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts index 9e184204d6a..193f939d0df 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -90,7 +90,8 @@ const config = { backgroundImage: { "bg-main-gradient": "var(--bg-main-gradient)", "primary-highlight-gradient": "var(--primary-highlight-gradient)", - "accent-gradient": "var(--accept-gradient)", + "accent-gradient-a": "var(--accent-gradient-a)", + "accent-gradient-b": "var(--accent-gradient-b)", }, boxShadow: { "table-box": "var(--table-box-shadow)", From 80ee0053e28c74764e0415d9c47bc71c27698cd9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 2 Aug 2024 18:04:30 -0700 Subject: [PATCH 048/273] build: yarn add -D xml2js @types/xml2js --- package.json | 4 +++- yarn.lock | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d3be73046e..75ee501360f 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ "@types/node": "^20.4.2", "@types/react": "18.2.57", "@types/react-dom": "18.2.19", + "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/parser": "^6.19.0", "autoprefixer": "^10.4.19", @@ -122,7 +123,8 @@ "typescript": "^5.5.2", "unified": "^10.0.0", "unist-util-visit": "^5.0.0", - "usehooks-ts": "^3.1.0" + "usehooks-ts": "^3.1.0", + "xml2js": "^0.6.2" }, "resolutions": { "jackspeak": "2.1.1", diff --git a/yarn.lock b/yarn.lock index 4790756573b..c742f27bdfb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5466,6 +5466,13 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== +"@types/xml2js@^0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.14.tgz#5d462a2a7330345e2309c6b549a183a376de8f9a" + integrity sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^6.19.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" @@ -12959,6 +12966,11 @@ sass-loader@^12.4.0: klona "^2.0.4" neo-async "^2.6.2" +sax@>=0.6.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + scheduler@^0.23.0: version "0.23.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" @@ -14707,6 +14719,19 @@ ws@^8.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +xml2js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" + integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From fddb3dd0979f3946584503a532b43008356a0367 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 2 Aug 2024 18:05:47 -0700 Subject: [PATCH 049/273] feat: add fetchRSSDisplay with types/constants --- src/lib/api/fetchRSSDisplay.ts | 43 +++++++++++++++++++++++++++++++ src/lib/constants.ts | 7 +++++ src/lib/types.ts | 47 ++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 src/lib/api/fetchRSSDisplay.ts diff --git a/src/lib/api/fetchRSSDisplay.ts b/src/lib/api/fetchRSSDisplay.ts new file mode 100644 index 00000000000..08615e983d8 --- /dev/null +++ b/src/lib/api/fetchRSSDisplay.ts @@ -0,0 +1,43 @@ +import { parseString } from "xml2js" + +import { RSS_DISPLAY_COUNT, XML_FEEDS } from "../constants" +import type { RSSChannel, RSSItem } from "../types" + +export const fetchRSSDisplay = async () => { + const parsedRssItems: RSSItem[] = [] + + await Promise.all( + XML_FEEDS.map(async (url) => { + const response = await fetch(url) + const xml = await response.text() + + parseString(xml, (err, result) => { + if (err) { + console.error(err) + return + } + const mainChannel: RSSChannel = result.rss.channel[0] + const source = mainChannel.title[0] + mainChannel.item.forEach(({ pubDate, title, link, description }) => { + const item = { + pubDate: pubDate[0], + title: title[0], + link: link[0], + content: description[0], + source, + } as RSSItem + + parsedRssItems.push(item) + }) + }) + }) + ) + + const sortedRssItems = parsedRssItems.sort( + (a, b) => new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime() + ) + + const rssItemsForDisplay = sortedRssItems.slice(0, RSS_DISPLAY_COUNT) + + return rssItemsForDisplay +} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 387c7a1e6f4..2db13d1c260 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -156,3 +156,10 @@ export const DESKTOP_LANGUAGE_BUTTON_NAME = "desktop-language-button" // Codeblock export const LINES_BEFORE_COLLAPSABLE = 8 + +// RSS Feeds +export const RSS_DISPLAY_COUNT = 3 +export const XML_FEEDS = [ + "https://vitalik.eth.limo/feed.xml", + "https://blog.ethereum.org/en/feed.xml", +] diff --git a/src/lib/types.ts b/src/lib/types.ts index 2e882116c85..2a10ef06b43 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -742,3 +742,50 @@ export type GHLabel = { name: string color: string } + +/** + * RSS Feed handling + */ +export type RSSItem = { + pubDate: string + title: string + source: string + content: string + link: string +} + +export type RSSChannel = { + title: string[] + link: string[] + description: string[] + lastBuildDate: string[] + docs: string[] + generator: string[] + image: { + url: string[] + title: string[] + link: string[] + }[] + copyright: string[] + item: { + title: string[] + link: string[] + guid: string[] + pubDate: string[] + description: string[] + category: string[] + enclosure: { + $: { + url: string[] + length: string[] + type: string[] + } + }[] + }[] +} + +export type RSSResult = { + rss: { + channel: RSSChannel[] + } +} From 4af341d6baa972b58ac95e0bd64efe3f4e7529a7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 2 Aug 2024 18:07:39 -0700 Subject: [PATCH 050/273] init: RSS feed for homepage --- src/pages/index.tsx | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6fdf664695d..979cc63d597 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -7,7 +7,7 @@ import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa" import { MdChevronRight } from "react-icons/md" import { Flex, Skeleton } from "@chakra-ui/react" -import type { AllMetricData, BasePageProps, Lang } from "@/lib/types" +import type { AllMetricData, BasePageProps, Lang, RSSItem } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" @@ -54,6 +54,7 @@ import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" import { fetchNodes } from "@/lib/api/fetchNodes" +import { fetchRSSDisplay } from "@/lib/api/fetchRSSDisplay" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" @@ -73,6 +74,7 @@ const cachedFetchTxCount = runOnlyOnce(fetchTxCount) type Props = BasePageProps & { communityEvents: CommunityEventsReturnType metricResults: AllMetricData + rssItems: RSSItem[] } export const getStaticProps = (async ({ locale }) => { @@ -98,6 +100,9 @@ export const getStaticProps = (async ({ locale }) => { lastDeployDate ) + // load RSS feed items + const rssItems = await fetchRSSDisplay() + return { props: { ...(await serverSideTranslations(locale!, requiredNamespaces)), @@ -105,6 +110,7 @@ export const getStaticProps = (async ({ locale }) => { contentNotTranslated, lastDeployLocaleTimestamp, metricResults, + rssItems, }, revalidate: BASE_TIME_UNIT * 24, } @@ -113,6 +119,7 @@ export const getStaticProps = (async ({ locale }) => { const HomePage = ({ communityEvents, metricResults, + rssItems, }: InferGetStaticPropsType) => { const { t } = useTranslation(["common", "page-index"]) const { locale, asPath } = useRouter() @@ -220,8 +227,6 @@ const HomePage = ({ }, ] - const comingSoon = [{ title: "Ethereum news", tag: "" }] - const upcomingEvents = events .sort( (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() @@ -477,10 +482,33 @@ const HomePage = ({ {/* TODO: News sub-section */} - {/* Temporary coming soon section template */} - {comingSoon.map((item) => ( - - ))} + +

The latest blog posts and updates from the community

+
+

We have many community events scheduled around the globe

From 9d224e945710538c91614b4c996aaaf98c44a36d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 4 Aug 2024 19:30:21 -0700 Subject: [PATCH 051/273] theme: add sec/tert/quat color arrays --- src/pages/index.tsx | 12 ++++++------ src/styles/global.css | 36 +++++++++++++++++++++++++++++++++--- tailwind.config.ts | 12 ++++++++---- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 979cc63d597..70c9da393e6 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -181,21 +181,21 @@ const HomePage = ({ description: "The currency of Ethereum", href: "/get-eth/", Svg: EthTokenIcon, - colorClass: "text-accent-a", + colorClass: "text-secondary", }, { label: "Choose a network", description: "Enjoy minimal fees", href: "/layer-2/", // TODO: Update with new networks page when ready Svg: ChooseNetworkIcon, - colorClass: "text-accent-b", + colorClass: "text-tertiary", }, { label: "Try apps", description: "See what Ethereum can do", href: "/dapps/", Svg: TryAppsIcon, - colorClass: "text-accent-c", + colorClass: "text-quaternary", }, ] @@ -603,7 +603,7 @@ const HomePage = ({ Svg={Layer2Icon} label="How to contribute" href="/contributing/" - className="text-accent-c" + className="text-quaternary" >

Find out all the different ways you can help ethereum.org grow @@ -614,7 +614,7 @@ const HomePage = ({ Svg={FaGithub} label="GitHub" href={GITHUB_REPO_URL} - className="text-accent-a" + className="text-secondary" >

Contribute to code, content, articles etc. @@ -635,7 +635,7 @@ const HomePage = ({ Svg={FaTwitter} label="Twitter" href="https://x.com/EthDotOrg" - className="text-accent-b" + className="text-tertiary" >

To keep up with our updates and important news. diff --git a/src/styles/global.css b/src/styles/global.css index d126a4a7727..7f0fcd07a6e 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -44,6 +44,36 @@ --blue-800: #000066; --blue-900: #000029; + --pink-100: #FDE7F3; + --pink-200: #FBCFEB; + --pink-300: #EE8CC3; + --pink-400: #EE58AB; + --pink-500: #F53FA1; + --pink-600: #E51D7F; /* Light: secondary */ + --pink-700: #C70F63; + --pink-800: #891247; + --pink-900: #38212E; + + --blue-100: #E8F1FF; + --blue-200: #CADFFB; + --blue-300: #88AAF1; + --blue-400: #6995F7; + --blue-500: #4473EF; + --blue-600: #3C4CEB; /* Light: tertiary */ + --blue-700: #2B36A8; + --blue-800: #232F71; + --blue-900: #1B273A; + + --green-100: #E3F7F5; + --green-200: #B8FAF6; + --green-300: #80EBE1; + --green-400: #50CEC1; + --green-500: #1AA99E; + --green-600: #29948F; /* Light: quaternary */ + --green-700: #1E6766; + --green-800: #1C4545; + --green-900: #1F312F; + --orange-50: #fff3ed; --orange-100: #ffe5d6; --orange-200: #ffcbad; @@ -93,9 +123,9 @@ --background: white; --background-highlight: var(--gray-100); - --accent-a: #C32E8A; - --accent-b: #3C4CEB; - --accent-c: #29948F; + --secondary: var(--pink-600); /* #c32e8a; */ + --tertiary: var(--blue-600); + --quaternary: var(--green-600); --disabled: var(--gray-400); diff --git a/tailwind.config.ts b/tailwind.config.ts index 193f939d0df..147eb9e4dae 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -49,10 +49,14 @@ const config = { dark: "var(--primary-dark)", pressed: "var(--primary-pressed)", }, - accent: { - a: "var(--accent-a)", - b: "var(--accent-b)", - c: "var(--accent-c)", + secondary: { + DEFAULT: "var(--secondary)", + }, + tertiary: { + DEFAULT: "var(--tertiary)", + }, + quaternary: { + DEFAULT: "var(--quaternary)", }, body: { DEFAULT: "var(--body)", From 6bff04aef2280073cdaf538bb90b3a22d5ee70b8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 4 Aug 2024 19:45:53 -0700 Subject: [PATCH 052/273] init: homepage bento box template --- src/pages/index.tsx | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 70c9da393e6..573a50f122e 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -269,10 +269,40 @@ const HomePage = ({ ))}

- + 👷‍♀️🚧🔜 +
+
+
+ Use Cases +
+

+ A new way to use the internet +

+
+
+

Crypto without volatility

+
+
+

A fairer financial system

+
+
+

Innovative apps

+
+
+

The network of networks

+
+
+

The internet of assets

+
+
+ Date: Mon, 5 Aug 2024 16:29:16 -0700 Subject: [PATCH 053/273] refactor: colors.css for foundational palettes --- src/styles/colors.css | 82 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/styles/colors.css diff --git a/src/styles/colors.css b/src/styles/colors.css new file mode 100644 index 00000000000..1baa20355e5 --- /dev/null +++ b/src/styles/colors.css @@ -0,0 +1,82 @@ +@tailwind base; + +/* FOUNDATIONAL COLOR PALETTE DECLARATIONS */ + +@layer base { + :root { + --white: #ffffff; + --gray-100: #f7f7f7; + --gray-200: #e7e7e7; + --gray-300: #c8c8c8; + --gray-400: #8c8c8c; + --gray-500: #616161; + --gray-600: #333333; + --gray-700: #222222; + --gray-800: #1b1b1b; + --gray-900: #141414; + --black: #000000; + + --purple-100: #e2d3fb; + --purple-200: #d1baf7; + --purple-300: #c0a1f3; + --purple-400: #af88ef; + --purple-500: #8558e9; + --purple-600: #6c24df; + --purple-700: #561bb5; + --purple-800: #41128b; + --purple-900: #2b0961; + + --pink-100: #fde7f3; + --pink-200: #fbcfeb; + --pink-300: #ee8cc3; + --pink-400: #ee58ab; + --pink-500: #f53fa1; + --pink-600: #e51d7f; + --pink-700: #c70f63; + --pink-800: #891247; + --pink-900: #38212e; + + --blue-100: #e8f1ff; + --blue-200: #cadffb; + --blue-300: #88aaf1; + --blue-400: #6995f7; + --blue-500: #4473ef; + --blue-600: #3c4ceb; + --blue-700: #2b36a8; + --blue-800: #232f71; + --blue-900: #1b273a; + + --cyan-100: #e3f7f5; + --cyan-200: #b8faf6; + --cyan-300: #80ebe1; + --cyan-400: #50cec1; + --cyan-500: #1aa99e; + --cyan-600: #29948f; + --cyan-700: #1e6766; + --cyan-800: #1c4545; + --cyan-900: #1f312f; + + --orange-100: #FFF0DB; + --orange-200: #FFD7A7; + --orange-300: #FEB077; + --orange-400: #FD8640; + --orange-500: #FB610E; + --orange-600: #EC4A0A; + --orange-700: #C4350A; + --orange-800: #7D2711; + --orange-900: #3A291D; + + --red-100: #f7c8c8; + --red-500: #b80000; + /* ! Deprecating 900, error.neutral */ + --red-900: #180c0c; + + --green-100: #ddf4e4; + --green-500: #0a7146; + /* ! Deprecating 900, success.neutral */ + --green-900: #0a160e; + + --yellow-200: #fff8df; + --yellow-500: #bd8400; + } +} From 7a2a14029e1362e0599e21b2b55802bf5c6109e6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:30:15 -0700 Subject: [PATCH 054/273] refactor: semantic-tokens.css for css theme tokens --- src/styles/semantic-tokens.css | 83 ++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/styles/semantic-tokens.css diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css new file mode 100644 index 00000000000..3ff3d46ad16 --- /dev/null +++ b/src/styles/semantic-tokens.css @@ -0,0 +1,83 @@ +@tailwind base; + +/* SEMANTIC TOKEN DECLARATIONS: Abstracted from color palettes for theming */ + +/** +* Color palette semantic breakdown ([brackets] denote dark mode): +* +* 100: low-contrast +* 200: [high-contrast] +* 300: [hover] +* 400: [DEFAULT] +* 500: neutral, [neutral] +* 600: DEFAULT +* 700: hover +* 800: high-contrast +* 900: [low-contrast] +*/ + +@layer base { + /* Light mode (default) token declarations */ + :root { + --body: var(--gray-800); + --body-medium: var(--gray-500); + --body-light: var(--gray-200); + + --background: white; + --background-highlight: var(--gray-100); + + --primary: var(--purple-600); + --primary-hover: var(--purple-700); + --primary-low-contrast: var(--purple-100); + --primary-high-contrast: var(--purple-800); + + --accent-a: var(--blue-600); + --accent-a-hover: var(--blue-700); + --accent-a-low-contrast: var(--blue-100); + --accent-a-high-contrast: var(--blue-800); + + --accent-b: var(--pink-600); + --accent-b-hover: var(--pink-700); + --accent-b-low-contrast: var(--pink-100); + --accent-b-high-contrast: var(--pink-800); + + --accent-c: var(--cyan-600); + --accent-c-hover: var(--cyan-700); + --accent-c-low-contrast: var(--cyan-100); + --accent-c-high-contrast: var(--cyan-800); + } + + /* Dark mode token declarations */ + [data-theme="dark"] { + --body: var(--gray-100); + --body-medium: var(--gray-400); + --body-light: var(--gray-600); + + --background: var(--gray-800); + --background-highlight: var(--gray-900); + + --primary: var(--purple-400); + --primary-hover: var(--purple-300); + --primary-low-contrast: var(--purple-900); + --primary-high-contrast: var(--purple-200); + --primary-neutral: var(--purple-500); + + --accent-a: var(--blue-400); + --accent-a-hover: var(--blue-300); + --accent-a-low-contrast: var(--blue-900); + --accent-a-high-contrast: var(--blue-200); + --accent-a-neutral: var(--blue-500); + + --accent-b: var(--pink-400); + --accent-b-hover: var(--pink-300); + --accent-b-low-contrast: var(--pink-900); + --accent-b-high-contrast: var(--pink-200); + --accent-b-neutral: var(--pink-500); + + --accent-c: var(--cyan-400); + --accent-c-hover: var(--cyan-300); + --accent-c-low-contrast: var(--cyan-900); + --accent-c-high-contrast: var(--cyan-200); + --accent-c-neutral: var(--cyan-500); + } +} From 16d0d6cc9655054e4dfb05baa19ec72d765b566d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:32:39 -0700 Subject: [PATCH 055/273] refactor: rm extracted colors/tokens, use import rm some deprecated/unused tokens; linting --- src/styles/global.css | 187 ++++++++---------------------------------- 1 file changed, 36 insertions(+), 151 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index 7f0fcd07a6e..2e1fa576a1f 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -2,136 +2,22 @@ @tailwind components; @tailwind utilities; +@import "./colors.css"; +@import "./semantic-tokens.css"; + @layer base { :root { --font-inter: Inter, sans-serif; --font-mono: "IBM Plex Mono", Courier, monospace; - /* Primitive Color Scheme */ - --gray-100: #f7f7f7; - --gray-150: #f2f2f2; - --gray-200: #e7e7e7; - --gray-300: #c8c8c8; - --gray-400: #8c8c8c; - --gray-500: #616161; - --gray-600: #333333; - --gray-700: #222222; - --gray-800: #1b1b1b; - --gray-900: #141414; - - --purple-100: #f1eafa; - --purple-200: #e2d3fb; - --purple-250: #d1baf7; - --purple-300: #c0a1f3; - --purple-400: #ba96ea; - --purple-500: #af88ef; - --purple-600: #8c56d1; - --purple-700: #7b43c2; - --purple-750: #6c24df; - --purple-800: #561bb5; - --purple-850: #41128b; - --purple-900: #342b40; - --purple-950: #2b0961; - - --blue-50: #f6f6ff; - --blue-100: #ebebff; - --blue-200: #d6d6ff; - --blue-300: #9999ff; - --blue-400: #5555ff; - --blue-500: #1c1cff; - --blue-600: #000066; - --blue-700: #0000a3; - --blue-800: #000066; - --blue-900: #000029; - - --pink-100: #FDE7F3; - --pink-200: #FBCFEB; - --pink-300: #EE8CC3; - --pink-400: #EE58AB; - --pink-500: #F53FA1; - --pink-600: #E51D7F; /* Light: secondary */ - --pink-700: #C70F63; - --pink-800: #891247; - --pink-900: #38212E; - - --blue-100: #E8F1FF; - --blue-200: #CADFFB; - --blue-300: #88AAF1; - --blue-400: #6995F7; - --blue-500: #4473EF; - --blue-600: #3C4CEB; /* Light: tertiary */ - --blue-700: #2B36A8; - --blue-800: #232F71; - --blue-900: #1B273A; - - --green-100: #E3F7F5; - --green-200: #B8FAF6; - --green-300: #80EBE1; - --green-400: #50CEC1; - --green-500: #1AA99E; - --green-600: #29948F; /* Light: quaternary */ - --green-700: #1E6766; - --green-800: #1C4545; - --green-900: #1F312F; - - --orange-50: #fff3ed; - --orange-100: #ffe5d6; - --orange-200: #ffcbad; - --orange-300: #ffb18f; - --orange-400: #ff985c; - --orange-500: #ff7324; - --orange-550: #df5a0e; - --orange-600: #b84300; - --orange-700: #7a2d00; - --orange-800: #521e00; - --orange-900: #2f1000; - - --red-100: #f7c8c8; - --red-500: #b80000; - /* ! Deprecating 900 */ - --red-900: #180c0c; - - --green-100: #ddf4e4; - /* ! Deprecating 400 */ - --green-400: #48bb78; - --green-500: #0a7146; - /* ! Deprecating 900 */ - --green-900: #0a160e; - - --yellow-200: #fff8df; - --yellow-500: #bd8400; - /* Semantic Colors: Light mode */ - --primary: var(--purple-750); - --primary-high-contrast: var(--purple-850); - --primary-low-contrast: var(--purple-200); - --primary-hover: var(--purple-800); - --primary-visited: var(--purple-800); /* ! Deprecating primary-light */ --primary-light: var(--blue-100); /* ! Deprecating primary-dark */ --primary-dark: var(--blue-700); - /* ! Deprecating primary-pressed */ - --primary-pressed: var(--blue-400); - - --body: var(--gray-800); - --body-medium: var(--gray-500); - --body-light: var(--gray-200); - /* ! Deprecating body-inverted */ - --body-inverted: var(--gray-100); - - --background: white; - --background-highlight: var(--gray-100); - - --secondary: var(--pink-600); /* #c32e8a; */ - --tertiary: var(--blue-600); - --quaternary: var(--green-600); --disabled: var(--gray-400); - /* ! Deprecating neutral */ - --neutral: white; - /* Complementary Set */ --attention: var(--yellow-500); --attention-light: var(--yellow-200); @@ -154,47 +40,44 @@ --tooltip-shadow: rgba(0, 0, 0, 0.24); --switch-background: var(--gray-300); --hub-hero-content-bg: rgba(255, 255, 255, 0.8); - --bg-main-gradient: linear-gradient(102.7deg, - rgba(185, 185, 241, 0.2) 0%, - rgba(84, 132, 234, 0.2) 51.56%, - rgba(58, 142, 137, 0.2) 100%); + --bg-main-gradient: linear-gradient( + 102.7deg, + rgba(185, 185, 241, 0.2) 0%, + rgba(84, 132, 234, 0.2) 51.56%, + rgba(58, 142, 137, 0.2) 100% + ); --table-box-shadow: 0 14px 66px rgba(0, 0, 0, 0.07), 0 10px 17px rgba(0, 0, 0, 0.03), 0 4px 7px rgba(0, 0, 0, 0.05); --table-item-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - --primary-highlight-gradient: linear-gradient(180deg, rgba(167, 121, 226, 0.05) 0%, rgba(167, 121, 226, 0.00) 100%); - --accent-gradient-a: linear-gradient(0deg, rgba(185, 185, 241, 0.24) 0%, rgba(84, 132, 234, 0.08) 100%); - --accent-gradient-b: radial-gradient(127.67% 82.36% at 50% -30.36%, rgba(201, 179, 245, 0.16)0%, rgba(201, 179, 245, 0.48)33%, rgba(136, 170, 241, 0.16)66%, rgba(255, 255, 255, 0.00)100%) + --primary-highlight-gradient: linear-gradient( + 180deg, + rgba(167, 121, 226, 0.05) 0%, + rgba(167, 121, 226, 0) 100% + ); + --accent-gradient-a: linear-gradient( + 0deg, + rgba(185, 185, 241, 0.24) 0%, + rgba(84, 132, 234, 0.08) 100% + ); + --accent-gradient-b: radial-gradient( + 127.67% 82.36% at 50% -30.36%, + rgba(201, 179, 245, 0.16) 0%, + rgba(201, 179, 245, 0.48) 33%, + rgba(136, 170, 241, 0.16) 66%, + rgba(255, 255, 255, 0) 100% + ); } [data-theme="dark"] { /* Semantic Colors: Dark mode */ - --primary: var(--purple-500); - --primary-high-contrast: var(--purple-250); - --primary-low-contrast: var(--purple-950); - --primary-hover: var(--purple-300); - --primary-visited: var(--purple-300); /* ! Deprecating primary-light */ --primary-light: var(--orange-100); /* ! Deprecating primary-dark */ --primary-dark: var(--orange-800); - /* ! Deprecating primary-pressed */ - --primary-pressed: var(--orange-800); - - --body: var(--gray-100); - --body-medium: var(--gray-400); - --body-light: var(--gray-600); - /* ! Deprecating body-inverted */ - --body-inverted: var(--gray-800); - - --background: var(--gray-800); - --background-highlight: var(--gray-900); --disabled: var(--gray-500); - /* ! Deprecating neutral */ - --neutral: var(--gray-900); - /* Complementary Set */ --attention-outline: var(--attention-light); @@ -210,10 +93,12 @@ --tooltip-shadow: rgba(255, 255, 255, 0.24); --switch-background: rgba(255, 255, 255, 0.24); --hub-hero-content-bg: rgba(34, 34, 34, 0.8); - --bg-main-gradient: linear-gradient(102.7deg, - rgba(185, 185, 241, 0.2) 0%, - rgba(84, 132, 234, 0.2) 51.56%, - rgba(58, 142, 137, 0.2) 100%); + --bg-main-gradient: linear-gradient( + 102.7deg, + rgba(185, 185, 241, 0.2) 0%, + rgba(84, 132, 234, 0.2) 51.56%, + rgba(58, 142, 137, 0.2) 100% + ); --table-box-shadow: 0 14px 66px hsla(0, 0%, 96.1%, 0.07), 0 10px 17px hsla(0, 0%, 96.1%, 0.03), 0 4px 7px hsla(0, 0%, 96.1%, 0.05); --table-item-box-shadow: 0 1px 1px hsla(0, 0%, 100%, 0.1); @@ -276,8 +161,8 @@ li { margin-bottom: calc(1.45rem / 2); - &>ol, - &>ul { + & > ol, + & > ul { margin-inline-start: 1.45rem; margin-block: calc(1.45rem / 2); margin-top: calc(1.45rem / 2); @@ -287,7 +172,7 @@ @apply last:mb-0; } - &>p { + & > p { margin-bottom: calc(1.45rem / 2); } } @@ -298,4 +183,4 @@ samp { @apply font-monospace text-base leading-base; } -} \ No newline at end of file +} From fd2da24346d7d47c4b1d0c9a077ecb126abf167c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:33:27 -0700 Subject: [PATCH 056/273] refactor: tailwind color tokens --- src/pages/index.tsx | 12 ++++++------ tailwind.config.ts | 34 +++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 573a50f122e..2bd4e83f74a 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -181,21 +181,21 @@ const HomePage = ({ description: "The currency of Ethereum", href: "/get-eth/", Svg: EthTokenIcon, - colorClass: "text-secondary", + colorClass: "text-accent-a", }, { label: "Choose a network", description: "Enjoy minimal fees", href: "/layer-2/", // TODO: Update with new networks page when ready Svg: ChooseNetworkIcon, - colorClass: "text-tertiary", + colorClass: "text-accent-b", }, { label: "Try apps", description: "See what Ethereum can do", href: "/dapps/", Svg: TryAppsIcon, - colorClass: "text-quaternary", + colorClass: "text-accent-c", }, ] @@ -633,7 +633,7 @@ const HomePage = ({ Svg={Layer2Icon} label="How to contribute" href="/contributing/" - className="text-quaternary" + className="text-accent-c" >

Find out all the different ways you can help ethereum.org grow @@ -644,7 +644,7 @@ const HomePage = ({ Svg={FaGithub} label="GitHub" href={GITHUB_REPO_URL} - className="text-secondary" + className="text-accent-a" >

Contribute to code, content, articles etc. @@ -665,7 +665,7 @@ const HomePage = ({ Svg={FaTwitter} label="Twitter" href="https://x.com/EthDotOrg" - className="text-tertiary" + className="text-accent-b" >

To keep up with our updates and important news. diff --git a/tailwind.config.ts b/tailwind.config.ts index 147eb9e4dae..31e56aedf4b 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -44,19 +44,28 @@ const config = { "high-contrast": "var(--primary-high-contrast)", "low-contrast": "var(--primary-low-contrast)", hover: "var(--primary-hover)", - visited: "var(--primary-visited)", - light: "var(--primary-light)", - dark: "var(--primary-dark)", - pressed: "var(--primary-pressed)", + light: "var(--primary-light)" /* TODO: Migrate/deprecate */, + dark: "var(--primary-dark)" /* TODO: Migrate/deprecate */, }, - secondary: { - DEFAULT: "var(--secondary)", - }, - tertiary: { - DEFAULT: "var(--tertiary)", - }, - quaternary: { - DEFAULT: "var(--quaternary)", + accent: { + a: { + DEFAULT: "var(--accent-a)", + "high-contrast": "var(--accent-a-high-contrast)", + "low-contrast": "var(--accent-a-low-contrast)", + hover: "var(--accent-a-hover)", + }, + b: { + DEFAULT: "var(--accent-b)", + "high-contrast": "var(--accent-b-high-contrast)", + "low-contrast": "var(--accent-b-low-contrast)", + hover: "var(--accent-b-hover)", + }, + c: { + DEFAULT: "var(--accent-c)", + "high-contrast": "var(--accent-c-high-contrast)", + "low-contrast": "var(--accent-c-low-contrast)", + hover: "var(--accent-c-hover)", + }, }, body: { DEFAULT: "var(--body)", @@ -69,7 +78,6 @@ const config = { highlight: "var(--background-highlight)", }, disabled: "var(--disabled)", - neutral: "var(--neutral)", "tooltip-shadow": "var(--tooltip-shadow)", "switch-background": "var(--switch-background)", "hub-hero-content-bg": "var(--hub-hero-content-bg)", From c4ea9cf8dd49cd19435efcc0313ffef2418114b2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:34:10 -0700 Subject: [PATCH 057/273] deprecate: switchBackground --- src/@chakra-ui/semanticTokens.ts | 1 - src/components/Search/utils.ts | 4 ---- tailwind.config.ts | 1 - 3 files changed, 6 deletions(-) diff --git a/src/@chakra-ui/semanticTokens.ts b/src/@chakra-ui/semanticTokens.ts index 9b81ae3c21a..7ffe96fb922 100644 --- a/src/@chakra-ui/semanticTokens.ts +++ b/src/@chakra-ui/semanticTokens.ts @@ -91,7 +91,6 @@ const semanticTokens = { _light: "blackAlpha.400", _dark: "whiteAlpha.400", }, - switchBackground: { _light: "gray.300", _dark: "whiteAlpha.400" }, hubHeroContentBg: { _light: "rgba(255, 255, 255, 0.80)", _dark: "rgba(34, 34, 34, 0.80)", diff --git a/src/components/Search/utils.ts b/src/components/Search/utils.ts index 70cd1c19a99..7f734780604 100644 --- a/src/components/Search/utils.ts +++ b/src/components/Search/utils.ts @@ -160,10 +160,6 @@ export const getSearchModalStyles = (): SystemStyleObject => ({ color: "body.base", }, - ".DocSearch-Hit-Select-Icon:focus, .DocSearch-Hit-Select-Icon:hover": { - color: "switchBackground", // TODO: Remove? Causing low contrast in dark mode - }, - ".DocSearch-Footer": { "--docsearch-footer-height": "space.10", "--docsearch-logo-color": "colors.body.light", diff --git a/tailwind.config.ts b/tailwind.config.ts index 31e56aedf4b..3086d8b78d5 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -79,7 +79,6 @@ const config = { }, disabled: "var(--disabled)", "tooltip-shadow": "var(--tooltip-shadow)", - "switch-background": "var(--switch-background)", "hub-hero-content-bg": "var(--hub-hero-content-bg)", attention: { DEFAULT: "var(--attention)", From a4768c6f98545113fb31a72e61acf9992b2d077f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:34:41 -0700 Subject: [PATCH 058/273] feat: add `banner` gradient token --- src/styles/global.css | 8 ++++++++ tailwind.config.ts | 1 + 2 files changed, 9 insertions(+) diff --git a/src/styles/global.css b/src/styles/global.css index 2e1fa576a1f..6b35aa283c4 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -67,6 +67,14 @@ rgba(136, 170, 241, 0.16) 66%, rgba(255, 255, 255, 0) 100% ); + + --gradient-banner: radial-gradient( + 155% 100% at 50% 0%, + rgba(201, 179, 245, 0.16) 0%, + rgba(201, 179, 245, 0.48) 33%, + rgba(136, 170, 241, 0.16) 66%, + rgba(255, 255, 255, 0) 100% + ); } [data-theme="dark"] { diff --git a/tailwind.config.ts b/tailwind.config.ts index 3086d8b78d5..30af08e367e 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -103,6 +103,7 @@ const config = { "primary-highlight-gradient": "var(--primary-highlight-gradient)", "accent-gradient-a": "var(--accent-gradient-a)", "accent-gradient-b": "var(--accent-gradient-b)", + "gradient-banner": "var(--gradient-banner)", }, boxShadow: { "table-box": "var(--table-box-shadow)", From 00728a8f91e9c48d2116c4f6be0e00fcc1db2a80 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:33:09 -0700 Subject: [PATCH 059/273] refactor: fetchRSS --- src/lib/api/fetchRSS.ts | 51 ++++++++++++++++++++++++++++++++++ src/lib/api/fetchRSSDisplay.ts | 43 ---------------------------- 2 files changed, 51 insertions(+), 43 deletions(-) create mode 100644 src/lib/api/fetchRSS.ts delete mode 100644 src/lib/api/fetchRSSDisplay.ts diff --git a/src/lib/api/fetchRSS.ts b/src/lib/api/fetchRSS.ts new file mode 100644 index 00000000000..b05b410b0d9 --- /dev/null +++ b/src/lib/api/fetchRSS.ts @@ -0,0 +1,51 @@ +import { parseString } from "xml2js" + +import type { RSSChannel, RSSItem, RSSResult } from "../types" + +/** + * Fetches RSS feed from the specified XML URL(s). + * @param xmlUrl - The URL(s) of the XML feed to fetch. + * @returns An array of RSS items containing the publication date, title, link, and source. + */ +export const fetchRSS = async (xmlUrl: string | string[]) => { + const urls = Array.isArray(xmlUrl) ? xmlUrl : [xmlUrl] + const allItems: RSSItem[] = [] + for (const url of urls) { + const rssItems = (await fetchXml(url)) as RSSResult + const mainChannel: RSSChannel = rssItems.rss.channel[0] + const source = mainChannel.title[0] + const parsedRssItems = mainChannel.item.map( + ({ pubDate, title, link, enclosure }) => + ({ + pubDate: pubDate[0], + title: title[0], + link: link[0], + imgSrc: enclosure ? enclosure[0].$.url : "", + source, + sourceFeedUrl: url, + }) as RSSItem + ) + allItems.push(...parsedRssItems) + } + return allItems as RSSItem[] +} + +/** + * Fetches XML data from the specified URL. + * Parses XML to JSON with parseString (xml2js package) + * @param url - The URL to fetch the XML data from. + * @returns A promise that resolves to the parsed XML data as a JSON object. + */ +export const fetchXml = async (url: string) => { + const response = await fetch(url) + const xml = await response.text() + let returnObject: Record = {} + parseString(xml, (err, result) => { + if (err) { + console.error(err) + return + } + returnObject = result + }) + return returnObject +} diff --git a/src/lib/api/fetchRSSDisplay.ts b/src/lib/api/fetchRSSDisplay.ts deleted file mode 100644 index 08615e983d8..00000000000 --- a/src/lib/api/fetchRSSDisplay.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { parseString } from "xml2js" - -import { RSS_DISPLAY_COUNT, XML_FEEDS } from "../constants" -import type { RSSChannel, RSSItem } from "../types" - -export const fetchRSSDisplay = async () => { - const parsedRssItems: RSSItem[] = [] - - await Promise.all( - XML_FEEDS.map(async (url) => { - const response = await fetch(url) - const xml = await response.text() - - parseString(xml, (err, result) => { - if (err) { - console.error(err) - return - } - const mainChannel: RSSChannel = result.rss.channel[0] - const source = mainChannel.title[0] - mainChannel.item.forEach(({ pubDate, title, link, description }) => { - const item = { - pubDate: pubDate[0], - title: title[0], - link: link[0], - content: description[0], - source, - } as RSSItem - - parsedRssItems.push(item) - }) - }) - }) - ) - - const sortedRssItems = parsedRssItems.sort( - (a, b) => new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime() - ) - - const rssItemsForDisplay = sortedRssItems.slice(0, RSS_DISPLAY_COUNT) - - return rssItemsForDisplay -} From afdc66826658af776a27ae02f0cce2efe1ea7110 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:33:34 -0700 Subject: [PATCH 060/273] create: rss helper functions --- src/lib/utils/rss.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/lib/utils/rss.ts diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts new file mode 100644 index 00000000000..b489ba334fa --- /dev/null +++ b/src/lib/utils/rss.ts @@ -0,0 +1,19 @@ +import { RSS_DISPLAY_COUNT, VITALIK_BLOG } from "../constants" +import type { RSSItem } from "../types" + +export const sortByPubDate = (items: RSSItem[]) => + items.sort( + (a, b) => new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime() + ) + +export const addVitalikBanner = (rssItems: RSSItem[]) => + rssItems.map((item) => { + if (item.sourceFeedUrl !== VITALIK_BLOG) return item + return { ...item, imgSrc: "/images/vitalik-blog-banner.png" } + }) + +export const polishRSSList = (...items: RSSItem[][]) => { + const allItems = items.flat() + const readyForSorting = addVitalikBanner(allItems) + return sortByPubDate(readyForSorting).slice(0, RSS_DISPLAY_COUNT) +} From 8acc906e504efb274783347c68d5d22ccf642515 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:34:09 -0700 Subject: [PATCH 061/273] chore: update constants, types, assets add fallback banner for Vitalik's blog --- public/images/vitalik-blog-banner.png | Bin 0 -> 13901 bytes src/lib/constants.ts | 7 +++---- src/lib/types.ts | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 public/images/vitalik-blog-banner.png diff --git a/public/images/vitalik-blog-banner.png b/public/images/vitalik-blog-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..938eb13eb469d2d7146cd909486bccb37b496b20 GIT binary patch literal 13901 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 LN)q)zlhFSGw;SPc literal 0 HcmV?d00001 diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 2db13d1c260..3a5ea917720 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -159,7 +159,6 @@ export const LINES_BEFORE_COLLAPSABLE = 8 // RSS Feeds export const RSS_DISPLAY_COUNT = 3 -export const XML_FEEDS = [ - "https://vitalik.eth.limo/feed.xml", - "https://blog.ethereum.org/en/feed.xml", -] +export const VITALIK_BLOG = "https://vitalik.eth.limo/feed.xml" +export const EF_BLOG = "https://blog.ethereum.org/en/feed.xml" +export const XML_FEEDS = [VITALIK_BLOG, EF_BLOG] diff --git a/src/lib/types.ts b/src/lib/types.ts index 2a10ef06b43..56921edcefd 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -750,8 +750,9 @@ export type RSSItem = { pubDate: string title: string source: string - content: string link: string + sourceFeedUrl: string + imgSrc?: string } export type RSSChannel = { From 559895e305602f789b7afccfb40f639c096aceba Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 18:35:21 -0700 Subject: [PATCH 062/273] refactor: use fetchRSS with helpers, switch HomeSection to h3 --- src/pages/index.tsx | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 979cc63d597..6615af64331 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -35,6 +35,7 @@ import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" import { existsNamespace } from "@/lib/utils/existsNamespace" import { getLastDeployDate } from "@/lib/utils/getLastDeployDate" +import { polishRSSList } from "@/lib/utils/rss" import { runOnlyOnce } from "@/lib/utils/runOnlyOnce" import { getLocaleTimestamp } from "@/lib/utils/time" import { @@ -44,7 +45,7 @@ import { import events from "@/data/community-events.json" -import { BASE_TIME_UNIT, GITHUB_REPO_URL } from "@/lib/constants" +import { BASE_TIME_UNIT, GITHUB_REPO_URL, XML_FEEDS } from "@/lib/constants" import { ButtonLink } from "../../tailwind/ui/buttons/Button" @@ -54,7 +55,7 @@ import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" import { fetchNodes } from "@/lib/api/fetchNodes" -import { fetchRSSDisplay } from "@/lib/api/fetchRSSDisplay" +import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" @@ -101,7 +102,7 @@ export const getStaticProps = (async ({ locale }) => { ) // load RSS feed items - const rssItems = await fetchRSSDisplay() + const rssItems = polishRSSList(await fetchRSS(XML_FEEDS)) // TODO: Cache results return { props: { @@ -482,16 +483,28 @@ const HomePage = ({ {/* TODO: News sub-section */} - +

+

+ Ethereum news +

The latest blog posts and updates from the community

-
- {rssItems.map(({ title, link, content, source, pubDate }) => ( + - +
+

+ Ethereum events +

We have many community events scheduled around the globe

@@ -586,7 +598,7 @@ const HomePage = ({ See all events
- +
From abedbfc919807daf7530f14542eb36b3995e8aa3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 19:22:24 -0700 Subject: [PATCH 063/273] feat: add Attestant blog for rss feeds --- public/images/attestant-logo.svg | 22 +++++++++++++++++ src/lib/api/fetchAttestantPosts.ts | 38 ++++++++++++++++++++++++++++++ src/lib/types.ts | 10 ++++++++ 3 files changed, 70 insertions(+) create mode 100644 public/images/attestant-logo.svg create mode 100644 src/lib/api/fetchAttestantPosts.ts diff --git a/public/images/attestant-logo.svg b/public/images/attestant-logo.svg new file mode 100644 index 00000000000..9a6ca3dcde6 --- /dev/null +++ b/public/images/attestant-logo.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/lib/api/fetchAttestantPosts.ts b/src/lib/api/fetchAttestantPosts.ts new file mode 100644 index 00000000000..38359ea0d22 --- /dev/null +++ b/src/lib/api/fetchAttestantPosts.ts @@ -0,0 +1,38 @@ +import type { HTMLResult, RSSItem } from "../types" + +import { fetchXml } from "./fetchRSS" + +export const fetchAttestantPosts = async () => { + const BASE_URL = "https://www.attestant.io/posts/" + const htmlData = (await fetchXml(BASE_URL)) as HTMLResult + + // Extract div containing list of posts from deeply nested HTML structure + const attestantPostsContainer = + htmlData.html.body[0].div[0].div[1].div[0].div[0].div[0].div + + const attestantBlogItems: RSSItem[] = attestantPostsContainer + .map(({ a }) => { + const [ + { + $: { href }, + h4: [{ _: title }], + div: [{ _: content }, { _: pubDate }], + }, + ] = a + const { href: link } = new URL(href, BASE_URL) + return { + title, + link, + content, + source: "Attestant", + sourceFeedUrl: BASE_URL, + imgSrc: "/images/attestant-logo.svg", + pubDate, + } + }) + .sort( + (a: RSSItem, b: RSSItem) => + new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime() + ) + return attestantBlogItems +} diff --git a/src/lib/types.ts b/src/lib/types.ts index 56921edcefd..491b578a6d2 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -790,3 +790,13 @@ export type RSSResult = { channel: RSSChannel[] } } + +type NestedDivs = { + div: NestedDivs[] +} + +export type HTMLResult = { + html: { + body: Record[] + } +} From 9923d737f195657e89fa808aa53ae8c972d872a8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 19:22:41 -0700 Subject: [PATCH 064/273] feat: activate attestant blog, cache rss results --- src/pages/index.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6615af64331..0b089ce792b 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -54,6 +54,7 @@ import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistr import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" +import { fetchAttestantPosts } from "@/lib/api/fetchAttestantPosts" import { fetchNodes } from "@/lib/api/fetchNodes" import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" @@ -71,6 +72,8 @@ const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) const cachedFetchNodes = runOnlyOnce(fetchNodes) const cachedFetchTotalValueLocked = runOnlyOnce(fetchTotalValueLocked) const cachedFetchTxCount = runOnlyOnce(fetchTxCount) +const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(XML_FEEDS)) +const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) type Props = BasePageProps & { communityEvents: CommunityEventsReturnType @@ -102,7 +105,9 @@ export const getStaticProps = (async ({ locale }) => { ) // load RSS feed items - const rssItems = polishRSSList(await fetchRSS(XML_FEEDS)) // TODO: Cache results + const xmlBlogs = await cachedXmlBlogFeeds() + const attestantBlog = await cachedAttestantBlog() + const rssItems = polishRSSList(xmlBlogs, attestantBlog) return { props: { From 5dceb8dce5a284c1076dff4314eb1aa27eea0822 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 19:50:58 -0700 Subject: [PATCH 065/273] fix: event fallback image --- public/images/event-fallback.svg | 63 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/public/images/event-fallback.svg b/public/images/event-fallback.svg index 3e03c83f6a0..4f3406f3f3d 100644 --- a/public/images/event-fallback.svg +++ b/public/images/event-fallback.svg @@ -1,32 +1,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9803d2374555af88e39af7d37c1772d82453ff09 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 20:36:40 -0700 Subject: [PATCH 066/273] feat: add accent gradients --- src/pages/index.tsx | 20 ++++++++-------- src/styles/colors.css | 16 +++++++++++++ src/styles/semantic-tokens.css | 44 ++++++++++++++++++++++++++++++++++ tailwind.config.ts | 4 ++++ 4 files changed, 74 insertions(+), 10 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 686e1354a90..05a0239b781 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -292,20 +292,20 @@ const HomePage = ({ A new way to use the internet

-
-

Crypto without volatility

+
+

Crypto without volatility

-
-

A fairer financial system

+
+

A fairer financial system

-
-

Innovative apps

+
+

Innovative apps

-
-

The network of networks

+
+

The network of networks

-
-

The internet of assets

+
+

The internet of assets

diff --git a/src/styles/colors.css b/src/styles/colors.css index 1baa20355e5..c888cd6929b 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -25,6 +25,10 @@ --purple-700: #561bb5; --purple-800: #41128b; --purple-900: #2b0961; + --purple-50-rgb: 241, 234, 250; /* #f1eaf9 */ + --purple-100-rgb: 226, 211, 251; /* #e2d3fb */ + --purple-800-rgb: 65, 18, 139; /* #41128b */ + --purple-900-rgb: 43, 9, 97; /* #2b0961 */ --pink-100: #fde7f3; --pink-200: #fbcfeb; @@ -35,6 +39,10 @@ --pink-700: #c70f63; --pink-800: #891247; --pink-900: #38212e; + --pink-100-rgb: 253, 231, 243; /* #fde7f3 */ + --pink-200-rgb: 251, 207, 235; /* #fbcfeb */ + --pink-800-rgb: 137, 18, 71; /* #891247 */ + --pink-900-rgb: 56, 33, 46; /* #38212e */ --blue-100: #e8f1ff; --blue-200: #cadffb; @@ -45,6 +53,10 @@ --blue-700: #2b36a8; --blue-800: #232f71; --blue-900: #1b273a; + --blue-100-rgb: 232, 241, 255; /* #e8f1ff */ + --blue-200-rgb: 202, 223, 251; /* #cadffb */ + --blue-800-rgb: 35, 47, 113; /* #232f71 */ + --blue-900-rgb: 27, 39, 58; /* #1b273a */ --cyan-100: #e3f7f5; --cyan-200: #b8faf6; @@ -55,6 +67,10 @@ --cyan-700: #1e6766; --cyan-800: #1c4545; --cyan-900: #1f312f; + --cyan-100-rgb: 227, 247, 245; /* #e3f7f5 */ + --cyan-200-rgb: 184, 250, 246; /* #b8faf6 */ + --cyan-800-rgb: 28, 69, 69; /* #1c4545 */ + --cyan-900-rgb: 31, 49, 47; /* #1f312f */ --orange-100: #FFF0DB; --orange-200: #FFD7A7; diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 3ff3d46ad16..4ef8a977ebf 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -45,6 +45,28 @@ --accent-c-hover: var(--cyan-700); --accent-c-low-contrast: var(--cyan-100); --accent-c-high-contrast: var(--cyan-800); + + /* Gradients */ + --gradient-primary: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--purple-50-rgb), 0.32) 0%, + rgba(var(--purple-100-rgb), 0.56) 100% + ); + --gradient-accent-a: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--blue-100-rgb), 0.32) 0%, + rgba(var(--blue-200-rgb), 0.56) 100% + ); + --gradient-accent-b: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--pink-100-rgb), 0.32) 0%, + rgba(var(--pink-200-rgb), 0.48) 100% + ); + --gradient-accent-c: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--cyan-100-rgb), 0.32) 0%, + rgba(var(--cyan-200-rgb), 0.48) 100% + ); } /* Dark mode token declarations */ @@ -79,5 +101,27 @@ --accent-c-low-contrast: var(--cyan-900); --accent-c-high-contrast: var(--cyan-200); --accent-c-neutral: var(--cyan-500); + + /* Gradients */ + --gradient-primary: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--purple-800-rgb), 0.32) 0%, + rgba(var(--purple-900-rgb), 0.56) 100% + ); + --gradient-accent-a: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--blue-800-rgb), 0.32) 0%, + rgba(var(--blue-900-rgb), 0.56) 100% + ); + --gradient-accent-b: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--pink-800-rgb), 0.32) 0%, + rgba(var(--pink-900-rgb), 0.48) 100% + ); + --gradient-accent-c: radial-gradient( + 114.96% 111.8% at 100% 0%, + rgba(var(--cyan-800-rgb), 0.32) 0%, + rgba(var(--cyan-900-rgb), 0.48) 100% + ); } } diff --git a/tailwind.config.ts b/tailwind.config.ts index 30af08e367e..51c3b46051c 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -104,6 +104,10 @@ const config = { "accent-gradient-a": "var(--accent-gradient-a)", "accent-gradient-b": "var(--accent-gradient-b)", "gradient-banner": "var(--gradient-banner)", + "gradient-primary": "var(--gradient-primary)", + "gradient-accent-a": "var(--gradient-accent-a)", + "gradient-accent-b": "var(--gradient-accent-b)", + "gradient-accent-c": "var(--gradient-accent-c)", }, boxShadow: { "table-box": "var(--table-box-shadow)", From 7cc230a82895eff8278ff0b931d742b381641b64 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 5 Aug 2024 20:36:59 -0700 Subject: [PATCH 067/273] refactor: gradient-main naming, linting --- src/pages/index.tsx | 2 +- src/styles/colors.css | 18 +++++++++--------- src/styles/global.css | 4 ++-- tailwind.config.ts | 3 +-- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 05a0239b781..189e707ec9a 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -586,7 +586,7 @@ const HomePage = ({ "transition-transform duration-100 hover:scale-105 hover:transition-transform hover:duration-100" )} > - + {imageUrl ? ( // eslint-disable-next-line @next/next/no-img-element Date: Wed, 7 Aug 2024 14:28:24 -0700 Subject: [PATCH 068/273] refactor: upgrade css tokens to flexible pattern --- src/styles/colors.css | 111 ++++++++++++++------------------- src/styles/semantic-tokens.css | 16 ++--- tailwind.config.ts | 32 +++++----- 3 files changed, 72 insertions(+), 87 deletions(-) diff --git a/src/styles/colors.css b/src/styles/colors.css index de07ae21f40..eb3ee477395 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -4,73 +4,58 @@ @layer base { :root { - --white: #ffffff; - --gray-100: #f7f7f7; - --gray-200: #e7e7e7; - --gray-300: #c8c8c8; - --gray-400: #8c8c8c; - --gray-500: #616161; - --gray-600: #333333; - --gray-700: #222222; - --gray-800: #1b1b1b; - --gray-900: #141414; - --black: #000000; + --white: 255, 255, 255; /* #ffffff */ + --gray-100: 247, 247, 247; /* #f7f7f7 */ + --gray-200: 231, 231, 231; /* #e7e7e7 */ + --gray-300: 200, 200, 200; /* #c8c8c8 */ + --gray-400: 140, 140, 140; /* #8c8c8c */ + --gray-500: 97, 97, 97; /* #616161 */ + --gray-600: 51, 51, 51; /* #333333 */ + --gray-700: 34, 34, 34; /* #222222 */ + --gray-800: 27, 27, 27; /* #1b1b1b */ + --gray-900: 20, 20, 20; /* #141414 */ + --black: 0, 0, 0; /* #000000 */ - --purple-100: #e2d3fb; - --purple-200: #d1baf7; - --purple-300: #c0a1f3; - --purple-400: #af88ef; - --purple-500: #8558e9; - --purple-600: #6c24df; - --purple-700: #561bb5; - --purple-800: #41128b; - --purple-900: #2b0961; - --purple-50-rgb: 241, 234, 250; /* #f1eaf9 */ - --purple-100-rgb: 226, 211, 251; /* #e2d3fb */ - --purple-800-rgb: 65, 18, 139; /* #41128b */ - --purple-900-rgb: 43, 9, 97; /* #2b0961 */ + --purple-50: 241, 234, 250; /* #f1eaf9 */ + --purple-100: 226, 211, 251; /* #e2d3fb */ + --purple-200: 209, 186, 247; /* #d1baf7 */ + --purple-300: 192, 161, 243; /* #c0a1f3 */ + --purple-400: 175, 136, 239; /* #af88ef */ + --purple-500: 133, 88, 233; /* #8558e9 */ + --purple-600: 108, 36, 223; /* #6c24df */ + --purple-700: 86, 27, 181; /* #561bb5 */ + --purple-800: 65, 18, 139; /* #41128b */ + --purple-900: 43, 9, 97; /* #2b0961 */ - --pink-100: #fde7f3; - --pink-200: #fbcfeb; - --pink-300: #ee8cc3; - --pink-400: #ee58ab; - --pink-500: #f53fa1; - --pink-600: #e51d7f; - --pink-700: #c70f63; - --pink-800: #891247; - --pink-900: #38212e; - --pink-100-rgb: 253, 231, 243; /* #fde7f3 */ - --pink-200-rgb: 251, 207, 235; /* #fbcfeb */ - --pink-800-rgb: 137, 18, 71; /* #891247 */ - --pink-900-rgb: 56, 33, 46; /* #38212e */ + --pink-100: 253, 231, 243; /* #fde7f3 */ + --pink-200: 251, 207, 235; /* #fbcfeb */ + --pink-300: 238, 140, 195; /* #ee8cc3 */ + --pink-400: 238, 88, 171; /* #ee58ab */ + --pink-500: 245, 63, 161; /* #f53fa1 */ + --pink-600: 229, 29, 127; /* #e51d7f */ + --pink-700: 199, 15, 99; /* #c70f63 */ + --pink-800: 137, 18, 71; /* #891247 */ + --pink-900: 56, 33, 46; /* #38212e */ - --blue-100: #e8f1ff; - --blue-200: #cadffb; - --blue-300: #88aaf1; - --blue-400: #6995f7; - --blue-500: #4473ef; - --blue-600: #3c4ceb; - --blue-700: #2b36a8; - --blue-800: #232f71; - --blue-900: #1b273a; - --blue-100-rgb: 232, 241, 255; /* #e8f1ff */ - --blue-200-rgb: 202, 223, 251; /* #cadffb */ - --blue-800-rgb: 35, 47, 113; /* #232f71 */ - --blue-900-rgb: 27, 39, 58; /* #1b273a */ + --blue-100: 232, 241, 255; /* #e8f1ff */ + --blue-200: 202, 223, 251; /* #cadffb */ + --blue-300: 136, 170, 241; /* #88aaf1 */ + --blue-400: 105, 149, 247; /* #6995f7 */ + --blue-500: 68, 115, 239; /* #4473ef */ + --blue-600: 60, 76, 235; /* #3c4ceb */ + --blue-700: 43, 54, 168; /* #2b36a8 */ + --blue-800: 35, 47, 113; /* #232f71 */ + --blue-900: 27, 39, 58; /* #1b273a */ - --cyan-100: #e3f7f5; - --cyan-200: #b8faf6; - --cyan-300: #80ebe1; - --cyan-400: #50cec1; - --cyan-500: #1aa99e; - --cyan-600: #29948f; - --cyan-700: #1e6766; - --cyan-800: #1c4545; - --cyan-900: #1f312f; - --cyan-100-rgb: 227, 247, 245; /* #e3f7f5 */ - --cyan-200-rgb: 184, 250, 246; /* #b8faf6 */ - --cyan-800-rgb: 28, 69, 69; /* #1c4545 */ - --cyan-900-rgb: 31, 49, 47; /* #1f312f */ + --cyan-100: 227, 247, 245; /* #e3f7f5 */ + --cyan-200: 184, 250, 246; /* #b8faf6 */ + --cyan-300: 128, 235, 225; /* #80ebe1 */ + --cyan-400: 80, 206, 193; /* #50cec1 */ + --cyan-500: 26, 169, 158; /* #1aa99e */ + --cyan-600: 41, 148, 143; /* #29948f */ + --cyan-700: 30, 103, 102; /* #1e6766 */ + --cyan-800: 28, 69, 69; /* #1c4545 */ + --cyan-900: 31, 49, 47; /* #1f312f */ --orange-100: #fff0db; --orange-200: #ffd7a7; diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 4ef8a977ebf..72fabc5cdb4 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -49,8 +49,8 @@ /* Gradients */ --gradient-primary: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--purple-50-rgb), 0.32) 0%, - rgba(var(--purple-100-rgb), 0.56) 100% + rgba(var(--purple-50), 0.32) 0%, + rgba(var(--purple-100), 0.56) 100% ); --gradient-accent-a: radial-gradient( 114.96% 111.8% at 100% 0%, @@ -59,8 +59,8 @@ ); --gradient-accent-b: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--pink-100-rgb), 0.32) 0%, - rgba(var(--pink-200-rgb), 0.48) 100% + rgba(var(--pink-100), 0.32) 0%, + rgba(var(--pink-200), 0.48) 100% ); --gradient-accent-c: radial-gradient( 114.96% 111.8% at 100% 0%, @@ -105,8 +105,8 @@ /* Gradients */ --gradient-primary: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--purple-800-rgb), 0.32) 0%, - rgba(var(--purple-900-rgb), 0.56) 100% + rgba(var(--purple-800), 0.32) 0%, + rgba(var(--purple-900), 0.56) 100% ); --gradient-accent-a: radial-gradient( 114.96% 111.8% at 100% 0%, @@ -115,8 +115,8 @@ ); --gradient-accent-b: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--pink-800-rgb), 0.32) 0%, - rgba(var(--pink-900-rgb), 0.48) 100% + rgba(var(--pink-800), 0.32) 0%, + rgba(var(--pink-900), 0.48) 100% ); --gradient-accent-c: radial-gradient( 114.96% 111.8% at 100% 0%, diff --git a/tailwind.config.ts b/tailwind.config.ts index 5f29f2ea393..0dbcdadb764 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -40,31 +40,31 @@ const config = { }, colors: { primary: { - DEFAULT: "var(--primary)", - "high-contrast": "var(--primary-high-contrast)", - "low-contrast": "var(--primary-low-contrast)", - hover: "var(--primary-hover)", + DEFAULT: "rgb(var(--primary))", + "high-contrast": "rgb(var(--primary-high-contrast))", + "low-contrast": "rgb(var(--primary-low-contrast))", + hover: "rgb(var(--primary-hover))", light: "var(--primary-light)" /* TODO: Migrate/deprecate */, dark: "var(--primary-dark)" /* TODO: Migrate/deprecate */, }, accent: { a: { - DEFAULT: "var(--accent-a)", - "high-contrast": "var(--accent-a-high-contrast)", - "low-contrast": "var(--accent-a-low-contrast)", - hover: "var(--accent-a-hover)", + DEFAULT: "rgb(var(--accent-a))", + "high-contrast": "rgb(var(--accent-a-high-contrast))", + "low-contrast": "rgb(var(--accent-a-low-contrast))", + hover: "rgb(var(--accent-a-hover))", }, b: { - DEFAULT: "var(--accent-b)", - "high-contrast": "var(--accent-b-high-contrast)", - "low-contrast": "var(--accent-b-low-contrast)", - hover: "var(--accent-b-hover)", + DEFAULT: "rgb(var(--accent-b))", + "high-contrast": "rgb(var(--accent-b-high-contrast))", + "low-contrast": "rgb(var(--accent-b-low-contrast))", + hover: "rgb(var(--accent-b-hover))", }, c: { - DEFAULT: "var(--accent-c)", - "high-contrast": "var(--accent-c-high-contrast)", - "low-contrast": "var(--accent-c-low-contrast)", - hover: "var(--accent-c-hover)", + DEFAULT: "rgb(var(--accent-c))", + "high-contrast": "rgb(var(--accent-c-high-contrast))", + "low-contrast": "rgb(var(--accent-c-low-contrast))", + hover: "rgb(var(--accent-c-hover))", }, }, body: { From d6bdad0ef8b8c2a89d01247419175108ceb3c8bb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:57:21 -0700 Subject: [PATCH 069/273] update: theming tokens --- src/styles/semantic-tokens.css | 16 ++++++++-------- tailwind.config.ts | 11 +++++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 72fabc5cdb4..efeede2490e 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -54,8 +54,8 @@ ); --gradient-accent-a: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--blue-100-rgb), 0.32) 0%, - rgba(var(--blue-200-rgb), 0.56) 100% + rgba(var(--blue-100), 0.32) 0%, + rgba(var(--blue-200), 0.56) 100% ); --gradient-accent-b: radial-gradient( 114.96% 111.8% at 100% 0%, @@ -64,8 +64,8 @@ ); --gradient-accent-c: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--cyan-100-rgb), 0.32) 0%, - rgba(var(--cyan-200-rgb), 0.48) 100% + rgba(var(--cyan-100), 0.32) 0%, + rgba(var(--cyan-200), 0.48) 100% ); } @@ -110,8 +110,8 @@ ); --gradient-accent-a: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--blue-800-rgb), 0.32) 0%, - rgba(var(--blue-900-rgb), 0.56) 100% + rgba(var(--blue-800), 0.32) 0%, + rgba(var(--blue-900), 0.56) 100% ); --gradient-accent-b: radial-gradient( 114.96% 111.8% at 100% 0%, @@ -120,8 +120,8 @@ ); --gradient-accent-c: radial-gradient( 114.96% 111.8% at 100% 0%, - rgba(var(--cyan-800-rgb), 0.32) 0%, - rgba(var(--cyan-900-rgb), 0.48) 100% + rgba(var(--cyan-800), 0.32) 0%, + rgba(var(--cyan-900), 0.48) 100% ); } } diff --git a/tailwind.config.ts b/tailwind.config.ts index 0dbcdadb764..f234b148611 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -151,6 +151,17 @@ const config = { borderRadius: { "4xl": "2rem" /* 32px */, }, + borderColor: { + primary: "rgba(var(--primary), 0.1)", + accent: { + a: "rgba(var(--accent-a), 0.1)", + b: "rgba(var(--accent-b), 0.1)", + c: "rgba(var(--accent-c), 0.1)", + }, + }, + gridTemplateColumns: { + bento: "2rem repeat(10, 1fr) 2rem", + }, }, }, plugins: [require("tailwindcss-animate")], From 484ef2e1ccea393320919166880aca1926d48fa2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:57:40 -0700 Subject: [PATCH 070/273] feat: extract BentoBox component --- src/components/BentoBox/index.tsx | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/components/BentoBox/index.tsx diff --git a/src/components/BentoBox/index.tsx b/src/components/BentoBox/index.tsx new file mode 100644 index 00000000000..8e1f1cb7a45 --- /dev/null +++ b/src/components/BentoBox/index.tsx @@ -0,0 +1,43 @@ +import { HTMLAttributes } from "react" +import NextImage from "next/image" +import { type StaticImageData } from "next/image" +import { MdChevronRight } from "react-icons/md" + +import { cn } from "@/lib/utils/cn" + +import { ButtonLink } from "../../../tailwind/ui/buttons/Button" + +type BentoBoxProps = HTMLAttributes & { + title: string + action: string + imgSrc: StaticImageData + href: string +} + +const BentoBox = ({ + title, + children, + action, + href, + imgSrc, + className, +}: BentoBoxProps) => ( +
+
+ +
+
+

{title}

+

{children}

+ + {action} + +
+
+) + +export default BentoBox From 977f715e8694111e24efe8897c7c6b8c9d5f384c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:11:55 -0700 Subject: [PATCH 071/273] refactor: use BentoBox component, extract data --- src/pages/index.tsx | 92 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 16 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 189e707ec9a..6e0252238e7 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -10,6 +10,7 @@ import { Flex, Skeleton } from "@chakra-ui/react" import type { AllMetricData, BasePageProps, Lang, RSSItem } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" +import BentoBox from "@/components/BentoBox" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" @@ -66,6 +67,7 @@ import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import learnImage from "@/public/images/heroes/learn-hub-hero.png" import communityImage from "@/public/images/heroes/quizzes-hub-hero.png" import hero from "@/public/images/home/hero.png" +import ImpactImage from "@/public/images/impact_transparent.png" const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) @@ -139,6 +141,76 @@ const HomePage = ({ setModalOpen(true) } + const bentoBoxes: { + title: string + children: React.ReactNode + action: string + href: string + imgSrc: StaticImageData + className: string + }[] = [ + { + title: "Crypto without volatility", + children: + "Stablecoins are currencies that maintain stable value. Their price matches the U.S. dollar or other steady asset", + action: "Learn more", + href: "/stablecoins/", + imgSrc: ImpactImage, + className: cn( + "bg-gradient-primary border-primary", + "col-span-7 col-start-5 row-span-1 row-start-1" + ), + }, + { + title: "A fairer financial system", + children: + "Billions can't open bank accounts or freely use their money. Ethereum's financial system is always open and unbiased.", + action: "Explore DeFi", + href: "/defi/", + imgSrc: ImpactImage, // TODO: Replace + className: cn( + "bg-gradient-accent-c border-accent-c flex-col-reverse", + "col-span-4 col-start-2 row-span-1 row-start-2" + ), + }, + { + title: "Innovative apps", + children: + "Ethereum apps work without selling your data. Protect your privacy.", + action: "Browse apps", + href: "/dapps/", + imgSrc: ImpactImage, // TODO: Replace + className: cn( + "bg-gradient-accent-b border-accent-b flex-col", + "col-span-3 col-start-6 row-span-1 row-start-2" + ), + }, + { + title: "The network of networks", + children: + "Ethereum is the hub for blockchain innovation. The best project are built on Ethereum.", + action: "Explore benefits", + href: "/layer-2/", // TODO: Confirm + imgSrc: ImpactImage, // TODO: Replace + className: cn( + "bg-gradient-accent-a border-accent-a flex-col-reverse", + "col-span-3 col-start-9 row-span-2 row-start-2" + ), + }, + { + title: "The internet of assets", + children: + "Arts, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", + action: "More on NFTs", + href: "/nft/", + imgSrc: ImpactImage, // TODO: Replace + className: cn( + "bg-gradient-primary border-primary", + "col-span-7 col-start-2 row-span-1 row-start-3" + ), + }, + ] + const codeExamples: CodeExample[] = [ { title: t("page-index:page-index-developers-code-example-title-0"), @@ -283,7 +355,7 @@ const HomePage = ({ 👷‍♀️🚧🔜 -
+
Use Cases @@ -292,21 +364,9 @@ const HomePage = ({ A new way to use the internet
-
-

Crypto without volatility

-
-
-

A fairer financial system

-
-
-

Innovative apps

-
-
-

The network of networks

-
-
-

The internet of assets

-
+ {bentoBoxes.map((box) => ( + + ))}
Date: Thu, 8 Aug 2024 13:37:15 -0700 Subject: [PATCH 072/273] chore: add image assets --- public/images/man-and-dog-playing.png | Bin 0 -> 284407 bytes public/images/man-baby-woman.png | Bin 0 -> 246514 bytes public/images/robot-help-bar.png | Bin 0 -> 591354 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/man-and-dog-playing.png create mode 100644 public/images/man-baby-woman.png create mode 100644 public/images/robot-help-bar.png diff --git a/public/images/man-and-dog-playing.png b/public/images/man-and-dog-playing.png new file mode 100644 index 0000000000000000000000000000000000000000..14e75d2156ebca5f4d19862d1404462096951be2 GIT binary patch literal 284407 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%0D^Yg9b19dk`MzLU-57kbEySkE|J@^OSUwL{qZ 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

DLnAy1KYm-lSh7kCYagn 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�qt9?Vr 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 z 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�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≤gdRy&17)&^cieg(+QWY67Rfe8~R717^S-3 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 GGywp?T!*^= literal 0 HcmV?d00001 diff --git a/public/images/man-baby-woman.png b/public/images/man-baby-woman.png new file mode 100644 index 0000000000000000000000000000000000000000..92ce90dcd268719c11b276357ed9f6d6a08b250a GIT binary patch literal 246514 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

ph)o3am_pm?WI=V9ZAFutrW3i+SXEsC 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 wH;bP9Z@$~T6RP@>CZe#JExj^SpAr5Q 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 literal 0 HcmV?d00001 diff --git a/public/images/robot-help-bar.png b/public/images/robot-help-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..4e698736a196a394afa0053da9929c2050f770a4 GIT binary patch literal 591354 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

)u}Mmuh=5U&(tJ=> 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 z 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

6frr+e<_rvYbe}OJEZWS{Tkt9C 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%0Dfg(MLpd&B!_{WX{K9%^oZBeaz~m=bP<}$_ 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�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%0DJnO4Ip402bfLA}pGg79*W%A{#Q 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 kfj{5>{|Dffh`xOtoPJY6K8ip0 Date: Thu, 8 Aug 2024 13:46:39 -0700 Subject: [PATCH 073/273] feat: pure black bg in dark mode --- src/@chakra-ui/semanticTokens.ts | 2 +- src/styles/global.css | 2 +- src/styles/semantic-tokens.css | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/@chakra-ui/semanticTokens.ts b/src/@chakra-ui/semanticTokens.ts index 7ffe96fb922..13b5de0eec3 100644 --- a/src/@chakra-ui/semanticTokens.ts +++ b/src/@chakra-ui/semanticTokens.ts @@ -57,7 +57,7 @@ const semanticTokens = { inverted: { _light: "gray.100", _dark: "gray.800" }, }, background: { - base: { _light: "white", _dark: "gray.800" }, + base: { _light: "white", _dark: "black" }, highlight: { _light: "gray.100", _dark: "gray.900" }, }, disabled: { _light: "gray.400", _dark: "gray.500" }, diff --git a/src/styles/global.css b/src/styles/global.css index a97fa5d8fa4..43c49810e1a 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -115,7 +115,7 @@ @layer base { body { - @apply bg-background font-body text-sm text-body lg:text-md; + @apply !bg-background font-body text-sm text-body lg:text-md; } a { diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index efeede2490e..f0d58a00e9c 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -75,7 +75,7 @@ --body-medium: var(--gray-400); --body-light: var(--gray-600); - --background: var(--gray-800); + --background: black; --background-highlight: var(--gray-900); --primary: var(--purple-400); From bfb97b5f7502de40c9a3d72b39a95fdc5396ed96 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 14:18:07 -0700 Subject: [PATCH 074/273] refactor: update color theme tokens and colors --- src/styles/colors.css | 79 ++++++++++++------------ src/styles/semantic-tokens.css | 107 +++++++++------------------------ 2 files changed, 68 insertions(+), 118 deletions(-) diff --git a/src/styles/colors.css b/src/styles/colors.css index eb3ee477395..6756b2573dd 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -16,46 +16,49 @@ --gray-900: 20, 20, 20; /* #141414 */ --black: 0, 0, 0; /* #000000 */ - --purple-50: 241, 234, 250; /* #f1eaf9 */ - --purple-100: 226, 211, 251; /* #e2d3fb */ - --purple-200: 209, 186, 247; /* #d1baf7 */ - --purple-300: 192, 161, 243; /* #c0a1f3 */ - --purple-400: 175, 136, 239; /* #af88ef */ - --purple-500: 133, 88, 233; /* #8558e9 */ - --purple-600: 108, 36, 223; /* #6c24df */ - --purple-700: 86, 27, 181; /* #561bb5 */ - --purple-800: 65, 18, 139; /* #41128b */ - --purple-900: 43, 9, 97; /* #2b0961 */ + --purple-50: 243, 236, 255; /* #F3ECFF */ + --purple-100: 237, 226, 255; /* #EDE2FF */ + --purple-200: 218, 197, 252; /* #DAC5FC */ + --purple-300: 204, 175, 252; /* #CCAFFC */ + --purple-400: 179, 141, 240; /* #B38DF0 */ + --purple-500: 148, 90, 244; /* #945AF4 */ + --purple-600: 108, 36, 223; /* #6C24DF */ + --purple-700: 86, 27, 181; /* #561BB5 */ + --purple-800: 65, 18, 139; /* #41128B */ + --purple-900: 30, 5, 70; /* #1E0546 */ - --pink-100: 253, 231, 243; /* #fde7f3 */ - --pink-200: 251, 207, 235; /* #fbcfeb */ - --pink-300: 238, 140, 195; /* #ee8cc3 */ - --pink-400: 238, 88, 171; /* #ee58ab */ - --pink-500: 245, 63, 161; /* #f53fa1 */ - --pink-600: 229, 29, 127; /* #e51d7f */ - --pink-700: 199, 15, 99; /* #c70f63 */ - --pink-800: 137, 18, 71; /* #891247 */ - --pink-900: 56, 33, 46; /* #38212e */ + --pink-50: 248, 224, 238; /* #F8E0EE */ + --pink-100: 248, 197, 229; /* #F8C5E5 */ + --pink-200: 255, 178, 226; /* #FFB2E2 */ + --pink-300: 242, 154, 208; /* #F29AD0 */ + --pink-400: 237, 117, 191; /* #ED75BF */ + --pink-500: 227, 74, 168; /* #E34AA8 */ + --pink-600: 195, 46, 138; /* #C32E8A */ + --pink-700: 164, 33, 114; /* #A42172 */ + --pink-800: 112, 17, 75; /* #70114B */ + --pink-900: 68, 14, 47; /* #440E2F */ + + --blue-50: 248, 251, 255; /* #F8FBFF */ + --blue-100: 232, 241, 255; /* #E8F1FF */ + --blue-200: 202, 223, 251; /* #CADFFB */ + --blue-300: 136, 170, 241; /* #88AAF1 */ + --blue-400: 105, 149, 247; /* #6995F7 */ + --blue-500: 68, 115, 239; /* #4473EF */ + --blue-600: 60, 76, 235; /* #3C4CEB */ + --blue-700: 43, 54, 168; /* #2B36A8 */ + --blue-800: 35, 47, 113; /* #232F71 */ + --blue-900: 27, 39, 58; /* #1B273A */ - --blue-100: 232, 241, 255; /* #e8f1ff */ - --blue-200: 202, 223, 251; /* #cadffb */ - --blue-300: 136, 170, 241; /* #88aaf1 */ - --blue-400: 105, 149, 247; /* #6995f7 */ - --blue-500: 68, 115, 239; /* #4473ef */ - --blue-600: 60, 76, 235; /* #3c4ceb */ - --blue-700: 43, 54, 168; /* #2b36a8 */ - --blue-800: 35, 47, 113; /* #232f71 */ - --blue-900: 27, 39, 58; /* #1b273a */ - - --cyan-100: 227, 247, 245; /* #e3f7f5 */ - --cyan-200: 184, 250, 246; /* #b8faf6 */ - --cyan-300: 128, 235, 225; /* #80ebe1 */ - --cyan-400: 80, 206, 193; /* #50cec1 */ - --cyan-500: 26, 169, 158; /* #1aa99e */ - --cyan-600: 41, 148, 143; /* #29948f */ - --cyan-700: 30, 103, 102; /* #1e6766 */ - --cyan-800: 28, 69, 69; /* #1c4545 */ - --cyan-900: 31, 49, 47; /* #1f312f */ + --teal-50: 237, 255, 253; /* #EDFFFD */ + --teal-100: 217, 255, 251; /* #D9FFFB */ + --teal-200: 184, 250, 246; /* #B8FAF6 */ + --teal-300: 128, 235, 225; /* #80EBE1 */ + --teal-400: 80, 206, 193; /* #50CEC1 */ + --teal-500: 26, 169, 158; /* #1AA99E */ + --teal-600: 41, 148, 143; /* #29948F */ + --teal-700: 30, 103, 102; /* #1E6766 */ + --teal-800: 28, 69, 69; /* #1C4545 */ + --teal-900: 31, 49, 47; /* #1F312F */ --orange-100: #fff0db; --orange-200: #ffd7a7; diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index f0d58a00e9c..9f100180aa7 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -2,70 +2,50 @@ /* SEMANTIC TOKEN DECLARATIONS: Abstracted from color palettes for theming */ -/** -* Color palette semantic breakdown ([brackets] denote dark mode): -* -* 100: low-contrast -* 200: [high-contrast] -* 300: [hover] -* 400: [DEFAULT] -* 500: neutral, [neutral] -* 600: DEFAULT -* 700: hover -* 800: high-contrast -* 900: [low-contrast] -*/ - @layer base { /* Light mode (default) token declarations */ :root { --body: var(--gray-800); --body-medium: var(--gray-500); --body-light: var(--gray-200); + --body-action: var(--white); - --background: white; + --background: var(--white); --background-highlight: var(--gray-100); --primary: var(--purple-600); --primary-hover: var(--purple-700); --primary-low-contrast: var(--purple-100); --primary-high-contrast: var(--purple-800); + --primary-action: var(--purple-600); --accent-a: var(--blue-600); - --accent-a-hover: var(--blue-700); - --accent-a-low-contrast: var(--blue-100); - --accent-a-high-contrast: var(--blue-800); - --accent-b: var(--pink-600); - --accent-b-hover: var(--pink-700); - --accent-b-low-contrast: var(--pink-100); - --accent-b-high-contrast: var(--pink-800); - - --accent-c: var(--cyan-600); - --accent-c-hover: var(--cyan-700); - --accent-c-low-contrast: var(--cyan-100); - --accent-c-high-contrast: var(--cyan-800); + --accent-c: var(--teal-600); /* Gradients */ - --gradient-primary: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--purple-50), 0.32) 0%, - rgba(var(--purple-100), 0.56) 100% + --gradient-angle: 90deg; + --start-opacity: 0.1; + --end-opacity: 0.05; + --gradient-primary: linear-gradient( + var(--gradient-angle), + rgba(var(--purple-500), var(--start-opacity)) 19.09%, + rgba(var(--purple-500), var(--end-opacity)) 40.63% ); - --gradient-accent-a: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--blue-100), 0.32) 0%, - rgba(var(--blue-200), 0.56) 100% + --gradient-accent-a: linear-gradient( + var(--gradient-angle), + rgba(var(--blue-500), var(--start-opacity)) 19.09%, + rgba(var(--blue-500), var(--end-opacity)) 40.63% ); - --gradient-accent-b: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--pink-100), 0.32) 0%, - rgba(var(--pink-200), 0.48) 100% + --gradient-accent-b: linear-gradient( + var(--gradient-angle), + rgba(var(--pink-500), var(--start-opacity)) 19.09%, + rgba(var(--pink-500), var(--end-opacity)) 40.63% ); - --gradient-accent-c: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--cyan-100), 0.32) 0%, - rgba(var(--cyan-200), 0.48) 100% + --gradient-accent-c: linear-gradient( + var(--gradient-angle), + rgba(var(--teal-500), var(--start-opacity)) 19.09%, + rgba(var(--teal-500), var(--end-opacity)) 40.63% ); } @@ -75,53 +55,20 @@ --body-medium: var(--gray-400); --body-light: var(--gray-600); - --background: black; + --background: var(--black); --background-highlight: var(--gray-900); --primary: var(--purple-400); --primary-hover: var(--purple-300); --primary-low-contrast: var(--purple-900); --primary-high-contrast: var(--purple-200); - --primary-neutral: var(--purple-500); --accent-a: var(--blue-400); - --accent-a-hover: var(--blue-300); - --accent-a-low-contrast: var(--blue-900); - --accent-a-high-contrast: var(--blue-200); - --accent-a-neutral: var(--blue-500); - --accent-b: var(--pink-400); - --accent-b-hover: var(--pink-300); - --accent-b-low-contrast: var(--pink-900); - --accent-b-high-contrast: var(--pink-200); - --accent-b-neutral: var(--pink-500); - - --accent-c: var(--cyan-400); - --accent-c-hover: var(--cyan-300); - --accent-c-low-contrast: var(--cyan-900); - --accent-c-high-contrast: var(--cyan-200); - --accent-c-neutral: var(--cyan-500); + --accent-c: var(--teal-400); /* Gradients */ - --gradient-primary: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--purple-800), 0.32) 0%, - rgba(var(--purple-900), 0.56) 100% - ); - --gradient-accent-a: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--blue-800), 0.32) 0%, - rgba(var(--blue-900), 0.56) 100% - ); - --gradient-accent-b: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--pink-800), 0.32) 0%, - rgba(var(--pink-900), 0.48) 100% - ); - --gradient-accent-c: radial-gradient( - 114.96% 111.8% at 100% 0%, - rgba(var(--cyan-800), 0.32) 0%, - rgba(var(--cyan-900), 0.48) 100% - ); + --gradient-angle: 180deg; + --end-opacity: 0.2; } } From 2c93b06c19ffbcacffc5331e95cf109961ae6306 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 14:28:35 -0700 Subject: [PATCH 075/273] refactor: upgrade all tokens to rgba format can be used with tailwind /opacity syntax, ie. border-primary/10 for 0.1 alpha, but requires `rgba` wrapper --- tailwind.config.ts | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/tailwind.config.ts b/tailwind.config.ts index f234b148611..534674944af 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -40,31 +40,31 @@ const config = { }, colors: { primary: { - DEFAULT: "rgb(var(--primary))", - "high-contrast": "rgb(var(--primary-high-contrast))", - "low-contrast": "rgb(var(--primary-low-contrast))", - hover: "rgb(var(--primary-hover))", + DEFAULT: "rgba(var(--primary))", + "high-contrast": "rgba(var(--primary-high-contrast))", + "low-contrast": "rgba(var(--primary-low-contrast))", + hover: "rgba(var(--primary-hover))", light: "var(--primary-light)" /* TODO: Migrate/deprecate */, dark: "var(--primary-dark)" /* TODO: Migrate/deprecate */, }, accent: { a: { - DEFAULT: "rgb(var(--accent-a))", - "high-contrast": "rgb(var(--accent-a-high-contrast))", - "low-contrast": "rgb(var(--accent-a-low-contrast))", - hover: "rgb(var(--accent-a-hover))", + DEFAULT: "rgba(var(--accent-a))", + "high-contrast": "rgba(var(--accent-a-high-contrast))", + "low-contrast": "rgba(var(--accent-a-low-contrast))", + hover: "rgba(var(--accent-a-hover))", }, b: { - DEFAULT: "rgb(var(--accent-b))", - "high-contrast": "rgb(var(--accent-b-high-contrast))", - "low-contrast": "rgb(var(--accent-b-low-contrast))", - hover: "rgb(var(--accent-b-hover))", + DEFAULT: "rgba(var(--accent-b))", + "high-contrast": "rgba(var(--accent-b-high-contrast))", + "low-contrast": "rgba(var(--accent-b-low-contrast))", + hover: "rgba(var(--accent-b-hover))", }, c: { - DEFAULT: "rgb(var(--accent-c))", - "high-contrast": "rgb(var(--accent-c-high-contrast))", - "low-contrast": "rgb(var(--accent-c-low-contrast))", - hover: "rgb(var(--accent-c-hover))", + DEFAULT: "rgba(var(--accent-c))", + "high-contrast": "rgba(var(--accent-c-high-contrast))", + "low-contrast": "rgba(var(--accent-c-low-contrast))", + hover: "rgba(var(--accent-c-hover))", }, }, body: { @@ -152,7 +152,7 @@ const config = { "4xl": "2rem" /* 32px */, }, borderColor: { - primary: "rgba(var(--primary), 0.1)", + primary: "rgba(var(--primary))", accent: { a: "rgba(var(--accent-a), 0.1)", b: "rgba(var(--accent-b), 0.1)", From 0456e5f7f915d2f5511e24f6cd7fd2e94dc9fe43 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 14:30:56 -0700 Subject: [PATCH 076/273] revert: borderColor tokens mirror regular color tokens; this is redundant and can be removed. `border-primary` will still apply `primary` token, and /opacity syntax still works without these --- tailwind.config.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tailwind.config.ts b/tailwind.config.ts index 534674944af..b223ecb22da 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -151,14 +151,6 @@ const config = { borderRadius: { "4xl": "2rem" /* 32px */, }, - borderColor: { - primary: "rgba(var(--primary))", - accent: { - a: "rgba(var(--accent-a), 0.1)", - b: "rgba(var(--accent-b), 0.1)", - c: "rgba(var(--accent-c), 0.1)", - }, - }, gridTemplateColumns: { bento: "2rem repeat(10, 1fr) 2rem", }, From f33b09886f529d309f175d20c1147d1d6db25853 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 15:13:21 -0700 Subject: [PATCH 077/273] update: BentoBox, add optional imgWidth prop export type --- src/components/BentoBox/index.tsx | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/components/BentoBox/index.tsx b/src/components/BentoBox/index.tsx index 8e1f1cb7a45..49eb77f1dbf 100644 --- a/src/components/BentoBox/index.tsx +++ b/src/components/BentoBox/index.tsx @@ -7,26 +7,33 @@ import { cn } from "@/lib/utils/cn" import { ButtonLink } from "../../../tailwind/ui/buttons/Button" -type BentoBoxProps = HTMLAttributes & { - title: string +export type BentoBoxProps = HTMLAttributes & { action: string - imgSrc: StaticImageData href: string + imgSrc: StaticImageData + imgWidth?: number + title: string } const BentoBox = ({ - title, - children, action, + children, + className, href, imgSrc, - className, + imgWidth, + title, }: BentoBoxProps) => ( -

-
- +
+
+
-
+

{title}

{children}

Date: Thu, 8 Aug 2024 15:45:10 -0700 Subject: [PATCH 078/273] update: BentoBox for desktop homepage --- src/components/BentoBox/index.tsx | 4 ++-- src/pages/index.tsx | 40 +++++++++++++++---------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/components/BentoBox/index.tsx b/src/components/BentoBox/index.tsx index 49eb77f1dbf..9e5769d4add 100644 --- a/src/components/BentoBox/index.tsx +++ b/src/components/BentoBox/index.tsx @@ -26,14 +26,14 @@ const BentoBox = ({ }: BentoBoxProps) => (
-
+

{title}

{children}

-
{SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( @@ -360,7 +358,7 @@ const HomePage = ({
Use Cases
-

+

A new way to use the internet

From 667e017a7ce3561004c4d3dfa328a0e0c681dc52 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:43:59 -0700 Subject: [PATCH 079/273] layout: BentoBox responsive design --- src/pages/index.tsx | 71 +++++++++++++++++++++++++------------------ src/styles/global.css | 13 ++++++++ 2 files changed, 54 insertions(+), 30 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 55afe0537e4..906492b097b 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -81,6 +81,17 @@ const cachedFetchTxCount = runOnlyOnce(fetchTxCount) const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(XML_FEEDS)) const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) +const BentoTitle = ({ className }) => ( +
+
+ Use Cases +
+

+ A new way to use the internet +

+
+) + type Props = BasePageProps & { communityEvents: CommunityEventsReturnType metricResults: AllMetricData @@ -153,10 +164,12 @@ const HomePage = ({ action: "Learn more", href: "/stablecoins/", imgSrc: ImpactImage, - imgWidth: 512, + imgWidth: 500, className: cn( "bg-gradient-primary border-primary/10", - "col-span-7 col-start-5 row-span-1 row-start-1" + "flex-col lg:flex-col-reverse xl:flex-row", + "lg:col-span-6 lg:row-start-2", + "xl:col-span-7 xl:col-start-5 xl:row-start-1" ), }, { @@ -167,8 +180,10 @@ const HomePage = ({ href: "/defi/", imgSrc: ManAndDogImage, className: cn( - "bg-gradient-accent-c border-accent-c/10 flex-col-reverse", - "col-span-4 col-start-2 row-span-1 row-start-2" + "bg-gradient-accent-c border-accent-c/10", + "flex-col lg:flex-col xl:flex-col-reverse", + "lg:col-span-6 lg:col-start-7 lg:row-start-2", + "xl:col-span-4 xl:col-start-2 xl:row-start-2" ), }, { @@ -178,9 +193,12 @@ const HomePage = ({ action: "Browse apps", href: "/dapps/", imgSrc: MergeImage, + imgWidth: 320, className: cn( - "bg-gradient-accent-b border-accent-b/10 flex-col", - "col-span-3 col-start-6 row-span-1 row-start-2" + "bg-gradient-accent-b border-accent-b/10", + "flex-col lg:flex-row xl:flex-col", + "lg:col-span-12 lg:row-start-3", + "xl:col-span-3 xl:col-start-6 xl:row-start-2" ), }, { @@ -191,8 +209,10 @@ const HomePage = ({ href: "/layer-2/", imgSrc: ManBabyWomanImage, className: cn( - "bg-gradient-accent-a border-accent-a/10 flex-col-reverse", - "col-span-3 col-start-9 row-span-2 row-start-2" + "bg-gradient-accent-a border-accent-a/10", + "flex-col lg:flex-col-reverse xl:flex-col-reverse", + "lg:col-span-6 lg:col-start-7 lg:row-start-4", + "xl:col-span-3 xl:col-start-9 xl:row-span-2 xl:row-start-2" ), }, { @@ -202,10 +222,12 @@ const HomePage = ({ action: "More on NFTs", href: "/nft/", imgSrc: RobotBarImage, - imgWidth: 224, + imgWidth: 324, className: cn( "bg-gradient-primary border-primary/10", - "col-span-7 col-start-2 row-span-1 row-start-3" + "flex-col lg:flex-col xl:flex-row", + "lg:col-span-6 lg:row-start-4", + "xl:col-span-7 xl:col-start-2 xl:row-start-3" ), }, ] @@ -345,26 +367,14 @@ const HomePage = ({ ))}
- - 👷‍♀️🚧🔜 - - -
-
-
- Use Cases -
-

- A new way to use the internet -

+
+ +
+ + {bentoBoxes.map((box) => ( + + ))}
- {bentoBoxes.map((box) => ( - - ))}

diff --git a/src/styles/global.css b/src/styles/global.css index 43c49810e1a..f92809194b4 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -192,3 +192,16 @@ @apply font-monospace text-base leading-base; } } + +@layer components { + .carousel { + scroll-snap-type: x mandatory; + scroll-padding: 0 var(--eth-space-6); + max-width: calc(100vw - 2 * var(--eth-space-4)); + overflow-x: auto; + } + .carousel > * { + scroll-snap-align: start; + width: 100%; + } +} \ No newline at end of file From f5e0e303c297bfbc475c83b0b130bab2f51443e7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:46:07 -0700 Subject: [PATCH 080/273] theme: update tailwind breakpoints --- tailwind.config.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index b223ecb22da..32b6dd0e6e1 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -10,6 +10,15 @@ const config = { prefix: "", theme: { extend: { + // TODO: Confirm new tw breakpoints + screens: { + sm: "20rem", // 320px + md: "30rem", // 480px (previous Chakra "sm") + lg: "48rem", // 768px (previous Chakra "md") + xl: "62rem", // 992px (previous Chakra "lg") + "2xl": "80rem", // 1280px (previous Chakra "xl") + max: "96rem", // 1536px (previous Chakra "2xl") + }, fontFamily: { heading: "var(--font-inter)", body: "var(--font-inter)", From a67f0028dca5d78a96530ebccb869af1a0f5a30d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:25:29 -0700 Subject: [PATCH 081/273] fix: wrap R.G,B values in rgba() --- src/styles/colors.css | 19 ++++++++++--------- tailwind.config.ts | 22 +++++++++++----------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/styles/colors.css b/src/styles/colors.css index 6756b2573dd..f584511561f 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -60,16 +60,17 @@ --teal-800: 28, 69, 69; /* #1C4545 */ --teal-900: 31, 49, 47; /* #1F312F */ - --orange-100: #fff0db; - --orange-200: #ffd7a7; - --orange-300: #feb077; - --orange-400: #fd8640; - --orange-500: #fb610e; - --orange-600: #ec4a0a; - --orange-700: #c4350a; - --orange-800: #7d2711; - --orange-900: #3a291d; + --orange-100: 255, 240, 219; /* #FFF0DB */ + --orange-200: 255, 215, 167; /* #FFD7A7 */ + --orange-300: 254, 176, 119; /* #FEB077 */ + --orange-400: 253, 134, 64; /* #FD8640 */ + --orange-500: 251, 97, 14; /* #FB610E */ + --orange-600: 236, 74, 10; /* #EC4A0A */ + --orange-700: 196, 53, 10; /* #C4350A */ + --orange-800: 125, 39, 17; /* #7D2711 */ + --orange-900: 58, 41, 29; /* #3A291D */ + /* TODO: Update these to R,G,B format, deprecate as needed */ --red-100: #f7c8c8; --red-500: #b80000; /* ! Deprecating 900, error.neutral */ diff --git a/tailwind.config.ts b/tailwind.config.ts index 32b6dd0e6e1..b6e7094c51d 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -53,8 +53,8 @@ const config = { "high-contrast": "rgba(var(--primary-high-contrast))", "low-contrast": "rgba(var(--primary-low-contrast))", hover: "rgba(var(--primary-hover))", - light: "var(--primary-light)" /* TODO: Migrate/deprecate */, - dark: "var(--primary-dark)" /* TODO: Migrate/deprecate */, + light: "rgba(var(--primary-light))" /* TODO: Migrate/deprecate */, + dark: "rgba(var(--primary-dark))" /* TODO: Migrate/deprecate */, }, accent: { a: { @@ -77,15 +77,15 @@ const config = { }, }, body: { - DEFAULT: "var(--body)", - medium: "var(--body-medium)", - light: "var(--body-light)", + DEFAULT: "rgba(var(--body))", + medium: "rgba(var(--body-medium))", + light: "rgba(var(--body-light))", }, background: { - DEFAULT: "var(--background)", - highlight: "var(--background-highlight)", + DEFAULT: "rgba(var(--background))", + highlight: "rgba(var(--background-highlight))", }, - disabled: "var(--disabled)", + disabled: "rgba(var(--disabled))", "tooltip-shadow": "var(--tooltip-shadow)", "hub-hero-content-bg": "var(--hub-hero-content-bg)", attention: { @@ -124,15 +124,15 @@ const config = { drop: "0 4px 17px 0 rgba(0,0,0,0.08)", "table-box-hover": "0px 8px 17px rgba(0, 0, 0, 0.15)", "table-item-box": "var(--table-item-box-shadow)", - "table-item-box-hover": "0 0 1px var(--primary)", + "table-item-box-hover": "0 0 1px rgba(var(--primary))", "grid-yellow-box-shadow": "8px 8px 0px 0px #ffe78e", "grid-blue-box-shadow": "8px 8px 0px 0px #a7d0f4", // Part of new DS "menu-accordion": "0px 2px 2px 0px rgba(0, 0, 0, 0.12) inset, 0px -3px 2px 0px rgba(0, 0, 0, 0.14) inset", // TODO: From current theme. Deprecate for 'button-hover' - primary: "4px 4px 0px 0px var(--primary)", - "button-hover": "4px 4px 0 0 var(--primary-low-contrast)", + primary: "4px 4px 0px 0px rgba(var(--primary))", + "button-hover": "4px 4px 0 0 rgba(var(--primary-low-contrast))", tooltip: "0 0 16px var(--tooltip-shadow)", }, spacing: { From a35a23937ab32d930a17534a519c66dce795b060 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:26:13 -0700 Subject: [PATCH 082/273] feat: add bg-gradient-hero to HomeHero --- src/components/Hero/HomeHero/index.tsx | 2 +- src/styles/semantic-tokens.css | 45 ++++++++++++++++---------- tailwind.config.ts | 1 + 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 9deab28a2e4..cec4930430c 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -21,7 +21,7 @@ const HomeHero = ({ heroImg }: HomeHeroProps) => { priority />

-
+

{t("page-index:page-index-title")}

diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 9f100180aa7..77e3884439c 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -24,28 +24,37 @@ --accent-c: var(--teal-600); /* Gradients */ - --gradient-angle: 90deg; - --start-opacity: 0.1; - --end-opacity: 0.05; + --gradient-primary-angle: 90deg; + --gradient-primary-opacity-from: 0.1; + --gradient-primary-opacity-to: 0.05; --gradient-primary: linear-gradient( - var(--gradient-angle), - rgba(var(--purple-500), var(--start-opacity)) 19.09%, - rgba(var(--purple-500), var(--end-opacity)) 40.63% + var(--gradient-primary-angle), + rgba(var(--purple-500), var(--gradient-primary-opacity-from)) 19.09%, + rgba(var(--purple-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-accent-a: linear-gradient( - var(--gradient-angle), - rgba(var(--blue-500), var(--start-opacity)) 19.09%, - rgba(var(--blue-500), var(--end-opacity)) 40.63% + var(--gradient-primary-angle), + rgba(var(--blue-500), var(--gradient-primary-opacity-from)) 19.09%, + rgba(var(--blue-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-accent-b: linear-gradient( - var(--gradient-angle), - rgba(var(--pink-500), var(--start-opacity)) 19.09%, - rgba(var(--pink-500), var(--end-opacity)) 40.63% + var(--gradient-primary-angle), + rgba(var(--pink-500), var(--gradient-primary-opacity-from)) 19.09%, + rgba(var(--pink-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-accent-c: linear-gradient( - var(--gradient-angle), - rgba(var(--teal-500), var(--start-opacity)) 19.09%, - rgba(var(--teal-500), var(--end-opacity)) 40.63% + var(--gradient-primary-angle), + rgba(var(--teal-500), var(--gradient-primary-opacity-from)) 19.09%, + rgba(var(--teal-500), var(--gradient-primary-opacity-to)) 40.63% + ); + + --gradient-primary-hero-angle: 180deg; + --gradient-primary-hero-opacity-from: 0.1; + --gradient-primary-hero-opacity-to: 0; + --gradient-primary-hero: linear-gradient( + var(--gradient-primary-hero-angle), + rgba(var(--purple-500), var(--gradient-primary-hero-opacity-from)) 0%, + rgba(var(--purple-500), var(--gradient-primary-hero-opacity-to)) 25% ); } @@ -68,7 +77,9 @@ --accent-c: var(--teal-400); /* Gradients */ - --gradient-angle: 180deg; - --end-opacity: 0.2; + --gradient-primary-angle: 180deg; + --gradient-primary-opacity-to: 0.2; + + --gradient-primary-hero-opacity-from: 0.5; } } diff --git a/tailwind.config.ts b/tailwind.config.ts index b6e7094c51d..bc1bc33822a 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -116,6 +116,7 @@ const config = { "gradient-accent-a": "var(--gradient-accent-a)", "gradient-accent-b": "var(--gradient-accent-b)", "gradient-accent-c": "var(--gradient-accent-c)", + "gradient-primary-hero": "var(--gradient-primary-hero)", }, boxShadow: { "table-box": "var(--table-box-shadow)", From f57d5f142f2f7673881ea1543cad29a44754e4ab Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:39:01 -0700 Subject: [PATCH 083/273] update: SvgButtonLink hover/focus style --- src/components/Buttons/SvgButtonLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 93c6552fab3..231cd1dec31 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -26,7 +26,7 @@ const SvgButtonLink = ({ {...props} >
-
+
From 9325cb585e059c31e28d3765b917f525cc45aab9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:22:31 -0700 Subject: [PATCH 084/273] chore: add primary-action token --- tailwind.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index bc1bc33822a..9792a4a2af5 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -53,6 +53,7 @@ const config = { "high-contrast": "rgba(var(--primary-high-contrast))", "low-contrast": "rgba(var(--primary-low-contrast))", hover: "rgba(var(--primary-hover))", + action: "rgba(var(--primary-action))", light: "rgba(var(--primary-light))" /* TODO: Migrate/deprecate */, dark: "rgba(var(--primary-dark))" /* TODO: Migrate/deprecate */, }, From aae4293d7113db61271d0024190ef70fa8891e4c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:27:18 -0700 Subject: [PATCH 085/273] refactor: mv global font import to global.css --- src/pages/_app.tsx | 1 - src/styles/global.css | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index d841e48be5d..ea6b04fcec3 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -7,7 +7,6 @@ import { AppPropsWithLayout } from "@/lib/types" import ThemeProvider from "@/components/ThemeProvider" import "@/styles/global.css" -import "@/styles/fonts.css" import { BaseLayout } from "@/layouts/BaseLayout" diff --git a/src/styles/global.css b/src/styles/global.css index f92809194b4..ed4fafce928 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -4,6 +4,7 @@ @import "./colors.css"; @import "./semantic-tokens.css"; +@import "./fonts.css"; @layer base { :root { From c460cecae46d2ecd9d44b3115094a19a71229295 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:34:34 -0700 Subject: [PATCH 086/273] config: use `class` attribute for tracking theme --- src/components/ThemeProvider.tsx | 2 +- src/styles/semantic-tokens.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ThemeProvider.tsx b/src/components/ThemeProvider.tsx index f6f8eed4cb0..55dd3e3501f 100644 --- a/src/components/ThemeProvider.tsx +++ b/src/components/ThemeProvider.tsx @@ -27,7 +27,7 @@ const ThemeProvider = ({ children }: Pick) => { const theme = useMemo(() => merge(customTheme, { direction }), [direction]) return ( Date: Fri, 9 Aug 2024 12:35:39 -0700 Subject: [PATCH 087/273] chore: rm unnecessary tokens --- tailwind.config.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tailwind.config.ts b/tailwind.config.ts index 9792a4a2af5..617f00b31a0 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -60,21 +60,12 @@ const config = { accent: { a: { DEFAULT: "rgba(var(--accent-a))", - "high-contrast": "rgba(var(--accent-a-high-contrast))", - "low-contrast": "rgba(var(--accent-a-low-contrast))", - hover: "rgba(var(--accent-a-hover))", }, b: { DEFAULT: "rgba(var(--accent-b))", - "high-contrast": "rgba(var(--accent-b-high-contrast))", - "low-contrast": "rgba(var(--accent-b-low-contrast))", - hover: "rgba(var(--accent-b-hover))", }, c: { DEFAULT: "rgba(var(--accent-c))", - "high-contrast": "rgba(var(--accent-c-high-contrast))", - "low-contrast": "rgba(var(--accent-c-low-contrast))", - hover: "rgba(var(--accent-c-hover))", }, }, body: { From 0e66abbc045c3eadabc03a15e40182c93792b6aa Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:19:28 -0700 Subject: [PATCH 088/273] refactor: extract Box and Title components mv BentoBox/index.tsx to BentoBoxes/Box.tsx --- .../{BentoBox/index.tsx => BentoBoxes/Box.tsx} | 2 +- src/components/BentoBoxes/Title.tsx | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) rename src/components/{BentoBox/index.tsx => BentoBoxes/Box.tsx} (92%) create mode 100644 src/components/BentoBoxes/Title.tsx diff --git a/src/components/BentoBox/index.tsx b/src/components/BentoBoxes/Box.tsx similarity index 92% rename from src/components/BentoBox/index.tsx rename to src/components/BentoBoxes/Box.tsx index 9e5769d4add..f1516b6866e 100644 --- a/src/components/BentoBox/index.tsx +++ b/src/components/BentoBoxes/Box.tsx @@ -26,7 +26,7 @@ const BentoBox = ({ }: BentoBoxProps) => (
diff --git a/src/components/BentoBoxes/Title.tsx b/src/components/BentoBoxes/Title.tsx new file mode 100644 index 00000000000..d4608c2f041 --- /dev/null +++ b/src/components/BentoBoxes/Title.tsx @@ -0,0 +1,14 @@ +import { cn } from "@/lib/utils/cn" + +const Title = ({ className }) => ( +
+
+ Use Cases +
+

+ A new way to use the internet +

+
+) + +export default Title From 9bb0015023d16e46652ba7151f0b41e27a7ec996 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:21:49 -0700 Subject: [PATCH 089/273] refactor: extract BentoBoxes component fix responsive device-size/color-mode theming variations --- src/components/BentoBoxes/index.tsx | 194 ++++++++++++++++++++++++++++ src/pages/index.tsx | 104 +-------------- 2 files changed, 196 insertions(+), 102 deletions(-) create mode 100644 src/components/BentoBoxes/index.tsx diff --git a/src/components/BentoBoxes/index.tsx b/src/components/BentoBoxes/index.tsx new file mode 100644 index 00000000000..c85a0188b72 --- /dev/null +++ b/src/components/BentoBoxes/index.tsx @@ -0,0 +1,194 @@ +import { cn } from "@/lib/utils/cn" + +import BentoBox, { BentoBoxProps } from "./Box" +import Title from "./Title" + +import ImpactImage from "@/public/images/impact_transparent.png" +import ManAndDogImage from "@/public/images/man-and-dog-playing.png" +import ManBabyWomanImage from "@/public/images/man-baby-woman.png" +import RobotBarImage from "@/public/images/robot-help-bar.png" +import MergeImage from "@/public/images/upgrades/merge.png" + +const BentoBoxes = () => { + const flow = { + mobile: { + down: "flex-col bg-gradient-to-b", + up: "flex-col-reverse bg-gradient-to-t", + right: "flex-row bg-gradient-to-r", + left: "flex-row-reverse bg-gradient-to-l", + }, + md: { + down: "md:flex-col md:bg-gradient-to-b md", + up: "md:flex-col-reverse md:bg-gradient-to-t md", + right: "md:flex-row md:bg-gradient-to-r md", + left: "md:flex-row-reverse md:bg-gradient-to-l md", + }, + lg: { + down: "lg:flex-col lg:bg-gradient-to-b lg", + up: "lg:flex-col-reverse lg:bg-gradient-to-t lg", + right: "lg:flex-row lg:bg-gradient-to-r lg", + left: "lg:flex-row-reverse lg:bg-gradient-to-l lg", + }, + xl: { + down: "xl:flex-col xl:bg-gradient-to-b xl", + up: "xl:flex-col-reverse xl:bg-gradient-to-t xl", + right: "xl:flex-row xl:bg-gradient-to-r xl", + left: "xl:flex-row-reverse xl:bg-gradient-to-l xl", + }, + } + + const positions = "from-20% to-60%" + + const colors = (color: "primary" | "accent-a" | "accent-b" | "accent-c") => { + if (color === "primary") + return "from-primary/10 to-primary/5 dark:from-primary/20 dark:to-primary/10" + if (color === "accent-a") + return "from-accent-a/10 to-accent-a/5 dark:from-accent-a/20 dark:to-accent-a/10" + if (color === "accent-b") + return "from-accent-b/10 to-accent-b/5 dark:from-accent-b/20 dark:to-accent-b/10" + if (color === "accent-c") + return "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10" + } + + const bentoBoxes: BentoBoxProps[] = [ + { + title: "Crypto without volatility", + children: + "Stablecoins are currencies that maintain stable value. Their price matches the U.S. dollar or other steady asset", + action: "Learn more", + href: "/stablecoins/", + imgSrc: ImpactImage, + imgWidth: 500, + className: cn( + "border-primary/10", + positions, + colors("primary"), + flow.mobile.down, + flow.lg.up, + flow.xl.right, + "lg:col-span-6 lg:row-start-2", + "xl:col-span-7 xl:col-start-5 xl:row-start-1" + ), + }, + { + title: "A fairer financial system", + children: + "Billions can't open bank accounts or freely use their money. Ethereum's financial system is always open and unbiased.", + action: "Explore DeFi", + href: "/defi/", + imgSrc: ManAndDogImage, + className: cn( + "border-accent-c/10", + positions, + colors("accent-c"), + flow.mobile.down, + flow.lg.down, + flow.xl.up, + "lg:col-span-6 lg:col-start-7 lg:row-start-2", + "xl:col-span-4 xl:col-start-2 xl:row-start-2" + ), + }, + { + title: "Innovative apps", + children: + "Ethereum apps work without selling your data. Protect your privacy.", + action: "Browse apps", + href: "/dapps/", + imgSrc: MergeImage, + imgWidth: 320, + className: cn( + "border-accent-b/10", + positions, + colors("accent-b"), + flow.mobile.down, + flow.lg.right, + flow.xl.down, + "lg:col-span-12 lg:row-start-3", + "xl:col-span-3 xl:col-start-6 xl:row-start-2" + ), + }, + { + title: "The network of networks", + children: + "Ethereum is the hub for blockchain innovation. The best project are built on Ethereum.", + action: "Explore benefits", + href: "/layer-2/", + imgSrc: ManBabyWomanImage, + className: cn( + "border-accent-a/10", + positions, + colors("accent-a"), + flow.mobile.down, + flow.lg.up, + flow.xl.up, + "lg:col-span-6 lg:col-start-7 lg:row-start-4", + "xl:col-span-3 xl:col-start-9 xl:row-span-2 xl:row-start-2" + ), + }, + { + title: "The internet of assets", + children: + "Arts, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", + action: "More on NFTs", + href: "/nft/", + imgSrc: RobotBarImage, + imgWidth: 324, + className: cn( + "border-primary/10", + positions, + colors("primary"), + flow.mobile.down, + flow.lg.down, + flow.xl.right, + "lg:col-span-6 lg:row-start-4", + "xl:col-span-7 xl:col-start-2 xl:row-start-3" + ), + }, + ] + + const getZFromIndex = (index: number) => { + if (index === 0) return "z-[5]" + if (index === 1) return "z-[4]" + if (index === 2) return "z-[3]" + if (index === 3) return "z-[2]" + if (index === 4) return "z-[1]" + return "z-0" + } + + return ( + <> + {/* Mobile */} +
+ + <div className="relative border-accent-c/10"> + {bentoBoxes.map(({ className, ...box }, idx) => ( + // TODO: Complete mobile card-stack layout + <BentoBox + key={box.title} + className={cn( + className, + "bg-background/90", + getZFromIndex(idx), + idx === 0 ? "relative" : "absolute", + "inset-0" + )} + {...box} + /> + ))} + </div> + </div> + + {/* Desktop */} + <div className="hidden lg:block"> + <div className="flex grid-cols-bento flex-row gap-4 lg:grid"> + <Title className="lg:col-span-12 lg:flex xl:col-span-3 xl:col-start-2" /> + {bentoBoxes.map((box) => ( + <BentoBox key={box.title} {...box} /> + ))} + </div> + </div> + </> + ) +} + +export default BentoBoxes diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 906492b097b..4157cd096f6 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -10,7 +10,7 @@ import { Flex, Skeleton } from "@chakra-ui/react" import type { AllMetricData, BasePageProps, Lang, RSSItem } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" -import BentoBox, { type BentoBoxProps } from "@/components/BentoBox" +import BentoBoxes from "@/components/BentoBoxes" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" @@ -67,11 +67,6 @@ import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import learnImage from "@/public/images/heroes/learn-hub-hero.png" import communityImage from "@/public/images/heroes/quizzes-hub-hero.png" import hero from "@/public/images/home/hero.png" -import ImpactImage from "@/public/images/impact_transparent.png" -import ManAndDogImage from "@/public/images/man-and-dog-playing.png" -import ManBabyWomanImage from "@/public/images/man-baby-woman.png" -import RobotBarImage from "@/public/images/robot-help-bar.png" -import MergeImage from "@/public/images/upgrades/merge.png" const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) @@ -81,17 +76,6 @@ const cachedFetchTxCount = runOnlyOnce(fetchTxCount) const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(XML_FEEDS)) const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) -const BentoTitle = ({ className }) => ( - <div className={cn("flex flex-col", className)}> - <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> - Use Cases - </div> - <h2 className="mb-4 me-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> - A new way to use the internet - </h2> - </div> -) - type Props = BasePageProps & { communityEvents: CommunityEventsReturnType metricResults: AllMetricData @@ -156,82 +140,6 @@ const HomePage = ({ setModalOpen(true) } - const bentoBoxes: BentoBoxProps[] = [ - { - title: "Crypto without volatility", - children: - "Stablecoins are currencies that maintain stable value. Their price matches the U.S. dollar or other steady asset", - action: "Learn more", - href: "/stablecoins/", - imgSrc: ImpactImage, - imgWidth: 500, - className: cn( - "bg-gradient-primary border-primary/10", - "flex-col lg:flex-col-reverse xl:flex-row", - "lg:col-span-6 lg:row-start-2", - "xl:col-span-7 xl:col-start-5 xl:row-start-1" - ), - }, - { - title: "A fairer financial system", - children: - "Billions can't open bank accounts or freely use their money. Ethereum's financial system is always open and unbiased.", - action: "Explore DeFi", - href: "/defi/", - imgSrc: ManAndDogImage, - className: cn( - "bg-gradient-accent-c border-accent-c/10", - "flex-col lg:flex-col xl:flex-col-reverse", - "lg:col-span-6 lg:col-start-7 lg:row-start-2", - "xl:col-span-4 xl:col-start-2 xl:row-start-2" - ), - }, - { - title: "Innovative apps", - children: - "Ethereum apps work without selling your data. Protect your privacy.", - action: "Browse apps", - href: "/dapps/", - imgSrc: MergeImage, - imgWidth: 320, - className: cn( - "bg-gradient-accent-b border-accent-b/10", - "flex-col lg:flex-row xl:flex-col", - "lg:col-span-12 lg:row-start-3", - "xl:col-span-3 xl:col-start-6 xl:row-start-2" - ), - }, - { - title: "The network of networks", - children: - "Ethereum is the hub for blockchain innovation. The best project are built on Ethereum.", - action: "Explore benefits", - href: "/layer-2/", - imgSrc: ManBabyWomanImage, - className: cn( - "bg-gradient-accent-a border-accent-a/10", - "flex-col lg:flex-col-reverse xl:flex-col-reverse", - "lg:col-span-6 lg:col-start-7 lg:row-start-4", - "xl:col-span-3 xl:col-start-9 xl:row-span-2 xl:row-start-2" - ), - }, - { - title: "The internet of assets", - children: - "Arts, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", - action: "More on NFTs", - href: "/nft/", - imgSrc: RobotBarImage, - imgWidth: 324, - className: cn( - "bg-gradient-primary border-primary/10", - "flex-col lg:flex-col xl:flex-row", - "lg:col-span-6 lg:row-start-4", - "xl:col-span-7 xl:col-start-2 xl:row-start-3" - ), - }, - ] - const codeExamples: CodeExample[] = [ { title: t("page-index:page-index-developers-code-example-title-0"), @@ -367,15 +275,7 @@ const HomePage = ({ ))} </div> - <div> - <BentoTitle className="lg:hidden" /> - <div className="carousel flex grid-cols-bento flex-row gap-4 lg:grid"> - <BentoTitle className="hidden lg:col-span-12 lg:flex xl:col-span-3 xl:col-start-2" /> - {bentoBoxes.map((box) => ( - <BentoBox key={box.title} {...box} /> - ))} - </div> - </div> + <BentoBoxes /> <HomeSection tag="Activity" From bbf02b87d8296fc24ee77e2af0c694b0399723c7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 9 Aug 2024 18:32:56 -0700 Subject: [PATCH 090/273] refactor: H,S%,L% color formatting --- src/styles/colors.css | 142 +++++++++++++++++++++--------------------- tailwind.config.ts | 60 +++++++++--------- 2 files changed, 100 insertions(+), 102 deletions(-) diff --git a/src/styles/colors.css b/src/styles/colors.css index f584511561f..a1e2bca4c76 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -4,84 +4,82 @@ @layer base { :root { - --white: 255, 255, 255; /* #ffffff */ - --gray-100: 247, 247, 247; /* #f7f7f7 */ - --gray-200: 231, 231, 231; /* #e7e7e7 */ - --gray-300: 200, 200, 200; /* #c8c8c8 */ - --gray-400: 140, 140, 140; /* #8c8c8c */ - --gray-500: 97, 97, 97; /* #616161 */ - --gray-600: 51, 51, 51; /* #333333 */ - --gray-700: 34, 34, 34; /* #222222 */ - --gray-800: 27, 27, 27; /* #1b1b1b */ - --gray-900: 20, 20, 20; /* #141414 */ - --black: 0, 0, 0; /* #000000 */ + --white: 0, 0%, 100%; /* #ffffff */ + --gray-50: 0, 0%, 97%; /* #f7f7f7 */ + --gray-100: 0, 0%, 95%; /* #f2f2f2 */ + --gray-200: 0, 0%, 91%; /* #e0e0e0 */ + --gray-300: 0, 0%, 78%; /* #bcbcbc */ + --gray-400: 0, 0%, 55%; /* #7a7a7a */ + --gray-500: 0, 0%, 38%; /* #616161 */ + --gray-600: 0, 0%, 20%; /* #333333 */ + --gray-700: 0, 0%, 13%; /* #222222 */ + --gray-800: 0, 0%, 11%; /* #1c1c1c */ + --gray-900: 0, 0%, 8%; /* #141414 */ + --black: 0, 0%, 0%; /* #000000 */ - --purple-50: 243, 236, 255; /* #F3ECFF */ - --purple-100: 237, 226, 255; /* #EDE2FF */ - --purple-200: 218, 197, 252; /* #DAC5FC */ - --purple-300: 204, 175, 252; /* #CCAFFC */ - --purple-400: 179, 141, 240; /* #B38DF0 */ - --purple-500: 148, 90, 244; /* #945AF4 */ - --purple-600: 108, 36, 223; /* #6C24DF */ - --purple-700: 86, 27, 181; /* #561BB5 */ - --purple-800: 65, 18, 139; /* #41128B */ - --purple-900: 30, 5, 70; /* #1E0546 */ + --purple-50: 262, 100%, 96%; /* #F3ECFF */ + --purple-100: 263, 100%, 94%; /* #EDE2FF */ + --purple-200: 263, 91%, 88%; /* #DAC5FC */ + --purple-300: 263, 94%, 84%; /* #CCAFFC */ + --purple-400: 263, 77%, 75%; /* #B38DF0 */ + --purple-500: 263, 88%, 65%; /* #945AF4 */ + --purple-600: 263, 75%, 51%; /* #6C24DF */ + --purple-700: 263, 74%, 41%; /* #561BB5 */ + --purple-800: 263, 77%, 31%; /* #41128B */ + --purple-900: 263, 86%, 15%; /* #1E0546 */ - --pink-50: 248, 224, 238; /* #F8E0EE */ - --pink-100: 248, 197, 229; /* #F8C5E5 */ - --pink-200: 255, 178, 226; /* #FFB2E2 */ - --pink-300: 242, 154, 208; /* #F29AD0 */ - --pink-400: 237, 117, 191; /* #ED75BF */ - --pink-500: 227, 74, 168; /* #E34AA8 */ - --pink-600: 195, 46, 138; /* #C32E8A */ - --pink-700: 164, 33, 114; /* #A42172 */ - --pink-800: 112, 17, 75; /* #70114B */ - --pink-900: 68, 14, 47; /* #440E2F */ - - --blue-50: 248, 251, 255; /* #F8FBFF */ - --blue-100: 232, 241, 255; /* #E8F1FF */ - --blue-200: 202, 223, 251; /* #CADFFB */ - --blue-300: 136, 170, 241; /* #88AAF1 */ - --blue-400: 105, 149, 247; /* #6995F7 */ - --blue-500: 68, 115, 239; /* #4473EF */ - --blue-600: 60, 76, 235; /* #3C4CEB */ - --blue-700: 43, 54, 168; /* #2B36A8 */ - --blue-800: 35, 47, 113; /* #232F71 */ - --blue-900: 27, 39, 58; /* #1B273A */ + --pink-50: 325, 63%, 93%; /* #F8E0EE */ + --pink-100: 322, 78%, 87%; /* #F8C5E5 */ + --pink-200: 323, 100%, 85%; /* #FFB2E2 */ + --pink-300: 323, 77%, 78%; /* #F29AD0 */ + --pink-400: 323, 77%, 69%; /* #ED75BF */ + --pink-500: 323, 73%, 59%; /* #E34AA8 */ + --pink-600: 323, 62%, 47%; /* #C32E8A */ + --pink-700: 323, 66%, 39%; /* #A42172 */ + --pink-800: 323, 74%, 25%; /* #70114B */ + --pink-900: 323, 66%, 16%; /* #440E2F */ - --teal-50: 237, 255, 253; /* #EDFFFD */ - --teal-100: 217, 255, 251; /* #D9FFFB */ - --teal-200: 184, 250, 246; /* #B8FAF6 */ - --teal-300: 128, 235, 225; /* #80EBE1 */ - --teal-400: 80, 206, 193; /* #50CEC1 */ - --teal-500: 26, 169, 158; /* #1AA99E */ - --teal-600: 41, 148, 143; /* #29948F */ - --teal-700: 30, 103, 102; /* #1E6766 */ - --teal-800: 28, 69, 69; /* #1C4545 */ - --teal-900: 31, 49, 47; /* #1F312F */ + --blue-50: 214, 100%, 99%; /* #F8FBFF */ + --blue-100: 217, 100%, 95%; /* #E8F1FF */ + --blue-200: 214, 86%, 89%; /* #CADFFB */ + --blue-300: 221, 79%, 74%; /* #88AAF1 */ + --blue-400: 221, 90%, 69%; /* #6995F7 */ + --blue-500: 224, 84%, 60%; /* #4473EF */ + --blue-600: 235, 81%, 58%; /* #3C4CEB */ + --blue-700: 235, 59%, 41%; /* #2B36A8 */ + --blue-800: 231, 53%, 29%; /* #232F71 */ + --blue-900: 217, 36%, 17%; /* #1B273A */ - --orange-100: 255, 240, 219; /* #FFF0DB */ - --orange-200: 255, 215, 167; /* #FFD7A7 */ - --orange-300: 254, 176, 119; /* #FEB077 */ - --orange-400: 253, 134, 64; /* #FD8640 */ - --orange-500: 251, 97, 14; /* #FB610E */ - --orange-600: 236, 74, 10; /* #EC4A0A */ - --orange-700: 196, 53, 10; /* #C4350A */ - --orange-800: 125, 39, 17; /* #7D2711 */ - --orange-900: 58, 41, 29; /* #3A291D */ + --teal-50: 173, 100%, 96%; /* #EDFFFD */ + --teal-100: 174, 100%, 93%; /* #D9FFFB */ + --teal-200: 176, 87%, 85%; /* #B8FAF6 */ + --teal-300: 174, 73%, 71%; /* #80EBE1 */ + --teal-400: 174, 56%, 56%; /* #50CEC1 */ + --teal-500: 175, 73%, 38%; /* #1AA99E */ + --teal-600: 177, 57%, 37%; /* #29948F */ + --teal-700: 179, 55%, 26%; /* #1E6766 */ + --teal-800: 180, 42%, 19%; /* #1C4545 */ + --teal-900: 173, 23%, 16%; /* #1F312F */ - /* TODO: Update these to R,G,B format, deprecate as needed */ - --red-100: #f7c8c8; - --red-500: #b80000; - /* ! Deprecating 900, error.neutral */ - --red-900: #180c0c; + --orange-100: 30, 100%, 94%; /* #FFF0DB */ + --orange-200: 30, 100%, 82%; /* #FFD7A7 */ + --orange-300: 30, 98%, 70%; /* #FEB077 */ + --orange-400: 30, 97%, 58%; /* #FD8640 */ + --orange-500: 30, 95%, 51%; /* #FB610E */ + --orange-600: 20, 95%, 47%; /* #EC4A0A */ + --orange-700: 15, 90%, 39%; /* #C4350A */ + --orange-800: 10, 76%, 28%; /* #7D2711 */ + --orange-900: 20, 33%, 15%; /* #3A291D */ - --green-100: #ddf4e4; - --green-500: #0a7146; - /* ! Deprecating 900, success.neutral */ - --green-900: #0a160e; + /* TODO: Update to new color theming */ + --red-100: 0, 75%, 88%; /* #f7c8c8 */ + --red-500: 0, 100%, 36%; /* #b80000 */ + --red-800: 0, 33%, 7%; /* #180c0c */ + --green-100: 138, 51%, 91%; /* #ddf4e4 */ + --green-500: 155, 84%, 24%; /* #0a7146 */ + --green-900: 140, 37%, 6%; /* #0a160e */ + --yellow-200: 47, 100%, 94%; /* #fff8df */ + --yellow-500: 42, 100%, 37%; /* #bd8400 */ - --yellow-200: #fff8df; - --yellow-500: #bd8400; } } diff --git a/tailwind.config.ts b/tailwind.config.ts index 617f00b31a0..056cb6c311d 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -49,53 +49,53 @@ const config = { }, colors: { primary: { - DEFAULT: "rgba(var(--primary))", - "high-contrast": "rgba(var(--primary-high-contrast))", - "low-contrast": "rgba(var(--primary-low-contrast))", - hover: "rgba(var(--primary-hover))", - action: "rgba(var(--primary-action))", - light: "rgba(var(--primary-light))" /* TODO: Migrate/deprecate */, - dark: "rgba(var(--primary-dark))" /* TODO: Migrate/deprecate */, + DEFAULT: "hsla(var(--primary))", + "high-contrast": "hsla(var(--primary-high-contrast))", + "low-contrast": "hsla(var(--primary-low-contrast))", + hover: "hsla(var(--primary-hover))", + action: "hsla(var(--primary-action))", + light: "hsla(var(--primary-light))" /* TODO: Migrate/deprecate */, + dark: "hsla(var(--primary-dark))" /* TODO: Migrate/deprecate */, }, accent: { a: { - DEFAULT: "rgba(var(--accent-a))", + DEFAULT: "hsla(var(--accent-a))", }, b: { - DEFAULT: "rgba(var(--accent-b))", + DEFAULT: "hsla(var(--accent-b))", }, c: { - DEFAULT: "rgba(var(--accent-c))", + DEFAULT: "hsla(var(--accent-c))", }, }, body: { - DEFAULT: "rgba(var(--body))", - medium: "rgba(var(--body-medium))", - light: "rgba(var(--body-light))", + DEFAULT: "hsla(var(--body))", + medium: "hsla(var(--body-medium))", + light: "hsla(var(--body-light))", }, background: { - DEFAULT: "rgba(var(--background))", - highlight: "rgba(var(--background-highlight))", + DEFAULT: "hsla(var(--background))", + highlight: "hsla(var(--background-highlight))", }, - disabled: "rgba(var(--disabled))", + disabled: "hsla(var(--disabled))", "tooltip-shadow": "var(--tooltip-shadow)", "hub-hero-content-bg": "var(--hub-hero-content-bg)", attention: { - DEFAULT: "var(--attention)", - light: "var(--attention-light)", - outline: "var(--attention-outline)", + DEFAULT: "hsla(var(--attention))", + light: "hsla(var(--attention-light))", + outline: "hsla(var(--attention-outline))", }, error: { - DEFAULT: "var(--error)", - light: "var(--error-light)", - outline: "var(--error-outline)", - neutral: "var(--error-neutral)", + DEFAULT: "hsla(var(--error))", + light: "hsla(var(--error-light))", + outline: "hsla(var(--error-outline))", + neutral: "hsla(var(--error-neutral))", }, success: { - DEFAULT: "var(--success)", - light: "var(--success-light)", - outline: "var(--success-outline)", - neutral: "var(--success-neutral)", + DEFAULT: "hsla(var(--success))", + light: "hsla(var(--success-light))", + outline: "hsla(var(--success-outline))", + neutral: "hsla(var(--success-neutral))", }, }, backgroundImage: { @@ -117,15 +117,15 @@ const config = { drop: "0 4px 17px 0 rgba(0,0,0,0.08)", "table-box-hover": "0px 8px 17px rgba(0, 0, 0, 0.15)", "table-item-box": "var(--table-item-box-shadow)", - "table-item-box-hover": "0 0 1px rgba(var(--primary))", + "table-item-box-hover": "0 0 1px hsla(var(--primary))", "grid-yellow-box-shadow": "8px 8px 0px 0px #ffe78e", "grid-blue-box-shadow": "8px 8px 0px 0px #a7d0f4", // Part of new DS "menu-accordion": "0px 2px 2px 0px rgba(0, 0, 0, 0.12) inset, 0px -3px 2px 0px rgba(0, 0, 0, 0.14) inset", // TODO: From current theme. Deprecate for 'button-hover' - primary: "4px 4px 0px 0px rgba(var(--primary))", - "button-hover": "4px 4px 0 0 rgba(var(--primary-low-contrast))", + primary: "4px 4px 0px 0px hsla(var(--primary))", + "button-hover": "4px 4px 0 0 hsla(var(--primary-low-contrast))", tooltip: "0 0 16px var(--tooltip-shadow)", }, spacing: { From 8940479d456a073f1daf63fe9b66f10221f4799b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 9 Aug 2024 20:46:30 -0700 Subject: [PATCH 091/273] config: use `.dark` class for theme setup --- src/styles/global.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/global.css b/src/styles/global.css index ed4fafce928..135005452e7 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -78,7 +78,7 @@ ); } - [data-theme="dark"] { + .dark { /* Semantic Colors: Dark mode */ /* ! Deprecating primary-light */ --primary-light: var(--orange-100); From 17d1856dbac84c18c7af8761df374e5214dc9419 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 15:53:48 -0700 Subject: [PATCH 092/273] fix: breakpoint usage previously declared based on Homepage figma which was showing breakpoints one step lower than code (marked as "lg" but was supposed to be "md" breakpoint in code) --- src/components/HomeSection/index.tsx | 8 +++--- src/pages/index.tsx | 41 ++++++++++++---------------- tailwind.config.ts | 9 ------ 3 files changed, 22 insertions(+), 36 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index d02713cf4a1..01ffa04d8fd 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -23,14 +23,14 @@ const HomeSection = ({ return ( <div className={cn( - "flex flex-col gap-8 lg:flex-row xl:gap-16", - isFlipped && "lg:flex-row-reverse", + "flex flex-col gap-8 md:flex-row lg:gap-16", + isFlipped && "md:flex-row-reverse", className )} > {imgSrc && ( <NextImage - className="min-h-full w-full rounded-4xl object-cover object-center lg:max-w-128" + className="min-h-full w-full rounded-4xl object-cover object-center md:max-w-96 lg:max-w-128" src={imgSrc} alt="" /> @@ -39,7 +39,7 @@ const HomeSection = ({ <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> {tag} </div> - <h2 className="mb-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> + <h2 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> {title} </h2> {children} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4157cd096f6..ca267549327 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -260,8 +260,8 @@ const HomePage = ({ <div className="w-full"> <HomeHero heroImg={hero} /> </div> - <div className="space-y-16 px-4 md:px-6 lg:space-y-32"> - <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 lg:grid-cols-4 lg:gap-x-10"> + <div className="space-y-16 px-4 sm:px-6 md:space-y-32"> + <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 md:grid-cols-4 md:gap-x-10"> {SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( <SvgButtonLink key={label} @@ -282,7 +282,7 @@ const HomePage = ({ title="The strongest ecosystem" imgSrc={activityImage} > - <div className="mt-16 xl:mt-32"> + <div className="mt-16 lg:mt-32"> <p className="mt-8 text-xl font-bold"> Activity from all Ethereum networks </p> @@ -296,7 +296,7 @@ const HomePage = ({ imgSrc={learnImage} isFlipped > - <div className="flex flex-col space-y-16 xl:space-y-32"> + <div className="flex flex-col space-y-16 lg:space-y-32"> <p className="text-lg"> Cryptocurrency can feel overwhelming. Don't worry, these materials are designed to help you understand Ethereum in just a @@ -304,7 +304,7 @@ const HomePage = ({ </p> <div className="flex flex-col space-y-8"> <p className="text-xl font-bold">Popular topics</p> - <div className="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2"> + <div className="grid grid-cols-1 gap-8 sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-2"> {popularTopics.map(({ label, Svg, href }) => ( <SvgButtonLink key={label} @@ -318,7 +318,7 @@ const HomePage = ({ </SvgButtonLink> ))} </div> - <div className="flex justify-center py-8 lg:justify-start"> + <div className="flex justify-center py-8 md:justify-start"> <ButtonLink linkProps={{ href: "/learn/" }} size="lg"> Other topics <MdChevronRight /> </ButtonLink> @@ -341,7 +341,7 @@ const HomePage = ({ ecosystem. Use JavaScript and Python, or learn a smart contract language like Solidity or Vyper to write your own app. </p> - <div className="flex flex-col justify-center gap-6 py-8 md:flex-row lg:justify-start"> + <div className="flex flex-wrap gap-6 py-8"> <ButtonLink linkProps={{ href: "/developers/" }} size="lg" @@ -444,16 +444,11 @@ const HomePage = ({ <div key={title} className={cn( - "flex flex-col justify-between gap-6 border-t px-6 py-4 xl:flex-row", + "flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row", idx === 0 && "bg-accent-gradient-a" )} > - <div - className={cn( - "flex flex-col space-y-0.5 text-center text-base sm:text-start", - "flex sm:flex md:flex lg:flex xl:flex 2xl:flex" - )} - > + <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> <p className="italic text-body-medium"> {new Intl.DateTimeFormat(locale, { month: "long", @@ -475,7 +470,7 @@ const HomePage = ({ <ButtonLink size="sm" variant="outline" - className="h-fit w-full text-nowrap border-body !text-body sm:w-fit xl:self-center" + className="h-fit w-full text-nowrap border-body !text-body sm:w-fit lg:self-center xl:text-primary" linkProps={{ href: calendarLink }} > Add to calendar @@ -488,11 +483,11 @@ const HomePage = ({ </HomeSection> <div className="w-full"> - <h3 className="mb-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> + <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> Ethereum news </h3> <p>The latest blog posts and updates from the community</p> - <div className="mt-4 grid grid-cols-1 gap-8 lg:mt-16 lg:grid-cols-3 lg:flex-row"> + <div className="mt-4 grid grid-cols-1 gap-8 md:mt-16 md:grid-cols-3 md:flex-row"> {rssItems.map(({ title, link, imgSrc, source, pubDate }) => ( <a href={link} @@ -524,12 +519,12 @@ const HomePage = ({ </div> <div className="w-full"> - <h3 className="mb-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> + <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> Ethereum events </h3> <p>We have many community events scheduled around the globe</p> - <div className="mt-4 lg:mt-16"> - <div className="flex flex-col gap-8 self-stretch md:flex-row"> + <div className="mt-4 md:mt-16"> + <div className="flex flex-col gap-8 self-stretch sm:flex-row"> {upcomingEvents.map( ({ title, @@ -543,7 +538,7 @@ const HomePage = ({ return ( <a href={href} - className="md:w-1/3 md:max-w-128" + className="sm:w-1/3 sm:max-w-128" key={title} target="_blank" rel="noopener noreferrer" @@ -593,7 +588,7 @@ const HomePage = ({ )} </div> </div> - <div className="flex justify-center py-8 lg:justify-start"> + <div className="flex justify-center py-8 md:justify-start"> <ButtonLink linkProps={{ href: "/community/events/" }} size="lg" @@ -614,7 +609,7 @@ const HomePage = ({ </p> </div> {/* TODO: Fix icon sizing, fix button/icon layout on mobile */} - <div className="max-w-105 mx-auto grid grid-cols-1 gap-16 md:grid-cols-2 lg:max-w-screen-md"> + <div className="max-w-105 mx-auto grid grid-cols-1 gap-16 sm:grid-cols-2 md:max-w-screen-md"> <SvgButtonLink Svg={Layer2Icon} label="How to contribute" diff --git a/tailwind.config.ts b/tailwind.config.ts index 056cb6c311d..b7d802ba861 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -10,15 +10,6 @@ const config = { prefix: "", theme: { extend: { - // TODO: Confirm new tw breakpoints - screens: { - sm: "20rem", // 320px - md: "30rem", // 480px (previous Chakra "sm") - lg: "48rem", // 768px (previous Chakra "md") - xl: "62rem", // 992px (previous Chakra "lg") - "2xl": "80rem", // 1280px (previous Chakra "xl") - max: "96rem", // 1536px (previous Chakra "2xl") - }, fontFamily: { heading: "var(--font-inter)", body: "var(--font-inter)", From 7b5abb51f795943f8d383dbfb056b4d9e3e11ccc Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:49:25 -0700 Subject: [PATCH 093/273] update: Box to accept imgHeight? --- src/components/BentoBoxes/Box.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/BentoBoxes/Box.tsx b/src/components/BentoBoxes/Box.tsx index f1516b6866e..1ef2380cd1d 100644 --- a/src/components/BentoBoxes/Box.tsx +++ b/src/components/BentoBoxes/Box.tsx @@ -12,6 +12,7 @@ export type BentoBoxProps = HTMLAttributes<HTMLDivElement> & { href: string imgSrc: StaticImageData imgWidth?: number + imgHeight?: number title: string } @@ -22,6 +23,7 @@ const BentoBox = ({ href, imgSrc, imgWidth, + imgHeight, title, }: BentoBoxProps) => ( <div @@ -31,7 +33,7 @@ const BentoBox = ({ )} > <div className="grid place-items-center"> - <NextImage src={imgSrc} alt="" width={imgWidth} /> + <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> </div> <div> <h3 className="mb-2 text-3xl font-black">{title}</h3> From 615ffd51f8d18ae0cbb57271a65e4a703bbd1ed4 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:50:03 -0700 Subject: [PATCH 094/273] init: simple mobile stacking design --- src/components/BentoBoxes/index.tsx | 77 ++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 23 deletions(-) diff --git a/src/components/BentoBoxes/index.tsx b/src/components/BentoBoxes/index.tsx index c85a0188b72..af11b025293 100644 --- a/src/components/BentoBoxes/index.tsx +++ b/src/components/BentoBoxes/index.tsx @@ -1,3 +1,6 @@ +import { useState } from "react" +import { MdSwipeLeft, MdSwipeRight } from "react-icons/md" + import { cn } from "@/lib/utils/cn" import BentoBox, { BentoBoxProps } from "./Box" @@ -10,6 +13,8 @@ import RobotBarImage from "@/public/images/robot-help-bar.png" import MergeImage from "@/public/images/upgrades/merge.png" const BentoBoxes = () => { + const [activeIndex, setActiveIndex] = useState(0) + const flow = { mobile: { down: "flex-col bg-gradient-to-b", @@ -146,35 +151,61 @@ const BentoBoxes = () => { }, ] - const getZFromIndex = (index: number) => { - if (index === 0) return "z-[5]" - if (index === 1) return "z-[4]" - if (index === 2) return "z-[3]" - if (index === 3) return "z-[2]" - if (index === 4) return "z-[1]" - return "z-0" + const n = bentoBoxes.length + + const getPositionFromIndex = (index: number) => { + if (index === 0) return "z-[5] rotate-[-2deg]" + if (index === 1) return "z-[4] rotate-[-1deg]" + if (index === 2) return "z-[3] rotate-[0deg]" + if (index === 3) return "z-[2] rotate-[1deg]" + if (index === 4) return "z-[1] rotate-[2deg]" + console.warn("Warning, index out of range; tw classes may not be correct") + return "z-0 rotate-0" } + const progressCard = () => setActiveIndex((prev) => (prev + 1) % n) + + const regressCard = () => setActiveIndex((prev) => (prev - 1 + n) % n) + + // Animation of old top card when active index progresses + // Progression: 0%: z-[5] translate-x-0 rotate-0 origin-bottom, 50%: z-[5] translate-x-[120%] rotate-45 origin-bottom, 51%%: z-[1] translate-x-[120%] rotate-45 origin-bottom, 100%: z-[1] translate-x-[0%] rotate-[8deg] origin-bottom + return ( <> {/* Mobile */} - <div className="overflow-hidden lg:hidden"> + <div className="relative my-16 overflow-visible lg:hidden"> <Title className="" /> - <div className="relative border-accent-c/10"> - {bentoBoxes.map(({ className, ...box }, idx) => ( - // TODO: Complete mobile card-stack layout - <BentoBox - key={box.title} - className={cn( - className, - "bg-background/90", - getZFromIndex(idx), - idx === 0 ? "relative" : "absolute", - "inset-0" - )} - {...box} - /> - ))} + <div className="absolute inset-x-0 top-128 z-10 flex justify-evenly py-1 text-4xl"> + <button onClick={regressCard}> + <MdSwipeLeft /> + </button> + <button onClick={progressCard}> + <MdSwipeRight /> + </button> + </div> + {/* TODO: Fix height constraints */} + <div className="relative mx-auto grid h-[800px] max-w-[min(calc(100vw_-_10rem),30rem)]"> + {bentoBoxes.map(({ className, ...box }, idx) => { + const adjustedIndex = (idx - activeIndex + n) % n + return ( + // TODO: Complete mobile gesture animations + <BentoBox + key={box.title} + imgHeight={400} + className={cn( + className, + "origin-bottom", + "bg-background", + "transition-all duration-200", + getPositionFromIndex(adjustedIndex), + adjustedIndex === 0 ? "relative" : "absolute", + "inset-0" + )} + {...box} + imgWidth={undefined} // Intentionally last to override box + /> + ) + })} </div> </div> From 35adbf3890b02b6252a6eba82e5c996ccdf1bd10 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:50:16 -0700 Subject: [PATCH 095/273] fix: twitter icon --- src/pages/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index ca267549327..7b96d0ce9dd 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -3,7 +3,7 @@ import type { GetStaticProps, InferGetStaticPropsType } from "next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa" +import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6" import { MdChevronRight } from "react-icons/md" import { Flex, Skeleton } from "@chakra-ui/react" @@ -643,7 +643,7 @@ const HomePage = ({ </p> </SvgButtonLink> <SvgButtonLink - Svg={FaTwitter} + Svg={FaXTwitter} label="Twitter" href="https://x.com/EthDotOrg" className="text-accent-b" From af06be742d5a09aa54374dd4f8efcf715adae088 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 20:02:27 -0700 Subject: [PATCH 096/273] config: yarn add swiper yarn add -d @types/swiper --- package.json | 2 ++ yarn.lock | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/package.json b/package.json index 75ee501360f..f5257435edc 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "react-select": "5.8.0", "reading-time": "^1.5.0", "remark-gfm": "^3.0.1", + "swiper": "^11.1.9", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", "yaml-loader": "^0.8.0" @@ -92,6 +93,7 @@ "@types/node": "^20.4.2", "@types/react": "18.2.57", "@types/react-dom": "18.2.19", + "@types/swiper": "^6.0.0", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/parser": "^6.19.0", diff --git a/yarn.lock b/yarn.lock index c742f27bdfb..2386a591840 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5446,6 +5446,13 @@ "@types/mime" "*" "@types/node" "*" +"@types/swiper@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/swiper/-/swiper-6.0.0.tgz#9934ecd569611b660a2a9bf200f25ce5ba4b4d63" + integrity sha512-QPZRgxZ+ivXXtzV43B3LxpXUIC7FE/EoKM+rtxngmgt2M7eeUYypZhyqZD8UxJtlBcUDw/ATGoVeSNpvBBrz2w== + dependencies: + swiper "*" + "@types/ungap__structured-clone@^0.3.0": version "0.3.3" resolved "https://registry.yarnpkg.com/@types/ungap__structured-clone/-/ungap__structured-clone-0.3.3.tgz#cf7e1252f18f5ee39291a8f52fa83c31b0102fc6" @@ -13643,6 +13650,11 @@ svgo@^3.0.2: csso "^5.0.5" picocolors "^1.0.0" +swiper@*, swiper@^11.1.9: + version "11.1.9" + resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.1.9.tgz#55505c7cf4723b678df8220fc06152b793585dbc" + integrity sha512-rflu8zvfGa3x1v/aeSufk4zRJffhOQowyvtJlp46sUBnOqAuk1Rdv5Ldj0AWWBV595iZ+ZMk7VB35ZRtRUomtA== + tailwind-merge@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.4.0.tgz#1345209dc1f484f15159c9180610130587703042" From 3d62c6a6dc468f36095c02f5d5b155299b374330 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 20:11:14 -0700 Subject: [PATCH 097/273] fix: bento boxes styling --- src/components/BentoBoxes/Box.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/BentoBoxes/Box.tsx b/src/components/BentoBoxes/Box.tsx index 1ef2380cd1d..df678e60710 100644 --- a/src/components/BentoBoxes/Box.tsx +++ b/src/components/BentoBoxes/Box.tsx @@ -32,15 +32,15 @@ const BentoBox = ({ className )} > - <div className="grid place-items-center"> + <div className="mb-6 grid place-items-center md:mb-auto"> <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> </div> <div> <h3 className="mb-2 text-3xl font-black">{title}</h3> - <p className="mb-8">{children}</p> + <p className="mb-8 text-md">{children}</p> <ButtonLink linkProps={{ href: href }} - className="!border-body !text-body" // TODO: Check this override + className="!border-body text-md !text-body" // TODO: Check this override variant="outline" > {action} <MdChevronRight /> From ba99d53136668529c92904c21cb3201ab3607c50 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 20:12:23 -0700 Subject: [PATCH 098/273] feat: implement mobile swiper --- src/components/BentoBoxes/index.tsx | 69 ++++++++++------------------- 1 file changed, 24 insertions(+), 45 deletions(-) diff --git a/src/components/BentoBoxes/index.tsx b/src/components/BentoBoxes/index.tsx index af11b025293..6e6b4aede16 100644 --- a/src/components/BentoBoxes/index.tsx +++ b/src/components/BentoBoxes/index.tsx @@ -1,11 +1,17 @@ -import { useState } from "react" -import { MdSwipeLeft, MdSwipeRight } from "react-icons/md" +import { useEffect } from "react" +import { Swiper } from "swiper" +import { EffectCards } from "swiper/modules" import { cn } from "@/lib/utils/cn" import BentoBox, { BentoBoxProps } from "./Box" import Title from "./Title" +import "swiper/css" +import "swiper/css/effect-cards" +import "swiper/css/navigation" +import "swiper/css/pagination" + import ImpactImage from "@/public/images/impact_transparent.png" import ManAndDogImage from "@/public/images/man-and-dog-playing.png" import ManBabyWomanImage from "@/public/images/man-baby-woman.png" @@ -13,7 +19,14 @@ import RobotBarImage from "@/public/images/robot-help-bar.png" import MergeImage from "@/public/images/upgrades/merge.png" const BentoBoxes = () => { - const [activeIndex, setActiveIndex] = useState(0) + // Mobile swiper + useEffect(() => { + new Swiper(".swiper", { + grabCursor: true, + effect: "cards", + modules: [EffectCards], + }) + }, []) const flow = { mobile: { @@ -151,61 +164,27 @@ const BentoBoxes = () => { }, ] - const n = bentoBoxes.length - - const getPositionFromIndex = (index: number) => { - if (index === 0) return "z-[5] rotate-[-2deg]" - if (index === 1) return "z-[4] rotate-[-1deg]" - if (index === 2) return "z-[3] rotate-[0deg]" - if (index === 3) return "z-[2] rotate-[1deg]" - if (index === 4) return "z-[1] rotate-[2deg]" - console.warn("Warning, index out of range; tw classes may not be correct") - return "z-0 rotate-0" - } - - const progressCard = () => setActiveIndex((prev) => (prev + 1) % n) - - const regressCard = () => setActiveIndex((prev) => (prev - 1 + n) % n) - - // Animation of old top card when active index progresses - // Progression: 0%: z-[5] translate-x-0 rotate-0 origin-bottom, 50%: z-[5] translate-x-[120%] rotate-45 origin-bottom, 51%%: z-[1] translate-x-[120%] rotate-45 origin-bottom, 100%: z-[1] translate-x-[0%] rotate-[8deg] origin-bottom - return ( <> {/* Mobile */} - <div className="relative my-16 overflow-visible lg:hidden"> + <div className="relative my-16 lg:hidden"> <Title className="" /> - <div className="absolute inset-x-0 top-128 z-10 flex justify-evenly py-1 text-4xl"> - <button onClick={regressCard}> - <MdSwipeLeft /> - </button> - <button onClick={progressCard}> - <MdSwipeRight /> - </button> - </div> {/* TODO: Fix height constraints */} - <div className="relative mx-auto grid h-[800px] max-w-[min(calc(100vw_-_10rem),30rem)]"> - {bentoBoxes.map(({ className, ...box }, idx) => { - const adjustedIndex = (idx - activeIndex + n) % n - return ( - // TODO: Complete mobile gesture animations + <div className="swiper mt-4 h-fit max-w-[min(calc(100vw_-_2rem),_30rem)]"> + <div className="swiper-wrapper"> + {bentoBoxes.map(({ className, ...box }) => ( <BentoBox key={box.title} - imgHeight={400} + imgHeight={160} className={cn( className, - "origin-bottom", - "bg-background", - "transition-all duration-200", - getPositionFromIndex(adjustedIndex), - adjustedIndex === 0 ? "relative" : "absolute", - "inset-0" + "swiper-slide bg-background text-body" )} {...box} imgWidth={undefined} // Intentionally last to override box /> - ) - })} + ))} + </div> </div> </div> From 7309f3288591d16fabff2875ff1517895119a903 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 12 Aug 2024 20:26:44 -0700 Subject: [PATCH 099/273] fix: add handling for invalid pubDates --- src/lib/utils/date.ts | 5 ++++ src/lib/utils/rss.ts | 12 ++++++--- src/pages/index.tsx | 57 ++++++++++++++++++++++++++++--------------- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/src/lib/utils/date.ts b/src/lib/utils/date.ts index 54c57803232..1e9b04b78e4 100644 --- a/src/lib/utils/date.ts +++ b/src/lib/utils/date.ts @@ -1,2 +1,7 @@ export const dateToString = (published: Date | string) => new Date(published).toISOString().split("T")[0] + +export const isValidDate = (dateString: string | number): boolean => { + const date = new Date(dateString) + return !isNaN(date.getTime()) +} diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts index b489ba334fa..4f1a3c9b082 100644 --- a/src/lib/utils/rss.ts +++ b/src/lib/utils/rss.ts @@ -2,9 +2,15 @@ import { RSS_DISPLAY_COUNT, VITALIK_BLOG } from "../constants" import type { RSSItem } from "../types" export const sortByPubDate = (items: RSSItem[]) => - items.sort( - (a, b) => new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime() - ) + items.sort((a, b) => { + const dateA = new Date(a.pubDate) + const dateB = new Date(b.pubDate) + if (isNaN(dateA.getTime()) || isNaN(dateB.getTime())) { + console.error("Invalid date found:", a.pubDate, b.pubDate) + return 0 + } + return dateB.getTime() - dateA.getTime() + }) export const addVitalikBanner = (rssItems: RSSItem[]) => rssItems.map((item) => { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7b96d0ce9dd..e31a380de92 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -34,6 +34,7 @@ import { Card, CardContent, CardHeader } from "@/components/ui/card" import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" +import { isValidDate } from "@/lib/utils/date" import { existsNamespace } from "@/lib/utils/existsNamespace" import { getLastDeployDate } from "@/lib/utils/getLastDeployDate" import { polishRSSList } from "@/lib/utils/rss" @@ -235,13 +236,23 @@ const HomePage = ({ ] const upcomingEvents = events - .sort( - (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() - ) + .sort((a, b) => { + const dateA = isValidDate(a.endDate) + ? new Date(a.endDate).getTime() + : -Infinity + const dateB = isValidDate(b.endDate) + ? new Date(b.endDate).getTime() + : -Infinity + return dateA - dateB + }) .slice(0, 3) // Show 3 events ending soonest const calendar = communityEvents.upcomingEventData - .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) + .sort((a, b) => { + const dateA = isValidDate(a.date) ? new Date(a.date).getTime() : -Infinity + const dateB = isValidDate(b.date) ? new Date(b.date).getTime() : -Infinity + return dateA - dateB + }) .slice(0, 4) // Show next 4 events on the calendar return ( @@ -504,13 +515,15 @@ const HomePage = ({ <div className="mt-3 w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> {source} </div> - <p className="text-sm italic"> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "numeric", - year: "numeric", - }).format(new Date(pubDate))} - </p> + {isValidDate(pubDate) && ( + <p className="text-sm italic"> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "numeric", + year: "numeric", + }).format(new Date(pubDate))} + </p> + )} <p className="mb-2 text-2xl">{title}</p> </div> </a> @@ -566,14 +579,20 @@ const HomePage = ({ <div> <p className="text-2xl">{title}</p> <p className="text-sm italic text-body-medium"> - {new Intl.DateTimeFormat(locale, { - month: "2-digit", - day: "2-digit", - year: "numeric", - }).formatRange( - new Date(startDate), - new Date(endDate) - )} + {(isValidDate(startDate) || + isValidDate(endDate)) && + new Intl.DateTimeFormat(locale, { + month: "2-digit", + day: "2-digit", + year: "numeric", + }).formatRange( + new Date( + isValidDate(startDate) ? startDate : endDate + ), + new Date( + isValidDate(endDate) ? endDate : startDate + ) + )} </p> <p className="text-sm italic text-body-medium"> {location} From 96f2cbc6d1bab9aabbd5248ecfb1a9aee7525bfb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:00:27 -0700 Subject: [PATCH 100/273] patch: merge amendments --- src/components/BentoBoxes/Box.tsx | 10 +-- src/components/BentoBoxes/index.tsx | 1 + src/components/Buttons/SvgButtonLink.tsx | 4 +- src/components/FeedbackCard.tsx | 3 +- src/components/Morpher.tsx | 4 +- src/components/WindowBox/index.tsx | 4 +- ...translatathon-translatathon-hubs-data.json | 6 ++ src/pages/index.tsx | 68 ++++++++++++------- src/styles/global.css | 13 ++-- tailwind.config.ts | 2 + 10 files changed, 71 insertions(+), 44 deletions(-) create mode 100644 src/data/placeholders/content-contributing-translation-program-translatathon-translatathon-hubs-data.json diff --git a/src/components/BentoBoxes/Box.tsx b/src/components/BentoBoxes/Box.tsx index df678e60710..ba56abfb34a 100644 --- a/src/components/BentoBoxes/Box.tsx +++ b/src/components/BentoBoxes/Box.tsx @@ -3,9 +3,9 @@ import NextImage from "next/image" import { type StaticImageData } from "next/image" import { MdChevronRight } from "react-icons/md" -import { cn } from "@/lib/utils/cn" +import { ButtonLink } from "@/components/ui/buttons/Button" -import { ButtonLink } from "../../../tailwind/ui/buttons/Button" +import { cn } from "@/lib/utils/cn" export type BentoBoxProps = HTMLAttributes<HTMLDivElement> & { action: string @@ -39,9 +39,9 @@ const BentoBox = ({ <h3 className="mb-2 text-3xl font-black">{title}</h3> <p className="mb-8 text-md">{children}</p> <ButtonLink - linkProps={{ href: href }} - className="!border-body text-md !text-body" // TODO: Check this override - variant="outline" + href={href} + // TODO: Check this cn override + className="border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" > {action} <MdChevronRight /> </ButtonLink> diff --git a/src/components/BentoBoxes/index.tsx b/src/components/BentoBoxes/index.tsx index 6e6b4aede16..03e78e76eea 100644 --- a/src/components/BentoBoxes/index.tsx +++ b/src/components/BentoBoxes/index.tsx @@ -8,6 +8,7 @@ import BentoBox, { BentoBoxProps } from "./Box" import Title from "./Title" import "swiper/css" + import "swiper/css/effect-cards" import "swiper/css/navigation" import "swiper/css/pagination" diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 231cd1dec31..b2c3ccadb0d 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -1,9 +1,9 @@ -import { FunctionComponent, ReactNode, SVGProps } from "react" +import type { FC, ReactNode, SVGProps } from "react" import { cn } from "@/lib/utils/cn" type SvgButtonLinkProps = { - Svg: FunctionComponent<SVGProps<SVGSVGElement>> + Svg: FC<SVGProps<SVGElement>> label?: string children: ReactNode href: string diff --git a/src/components/FeedbackCard.tsx b/src/components/FeedbackCard.tsx index 821a89c6ce4..230935cc6b5 100644 --- a/src/components/FeedbackCard.tsx +++ b/src/components/FeedbackCard.tsx @@ -5,12 +5,11 @@ import { useTranslation } from "next-i18next" import type { Lang } from "@/lib/types" import { FeedbackThumbsUpIcon } from "@/components/icons" +import { Button } from "@/components/ui/buttons/Button" import { trackCustomEvent } from "@/lib/utils/matomo" import { isLangRightToLeft } from "@/lib/utils/translations" -import { Button } from "../../tailwind/ui/buttons/Button" - import Translation from "./Translation" import { useSurvey } from "@/hooks/useSurvey" diff --git a/src/components/Morpher.tsx b/src/components/Morpher.tsx index ec89f1b2d6e..0a8f7c91d87 100644 --- a/src/components/Morpher.tsx +++ b/src/components/Morpher.tsx @@ -1,14 +1,14 @@ import { useEffect, useState } from "react" import { useMediaQuery } from "usehooks-ts" +import { Button } from "@/components/ui/buttons/Button" + import { DESKTOP_LANGUAGE_BUTTON_NAME, HAMBURGER_BUTTON_ID, MOBILE_LANGUAGE_BUTTON_NAME, } from "@/lib/constants" -import { Button } from "../../tailwind/ui/buttons/Button" - const Morpher = () => { const [state, setState] = useState({ text: "Ethereum", diff --git a/src/components/WindowBox/index.tsx b/src/components/WindowBox/index.tsx index f233a02ba12..c7a82d49eef 100644 --- a/src/components/WindowBox/index.tsx +++ b/src/components/WindowBox/index.tsx @@ -1,8 +1,8 @@ -import { FunctionComponent, ReactNode, SVGProps } from "react" +import type { FC, ReactNode, SVGProps } from "react" type WindowBoxProps = { title: ReactNode - Svg: FunctionComponent<SVGProps<SVGSVGElement>> + Svg: FC<SVGProps<SVGElement>> children?: ReactNode } diff --git a/src/data/placeholders/content-contributing-translation-program-translatathon-translatathon-hubs-data.json b/src/data/placeholders/content-contributing-translation-program-translatathon-translatathon-hubs-data.json new file mode 100644 index 00000000000..34cfd9c5b0b --- /dev/null +++ b/src/data/placeholders/content-contributing-translation-program-translatathon-translatathon-hubs-data.json @@ -0,0 +1,6 @@ +{ + "/content/contributing/translation-program/translatathon/translatathon-hubs/local-communities.png": { + "hash": "d0fbc65b", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAGCAYAAADKfB7nAAAACXBIWXMAABYlAAAWJQFJUiTwAAABkUlEQVR4nAGGAXn+AAAANPsHFkf8Fg8y/EcdOvy+jpT88cjC/K+QmPyljqH848TS/P/ZyPx/cYP8R0p+/AAKR/xjVn/8b0li/BwMOPoAAAA4/xIgU/8YFTv/gEBV/3xum/9dhNb/ZWOf/3+Pv/+di7//e3bI/1Oz1/8mSX//AAA//0w5af84Hkn/IhA6/wAABDz/Dx9S/0EsTP+GSFz/p2hy/7fF2f+xttH/5Nfd/8uqw/+0tOT/zYmI/4J4n/+Yg47/t2Vd/zwpVv86JE3/AAAPSv8LI2D/FhtV/w0VUf9bQGv/n36k/5aKq//2+v//0fr//2likv/Nj6f/04Wh/3lacv9SKUj/AhFP/ykjWf8AAR5b/xMoaf80SI//M0eS/4NtpP+jb6H/l6fO/73e//++2f//YGnc/5h/qv+tYWb/o2hw/4uCp/9MSX7/ABhf/wANLGn5ARZS+ztEgPpPV5L8R1ef+1NeqPqGeqz6cn/F+k1fufpPOoD8f1Fx/8J4cf/7mW7/04t4+1VFcPsAFVb0G7fcN+dEqnEAAAAASUVORK5CYII=" + } +} \ No newline at end of file diff --git a/src/pages/index.tsx b/src/pages/index.tsx index e31a380de92..bfca37491ab 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -30,6 +30,7 @@ import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import StatsBoxGrid from "@/components/StatsBoxGrid" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" +import { ButtonLink } from "@/components/ui/buttons/Button" import { Card, CardContent, CardHeader } from "@/components/ui/card" import WindowBox from "@/components/WindowBox" @@ -49,8 +50,6 @@ import events from "@/data/community-events.json" import { BASE_TIME_UNIT, GITHUB_REPO_URL, XML_FEEDS } from "@/lib/constants" -import { ButtonLink } from "../../tailwind/ui/buttons/Button" - import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" @@ -330,7 +329,10 @@ const HomePage = ({ ))} </div> <div className="flex justify-center py-8 md:justify-start"> - <ButtonLink linkProps={{ href: "/learn/" }} size="lg"> + <ButtonLink + href="/learn/" + className="rounded-lg px-8 py-3 text-lg no-underline" + > Other topics <MdChevronRight /> </ButtonLink> </div> @@ -354,17 +356,18 @@ const HomePage = ({ </p> <div className="flex flex-wrap gap-6 py-8"> <ButtonLink - linkProps={{ href: "/developers/" }} - size="lg" - className="w-fit" + href="/developers/" + className="w-fit rounded-lg px-8 py-3 text-lg no-underline" > Builder's Portal <MdChevronRight /> </ButtonLink> <ButtonLink - linkProps={{ href: "/developers/docs/" }} - size="lg" - className="w-fit" - variant="outline" + href="/developers/docs/" + className={cn( + "w-fit", + "rounded-lg px-8 py-3 text-lg no-underline", // size="lg" + "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" // variant="outline" + )} > Documentation </ButtonLink> @@ -430,22 +433,31 @@ const HomePage = ({ </div> <div className="flex flex-wrap gap-3 py-8"> <ButtonLink - linkProps={{ href: "/discord/", hideArrow: true }} - variant="outline" - size="lg" - className="px-5" + href="/discord/" + hideArrow + className={cn( + "px-5", + "rounded-lg px-8 py-3 text-lg no-underline", + "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" + )} > <FaDiscord /> </ButtonLink> <ButtonLink - linkProps={{ href: GITHUB_REPO_URL, hideArrow: true }} - variant="outline" - size="lg" - className="px-5" + href={GITHUB_REPO_URL} + hideArrow + className={cn( + "px-5", + "rounded-lg px-8 py-3 text-lg no-underline", + "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" + )} > <FaGithub /> </ButtonLink> - <ButtonLink linkProps={{ href: "/community/" }} size="lg"> + <ButtonLink + href="/community/" + className="rounded-lg px-8 py-3 text-lg no-underline" + > More on ethereum.org <MdChevronRight /> </ButtonLink> </div> @@ -479,10 +491,12 @@ const HomePage = ({ </p> </div> <ButtonLink - size="sm" - variant="outline" - className="h-fit w-full text-nowrap border-body !text-body sm:w-fit lg:self-center xl:text-primary" - linkProps={{ href: calendarLink }} + className={cn( + "px-5", + "h-fit w-full text-nowrap border-body !text-body sm:w-fit lg:self-center xl:text-primary", + "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" + )} + href={calendarLink} > Add to calendar </ButtonLink> @@ -609,9 +623,11 @@ const HomePage = ({ </div> <div className="flex justify-center py-8 md:justify-start"> <ButtonLink - linkProps={{ href: "/community/events/" }} - size="lg" - className="mx-auto" + href="/community/events/" + className={cn( + "mx-auto", + "rounded-lg px-8 py-3 text-lg no-underline" + )} > See all events <MdChevronRight /> </ButtonLink> diff --git a/src/styles/global.css b/src/styles/global.css index d99ff218ea7..893bb5d447b 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -6,7 +6,7 @@ @import "./colors.css"; @import "./semantic-tokens.css"; @import "./fonts.css"; -@import "./docsearch.css"; +@import "@/styles/docsearch.css"; @layer base { :root { @@ -19,7 +19,8 @@ /* ! Deprecating primary-dark */ --primary-dark: var(--blue-700); - --disabled: var(--gray-400); + --neutral: hsla(var(--white)); + --disabled: hsla(var(--gray-400)); /* Complementary Set */ --attention: var(--yellow-500); @@ -84,11 +85,13 @@ .dark { /* Semantic Colors: Dark mode */ /* ! Deprecating primary-light */ - --primary-light: var(--orange-100); + --primary-light: hsla(var(--orange-100)); /* ! Deprecating primary-dark */ - --primary-dark: var(--orange-800); + --primary-dark: hsla(var(--orange-800)); - --disabled: var(--gray-500); + /* ! Deprecating neutral */ + --neutral: hsla(var(--gray-900)); + --disabled: hsla(var(--gray-500)); /* Complementary Set */ --attention-outline: var(--attention-light); diff --git a/tailwind.config.ts b/tailwind.config.ts index 69530a4db68..5d4e64aa449 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -132,6 +132,8 @@ const config = { DEFAULT: "hsla(var(--background))", highlight: "hsla(var(--background-highlight))", }, + neutral: "hsla(var(--neutral))", // TODO: Migrate/deprecate + "switch-background": "hsla(var(--switch-background))", // TODO: Migrate/deprecate disabled: "hsla(var(--disabled))", "tooltip-shadow": "var(--tooltip-shadow)", "hub-hero-content-bg": "var(--hub-hero-content-bg)", From 2b26f1289d328112f7c16ae50e5573cce0d1d25f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:27:25 -0700 Subject: [PATCH 101/273] refactor: use dark class for color mode management deprecate data-theme --- src/components/ThemeProvider.tsx | 2 +- src/styles/docsearch.css | 3 ++- src/styles/global.css | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/ThemeProvider.tsx b/src/components/ThemeProvider.tsx index d1595b91c04..c7cc096e453 100644 --- a/src/components/ThemeProvider.tsx +++ b/src/components/ThemeProvider.tsx @@ -27,7 +27,7 @@ const ThemeProvider = ({ children }: Pick<ThemeProviderProps, "children">) => { const theme = useMemo(() => merge(customTheme, { direction }), [direction]) return ( <NextThemesProvider - attribute="data-theme" + attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange diff --git a/src/styles/docsearch.css b/src/styles/docsearch.css index dfce14f0ccb..91f6906a80d 100644 --- a/src/styles/docsearch.css +++ b/src/styles/docsearch.css @@ -38,7 +38,8 @@ --docsearch-modal-width: 650px; --docsearch-hit-height: fit-content; } -html[data-theme="dark"] { + +.dark { --docsearch-modal-background: theme(backgroundColor.background.DEFAULT); --docsearch-highlight-color: theme(colors.primary.hover); } diff --git a/src/styles/global.css b/src/styles/global.css index 34b40c21099..4cafd84a95b 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -118,7 +118,7 @@ --table-item-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); } - [data-theme="dark"] { + .dark { /* Semantic Colors: Dark mode */ --primary: var(--orange-500); --primary-high-contrast: var(--orange-100); From 0942da2f1aa276a07aef5fb6f9e9609b23a06cab Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 15 Aug 2024 21:01:28 -0400 Subject: [PATCH 102/273] fix: sync color themes with system --- src/components/Nav/useNav.ts | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/components/Nav/useNav.ts b/src/components/Nav/useNav.ts index 4265832f2c9..0b3a2c20716 100644 --- a/src/components/Nav/useNav.ts +++ b/src/components/Nav/useNav.ts @@ -1,3 +1,4 @@ +import { useEffect } from "react" import { useTranslation } from "next-i18next" import { useTheme } from "next-themes" import { @@ -26,15 +27,11 @@ import { trackCustomEvent } from "@/lib/utils/matomo" import type { NavSections } from "./types" -import useColorModeValue from "@/hooks/useColorModeValue" - export const useNav = () => { const { t } = useTranslation("common") - const { theme, setTheme } = useTheme() + const { setTheme, resolvedTheme, systemTheme } = useTheme() const { setColorMode } = useColorMode() - const colorToggleEvent = useColorModeValue("dark mode", "light mode") // This will be inverted as the state is changing - const linkSections: NavSections = { learn: { label: t("learn"), @@ -465,13 +462,27 @@ export const useNav = () => { }, } + // Listen for changes to systemTheme and update theme accordingly + // Important if the user has not engaged the color mode toggle yet, and + // toggles system color preferences + useEffect(() => { + setTheme("system") + setColorMode(systemTheme) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [systemTheme]) + const toggleColorMode = () => { - setTheme(theme === "dark" ? "light" : "dark") - setColorMode(theme === "dark" ? "light" : "dark") + // resolvedTheme: "light" | "dark" = Current resolved color mode from useTheme + const targetTheme = resolvedTheme === "dark" ? "light" : "dark" + // If target theme matches the users system pref, set ls theme to "system" + const lsTheme = targetTheme === systemTheme ? "system" : targetTheme + + setTheme(lsTheme) + setColorMode(targetTheme) trackCustomEvent({ eventCategory: "nav bar", eventAction: "click", - eventName: colorToggleEvent, + eventName: `${targetTheme} mode`, }) } From 04934b943cabaf13256dd2a8e3c8aa1284131ba6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 10:09:00 -0400 Subject: [PATCH 103/273] refactor: svg icons to 1em width/height --- src/components/icons/angle-brackets.svg | 2 +- src/components/icons/block-heap.svg | 2 +- src/components/icons/calendar.svg | 2 +- src/components/icons/eth-token.svg | 2 +- src/components/icons/eth-wallet.svg | 2 +- src/components/icons/layer-2.svg | 2 +- src/components/icons/network-layers.svg | 2 +- src/components/icons/phone-homescreen.svg | 2 +- src/components/icons/roadmap-sign.svg | 2 +- src/components/icons/whitepaper.svg | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/icons/angle-brackets.svg b/src/components/icons/angle-brackets.svg index c9e6664af1a..7dedd4d5cb6 100644 --- a/src/components/icons/angle-brackets.svg +++ b/src/components/icons/angle-brackets.svg @@ -1,4 +1,4 @@ -<svg width="20" height="15" viewBox="0 0 20 15" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 20 15" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M12.0043 1.02773C12.5413 0.490757 13.4119 0.490757 13.9488 1.02773L19.4488 6.52773C19.9858 7.0647 19.9858 7.9353 19.4488 8.47227L13.9488 13.9723C13.4119 14.5092 12.5413 14.5092 12.0043 13.9723C11.4673 13.4353 11.4673 12.5647 12.0043 12.0277L16.532 7.5L12.0043 2.97227C11.4673 2.4353 11.4673 1.5647 12.0043 1.02773Z" fill="currentcolor"/> <path d="M8.44883 1.02773C7.91186 0.490757 7.04126 0.490757 6.50429 1.02773L1.00429 6.52773C0.46732 7.0647 0.46732 7.9353 1.00429 8.47227L6.50429 13.9723C7.04126 14.5092 7.91186 14.5092 8.44883 13.9723C8.9858 13.4353 8.9858 12.5647 8.44883 12.0277L3.92111 7.5L8.44883 2.97227C8.9858 2.4353 8.9858 1.5647 8.44883 1.02773Z" fill="currentcolor"/> </svg> diff --git a/src/components/icons/block-heap.svg b/src/components/icons/block-heap.svg index e0148843025..4319b7b9034 100644 --- a/src/components/icons/block-heap.svg +++ b/src/components/icons/block-heap.svg @@ -1,3 +1,3 @@ -<svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M15.0153 0.372493C15.3011 0.209169 15.652 0.209169 15.9378 0.372493L22.9105 4.35687C23.2001 4.52239 23.3789 4.83044 23.3789 5.16406V12.5933L29.8831 16.31C30.1728 16.4755 30.3516 16.7836 30.3516 17.1172V25.0859C30.3516 25.4196 30.1728 25.7276 29.8831 25.8931L22.9105 29.8775C22.6247 30.0408 22.2738 30.0408 21.988 29.8775L15.4766 26.1567L8.96516 29.8775C8.67935 30.0408 8.32847 30.0408 8.04265 29.8775L1.07 25.8931C0.780328 25.7276 0.601562 25.4196 0.601562 25.0859V17.1172C0.601562 16.7836 0.780328 16.4755 1.07 16.31L7.57422 12.5933V5.16406C7.57422 4.83044 7.75298 4.52239 8.04265 4.35687L15.0153 0.372493ZM8.50391 14.2036L3.40509 17.1172L8.50391 20.0308L13.6027 17.1172L8.50391 14.2036ZM14.5469 18.7192L9.43359 21.6411V27.4683L14.5469 24.5464V18.7192ZM16.4062 24.5464L21.5195 27.4683V21.6411L16.4062 18.7192V24.5464ZM17.3504 17.1172L22.4492 20.0308L27.548 17.1172L22.4492 14.2036L17.3504 17.1172ZM21.5195 12.5933V6.76608L16.4062 9.68796V15.5152L21.5195 12.5933ZM14.5469 15.5152V9.68796L9.43359 6.76608V12.5933L14.5469 15.5152ZM10.3778 5.16406L15.4766 8.07767L20.5754 5.16406L15.4766 2.25046L10.3778 5.16406ZM28.4922 18.7192L23.3789 21.6411V27.4683L28.4922 24.5464V18.7192ZM7.57422 27.4683V21.6411L2.46094 18.7192V24.5464L7.57422 27.4683Z" fill="currentcolor"/> </svg> diff --git a/src/components/icons/calendar.svg b/src/components/icons/calendar.svg index c319e2ed94f..aa365893c54 100644 --- a/src/components/icons/calendar.svg +++ b/src/components/icons/calendar.svg @@ -1,3 +1,3 @@ -<svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M3.58828 0.1875C3.85752 0.1875 4.07578 0.39212 4.07578 0.644531V1.10156H11.8758V0.644531C11.8758 0.39212 12.094 0.1875 12.3633 0.1875C12.6325 0.1875 12.8508 0.39212 12.8508 0.644531V1.10156H13.8258C14.9027 1.10156 15.7758 1.92004 15.7758 2.92969V12.9844C15.7758 13.994 14.9027 14.8125 13.8258 14.8125H2.12578C1.04883 14.8125 0.175781 13.994 0.175781 12.9844V2.92969C0.175781 1.92004 1.04883 1.10156 2.12578 1.10156H3.10078V0.644531C3.10078 0.39212 3.31904 0.1875 3.58828 0.1875ZM1.15078 3.84375V12.9844C1.15078 13.4892 1.5873 13.8984 2.12578 13.8984H13.8258C14.3643 13.8984 14.8008 13.4892 14.8008 12.9844V3.84375H1.15078Z" fill="currentcolor" fill-opacity="0.9"/> </svg> diff --git a/src/components/icons/eth-token.svg b/src/components/icons/eth-token.svg index 3fd9af8a4fc..0dbbf26a378 100644 --- a/src/components/icons/eth-token.svg +++ b/src/components/icons/eth-token.svg @@ -1,4 +1,4 @@ -<svg width="49" height="48" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="path-1-outside-1_7288_10920" maskUnits="userSpaceOnUse" x="23.7852" y="24.5767" width="10" height="12" fill="black"> <rect fill="white" x="23.7852" y="24.5767" width="10" height="12"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M32.7287 25.5767L24.7852 30.197V36.1118L32.7287 25.5767ZM31.1821 26.9479L24.9889 30.5502V35.1617L31.1821 26.9479Z"/> diff --git a/src/components/icons/eth-wallet.svg b/src/components/icons/eth-wallet.svg index 2e3235b664e..dfa521e49a2 100644 --- a/src/components/icons/eth-wallet.svg +++ b/src/components/icons/eth-wallet.svg @@ -1,4 +1,4 @@ -<svg width="49" height="48" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 49 48" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect x="2.14453" y="15.9893" width="44.3751" height="29.7866" rx="4.5" stroke="currentcolor" stroke-width="3"/> <path d="M4.26953 16.5966L22.9943 5.55738C26.9941 3.19933 32.0415 6.08292 32.0415 10.726V16.5966" stroke="currentcolor" stroke-width="3"/> <mask id="path-3-outside-1_7288_10920" maskUnits="userSpaceOnUse" x="23.4766" y="31.2002" width="8" height="11" fill="black"> diff --git a/src/components/icons/layer-2.svg b/src/components/icons/layer-2.svg index f32bf2d5d96..c30ee34895a 100644 --- a/src/components/icons/layer-2.svg +++ b/src/components/icons/layer-2.svg @@ -1,4 +1,4 @@ -<svg width="51" height="36" viewBox="0 0 51 36" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 51 36" fill="currentcolor" xmlns="http://www.w3.org/2000/svg"> <path d="M20.9142 15.7847L22.4273 14.946L16.4956 11.3819L22.5481 8.02694L21.0652 7.13592L13.4996 11.3296L20.9142 15.7847Z" /> <path d="M29.8117 21.1309L31.3248 20.2921L25.3932 16.728L26.9063 15.8893L32.8379 19.4534L37.3773 16.9372L29.9627 12.4821L28.4496 13.3208L34.3812 16.8849L32.8681 17.7236L26.9365 14.1595L22.3971 16.6757L29.8117 21.1309Z" /> <path fill-rule="evenodd" clip-rule="evenodd" d="M24.2654 1.21246C24.9331 0.826967 26.0157 0.826965 26.6834 1.21246L48.4693 13.7906C49.137 14.1761 49.137 14.8011 48.4693 15.1866L26.6834 27.7647C26.0157 28.1502 24.9331 28.1502 24.2654 27.7647L2.47949 15.1866C1.8118 14.8011 1.81179 14.1761 2.47949 13.7906L24.2654 1.21246ZM25.4744 2.86574L5.34306 14.4886L25.4744 26.1114L45.6057 14.4886L25.4744 2.86574Z" /> diff --git a/src/components/icons/network-layers.svg b/src/components/icons/network-layers.svg index 22706cd00bd..b78b04d247e 100644 --- a/src/components/icons/network-layers.svg +++ b/src/components/icons/network-layers.svg @@ -1,3 +1,3 @@ -<svg width="53" height="38" viewBox="0 0 53 38" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 53 38" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M27.4564 0.564318C26.9777 0.341842 26.4032 0.341842 25.9245 0.564318L1.51012 11.9106C0.979738 12.1571 0.648438 12.6383 0.648438 13.1621C0.648438 13.6858 0.979738 14.167 1.51012 14.4135L11.0245 18.8352L1.51012 23.2569C0.979738 23.5034 0.648438 23.9846 0.648438 24.5084C0.648438 25.0321 0.979738 25.5133 1.51012 25.7598L25.9245 37.1061C26.4032 37.3286 26.9777 37.3286 27.4564 37.1061L51.8707 25.7598C52.4011 25.5133 52.7324 25.0321 52.7324 24.5084C52.7324 23.9846 52.4011 23.5034 51.8707 23.2569L42.3563 18.8352L51.8707 14.4135C52.4011 14.167 52.7324 13.6858 52.7324 13.1621C52.7324 12.6383 52.4011 12.1571 51.8707 11.9106L27.4564 0.564318ZM38.8976 20.4426L47.6461 24.5084L26.6904 34.2473L5.73476 24.5084L14.4832 20.4426L25.9245 25.7598C26.4032 25.9823 26.9777 25.9823 27.4564 25.7598L38.8976 20.4426ZM26.6904 22.901L5.73476 13.1621L26.6904 3.42314L47.6461 13.1621L26.6904 22.901Z" fill="currentcolor"/> </svg> diff --git a/src/components/icons/phone-homescreen.svg b/src/components/icons/phone-homescreen.svg index bce0c5b9cd3..937a7134bb8 100644 --- a/src/components/icons/phone-homescreen.svg +++ b/src/components/icons/phone-homescreen.svg @@ -1,4 +1,4 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="34" height="52" viewBox="0.75 0 34.25 52" fill="none"> +<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0.75 0 34.25 52" fill="none"> <rect x="5.11719" y="11.1543" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> <rect x="5.11719" y="17.5034" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> <rect x="11.4688" y="11.1543" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> diff --git a/src/components/icons/roadmap-sign.svg b/src/components/icons/roadmap-sign.svg index 48a0e529555..22114ed5704 100644 --- a/src/components/icons/roadmap-sign.svg +++ b/src/components/icons/roadmap-sign.svg @@ -1,3 +1,3 @@ -<svg width="34" height="37" viewBox="0 0 34 37" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="0 0 34 37" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M14.2753 3.04564V8.9924H2.77635C1.50621 8.9924 0.476562 10.0221 0.476562 11.2922V20.4913C0.476562 21.7615 1.50621 22.7911 2.77635 22.7911H14.2753V36.5899H18.8749V22.7911H26.9969C27.6794 22.7911 28.3267 22.488 28.7636 21.9636L33.21 16.6279C33.5654 16.2015 33.5654 15.5821 33.21 15.1556L28.7636 9.8199C28.3267 9.29557 27.6794 8.9924 26.9969 8.9924H18.8749V3.04564C18.8749 2.4357 18.6326 1.85074 18.2013 1.41944C17.3032 0.521319 15.847 0.521319 14.9489 1.41944C14.5176 1.85074 14.2753 2.4357 14.2753 3.04564ZM26.9969 11.2922L30.8298 15.8918L26.9969 20.4913H2.77635L2.77635 11.2922H26.9969Z" fill="currentcolor"/> </svg> diff --git a/src/components/icons/whitepaper.svg b/src/components/icons/whitepaper.svg index 7679a9f94d4..0d96718efd1 100644 --- a/src/components/icons/whitepaper.svg +++ b/src/components/icons/whitepaper.svg @@ -1,4 +1,4 @@ -<svg width="31" height="34" viewBox="1 0 32 35" fill="none" xmlns="http://www.w3.org/2000/svg"> +<svg width="1em" height="1em" viewBox="1 0 32 35" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect x="1.72656" y="1.125" width="30.25" height="33" rx="3" stroke="currentcolor" stroke-width="2"/> <path d="M27.2891 7.5H6.41406" stroke="currentcolor" stroke-width="2" stroke-linecap="round"/> <path d="M27.2891 12.5H6.41406" stroke="currentcolor" stroke-width="2" stroke-linecap="round"/> From 0e9e6672f91d2b6f6dd5ee814c1fdde337670691 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:24:47 -0400 Subject: [PATCH 104/273] fix: event sorting/filtering rm events with invalid dates --- src/pages/index.tsx | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index bfca37491ab..dea993bc5aa 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -235,15 +235,10 @@ const HomePage = ({ ] const upcomingEvents = events - .sort((a, b) => { - const dateA = isValidDate(a.endDate) - ? new Date(a.endDate).getTime() - : -Infinity - const dateB = isValidDate(b.endDate) - ? new Date(b.endDate).getTime() - : -Infinity - return dateA - dateB - }) + .filter((event) => isValidDate(event.endDate)) // Filter out invalid dates + .sort( + (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() + ) .slice(0, 3) // Show 3 events ending soonest const calendar = communityEvents.upcomingEventData From e82e8228a4b67b6d6a8ab9b0a83c4fc8a3345bf0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:05:36 -0400 Subject: [PATCH 105/273] fix: SvgButtonLink styling --- src/components/Buttons/SvgButtonLink.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index b2c3ccadb0d..3af343cf584 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -20,14 +20,14 @@ const SvgButtonLink = ({ }: SvgButtonLinkProps) => ( <a className={cn( - "group rounded-2xl focus:outline focus:outline-4 focus:outline-offset-8", + "group rounded-2xl no-underline focus:outline focus:outline-4 focus:outline-offset-8", className )} {...props} > - <div className="flex flex-col items-center gap-3.5 lg:flex-row"> - <div className="relative grid size-[5em] place-items-center rounded-2xl border shadow-lg group-hover:shadow-2xl group-hover:transition-shadow group-hover:duration-100 group-focus:shadow-2xl group-focus:transition-shadow group-focus:duration-100"> - <Svg className="group-hover:animate-pulse group-focus:animate-pulse" /> + <div className="flex flex-col items-center gap-3.5 lg:flex-row lg:items-center"> + <div className="relative grid aspect-square size-[5em] shrink-0 place-items-center rounded-2xl border shadow-lg group-hover:shadow-2xl group-hover:transition-shadow group-hover:duration-100 group-focus:shadow-2xl group-focus:transition-shadow group-focus:duration-100 lg:self-start"> + <Svg className="text-4xl group-hover:animate-pulse group-focus:animate-pulse" /> </div> <div className="text-center lg:text-start"> {label && <p className="text-xl font-bold">{label}</p>} From 6e3b55b7d8d06d40e59cc2c6679cea052ec17208 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:09:24 -0400 Subject: [PATCH 106/273] fix: homepage styling atches --- src/pages/index.tsx | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index dea993bc5aa..bd79b54604d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -175,34 +175,34 @@ const HomePage = ({ }, ] - const SubHeroCTAs = [ + const subHeroCTAs = [ { label: "Pick a wallet", description: "Create accounts, manage assets", href: "/wallets/find-wallet/", Svg: PickWalletIcon, - colorClass: "text-primary", + colorClass: "text-primary hover:text-primary/80", // TODO: Confirm hover style }, { label: "Get ETH", description: "The currency of Ethereum", href: "/get-eth/", Svg: EthTokenIcon, - colorClass: "text-accent-a", + colorClass: "text-accent-a hover:text-accent-a/80", }, { label: "Choose a network", description: "Enjoy minimal fees", href: "/layer-2/", // TODO: Update with new networks page when ready Svg: ChooseNetworkIcon, - colorClass: "text-accent-b", + colorClass: "text-accent-b hover:text-accent-b/80", }, { label: "Try apps", description: "See what Ethereum can do", href: "/dapps/", Svg: TryAppsIcon, - colorClass: "text-accent-c", + colorClass: "text-accent-c hover:text-accent-c/80", }, ] @@ -267,7 +267,7 @@ const HomePage = ({ </div> <div className="space-y-16 px-4 sm:px-6 md:space-y-32"> <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 md:grid-cols-4 md:gap-x-10"> - {SubHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( + {subHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( <SvgButtonLink key={label} Svg={Svg} @@ -360,7 +360,7 @@ const HomePage = ({ href="/developers/docs/" className={cn( "w-fit", - "rounded-lg px-8 py-3 text-lg no-underline", // size="lg" + "rounded-lg px-8 py-3 text-lg", // size="lg" "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" // variant="outline" )} > @@ -432,7 +432,7 @@ const HomePage = ({ hideArrow className={cn( "px-5", - "rounded-lg px-8 py-3 text-lg no-underline", + "rounded-lg px-8 py-3 text-lg", "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" )} > @@ -443,7 +443,7 @@ const HomePage = ({ hideArrow className={cn( "px-5", - "rounded-lg px-8 py-3 text-lg no-underline", + "rounded-lg px-8 py-3 text-lg", "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" )} > @@ -546,7 +546,7 @@ const HomePage = ({ </h3> <p>We have many community events scheduled around the globe</p> <div className="mt-4 md:mt-16"> - <div className="flex flex-col gap-8 self-stretch sm:flex-row"> + <div className="flex flex-col gap-8 self-stretch md:flex-row"> {upcomingEvents.map( ({ title, @@ -560,7 +560,7 @@ const HomePage = ({ return ( <a href={href} - className="sm:w-1/3 sm:max-w-128" + className="no-underline md:w-1/3 md:max-w-128" key={title} target="_blank" rel="noopener noreferrer" @@ -584,9 +584,9 @@ const HomePage = ({ <EventFallback className="w-full object-cover text-body" /> )} </CardHeader> - <CardContent className="space-y-8 p-2"> + <CardContent className="space-y-8 p-2 text-body"> <div> - <p className="text-2xl">{title}</p> + <p className="text-lg">{title}</p> <p className="text-sm italic text-body-medium"> {(isValidDate(startDate) || isValidDate(endDate)) && @@ -644,7 +644,7 @@ const HomePage = ({ Svg={Layer2Icon} label="How to contribute" href="/contributing/" - className="text-accent-c" + className="text-accent-c hover:text-accent-c/80" // TODO: Confirm hover style > <p className="text-body"> Find out all the different ways you can help ethereum.org grow @@ -655,7 +655,7 @@ const HomePage = ({ Svg={FaGithub} label="GitHub" href={GITHUB_REPO_URL} - className="text-accent-a" + className="text-accent-a hover:text-accent-a/80" > <p className="text-body"> Contribute to code, content, articles etc. @@ -665,7 +665,7 @@ const HomePage = ({ Svg={FaDiscord} label="Discord" href="/discord/" - className="text-primary" + className="text-primary hover:text-primary/80" > <p className="text-body"> To ask questions, coordinate contribution and join community @@ -676,7 +676,7 @@ const HomePage = ({ Svg={FaXTwitter} label="Twitter" href="https://x.com/EthDotOrg" - className="text-accent-b" + className="text-accent-b hover:text-accent-b/80" > <p className="text-body"> To keep up with our updates and important news. From 003dca20d236b1094afde6fdffb0f429504e7afb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:17:43 -0400 Subject: [PATCH 107/273] fix: rss links external, manually fix Vitalik blog links --- src/lib/utils/rss.ts | 6 +++++- src/pages/index.tsx | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts index 4f1a3c9b082..dcb803fe54e 100644 --- a/src/lib/utils/rss.ts +++ b/src/lib/utils/rss.ts @@ -15,7 +15,11 @@ export const sortByPubDate = (items: RSSItem[]) => export const addVitalikBanner = (rssItems: RSSItem[]) => rssItems.map((item) => { if (item.sourceFeedUrl !== VITALIK_BLOG) return item - return { ...item, imgSrc: "/images/vitalik-blog-banner.png" } + return { + ...item, + imgSrc: "/images/vitalik-blog-banner.png", + link: item.link.replace(".ca", ".eth.limo"), + } }) export const polishRSSList = (...items: RSSItem[][]) => { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index bd79b54604d..d2e3938c638 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -513,6 +513,8 @@ const HomePage = ({ href={link} key={title} className="duration-100 hover:scale-105 hover:duration-100" + target="_blank" + rel="noopener noreferrer" > {/* eslint-disable-next-line @next/next/no-img-element */} <img From 273f7e72a605b1e7f24bcf293e77b82dfe84eadf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:20:52 -0400 Subject: [PATCH 108/273] fix: add hsla wrapper to color tokens --- src/styles/colors.css | 1 + tailwind.config.ts | 62 +++++++++++++++++++++---------------------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/styles/colors.css b/src/styles/colors.css index a1e2bca4c76..aa95e08c8e5 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -7,6 +7,7 @@ --white: 0, 0%, 100%; /* #ffffff */ --gray-50: 0, 0%, 97%; /* #f7f7f7 */ --gray-100: 0, 0%, 95%; /* #f2f2f2 */ + --gray-150: 0, 0%, 93%; /* #ececec */ /* TODO: Confirm this shade, used in nav menu */ --gray-200: 0, 0%, 91%; /* #e0e0e0 */ --gray-300: 0, 0%, 78%; /* #bcbcbc */ --gray-400: 0, 0%, 55%; /* #7a7a7a */ diff --git a/tailwind.config.ts b/tailwind.config.ts index 5d4e64aa449..97882cdfdcf 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -64,43 +64,43 @@ const config = { }, colors: { gray: { - 100: "var(--gray-100)", - 150: "var(--gray-150)", - 200: "var(--gray-200)", - 300: "var(--gray-300)", - 400: "var(--gray-400)", - 500: "var(--gray-500)", - 600: "var(--gray-600)", - 700: "var(--gray-700)", - 800: "var(--gray-800)", - 900: "var(--gray-900)", + 100: "hsla(var(--gray-100))", + 150: "hsla(var(--gray-150))", + 200: "hsla(var(--gray-200))", + 300: "hsla(var(--gray-300))", + 400: "hsla(var(--gray-400))", + 500: "hsla(var(--gray-500))", + 600: "hsla(var(--gray-600))", + 700: "hsla(var(--gray-700))", + 800: "hsla(var(--gray-800))", + 900: "hsla(var(--gray-900))", }, blue: { - 50: "var(--blue-50)", - 100: "var(--blue-100)", - 200: "var(--blue-200)", - 300: "var(--blue-300)", - 400: "var(--blue-400)", - 500: "var(--blue-500)", - 600: "var(--blue-600)", - 700: "var(--blue-700)", - 800: "var(--blue-800)", - 900: "var(--blue-900)", + 50: "hsla(var(--blue-50))", + 100: "hsla(var(--blue-100))", + 200: "hsla(var(--blue-200))", + 300: "hsla(var(--blue-300))", + 400: "hsla(var(--blue-400))", + 500: "hsla(var(--blue-500))", + 600: "hsla(var(--blue-600))", + 700: "hsla(var(--blue-700))", + 800: "hsla(var(--blue-800))", + 900: "hsla(var(--blue-900))", }, orange: { - 50: "var(--orange-50)", - 100: "var(--orange-100)", - 200: "var(--orange-200)", - 300: "var(--orange-300)", - 400: "var(--orange-400)", - 500: "var(--orange-500)", - 550: "var(--orange-550)", - 600: "var(--orange-600)", - 700: "var(--orange-700)", - 800: "var(--orange-800)", - 900: "var(--orange-900)", + 50: "hsla(var(--orange-50))", + 100: "hsla(var(--orange-100))", + 200: "hsla(var(--orange-200))", + 300: "hsla(var(--orange-300))", + 400: "hsla(var(--orange-400))", + 500: "hsla(var(--orange-500))", + 550: "hsla(var(--orange-550))", + 600: "hsla(var(--orange-600))", + 700: "hsla(var(--orange-700))", + 800: "hsla(var(--orange-800))", + 900: "hsla(var(--orange-900))", }, primary: { From 72ad778e4b4b0b9447221b38b42b9d987c3ac9f4 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:28:52 -0400 Subject: [PATCH 109/273] styling: clean up news and events cards --- src/pages/index.tsx | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d2e3938c638..250fd4a0614 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -504,7 +504,7 @@ const HomePage = ({ <div className="w-full"> <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> - Ethereum news + News </h3> <p>The latest blog posts and updates from the community</p> <div className="mt-4 grid grid-cols-1 gap-8 md:mt-16 md:grid-cols-3 md:flex-row"> @@ -512,20 +512,17 @@ const HomePage = ({ <a href={link} key={title} - className="duration-100 hover:scale-105 hover:duration-100" + className="no-underline duration-100 hover:scale-105 hover:duration-100" target="_blank" rel="noopener noreferrer" > - {/* eslint-disable-next-line @next/next/no-img-element */} - <img - src={imgSrc} - alt="" - className="h-48 w-full rounded-2xl object-cover" - /> - <div className="flex flex-col space-y-2"> - <div className="mt-3 w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> - {source} - </div> + <div className="flex flex-col space-y-2.5 text-body"> + {/* eslint-disable-next-line @next/next/no-img-element */} + <img + src={imgSrc} + alt="" + className="h-48 w-full rounded-2xl object-cover" + /> {isValidDate(pubDate) && ( <p className="text-sm italic"> {new Intl.DateTimeFormat(locale, { @@ -535,7 +532,10 @@ const HomePage = ({ }).format(new Date(pubDate))} </p> )} - <p className="mb-2 text-2xl">{title}</p> + <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> + {source} + </div> + <p className="mb-2 text-2xl font-bold">{title}</p> </div> </a> ))} @@ -544,7 +544,7 @@ const HomePage = ({ <div className="w-full"> <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> - Ethereum events + Events </h3> <p>We have many community events scheduled around the globe</p> <div className="mt-4 md:mt-16"> From 2e7e30b3d2cdba3b372e5a665e2f3fae4df499da Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:31:27 -0400 Subject: [PATCH 110/273] temp: rm section until designs completed --- src/pages/index.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 250fd4a0614..b0bf512472f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -335,9 +335,7 @@ const HomePage = ({ </div> </HomeSection> - <HomeSection tag="" title="The internet is changing"> - <span className="text-[5rem]">👷‍♀️🚧🔜</span> - </HomeSection> + {/* TODO: Add "The Internet Is Changing" section */} <HomeSection tag="Builders" From 8aadb22bb3fe6788d1041fa34f5f8e157e34dfb9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:34:57 -0400 Subject: [PATCH 111/273] patch: wording --- src/pages/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index b0bf512472f..aabc3f82abe 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -303,9 +303,9 @@ const HomePage = ({ > <div className="flex flex-col space-y-16 lg:space-y-32"> <p className="text-lg"> - Cryptocurrency can feel overwhelming. Don't worry, these - materials are designed to help you understand Ethereum in just a - few minutes. + Crypto can feel overwhelming. Don't worry, these materials + are designed to help you understand Ethereum in just a few + minutes. </p> <div className="flex flex-col space-y-8"> <p className="text-xl font-bold">Popular topics</p> From b5007fb8ab5b61b50cf3ad36232ae5d475804157 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:09:26 -0400 Subject: [PATCH 112/273] style: rm external arrow; use new calendar-add icon --- src/components/icons/calendar-add.svg | 5 +++++ src/pages/index.tsx | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 src/components/icons/calendar-add.svg diff --git a/src/components/icons/calendar-add.svg b/src/components/icons/calendar-add.svg new file mode 100644 index 00000000000..89f48f3033d --- /dev/null +++ b/src/components/icons/calendar-add.svg @@ -0,0 +1,5 @@ +<svg width="1em" height="1em" viewBox="0 0 16 15" fill="currentcolor" fill-opacity="0.9" xmlns="http://www.w3.org/2000/svg"> +<path d="M3.4125 0C3.68174 0 3.9 0.20462 3.9 0.457031V0.914062H11.7V0.457031C11.7 0.20462 11.9183 0 12.1875 0C12.4567 0 12.675 0.20462 12.675 0.457031V0.914062H13.65C14.727 0.914062 15.6 1.73254 15.6 2.74219V12.7969C15.6 13.8065 14.727 14.625 13.65 14.625H1.95C0.873045 14.625 0 13.8065 0 12.7969V2.74219C0 1.73254 0.873045 0.914062 1.95 0.914062H2.925V0.457031C2.925 0.20462 3.14326 0 3.4125 0ZM0.975 3.65625V12.7969C0.975 13.3017 1.41152 13.7109 1.95 13.7109H13.65C14.1885 13.7109 14.625 13.3017 14.625 12.7969V3.65625H0.975Z" /> +<rect x="7.5" y="5.3125" width="1" height="6" /> +<rect x="11" y="7.8125" width="1" height="6" transform="rotate(90 11 7.8125)" /> +</svg> diff --git a/src/pages/index.tsx b/src/pages/index.tsx index aabc3f82abe..3a1a349dce5 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -19,6 +19,7 @@ import HomeSection from "@/components/HomeSection" import AngleBrackets from "@/components/icons/angle-brackets.svg" import BlockHeap from "@/components/icons/block-heap.svg" import Calendar from "@/components/icons/calendar.svg" +import CalendarAdd from "@/components/icons/calendar-add.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" import Layer2Icon from "@/components/icons/layer-2.svg" @@ -490,8 +491,9 @@ const HomePage = ({ "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" )} href={calendarLink} + hideArrow > - Add to calendar + <CalendarAdd /> Add to calendar </ButtonLink> </div> ))} From 44f70b4e08d95e0bed31b2a363879ef0e17b2cbb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 20 Aug 2024 14:19:29 -0400 Subject: [PATCH 113/273] chore: auto-linter --- src/components/BentoBoxes/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/BentoBoxes/index.tsx b/src/components/BentoBoxes/index.tsx index 03e78e76eea..6e6b4aede16 100644 --- a/src/components/BentoBoxes/index.tsx +++ b/src/components/BentoBoxes/index.tsx @@ -8,7 +8,6 @@ import BentoBox, { BentoBoxProps } from "./Box" import Title from "./Title" import "swiper/css" - import "swiper/css/effect-cards" import "swiper/css/navigation" import "swiper/css/pagination" From 127b2cc562321aeed09bad724ca768b5fdef2825 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 05:11:26 -0400 Subject: [PATCH 114/273] refactor: extract EventPreviewCard component --- public/images/event-fallback.png | Bin 0 -> 19344 bytes public/images/event-fallback.svg | 33 --------- src/components/EventCard.tsx | 14 +--- src/components/EventPreviewCard/index.tsx | 77 ++++++++++++++++++++ src/lib/types.ts | 11 +++ src/pages/index.tsx | 83 ++++------------------ 6 files changed, 102 insertions(+), 116 deletions(-) create mode 100644 public/images/event-fallback.png delete mode 100644 public/images/event-fallback.svg create mode 100644 src/components/EventPreviewCard/index.tsx diff --git a/public/images/event-fallback.png b/public/images/event-fallback.png new file mode 100644 index 0000000000000000000000000000000000000000..208bfe04203c1f90dea3f837a564ccfe66b1c479 GIT binary patch literal 19344 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 VkG0)25qN+WgQu&X%Q~loCIH$QLva8A literal 0 HcmV?d00001 diff --git a/public/images/event-fallback.svg b/public/images/event-fallback.svg deleted file mode 100644 index 4f3406f3f3d..00000000000 --- a/public/images/event-fallback.svg +++ /dev/null @@ -1,33 +0,0 @@ -<svg width="800" height="200" viewBox="0 0 800 200" fill="currentcolor" xmlns="http://www.w3.org/2000/svg" fill-opacity="0.125"> -<path d="M27.101 47.5427H20.8674V20.0906C22.5387 20.3197 23.8373 21.7628 23.8373 23.4944C23.8373 25.3839 25.3833 26.9298 27.2728 26.9298H34.1438C35.3255 26.9298 36.3727 26.3251 36.9915 25.4098L74.8038 42.2222L46.7515 58.1832L39.8123 52.2236C36.2909 49.2175 31.7819 47.5427 27.101 47.5427Z" /> -<path d="M73.2229 38.1102L37.5904 22.2642C37.7017 20.8852 38.6146 19.7281 39.9411 19.2859L53.5113 14.7768C54.8647 14.3187 56.0058 13.4669 56.8226 12.3732L60.3472 17.9039L59.6093 18.6417C58.7075 19.5436 58.1921 20.7889 58.1921 22.0772C58.1921 24.7397 60.3823 26.9298 63.0448 26.9298H66.0984L60.3472 17.9039L62.6288 15.622L58.1808 8.64169C58.1881 8.51168 58.1921 8.38088 58.1921 8.2494V6.31694C58.1921 2.5379 61.2841 -0.554035 65.0631 -0.554035H80.8234C83.4859 -0.554035 85.676 1.63609 85.676 4.29859V8.33528C85.676 10.9978 83.4859 13.1879 80.8234 13.1879H67.0815C65.7931 13.1879 64.5478 13.7032 63.646 14.605L62.6288 15.622L69.8346 26.9298H66.0984L73.2229 38.1102Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5 -66C-39.3327 -66 -87 -18.3327 -87 40.5C-87 99.3327 -39.3327 147 19.5 147C78.3327 147 126 99.3327 126 40.5C126 -18.3327 78.3327 -66 19.5 -66ZM105.387 40.5C105.387 50.1623 103.712 59.4811 100.749 68.1556H92.0317C90.1851 68.1556 88.4244 67.4256 87.1361 66.0944L77.1199 55.8904L79.9528 52.1329L79.937 52.142L75.8017 54.5475L73.3942 52.0948C72.1217 50.7941 71.6871 48.9534 72.1026 47.2839L79.964 42.8108L79.9497 42.8042L78.2398 40.1205L78.805 39.5552V35.8192C78.805 34.5308 78.2897 33.2855 77.3879 32.3837L73.3512 28.347C72.4494 27.4452 71.204 26.9298 69.9157 26.9298H69.8346L78.2398 40.1205L73.4368 44.9232C72.7621 45.5979 72.3181 46.4179 72.1026 47.2839L49.2205 60.3033L55.9579 66.0896L19.3085 87.4068L19.3055 87.405L-19.2029 65.0063C-17.9291 63.601 -16.4409 62.3713 -14.769 61.3706L-11.8259 59.6075L19.3086 77.3224L49.2205 60.3033L46.7515 58.1832L20.8674 72.9107V47.5427H17.7502V20.323C17.0021 20.6333 16.3657 21.2018 15.9786 21.9484L11.9419 29.9788C10.7825 32.2978 8.42057 33.7579 5.80101 33.7579H-3.68951C-6.18872 33.7579 -8.38741 32.4056 -9.59001 30.3966L17.7499 18.2403L17.7502 20.323C18.1639 20.1515 18.6115 20.0589 19.0703 20.0589H20.4016C20.5595 20.0589 20.715 20.0697 20.8674 20.0906V18.2405L36.9915 25.4098C37.3621 24.8616 37.579 24.2021 37.579 23.4944V22.5496C37.579 22.4535 37.5828 22.3583 37.5904 22.2642L20.8674 14.8273V-13.3363L17.75 -12.2996V-28.8645L16.9234 -28.0379V-24.6024C16.9234 -22.7129 15.3774 -21.1669 13.4879 -21.1669H6.61694C5.5532 -21.1669 4.59835 -21.6569 3.96691 -22.4223L-34.6053 38.1101L-10.541 27.4084C-10.4586 28.4927 -10.1215 29.5087 -9.59001 30.3966L-36.1861 42.222L-8.80793 57.7995L3.65383 50.3341C6.70282 48.5304 10.1813 47.5427 13.7026 47.5427H17.7502L17.7499 72.9105L-8.80793 57.7995L-11.8259 59.6075L-41.3467 42.8107L-41.3324 42.8043L3.18119 -27.0522V-24.6024C3.18119 -23.7766 3.47673 -23.0165 3.96691 -22.4223L17.7498 -44.0525L17.75 -28.8645L20.8674 -31.9822V-44.0525L26.6938 -34.9089H23.7944L20.8674 -31.9822V-13.3363L22.7208 -13.9524C23.4508 -14.2101 24.095 -14.5966 24.6103 -15.1119L33.5882 -24.0898L56.8226 12.3732C57.6157 11.3112 58.1028 10.021 58.1808 8.64169L35.87 -26.3716L36.1192 -26.6208C37.021 -27.5226 37.5363 -28.7679 37.5363 -30.0562C37.5363 -32.7188 35.3462 -34.9089 32.6837 -34.9089H30.43L35.87 -26.3716L33.5882 -24.0898L26.6938 -34.9089H30.43L23.8238 -45.2757C22.3631 -45.3497 20.8928 -45.3871 19.4138 -45.3871C18.8699 -45.3871 18.3259 -45.3489 17.782 -45.3108C17.51 -45.2917 17.238 -45.2726 16.9661 -45.2583L12.779 -42.1144L19.3088 -52.3617L23.8238 -45.2757C69.2302 -42.9774 105.387 -5.39046 105.387 40.5ZM12.779 -42.1144L4.55565 -35.9395C3.69678 -35.2954 3.18145 -34.2647 3.18145 -33.1911L3.18119 -27.0522L12.779 -42.1144ZM17.75 -12.2996L5.54335 -8.24093C4.12621 -7.76855 3.18145 -6.43729 3.18145 -4.97721C3.18145 -2.14294 2.06492 0.562506 0.0895181 2.53791L-8.54214 11.1696C-9.83044 12.4579 -10.5605 14.2186 -10.5605 16.0222V26.8869C-10.5605 27.0623 -10.5541 27.2362 -10.541 27.4084L17.7498 14.8272L17.75 -12.2996ZM-21.1243 67.505C-20.5537 66.6239 -19.9113 65.7879 -19.2029 65.0063L-41.3354 52.1329L-24.0243 75.0919C-23.8183 73.7772 -23.4797 72.496 -23.0187 71.266L10.901 116.252H8.29147C7.86749 116.252 7.42519 116.233 6.96866 116.197L19.3088 132.563L24.1388 126.157C24.0383 126.162 23.9377 126.167 23.837 126.172V123.123C23.837 122.599 23.7775 122.087 23.6647 121.596L20.8677 125.305V117.476C22.2559 118.439 23.276 119.901 23.6647 121.596L63.9583 68.1556H58.6007L68.144 62.6047L63.9583 68.1556H66.2223C66.7534 68.1556 67.2809 68.1866 67.8025 68.2473L24.1388 126.157C54.5436 124.511 80.7834 107.108 94.6512 81.8976H88.8968C86.8355 81.8976 84.8171 81.0817 83.3571 79.6216L75.9278 72.1923C73.7261 69.9906 70.8657 68.6042 67.8025 68.2473L77.1199 55.8904L75.8017 54.5475L55.9579 66.0896L58.3636 68.1556H58.6007L20.8674 90.1032L20.8677 117.476C19.961 116.846 18.8972 116.429 17.75 116.297V125.336L10.901 116.252H16.9663C17.2311 116.252 17.4928 116.268 17.75 116.297L17.7497 90.1163L17.7296 90.1047L-21.1243 67.505C-21.8883 68.685 -22.524 69.946 -23.0187 71.266L-29.5492 62.6047L-21.1243 67.505ZM-24.0243 75.0919C-24.1797 76.0841 -24.2595 77.0959 -24.2595 78.1186V88.3821C-24.2595 94.523 -21.3823 100.32 -16.4437 104.014L-6.91028 111.185C-3.51586 113.721 2.43108 115.832 6.96866 116.197L-24.0243 75.0919ZM-31.1304 -5.40665C-31.1304 -6.69495 -30.6151 -7.94032 -29.7133 -8.84213L-18.8056 -19.7498C-17.9038 -20.6516 -16.6585 -21.1669 -15.3702 -21.1669C-12.7077 -21.1669 -10.5175 -18.9768 -10.5175 -16.3143V-9.44335C-10.5175 -8.15504 -11.0329 -6.90968 -11.9347 -6.00786L-15.9714 -1.97116C-16.8732 -1.06935 -18.1186 -0.554035 -19.4069 -0.554035H-26.2778C-28.9403 -0.554035 -31.1304 -2.74415 -31.1304 -5.40665ZM1.7585 23.6446L19.3085 15.84L36.1602 23.334L19.3086 15.8413L1.7585 23.6446Z" /> -<path d="M207.101 47.5427H200.867V20.0906C202.539 20.3197 203.837 21.7628 203.837 23.4944C203.837 25.3839 205.383 26.9298 207.273 26.9298H214.144C215.326 26.9298 216.373 26.3251 216.991 25.4098L254.804 42.2222L226.752 58.1832L219.812 52.2236C216.291 49.2175 211.782 47.5427 207.101 47.5427Z" /> -<path d="M253.223 38.1102L217.59 22.2642C217.702 20.8852 218.615 19.7281 219.941 19.2859L233.511 14.7768C234.865 14.3187 236.006 13.4669 236.823 12.3732L240.347 17.9039L239.609 18.6417C238.707 19.5436 238.192 20.7889 238.192 22.0772C238.192 24.7397 240.382 26.9298 243.045 26.9298H246.098L240.347 17.9039L242.629 15.622L238.181 8.64169C238.188 8.51168 238.192 8.38088 238.192 8.2494V6.31694C238.192 2.5379 241.284 -0.554035 245.063 -0.554035H260.823C263.486 -0.554035 265.676 1.63609 265.676 4.29859V8.33528C265.676 10.9978 263.486 13.1879 260.823 13.1879H247.081C245.793 13.1879 244.548 13.7032 243.646 14.605L242.629 15.622L249.835 26.9298H246.098L253.223 38.1102Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M199.5 -66C140.667 -66 93 -18.3327 93 40.5C93 99.3327 140.667 147 199.5 147C258.333 147 306 99.3327 306 40.5C306 -18.3327 258.333 -66 199.5 -66ZM285.387 40.5C285.387 50.1623 283.712 59.4811 280.749 68.1556H272.032C270.185 68.1556 268.424 67.4256 267.136 66.0944L257.12 55.8904L259.953 52.1329L259.937 52.142L255.802 54.5475L253.394 52.0948C252.122 50.7941 251.687 48.9534 252.103 47.2839L259.964 42.8108L259.95 42.8042L258.24 40.1205L258.805 39.5552V35.8192C258.805 34.5308 258.29 33.2855 257.388 32.3837L253.351 28.347C252.449 27.4452 251.204 26.9298 249.916 26.9298H249.835L258.24 40.1205L253.437 44.9232C252.762 45.5979 252.318 46.4179 252.103 47.2839L229.221 60.3033L235.958 66.0896L199.308 87.4068L199.306 87.405L160.797 65.0063C162.071 63.601 163.559 62.3713 165.231 61.3706L168.174 59.6075L199.309 77.3224L229.221 60.3033L226.752 58.1832L200.867 72.9107V47.5427H197.75V20.323C197.002 20.6333 196.366 21.2018 195.979 21.9484L191.942 29.9788C190.782 32.2978 188.421 33.7579 185.801 33.7579H176.31C173.811 33.7579 171.613 32.4056 170.41 30.3966L197.75 18.2403L197.75 20.323C198.164 20.1515 198.612 20.0589 199.07 20.0589H200.402C200.559 20.0589 200.715 20.0697 200.867 20.0906V18.2405L216.991 25.4098C217.362 24.8616 217.579 24.2021 217.579 23.4944V22.5496C217.579 22.4535 217.583 22.3583 217.59 22.2642L200.867 14.8273V-13.3363L197.75 -12.2996V-28.8645L196.923 -28.0379V-24.6024C196.923 -22.7129 195.377 -21.1669 193.488 -21.1669H186.617C185.553 -21.1669 184.598 -21.6569 183.967 -22.4223L145.395 38.1101L169.459 27.4084C169.541 28.4927 169.879 29.5087 170.41 30.3966L143.814 42.222L171.192 57.7995L183.654 50.3341C186.703 48.5304 190.181 47.5427 193.703 47.5427H197.75L197.75 72.9105L171.192 57.7995L168.174 59.6075L138.653 42.8107L138.668 42.8043L183.181 -27.0522V-24.6024C183.181 -23.7766 183.477 -23.0165 183.967 -22.4223L197.75 -44.0525L197.75 -28.8645L200.867 -31.9822V-44.0525L206.694 -34.9089H203.794L200.867 -31.9822V-13.3363L202.721 -13.9524C203.451 -14.2101 204.095 -14.5966 204.61 -15.1119L213.588 -24.0898L236.823 12.3732C237.616 11.3112 238.103 10.021 238.181 8.64169L215.87 -26.3716L216.119 -26.6208C217.021 -27.5226 217.536 -28.7679 217.536 -30.0562C217.536 -32.7188 215.346 -34.9089 212.684 -34.9089H210.43L215.87 -26.3716L213.588 -24.0898L206.694 -34.9089H210.43L203.824 -45.2757C202.363 -45.3497 200.893 -45.3871 199.414 -45.3871C198.87 -45.3871 198.326 -45.3489 197.782 -45.3108C197.51 -45.2917 197.238 -45.2726 196.966 -45.2583L192.779 -42.1144L199.309 -52.3617L203.824 -45.2757C249.23 -42.9774 285.387 -5.39046 285.387 40.5ZM192.779 -42.1144L184.556 -35.9395C183.697 -35.2954 183.181 -34.2647 183.181 -33.1911L183.181 -27.0522L192.779 -42.1144ZM197.75 -12.2996L185.543 -8.24093C184.126 -7.76855 183.181 -6.43729 183.181 -4.97721C183.181 -2.14294 182.065 0.562506 180.09 2.53791L171.458 11.1696C170.17 12.4579 169.44 14.2186 169.44 16.0222V26.8869C169.44 27.0623 169.446 27.2362 169.459 27.4084L197.75 14.8272L197.75 -12.2996ZM158.876 67.505C159.446 66.6239 160.089 65.7879 160.797 65.0063L138.665 52.1329L155.976 75.0919C156.182 73.7772 156.52 72.496 156.981 71.266L190.901 116.252H188.291C187.867 116.252 187.425 116.233 186.969 116.197L199.309 132.563L204.139 126.157C204.038 126.162 203.938 126.167 203.837 126.172V123.123C203.837 122.599 203.777 122.087 203.665 121.596L200.868 125.305V117.476C202.256 118.439 203.276 119.901 203.665 121.596L243.958 68.1556H238.601L248.144 62.6047L243.958 68.1556H246.222C246.753 68.1556 247.281 68.1866 247.803 68.2473L204.139 126.157C234.544 124.511 260.783 107.108 274.651 81.8976H268.897C266.835 81.8976 264.817 81.0817 263.357 79.6216L255.928 72.1923C253.726 69.9906 250.866 68.6042 247.803 68.2473L257.12 55.8904L255.802 54.5475L235.958 66.0896L238.364 68.1556H238.601L200.867 90.1032L200.868 117.476C199.961 116.846 198.897 116.429 197.75 116.297V125.336L190.901 116.252H196.966C197.231 116.252 197.493 116.268 197.75 116.297L197.75 90.1163L197.73 90.1047L158.876 67.505C158.112 68.685 157.476 69.946 156.981 71.266L150.451 62.6047L158.876 67.505ZM155.976 75.0919C155.82 76.0841 155.741 77.0959 155.741 78.1186V88.3821C155.741 94.523 158.618 100.32 163.556 104.014L173.09 111.185C176.484 113.721 182.431 115.832 186.969 116.197L155.976 75.0919ZM148.87 -5.40665C148.87 -6.69495 149.385 -7.94032 150.287 -8.84213L161.194 -19.7498C162.096 -20.6516 163.342 -21.1669 164.63 -21.1669C167.292 -21.1669 169.482 -18.9768 169.482 -16.3143V-9.44335C169.482 -8.15504 168.967 -6.90968 168.065 -6.00786L164.029 -1.97116C163.127 -1.06935 161.881 -0.554035 160.593 -0.554035H153.722C151.06 -0.554035 148.87 -2.74415 148.87 -5.40665ZM181.758 23.6446L199.308 15.84L216.16 23.334L199.309 15.8413L181.758 23.6446Z" /> -<path d="M387.101 47.5427H380.867V20.0906C382.539 20.3197 383.837 21.7628 383.837 23.4944C383.837 25.3839 385.383 26.9298 387.273 26.9298H394.144C395.326 26.9298 396.373 26.3251 396.991 25.4098L434.804 42.2222L406.752 58.1832L399.812 52.2236C396.291 49.2175 391.782 47.5427 387.101 47.5427Z" /> -<path d="M433.223 38.1102L397.59 22.2642C397.702 20.8852 398.615 19.7281 399.941 19.2859L413.511 14.7768C414.865 14.3187 416.006 13.4669 416.823 12.3732L420.347 17.9039L419.609 18.6417C418.707 19.5436 418.192 20.7889 418.192 22.0772C418.192 24.7397 420.382 26.9298 423.045 26.9298H426.098L420.347 17.9039L422.629 15.622L418.181 8.64169C418.188 8.51168 418.192 8.38088 418.192 8.2494V6.31694C418.192 2.5379 421.284 -0.554035 425.063 -0.554035H440.823C443.486 -0.554035 445.676 1.63609 445.676 4.29859V8.33528C445.676 10.9978 443.486 13.1879 440.823 13.1879H427.081C425.793 13.1879 424.548 13.7032 423.646 14.605L422.629 15.622L429.835 26.9298H426.098L433.223 38.1102Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M379.5 -66C320.667 -66 273 -18.3327 273 40.5C273 99.3327 320.667 147 379.5 147C438.333 147 486 99.3327 486 40.5C486 -18.3327 438.333 -66 379.5 -66ZM465.387 40.5C465.387 50.1623 463.712 59.4811 460.749 68.1556H452.032C450.185 68.1556 448.424 67.4256 447.136 66.0944L437.12 55.8904L439.953 52.1329L439.937 52.142L435.802 54.5475L433.394 52.0948C432.122 50.7941 431.687 48.9534 432.103 47.2839L439.964 42.8108L439.95 42.8042L438.24 40.1205L438.805 39.5552V35.8192C438.805 34.5308 438.29 33.2855 437.388 32.3837L433.351 28.347C432.449 27.4452 431.204 26.9298 429.916 26.9298H429.835L438.24 40.1205L433.437 44.9232C432.762 45.5979 432.318 46.4179 432.103 47.2839L409.221 60.3033L415.958 66.0896L379.308 87.4068L379.306 87.405L340.797 65.0063C342.071 63.601 343.559 62.3713 345.231 61.3706L348.174 59.6075L379.309 77.3224L409.221 60.3033L406.752 58.1832L380.867 72.9107V47.5427H377.75V20.323C377.002 20.6333 376.366 21.2018 375.979 21.9484L371.942 29.9788C370.782 32.2978 368.421 33.7579 365.801 33.7579H356.31C353.811 33.7579 351.613 32.4056 350.41 30.3966L377.75 18.2403L377.75 20.323C378.164 20.1515 378.612 20.0589 379.07 20.0589H380.402C380.559 20.0589 380.715 20.0697 380.867 20.0906V18.2405L396.991 25.4098C397.362 24.8616 397.579 24.2021 397.579 23.4944V22.5496C397.579 22.4535 397.583 22.3583 397.59 22.2642L380.867 14.8273V-13.3363L377.75 -12.2996V-28.8645L376.923 -28.0379V-24.6024C376.923 -22.7129 375.377 -21.1669 373.488 -21.1669H366.617C365.553 -21.1669 364.598 -21.6569 363.967 -22.4223L325.395 38.1101L349.459 27.4084C349.541 28.4927 349.879 29.5087 350.41 30.3966L323.814 42.222L351.192 57.7995L363.654 50.3341C366.703 48.5304 370.181 47.5427 373.703 47.5427H377.75L377.75 72.9105L351.192 57.7995L348.174 59.6075L318.653 42.8107L318.668 42.8043L363.181 -27.0522V-24.6024C363.181 -23.7766 363.477 -23.0165 363.967 -22.4223L377.75 -44.0525L377.75 -28.8645L380.867 -31.9822V-44.0525L386.694 -34.9089H383.794L380.867 -31.9822V-13.3363L382.721 -13.9524C383.451 -14.2101 384.095 -14.5966 384.61 -15.1119L393.588 -24.0898L416.823 12.3732C417.616 11.3112 418.103 10.021 418.181 8.64169L395.87 -26.3716L396.119 -26.6208C397.021 -27.5226 397.536 -28.7679 397.536 -30.0562C397.536 -32.7188 395.346 -34.9089 392.684 -34.9089H390.43L395.87 -26.3716L393.588 -24.0898L386.694 -34.9089H390.43L383.824 -45.2757C382.363 -45.3497 380.893 -45.3871 379.414 -45.3871C378.87 -45.3871 378.326 -45.3489 377.782 -45.3108C377.51 -45.2917 377.238 -45.2726 376.966 -45.2583L372.779 -42.1144L379.309 -52.3617L383.824 -45.2757C429.23 -42.9774 465.387 -5.39046 465.387 40.5ZM372.779 -42.1144L364.556 -35.9395C363.697 -35.2954 363.181 -34.2647 363.181 -33.1911L363.181 -27.0522L372.779 -42.1144ZM377.75 -12.2996L365.543 -8.24093C364.126 -7.76855 363.181 -6.43729 363.181 -4.97721C363.181 -2.14294 362.065 0.562506 360.09 2.53791L351.458 11.1696C350.17 12.4579 349.44 14.2186 349.44 16.0222V26.8869C349.44 27.0623 349.446 27.2362 349.459 27.4084L377.75 14.8272L377.75 -12.2996ZM338.876 67.505C339.446 66.6239 340.089 65.7879 340.797 65.0063L318.665 52.1329L335.976 75.0919C336.182 73.7772 336.52 72.496 336.981 71.266L370.901 116.252H368.291C367.867 116.252 367.425 116.233 366.969 116.197L379.309 132.563L384.139 126.157C384.038 126.162 383.938 126.167 383.837 126.172V123.123C383.837 122.599 383.777 122.087 383.665 121.596L380.868 125.305V117.476C382.256 118.439 383.276 119.901 383.665 121.596L423.958 68.1556H418.601L428.144 62.6047L423.958 68.1556H426.222C426.753 68.1556 427.281 68.1866 427.803 68.2473L384.139 126.157C414.544 124.511 440.783 107.108 454.651 81.8976H448.897C446.835 81.8976 444.817 81.0817 443.357 79.6216L435.928 72.1923C433.726 69.9906 430.866 68.6042 427.803 68.2473L437.12 55.8904L435.802 54.5475L415.958 66.0896L418.364 68.1556H418.601L380.867 90.1032L380.868 117.476C379.961 116.846 378.897 116.429 377.75 116.297V125.336L370.901 116.252H376.966C377.231 116.252 377.493 116.268 377.75 116.297L377.75 90.1163L377.73 90.1047L338.876 67.505C338.112 68.685 337.476 69.946 336.981 71.266L330.451 62.6047L338.876 67.505ZM335.976 75.0919C335.82 76.0841 335.741 77.0959 335.741 78.1186V88.3821C335.741 94.523 338.618 100.32 343.556 104.014L353.09 111.185C356.484 113.721 362.431 115.832 366.969 116.197L335.976 75.0919ZM328.87 -5.40665C328.87 -6.69495 329.385 -7.94032 330.287 -8.84213L341.194 -19.7498C342.096 -20.6516 343.342 -21.1669 344.63 -21.1669C347.292 -21.1669 349.482 -18.9768 349.482 -16.3143V-9.44335C349.482 -8.15504 348.967 -6.90968 348.065 -6.00786L344.029 -1.97116C343.127 -1.06935 341.881 -0.554035 340.593 -0.554035H333.722C331.06 -0.554035 328.87 -2.74415 328.87 -5.40665ZM361.758 23.6446L379.308 15.84L396.16 23.334L379.309 15.8413L361.758 23.6446Z" /> -<path d="M567.101 47.5427H560.867V20.0906C562.539 20.3197 563.837 21.7628 563.837 23.4944C563.837 25.3839 565.383 26.9298 567.273 26.9298H574.144C575.326 26.9298 576.373 26.3251 576.991 25.4098L614.804 42.2222L586.752 58.1832L579.812 52.2236C576.291 49.2175 571.782 47.5427 567.101 47.5427Z" /> -<path d="M613.223 38.1102L577.59 22.2642C577.702 20.8852 578.615 19.7281 579.941 19.2859L593.511 14.7768C594.865 14.3187 596.006 13.4669 596.823 12.3732L600.347 17.9039L599.609 18.6417C598.707 19.5436 598.192 20.7889 598.192 22.0772C598.192 24.7397 600.382 26.9298 603.045 26.9298H606.098L600.347 17.9039L602.629 15.622L598.181 8.64169C598.188 8.51168 598.192 8.38088 598.192 8.2494V6.31694C598.192 2.5379 601.284 -0.554035 605.063 -0.554035H620.823C623.486 -0.554035 625.676 1.63609 625.676 4.29859V8.33528C625.676 10.9978 623.486 13.1879 620.823 13.1879H607.081C605.793 13.1879 604.548 13.7032 603.646 14.605L602.629 15.622L609.835 26.9298H606.098L613.223 38.1102Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M559.5 -66C500.667 -66 453 -18.3327 453 40.5C453 99.3327 500.667 147 559.5 147C618.333 147 666 99.3327 666 40.5C666 -18.3327 618.333 -66 559.5 -66ZM645.387 40.5C645.387 50.1623 643.712 59.4811 640.749 68.1556H632.032C630.185 68.1556 628.424 67.4256 627.136 66.0944L617.12 55.8904L619.953 52.1329L619.937 52.142L615.802 54.5475L613.394 52.0948C612.122 50.7941 611.687 48.9534 612.103 47.2839L619.964 42.8108L619.95 42.8042L618.24 40.1205L618.805 39.5552V35.8192C618.805 34.5308 618.29 33.2855 617.388 32.3837L613.351 28.347C612.449 27.4452 611.204 26.9298 609.916 26.9298H609.835L618.24 40.1205L613.437 44.9232C612.762 45.5979 612.318 46.4179 612.103 47.2839L589.221 60.3033L595.958 66.0896L559.308 87.4068L559.306 87.405L520.797 65.0063C522.071 63.601 523.559 62.3713 525.231 61.3706L528.174 59.6075L559.309 77.3224L589.221 60.3033L586.752 58.1832L560.867 72.9107V47.5427H557.75V20.323C557.002 20.6333 556.366 21.2018 555.979 21.9484L551.942 29.9788C550.782 32.2978 548.421 33.7579 545.801 33.7579H536.31C533.811 33.7579 531.613 32.4056 530.41 30.3966L557.75 18.2403L557.75 20.323C558.164 20.1515 558.612 20.0589 559.07 20.0589H560.402C560.559 20.0589 560.715 20.0697 560.867 20.0906V18.2405L576.991 25.4098C577.362 24.8616 577.579 24.2021 577.579 23.4944V22.5496C577.579 22.4535 577.583 22.3583 577.59 22.2642L560.867 14.8273V-13.3363L557.75 -12.2996V-28.8645L556.923 -28.0379V-24.6024C556.923 -22.7129 555.377 -21.1669 553.488 -21.1669H546.617C545.553 -21.1669 544.598 -21.6569 543.967 -22.4223L505.395 38.1101L529.459 27.4084C529.541 28.4927 529.879 29.5087 530.41 30.3966L503.814 42.222L531.192 57.7995L543.654 50.3341C546.703 48.5304 550.181 47.5427 553.703 47.5427H557.75L557.75 72.9105L531.192 57.7995L528.174 59.6075L498.653 42.8107L498.668 42.8043L543.181 -27.0522V-24.6024C543.181 -23.7766 543.477 -23.0165 543.967 -22.4223L557.75 -44.0525L557.75 -28.8645L560.867 -31.9822V-44.0525L566.694 -34.9089H563.794L560.867 -31.9822V-13.3363L562.721 -13.9524C563.451 -14.2101 564.095 -14.5966 564.61 -15.1119L573.588 -24.0898L596.823 12.3732C597.616 11.3112 598.103 10.021 598.181 8.64169L575.87 -26.3716L576.119 -26.6208C577.021 -27.5226 577.536 -28.7679 577.536 -30.0562C577.536 -32.7188 575.346 -34.9089 572.684 -34.9089H570.43L575.87 -26.3716L573.588 -24.0898L566.694 -34.9089H570.43L563.824 -45.2757C562.363 -45.3497 560.893 -45.3871 559.414 -45.3871C558.87 -45.3871 558.326 -45.3489 557.782 -45.3108C557.51 -45.2917 557.238 -45.2726 556.966 -45.2583L552.779 -42.1144L559.309 -52.3617L563.824 -45.2757C609.23 -42.9774 645.387 -5.39046 645.387 40.5ZM552.779 -42.1144L544.556 -35.9395C543.697 -35.2954 543.181 -34.2647 543.181 -33.1911L543.181 -27.0522L552.779 -42.1144ZM557.75 -12.2996L545.543 -8.24093C544.126 -7.76855 543.181 -6.43729 543.181 -4.97721C543.181 -2.14294 542.065 0.562506 540.09 2.53791L531.458 11.1696C530.17 12.4579 529.44 14.2186 529.44 16.0222V26.8869C529.44 27.0623 529.446 27.2362 529.459 27.4084L557.75 14.8272L557.75 -12.2996ZM518.876 67.505C519.446 66.6239 520.089 65.7879 520.797 65.0063L498.665 52.1329L515.976 75.0919C516.182 73.7772 516.52 72.496 516.981 71.266L550.901 116.252H548.291C547.867 116.252 547.425 116.233 546.969 116.197L559.309 132.563L564.139 126.157C564.038 126.162 563.938 126.167 563.837 126.172V123.123C563.837 122.599 563.777 122.087 563.665 121.596L560.868 125.305V117.476C562.256 118.439 563.276 119.901 563.665 121.596L603.958 68.1556H598.601L608.144 62.6047L603.958 68.1556H606.222C606.753 68.1556 607.281 68.1866 607.803 68.2473L564.139 126.157C594.544 124.511 620.783 107.108 634.651 81.8976H628.897C626.835 81.8976 624.817 81.0817 623.357 79.6216L615.928 72.1923C613.726 69.9906 610.866 68.6042 607.803 68.2473L617.12 55.8904L615.802 54.5475L595.958 66.0896L598.364 68.1556H598.601L560.867 90.1032L560.868 117.476C559.961 116.846 558.897 116.429 557.75 116.297V125.336L550.901 116.252H556.966C557.231 116.252 557.493 116.268 557.75 116.297L557.75 90.1163L557.73 90.1047L518.876 67.505C518.112 68.685 517.476 69.946 516.981 71.266L510.451 62.6047L518.876 67.505ZM515.976 75.0919C515.82 76.0841 515.741 77.0959 515.741 78.1186V88.3821C515.741 94.523 518.618 100.32 523.556 104.014L533.09 111.185C536.484 113.721 542.431 115.832 546.969 116.197L515.976 75.0919ZM508.87 -5.40665C508.87 -6.69495 509.385 -7.94032 510.287 -8.84213L521.194 -19.7498C522.096 -20.6516 523.342 -21.1669 524.63 -21.1669C527.292 -21.1669 529.482 -18.9768 529.482 -16.3143V-9.44335C529.482 -8.15504 528.967 -6.90968 528.065 -6.00786L524.029 -1.97116C523.127 -1.06935 521.881 -0.554035 520.593 -0.554035H513.722C511.06 -0.554035 508.87 -2.74415 508.87 -5.40665ZM541.758 23.6446L559.308 15.84L576.16 23.334L559.309 15.8413L541.758 23.6446Z" /> -<path d="M747.101 47.5427H740.867V20.0906C742.539 20.3197 743.837 21.7628 743.837 23.4944C743.837 25.3839 745.383 26.9298 747.273 26.9298H754.144C755.326 26.9298 756.373 26.3251 756.991 25.4098L794.804 42.2222L766.752 58.1832L759.812 52.2236C756.291 49.2175 751.782 47.5427 747.101 47.5427Z" /> -<path d="M793.223 38.1102L757.59 22.2642C757.702 20.8852 758.615 19.7281 759.941 19.2859L773.511 14.7768C774.865 14.3187 776.006 13.4669 776.823 12.3732L780.347 17.9039L779.609 18.6417C778.707 19.5436 778.192 20.7889 778.192 22.0772C778.192 24.7397 780.382 26.9298 783.045 26.9298H786.098L780.347 17.9039L782.629 15.622L778.181 8.64169C778.188 8.51168 778.192 8.38088 778.192 8.2494V6.31694C778.192 2.5379 781.284 -0.554035 785.063 -0.554035H800.823C803.486 -0.554035 805.676 1.63609 805.676 4.29859V8.33528C805.676 10.9978 803.486 13.1879 800.823 13.1879H787.081C785.793 13.1879 784.548 13.7032 783.646 14.605L782.629 15.622L789.835 26.9298H786.098L793.223 38.1102Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M739.5 -66C680.667 -66 633 -18.3327 633 40.5C633 99.3327 680.667 147 739.5 147C798.333 147 846 99.3327 846 40.5C846 -18.3327 798.333 -66 739.5 -66ZM825.387 40.5C825.387 50.1623 823.712 59.4811 820.749 68.1556H812.032C810.185 68.1556 808.424 67.4256 807.136 66.0944L797.12 55.8904L799.953 52.1329L799.937 52.142L795.802 54.5475L793.394 52.0948C792.122 50.7941 791.687 48.9534 792.103 47.2839L799.964 42.8108L799.95 42.8042L798.24 40.1205L798.805 39.5552V35.8192C798.805 34.5308 798.29 33.2855 797.388 32.3837L793.351 28.347C792.449 27.4452 791.204 26.9298 789.916 26.9298H789.835L798.24 40.1205L793.437 44.9232C792.762 45.5979 792.318 46.4179 792.103 47.2839L769.221 60.3033L775.958 66.0896L739.308 87.4068L739.306 87.405L700.797 65.0063C702.071 63.601 703.559 62.3713 705.231 61.3706L708.174 59.6075L739.309 77.3224L769.221 60.3033L766.752 58.1832L740.867 72.9107V47.5427H737.75V20.323C737.002 20.6333 736.366 21.2018 735.979 21.9484L731.942 29.9788C730.782 32.2978 728.421 33.7579 725.801 33.7579H716.31C713.811 33.7579 711.613 32.4056 710.41 30.3966L737.75 18.2403L737.75 20.323C738.164 20.1515 738.612 20.0589 739.07 20.0589H740.402C740.559 20.0589 740.715 20.0697 740.867 20.0906V18.2405L756.991 25.4098C757.362 24.8616 757.579 24.2021 757.579 23.4944V22.5496C757.579 22.4535 757.583 22.3583 757.59 22.2642L740.867 14.8273V-13.3363L737.75 -12.2996V-28.8645L736.923 -28.0379V-24.6024C736.923 -22.7129 735.377 -21.1669 733.488 -21.1669H726.617C725.553 -21.1669 724.598 -21.6569 723.967 -22.4223L685.395 38.1101L709.459 27.4084C709.541 28.4927 709.879 29.5087 710.41 30.3966L683.814 42.222L711.192 57.7995L723.654 50.3341C726.703 48.5304 730.181 47.5427 733.703 47.5427H737.75L737.75 72.9105L711.192 57.7995L708.174 59.6075L678.653 42.8107L678.668 42.8043L723.181 -27.0522V-24.6024C723.181 -23.7766 723.477 -23.0165 723.967 -22.4223L737.75 -44.0525L737.75 -28.8645L740.867 -31.9822V-44.0525L746.694 -34.9089H743.794L740.867 -31.9822V-13.3363L742.721 -13.9524C743.451 -14.2101 744.095 -14.5966 744.61 -15.1119L753.588 -24.0898L776.823 12.3732C777.616 11.3112 778.103 10.021 778.181 8.64169L755.87 -26.3716L756.119 -26.6208C757.021 -27.5226 757.536 -28.7679 757.536 -30.0562C757.536 -32.7188 755.346 -34.9089 752.684 -34.9089H750.43L755.87 -26.3716L753.588 -24.0898L746.694 -34.9089H750.43L743.824 -45.2757C742.363 -45.3497 740.893 -45.3871 739.414 -45.3871C738.87 -45.3871 738.326 -45.3489 737.782 -45.3108C737.51 -45.2917 737.238 -45.2726 736.966 -45.2583L732.779 -42.1144L739.309 -52.3617L743.824 -45.2757C789.23 -42.9774 825.387 -5.39046 825.387 40.5ZM732.779 -42.1144L724.556 -35.9395C723.697 -35.2954 723.181 -34.2647 723.181 -33.1911L723.181 -27.0522L732.779 -42.1144ZM737.75 -12.2996L725.543 -8.24093C724.126 -7.76855 723.181 -6.43729 723.181 -4.97721C723.181 -2.14294 722.065 0.562506 720.09 2.53791L711.458 11.1696C710.17 12.4579 709.44 14.2186 709.44 16.0222V26.8869C709.44 27.0623 709.446 27.2362 709.459 27.4084L737.75 14.8272L737.75 -12.2996ZM698.876 67.505C699.446 66.6239 700.089 65.7879 700.797 65.0063L678.665 52.1329L695.976 75.0919C696.182 73.7772 696.52 72.496 696.981 71.266L730.901 116.252H728.291C727.867 116.252 727.425 116.233 726.969 116.197L739.309 132.563L744.139 126.157C744.038 126.162 743.938 126.167 743.837 126.172V123.123C743.837 122.599 743.777 122.087 743.665 121.596L740.868 125.305V117.476C742.256 118.439 743.276 119.901 743.665 121.596L783.958 68.1556H778.601L788.144 62.6047L783.958 68.1556H786.222C786.753 68.1556 787.281 68.1866 787.803 68.2473L744.139 126.157C774.544 124.511 800.783 107.108 814.651 81.8976H808.897C806.835 81.8976 804.817 81.0817 803.357 79.6216L795.928 72.1923C793.726 69.9906 790.866 68.6042 787.803 68.2473L797.12 55.8904L795.802 54.5475L775.958 66.0896L778.364 68.1556H778.601L740.867 90.1032L740.868 117.476C739.961 116.846 738.897 116.429 737.75 116.297V125.336L730.901 116.252H736.966C737.231 116.252 737.493 116.268 737.75 116.297L737.75 90.1163L737.73 90.1047L698.876 67.505C698.112 68.685 697.476 69.946 696.981 71.266L690.451 62.6047L698.876 67.505ZM695.976 75.0919C695.82 76.0841 695.741 77.0959 695.741 78.1186V88.3821C695.741 94.523 698.618 100.32 703.556 104.014L713.09 111.185C716.484 113.721 722.431 115.832 726.969 116.197L695.976 75.0919ZM688.87 -5.40665C688.87 -6.69495 689.385 -7.94032 690.287 -8.84213L701.194 -19.7498C702.096 -20.6516 703.342 -21.1669 704.63 -21.1669C707.292 -21.1669 709.482 -18.9768 709.482 -16.3143V-9.44335C709.482 -8.15504 708.967 -6.90968 708.065 -6.00786L704.029 -1.97116C703.127 -1.06935 701.881 -0.554035 700.593 -0.554035H693.722C691.06 -0.554035 688.87 -2.74415 688.87 -5.40665ZM721.758 23.6446L739.308 15.84L756.16 23.334L739.309 15.8413L721.758 23.6446Z" /> -<path d="M87.101 165.543H80.8674V138.091C82.5387 138.32 83.8373 139.763 83.8373 141.494C83.8373 143.384 85.3833 144.93 87.2728 144.93H94.1438C95.3255 144.93 96.3727 144.325 96.9915 143.41L134.804 160.222L106.752 176.183L99.8123 170.224C96.2909 167.218 91.7819 165.543 87.101 165.543Z" /> -<path d="M133.223 156.11L97.5904 140.264C97.7017 138.885 98.6146 137.728 99.9411 137.286L113.511 132.777C114.865 132.319 116.006 131.467 116.823 130.373L120.347 135.904L119.609 136.642C118.707 137.544 118.192 138.789 118.192 140.077C118.192 142.74 120.382 144.93 123.045 144.93H126.098L120.347 135.904L122.629 133.622L118.181 126.642C118.188 126.512 118.192 126.381 118.192 126.249V124.317C118.192 120.538 121.284 117.446 125.063 117.446H140.823C143.486 117.446 145.676 119.636 145.676 122.299V126.335C145.676 128.998 143.486 131.188 140.823 131.188H127.081C125.793 131.188 124.548 131.703 123.646 132.605L122.629 133.622L129.835 144.93H126.098L133.223 156.11Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M79.5 52C20.6673 52 -27 99.6673 -27 158.5C-27 217.333 20.6673 265 79.5 265C138.333 265 186 217.333 186 158.5C186 99.6673 138.333 52 79.5 52ZM165.387 158.5C165.387 168.162 163.712 177.481 160.749 186.156H152.032C150.185 186.156 148.424 185.426 147.136 184.094L137.12 173.89L139.953 170.133L139.937 170.142L135.802 172.547L133.394 170.095C132.122 168.794 131.687 166.953 132.103 165.284L139.964 160.811L139.95 160.804L138.24 158.12L138.805 157.555V153.819C138.805 152.531 138.29 151.285 137.388 150.384L133.351 146.347C132.449 145.445 131.204 144.93 129.916 144.93H129.835L138.24 158.12L133.437 162.923C132.762 163.598 132.318 164.418 132.103 165.284L109.221 178.303L115.958 184.09L79.3085 205.407L79.3055 205.405L40.7971 183.006C42.0709 181.601 43.5591 180.371 45.231 179.371L48.1741 177.607L79.3086 195.322L109.221 178.303L106.752 176.183L80.8674 190.911V165.543H77.7502V138.323C77.0021 138.633 76.3657 139.202 75.9786 139.948L71.9419 147.979C70.7825 150.298 68.4206 151.758 65.801 151.758H56.3105C53.8113 151.758 51.6126 150.406 50.41 148.397L77.7499 136.24L77.7502 138.323C78.1639 138.151 78.6115 138.059 79.0703 138.059H80.4016C80.5595 138.059 80.715 138.07 80.8674 138.091V136.241L96.9915 143.41C97.3621 142.862 97.579 142.202 97.579 141.494V140.55C97.579 140.454 97.5828 140.358 97.5904 140.264L80.8674 132.827V104.664L77.75 105.7V89.1355L76.9234 89.9621V93.3976C76.9234 95.2871 75.3774 96.8331 73.4879 96.8331H66.6169C65.5532 96.8331 64.5983 96.3431 63.9669 95.5777L25.3947 156.11L49.459 145.408C49.5414 146.493 49.8785 147.509 50.41 148.397L23.8139 160.222L51.1921 175.8L63.6538 168.334C66.7028 166.53 70.1813 165.543 73.7026 165.543H77.7502L77.7499 190.91L51.1921 175.8L48.1741 177.607L18.6533 160.811L18.6676 160.804L63.1812 90.9478V93.3976C63.1812 94.2234 63.4767 94.9835 63.9669 95.5777L77.7498 73.9475L77.75 89.1355L80.8674 86.0178V73.9475L86.6938 83.0911H83.7944L80.8674 86.0178V104.664L82.7208 104.048C83.4508 103.79 84.095 103.403 84.6103 102.888L93.5882 93.9102L116.823 130.373C117.616 129.311 118.103 128.021 118.181 126.642L95.87 91.6284L96.1192 91.3792C97.021 90.4774 97.5363 89.2321 97.5363 87.9438C97.5363 85.2812 95.3462 83.0911 92.6837 83.0911H90.43L95.87 91.6284L93.5882 93.9102L86.6938 83.0911H90.43L83.8238 72.7243C82.3631 72.6503 80.8928 72.6129 79.4138 72.6129C78.8699 72.6129 78.3259 72.6511 77.782 72.6892C77.51 72.7083 77.238 72.7274 76.9661 72.7417L72.779 75.8856L79.3088 65.6383L83.8238 72.7243C129.23 75.0226 165.387 112.61 165.387 158.5ZM72.779 75.8856L64.5556 82.0605C63.6968 82.7046 63.1815 83.7353 63.1815 84.8089L63.1812 90.9478L72.779 75.8856ZM77.75 105.7L65.5433 109.759C64.1262 110.231 63.1815 111.563 63.1815 113.023C63.1815 115.857 62.0649 118.563 60.0895 120.538L51.4579 129.17C50.1696 130.458 49.4395 132.219 49.4395 134.022V144.887C49.4395 145.062 49.4459 145.236 49.459 145.408L77.7498 132.827L77.75 105.7ZM38.8757 185.505C39.4463 184.624 40.0887 183.788 40.7971 183.006L18.6646 170.133L35.9757 193.092C36.1817 191.777 36.5203 190.496 36.9813 189.266L70.901 234.252H68.2915C67.8675 234.252 67.4252 234.233 66.9687 234.197L79.3088 250.563L84.1388 244.157C84.0383 244.162 83.9377 244.167 83.837 244.172V241.123C83.837 240.599 83.7775 240.087 83.6647 239.596L80.8677 243.305V235.476C82.2559 236.439 83.276 237.901 83.6647 239.596L123.958 186.156H118.601L128.144 180.605L123.958 186.156H126.222C126.753 186.156 127.281 186.187 127.803 186.247L84.1388 244.157C114.544 242.511 140.783 225.108 154.651 199.898H148.897C146.835 199.898 144.817 199.082 143.357 197.622L135.928 190.192C133.726 187.991 130.866 186.604 127.803 186.247L137.12 173.89L135.802 172.547L115.958 184.09L118.364 186.156H118.601L80.8674 208.103L80.8677 235.476C79.961 234.846 78.8972 234.429 77.75 234.297V243.336L70.901 234.252H76.9663C77.2311 234.252 77.4928 234.268 77.75 234.297L77.7497 208.116L77.7296 208.105L38.8757 185.505C38.1117 186.685 37.476 187.946 36.9813 189.266L30.4508 180.605L38.8757 185.505ZM35.9757 193.092C35.8203 194.084 35.7405 195.096 35.7405 196.119V206.382C35.7405 212.523 38.6177 218.32 43.5563 222.014L53.0897 229.185C56.4841 231.721 62.4311 233.832 66.9687 234.197L35.9757 193.092ZM28.8696 112.593C28.8696 111.305 29.3849 110.06 30.2867 109.158L41.1944 98.2502C42.0962 97.3484 43.3415 96.8331 44.6298 96.8331C47.2923 96.8331 49.4825 99.0232 49.4825 101.686V108.557C49.4825 109.845 48.9671 111.09 48.0653 111.992L44.0286 116.029C43.1268 116.931 41.8814 117.446 40.5931 117.446H33.7222C31.0597 117.446 28.8696 115.256 28.8696 112.593ZM61.7585 141.645L79.3085 133.84L96.1602 141.334L79.3086 133.841L61.7585 141.645Z" /> -<path d="M267.101 165.543H260.867V138.091C262.539 138.32 263.837 139.763 263.837 141.494C263.837 143.384 265.383 144.93 267.273 144.93H274.144C275.326 144.93 276.373 144.325 276.991 143.41L314.804 160.222L286.752 176.183L279.812 170.224C276.291 167.218 271.782 165.543 267.101 165.543Z" /> -<path d="M313.223 156.11L277.59 140.264C277.702 138.885 278.615 137.728 279.941 137.286L293.511 132.777C294.865 132.319 296.006 131.467 296.823 130.373L300.347 135.904L299.609 136.642C298.707 137.544 298.192 138.789 298.192 140.077C298.192 142.74 300.382 144.93 303.045 144.93H306.098L300.347 135.904L302.629 133.622L298.181 126.642C298.188 126.512 298.192 126.381 298.192 126.249V124.317C298.192 120.538 301.284 117.446 305.063 117.446H320.823C323.486 117.446 325.676 119.636 325.676 122.299V126.335C325.676 128.998 323.486 131.188 320.823 131.188H307.081C305.793 131.188 304.548 131.703 303.646 132.605L302.629 133.622L309.835 144.93H306.098L313.223 156.11Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M259.5 52C200.667 52 153 99.6673 153 158.5C153 217.333 200.667 265 259.5 265C318.333 265 366 217.333 366 158.5C366 99.6673 318.333 52 259.5 52ZM345.387 158.5C345.387 168.162 343.712 177.481 340.749 186.156H332.032C330.185 186.156 328.424 185.426 327.136 184.094L317.12 173.89L319.953 170.133L319.937 170.142L315.802 172.547L313.394 170.095C312.122 168.794 311.687 166.953 312.103 165.284L319.964 160.811L319.95 160.804L318.24 158.12L318.805 157.555V153.819C318.805 152.531 318.29 151.285 317.388 150.384L313.351 146.347C312.449 145.445 311.204 144.93 309.916 144.93H309.835L318.24 158.12L313.437 162.923C312.762 163.598 312.318 164.418 312.103 165.284L289.221 178.303L295.958 184.09L259.308 205.407L259.306 205.405L220.797 183.006C222.071 181.601 223.559 180.371 225.231 179.371L228.174 177.607L259.309 195.322L289.221 178.303L286.752 176.183L260.867 190.911V165.543H257.75V138.323C257.002 138.633 256.366 139.202 255.979 139.948L251.942 147.979C250.782 150.298 248.421 151.758 245.801 151.758H236.31C233.811 151.758 231.613 150.406 230.41 148.397L257.75 136.24L257.75 138.323C258.164 138.151 258.612 138.059 259.07 138.059H260.402C260.559 138.059 260.715 138.07 260.867 138.091V136.241L276.991 143.41C277.362 142.862 277.579 142.202 277.579 141.494V140.55C277.579 140.454 277.583 140.358 277.59 140.264L260.867 132.827V104.664L257.75 105.7V89.1355L256.923 89.9621V93.3976C256.923 95.2871 255.377 96.8331 253.488 96.8331H246.617C245.553 96.8331 244.598 96.3431 243.967 95.5777L205.395 156.11L229.459 145.408C229.541 146.493 229.879 147.509 230.41 148.397L203.814 160.222L231.192 175.8L243.654 168.334C246.703 166.53 250.181 165.543 253.703 165.543H257.75L257.75 190.91L231.192 175.8L228.174 177.607L198.653 160.811L198.668 160.804L243.181 90.9478V93.3976C243.181 94.2234 243.477 94.9835 243.967 95.5777L257.75 73.9475L257.75 89.1355L260.867 86.0178V73.9475L266.694 83.0911H263.794L260.867 86.0178V104.664L262.721 104.048C263.451 103.79 264.095 103.403 264.61 102.888L273.588 93.9102L296.823 130.373C297.616 129.311 298.103 128.021 298.181 126.642L275.87 91.6284L276.119 91.3792C277.021 90.4774 277.536 89.2321 277.536 87.9438C277.536 85.2812 275.346 83.0911 272.684 83.0911H270.43L275.87 91.6284L273.588 93.9102L266.694 83.0911H270.43L263.824 72.7243C262.363 72.6503 260.893 72.6129 259.414 72.6129C258.87 72.6129 258.326 72.6511 257.782 72.6892C257.51 72.7083 257.238 72.7274 256.966 72.7417L252.779 75.8856L259.309 65.6383L263.824 72.7243C309.23 75.0226 345.387 112.61 345.387 158.5ZM252.779 75.8856L244.556 82.0605C243.697 82.7046 243.181 83.7353 243.181 84.8089L243.181 90.9478L252.779 75.8856ZM257.75 105.7L245.543 109.759C244.126 110.231 243.181 111.563 243.181 113.023C243.181 115.857 242.065 118.563 240.09 120.538L231.458 129.17C230.17 130.458 229.44 132.219 229.44 134.022V144.887C229.44 145.062 229.446 145.236 229.459 145.408L257.75 132.827L257.75 105.7ZM218.876 185.505C219.446 184.624 220.089 183.788 220.797 183.006L198.665 170.133L215.976 193.092C216.182 191.777 216.52 190.496 216.981 189.266L250.901 234.252H248.291C247.867 234.252 247.425 234.233 246.969 234.197L259.309 250.563L264.139 244.157C264.038 244.162 263.938 244.167 263.837 244.172V241.123C263.837 240.599 263.777 240.087 263.665 239.596L260.868 243.305V235.476C262.256 236.439 263.276 237.901 263.665 239.596L303.958 186.156H298.601L308.144 180.605L303.958 186.156H306.222C306.753 186.156 307.281 186.187 307.803 186.247L264.139 244.157C294.544 242.511 320.783 225.108 334.651 199.898H328.897C326.835 199.898 324.817 199.082 323.357 197.622L315.928 190.192C313.726 187.991 310.866 186.604 307.803 186.247L317.12 173.89L315.802 172.547L295.958 184.09L298.364 186.156H298.601L260.867 208.103L260.868 235.476C259.961 234.846 258.897 234.429 257.75 234.297V243.336L250.901 234.252H256.966C257.231 234.252 257.493 234.268 257.75 234.297L257.75 208.116L257.73 208.105L218.876 185.505C218.112 186.685 217.476 187.946 216.981 189.266L210.451 180.605L218.876 185.505ZM215.976 193.092C215.82 194.084 215.741 195.096 215.741 196.119V206.382C215.741 212.523 218.618 218.32 223.556 222.014L233.09 229.185C236.484 231.721 242.431 233.832 246.969 234.197L215.976 193.092ZM208.87 112.593C208.87 111.305 209.385 110.06 210.287 109.158L221.194 98.2502C222.096 97.3484 223.342 96.8331 224.63 96.8331C227.292 96.8331 229.482 99.0232 229.482 101.686V108.557C229.482 109.845 228.967 111.09 228.065 111.992L224.029 116.029C223.127 116.931 221.881 117.446 220.593 117.446H213.722C211.06 117.446 208.87 115.256 208.87 112.593ZM241.758 141.645L259.308 133.84L276.16 141.334L259.309 133.841L241.758 141.645Z" /> -<path d="M447.101 165.543H440.867V138.091C442.539 138.32 443.837 139.763 443.837 141.494C443.837 143.384 445.383 144.93 447.273 144.93H454.144C455.326 144.93 456.373 144.325 456.991 143.41L494.804 160.222L466.752 176.183L459.812 170.224C456.291 167.218 451.782 165.543 447.101 165.543Z" /> -<path d="M493.223 156.11L457.59 140.264C457.702 138.885 458.615 137.728 459.941 137.286L473.511 132.777C474.865 132.319 476.006 131.467 476.823 130.373L480.347 135.904L479.609 136.642C478.707 137.544 478.192 138.789 478.192 140.077C478.192 142.74 480.382 144.93 483.045 144.93H486.098L480.347 135.904L482.629 133.622L478.181 126.642C478.188 126.512 478.192 126.381 478.192 126.249V124.317C478.192 120.538 481.284 117.446 485.063 117.446H500.823C503.486 117.446 505.676 119.636 505.676 122.299V126.335C505.676 128.998 503.486 131.188 500.823 131.188H487.081C485.793 131.188 484.548 131.703 483.646 132.605L482.629 133.622L489.835 144.93H486.098L493.223 156.11Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M439.5 52C380.667 52 333 99.6673 333 158.5C333 217.333 380.667 265 439.5 265C498.333 265 546 217.333 546 158.5C546 99.6673 498.333 52 439.5 52ZM525.387 158.5C525.387 168.162 523.712 177.481 520.749 186.156H512.032C510.185 186.156 508.424 185.426 507.136 184.094L497.12 173.89L499.953 170.133L499.937 170.142L495.802 172.547L493.394 170.095C492.122 168.794 491.687 166.953 492.103 165.284L499.964 160.811L499.95 160.804L498.24 158.12L498.805 157.555V153.819C498.805 152.531 498.29 151.285 497.388 150.384L493.351 146.347C492.449 145.445 491.204 144.93 489.916 144.93H489.835L498.24 158.12L493.437 162.923C492.762 163.598 492.318 164.418 492.103 165.284L469.221 178.303L475.958 184.09L439.308 205.407L439.306 205.405L400.797 183.006C402.071 181.601 403.559 180.371 405.231 179.371L408.174 177.607L439.309 195.322L469.221 178.303L466.752 176.183L440.867 190.911V165.543H437.75V138.323C437.002 138.633 436.366 139.202 435.979 139.948L431.942 147.979C430.782 150.298 428.421 151.758 425.801 151.758H416.31C413.811 151.758 411.613 150.406 410.41 148.397L437.75 136.24L437.75 138.323C438.164 138.151 438.612 138.059 439.07 138.059H440.402C440.559 138.059 440.715 138.07 440.867 138.091V136.241L456.991 143.41C457.362 142.862 457.579 142.202 457.579 141.494V140.55C457.579 140.454 457.583 140.358 457.59 140.264L440.867 132.827V104.664L437.75 105.7V89.1355L436.923 89.9621V93.3976C436.923 95.2871 435.377 96.8331 433.488 96.8331H426.617C425.553 96.8331 424.598 96.3431 423.967 95.5777L385.395 156.11L409.459 145.408C409.541 146.493 409.879 147.509 410.41 148.397L383.814 160.222L411.192 175.8L423.654 168.334C426.703 166.53 430.181 165.543 433.703 165.543H437.75L437.75 190.91L411.192 175.8L408.174 177.607L378.653 160.811L378.668 160.804L423.181 90.9478V93.3976C423.181 94.2234 423.477 94.9835 423.967 95.5777L437.75 73.9475L437.75 89.1355L440.867 86.0178V73.9475L446.694 83.0911H443.794L440.867 86.0178V104.664L442.721 104.048C443.451 103.79 444.095 103.403 444.61 102.888L453.588 93.9102L476.823 130.373C477.616 129.311 478.103 128.021 478.181 126.642L455.87 91.6284L456.119 91.3792C457.021 90.4774 457.536 89.2321 457.536 87.9438C457.536 85.2812 455.346 83.0911 452.684 83.0911H450.43L455.87 91.6284L453.588 93.9102L446.694 83.0911H450.43L443.824 72.7243C442.363 72.6503 440.893 72.6129 439.414 72.6129C438.87 72.6129 438.326 72.6511 437.782 72.6892C437.51 72.7083 437.238 72.7274 436.966 72.7417L432.779 75.8856L439.309 65.6383L443.824 72.7243C489.23 75.0226 525.387 112.61 525.387 158.5ZM432.779 75.8856L424.556 82.0605C423.697 82.7046 423.181 83.7353 423.181 84.8089L423.181 90.9478L432.779 75.8856ZM437.75 105.7L425.543 109.759C424.126 110.231 423.181 111.563 423.181 113.023C423.181 115.857 422.065 118.563 420.09 120.538L411.458 129.17C410.17 130.458 409.44 132.219 409.44 134.022V144.887C409.44 145.062 409.446 145.236 409.459 145.408L437.75 132.827L437.75 105.7ZM398.876 185.505C399.446 184.624 400.089 183.788 400.797 183.006L378.665 170.133L395.976 193.092C396.182 191.777 396.52 190.496 396.981 189.266L430.901 234.252H428.291C427.867 234.252 427.425 234.233 426.969 234.197L439.309 250.563L444.139 244.157C444.038 244.162 443.938 244.167 443.837 244.172V241.123C443.837 240.599 443.777 240.087 443.665 239.596L440.868 243.305V235.476C442.256 236.439 443.276 237.901 443.665 239.596L483.958 186.156H478.601L488.144 180.605L483.958 186.156H486.222C486.753 186.156 487.281 186.187 487.803 186.247L444.139 244.157C474.544 242.511 500.783 225.108 514.651 199.898H508.897C506.835 199.898 504.817 199.082 503.357 197.622L495.928 190.192C493.726 187.991 490.866 186.604 487.803 186.247L497.12 173.89L495.802 172.547L475.958 184.09L478.364 186.156H478.601L440.867 208.103L440.868 235.476C439.961 234.846 438.897 234.429 437.75 234.297V243.336L430.901 234.252H436.966C437.231 234.252 437.493 234.268 437.75 234.297L437.75 208.116L437.73 208.105L398.876 185.505C398.112 186.685 397.476 187.946 396.981 189.266L390.451 180.605L398.876 185.505ZM395.976 193.092C395.82 194.084 395.741 195.096 395.741 196.119V206.382C395.741 212.523 398.618 218.32 403.556 222.014L413.09 229.185C416.484 231.721 422.431 233.832 426.969 234.197L395.976 193.092ZM388.87 112.593C388.87 111.305 389.385 110.06 390.287 109.158L401.194 98.2502C402.096 97.3484 403.342 96.8331 404.63 96.8331C407.292 96.8331 409.482 99.0232 409.482 101.686V108.557C409.482 109.845 408.967 111.09 408.065 111.992L404.029 116.029C403.127 116.931 401.881 117.446 400.593 117.446H393.722C391.06 117.446 388.87 115.256 388.87 112.593ZM421.758 141.645L439.308 133.84L456.16 141.334L439.309 133.841L421.758 141.645Z" /> -<path d="M627.101 165.543H620.867V138.091C622.539 138.32 623.837 139.763 623.837 141.494C623.837 143.384 625.383 144.93 627.273 144.93H634.144C635.326 144.93 636.373 144.325 636.991 143.41L674.804 160.222L646.752 176.183L639.812 170.224C636.291 167.218 631.782 165.543 627.101 165.543Z" /> -<path d="M673.223 156.11L637.59 140.264C637.702 138.885 638.615 137.728 639.941 137.286L653.511 132.777C654.865 132.319 656.006 131.467 656.823 130.373L660.347 135.904L659.609 136.642C658.707 137.544 658.192 138.789 658.192 140.077C658.192 142.74 660.382 144.93 663.045 144.93H666.098L660.347 135.904L662.629 133.622L658.181 126.642C658.188 126.512 658.192 126.381 658.192 126.249V124.317C658.192 120.538 661.284 117.446 665.063 117.446H680.823C683.486 117.446 685.676 119.636 685.676 122.299V126.335C685.676 128.998 683.486 131.188 680.823 131.188H667.081C665.793 131.188 664.548 131.703 663.646 132.605L662.629 133.622L669.835 144.93H666.098L673.223 156.11Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M619.5 52C560.667 52 513 99.6673 513 158.5C513 217.333 560.667 265 619.5 265C678.333 265 726 217.333 726 158.5C726 99.6673 678.333 52 619.5 52ZM705.387 158.5C705.387 168.162 703.712 177.481 700.749 186.156H692.032C690.185 186.156 688.424 185.426 687.136 184.094L677.12 173.89L679.953 170.133L679.937 170.142L675.802 172.547L673.394 170.095C672.122 168.794 671.687 166.953 672.103 165.284L679.964 160.811L679.95 160.804L678.24 158.12L678.805 157.555V153.819C678.805 152.531 678.29 151.285 677.388 150.384L673.351 146.347C672.449 145.445 671.204 144.93 669.916 144.93H669.835L678.24 158.12L673.437 162.923C672.762 163.598 672.318 164.418 672.103 165.284L649.221 178.303L655.958 184.09L619.308 205.407L619.306 205.405L580.797 183.006C582.071 181.601 583.559 180.371 585.231 179.371L588.174 177.607L619.309 195.322L649.221 178.303L646.752 176.183L620.867 190.911V165.543H617.75V138.323C617.002 138.633 616.366 139.202 615.979 139.948L611.942 147.979C610.782 150.298 608.421 151.758 605.801 151.758H596.31C593.811 151.758 591.613 150.406 590.41 148.397L617.75 136.24L617.75 138.323C618.164 138.151 618.612 138.059 619.07 138.059H620.402C620.559 138.059 620.715 138.07 620.867 138.091V136.241L636.991 143.41C637.362 142.862 637.579 142.202 637.579 141.494V140.55C637.579 140.454 637.583 140.358 637.59 140.264L620.867 132.827V104.664L617.75 105.7V89.1355L616.923 89.9621V93.3976C616.923 95.2871 615.377 96.8331 613.488 96.8331H606.617C605.553 96.8331 604.598 96.3431 603.967 95.5777L565.395 156.11L589.459 145.408C589.541 146.493 589.879 147.509 590.41 148.397L563.814 160.222L591.192 175.8L603.654 168.334C606.703 166.53 610.181 165.543 613.703 165.543H617.75L617.75 190.91L591.192 175.8L588.174 177.607L558.653 160.811L558.668 160.804L603.181 90.9478V93.3976C603.181 94.2234 603.477 94.9835 603.967 95.5777L617.75 73.9475L617.75 89.1355L620.867 86.0178V73.9475L626.694 83.0911H623.794L620.867 86.0178V104.664L622.721 104.048C623.451 103.79 624.095 103.403 624.61 102.888L633.588 93.9102L656.823 130.373C657.616 129.311 658.103 128.021 658.181 126.642L635.87 91.6284L636.119 91.3792C637.021 90.4774 637.536 89.2321 637.536 87.9438C637.536 85.2812 635.346 83.0911 632.684 83.0911H630.43L635.87 91.6284L633.588 93.9102L626.694 83.0911H630.43L623.824 72.7243C622.363 72.6503 620.893 72.6129 619.414 72.6129C618.87 72.6129 618.326 72.6511 617.782 72.6892C617.51 72.7083 617.238 72.7274 616.966 72.7417L612.779 75.8856L619.309 65.6383L623.824 72.7243C669.23 75.0226 705.387 112.61 705.387 158.5ZM612.779 75.8856L604.556 82.0605C603.697 82.7046 603.181 83.7353 603.181 84.8089L603.181 90.9478L612.779 75.8856ZM617.75 105.7L605.543 109.759C604.126 110.231 603.181 111.563 603.181 113.023C603.181 115.857 602.065 118.563 600.09 120.538L591.458 129.17C590.17 130.458 589.44 132.219 589.44 134.022V144.887C589.44 145.062 589.446 145.236 589.459 145.408L617.75 132.827L617.75 105.7ZM578.876 185.505C579.446 184.624 580.089 183.788 580.797 183.006L558.665 170.133L575.976 193.092C576.182 191.777 576.52 190.496 576.981 189.266L610.901 234.252H608.291C607.867 234.252 607.425 234.233 606.969 234.197L619.309 250.563L624.139 244.157C624.038 244.162 623.938 244.167 623.837 244.172V241.123C623.837 240.599 623.777 240.087 623.665 239.596L620.868 243.305V235.476C622.256 236.439 623.276 237.901 623.665 239.596L663.958 186.156H658.601L668.144 180.605L663.958 186.156H666.222C666.753 186.156 667.281 186.187 667.803 186.247L624.139 244.157C654.544 242.511 680.783 225.108 694.651 199.898H688.897C686.835 199.898 684.817 199.082 683.357 197.622L675.928 190.192C673.726 187.991 670.866 186.604 667.803 186.247L677.12 173.89L675.802 172.547L655.958 184.09L658.364 186.156H658.601L620.867 208.103L620.868 235.476C619.961 234.846 618.897 234.429 617.75 234.297V243.336L610.901 234.252H616.966C617.231 234.252 617.493 234.268 617.75 234.297L617.75 208.116L617.73 208.105L578.876 185.505C578.112 186.685 577.476 187.946 576.981 189.266L570.451 180.605L578.876 185.505ZM575.976 193.092C575.82 194.084 575.741 195.096 575.741 196.119V206.382C575.741 212.523 578.618 218.32 583.556 222.014L593.09 229.185C596.484 231.721 602.431 233.832 606.969 234.197L575.976 193.092ZM568.87 112.593C568.87 111.305 569.385 110.06 570.287 109.158L581.194 98.2502C582.096 97.3484 583.342 96.8331 584.63 96.8331C587.292 96.8331 589.482 99.0232 589.482 101.686V108.557C589.482 109.845 588.967 111.09 588.065 111.992L584.029 116.029C583.127 116.931 581.881 117.446 580.593 117.446H573.722C571.06 117.446 568.87 115.256 568.87 112.593ZM601.758 141.645L619.308 133.84L636.16 141.334L619.309 133.841L601.758 141.645Z" /> -<path d="M807.101 165.543H800.867V138.091C802.539 138.32 803.837 139.763 803.837 141.494C803.837 143.384 805.383 144.93 807.273 144.93H814.144C815.326 144.93 816.373 144.325 816.991 143.41L854.804 160.222L826.752 176.183L819.812 170.224C816.291 167.218 811.782 165.543 807.101 165.543Z" /> -<path d="M853.223 156.11L817.59 140.264C817.702 138.885 818.615 137.728 819.941 137.286L833.511 132.777C834.865 132.319 836.006 131.467 836.823 130.373L840.347 135.904L839.609 136.642C838.707 137.544 838.192 138.789 838.192 140.077C838.192 142.74 840.382 144.93 843.045 144.93H846.098L840.347 135.904L842.629 133.622L838.181 126.642C838.188 126.512 838.192 126.381 838.192 126.249V124.317C838.192 120.538 841.284 117.446 845.063 117.446H860.823C863.486 117.446 865.676 119.636 865.676 122.299V126.335C865.676 128.998 863.486 131.188 860.823 131.188H847.081C845.793 131.188 844.548 131.703 843.646 132.605L842.629 133.622L849.835 144.93H846.098L853.223 156.11Z" /> -<path fill-rule="evenodd" clip-rule="evenodd" d="M799.5 52C740.667 52 693 99.6673 693 158.5C693 217.333 740.667 265 799.5 265C858.333 265 906 217.333 906 158.5C906 99.6673 858.333 52 799.5 52ZM885.387 158.5C885.387 168.162 883.712 177.481 880.749 186.156H872.032C870.185 186.156 868.424 185.426 867.136 184.094L857.12 173.89L859.953 170.133L859.937 170.142L855.802 172.547L853.394 170.095C852.122 168.794 851.687 166.953 852.103 165.284L859.964 160.811L859.95 160.804L858.24 158.12L858.805 157.555V153.819C858.805 152.531 858.29 151.285 857.388 150.384L853.351 146.347C852.449 145.445 851.204 144.93 849.916 144.93H849.835L858.24 158.12L853.437 162.923C852.762 163.598 852.318 164.418 852.103 165.284L829.221 178.303L835.958 184.09L799.308 205.407L799.306 205.405L760.797 183.006C762.071 181.601 763.559 180.371 765.231 179.371L768.174 177.607L799.309 195.322L829.221 178.303L826.752 176.183L800.867 190.911V165.543H797.75V138.323C797.002 138.633 796.366 139.202 795.979 139.948L791.942 147.979C790.782 150.298 788.421 151.758 785.801 151.758H776.31C773.811 151.758 771.613 150.406 770.41 148.397L797.75 136.24L797.75 138.323C798.164 138.151 798.612 138.059 799.07 138.059H800.402C800.559 138.059 800.715 138.07 800.867 138.091V136.241L816.991 143.41C817.362 142.862 817.579 142.202 817.579 141.494V140.55C817.579 140.454 817.583 140.358 817.59 140.264L800.867 132.827V104.664L797.75 105.7V89.1355L796.923 89.9621V93.3976C796.923 95.2871 795.377 96.8331 793.488 96.8331H786.617C785.553 96.8331 784.598 96.3431 783.967 95.5777L745.395 156.11L769.459 145.408C769.541 146.493 769.879 147.509 770.41 148.397L743.814 160.222L771.192 175.8L783.654 168.334C786.703 166.53 790.181 165.543 793.703 165.543H797.75L797.75 190.91L771.192 175.8L768.174 177.607L738.653 160.811L738.668 160.804L783.181 90.9478V93.3976C783.181 94.2234 783.477 94.9835 783.967 95.5777L797.75 73.9475L797.75 89.1355L800.867 86.0178V73.9475L806.694 83.0911H803.794L800.867 86.0178V104.664L802.721 104.048C803.451 103.79 804.095 103.403 804.61 102.888L813.588 93.9102L836.823 130.373C837.616 129.311 838.103 128.021 838.181 126.642L815.87 91.6284L816.119 91.3792C817.021 90.4774 817.536 89.2321 817.536 87.9438C817.536 85.2812 815.346 83.0911 812.684 83.0911H810.43L815.87 91.6284L813.588 93.9102L806.694 83.0911H810.43L803.824 72.7243C802.363 72.6503 800.893 72.6129 799.414 72.6129C798.87 72.6129 798.326 72.6511 797.782 72.6892C797.51 72.7083 797.238 72.7274 796.966 72.7417L792.779 75.8856L799.309 65.6383L803.824 72.7243C849.23 75.0226 885.387 112.61 885.387 158.5ZM792.779 75.8856L784.556 82.0605C783.697 82.7046 783.181 83.7353 783.181 84.8089L783.181 90.9478L792.779 75.8856ZM797.75 105.7L785.543 109.759C784.126 110.231 783.181 111.563 783.181 113.023C783.181 115.857 782.065 118.563 780.09 120.538L771.458 129.17C770.17 130.458 769.44 132.219 769.44 134.022V144.887C769.44 145.062 769.446 145.236 769.459 145.408L797.75 132.827L797.75 105.7ZM758.876 185.505C759.446 184.624 760.089 183.788 760.797 183.006L738.665 170.133L755.976 193.092C756.182 191.777 756.52 190.496 756.981 189.266L790.901 234.252H788.291C787.867 234.252 787.425 234.233 786.969 234.197L799.309 250.563L804.139 244.157C804.038 244.162 803.938 244.167 803.837 244.172V241.123C803.837 240.599 803.777 240.087 803.665 239.596L800.868 243.305V235.476C802.256 236.439 803.276 237.901 803.665 239.596L843.958 186.156H838.601L848.144 180.605L843.958 186.156H846.222C846.753 186.156 847.281 186.187 847.803 186.247L804.139 244.157C834.544 242.511 860.783 225.108 874.651 199.898H868.897C866.835 199.898 864.817 199.082 863.357 197.622L855.928 190.192C853.726 187.991 850.866 186.604 847.803 186.247L857.12 173.89L855.802 172.547L835.958 184.09L838.364 186.156H838.601L800.867 208.103L800.868 235.476C799.961 234.846 798.897 234.429 797.75 234.297V243.336L790.901 234.252H796.966C797.231 234.252 797.493 234.268 797.75 234.297L797.75 208.116L797.73 208.105L758.876 185.505C758.112 186.685 757.476 187.946 756.981 189.266L750.451 180.605L758.876 185.505ZM755.976 193.092C755.82 194.084 755.741 195.096 755.741 196.119V206.382C755.741 212.523 758.618 218.32 763.556 222.014L773.09 229.185C776.484 231.721 782.431 233.832 786.969 234.197L755.976 193.092ZM748.87 112.593C748.87 111.305 749.385 110.06 750.287 109.158L761.194 98.2502C762.096 97.3484 763.342 96.8331 764.63 96.8331C767.292 96.8331 769.482 99.0232 769.482 101.686V108.557C769.482 109.845 768.967 111.09 768.065 111.992L764.029 116.029C763.127 116.931 761.881 117.446 760.593 117.446H753.722C751.06 117.446 748.87 115.256 748.87 112.593ZM781.758 141.645L799.308 133.84L816.16 141.334L799.309 133.841L781.758 141.645Z" /> - -</svg> diff --git a/src/components/EventCard.tsx b/src/components/EventCard.tsx index e4da86a39b6..632c92e802a 100644 --- a/src/components/EventCard.tsx +++ b/src/components/EventCard.tsx @@ -5,6 +5,8 @@ import { BsCalendar3 } from "react-icons/bs" import { Box, Flex, Heading, Icon } from "@chakra-ui/react" import { Image } from "@chakra-ui/react" +import type { EventCardProps } from "@/lib/types" + import { ButtonLink } from "./Buttons" import Text from "./OldText" @@ -15,18 +17,6 @@ const clearStyles = { clear: "both", } -export type EventCardProps = { - title: string - href: string - date: string - startDate: string - endDate: string - description: string - className?: string - location: string - imageUrl?: string -} - const EventCard = ({ title, href, diff --git a/src/components/EventPreviewCard/index.tsx b/src/components/EventPreviewCard/index.tsx new file mode 100644 index 00000000000..9931e6f6f1d --- /dev/null +++ b/src/components/EventPreviewCard/index.tsx @@ -0,0 +1,77 @@ +import { useRouter } from "next/router" + +import type { EventCardProps } from "@/lib/types" + +import { TwImage } from "@/components/Image" +import { Card, CardContent, CardHeader } from "@/components/ui/card" + +import { cn } from "@/lib/utils/cn" +import { isValidDate } from "@/lib/utils/date" + +import EventFallback from "@/public/images/event-fallback.png" + +const EventPreviewCard = ({ + title, + href, + location, + description, + startDate, + endDate, + imageUrl, + className, +}: EventCardProps) => { + const { locale } = useRouter() + return ( + <a + href={href} + className={cn("no-underline md:w-1/3 md:max-w-128", className)} + target="_blank" + rel="noopener noreferrer" + > + <Card + className={cn( + "w-full space-y-4", + "border-none shadow-none", + "transition-transform duration-100 hover:scale-105 hover:transition-transform hover:duration-100" + )} + > + <CardHeader className="h-48 w-full self-stretch overflow-hidden rounded-2xl bg-gradient-main p-0"> + {imageUrl ? ( + // eslint-disable-next-line @next/next/no-img-element + <img + src={imageUrl} + alt="" + className="max-w-full object-cover object-center" + /> + ) : ( + <TwImage + src={EventFallback} + alt="" + className="size-full object-cover text-body" + /> + )} + </CardHeader> + <CardContent className="space-y-8 p-2 text-body"> + <div> + <p className="text-lg">{title}</p> + <p className="text-sm italic text-body-medium"> + {(isValidDate(startDate) || isValidDate(endDate)) && + new Intl.DateTimeFormat(locale, { + month: "2-digit", + day: "2-digit", + year: "numeric", + }).formatRange( + new Date(isValidDate(startDate) ? startDate : endDate), + new Date(isValidDate(endDate) ? endDate : startDate) + )} + </p> + <p className="text-sm italic text-body-medium">{location}</p> + </div> + <p>{description}</p> + </CardContent> + </Card> + </a> + ) +} + +export default EventPreviewCard diff --git a/src/lib/types.ts b/src/lib/types.ts index 491b578a6d2..571030d63a6 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -800,3 +800,14 @@ export type HTMLResult = { body: Record<string, NestedDivs>[] } } + +export type EventCardProps = { + title: string + href: string + startDate: string + endDate: string + description: string + className?: string + location: string + imageUrl?: string +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3a1a349dce5..5e0cc9d57cd 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -7,13 +7,20 @@ import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6" import { MdChevronRight } from "react-icons/md" import { Flex, Skeleton } from "@chakra-ui/react" -import type { AllMetricData, BasePageProps, Lang, RSSItem } from "@/lib/types" +import type { + AllMetricData, + BasePageProps, + EventCardProps, + Lang, + RSSItem, +} from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import BentoBoxes from "@/components/BentoBoxes" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" +import EventPreviewCard from "@/components/EventPreviewCard" import HomeHero from "@/components/Hero/HomeHero" import HomeSection from "@/components/HomeSection" import AngleBrackets from "@/components/icons/angle-brackets.svg" @@ -32,7 +39,6 @@ import PageMetadata from "@/components/PageMetadata" import StatsBoxGrid from "@/components/StatsBoxGrid" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import { ButtonLink } from "@/components/ui/buttons/Button" -import { Card, CardContent, CardHeader } from "@/components/ui/card" import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" @@ -62,7 +68,6 @@ import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" -import EventFallback from "@/public/images/event-fallback.svg" import buildersImage from "@/public/images/heroes/developers-hub-hero.jpg" import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import learnImage from "@/public/images/heroes/learn-hub-hero.png" @@ -240,7 +245,7 @@ const HomePage = ({ .sort( (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() ) - .slice(0, 3) // Show 3 events ending soonest + .slice(0, 3) as EventCardProps[] // Show 3 events ending soonest const calendar = communityEvents.upcomingEventData .sort((a, b) => { @@ -549,73 +554,9 @@ const HomePage = ({ <p>We have many community events scheduled around the globe</p> <div className="mt-4 md:mt-16"> <div className="flex flex-col gap-8 self-stretch md:flex-row"> - {upcomingEvents.map( - ({ - title, - href, - location, - description, - startDate, - endDate, - imageUrl, - }) => { - return ( - <a - href={href} - className="no-underline md:w-1/3 md:max-w-128" - key={title} - target="_blank" - rel="noopener noreferrer" - > - <Card - className={cn( - "w-full space-y-4", - "border-none shadow-none", - "transition-transform duration-100 hover:scale-105 hover:transition-transform hover:duration-100" - )} - > - <CardHeader className="h-48 w-full self-stretch overflow-hidden rounded-2xl bg-gradient-main p-0"> - {imageUrl ? ( - // eslint-disable-next-line @next/next/no-img-element - <img - src={imageUrl} - alt="" - className="max-w-full object-cover object-center" - /> - ) : ( - <EventFallback className="w-full object-cover text-body" /> - )} - </CardHeader> - <CardContent className="space-y-8 p-2 text-body"> - <div> - <p className="text-lg">{title}</p> - <p className="text-sm italic text-body-medium"> - {(isValidDate(startDate) || - isValidDate(endDate)) && - new Intl.DateTimeFormat(locale, { - month: "2-digit", - day: "2-digit", - year: "numeric", - }).formatRange( - new Date( - isValidDate(startDate) ? startDate : endDate - ), - new Date( - isValidDate(endDate) ? endDate : startDate - ) - )} - </p> - <p className="text-sm italic text-body-medium"> - {location} - </p> - </div> - <p>{description}</p> - </CardContent> - </Card> - </a> - ) - } - )} + {upcomingEvents.map((event) => ( + <EventPreviewCard key={event.title} {...event} /> + ))} </div> </div> <div className="flex justify-center py-8 md:justify-start"> From 990c65fab87e14e242ae08f4d988ab6cfb29fdae Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 08:03:47 -0400 Subject: [PATCH 115/273] chore: extract reused cn's --- src/components/BentoBoxes/Box.tsx | 50 +++++++++++++++++-------------- src/pages/index.tsx | 40 +++++++++++-------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/components/BentoBoxes/Box.tsx b/src/components/BentoBoxes/Box.tsx index ba56abfb34a..59b5bed0526 100644 --- a/src/components/BentoBoxes/Box.tsx +++ b/src/components/BentoBoxes/Box.tsx @@ -25,28 +25,34 @@ const BentoBox = ({ imgWidth, imgHeight, title, -}: BentoBoxProps) => ( - <div - className={cn( - "bg-gradient-to-right flex items-center justify-evenly gap-16 rounded-2xl border p-8", - className - )} - > - <div className="mb-6 grid place-items-center md:mb-auto"> - <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> - </div> - <div> - <h3 className="mb-2 text-3xl font-black">{title}</h3> - <p className="mb-8 text-md">{children}</p> - <ButtonLink - href={href} - // TODO: Check this cn override - className="border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" - > - {action} <MdChevronRight /> - </ButtonLink> +}: BentoBoxProps) => { + // TODO: Migrate to button variants + const buttonSizeLg = "rounded-lg px-8 py-3 text-lg" + const buttonVariantOutline = + "border-body bg-transparent fill-body text-md text-body hover:bg-transparent hover:text-body hover:shadow-button-hover active:shadow-none" + + return ( + <div + className={cn( + "bg-gradient-to-right flex items-center justify-evenly gap-16 rounded-2xl border p-8", + className + )} + > + <div className="mb-6 grid place-items-center md:mb-auto"> + <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> + </div> + <div> + <h3 className="mb-2 text-3xl font-black">{title}</h3> + <p className="mb-8 text-md">{children}</p> + <ButtonLink + href={href} + className={cn(buttonSizeLg, buttonVariantOutline)} + > + {action} <MdChevronRight /> + </ButtonLink> + </div> </div> - </div> -) + ) +} export default BentoBox diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5e0cc9d57cd..32ea7c92024 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -255,6 +255,11 @@ const HomePage = ({ }) .slice(0, 4) // Show next 4 events on the calendar + // TODO: Migrate to button variants + const buttonSizeLg = "rounded-lg px-8 py-3 text-lg" + const buttonVariantOutline = + "border-body bg-transparent fill-body text-md text-body hover:bg-transparent hover:text-body hover:shadow-button-hover active:shadow-none" + return ( <Flex as={MainArticle} @@ -332,7 +337,7 @@ const HomePage = ({ <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/learn/" - className="rounded-lg px-8 py-3 text-lg no-underline" + className={cn("no-underline", buttonSizeLg)} > Other topics <MdChevronRight /> </ButtonLink> @@ -356,16 +361,16 @@ const HomePage = ({ <div className="flex flex-wrap gap-6 py-8"> <ButtonLink href="/developers/" - className="w-fit rounded-lg px-8 py-3 text-lg no-underline" + className={cn("w-fit no-underline", buttonSizeLg)} > Builder's Portal <MdChevronRight /> </ButtonLink> <ButtonLink href="/developers/docs/" className={cn( - "w-fit", - "rounded-lg px-8 py-3 text-lg", // size="lg" - "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" // variant="outline" + "w-fit no-underline", + buttonSizeLg, + buttonVariantOutline )} > Documentation @@ -434,28 +439,20 @@ const HomePage = ({ <ButtonLink href="/discord/" hideArrow - className={cn( - "px-5", - "rounded-lg px-8 py-3 text-lg", - "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" - )} + className={cn("no-underline", buttonSizeLg, buttonVariantOutline)} > <FaDiscord /> </ButtonLink> <ButtonLink href={GITHUB_REPO_URL} hideArrow - className={cn( - "px-5", - "rounded-lg px-8 py-3 text-lg", - "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" - )} + className={cn("no-underline", buttonSizeLg, buttonVariantOutline)} > <FaGithub /> </ButtonLink> <ButtonLink href="/community/" - className="rounded-lg px-8 py-3 text-lg no-underline" + className={cn("no-underline", buttonSizeLg)} > More on ethereum.org <MdChevronRight /> </ButtonLink> @@ -491,9 +488,9 @@ const HomePage = ({ </div> <ButtonLink className={cn( - "px-5", - "h-fit w-full text-nowrap border-body !text-body sm:w-fit lg:self-center xl:text-primary", - "border-body bg-transparent fill-body text-md text-body no-underline hover:bg-transparent hover:shadow-button-hover active:shadow-none" + "px-5 no-underline", + "h-fit w-full text-nowrap border-body !text-body sm:w-fit lg:self-center", + buttonVariantOutline )} href={calendarLink} hideArrow @@ -562,10 +559,7 @@ const HomePage = ({ <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/community/events/" - className={cn( - "mx-auto", - "rounded-lg px-8 py-3 text-lg no-underline" - )} + className={cn("mx-auto no-underline", buttonSizeLg)} > See all events <MdChevronRight /> </ButtonLink> From 9e0503aba91cf7a84281c8a930d6df1daca4136d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:41:24 -0400 Subject: [PATCH 116/273] fix: use hsla instead of rgba --- src/styles/semantic-tokens.css | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index f35bcf7440c..6203d7a9a3d 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -29,23 +29,24 @@ --gradient-primary-opacity-to: 0.05; --gradient-primary: linear-gradient( var(--gradient-primary-angle), - rgba(var(--purple-500), var(--gradient-primary-opacity-from)) 19.09%, - rgba(var(--purple-500), var(--gradient-primary-opacity-to)) 40.63% + hsla(va + (--purple-500), var(--gradient-primary-opacity-from)) 19.09%, + hsla(var(--purple-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-accent-a: linear-gradient( var(--gradient-primary-angle), - rgba(var(--blue-500), var(--gradient-primary-opacity-from)) 19.09%, - rgba(var(--blue-500), var(--gradient-primary-opacity-to)) 40.63% + hsla(var(--blue-500), var(--gradient-primary-opacity-from)) 19.09%, + hsla(var(--blue-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-accent-b: linear-gradient( var(--gradient-primary-angle), - rgba(var(--pink-500), var(--gradient-primary-opacity-from)) 19.09%, - rgba(var(--pink-500), var(--gradient-primary-opacity-to)) 40.63% + hsla(var(--pink-500), var(--gradient-primary-opacity-from)) 19.09%, + hsla(var(--pink-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-accent-c: linear-gradient( var(--gradient-primary-angle), - rgba(var(--teal-500), var(--gradient-primary-opacity-from)) 19.09%, - rgba(var(--teal-500), var(--gradient-primary-opacity-to)) 40.63% + hsla(var(--teal-500), var(--gradient-primary-opacity-from)) 19.09%, + hsla(var(--teal-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-primary-hero-angle: 180deg; @@ -53,8 +54,8 @@ --gradient-primary-hero-opacity-to: 0; --gradient-primary-hero: linear-gradient( var(--gradient-primary-hero-angle), - rgba(var(--purple-500), var(--gradient-primary-hero-opacity-from)) 0%, - rgba(var(--purple-500), var(--gradient-primary-hero-opacity-to)) 25% + hsla(var(--purple-500), var(--gradient-primary-hero-opacity-from)) 0%, + hsla(var(--purple-500), var(--gradient-primary-hero-opacity-to)) 25% ); } From 5b7412db759dddfb01ebdbedc42416cf91e224cf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:16:22 -0400 Subject: [PATCH 117/273] chore: add purple color palette to tw config --- tailwind.config.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index c059c0ed835..ff834f83ad0 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -76,6 +76,19 @@ const config = { 900: "hsla(var(--gray-900))", }, + purple: { + 50: "hsla(var(--purple-50))", + 100: "hsla(var(--purple-100))", + 200: "hsla(var(--purple-200))", + 300: "hsla(var(--purple-300))", + 400: "hsla(var(--purple-400))", + 500: "hsla(var(--purple-500))", + 600: "hsla(var(--purple-600))", + 700: "hsla(var(--purple-700))", + 800: "hsla(var(--purple-800))", + 900: "hsla(var(--purple-900))", + }, + blue: { 50: "hsla(var(--blue-50))", 100: "hsla(var(--blue-100))", From 7b9df840a3213fab76714bda2656319f5a62c6eb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:19:10 -0400 Subject: [PATCH 118/273] fix: use solid and outline-primary variants --- src/components/BentoBoxes/Box.tsx | 51 ++++++++++++++----------------- src/pages/index.tsx | 46 +++++++++++++++++++++------- 2 files changed, 58 insertions(+), 39 deletions(-) diff --git a/src/components/BentoBoxes/Box.tsx b/src/components/BentoBoxes/Box.tsx index 59b5bed0526..debd17ced76 100644 --- a/src/components/BentoBoxes/Box.tsx +++ b/src/components/BentoBoxes/Box.tsx @@ -7,6 +7,8 @@ import { ButtonLink } from "@/components/ui/buttons/Button" import { cn } from "@/lib/utils/cn" +import { buttonSizeLg, buttonVariantOutline } from "@/pages" + export type BentoBoxProps = HTMLAttributes<HTMLDivElement> & { action: string href: string @@ -25,34 +27,27 @@ const BentoBox = ({ imgWidth, imgHeight, title, -}: BentoBoxProps) => { - // TODO: Migrate to button variants - const buttonSizeLg = "rounded-lg px-8 py-3 text-lg" - const buttonVariantOutline = - "border-body bg-transparent fill-body text-md text-body hover:bg-transparent hover:text-body hover:shadow-button-hover active:shadow-none" - - return ( - <div - className={cn( - "bg-gradient-to-right flex items-center justify-evenly gap-16 rounded-2xl border p-8", - className - )} - > - <div className="mb-6 grid place-items-center md:mb-auto"> - <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> - </div> - <div> - <h3 className="mb-2 text-3xl font-black">{title}</h3> - <p className="mb-8 text-md">{children}</p> - <ButtonLink - href={href} - className={cn(buttonSizeLg, buttonVariantOutline)} - > - {action} <MdChevronRight /> - </ButtonLink> - </div> +}: BentoBoxProps) => ( + <div + className={cn( + "bg-gradient-to-right flex items-center justify-evenly gap-16 rounded-2xl border p-8", + className + )} + > + <div className="mb-6 grid place-items-center md:mb-auto"> + <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> </div> - ) -} + <div> + <h3 className="mb-2 text-3xl font-black">{title}</h3> + <p className="mb-8 text-md">{children}</p> + <ButtonLink + href={href} + className={cn("no-underline", buttonSizeLg, buttonVariantOutline)} + > + {action} <MdChevronRight /> + </ButtonLink> + </div> + </div> +) export default BentoBox diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 32ea7c92024..5bb187ec615 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -82,6 +82,15 @@ const cachedFetchTxCount = runOnlyOnce(fetchTxCount) const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(XML_FEEDS)) const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) +// TODO: Migrate to button variants +export const buttonSizeLg = "rounded-lg px-8 py-3 text-lg" +export const buttonVariantOutline = + "border-body bg-transparent fill-body text-md text-body hover:bg-transparent hover:text-body hover:shadow-button-hover active:shadow-none" +export const buttonVariantOutlinePrimary = + "border-primary bg-transparent fill-primary text-md text-primary hover:bg-transparent hover:text-primary hover:shadow-button-hover active:shadow-none" +export const buttonVariantSolid = + "border-transparent bg-primary-action text-md text-white hover:bg-primary-hover hover:text-background hover:shadow-button-hover active:shadow-none" + type Props = BasePageProps & { communityEvents: CommunityEventsReturnType metricResults: AllMetricData @@ -255,11 +264,6 @@ const HomePage = ({ }) .slice(0, 4) // Show next 4 events on the calendar - // TODO: Migrate to button variants - const buttonSizeLg = "rounded-lg px-8 py-3 text-lg" - const buttonVariantOutline = - "border-body bg-transparent fill-body text-md text-body hover:bg-transparent hover:text-body hover:shadow-button-hover active:shadow-none" - return ( <Flex as={MainArticle} @@ -337,7 +341,11 @@ const HomePage = ({ <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/learn/" - className={cn("no-underline", buttonSizeLg)} + className={cn( + "no-underline", + buttonSizeLg, + buttonVariantSolid + )} > Other topics <MdChevronRight /> </ButtonLink> @@ -361,7 +369,11 @@ const HomePage = ({ <div className="flex flex-wrap gap-6 py-8"> <ButtonLink href="/developers/" - className={cn("w-fit no-underline", buttonSizeLg)} + className={cn( + "w-fit no-underline", + buttonSizeLg, + buttonVariantSolid + )} > Builder's Portal <MdChevronRight /> </ButtonLink> @@ -439,20 +451,28 @@ const HomePage = ({ <ButtonLink href="/discord/" hideArrow - className={cn("no-underline", buttonSizeLg, buttonVariantOutline)} + className={cn( + "no-underline", + buttonSizeLg, + buttonVariantOutlinePrimary + )} > <FaDiscord /> </ButtonLink> <ButtonLink href={GITHUB_REPO_URL} hideArrow - className={cn("no-underline", buttonSizeLg, buttonVariantOutline)} + className={cn( + "no-underline", + buttonSizeLg, + buttonVariantOutlinePrimary + )} > <FaGithub /> </ButtonLink> <ButtonLink href="/community/" - className={cn("no-underline", buttonSizeLg)} + className={cn("no-underline", buttonSizeLg, buttonVariantSolid)} > More on ethereum.org <MdChevronRight /> </ButtonLink> @@ -559,7 +579,11 @@ const HomePage = ({ <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/community/events/" - className={cn("mx-auto no-underline", buttonSizeLg)} + className={cn( + "mx-auto no-underline", + buttonSizeLg, + buttonVariantSolid + )} > See all events <MdChevronRight /> </ButtonLink> From a0f5766c94fb6cd8ded856f3d5c4192ff63227eb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:20:03 -0400 Subject: [PATCH 119/273] refactor: use tw gradients, rm custom tokens --- src/components/Hero/HomeHero/index.tsx | 9 ++++++++- src/styles/semantic-tokens.css | 11 ----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index cec4930430c..0a6361cae5d 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -5,6 +5,8 @@ import type { CommonHeroProps } from "@/lib/types" import Morpher from "@/components/Morpher" +import { cn } from "@/lib/utils/cn" + export type HomeHeroProps = Pick<CommonHeroProps, "heroImg"> const HomeHero = ({ heroImg }: HomeHeroProps) => { @@ -21,7 +23,12 @@ const HomeHero = ({ heroImg }: HomeHeroProps) => { priority /> </div> - <div className="flex flex-col items-center space-y-4 border-t-[3px] border-primary-low-contrast bg-gradient-primary-hero px-4 py-8 text-center lg:space-y-7"> + <div + className={cn( + "flex flex-col items-center space-y-4 border-t-[3px] border-primary-low-contrast px-4 py-8 text-center lg:space-y-7", + "bg-gradient-to-b from-purple-500/10 from-0% to-purple-500/0 to-25% dark:from-purple-500/50" + )} + > <Morpher /> <div className="flex flex-col items-center space-y-5 lg:max-w-2xl"> <h1 className="font-black">{t("page-index:page-index-title")}</h1> diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 6203d7a9a3d..6549057224c 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -48,15 +48,6 @@ hsla(var(--teal-500), var(--gradient-primary-opacity-from)) 19.09%, hsla(var(--teal-500), var(--gradient-primary-opacity-to)) 40.63% ); - - --gradient-primary-hero-angle: 180deg; - --gradient-primary-hero-opacity-from: 0.1; - --gradient-primary-hero-opacity-to: 0; - --gradient-primary-hero: linear-gradient( - var(--gradient-primary-hero-angle), - hsla(var(--purple-500), var(--gradient-primary-hero-opacity-from)) 0%, - hsla(var(--purple-500), var(--gradient-primary-hero-opacity-to)) 25% - ); } /* Dark mode token declarations */ @@ -80,7 +71,5 @@ /* Gradients */ --gradient-primary-angle: 180deg; --gradient-primary-opacity-to: 0.2; - - --gradient-primary-hero-opacity-from: 0.5; } } From aa5a92893ae62436584b27b3c763e52b7c5b28ca Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:14:57 -0400 Subject: [PATCH 120/273] fix: use BaseLink --- src/components/Buttons/SvgButtonLink.tsx | 6 ++++-- src/components/EventPreviewCard/index.tsx | 9 +++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 3af343cf584..6c9036e3786 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -2,6 +2,8 @@ import type { FC, ReactNode, SVGProps } from "react" import { cn } from "@/lib/utils/cn" +import { BaseLink } from "../ui/Link" + type SvgButtonLinkProps = { Svg: FC<SVGProps<SVGElement>> label?: string @@ -18,7 +20,7 @@ const SvgButtonLink = ({ className, ...props }: SvgButtonLinkProps) => ( - <a + <BaseLink className={cn( "group rounded-2xl no-underline focus:outline focus:outline-4 focus:outline-offset-8", className @@ -34,7 +36,7 @@ const SvgButtonLink = ({ {children} </div> </div> - </a> + </BaseLink> ) export default SvgButtonLink diff --git a/src/components/EventPreviewCard/index.tsx b/src/components/EventPreviewCard/index.tsx index 9931e6f6f1d..4dc036c2728 100644 --- a/src/components/EventPreviewCard/index.tsx +++ b/src/components/EventPreviewCard/index.tsx @@ -8,6 +8,8 @@ import { Card, CardContent, CardHeader } from "@/components/ui/card" import { cn } from "@/lib/utils/cn" import { isValidDate } from "@/lib/utils/date" +import { BaseLink } from "../ui/Link" + import EventFallback from "@/public/images/event-fallback.png" const EventPreviewCard = ({ @@ -22,11 +24,10 @@ const EventPreviewCard = ({ }: EventCardProps) => { const { locale } = useRouter() return ( - <a + <BaseLink href={href} className={cn("no-underline md:w-1/3 md:max-w-128", className)} - target="_blank" - rel="noopener noreferrer" + hideArrow > <Card className={cn( @@ -70,7 +71,7 @@ const EventPreviewCard = ({ <p>{description}</p> </CardContent> </Card> - </a> + </BaseLink> ) } From 4d83962e5907e87ae7b0661af3e2ec95415ccb75 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:15:56 -0400 Subject: [PATCH 121/273] refactor: extract RssPreviewCard component --- src/components/RssPreviewCard/index.tsx | 56 +++++++++++++++++++++++++ src/pages/index.tsx | 33 ++------------- 2 files changed, 59 insertions(+), 30 deletions(-) create mode 100644 src/components/RssPreviewCard/index.tsx diff --git a/src/components/RssPreviewCard/index.tsx b/src/components/RssPreviewCard/index.tsx new file mode 100644 index 00000000000..7b27e809984 --- /dev/null +++ b/src/components/RssPreviewCard/index.tsx @@ -0,0 +1,56 @@ +import { useRouter } from "next/router" + +import type { RSSItem } from "@/lib/types" + +import { cn } from "@/lib/utils/cn" +import { isValidDate } from "@/lib/utils/date" + +import { BaseLink } from "../ui/Link" + +type RssPreviewCardProps = RSSItem & { + className?: string +} + +const RssPreviewCard = ({ + pubDate, + title, + source, + link, + imgSrc, + className, +}: RssPreviewCardProps) => { + const { locale } = useRouter() + return ( + <BaseLink + href={link} + className={cn( + "no-underline duration-100 hover:scale-105 hover:duration-100", + className + )} + > + <div className="flex flex-col space-y-2.5 text-body"> + {/* eslint-disable-next-line @next/next/no-img-element */} + <img + src={imgSrc} + alt="" + className="h-48 w-full rounded-2xl object-cover" + /> + {isValidDate(pubDate) && ( + <p className="text-sm italic"> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "numeric", + year: "numeric", + }).format(new Date(pubDate))} + </p> + )} + <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> + {source} + </div> + <p className="mb-2 text-2xl font-bold">{title}</p> + </div> + </BaseLink> + ) +} + +export default RssPreviewCard diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5bb187ec615..51b5ebe3a81 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -36,6 +36,7 @@ import RoadmapSign from "@/components/icons/roadmap-sign.svg" import Whitepaper from "@/components/icons/whitepaper.svg" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" +import RssPreviewCard from "@/components/RssPreviewCard" import StatsBoxGrid from "@/components/StatsBoxGrid" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import { ButtonLink } from "@/components/ui/buttons/Button" @@ -530,36 +531,8 @@ const HomePage = ({ </h3> <p>The latest blog posts and updates from the community</p> <div className="mt-4 grid grid-cols-1 gap-8 md:mt-16 md:grid-cols-3 md:flex-row"> - {rssItems.map(({ title, link, imgSrc, source, pubDate }) => ( - <a - href={link} - key={title} - className="no-underline duration-100 hover:scale-105 hover:duration-100" - target="_blank" - rel="noopener noreferrer" - > - <div className="flex flex-col space-y-2.5 text-body"> - {/* eslint-disable-next-line @next/next/no-img-element */} - <img - src={imgSrc} - alt="" - className="h-48 w-full rounded-2xl object-cover" - /> - {isValidDate(pubDate) && ( - <p className="text-sm italic"> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "numeric", - year: "numeric", - }).format(new Date(pubDate))} - </p> - )} - <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> - {source} - </div> - <p className="mb-2 text-2xl font-bold">{title}</p> - </div> - </a> + {rssItems.map((item) => ( + <RssPreviewCard key={item.title} {...item} /> ))} </div> </div> From d941cb9ffd2b71d9546f106025e2518b185870ef Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:03:23 -0400 Subject: [PATCH 122/273] fix: event card filtering and tablet layout --- src/components/EventPreviewCard/index.tsx | 6 +----- src/pages/index.tsx | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/components/EventPreviewCard/index.tsx b/src/components/EventPreviewCard/index.tsx index 4dc036c2728..d590b946d7a 100644 --- a/src/components/EventPreviewCard/index.tsx +++ b/src/components/EventPreviewCard/index.tsx @@ -24,11 +24,7 @@ const EventPreviewCard = ({ }: EventCardProps) => { const { locale } = useRouter() return ( - <BaseLink - href={href} - className={cn("no-underline md:w-1/3 md:max-w-128", className)} - hideArrow - > + <BaseLink href={href} className={cn("no-underline", className)} hideArrow> <Card className={cn( "w-full space-y-4", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 51b5ebe3a81..57f418b1ce5 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -251,7 +251,12 @@ const HomePage = ({ ] const upcomingEvents = events - .filter((event) => isValidDate(event.endDate)) // Filter out invalid dates + .filter((event) => { + const isValid = isValidDate(event.endDate) + const isUpcoming = + new Date(event.endDate).getTime() > new Date().getTime() + return isValid && isUpcoming + }) .sort( (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() ) @@ -543,9 +548,15 @@ const HomePage = ({ </h3> <p>We have many community events scheduled around the globe</p> <div className="mt-4 md:mt-16"> - <div className="flex flex-col gap-8 self-stretch md:flex-row"> - {upcomingEvents.map((event) => ( - <EventPreviewCard key={event.title} {...event} /> + <div className="grid grid-cols-1 gap-8 self-stretch sm:grid-cols-2 md:grid-cols-3"> + {upcomingEvents.map((event, idx) => ( + <EventPreviewCard + key={event.title} + {...event} + className={cn( + idx === 0 && "col-span-1 sm:col-span-2 md:col-span-1" + )} + /> ))} </div> </div> From ccaa18b00bdfbc4ab20208e544c83bba2f186f51 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:04:11 -0400 Subject: [PATCH 123/273] fix: mobile swiper overflowing --- src/components/BentoBoxes/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/BentoBoxes/index.tsx b/src/components/BentoBoxes/index.tsx index 6e6b4aede16..35b92e7bd91 100644 --- a/src/components/BentoBoxes/index.tsx +++ b/src/components/BentoBoxes/index.tsx @@ -167,10 +167,10 @@ const BentoBoxes = () => { return ( <> {/* Mobile */} - <div className="relative my-16 lg:hidden"> + <div className="relative my-16 max-w-[min(calc(100vw_-_2rem),_30rem)] lg:hidden"> <Title className="" /> {/* TODO: Fix height constraints */} - <div className="swiper mt-4 h-fit max-w-[min(calc(100vw_-_2rem),_30rem)]"> + <div className="swiper mt-4 h-fit"> <div className="swiper-wrapper"> {bentoBoxes.map(({ className, ...box }) => ( <BentoBox From c054feed7c4cc483fc8b25e73df2ccfb67a35345 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 18:34:31 -0700 Subject: [PATCH 124/273] chore: clean up patches --- src/components/Buttons/SvgButtonLink.tsx | 1 + src/styles/semantic-tokens.css | 3 +-- tailwind.config.ts | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 6c9036e3786..e64d173dd01 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -25,6 +25,7 @@ const SvgButtonLink = ({ "group rounded-2xl no-underline focus:outline focus:outline-4 focus:outline-offset-8", className )} + hideArrow {...props} > <div className="flex flex-col items-center gap-3.5 lg:flex-row lg:items-center"> diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 6549057224c..c147856971b 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -29,8 +29,7 @@ --gradient-primary-opacity-to: 0.05; --gradient-primary: linear-gradient( var(--gradient-primary-angle), - hsla(va - (--purple-500), var(--gradient-primary-opacity-from)) 19.09%, + hsla(var(--purple-500), var(--gradient-primary-opacity-from)) 19.09%, hsla(var(--purple-500), var(--gradient-primary-opacity-to)) 40.63% ); --gradient-accent-a: linear-gradient( diff --git a/tailwind.config.ts b/tailwind.config.ts index ff834f83ad0..1bccada239e 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -179,7 +179,6 @@ const config = { "gradient-accent-a": "var(--gradient-accent-a)", "gradient-accent-b": "var(--gradient-accent-b)", "gradient-accent-c": "var(--gradient-accent-c)", - "gradient-primary-hero": "var(--gradient-primary-hero)", "main-gradient": "var(--gradient-main)", // TODO: Duplicate; remove one "feedback-gradient": "var(--feedback-gradient)", "banner-grid-gradient": "var(--banner-grid-gradient)", From 6f5431f297633f00693bc85455dc7c69f4af42ff Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 18:40:26 -0700 Subject: [PATCH 125/273] theme: add svg-button-link shadow tokens --- src/styles/semantic-tokens.css | 23 +++++++++++++++++++++++ tailwind.config.ts | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index c147856971b..7a2176c190c 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -47,6 +47,18 @@ hsla(var(--teal-500), var(--gradient-primary-opacity-from)) 19.09%, hsla(var(--teal-500), var(--gradient-primary-opacity-to)) 40.63% ); + + /* Shadows */ + --shadow-color-a: hsla(266, 20%, 21%, 0.02); + --shadow-color-b: hsla(0, 48%, 6%, 0.04); + --shadow-1: -2px 2px 12px 1px var(--shadow-color-a); + --shadow-2: -16px 16px 12px -3px var(--shadow-color-a); + --shadow-3: -32px 32px 24px -6px var(--shadow-color-a); + --shadow-4: -40px 40px 40px -12px var(--shadow-color-b); + --shadow-1-hover: 0px 0px 12px 2px var(--shadow-color-a); + --shadow-2-hover: 0px 0px 12px 2px var(--shadow-color-a); + --shadow-3-hover: 0px 0px 24px 2px var(--shadow-color-a); + --shadow-4-hover: 0px 0px 40px 2px var(--shadow-color-b); } /* Dark mode token declarations */ @@ -70,5 +82,16 @@ /* Gradients */ --gradient-primary-angle: 180deg; --gradient-primary-opacity-to: 0.2; + + /* Shadows */ + --shadow-color: hsla(var(--white), 0.04); + --shadow-1: -2px 2px 12px 1px var(--shadow-color); + --shadow-2: -6px 6px 12px -3px var(--shadow-color); + --shadow-3: -12px 12px 24px -6px var(--shadow-color); + --shadow-4: -20px 20px 40px -12px var(--shadow-color); + --shadow-1-hover: 0px 0px 12px 2px var(--shadow-color); + --shadow-2-hover: 0px 0px 12px 2px var(--shadow-color); + --shadow-3-hover: 0px 0px 24px 2px var(--shadow-color); + --shadow-4-hover: 0px 0px 40px 2px var(--shadow-color); } } diff --git a/tailwind.config.ts b/tailwind.config.ts index 1bccada239e..9129ab1db7d 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -200,6 +200,10 @@ const config = { primary: "4px 4px 0px 0px hsla(var(--primary))", "button-hover": "4px 4px 0 0 hsla(var(--primary-low-contrast))", tooltip: "0 0 16px var(--tooltip-shadow)", + "svg-button-link": + "var(--shadow-1), var(--shadow-2), var(--shadow-3), var(--shadow-4)", + "svg-button-link-hover": + "var(--shadow-1-hover), var(--shadow-2-hover), var(--shadow-3-hover), var(--shadow-4-hover)", }, spacing: { 7.5: "1.875rem", From 177f45c9c53d346d00a897dd1aa7a58d552ac948 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 18:41:19 -0700 Subject: [PATCH 126/273] feat: hover and focus styling --- src/components/Buttons/SvgButtonLink.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index e64d173dd01..4c58d6585de 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -29,8 +29,20 @@ const SvgButtonLink = ({ {...props} > <div className="flex flex-col items-center gap-3.5 lg:flex-row lg:items-center"> - <div className="relative grid aspect-square size-[5em] shrink-0 place-items-center rounded-2xl border shadow-lg group-hover:shadow-2xl group-hover:transition-shadow group-hover:duration-100 group-focus:shadow-2xl group-focus:transition-shadow group-focus:duration-100 lg:self-start"> - <Svg className="text-4xl group-hover:animate-pulse group-focus:animate-pulse" /> + <div + className={cn( + "relative grid aspect-square size-[5em] shrink-0 place-items-center lg:self-start", + "rounded-2xl border shadow-svg-button-link transition-shadow duration-200", + "group-hover:shadow-svg-button-link-hover group-hover:transition-shadow group-hover:duration-200", + "group-focus:shadow-none group-focus:transition-shadow group-focus:duration-200" + )} + > + <Svg + className={cn( + "group-hover:rotate-3 group-hover:scale-110", + "text-4xl duration-200 group-hover:duration-200 group-focus:rotate-3" + )} + /> </div> <div className="text-center lg:text-start"> {label && <p className="text-xl font-bold">{label}</p>} From fc00bb3dd585ebc45119cd14c0264c125af583d8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 18:48:11 -0700 Subject: [PATCH 127/273] fix: rm repeated hsla wrapper --- src/styles/global.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index ab20d340f0d..47af1db291a 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -19,8 +19,8 @@ /* ! Deprecating primary-dark */ --primary-dark: var(--blue-700); - --neutral: hsla(var(--white)); - --disabled: hsla(var(--gray-400)); + --neutral: var(--white); + --disabled: var(--gray-400); /* Complementary Set */ --attention: var(--yellow-500); @@ -98,8 +98,8 @@ --primary-dark: hsla(var(--orange-800)); /* ! Deprecating neutral */ - --neutral: hsla(var(--gray-900)); - --disabled: hsla(var(--gray-500)); + --neutral: var(--gray-900); + --disabled: var(--gray-500); /* Complementary Set */ --attention-outline: var(--attention-light); From 35973e464a853386693efcf3857528a52b9de55d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 21 Aug 2024 21:28:27 -0700 Subject: [PATCH 128/273] chore: rm unused class styling --- src/styles/global.css | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index 47af1db291a..41e97e32ebf 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -222,16 +222,3 @@ } } } - -@layer components { - .carousel { - scroll-snap-type: x mandatory; - scroll-padding: 0 var(--eth-space-6); - max-width: calc(100vw - 2 * var(--eth-space-4)); - overflow-x: auto; - } - .carousel > * { - scroll-snap-align: start; - width: 100%; - } -} \ No newline at end of file From 8d0d057b17ca4428d89fe5783ac766ca10a0f814 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:54:56 -0700 Subject: [PATCH 129/273] refactor: accept size and variant as direct props --- src/components/ui/buttons/Button.tsx | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/components/ui/buttons/Button.tsx b/src/components/ui/buttons/Button.tsx index 34b81a0ac7e..aa56ff62dbb 100644 --- a/src/components/ui/buttons/Button.tsx +++ b/src/components/ui/buttons/Button.tsx @@ -109,17 +109,25 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( ) Button.displayName = "Button" -type ButtonLinkProps = Omit<LinkProps, "onClick"> & { - buttonProps?: ButtonProps - customEventOptions?: MatomoEventOptions -} +type ButtonLinkProps = Omit<LinkProps, "onClick"> & + Pick<ButtonProps, "size" | "variant"> & { + buttonProps?: Omit<ButtonProps, "size" | "variant"> + customEventOptions?: MatomoEventOptions + } const ButtonLink = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>( ( - { buttonProps, customEventOptions, children, className, ...linkProps }, + { + size, + variant, + buttonProps, + customEventOptions, + children, + className, + ...linkProps + }, ref ) => { - const { size, variant } = buttonProps || {} const handleClick = () => { customEventOptions && trackCustomEvent(customEventOptions) } From 7cca606ede3afbb90298a3b53220137bf1ef0fcb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 12:11:07 -0700 Subject: [PATCH 130/273] theme: update solid button to primary-action --- src/components/ui/buttons/Button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ui/buttons/Button.tsx b/src/components/ui/buttons/Button.tsx index aa56ff62dbb..4c804ab208b 100644 --- a/src/components/ui/buttons/Button.tsx +++ b/src/components/ui/buttons/Button.tsx @@ -14,7 +14,7 @@ const buttonVariants = cva( variants: { variant: { solid: - "text-background bg-primary border-transparent disabled:bg-disabled disabled:text-background hover:text-background hover:bg-primary-hover hover:shadow-button-hover active:shadow-none", + "text-white bg-primary-action border-transparent disabled:bg-disabled disabled:text-background hover:text-background hover:bg-primary-hover hover:shadow-button-hover active:shadow-none", outline: "hover:shadow-button-hover active:shadow-none", "outline-color": "hover:shadow-button-hover active:shadow-none border-primary", From 454ec43796c8239ab645d5eefcb12949c3f3e297 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 12:15:23 -0700 Subject: [PATCH 131/273] refactor: use button size and variant props --- src/pages/index.tsx | 70 +++++++++------------------------------------ 1 file changed, 13 insertions(+), 57 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 57f418b1ce5..b8d12dfaf33 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -83,15 +83,6 @@ const cachedFetchTxCount = runOnlyOnce(fetchTxCount) const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(XML_FEEDS)) const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) -// TODO: Migrate to button variants -export const buttonSizeLg = "rounded-lg px-8 py-3 text-lg" -export const buttonVariantOutline = - "border-body bg-transparent fill-body text-md text-body hover:bg-transparent hover:text-body hover:shadow-button-hover active:shadow-none" -export const buttonVariantOutlinePrimary = - "border-primary bg-transparent fill-primary text-md text-primary hover:bg-transparent hover:text-primary hover:shadow-button-hover active:shadow-none" -export const buttonVariantSolid = - "border-transparent bg-primary-action text-md text-white hover:bg-primary-hover hover:text-background hover:shadow-button-hover active:shadow-none" - type Props = BasePageProps & { communityEvents: CommunityEventsReturnType metricResults: AllMetricData @@ -345,14 +336,7 @@ const HomePage = ({ ))} </div> <div className="flex justify-center py-8 md:justify-start"> - <ButtonLink - href="/learn/" - className={cn( - "no-underline", - buttonSizeLg, - buttonVariantSolid - )} - > + <ButtonLink href="/learn/" size="lg"> Other topics <MdChevronRight /> </ButtonLink> </div> @@ -373,23 +357,14 @@ const HomePage = ({ language like Solidity or Vyper to write your own app. </p> <div className="flex flex-wrap gap-6 py-8"> - <ButtonLink - href="/developers/" - className={cn( - "w-fit no-underline", - buttonSizeLg, - buttonVariantSolid - )} - > + <ButtonLink href="/developers/" size="lg" className="w-fit"> Builder's Portal <MdChevronRight /> </ButtonLink> <ButtonLink href="/developers/docs/" - className={cn( - "w-fit no-underline", - buttonSizeLg, - buttonVariantOutline - )} + size="lg" + variant="outline" + className="w-fit" > Documentation </ButtonLink> @@ -456,30 +431,21 @@ const HomePage = ({ <div className="flex flex-wrap gap-3 py-8"> <ButtonLink href="/discord/" + size="lg" + variant="outline-color" hideArrow - className={cn( - "no-underline", - buttonSizeLg, - buttonVariantOutlinePrimary - )} > <FaDiscord /> </ButtonLink> <ButtonLink href={GITHUB_REPO_URL} + size="lg" + variant="outline-color" hideArrow - className={cn( - "no-underline", - buttonSizeLg, - buttonVariantOutlinePrimary - )} > <FaGithub /> </ButtonLink> - <ButtonLink - href="/community/" - className={cn("no-underline", buttonSizeLg, buttonVariantSolid)} - > + <ButtonLink href="/community/" size="lg"> More on ethereum.org <MdChevronRight /> </ButtonLink> </div> @@ -513,11 +479,8 @@ const HomePage = ({ </p> </div> <ButtonLink - className={cn( - "px-5 no-underline", - "h-fit w-full text-nowrap border-body !text-body sm:w-fit lg:self-center", - buttonVariantOutline - )} + className="h-fit w-full text-nowrap border-body px-5 !text-body sm:w-fit lg:self-center" + variant="outline" href={calendarLink} hideArrow > @@ -561,14 +524,7 @@ const HomePage = ({ </div> </div> <div className="flex justify-center py-8 md:justify-start"> - <ButtonLink - href="/community/events/" - className={cn( - "mx-auto no-underline", - buttonSizeLg, - buttonVariantSolid - )} - > + <ButtonLink href="/community/events/" size="lg" className="mx-auto"> See all events <MdChevronRight /> </ButtonLink> </div> From 2f62784296bb100f504cf518f60f065e976a07f9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 12:21:00 -0700 Subject: [PATCH 132/273] refactor: accept isSecondary as direct props --- src/components/ui/buttons/Button.tsx | 11 +++++++++-- src/pages/what-is-ethereum.tsx | 22 ++++------------------ 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/components/ui/buttons/Button.tsx b/src/components/ui/buttons/Button.tsx index 4c804ab208b..0c67ee3d431 100644 --- a/src/components/ui/buttons/Button.tsx +++ b/src/components/ui/buttons/Button.tsx @@ -110,7 +110,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( Button.displayName = "Button" type ButtonLinkProps = Omit<LinkProps, "onClick"> & - Pick<ButtonProps, "size" | "variant"> & { + Pick<ButtonProps, "size" | "variant" | "isSecondary"> & { buttonProps?: Omit<ButtonProps, "size" | "variant"> customEventOptions?: MatomoEventOptions } @@ -120,6 +120,7 @@ const ButtonLink = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>( { size, variant, + isSecondary, buttonProps, customEventOptions, children, @@ -132,7 +133,13 @@ const ButtonLink = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>( customEventOptions && trackCustomEvent(customEventOptions) } return ( - <Button asChild size={size} variant={variant} {...buttonProps}> + <Button + asChild + size={size} + variant={variant} + isSecondary={isSecondary} + {...buttonProps} + > <BaseLink ref={ref} className={cn("no-underline hover:no-underline", className)} diff --git a/src/pages/what-is-ethereum.tsx b/src/pages/what-is-ethereum.tsx index 569225b7105..a03639b3e87 100644 --- a/src/pages/what-is-ethereum.tsx +++ b/src/pages/what-is-ethereum.tsx @@ -650,13 +650,7 @@ const WhatIsEthereumPage = ({ <ButtonLink href="/smart-contracts/"> {t("page-what-is-ethereum-more-on-smart-contracts")} </ButtonLink> - <ButtonLink - href="/dapps/" - buttonProps={{ - variant: "outline", - isSecondary: true, - }} - > + <ButtonLink href="/dapps/" variant="outline" isSecondary> {t("page-what-is-ethereum-explore-dapps")} </ButtonLink> </ButtonRow> @@ -679,13 +673,7 @@ const WhatIsEthereumPage = ({ <ButtonLink href="/eth/"> {t("page-what-is-ethereum-what-is-ether")} </ButtonLink> - <ButtonLink - href="/get-eth/" - buttonProps={{ - variant: "outline", - isSecondary: true, - }} - > + <ButtonLink href="/get-eth/" variant="outline" isSecondary> {t("page-what-is-ethereum-get-eth")} </ButtonLink> </ButtonRow> @@ -714,10 +702,8 @@ const WhatIsEthereumPage = ({ </ButtonLink> <ButtonLink href="/roadmap/merge/" - buttonProps={{ - variant: "outline", - isSecondary: true, - }} + variant="outline" + isSecondary > {t("page-what-is-ethereum-the-merge-update")} </ButtonLink> From 03ff3a34f83a47173048d8f7e11cbff5642d63b6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 12:32:29 -0700 Subject: [PATCH 133/273] refactor: extract SwiperCards, mv BentoBox --- .../Box.tsx => BentoBox/BentoCard.tsx} | 15 ++-- .../{BentoBoxes => BentoBox}/Title.tsx | 4 +- src/components/BentoBox/index.tsx | 27 ++++++ .../index.tsx => BentoBox/useBentoBox.ts} | 90 ++++--------------- src/components/SwiperCards/index.tsx | 44 +++++++++ src/lib/types.ts | 2 + src/pages/index.tsx | 11 ++- 7 files changed, 107 insertions(+), 86 deletions(-) rename src/components/{BentoBoxes/Box.tsx => BentoBox/BentoCard.tsx} (75%) rename src/components/{BentoBoxes => BentoBox}/Title.tsx (78%) create mode 100644 src/components/BentoBox/index.tsx rename src/components/{BentoBoxes/index.tsx => BentoBox/useBentoBox.ts} (63%) create mode 100644 src/components/SwiperCards/index.tsx diff --git a/src/components/BentoBoxes/Box.tsx b/src/components/BentoBox/BentoCard.tsx similarity index 75% rename from src/components/BentoBoxes/Box.tsx rename to src/components/BentoBox/BentoCard.tsx index debd17ced76..47998132db8 100644 --- a/src/components/BentoBoxes/Box.tsx +++ b/src/components/BentoBox/BentoCard.tsx @@ -7,9 +7,7 @@ import { ButtonLink } from "@/components/ui/buttons/Button" import { cn } from "@/lib/utils/cn" -import { buttonSizeLg, buttonVariantOutline } from "@/pages" - -export type BentoBoxProps = HTMLAttributes<HTMLDivElement> & { +export type BentoCardProps = HTMLAttributes<HTMLDivElement> & { action: string href: string imgSrc: StaticImageData @@ -18,7 +16,7 @@ export type BentoBoxProps = HTMLAttributes<HTMLDivElement> & { title: string } -const BentoBox = ({ +const BentoCard = ({ action, children, className, @@ -27,7 +25,7 @@ const BentoBox = ({ imgWidth, imgHeight, title, -}: BentoBoxProps) => ( +}: BentoCardProps) => ( <div className={cn( "bg-gradient-to-right flex items-center justify-evenly gap-16 rounded-2xl border p-8", @@ -40,14 +38,11 @@ const BentoBox = ({ <div> <h3 className="mb-2 text-3xl font-black">{title}</h3> <p className="mb-8 text-md">{children}</p> - <ButtonLink - href={href} - className={cn("no-underline", buttonSizeLg, buttonVariantOutline)} - > + <ButtonLink href={href} size="lg" variant="outline"> {action} <MdChevronRight /> </ButtonLink> </div> </div> ) -export default BentoBox +export default BentoCard diff --git a/src/components/BentoBoxes/Title.tsx b/src/components/BentoBox/Title.tsx similarity index 78% rename from src/components/BentoBoxes/Title.tsx rename to src/components/BentoBox/Title.tsx index d4608c2f041..f0d5d2b6d02 100644 --- a/src/components/BentoBoxes/Title.tsx +++ b/src/components/BentoBox/Title.tsx @@ -1,6 +1,8 @@ +import type { ClassNameProp } from "@/lib/types" + import { cn } from "@/lib/utils/cn" -const Title = ({ className }) => ( +const Title = ({ className }: ClassNameProp) => ( <div className={cn("flex flex-col", className)}> <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> Use Cases diff --git a/src/components/BentoBox/index.tsx b/src/components/BentoBox/index.tsx new file mode 100644 index 00000000000..912e1519ef3 --- /dev/null +++ b/src/components/BentoBox/index.tsx @@ -0,0 +1,27 @@ +import type { ClassNameProp } from "@/lib/types" + +import BentoCard from "./BentoCard" +import Title from "./Title" +import { useBentoBox } from "./useBentoBox" + +import "swiper/css" +import "swiper/css/effect-cards" +import "swiper/css/navigation" +import "swiper/css/pagination" + +const BentoBox = ({ className }: ClassNameProp) => { + const { items } = useBentoBox() + + return ( + <div className={className}> + <div className="flex grid-cols-bento flex-row gap-4 lg:grid"> + <Title className="lg:col-span-12 lg:flex xl:col-span-3 xl:col-start-2" /> + {items.map((item) => ( + <BentoCard key={item.title} {...item} /> + ))} + </div> + </div> + ) +} + +export default BentoBox diff --git a/src/components/BentoBoxes/index.tsx b/src/components/BentoBox/useBentoBox.ts similarity index 63% rename from src/components/BentoBoxes/index.tsx rename to src/components/BentoBox/useBentoBox.ts index 35b92e7bd91..b937de6e249 100644 --- a/src/components/BentoBoxes/index.tsx +++ b/src/components/BentoBox/useBentoBox.ts @@ -1,16 +1,6 @@ -import { useEffect } from "react" -import { Swiper } from "swiper" -import { EffectCards } from "swiper/modules" - import { cn } from "@/lib/utils/cn" -import BentoBox, { BentoBoxProps } from "./Box" -import Title from "./Title" - -import "swiper/css" -import "swiper/css/effect-cards" -import "swiper/css/navigation" -import "swiper/css/pagination" +import type { BentoCardProps } from "./BentoCard" import ImpactImage from "@/public/images/impact_transparent.png" import ManAndDogImage from "@/public/images/man-and-dog-playing.png" @@ -18,16 +8,7 @@ import ManBabyWomanImage from "@/public/images/man-baby-woman.png" import RobotBarImage from "@/public/images/robot-help-bar.png" import MergeImage from "@/public/images/upgrades/merge.png" -const BentoBoxes = () => { - // Mobile swiper - useEffect(() => { - new Swiper(".swiper", { - grabCursor: true, - effect: "cards", - modules: [EffectCards], - }) - }, []) - +export const useBentoBox = () => { const flow = { mobile: { down: "flex-col bg-gradient-to-b", @@ -36,22 +17,22 @@ const BentoBoxes = () => { left: "flex-row-reverse bg-gradient-to-l", }, md: { - down: "md:flex-col md:bg-gradient-to-b md", - up: "md:flex-col-reverse md:bg-gradient-to-t md", - right: "md:flex-row md:bg-gradient-to-r md", - left: "md:flex-row-reverse md:bg-gradient-to-l md", + down: "md:flex-col md:bg-gradient-to-b", + up: "md:flex-col-reverse md:bg-gradient-to-t", + right: "md:flex-row md:bg-gradient-to-r", + left: "md:flex-row-reverse md:bg-gradient-to-l", }, lg: { - down: "lg:flex-col lg:bg-gradient-to-b lg", - up: "lg:flex-col-reverse lg:bg-gradient-to-t lg", - right: "lg:flex-row lg:bg-gradient-to-r lg", - left: "lg:flex-row-reverse lg:bg-gradient-to-l lg", + down: "lg:flex-col lg:bg-gradient-to-b", + up: "lg:flex-col-reverse lg:bg-gradient-to-t", + right: "lg:flex-row lg:bg-gradient-to-r", + left: "lg:flex-row-reverse lg:bg-gradient-to-l", }, xl: { - down: "xl:flex-col xl:bg-gradient-to-b xl", - up: "xl:flex-col-reverse xl:bg-gradient-to-t xl", - right: "xl:flex-row xl:bg-gradient-to-r xl", - left: "xl:flex-row-reverse xl:bg-gradient-to-l xl", + down: "xl:flex-col xl:bg-gradient-to-b", + up: "xl:flex-col-reverse xl:bg-gradient-to-t", + right: "xl:flex-row xl:bg-gradient-to-r", + left: "xl:flex-row-reverse xl:bg-gradient-to-l", }, } @@ -68,7 +49,7 @@ const BentoBoxes = () => { return "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10" } - const bentoBoxes: BentoBoxProps[] = [ + const items: BentoCardProps[] = [ { title: "Crypto without volatility", children: @@ -76,7 +57,7 @@ const BentoBoxes = () => { action: "Learn more", href: "/stablecoins/", imgSrc: ImpactImage, - imgWidth: 500, + imgWidth: 400, // TODO: Fix tablet size alignment (aligning top, should be center?) className: cn( "border-primary/10", positions, @@ -132,6 +113,7 @@ const BentoBoxes = () => { action: "Explore benefits", href: "/layer-2/", imgSrc: ManBabyWomanImage, + imgWidth: 324, className: cn( "border-accent-a/10", positions, @@ -164,41 +146,5 @@ const BentoBoxes = () => { }, ] - return ( - <> - {/* Mobile */} - <div className="relative my-16 max-w-[min(calc(100vw_-_2rem),_30rem)] lg:hidden"> - <Title className="" /> - {/* TODO: Fix height constraints */} - <div className="swiper mt-4 h-fit"> - <div className="swiper-wrapper"> - {bentoBoxes.map(({ className, ...box }) => ( - <BentoBox - key={box.title} - imgHeight={160} - className={cn( - className, - "swiper-slide bg-background text-body" - )} - {...box} - imgWidth={undefined} // Intentionally last to override box - /> - ))} - </div> - </div> - </div> - - {/* Desktop */} - <div className="hidden lg:block"> - <div className="flex grid-cols-bento flex-row gap-4 lg:grid"> - <Title className="lg:col-span-12 lg:flex xl:col-span-3 xl:col-start-2" /> - {bentoBoxes.map((box) => ( - <BentoBox key={box.title} {...box} /> - ))} - </div> - </div> - </> - ) + return { items } } - -export default BentoBoxes diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx new file mode 100644 index 00000000000..14b40eb72fb --- /dev/null +++ b/src/components/SwiperCards/index.tsx @@ -0,0 +1,44 @@ +import { EffectCards } from "swiper/modules" +import { Swiper, SwiperSlide } from "swiper/react" + +import type { ClassNameProp } from "@/lib/types" + +import { cn } from "@/lib/utils/cn" + +import BentoCard from "../BentoBox/BentoCard" +import Title from "../BentoBox/Title" +import { useBentoBox } from "../BentoBox/useBentoBox" + +import "swiper/css" +import "swiper/css/effect-cards" +import "swiper/css/navigation" +import "swiper/css/pagination" + +// TODO: Fix height constraints on +const SwiperCards = ({ className }: ClassNameProp) => { + const { items } = useBentoBox() + return ( + <div className={cn(className, "max-w-full")}> + <Title /> + <Swiper + className="max//-w-[min(calc(100vw_-_2rem),_30rem)] mx-auto mt-4 h-fit max-w-128" + effect="cards" + grabCursor + modules={[EffectCards]} + > + {items.map(({ className, ...item }) => ( + <SwiperSlide key={item.title}> + <BentoCard + imgHeight={160} + className={cn(className, "bg-background text-body")} + {...item} + imgWidth={undefined} // Intentionally last to override box + /> + </SwiperSlide> + ))} + </Swiper> + </div> + ) +} + +export default SwiperCards diff --git a/src/lib/types.ts b/src/lib/types.ts index 571030d63a6..502e0a81212 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -32,6 +32,8 @@ export type Unpacked<T> = T extends (infer U)[] ? U : T export type ChildOnlyProp = { children?: ReactNode } +export type ClassNameProp = { className?: string } + export type NextPageWithLayout<P = Record<string, unknown>, IP = P> = NextPage< P, IP diff --git a/src/pages/index.tsx b/src/pages/index.tsx index b8d12dfaf33..7c42e2bf105 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -16,7 +16,7 @@ import type { } from "@/lib/types" import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" -import BentoBoxes from "@/components/BentoBoxes" +import BentoBox from "@/components/BentoBox" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" @@ -38,6 +38,7 @@ import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import RssPreviewCard from "@/components/RssPreviewCard" import StatsBoxGrid from "@/components/StatsBoxGrid" +import SwiperCards from "@/components/SwiperCards" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import { ButtonLink } from "@/components/ui/buttons/Button" import WindowBox from "@/components/WindowBox" @@ -277,7 +278,7 @@ const HomePage = ({ <div className="w-full"> <HomeHero heroImg={hero} /> </div> - <div className="space-y-16 px-4 sm:px-6 md:space-y-32"> + <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( <SvgButtonLink @@ -292,7 +293,11 @@ const HomePage = ({ ))} </div> - <BentoBoxes /> + {/* Mobile */} + <SwiperCards className="my-16 lg:hidden" /> + + {/* Desktop */} + <BentoBox className="hidden lg:block" /> <HomeSection tag="Activity" From ce36d0c7d8866d1ea6d9713ae5a64655d748ba7a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 12:32:55 -0700 Subject: [PATCH 134/273] chore: focus styling --- src/components/Buttons/SvgButtonLink.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 4c58d6585de..4deca31735d 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -40,6 +40,7 @@ const SvgButtonLink = ({ <Svg className={cn( "group-hover:rotate-3 group-hover:scale-110", + "group-focus:rotate-3 group-focus:scale-110", "text-4xl duration-200 group-hover:duration-200 group-focus:rotate-3" )} /> From 673879ff0f8a9729f544c5cedd74020bf64269ed Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:04:01 -0700 Subject: [PATCH 135/273] fix: deprecate/rm `date` --- src/components/UpcomingEventsList.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/UpcomingEventsList.tsx b/src/components/UpcomingEventsList.tsx index 1bc062cc221..d03d3a2a74f 100644 --- a/src/components/UpcomingEventsList.tsx +++ b/src/components/UpcomingEventsList.tsx @@ -145,7 +145,6 @@ const UpcomingEventsList = () => { to, href, formattedDetails, - date, location, imageUrl, startDate, @@ -157,7 +156,6 @@ const UpcomingEventsList = () => { key={idx} title={title} href={to || href} - date={date} description={formattedDetails} location={location} imageUrl={imageUrl} From af1181212599cd25d843baa21d01e7a89135c189 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:15:31 -0700 Subject: [PATCH 136/273] fix: outline variant text color --- src/components/ui/buttons/Button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ui/buttons/Button.tsx b/src/components/ui/buttons/Button.tsx index 0c67ee3d431..5747dd818a8 100644 --- a/src/components/ui/buttons/Button.tsx +++ b/src/components/ui/buttons/Button.tsx @@ -15,7 +15,7 @@ const buttonVariants = cva( variant: { solid: "text-white bg-primary-action border-transparent disabled:bg-disabled disabled:text-background hover:text-background hover:bg-primary-hover hover:shadow-button-hover active:shadow-none", - outline: "hover:shadow-button-hover active:shadow-none", + outline: "hover:shadow-button-hover active:shadow-none text-body", "outline-color": "hover:shadow-button-hover active:shadow-none border-primary", ghost: "border-transparent", From 25412fd268999c79221f36540184de66433da71a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:16:04 -0700 Subject: [PATCH 137/273] chore: clean up patches --- src/components/RssPreviewCard/index.tsx | 1 + src/pages/index.tsx | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/RssPreviewCard/index.tsx b/src/components/RssPreviewCard/index.tsx index 7b27e809984..cbc45507377 100644 --- a/src/components/RssPreviewCard/index.tsx +++ b/src/components/RssPreviewCard/index.tsx @@ -27,6 +27,7 @@ const RssPreviewCard = ({ "no-underline duration-100 hover:scale-105 hover:duration-100", className )} + hideArrow > <div className="flex flex-col space-y-2.5 text-body"> {/* eslint-disable-next-line @next/next/no-img-element */} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7c42e2bf105..6b12c35e6d8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -484,7 +484,8 @@ const HomePage = ({ </p> </div> <ButtonLink - className="h-fit w-full text-nowrap border-body px-5 !text-body sm:w-fit lg:self-center" + className="h-fit w-full text-nowrap px-5 sm:w-fit lg:self-center" + size="md" variant="outline" href={calendarLink} hideArrow @@ -500,7 +501,7 @@ const HomePage = ({ <div className="w-full"> <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> - News + Recent posts </h3> <p>The latest blog posts and updates from the community</p> <div className="mt-4 grid grid-cols-1 gap-8 md:mt-16 md:grid-cols-3 md:flex-row"> From e330d41bb12c9144f6cc7f07b9eb0c3e0efb13da Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:11:33 -0700 Subject: [PATCH 138/273] refactor: pass className to HomeHero --- src/components/Hero/HomeHero/index.tsx | 8 ++++---- src/pages/index.tsx | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 0a6361cae5d..7cab814154d 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -1,18 +1,18 @@ import NextImage from "next/image" import { useTranslation } from "next-i18next" -import type { CommonHeroProps } from "@/lib/types" +import type { ClassNameProp, CommonHeroProps } from "@/lib/types" import Morpher from "@/components/Morpher" import { cn } from "@/lib/utils/cn" -export type HomeHeroProps = Pick<CommonHeroProps, "heroImg"> +export type HomeHeroProps = Pick<CommonHeroProps, "heroImg"> & ClassNameProp -const HomeHero = ({ heroImg }: HomeHeroProps) => { +const HomeHero = ({ heroImg, className }: HomeHeroProps) => { const { t } = useTranslation("page-index") return ( - <div> + <div className={className}> <div className="h-[300px] sm:h-[350px] md:h-[380px] lg:h-[440px]"> <NextImage src={heroImg} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6b12c35e6d8..b69e7df86a4 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -275,9 +275,7 @@ const HomePage = ({ description={t("page-index:page-index-meta-description")} /> <TranslatathonBanner pathname={asPath} /> - <div className="w-full"> - <HomeHero heroImg={hero} /> - </div> + <HomeHero heroImg={hero} className="w-full" /> <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( From 1d05798f8ecfe0939664cda325cf7a1a640bbd3e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:12:28 -0700 Subject: [PATCH 139/273] style: update base `card` components and variants --- src/components/ui/card.tsx | 87 ++++++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 18 deletions(-) diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 6faf98b08f6..7d51c171b06 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -1,44 +1,87 @@ import * as React from "react" +import { cva, VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils/cn" -const Card = React.forwardRef< +import { BaseLink } from "./Link" + +const titleVariants = cva("", { + variants: { + variant: { + normal: "font-normal text-lg", + strong: "text-2xl font-bold", + }, + }, + defaultVariants: { + variant: "normal", + }, +}) + +type CardProps = React.HTMLAttributes<HTMLDivElement> & { + href?: string +} +const Card = React.forwardRef<HTMLDivElement, CardProps>( + ({ className, href, ...props }, ref) => { + if (href) { + return ( + <BaseLink + href={href} + className={cn( + "group rounded-2xl text-body no-underline hover:text-body", + className + )} + hideArrow + > + <div ref={ref} {...props} /> + </BaseLink> + ) + } + return ( + <div + ref={ref} + className={cn("group rounded-2xl", className)} + {...props} + /> + ) + } +) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< HTMLDivElement, React.HTMLAttributes<HTMLDivElement> >(({ className, ...props }, ref) => ( <div ref={ref} - className={cn( - "bg-card text-card-foreground rounded-lg border shadow-sm", - className - )} + className={cn("flex flex-col space-y-1.5 p-6", className)} {...props} /> )) -Card.displayName = "Card" +CardHeader.displayName = "CardHeader" -const CardHeader = React.forwardRef< +const CardBanner = React.forwardRef< HTMLDivElement, React.HTMLAttributes<HTMLDivElement> >(({ className, ...props }, ref) => ( <div ref={ref} - className={cn("flex flex-col space-y-1.5 p-6", className)} + className={cn( + "h-48 w-full self-stretch overflow-hidden rounded-2xl", + "[&_img]:size-full [&_img]:object-cover [&_img]:outline [&_img]:duration-200 group-hover:[&_img]:scale-110 group-hover:[&_img]:duration-200", + className + )} {...props} /> )) -CardHeader.displayName = "CardHeader" +CardBanner.displayName = "CardBanner" const CardTitle = React.forwardRef< HTMLParagraphElement, - React.HTMLAttributes<HTMLHeadingElement> ->(({ className, ...props }, ref) => ( + React.HTMLAttributes<HTMLHeadingElement> & VariantProps<typeof titleVariants> +>(({ className, variant, ...props }, ref) => ( <h3 ref={ref} - className={cn( - "text-2xl font-semibold leading-none tracking-tight", - className - )} + className={cn(titleVariants({ variant, className }))} {...props} /> )) @@ -50,7 +93,7 @@ const CardDescription = React.forwardRef< >(({ className, ...props }, ref) => ( <p ref={ref} - className={cn("text-muted-foreground text-sm", className)} + className={cn("text-sm text-body-medium", className)} {...props} /> )) @@ -60,7 +103,7 @@ const CardContent = React.forwardRef< HTMLDivElement, React.HTMLAttributes<HTMLDivElement> >(({ className, ...props }, ref) => ( - <div ref={ref} className={cn("p-6 pt-0", className)} {...props} /> + <div ref={ref} className={cn("space-y-2.5 p-2.5", className)} {...props} /> )) CardContent.displayName = "CardContent" @@ -76,4 +119,12 @@ const CardFooter = React.forwardRef< )) CardFooter.displayName = "CardFooter" -export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } +export { + Card, + CardBanner, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} From 006f18f5cb3ecf4f4f6ce4e0943c150a3b9863e8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:13:42 -0700 Subject: [PATCH 140/273] refactor: use reusable card components rm single-use EventPreviewCard and RssPreviewCard components; linting --- src/components/EventPreviewCard/index.tsx | 74 ---------------- src/components/RssPreviewCard/index.tsx | 57 ------------ src/pages/index.tsx | 103 +++++++++++++++++++--- 3 files changed, 90 insertions(+), 144 deletions(-) delete mode 100644 src/components/EventPreviewCard/index.tsx delete mode 100644 src/components/RssPreviewCard/index.tsx diff --git a/src/components/EventPreviewCard/index.tsx b/src/components/EventPreviewCard/index.tsx deleted file mode 100644 index d590b946d7a..00000000000 --- a/src/components/EventPreviewCard/index.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useRouter } from "next/router" - -import type { EventCardProps } from "@/lib/types" - -import { TwImage } from "@/components/Image" -import { Card, CardContent, CardHeader } from "@/components/ui/card" - -import { cn } from "@/lib/utils/cn" -import { isValidDate } from "@/lib/utils/date" - -import { BaseLink } from "../ui/Link" - -import EventFallback from "@/public/images/event-fallback.png" - -const EventPreviewCard = ({ - title, - href, - location, - description, - startDate, - endDate, - imageUrl, - className, -}: EventCardProps) => { - const { locale } = useRouter() - return ( - <BaseLink href={href} className={cn("no-underline", className)} hideArrow> - <Card - className={cn( - "w-full space-y-4", - "border-none shadow-none", - "transition-transform duration-100 hover:scale-105 hover:transition-transform hover:duration-100" - )} - > - <CardHeader className="h-48 w-full self-stretch overflow-hidden rounded-2xl bg-gradient-main p-0"> - {imageUrl ? ( - // eslint-disable-next-line @next/next/no-img-element - <img - src={imageUrl} - alt="" - className="max-w-full object-cover object-center" - /> - ) : ( - <TwImage - src={EventFallback} - alt="" - className="size-full object-cover text-body" - /> - )} - </CardHeader> - <CardContent className="space-y-8 p-2 text-body"> - <div> - <p className="text-lg">{title}</p> - <p className="text-sm italic text-body-medium"> - {(isValidDate(startDate) || isValidDate(endDate)) && - new Intl.DateTimeFormat(locale, { - month: "2-digit", - day: "2-digit", - year: "numeric", - }).formatRange( - new Date(isValidDate(startDate) ? startDate : endDate), - new Date(isValidDate(endDate) ? endDate : startDate) - )} - </p> - <p className="text-sm italic text-body-medium">{location}</p> - </div> - <p>{description}</p> - </CardContent> - </Card> - </BaseLink> - ) -} - -export default EventPreviewCard diff --git a/src/components/RssPreviewCard/index.tsx b/src/components/RssPreviewCard/index.tsx deleted file mode 100644 index cbc45507377..00000000000 --- a/src/components/RssPreviewCard/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useRouter } from "next/router" - -import type { RSSItem } from "@/lib/types" - -import { cn } from "@/lib/utils/cn" -import { isValidDate } from "@/lib/utils/date" - -import { BaseLink } from "../ui/Link" - -type RssPreviewCardProps = RSSItem & { - className?: string -} - -const RssPreviewCard = ({ - pubDate, - title, - source, - link, - imgSrc, - className, -}: RssPreviewCardProps) => { - const { locale } = useRouter() - return ( - <BaseLink - href={link} - className={cn( - "no-underline duration-100 hover:scale-105 hover:duration-100", - className - )} - hideArrow - > - <div className="flex flex-col space-y-2.5 text-body"> - {/* eslint-disable-next-line @next/next/no-img-element */} - <img - src={imgSrc} - alt="" - className="h-48 w-full rounded-2xl object-cover" - /> - {isValidDate(pubDate) && ( - <p className="text-sm italic"> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "numeric", - year: "numeric", - }).format(new Date(pubDate))} - </p> - )} - <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> - {source} - </div> - <p className="mb-2 text-2xl font-bold">{title}</p> - </div> - </BaseLink> - ) -} - -export default RssPreviewCard diff --git a/src/pages/index.tsx b/src/pages/index.tsx index b69e7df86a4..a8fe2c2b1b4 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -20,7 +20,6 @@ import BentoBox from "@/components/BentoBox" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" -import EventPreviewCard from "@/components/EventPreviewCard" import HomeHero from "@/components/Hero/HomeHero" import HomeSection from "@/components/HomeSection" import AngleBrackets from "@/components/icons/angle-brackets.svg" @@ -34,13 +33,20 @@ import ChooseNetworkIcon from "@/components/icons/network-layers.svg" import TryAppsIcon from "@/components/icons/phone-homescreen.svg" import RoadmapSign from "@/components/icons/roadmap-sign.svg" import Whitepaper from "@/components/icons/whitepaper.svg" +import { TwImage } from "@/components/Image" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" -import RssPreviewCard from "@/components/RssPreviewCard" import StatsBoxGrid from "@/components/StatsBoxGrid" import SwiperCards from "@/components/SwiperCards" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import { ButtonLink } from "@/components/ui/buttons/Button" +import { + Card, + CardBanner, + CardContent, + CardDescription, + CardTitle, +} from "@/components/ui/card" import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" @@ -70,6 +76,7 @@ import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" +import EventFallback from "@/public/images/event-fallback.png" import buildersImage from "@/public/images/heroes/developers-hub-hero.jpg" import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import learnImage from "@/public/images/heroes/learn-hub-hero.png" @@ -503,8 +510,28 @@ const HomePage = ({ </h3> <p>The latest blog posts and updates from the community</p> <div className="mt-4 grid grid-cols-1 gap-8 md:mt-16 md:grid-cols-3 md:flex-row"> - {rssItems.map((item) => ( - <RssPreviewCard key={item.title} {...item} /> + {rssItems.map(({ pubDate, title, source, link, imgSrc }) => ( + <Card key={title} href={link}> + <CardBanner> + {/* eslint-disable-next-line @next/next/no-img-element */} + <img src={imgSrc} alt="" /> + </CardBanner> + <CardContent className=""> + {isValidDate(pubDate) && ( + <p className="text-sm italic"> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "numeric", + year: "numeric", + }).format(new Date(pubDate))} + </p> + )} + <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> + {source} + </div> + <CardTitle variant="strong">{title}</CardTitle> + </CardContent> + </Card> ))} </div> </div> @@ -516,15 +543,65 @@ const HomePage = ({ <p>We have many community events scheduled around the globe</p> <div className="mt-4 md:mt-16"> <div className="grid grid-cols-1 gap-8 self-stretch sm:grid-cols-2 md:grid-cols-3"> - {upcomingEvents.map((event, idx) => ( - <EventPreviewCard - key={event.title} - {...event} - className={cn( - idx === 0 && "col-span-1 sm:col-span-2 md:col-span-1" - )} - /> - ))} + {upcomingEvents.map( + ( + { + title, + href, + location, + description, + startDate, + endDate, + imageUrl, + }, + idx + ) => ( + <Card + key={title + description} + href={href} + className={cn( + idx === 0 && "col-span-1 sm:col-span-2 md:col-span-1" + )} + > + <CardBanner> + {imageUrl ? ( + // eslint-disable-next-line @next/next/no-img-element + <img + src={imageUrl} + alt="" + className="max-w-full object-cover object-center" + /> + ) : ( + <TwImage src={EventFallback} alt="" /> + )} + </CardBanner> + <CardContent className="space-y-8 p-2"> + <div> + <CardTitle>{title}</CardTitle> + <CardDescription className="italic"> + {(isValidDate(startDate) || isValidDate(endDate)) && + new Intl.DateTimeFormat(locale, { + month: "2-digit", + day: "2-digit", + year: "numeric", + }).formatRange( + new Date( + isValidDate(startDate) ? startDate : endDate + ), + new Date( + isValidDate(endDate) ? endDate : startDate + ) + )} + </CardDescription> + <p className="text-sm italic text-body-medium"> + {location} + </p> + </div> + <p>{description}</p> + </CardContent> + </Card> + ) + )} </div> </div> <div className="flex justify-center py-8 md:justify-start"> From 735eae41c00caff32548879ee96cd0fb0093dcec Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:56:46 -0700 Subject: [PATCH 141/273] chore: up-res event-placeholder rm event-fallback --- public/images/event-fallback.png | Bin 19344 -> 0 bytes public/images/events/event-placeholder.png | Bin 1849 -> 4219 bytes src/pages/index.tsx | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 public/images/event-fallback.png diff --git a/public/images/event-fallback.png b/public/images/event-fallback.png deleted file mode 100644 index 208bfe04203c1f90dea3f837a564ccfe66b1c479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19344 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 VkG0)25qN+WgQu&X%Q~loCIH$QLva8A diff --git a/public/images/events/event-placeholder.png b/public/images/events/event-placeholder.png index 4a15165452a73dcca0848bd2b768daf3f8b34c0c..3f53dfc191764b1ccb61fb79077aafc2c592d33d 100644 GIT binary patch literal 4219 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 TKbZ*rD}YRl%nb|9J4XB$@A2Bj literal 1849 zcmc(g|3A}<7sua()Kc8&(_>M6RyTzx-{~&jcA4%SUAmL`R{6Hg+_JH2n}xbA?dJN7 zTM8vMbF-nv$oJGou9({9`y?4RGjAoe8OEKz;=Ue_bDrm%$2q^g&W*DHen#7&+W`PD z@<$?qw3KTj&Co!bZ<ZA9)?(WgWGD#$Ale$TTL&mA*{dDukb?ZYftr5v&2_zaFO(Mm z@be&R7xe+apx+<ibuLv0e4_}!gzn8={CcYk@hqYOlT3JjT^{>cOr^JF^rvB=mba@6 z?;GprmuyIxFWk=y98eR2rM0hurYHZi6jQBPFuF%mEkwYJg=k%%kk}miLYCwVTsgKI zc;d^>AR)H9`u&S2vL8+F(`OqnIp4)aN6TVQm)hxVc7Jh0YSH<JLwjb3c3aY=1CzV% zel<gMtCX&Qc@^GeXCX*^7%Ee(rbz#8fBlB1Nh6U8L`ibYk%FGBh&*KQ15EYpdSP1! z@yM++vBwWm5m2|{=^7qy<Rn(PPAce$LHV#Rc@E?_5*vg+{t2nOAIv6oT}pc1-=l~4 z4S5J{b!&TGBF+pS8uo5518ag~6N<S%)-R4&;kXYCkamt>Y>w$MSnj#D$Xa}sjmM0@ z85EEzS)v?kCJezg!GwqRC6tGi7F4$T*;V5c!nft@Wcp%LQoeLv6!{RO+`(k}H~Z_r z+#O6`-^|-i{D_?%US)d(ckB_29n2SBv!X@96S9(72cFd@ON-uTTVc6KmgrA>&}!-F zcjeI%9*PDAJ<B-yF`MyAK-ppF-fEA}t@m#5i>Dx3z4MEYa|8uC;vi2`qRtN^V`Gmm ziq?4VZTjTk)YO!eZgj)D<L$=Ehnp(L&w;ABIlSp4l<9jRF)`8q2fB+*a|>}SaSyFM z+;(f$veSTEh;<UqEU8oADz~Rju#|wXVP1r%2i%hC(pMRoe=2uGw{0KqYAmW_Bb*CT zGQtpZ<IS^cai1KLCgMNT$p%mH@xT6oo4p#Mx~v-x3+l!TFgOaONjY+Gwu!@s>K9?9 zEh2exyWW%kCl5FJ=O30usr?-^>o?GI3ZOA(fG?BD)>l;@Hn5G-sCo-cROKV6`KVI) zWDu{Rq^72tPVSLLbQ7=xAldT3=``%EGZhk{P#BA%MvY{~Ec;UxLagJQlG^5@S-206 zi@L-Kb}3;bF_0E@uWl~P&+`<id>WZdRxirBhvahkw=B{5;QH@gsZDR*{r(6&i;_&C zP@EgA!6mi2qM~B#itGFw4wkZcKZufyld2!ong#o1?oUV<lPFb08m$FWJ3MSg{4{cs zd;fqn0wjc4Xs{g)EQ!05CgHt*AjjG&?PWWCb;!0MKsQ|M)~C3{ca1O9!-ruc58?wB zmGh}7>FFITP$AfF7ufiejPI&(FA`rH6<f7dJ_W;P5t1p!wYNjPAp)@N(ZdCB@mL8= zY<To>qyTdqPpf)9ki}RCabjBFr0(Z<g_zJ&bIJYdv~5|1e561CA6{L5Jg8b(p%UI^ zvl|ofU&deCQX(5gYPGrseZHZo-voEK9;P%KD@S{-Vpt^$A*OL&dAl6-nunZ6YMz6m zNmb7X2@u+ey*p|M%P~=C&hR=%WmehErv?VsHW^;YLmn!d^u@rl88y^>m=|bt;&pJT ztf9-|sC!uGt9o~3;w<}?r2XWKU?P54bG6vedfp+c^_8v5&JxSqzdAcJBjTk^t9SId z#x4`BlseYK%fcy}u@Dy<yUU8@FF$A98K-GJPEW_=^#ZcaWEcC=({%UOxV!nkAMaTG z{ZLmSc4k~G<Blo&rIq1vt#saCLr=G4>e(4+sYoPZqGC48imI!!yvvq7A9!tH`&j%& z-cs((HW8Br-00Ww5ictrUJjH@L^m`o{#T5Yo6DIE)qyMKv!9b8(s5U<8JLc<M+sMl zUZ#Fw4UY<%q0V$s@}0nD1Os`9BkSdoTi&dR%zPM2=cVHXo9;2~h;Wyn8{i7J>T)`K zc-qzRCq$8Mw!Qhz4^ePO_#69eIZ!4i!{`_HdjTYvq}#N5|J+CUZPSC|KOO~k9qoHA zJ<vi1f3hu%E-uzZ6v0|rT8^Jeue#t-Cq(VCg?w+a&luE7VVlV@w8pI%V_zB{n>1(Y p_M7~xm@&BCdBQ)x7kFCHp<@gDk7@aH<mO8R{J#xA)OcUG_77?WioXB= diff --git a/src/pages/index.tsx b/src/pages/index.tsx index a8fe2c2b1b4..d0648d003f1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -76,7 +76,7 @@ import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import { fetchTxCount } from "@/lib/api/fetchTxCount" -import EventFallback from "@/public/images/event-fallback.png" +import EventFallback from "@/public/images/events/event-placeholder.png" import buildersImage from "@/public/images/heroes/developers-hub-hero.jpg" import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import learnImage from "@/public/images/heroes/learn-hub-hero.png" From 99b67e97a831bd8dacae9c087fccf2192702d403 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:57:21 -0700 Subject: [PATCH 142/273] refactor: mv attestant fetch to fetchPosts --- src/lib/api/{fetchAttestantPosts.ts => fetchPosts.ts} | 6 +++--- src/pages/index.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/lib/api/{fetchAttestantPosts.ts => fetchPosts.ts} (88%) diff --git a/src/lib/api/fetchAttestantPosts.ts b/src/lib/api/fetchPosts.ts similarity index 88% rename from src/lib/api/fetchAttestantPosts.ts rename to src/lib/api/fetchPosts.ts index 38359ea0d22..6729f3eb0f4 100644 --- a/src/lib/api/fetchAttestantPosts.ts +++ b/src/lib/api/fetchPosts.ts @@ -7,10 +7,10 @@ export const fetchAttestantPosts = async () => { const htmlData = (await fetchXml(BASE_URL)) as HTMLResult // Extract div containing list of posts from deeply nested HTML structure - const attestantPostsContainer = + const postsContainer = htmlData.html.body[0].div[0].div[1].div[0].div[0].div[0].div - const attestantBlogItems: RSSItem[] = attestantPostsContainer + const posts: RSSItem[] = postsContainer .map(({ a }) => { const [ { @@ -34,5 +34,5 @@ export const fetchAttestantPosts = async () => { (a: RSSItem, b: RSSItem) => new Date(b.pubDate).getTime() - new Date(a.pubDate).getTime() ) - return attestantBlogItems + return posts } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d0648d003f1..41aefb14457 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -70,8 +70,8 @@ import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistr import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" -import { fetchAttestantPosts } from "@/lib/api/fetchAttestantPosts" import { fetchNodes } from "@/lib/api/fetchNodes" +import { fetchAttestantPosts } from "@/lib/api/fetchPosts" import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" From e08f39e48ab9856b2b0a98d629785689afae35a2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 15:58:35 -0700 Subject: [PATCH 143/273] feat: add solidity and panda ops rss feeds --- public/images/panda-ops-banner.png | Bin 0 -> 45580 bytes public/images/solidity-banner.png | Bin 0 -> 6629 bytes src/lib/constants.ts | 4 +++- src/lib/utils/rss.ts | 35 ++++++++++++++++++++++------- 4 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 public/images/panda-ops-banner.png create mode 100644 public/images/solidity-banner.png diff --git a/public/images/panda-ops-banner.png b/public/images/panda-ops-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6f80160d92e14f3dcf319cb62c43b8a4cd66e086 GIT binary patch literal 45580 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 literal 0 HcmV?d00001 diff --git a/public/images/solidity-banner.png b/public/images/solidity-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd5a37c62e88551789509f37d365148217a0efe GIT binary patch literal 6629 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 Dg}{B4 literal 0 HcmV?d00001 diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 3a5ea917720..7b4a180cae1 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -161,4 +161,6 @@ export const LINES_BEFORE_COLLAPSABLE = 8 export const RSS_DISPLAY_COUNT = 3 export const VITALIK_BLOG = "https://vitalik.eth.limo/feed.xml" export const EF_BLOG = "https://blog.ethereum.org/en/feed.xml" -export const XML_FEEDS = [VITALIK_BLOG, EF_BLOG] +export const PANDA_OPS_BLOG = "https://ethpandaops.io/posts/index.xml" +export const SOLIDITY_BLOG = "https://soliditylang.org/feed.xml" +export const XML_FEEDS = [VITALIK_BLOG, EF_BLOG, PANDA_OPS_BLOG, SOLIDITY_BLOG] diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts index dcb803fe54e..679cb3fcac7 100644 --- a/src/lib/utils/rss.ts +++ b/src/lib/utils/rss.ts @@ -1,4 +1,9 @@ -import { RSS_DISPLAY_COUNT, VITALIK_BLOG } from "../constants" +import { + PANDA_OPS_BLOG, + RSS_DISPLAY_COUNT, + SOLIDITY_BLOG, + VITALIK_BLOG, +} from "../constants" import type { RSSItem } from "../types" export const sortByPubDate = (items: RSSItem[]) => @@ -12,18 +17,32 @@ export const sortByPubDate = (items: RSSItem[]) => return dateB.getTime() - dateA.getTime() }) -export const addVitalikBanner = (rssItems: RSSItem[]) => +export const postProcess = (rssItems: RSSItem[]) => rssItems.map((item) => { - if (item.sourceFeedUrl !== VITALIK_BLOG) return item - return { - ...item, - imgSrc: "/images/vitalik-blog-banner.png", - link: item.link.replace(".ca", ".eth.limo"), + switch (item.sourceFeedUrl) { + case VITALIK_BLOG: + return { + ...item, + imgSrc: "/images/vitalik-blog-banner.png", + link: item.link.replace(".ca", ".eth.limo"), + } + case PANDA_OPS_BLOG: + return { + ...item, + imgSrc: "/images/panda-ops-banner.png", + } + case SOLIDITY_BLOG: + return { + ...item, + imgSrc: "/images/solidity-banner.png", + } + default: + return item } }) export const polishRSSList = (...items: RSSItem[][]) => { const allItems = items.flat() - const readyForSorting = addVitalikBanner(allItems) + const readyForSorting = postProcess(allItems) return sortByPubDate(readyForSorting).slice(0, RSS_DISPLAY_COUNT) } From 150d954422bceba22bc6152e2de7e858abdd6919 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:20:45 -0700 Subject: [PATCH 144/273] chore(deps): bump swiper --- package.json | 2 +- yarn.lock | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 07954af70ae..fbaa0210da9 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "react-select": "5.8.0", "reading-time": "^1.5.0", "remark-gfm": "^3.0.1", - "swiper": "^11.1.9", + "swiper": "^11.1.10", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", "usehooks-ts": "^3.1.0", diff --git a/yarn.lock b/yarn.lock index 0e3c4ec47fc..7de2c048255 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13112,6 +13112,7 @@ prelude-ls@^1.2.1: integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== "prettier-fallback@npm:prettier@^3", prettier@^3.1.1: + name prettier-fallback version "3.3.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== @@ -14740,11 +14741,16 @@ svgo@^3.0.2: csso "^5.0.5" picocolors "^1.0.0" -swiper@*, swiper@^11.1.9: +swiper@*: version "11.1.9" resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.1.9.tgz#55505c7cf4723b678df8220fc06152b793585dbc" integrity sha512-rflu8zvfGa3x1v/aeSufk4zRJffhOQowyvtJlp46sUBnOqAuk1Rdv5Ldj0AWWBV595iZ+ZMk7VB35ZRtRUomtA== +swiper@^11.1.10: + version "11.1.10" + resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.1.10.tgz#4d3df50ff8afc4960e9644ed6e5828d35ab38853" + integrity sha512-pAVM6vCb6bumj2B9aSh67l3wP1j5YR8dPQM1YhQKMpnBc33vs+RpyVz6NZYZl/ZopCBSYbbWK5nvESwbmU0QXQ== + tailwind-merge@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.4.0.tgz#1345209dc1f484f15159c9180610130587703042" From dcd10b15cdd467c01eb101c5e6643bf4b2cbf235 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:23:00 -0700 Subject: [PATCH 145/273] chore: remove unused class --- src/components/SwiperCards/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx index 14b40eb72fb..d9ac2c47697 100644 --- a/src/components/SwiperCards/index.tsx +++ b/src/components/SwiperCards/index.tsx @@ -21,7 +21,7 @@ const SwiperCards = ({ className }: ClassNameProp) => { <div className={cn(className, "max-w-full")}> <Title /> <Swiper - className="max//-w-[min(calc(100vw_-_2rem),_30rem)] mx-auto mt-4 h-fit max-w-128" + className="mx-auto mt-4 h-fit max-w-128" effect="cards" grabCursor modules={[EffectCards]} From 1fdea2936d57eb412e74a378e6910cf69c026dbd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:23:27 -0700 Subject: [PATCH 146/273] refactor: extract PostPreviewCard --- src/components/Homepage/PostPreviewCard.tsx | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/components/Homepage/PostPreviewCard.tsx diff --git a/src/components/Homepage/PostPreviewCard.tsx b/src/components/Homepage/PostPreviewCard.tsx new file mode 100644 index 00000000000..9e69f172b15 --- /dev/null +++ b/src/components/Homepage/PostPreviewCard.tsx @@ -0,0 +1,36 @@ +import { useRouter } from "next/router" + +import type { RSSItem } from "@/lib/types" + +import { isValidDate } from "@/lib/utils/date" + +import { Card, CardBanner, CardContent, CardTitle } from "../ui/card" + +const PostPreviewCard = ({ pubDate, title, source, link, imgSrc }: RSSItem) => { + const { locale } = useRouter() + return ( + <Card href={link}> + <CardBanner> + {/* eslint-disable-next-line @next/next/no-img-element */} + <img src={imgSrc} alt="" /> + </CardBanner> + <CardContent className=""> + {isValidDate(pubDate) && ( + <p className="text-sm italic"> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "numeric", + year: "numeric", + }).format(new Date(pubDate))} + </p> + )} + <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> + {source} + </div> + <CardTitle variant="strong">{title}</CardTitle> + </CardContent> + </Card> + ) +} + +export default PostPreviewCard From d22b0fde7ae8e0ee37ace8fab1800f7832e6f022 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:23:42 -0700 Subject: [PATCH 147/273] feat: create PostsSwiper component --- src/components/PostsSwiper/index.tsx | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/components/PostsSwiper/index.tsx diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx new file mode 100644 index 00000000000..629c67f04f0 --- /dev/null +++ b/src/components/PostsSwiper/index.tsx @@ -0,0 +1,40 @@ +import { Keyboard /* , Pagination */ } from "swiper/modules" +import { Swiper, SwiperSlide } from "swiper/react" + +import type { ClassNameProp, RSSItem } from "@/lib/types" + +import { cn } from "@/lib/utils/cn" + +import PostPreviewCard from "../Homepage/PostPreviewCard" + +import "swiper/css" +// import "swiper/css/navigation" +// import "swiper/css/pagination" + +type PostsSwiperProps = ClassNameProp & { + items: RSSItem[] +} +const PostsSwiper = ({ className, items }: PostsSwiperProps) => ( + <div className={cn("h-fit gap-8", className)}> + <Swiper + cssMode + // navigation + // pagination + keyboard + spaceBetween={32} + modules={[ + // Navigation, + // Pagination, + Keyboard, + ]} + > + {items.map((item) => ( + <SwiperSlide key={item.title}> + <PostPreviewCard {...item} /> + </SwiperSlide> + ))} + </Swiper> + </div> +) + +export default PostsSwiper From d42a1165adb38637ce56ce5096324115d318015d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:26:29 -0700 Subject: [PATCH 148/273] feat: implement mobile PostsSwiper --- src/pages/index.tsx | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 41aefb14457..1ab913cc623 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -21,6 +21,7 @@ import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" +import PostPreviewCard from "@/components/Homepage/PostPreviewCard" import HomeSection from "@/components/HomeSection" import AngleBrackets from "@/components/icons/angle-brackets.svg" import BlockHeap from "@/components/icons/block-heap.svg" @@ -36,6 +37,7 @@ import Whitepaper from "@/components/icons/whitepaper.svg" import { TwImage } from "@/components/Image" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" +import PostsSwiper from "@/components/PostsSwiper" import StatsBoxGrid from "@/components/StatsBoxGrid" import SwiperCards from "@/components/SwiperCards" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" @@ -509,29 +511,13 @@ const HomePage = ({ Recent posts </h3> <p>The latest blog posts and updates from the community</p> - <div className="mt-4 grid grid-cols-1 gap-8 md:mt-16 md:grid-cols-3 md:flex-row"> - {rssItems.map(({ pubDate, title, source, link, imgSrc }) => ( - <Card key={title} href={link}> - <CardBanner> - {/* eslint-disable-next-line @next/next/no-img-element */} - <img src={imgSrc} alt="" /> - </CardBanner> - <CardContent className=""> - {isValidDate(pubDate) && ( - <p className="text-sm italic"> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "numeric", - year: "numeric", - }).format(new Date(pubDate))} - </p> - )} - <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> - {source} - </div> - <CardTitle variant="strong">{title}</CardTitle> - </CardContent> - </Card> + {/* Mobile */} + <PostsSwiper items={rssItems} className="mt-4 md:hidden" /> + + {/* Desktop */} + <div className="hidden gap-8 md:mt-16 md:grid md:grid-cols-3"> + {rssItems.map((post) => ( + <PostPreviewCard key={post.title} {...post} /> ))} </div> </div> From 65e8c1c62dbdbe2f2c4af6efd365cf77e313c4ae Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 18:50:50 -0700 Subject: [PATCH 149/273] feat: add "read more" blogs --- src/lib/constants.ts | 15 +++++++++++++++ src/pages/index.tsx | 21 ++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 7b4a180cae1..a2274983300 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -164,3 +164,18 @@ export const EF_BLOG = "https://blog.ethereum.org/en/feed.xml" export const PANDA_OPS_BLOG = "https://ethpandaops.io/posts/index.xml" export const SOLIDITY_BLOG = "https://soliditylang.org/feed.xml" export const XML_FEEDS = [VITALIK_BLOG, EF_BLOG, PANDA_OPS_BLOG, SOLIDITY_BLOG] + +export const ALL_COMMUNITY_BLOGS = [ + { name: "Vitalik Buterin", href: "https://vitalik.eth.limo/" }, + { name: "Ethereum Foundation", href: "https://blog.ethereum.org/" }, + { name: "ethPandaOps", href: "https://ethpandaops.io/posts/" }, + { name: "EthStaker", href: "https://ethstaker.cc/blog" }, + { name: "0xParc", href: "https://0xparc.org/blog" }, + { name: "Attestant", href: "https://www.attestant.io/posts/" }, + { name: "Devcon", href: "https://devcon.org/en/blogs/" }, + { name: "Solidity", href: "https://soliditylang.org/blog/" }, + { + name: "Privacy and Scaling Explorations", + href: "https://mirror.xyz/privacy-scaling-explorations.eth", + }, +] diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 1ab913cc623..aa3986d5b18 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -49,6 +49,7 @@ import { CardDescription, CardTitle, } from "@/components/ui/card" +import Link from "@/components/ui/Link" import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" @@ -65,7 +66,12 @@ import { import events from "@/data/community-events.json" -import { BASE_TIME_UNIT, GITHUB_REPO_URL, XML_FEEDS } from "@/lib/constants" +import { + ALL_COMMUNITY_BLOGS, + BASE_TIME_UNIT, + GITHUB_REPO_URL, + XML_FEEDS, +} from "@/lib/constants" import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" @@ -502,8 +508,6 @@ const HomePage = ({ </div> ))} </WindowBox> - - {/* TODO: News sub-section */} </HomeSection> <div className="w-full"> @@ -520,6 +524,17 @@ const HomePage = ({ <PostPreviewCard key={post.title} {...post} /> ))} </div> + + <div className="flex flex-col items-center justify-center gap-2 self-stretch rounded-2xl border p-8"> + <p className="w-full text-lg">Read more on these websites</p> + <div className="flex flex-wrap gap-1"> + {ALL_COMMUNITY_BLOGS.map(({ name, href }) => ( + <Link href={href} key={name}> + {name} + </Link> + ))} + </div> + </div> </div> <div className="w-full"> From a3d7639b02f94cedacfb638e56f9915fd4056076 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 20:19:36 -0700 Subject: [PATCH 150/273] chore: dim gradient --- src/components/Hero/HomeHero/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 7cab814154d..b1c412c4c83 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -26,7 +26,7 @@ const HomeHero = ({ heroImg, className }: HomeHeroProps) => { <div className={cn( "flex flex-col items-center space-y-4 border-t-[3px] border-primary-low-contrast px-4 py-8 text-center lg:space-y-7", - "bg-gradient-to-b from-purple-500/10 from-0% to-purple-500/0 to-25% dark:from-purple-500/50" + "bg-gradient-to-b from-purple-500/10 from-0% to-purple-500/0 to-25% dark:from-purple-500/30" )} > <Morpher /> From 78d6df7fbb1c2c65d5024fb75117a39fa35308f9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 22 Aug 2024 20:27:33 -0700 Subject: [PATCH 151/273] chore: layout adjustments --- src/pages/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index aa3986d5b18..d01538a7a72 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -525,9 +525,9 @@ const HomePage = ({ ))} </div> - <div className="flex flex-col items-center justify-center gap-2 self-stretch rounded-2xl border p-8"> - <p className="w-full text-lg">Read more on these websites</p> - <div className="flex flex-wrap gap-1"> + <div className="flex flex-col gap-2 rounded-2xl border p-8"> + <p className="text-lg">Read more on these websites</p> + <div className="flex flex-wrap gap-x-2 gap-y-1"> {ALL_COMMUNITY_BLOGS.map(({ name, href }) => ( <Link href={href} key={name}> {name} From 32d22c3258d8a5217304c890f655f8c36c39bba7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 23 Aug 2024 12:23:48 -0700 Subject: [PATCH 152/273] style: add missing spacing --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d01538a7a72..fbeaf7db668 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -525,7 +525,7 @@ const HomePage = ({ ))} </div> - <div className="flex flex-col gap-2 rounded-2xl border p-8"> + <div className="mt-8 flex flex-col gap-2 rounded-2xl border p-8"> <p className="text-lg">Read more on these websites</p> <div className="flex flex-wrap gap-x-2 gap-y-1"> {ALL_COMMUNITY_BLOGS.map(({ name, href }) => ( From 2b6da02d996f8b274ab1bdfd92acb88b96a70c40 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:49:46 -0700 Subject: [PATCH 153/273] feat: add growthepie metrics --- .../StatsBoxGrid/useStatsBoxGrid.tsx | 95 ++++++++++--------- src/lib/api/fetchEthPrice.ts | 17 ++++ src/lib/api/fetchGrowThePie.ts | 64 +++++++++++++ src/lib/types.ts | 9 +- src/pages/index.tsx | 16 ++-- 5 files changed, 148 insertions(+), 53 deletions(-) create mode 100644 src/lib/api/fetchEthPrice.ts create mode 100644 src/lib/api/fetchGrowThePie.ts diff --git a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx index 91b8a9acc01..9db58af6556 100644 --- a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx +++ b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx @@ -1,7 +1,6 @@ /** * TODO: Update metric for new homepage: - * - Replace TVL DeFi with "Total value held on Ethereum" - * - Replace Node Count with "Average transaction cost" + * - [ ] Replace TVL DeFi with "Total value held on Ethereum" */ import { useRouter } from "next/router" import { useTranslation } from "next-i18next" @@ -10,96 +9,104 @@ import type { AllMetricData, Lang, StatsBoxMetric } from "@/lib/types" import { getLocaleForNumberFormat } from "@/lib/utils/translations" -const formatTotalStaked = (amount: number, locale: string): string => { +const formatLargeUSD = (value: number, locale: string): string => { return new Intl.NumberFormat(locale, { + style: "currency", + currency: "USD", notation: "compact", minimumSignificantDigits: 3, maximumSignificantDigits: 4, - }).format(amount) + }).format(value) } -const formatTVL = (tvl: number, locale: string): string => { +const formatSmallUSD = (value: number, locale: string): string => { return new Intl.NumberFormat(locale, { style: "currency", currency: "USD", notation: "compact", - minimumSignificantDigits: 3, - maximumSignificantDigits: 4, - }).format(tvl) + minimumSignificantDigits: 2, + maximumSignificantDigits: 3, + }).format(value) } -const formatTxs = (txs: number, locale: string): string => { +const formatLargeNumber = (value: number, locale: string): string => { return new Intl.NumberFormat(locale, { notation: "compact", minimumSignificantDigits: 3, maximumSignificantDigits: 4, - }).format(txs) -} - -const formatNodes = (nodes: number, locale: string): string => { - return new Intl.NumberFormat(locale, { - minimumSignificantDigits: 3, - maximumSignificantDigits: 4, - }).format(nodes) + }).format(value) } export const useStatsBoxGrid = ({ totalEthStaked, - nodeCount, totalValueLocked, txCount, + txCostsMedianUsd, + ethPrice, }: AllMetricData): StatsBoxMetric[] => { const { t } = useTranslation("page-index") const { locale } = useRouter() const localeForNumberFormat = getLocaleForNumberFormat(locale! as Lang) - const totalEtherStaked = - "error" in totalEthStaked - ? { error: totalEthStaked.error } - : { - value: formatTotalStaked(totalEthStaked.value, localeForNumberFormat), - } + const hasEthStakerAndPriceData = + "value" in totalEthStaked && "value" in ethPrice + const totalStakedInUsd = hasEthStakerAndPriceData + ? totalEthStaked.value * ethPrice.value + : 0 + + const totalEtherStaked = !totalStakedInUsd + ? { + error: + "error" in totalEthStaked + ? totalEthStaked.error + : "error" in ethPrice + ? ethPrice.error + : "", + } + : { + value: formatLargeUSD(totalStakedInUsd, localeForNumberFormat), + } const valueLocked = "error" in totalValueLocked ? { error: totalValueLocked.error } - : { value: formatTVL(totalValueLocked.value, localeForNumberFormat) } + : { value: formatLargeUSD(totalValueLocked.value, localeForNumberFormat) } const txs = "error" in txCount ? { error: txCount.error } - : { value: formatTxs(txCount.value, localeForNumberFormat) } + : { value: formatLargeNumber(txCount.value, localeForNumberFormat) } - const nodes = - "error" in nodeCount - ? { error: nodeCount.error } - : { value: formatNodes(nodeCount.value, localeForNumberFormat) } + const medianTxCost = + "error" in txCostsMedianUsd + ? { error: txCostsMedianUsd.error } + : { value: formatSmallUSD(txCostsMedianUsd.value, localeForNumberFormat) } const metrics: StatsBoxMetric[] = [ { - apiProvider: "Dune Analytics", - apiUrl: "https://dune.com/", - label: t("page-index-network-stats-total-eth-staked"), - state: totalEtherStaked, + apiProvider: "DeFi Llama", + apiUrl: "https://defillama.com/", + label: t("page-index-network-stats-value-defi-description"), + state: valueLocked, }, { - apiProvider: "Etherscan", - apiUrl: "https://etherscan.io/", + apiProvider: "GrowThePie", + apiUrl: "https://growthepie.xyz/", label: t("page-index-network-stats-tx-day-description"), state: txs, }, { - apiProvider: "DeFi Llama", - apiUrl: "https://defillama.com/", - label: t("page-index-network-stats-value-defi-description"), - state: valueLocked, + apiProvider: "GrowThePie", + apiUrl: "https://growthepie.xyz/", + label: "Median transaction cost", // t("page-index-network-stats-nodes-description"), + state: medianTxCost, }, { - apiProvider: "Etherscan", - apiUrl: "https://etherscan.io/nodetracker", - label: t("page-index-network-stats-nodes-description"), - state: nodes, + apiProvider: "Dune Analytics", + apiUrl: "https://dune.com/", + label: t("page-index-network-stats-total-eth-staked"), + state: totalEtherStaked, }, ] diff --git a/src/lib/api/fetchEthPrice.ts b/src/lib/api/fetchEthPrice.ts new file mode 100644 index 00000000000..c506a369a57 --- /dev/null +++ b/src/lib/api/fetchEthPrice.ts @@ -0,0 +1,17 @@ +import { MetricReturnData } from "../types" + +export const fetchEthPrice = async (): Promise<MetricReturnData> => { + try { + const data: { ethereum: { usd: number } } = await fetch( + "https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd" + ).then((res) => res.json()) + const { + ethereum: { usd }, + } = data + if (!usd) throw new Error("Unable to fetch ETH price from CoinGecko") + return { value: usd } + } catch (error: unknown) { + console.error((error as Error).message) + return { error: (error as Error).message } + } +} diff --git a/src/lib/api/fetchGrowThePie.ts b/src/lib/api/fetchGrowThePie.ts new file mode 100644 index 00000000000..398b5d0730c --- /dev/null +++ b/src/lib/api/fetchGrowThePie.ts @@ -0,0 +1,64 @@ +import type { GrowThePieData } from "../types" + +type DataItem = { + metric_key: string + origin_key: string + date: string + value: number +} + +const TXCOSTS_MEDIAN_USD = "txcosts_median_usd" +const TXCOUNT = "txcount" + +export const fetchGrowThePie = async (): Promise<GrowThePieData> => { + const url = "https://api.growthepie.xyz/v1/fundamentals_full.json" + try { + const response = await fetch(url) + if (!response.ok) { + console.log(response.status, response.statusText) + throw new Error("Failed to fetch GrowThePie data") + } + const data: DataItem[] = await response.json() + + const mostRecentDate = data.reduce((latest, item) => { + const itemDate = new Date(item.date) + return itemDate > new Date(latest) ? item.date : latest + }, data[0].date) + + const todaysData = data.filter( + (item) => + item.date === mostRecentDate && + [TXCOSTS_MEDIAN_USD, TXCOUNT].includes(item.metric_key) + ) + + let totalTxCount = 0 + let weightedSum = 0 + + todaysData.forEach((item) => { + if (item.metric_key !== TXCOSTS_MEDIAN_USD) return + + const txCountItem = todaysData.find( + (txItem) => + txItem.metric_key === TXCOUNT && txItem.origin_key === item.origin_key + ) + if (!txCountItem) return + + totalTxCount += txCountItem.value + weightedSum += item.value * txCountItem.value + }) + + // The weighted average of txcosts_median_usd, by txcount on each network (origin_key) + const weightedAverage = totalTxCount ? weightedSum / totalTxCount : 0 + + return { + txCount: { value: totalTxCount }, + txCostsMedianUsd: { value: weightedAverage }, + } + } catch (error: unknown) { + console.error((error as Error).message) + return { + txCount: { error: (error as Error).message }, + txCostsMedianUsd: { error: (error as Error).message }, + } + } +} diff --git a/src/lib/types.ts b/src/lib/types.ts index 502e0a81212..c5f951fcbc5 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -539,11 +539,16 @@ export type MetricReturnData = ValueOrError<number> export type StatsBoxState = ValueOrError<string> +export type GrowThePieMetricKey = "txCount" | "txCostsMedianUsd" + +export type GrowThePieData = Record<GrowThePieMetricKey, MetricReturnData> + export type MetricName = + | "ethPrice" // Use with `totalEthStaked` to convert ETH to USD | "totalEthStaked" - | "nodeCount" | "totalValueLocked" - | "txCount" + | GrowThePieMetricKey + export type AllMetricData = Record<MetricName, MetricReturnData> export type StatsBoxMetric = { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index fbeaf7db668..9f21707a9ef 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -78,12 +78,12 @@ import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistr import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" -import { fetchNodes } from "@/lib/api/fetchNodes" +import { fetchEthPrice } from "@/lib/api/fetchEthPrice" +import { fetchGrowThePie } from "@/lib/api/fetchGrowThePie" import { fetchAttestantPosts } from "@/lib/api/fetchPosts" import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" -import { fetchTxCount } from "@/lib/api/fetchTxCount" import EventFallback from "@/public/images/events/event-placeholder.png" import buildersImage from "@/public/images/heroes/developers-hub-hero.jpg" import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" @@ -91,13 +91,13 @@ import learnImage from "@/public/images/heroes/learn-hub-hero.png" import communityImage from "@/public/images/heroes/quizzes-hub-hero.png" import hero from "@/public/images/home/hero.png" -const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) +const cachedEthPrice = runOnlyOnce(fetchEthPrice) const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) -const cachedFetchNodes = runOnlyOnce(fetchNodes) const cachedFetchTotalValueLocked = runOnlyOnce(fetchTotalValueLocked) -const cachedFetchTxCount = runOnlyOnce(fetchTxCount) const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(XML_FEEDS)) const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) +const cachedGrowThePieData = runOnlyOnce(fetchGrowThePie) +const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) type Props = BasePageProps & { communityEvents: CommunityEventsReturnType @@ -106,11 +106,13 @@ type Props = BasePageProps & { } export const getStaticProps = (async ({ locale }) => { + const growThePieData = await cachedGrowThePieData() const metricResults: AllMetricData = { + ethPrice: await cachedEthPrice(), totalEthStaked: await cachedFetchTotalEthStaked(), - nodeCount: await cachedFetchNodes(), totalValueLocked: await cachedFetchTotalValueLocked(), - txCount: await cachedFetchTxCount(), + txCount: growThePieData.txCount, + txCostsMedianUsd: growThePieData.txCostsMedianUsd, } const communityEvents = await cachedFetchCommunityEvents() From 6acde0e3ed0851ef365f28df3b257abf2b3f9ac4 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:38:04 -0700 Subject: [PATCH 154/273] fix: swiper card width and overflow handling --- src/components/SwiperCards/index.tsx | 7 ++++++- src/pages/index.tsx | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx index d9ac2c47697..e0299abb9ec 100644 --- a/src/components/SwiperCards/index.tsx +++ b/src/components/SwiperCards/index.tsx @@ -18,7 +18,12 @@ import "swiper/css/pagination" const SwiperCards = ({ className }: ClassNameProp) => { const { items } = useBentoBox() return ( - <div className={cn(className, "max-w-full")}> + <div + className={cn( + "-mx-4 w-[100vw] overflow-hidden px-4 sm:-mx-6 sm:px-6", + className + )} + > <Title /> <Swiper className="mx-auto mt-4 h-fit max-w-128" diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 9f21707a9ef..ff53284b34d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -309,7 +309,7 @@ const HomePage = ({ </div> {/* Mobile */} - <SwiperCards className="my-16 lg:hidden" /> + <SwiperCards className="lg:hidden" /> {/* Desktop */} <BentoBox className="hidden lg:block" /> From 7e0d7ad551ee64abcc35c2c09e2a66653a125584 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 23 Aug 2024 18:12:52 -0700 Subject: [PATCH 155/273] feat: add variants to SvgButtonLink --- src/components/Buttons/SvgButtonLink.tsx | 25 ++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 4deca31735d..eb0741fa6a3 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -1,3 +1,4 @@ +import { cva, VariantProps } from "class-variance-authority" import type { FC, ReactNode, SVGProps } from "react" import { cn } from "@/lib/utils/cn" @@ -13,13 +14,28 @@ type SvgButtonLinkProps = { size?: number } +const variants = cva("flex items-center gap-3.5", { + variants: { + variant: { + col: "flex-col text-center [&_.body]:text-center", + row: "flex-row text-start [&_.body]:text-left [&_.header]:self-start", + }, + }, + defaultVariants: { + variant: "row", + }, +}) + +type Variants = VariantProps<typeof variants> + const SvgButtonLink = ({ label, children, Svg, className, + variant, ...props -}: SvgButtonLinkProps) => ( +}: SvgButtonLinkProps & Variants) => ( <BaseLink className={cn( "group rounded-2xl no-underline focus:outline focus:outline-4 focus:outline-offset-8", @@ -28,10 +44,11 @@ const SvgButtonLink = ({ hideArrow {...props} > - <div className="flex flex-col items-center gap-3.5 lg:flex-row lg:items-center"> + <div className={cn(variants({ variant }))}> <div className={cn( - "relative grid aspect-square size-[5em] shrink-0 place-items-center lg:self-start", + "header", + "relative grid aspect-square size-[5em] shrink-0 place-items-center", "rounded-2xl border shadow-svg-button-link transition-shadow duration-200", "group-hover:shadow-svg-button-link-hover group-hover:transition-shadow group-hover:duration-200", "group-focus:shadow-none group-focus:transition-shadow group-focus:duration-200" @@ -45,7 +62,7 @@ const SvgButtonLink = ({ )} /> </div> - <div className="text-center lg:text-start"> + <div className="body"> {label && <p className="text-xl font-bold">{label}</p>} {children} </div> From c1106fc9a7358a3bbe0784f5776cd55a7faf8473 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 23 Aug 2024 18:16:56 -0700 Subject: [PATCH 156/273] fix: update all SvgButtonLink with variants extract "join" section button data into array mapping --- src/pages/index.tsx | 130 +++++++++++++++++++++++++------------------- 1 file changed, 73 insertions(+), 57 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index ff53284b34d..d9cb6430cf8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -206,28 +206,28 @@ const HomePage = ({ description: "Create accounts, manage assets", href: "/wallets/find-wallet/", Svg: PickWalletIcon, - colorClass: "text-primary hover:text-primary/80", // TODO: Confirm hover style + className: "text-primary hover:text-primary/80", // TODO: Confirm hover style }, { label: "Get ETH", description: "The currency of Ethereum", href: "/get-eth/", Svg: EthTokenIcon, - colorClass: "text-accent-a hover:text-accent-a/80", + className: "text-accent-a hover:text-accent-a/80", }, { label: "Choose a network", description: "Enjoy minimal fees", href: "/layer-2/", // TODO: Update with new networks page when ready Svg: ChooseNetworkIcon, - colorClass: "text-accent-b hover:text-accent-b/80", + className: "text-accent-b hover:text-accent-b/80", }, { label: "Try apps", description: "See what Ethereum can do", href: "/dapps/", Svg: TryAppsIcon, - colorClass: "text-accent-c hover:text-accent-c/80", + className: "text-accent-c hover:text-accent-c/80", }, ] @@ -279,6 +279,39 @@ const HomePage = ({ }) .slice(0, 4) // Show next 4 events on the calendar + const joinActions = [ + { + Svg: Layer2Icon, + label: "How to contribute", + href: "/contributing/", + className: "text-accent-c hover:text-accent-c/80", // TODO: Confirm hover style + description: + "Find out all the different ways you can help ethereum.org grow and be better.", + }, + { + Svg: FaGithub, + label: "GitHub", + href: GITHUB_REPO_URL, + className: "text-accent-a hover:text-accent-a/80", + description: "Contribute to code, content, articles etc.", + }, + { + Svg: FaDiscord, + label: "Discord", + href: "/discord/", + className: "text-primary hover:text-primary/80", + description: + "To ask questions, coordinate contribution and join community calls.", + }, + { + Svg: FaXTwitter, + label: "Twitter", + href: "https://x.com/EthDotOrg", + className: "text-accent-b hover:text-accent-b/80", + description: "To keep up with our updates and important news.", + }, + ] + return ( <Flex as={MainArticle} @@ -295,16 +328,29 @@ const HomePage = ({ <HomeHero heroImg={hero} className="w-full" /> <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 md:grid-cols-4 md:gap-x-10"> - {subHeroCTAs.map(({ label, description, href, colorClass, Svg }) => ( - <SvgButtonLink - key={label} - Svg={Svg} - href={href} - label={label} - className={colorClass} - > - {description} - </SvgButtonLink> + {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( + <> + <SvgButtonLink + key={label} + Svg={Svg} + href={href} + label={label} + className={cn("xl:hidden", className)} + variant="col" + > + {description} + </SvgButtonLink> + <SvgButtonLink + key={label} + Svg={Svg} + href={href} + label={label} + className={cn("hidden xl:block", className)} + variant="row" + > + {description} + </SvgButtonLink> + </> ))} </div> @@ -624,49 +670,19 @@ const HomePage = ({ </p> </div> {/* TODO: Fix icon sizing, fix button/icon layout on mobile */} - <div className="max-w-105 mx-auto grid grid-cols-1 gap-16 sm:grid-cols-2 md:max-w-screen-md"> - <SvgButtonLink - Svg={Layer2Icon} - label="How to contribute" - href="/contributing/" - className="text-accent-c hover:text-accent-c/80" // TODO: Confirm hover style - > - <p className="text-body"> - Find out all the different ways you can help ethereum.org grow - and be better. - </p> - </SvgButtonLink> - <SvgButtonLink - Svg={FaGithub} - label="GitHub" - href={GITHUB_REPO_URL} - className="text-accent-a hover:text-accent-a/80" - > - <p className="text-body"> - Contribute to code, content, articles etc. - </p> - </SvgButtonLink> - <SvgButtonLink - Svg={FaDiscord} - label="Discord" - href="/discord/" - className="text-primary hover:text-primary/80" - > - <p className="text-body"> - To ask questions, coordinate contribution and join community - calls. - </p> - </SvgButtonLink> - <SvgButtonLink - Svg={FaXTwitter} - label="Twitter" - href="https://x.com/EthDotOrg" - className="text-accent-b hover:text-accent-b/80" - > - <p className="text-body"> - To keep up with our updates and important news. - </p> - </SvgButtonLink> + <div className="max-w-105 mx-auto grid grid-cols-1 gap-16 md:max-w-screen-md md:grid-cols-2"> + {joinActions.map(({ Svg, label, href, className, description }) => ( + <SvgButtonLink + key={label} + Svg={Svg} + label={label} + href={href} + className={cn("max-w-screen-sm", className)} + variant="row" + > + <p className="text-body">{description}</p> + </SvgButtonLink> + ))} </div> </div> </div> From 526fa25c4c35b4f29c45e173ca4ac26962d07fa4 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 23 Aug 2024 18:23:39 -0700 Subject: [PATCH 157/273] chore: use updated Tooltip component --- src/components/BigNumber/index.tsx | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx index 95744b61e5c..963fca4e61a 100644 --- a/src/components/BigNumber/index.tsx +++ b/src/components/BigNumber/index.tsx @@ -2,15 +2,10 @@ import { type ReactNode } from "react" import { useTranslation } from "next-i18next" import { MdInfoOutline } from "react-icons/md" -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "@/components/ui/popover" - import { cn } from "@/lib/utils/cn" -import { BaseLink } from "../Link" +import Tooltip from "../Tooltip" +import Link from "../ui/Link" type BigNumberProps = { children: ReactNode @@ -41,14 +36,16 @@ const BigNumber = ({ <div className="text-sm"> {children} {sourceName && sourceUrl && ( - <Popover> - <PopoverTrigger className="mb-0.5 ms-1 inline align-text-bottom"> - <MdInfoOutline /> - </PopoverTrigger> - <PopoverContent className="w-fit bg-background"> - <BaseLink href={sourceUrl}>{sourceName}</BaseLink> - </PopoverContent> - </Popover> + <Tooltip + content={ + <> + {t("data-provided-by")}{" "} + <Link href={sourceUrl}>{sourceName}</Link> + </> + } + > + <MdInfoOutline className="mb-0.5 ms-2 inline align-text-bottom" /> + </Tooltip> )} </div> </> From ac97f6b6a5cf6c495796047b7c0bb8d435a3cd64 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 25 Aug 2024 21:48:38 -0700 Subject: [PATCH 158/273] fix: fragment key --- src/pages/index.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d9cb6430cf8..5c2c76adba3 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,4 @@ -import { Suspense, useState } from "react" +import { Fragment, Suspense, useState } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" @@ -329,9 +329,8 @@ const HomePage = ({ <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( - <> + <Fragment key={label}> <SvgButtonLink - key={label} Svg={Svg} href={href} label={label} @@ -341,7 +340,6 @@ const HomePage = ({ {description} </SvgButtonLink> <SvgButtonLink - key={label} Svg={Svg} href={href} label={label} @@ -350,7 +348,7 @@ const HomePage = ({ > {description} </SvgButtonLink> - </> + </Fragment> ))} </div> From bacc757e2c094ea57760b1416f82c737d54da8bb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 25 Aug 2024 21:49:32 -0700 Subject: [PATCH 159/273] chore: update name --- src/lib/api/fetchGrowThePie.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/api/fetchGrowThePie.ts b/src/lib/api/fetchGrowThePie.ts index 398b5d0730c..965d7a6e18f 100644 --- a/src/lib/api/fetchGrowThePie.ts +++ b/src/lib/api/fetchGrowThePie.ts @@ -25,7 +25,7 @@ export const fetchGrowThePie = async (): Promise<GrowThePieData> => { return itemDate > new Date(latest) ? item.date : latest }, data[0].date) - const todaysData = data.filter( + const mostRecentData = data.filter( (item) => item.date === mostRecentDate && [TXCOSTS_MEDIAN_USD, TXCOUNT].includes(item.metric_key) @@ -34,10 +34,10 @@ export const fetchGrowThePie = async (): Promise<GrowThePieData> => { let totalTxCount = 0 let weightedSum = 0 - todaysData.forEach((item) => { + mostRecentData.forEach((item) => { if (item.metric_key !== TXCOSTS_MEDIAN_USD) return - const txCountItem = todaysData.find( + const txCountItem = mostRecentData.find( (txItem) => txItem.metric_key === TXCOUNT && txItem.origin_key === item.origin_key ) From 9cedf2b9cf45de9f29b035041cc06976c278363d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 25 Aug 2024 21:50:21 -0700 Subject: [PATCH 160/273] chore: patch style --- src/components/Buttons/SvgButtonLink.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index eb0741fa6a3..61108f18272 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -49,15 +49,15 @@ const SvgButtonLink = ({ className={cn( "header", "relative grid aspect-square size-[5em] shrink-0 place-items-center", - "rounded-2xl border shadow-svg-button-link transition-shadow duration-200", - "group-hover:shadow-svg-button-link-hover group-hover:transition-shadow group-hover:duration-200", - "group-focus:shadow-none group-focus:transition-shadow group-focus:duration-200" + "rounded-2xl border shadow-svg-button-link transition-all duration-200", + "group-hover:shadow-svg-button-link-hover group-hover:transition-all group-hover:duration-200", + "group-focus:shadow-none group-focus:transition-all group-focus:duration-200" )} > <Svg className={cn( - "group-hover:rotate-3 group-hover:scale-110", - "group-focus:rotate-3 group-focus:scale-110", + "group-hover:rotate-3 group-hover:scale-110 group-hover:hue-rotate-15", + "group-focus:rotate-3 group-focus:scale-110 group-focus:hue-rotate-15", "text-4xl duration-200 group-hover:duration-200 group-focus:rotate-3" )} /> From dc0c5c10eefad3f0e843283bc56863ac67bbdd9d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 25 Aug 2024 21:50:57 -0700 Subject: [PATCH 161/273] feat: add last updated date to metrics --- src/components/BigNumber/index.tsx | 21 +++++++++++++++++-- src/components/StatsBoxGrid/index.tsx | 1 + .../StatsBoxGrid/useStatsBoxGrid.tsx | 16 +++++++++++--- src/lib/api/fetchEthPrice.ts | 2 +- src/lib/api/fetchGrowThePie.ts | 7 +++++-- src/lib/api/fetchTotalEthStaked.ts | 2 +- src/lib/api/fetchTotalValueLocked.ts | 2 +- src/lib/types.ts | 4 +++- 8 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx index 963fca4e61a..fee5df64673 100644 --- a/src/components/BigNumber/index.tsx +++ b/src/components/BigNumber/index.tsx @@ -1,8 +1,10 @@ import { type ReactNode } from "react" +import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { MdInfoOutline } from "react-icons/md" import { cn } from "@/lib/utils/cn" +import { isValidDate } from "@/lib/utils/date" import Tooltip from "../Tooltip" import Link from "../ui/Link" @@ -12,6 +14,7 @@ type BigNumberProps = { value?: ReactNode sourceName?: string sourceUrl?: string + lastUpdated?: number | string className?: string } @@ -20,9 +23,18 @@ const BigNumber = ({ value, sourceName, sourceUrl, + lastUpdated, className, }: BigNumberProps) => { const { t } = useTranslation("common") + const { locale } = useRouter() + const lastUpdatedDisplay = + lastUpdated && isValidDate(lastUpdated) + ? new Intl.DateTimeFormat(locale, { + dateStyle: "medium", + timeStyle: "short", + }).format(new Date(lastUpdated)) + : "" return ( <div className={cn( @@ -39,8 +51,13 @@ const BigNumber = ({ <Tooltip content={ <> - {t("data-provided-by")}{" "} - <Link href={sourceUrl}>{sourceName}</Link> + <p> + {t("data-provided-by")}{" "} + <Link href={sourceUrl}>{sourceName}</Link> + </p> + {lastUpdated && ( + <p className="mt-2">Last updated: {lastUpdatedDisplay}</p> + )} </> } > diff --git a/src/components/StatsBoxGrid/index.tsx b/src/components/StatsBoxGrid/index.tsx index b017193ec08..7b85bdd7372 100644 --- a/src/components/StatsBoxGrid/index.tsx +++ b/src/components/StatsBoxGrid/index.tsx @@ -25,6 +25,7 @@ const StatsBoxGrid = ({ metricResults }: StatsBoxGridProps) => { value={"value" in state ? state.value : undefined} sourceName={apiProvider} sourceUrl={apiUrl} + lastUpdated={"timestamp" in state ? state.timestamp : undefined} > {label} </BigNumber> diff --git a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx index 9db58af6556..ecb5f2f486c 100644 --- a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx +++ b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx @@ -65,23 +65,33 @@ export const useStatsBoxGrid = ({ : "", } : { + ...totalEthStaked, value: formatLargeUSD(totalStakedInUsd, localeForNumberFormat), } const valueLocked = "error" in totalValueLocked ? { error: totalValueLocked.error } - : { value: formatLargeUSD(totalValueLocked.value, localeForNumberFormat) } + : { + ...totalValueLocked, + value: formatLargeUSD(totalValueLocked.value, localeForNumberFormat), + } const txs = "error" in txCount ? { error: txCount.error } - : { value: formatLargeNumber(txCount.value, localeForNumberFormat) } + : { + ...txCount, + value: formatLargeNumber(txCount.value, localeForNumberFormat), + } const medianTxCost = "error" in txCostsMedianUsd ? { error: txCostsMedianUsd.error } - : { value: formatSmallUSD(txCostsMedianUsd.value, localeForNumberFormat) } + : { + ...txCostsMedianUsd, + value: formatSmallUSD(txCostsMedianUsd.value, localeForNumberFormat), + } const metrics: StatsBoxMetric[] = [ { diff --git a/src/lib/api/fetchEthPrice.ts b/src/lib/api/fetchEthPrice.ts index c506a369a57..a86f6e1d8cc 100644 --- a/src/lib/api/fetchEthPrice.ts +++ b/src/lib/api/fetchEthPrice.ts @@ -9,7 +9,7 @@ export const fetchEthPrice = async (): Promise<MetricReturnData> => { ethereum: { usd }, } = data if (!usd) throw new Error("Unable to fetch ETH price from CoinGecko") - return { value: usd } + return { value: usd, timestamp: Date.now() } } catch (error: unknown) { console.error((error as Error).message) return { error: (error as Error).message } diff --git a/src/lib/api/fetchGrowThePie.ts b/src/lib/api/fetchGrowThePie.ts index 965d7a6e18f..1affc794c3b 100644 --- a/src/lib/api/fetchGrowThePie.ts +++ b/src/lib/api/fetchGrowThePie.ts @@ -50,9 +50,12 @@ export const fetchGrowThePie = async (): Promise<GrowThePieData> => { // The weighted average of txcosts_median_usd, by txcount on each network (origin_key) const weightedAverage = totalTxCount ? weightedSum / totalTxCount : 0 + // Last updated timestamp + const timestamp = Date.now() + return { - txCount: { value: totalTxCount }, - txCostsMedianUsd: { value: weightedAverage }, + txCount: { value: totalTxCount, timestamp }, + txCostsMedianUsd: { value: weightedAverage, timestamp }, } } catch (error: unknown) { console.error((error as Error).message) diff --git a/src/lib/api/fetchTotalEthStaked.ts b/src/lib/api/fetchTotalEthStaked.ts index dcd1743c251..7828977b5d1 100644 --- a/src/lib/api/fetchTotalEthStaked.ts +++ b/src/lib/api/fetchTotalEthStaked.ts @@ -29,7 +29,7 @@ export const fetchTotalEthStaked = async (): Promise<MetricReturnData> => { const value = rows[0].cum_deposited_eth // current value (number, unformatted) - return { value } + return { value, timestamp: Date.now() } } catch (error: unknown) { console.error((error as Error).message) return { error: (error as Error).message } diff --git a/src/lib/api/fetchTotalValueLocked.ts b/src/lib/api/fetchTotalValueLocked.ts index 877a0f70022..cf9cbb1a256 100644 --- a/src/lib/api/fetchTotalValueLocked.ts +++ b/src/lib/api/fetchTotalValueLocked.ts @@ -13,7 +13,7 @@ export const fetchTotalValueLocked = async (): Promise<MetricReturnData> => { const value = json[json.length - 1].totalLiquidityUSD // current value (number, unformatted) - return { value } + return { value, timestamp: Date.now() } } catch (error: unknown) { console.error((error as Error).message) return { error: (error as Error).message } diff --git a/src/lib/types.ts b/src/lib/types.ts index c5f951fcbc5..992e5a8611c 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -510,7 +510,9 @@ export type StakingStatsData = { apr: number } -export type ValueOrError<T> = { value: T } | { error: string } +export type ValueOrError<T> = + | { value: T; timestamp?: number } + | { error: string } export type EtherscanNodeResponse = { result: { From 4f9fef1ae459d810c502cd854e3d876fe3f653d0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 25 Aug 2024 21:59:56 -0700 Subject: [PATCH 162/273] chore: image sizing and layout adjustment --- src/components/BentoBox/BentoCard.tsx | 2 +- src/components/SwiperCards/index.tsx | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/BentoBox/BentoCard.tsx b/src/components/BentoBox/BentoCard.tsx index 47998132db8..1a2f2ca662c 100644 --- a/src/components/BentoBox/BentoCard.tsx +++ b/src/components/BentoBox/BentoCard.tsx @@ -28,7 +28,7 @@ const BentoCard = ({ }: BentoCardProps) => ( <div className={cn( - "bg-gradient-to-right flex items-center justify-evenly gap-16 rounded-2xl border p-8", + "bg-gradient-to-right flex items-center justify-evenly gap-4 rounded-2xl border p-8 lg:gap-16", className )} > diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx index e0299abb9ec..8b1308909f8 100644 --- a/src/components/SwiperCards/index.tsx +++ b/src/components/SwiperCards/index.tsx @@ -11,8 +11,8 @@ import { useBentoBox } from "../BentoBox/useBentoBox" import "swiper/css" import "swiper/css/effect-cards" -import "swiper/css/navigation" -import "swiper/css/pagination" +// import "swiper/css/navigation" +// import "swiper/css/pagination" // TODO: Fix height constraints on const SwiperCards = ({ className }: ClassNameProp) => { @@ -29,12 +29,13 @@ const SwiperCards = ({ className }: ClassNameProp) => { className="mx-auto mt-4 h-fit max-w-128" effect="cards" grabCursor + cssMode modules={[EffectCards]} > {items.map(({ className, ...item }) => ( <SwiperSlide key={item.title}> <BentoCard - imgHeight={160} + imgHeight={220} className={cn(className, "bg-background text-body")} {...item} imgWidth={undefined} // Intentionally last to override box From 4b3cccf1d81b8ab34eb969f2fde0bdd51936ce0f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:58:02 -0700 Subject: [PATCH 163/273] chore: apply suggestions from design review --- src/components/Buttons/SvgButtonLink.tsx | 4 ++-- src/components/Hero/HomeHero/index.tsx | 9 +-------- src/components/HomeSection/index.tsx | 2 +- src/pages/index.tsx | 24 ++++++++---------------- 4 files changed, 12 insertions(+), 27 deletions(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 61108f18272..2ab015cf4c7 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -56,8 +56,8 @@ const SvgButtonLink = ({ > <Svg className={cn( - "group-hover:rotate-3 group-hover:scale-110 group-hover:hue-rotate-15", - "group-focus:rotate-3 group-focus:scale-110 group-focus:hue-rotate-15", + "group-hover:rotate-3 group-hover:scale-110", + "group-focus:rotate-3 group-focus:scale-110", "text-4xl duration-200 group-hover:duration-200 group-focus:rotate-3" )} /> diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index b1c412c4c83..323e2404a7d 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -5,8 +5,6 @@ import type { ClassNameProp, CommonHeroProps } from "@/lib/types" import Morpher from "@/components/Morpher" -import { cn } from "@/lib/utils/cn" - export type HomeHeroProps = Pick<CommonHeroProps, "heroImg"> & ClassNameProp const HomeHero = ({ heroImg, className }: HomeHeroProps) => { @@ -23,12 +21,7 @@ const HomeHero = ({ heroImg, className }: HomeHeroProps) => { priority /> </div> - <div - className={cn( - "flex flex-col items-center space-y-4 border-t-[3px] border-primary-low-contrast px-4 py-8 text-center lg:space-y-7", - "bg-gradient-to-b from-purple-500/10 from-0% to-purple-500/0 to-25% dark:from-purple-500/30" - )} - > + <div className="flex flex-col items-center space-y-4 border-t-[3px] border-primary-low-contrast px-4 py-8 text-center lg:space-y-7"> <Morpher /> <div className="flex flex-col items-center space-y-5 lg:max-w-2xl"> <h1 className="font-black">{t("page-index:page-index-title")}</h1> diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 01ffa04d8fd..9514716454a 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -36,7 +36,7 @@ const HomeSection = ({ /> )} <div className="w-full"> - <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> + <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0.5 text-sm uppercase text-primary"> {tag} </div> <h2 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5c2c76adba3..38aae447eb7 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -337,7 +337,7 @@ const HomePage = ({ className={cn("xl:hidden", className)} variant="col" > - {description} + <p className="text-body">{description}</p> </SvgButtonLink> <SvgButtonLink Svg={Svg} @@ -346,7 +346,7 @@ const HomePage = ({ className={cn("hidden xl:block", className)} variant="row" > - {description} + <p className="text-body">{description}</p> </SvgButtonLink> </Fragment> ))} @@ -393,7 +393,7 @@ const HomePage = ({ href={href} className="text-primary [&>:first-child]:flex-row" > - <p className="text-start text-xl font-bold text-body"> + <p className="text-start text-xl font-bold text-body group-hover:underline"> {label} </p> </SvgButtonLink> @@ -440,7 +440,7 @@ const HomePage = ({ {codeExamples.map(({ title, description }, idx) => ( <button key={title} - className="flex flex-col space-y-0.5 border-t px-6 py-4 hover:bg-black/5" + className="flex flex-col space-y-0.5 border-t px-6 py-4 hover:bg-background-highlight" onClick={() => toggleCodeExample(idx)} > <p className="font-bold">{title}</p> @@ -493,18 +493,13 @@ const HomePage = ({ </p> </div> <div className="flex flex-wrap gap-3 py-8"> - <ButtonLink - href="/discord/" - size="lg" - variant="outline-color" - hideArrow - > + <ButtonLink href="/discord/" size="lg" variant="outline" hideArrow> <FaDiscord /> </ButtonLink> <ButtonLink href={GITHUB_REPO_URL} size="lg" - variant="outline-color" + variant="outline" hideArrow > <FaGithub /> @@ -518,10 +513,7 @@ const HomePage = ({ {calendar.map(({ date, title, calendarLink }, idx) => ( <div key={title} - className={cn( - "flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row", - idx === 0 && "bg-accent-gradient-a" - )} + className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row" > <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> <p className="italic text-body-medium"> @@ -573,7 +565,7 @@ const HomePage = ({ <div className="mt-8 flex flex-col gap-2 rounded-2xl border p-8"> <p className="text-lg">Read more on these websites</p> - <div className="flex flex-wrap gap-x-2 gap-y-1"> + <div className="flex flex-wrap gap-x-4 gap-y-1"> {ALL_COMMUNITY_BLOGS.map(({ name, href }) => ( <Link href={href} key={name}> {name} From 7b389146e38aa19695fc8299b21eeca83f505965 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:58:29 -0700 Subject: [PATCH 164/273] theme: sync color tokens with latest design system --- src/styles/global.css | 2 -- src/styles/semantic-tokens.css | 23 ++++++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index 41e97e32ebf..0f15a419d85 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -20,7 +20,6 @@ --primary-dark: var(--blue-700); --neutral: var(--white); - --disabled: var(--gray-400); /* Complementary Set */ --attention: var(--yellow-500); @@ -99,7 +98,6 @@ /* ! Deprecating neutral */ --neutral: var(--gray-900); - --disabled: var(--gray-500); /* Complementary Set */ --attention-outline: var(--attention-light); diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 7a2176c190c..5f283e9ded9 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -5,19 +5,21 @@ @layer base { /* Light mode (default) token declarations */ :root { - --body: var(--gray-800); + --body: var(--gray-900); --body-medium: var(--gray-500); --body-light: var(--gray-200); - --body-action: var(--white); - + --body-inverse: var(--white); + --disabled: var(--gray-400); --background: var(--white); - --background-highlight: var(--gray-100); + --background-highlight: var(--gray-50); --primary: var(--purple-600); - --primary-hover: var(--purple-700); - --primary-low-contrast: var(--purple-100); --primary-high-contrast: var(--purple-800); + --primary-low-contrast: var(--purple-100); + --primary-hover: var(--purple-500); + --primary-visited: var(--purple-700); --primary-action: var(--purple-600); + --primary-action-hover: var(--purple-700); --accent-a: var(--blue-600); --accent-b: var(--pink-600); @@ -63,17 +65,20 @@ /* Dark mode token declarations */ .dark { - --body: var(--gray-100); + --body: var(--gray-50); --body-medium: var(--gray-400); --body-light: var(--gray-600); + --body-inverse: var(--black); + --disabled: var(--gray-500); --background: var(--black); --background-highlight: var(--gray-900); --primary: var(--purple-400); - --primary-hover: var(--purple-300); - --primary-low-contrast: var(--purple-900); --primary-high-contrast: var(--purple-200); + --primary-low-contrast: var(--purple-900); + --primary-visited: var(--purple-300); + --primary-action-hover: var(--purple-600); --accent-a: var(--blue-400); --accent-b: var(--pink-400); From 1a4293731fc2f277d8374a58e6d8fdce2b2700a2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 26 Aug 2024 14:07:49 -0700 Subject: [PATCH 165/273] chore: remove time from last updated string --- src/components/BigNumber/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx index fee5df64673..9f916e2056c 100644 --- a/src/components/BigNumber/index.tsx +++ b/src/components/BigNumber/index.tsx @@ -32,7 +32,6 @@ const BigNumber = ({ lastUpdated && isValidDate(lastUpdated) ? new Intl.DateTimeFormat(locale, { dateStyle: "medium", - timeStyle: "short", }).format(new Date(lastUpdated)) : "" return ( From 387b608d8cf935a4d77edee1c507671496ef2e5e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 26 Aug 2024 14:15:45 -0700 Subject: [PATCH 166/273] chore: remove bold from first item --- src/pages/index.tsx | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 38aae447eb7..2c5f6b849af 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -510,7 +510,7 @@ const HomePage = ({ </div> <WindowBox title="Next calls" Svg={Calendar}> - {calendar.map(({ date, title, calendarLink }, idx) => ( + {calendar.map(({ date, title, calendarLink }) => ( <div key={title} className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row" @@ -525,14 +525,7 @@ const HomePage = ({ minute: "numeric", }).format(new Date(date))} </p> - <p - className={cn( - "text-sm text-body", - idx === 0 && "font-bold" - )} - > - {title} - </p> + <p className="text-sm text-body">{title}</p> </div> <ButtonLink className="h-fit w-full text-nowrap px-5 sm:w-fit lg:self-center" From 8ba4ffdf2d011202ed463e050cb901ea4ba85fd8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:26:19 -0700 Subject: [PATCH 167/273] feat: add EthStaker blog to RSS feeds --- src/lib/constants.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index a2274983300..c1ff95fdad2 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -163,7 +163,14 @@ export const VITALIK_BLOG = "https://vitalik.eth.limo/feed.xml" export const EF_BLOG = "https://blog.ethereum.org/en/feed.xml" export const PANDA_OPS_BLOG = "https://ethpandaops.io/posts/index.xml" export const SOLIDITY_BLOG = "https://soliditylang.org/feed.xml" -export const XML_FEEDS = [VITALIK_BLOG, EF_BLOG, PANDA_OPS_BLOG, SOLIDITY_BLOG] +export const ETH_STAKER_BLOG = "https://paragraph.xyz/api/blogs/rss/@ethstaker" +export const XML_FEEDS = [ + EF_BLOG, + ETH_STAKER_BLOG, + PANDA_OPS_BLOG, + SOLIDITY_BLOG, + VITALIK_BLOG, +] export const ALL_COMMUNITY_BLOGS = [ { name: "Vitalik Buterin", href: "https://vitalik.eth.limo/" }, From 46509868a234b4f9db01ce6dc83d6b301640bfe6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:13:32 -0700 Subject: [PATCH 168/273] theme: sync chakra theme with new primary tokens --- src/@chakra-ui/foundations/colors.ts | 12 ++++++++++++ src/@chakra-ui/semanticTokens.ts | 10 +++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/@chakra-ui/foundations/colors.ts b/src/@chakra-ui/foundations/colors.ts index dbf3e6cd57e..760e76e4b4d 100644 --- a/src/@chakra-ui/foundations/colors.ts +++ b/src/@chakra-ui/foundations/colors.ts @@ -38,6 +38,18 @@ const colors = { 800: "#521E00", 900: "#2F1000", }, + purple: { + 50: "#F3ECFF", + 100: "#EDE2FF", + 200: "#DAC5FC", + 300: "#CCAFFC", + 400: "#B38DF0", + 500: "#945AF4", + 600: "#6C24DF", + 700: "#561BB5", + 800: "#41128B", + 900: "#1E0546", + }, red: { 100: "#f7c8c8", 500: "#b80000", diff --git a/src/@chakra-ui/semanticTokens.ts b/src/@chakra-ui/semanticTokens.ts index 13b5de0eec3..f66313c7be2 100644 --- a/src/@chakra-ui/semanticTokens.ts +++ b/src/@chakra-ui/semanticTokens.ts @@ -37,11 +37,11 @@ const semanticTokens = { // Main Set primary: { - base: { _light: "blue.500", _dark: "orange.500" }, - highContrast: { _light: "blue.800", _dark: "orange.100" }, - lowContrast: { _light: "blue.100", _dark: "orange.800" }, - hover: { _light: "blue.400", _dark: "orange.400" }, - visited: { _light: "blue.700", _dark: "orange.550" }, + base: { _light: "purple.600", _dark: "purple.400" }, + highContrast: { _light: "purple.800", _dark: "purple.200" }, + lowContrast: { _light: "purple.100", _dark: "purple.900" }, + hover: { _light: "purple.500", _dark: "purple.500" }, + visited: { _light: "purple.700", _dark: "purple.300" }, // ! Deprecating primary.light light: { _light: "blue.100", _dark: "orange.100" }, // ! Deprecating primary.dark From e0b2466bdb703210990aaaaac1c223ac16300b8c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:15:00 -0700 Subject: [PATCH 169/273] patch: spacing adjustment --- src/pages/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2c5f6b849af..38ab92e15c6 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -556,9 +556,9 @@ const HomePage = ({ ))} </div> - <div className="mt-8 flex flex-col gap-2 rounded-2xl border p-8"> + <div className="mt-8 flex flex-col gap-4 rounded-2xl border p-8"> <p className="text-lg">Read more on these websites</p> - <div className="flex flex-wrap gap-x-4 gap-y-1"> + <div className="flex flex-wrap gap-x-6 gap-y-4"> {ALL_COMMUNITY_BLOGS.map(({ name, href }) => ( <Link href={href} key={name}> {name} From a1bb94a1154980976f92d6e290a040a32bcfa8ee Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:40:45 -0700 Subject: [PATCH 170/273] feat: improve fetchRSS logic error handling --- src/lib/api/fetchRSS.ts | 48 ++++++++++++++++++++++++++++++----------- src/lib/utils/date.ts | 3 ++- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/lib/api/fetchRSS.ts b/src/lib/api/fetchRSS.ts index b05b410b0d9..f3810a9673f 100644 --- a/src/lib/api/fetchRSS.ts +++ b/src/lib/api/fetchRSS.ts @@ -1,6 +1,8 @@ import { parseString } from "xml2js" +import { RSS_DISPLAY_COUNT } from "../constants" import type { RSSChannel, RSSItem, RSSResult } from "../types" +import { isValidDate } from "../utils/date" /** * Fetches RSS feed from the specified XML URL(s). @@ -12,19 +14,39 @@ export const fetchRSS = async (xmlUrl: string | string[]) => { const allItems: RSSItem[] = [] for (const url of urls) { const rssItems = (await fetchXml(url)) as RSSResult - const mainChannel: RSSChannel = rssItems.rss.channel[0] - const source = mainChannel.title[0] - const parsedRssItems = mainChannel.item.map( - ({ pubDate, title, link, enclosure }) => - ({ - pubDate: pubDate[0], - title: title[0], - link: link[0], - imgSrc: enclosure ? enclosure[0].$.url : "", - source, - sourceFeedUrl: url, - }) as RSSItem - ) + if (!rssItems.rss) continue + const [mainChannel] = rssItems.rss.channel as RSSChannel[] + const [source] = mainChannel.title + const channelImage = mainChannel.image ? mainChannel.image[0].url[0] : "" + + const parsedRssItems = mainChannel.item + // Filter out items with invalid dates + .filter((item) => { + if (!item.pubDate) return false + const [pubDate] = item.pubDate + return isValidDate(pubDate) + }) + // Sort by pubDate (most recent is first in array + .sort((a, b) => { + const dateA = new Date(a.pubDate[0]) + const dateB = new Date(b.pubDate[0]) + return dateB.getTime() - dateA.getTime() + }) + // Slice to first RSS_DISPLAY_COUNT items + .slice(0, RSS_DISPLAY_COUNT) + // Map to RSSItem object + .map( + (item) => + ({ + pubDate: item.pubDate[0], + title: item.title[0], + link: item.link[0], + imgSrc: item.enclosure ? item.enclosure[0].$.url : channelImage, + source, + sourceFeedUrl: url, + }) as RSSItem + ) + allItems.push(...parsedRssItems) } return allItems as RSSItem[] diff --git a/src/lib/utils/date.ts b/src/lib/utils/date.ts index 1e9b04b78e4..4f8f4555f8f 100644 --- a/src/lib/utils/date.ts +++ b/src/lib/utils/date.ts @@ -1,7 +1,8 @@ export const dateToString = (published: Date | string) => new Date(published).toISOString().split("T")[0] -export const isValidDate = (dateString: string | number): boolean => { +export const isValidDate = (dateString?: string | number): boolean => { + if (!dateString) return false const date = new Date(dateString) return !isNaN(date.getTime()) } From eeda7cd46c9e2180120318f6376d45422d9e0e94 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:41:30 -0700 Subject: [PATCH 171/273] feat: add 0xParc rss feed and image asset --- public/images/0xparc-logo.svg | 10 ++++++++++ src/lib/constants.ts | 2 ++ src/lib/utils/rss.ts | 6 ++++++ 3 files changed, 18 insertions(+) create mode 100644 public/images/0xparc-logo.svg diff --git a/public/images/0xparc-logo.svg b/public/images/0xparc-logo.svg new file mode 100644 index 00000000000..dcb9b050a1f --- /dev/null +++ b/public/images/0xparc-logo.svg @@ -0,0 +1,10 @@ +<svg width="1em" height="1em" viewBox="0 0 84 82" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M42.1461 81.1934L23.3965 23.011" stroke="#DE9EC6" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +<path d="M70.5055 69.6259L42.1455 15.2549" stroke="#56479D" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +<path d="M82.4503 41.4222L60.7104 60.0114" stroke="#E7B0D1" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +<path d="M70.6458 12.957L42.1455 67.5839" stroke="#00AEEF" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +<path d="M42.1459 1.25037L23.4917 59.9223" stroke="#FBB040" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +<path d="M13.5054 13.0961L60.8001 22.9165" stroke="#00AEEF" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +<path d="M1.8418 41.4222L15.7609 41.4444" stroke="#56479D" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +<path d="M13.6455 69.4867L68.531 41.5501" stroke="#FBB040" stroke-width="2" pathLength="1" stroke-dashoffset="0px" stroke-dasharray="1px 1px" /> +</svg> \ No newline at end of file diff --git a/src/lib/constants.ts b/src/lib/constants.ts index c1ff95fdad2..b9bd56e33cc 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -164,12 +164,14 @@ export const EF_BLOG = "https://blog.ethereum.org/en/feed.xml" export const PANDA_OPS_BLOG = "https://ethpandaops.io/posts/index.xml" export const SOLIDITY_BLOG = "https://soliditylang.org/feed.xml" export const ETH_STAKER_BLOG = "https://paragraph.xyz/api/blogs/rss/@ethstaker" +export const _0X_PARC_BLOG = "https://rss.app/feeds/cWXGYts0ZM8C3F6t.xml" export const XML_FEEDS = [ EF_BLOG, ETH_STAKER_BLOG, PANDA_OPS_BLOG, SOLIDITY_BLOG, VITALIK_BLOG, + _0X_PARC_BLOG, ] export const ALL_COMMUNITY_BLOGS = [ diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts index 679cb3fcac7..b619ca9f26d 100644 --- a/src/lib/utils/rss.ts +++ b/src/lib/utils/rss.ts @@ -1,4 +1,5 @@ import { + _0X_PARC_BLOG, PANDA_OPS_BLOG, RSS_DISPLAY_COUNT, SOLIDITY_BLOG, @@ -36,6 +37,11 @@ export const postProcess = (rssItems: RSSItem[]) => ...item, imgSrc: "/images/solidity-banner.png", } + case _0X_PARC_BLOG: + return { + ...item, + imgSrc: "/images/0xparc-logo.svg", + } default: return item } From 39a7534491db61c8327acdd1db8f20ef7c4ef3dc Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:41:54 -0700 Subject: [PATCH 172/273] chore: add fallback images for events for display on homepage --- src/data/community-events.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index 8b1045c4742..98bbe0249f3 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -520,7 +520,7 @@ "href": "https://ethmumbai.in", "location": "Mumbai, IND", "description": "First ever Ethereum Hackathon in Mumbai. Build from Mumbai, for the world. 29-31 March 2024.", - "imageUrl": "" + "imageUrl": "https://ethmumbai.in/post.png" }, { "title": "ETH Gathering", @@ -565,7 +565,7 @@ "href": "https://ethwarsaw.dev", "location": "Warsaw, POL", "description": "EthWarsaw 2024", - "imageUrl": "" + "imageUrl": "https://cdn.prod.website-files.com/649014d99c5194ad73558cd3/649af7b1f1fdaa7868890166_ThumbnailPicture.png" }, { "title": "NapulETH", From 68386d9ae73065d83d736814c2a3abd21eec3c21 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:46:31 -0700 Subject: [PATCH 173/273] chore: linting, small figma adjustments --- src/pages/index.tsx | 2 +- src/styles/global.css | 2 +- tailwind.config.ts | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 38ab92e15c6..1fdc9513abf 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -391,7 +391,7 @@ const HomePage = ({ key={label} Svg={Svg} href={href} - className="text-primary [&>:first-child]:flex-row" + className="text-accent-b [&>:first-child]:flex-row" > <p className="text-start text-xl font-bold text-body group-hover:underline"> {label} diff --git a/src/styles/global.css b/src/styles/global.css index 0f15a419d85..cae5f2615e6 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -146,7 +146,7 @@ } a { - @apply underline-offset-3 text-primary underline hover:text-primary-hover focus-visible:rounded-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-hover; + @apply text-primary underline underline-offset-3 hover:text-primary-hover focus-visible:rounded-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-hover; } h1, diff --git a/tailwind.config.ts b/tailwind.config.ts index 931d9c9c632..5f73c5a0b49 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -146,8 +146,10 @@ const config = { DEFAULT: "hsla(var(--background))", highlight: "hsla(var(--background-highlight))", }, - neutral: "hsla(var(--neutral))", // TODO: Migrate/deprecate - "switch-background": "hsla(var(--switch-background))", // TODO: Migrate/deprecate + /** @deprecated */ + neutral: "hsla(var(--neutral))", // TODO: Migrate + /** @deprecated */ + "switch-background": "hsla(var(--switch-background))", // TODO: Migrate disabled: "hsla(var(--disabled))", "tooltip-shadow": "var(--tooltip-shadow)", "hub-hero-content-bg": "var(--hub-hero-content-bg)", From a6f058bcd9d3373e2cbde43361d984e825455c74 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:53:12 -0700 Subject: [PATCH 174/273] style: apply suggestions from design review --- src/components/ui/card.tsx | 2 +- src/pages/index.tsx | 31 +++++++++++++++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 7d51c171b06..1afcedb18a5 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -5,7 +5,7 @@ import { cn } from "@/lib/utils/cn" import { BaseLink } from "./Link" -const titleVariants = cva("", { +const titleVariants = cva("group-hover:underline", { variants: { variant: { normal: "font-normal text-lg", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 1fdc9513abf..541d5ca75c7 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -493,20 +493,27 @@ const HomePage = ({ </p> </div> <div className="flex flex-wrap gap-3 py-8"> - <ButtonLink href="/discord/" size="lg" variant="outline" hideArrow> - <FaDiscord /> - </ButtonLink> - <ButtonLink - href={GITHUB_REPO_URL} - size="lg" - variant="outline" - hideArrow - > - <FaGithub /> - </ButtonLink> <ButtonLink href="/community/" size="lg"> More on ethereum.org <MdChevronRight /> </ButtonLink> + <div className="flex gap-3"> + <ButtonLink + href="/discord/" + size="lg" + variant="outline" + hideArrow + > + <FaDiscord /> + </ButtonLink> + <ButtonLink + href={GITHUB_REPO_URL} + size="lg" + variant="outline" + hideArrow + > + <FaGithub /> + </ButtonLink> + </div> </div> <WindowBox title="Next calls" Svg={Calendar}> @@ -609,7 +616,7 @@ const HomePage = ({ </CardBanner> <CardContent className="space-y-8 p-2"> <div> - <CardTitle>{title}</CardTitle> + <CardTitle variant="strong">{title}</CardTitle> <CardDescription className="italic"> {(isValidDate(startDate) || isValidDate(endDate)) && new Intl.DateTimeFormat(locale, { From 59efed8891da7acaf7d087f5df1952aad51bade7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:22:14 -0700 Subject: [PATCH 175/273] fix: phone-homescreen sizing --- src/components/icons/phone-homescreen.svg | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/components/icons/phone-homescreen.svg b/src/components/icons/phone-homescreen.svg index 937a7134bb8..bc635f5e6d8 100644 --- a/src/components/icons/phone-homescreen.svg +++ b/src/components/icons/phone-homescreen.svg @@ -1,13 +1,10 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0.75 0 34.25 52" fill="none"> - <rect x="5.11719" y="11.1543" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> - <rect x="5.11719" y="17.5034" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> - <rect x="11.4688" y="11.1543" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> - <rect x="11.4688" y="17.5034" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> - <rect x="17.8164" y="11.1543" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> - <rect x="24.1641" y="11.1543" width="4.87365" height="4.87365" rx="1" fill="currentcolor"/> - <mask id="path-7-inside-1_8044_30947" fill="white"> - <rect x="0.941406" y="0.0839844" width="33.9552" height="51.8315" rx="2"/> - </mask> - <rect x="0.941406" y="0.0839844" width="33.9552" height="51.8315" rx="2" stroke="currentcolor" stroke-width="6" mask="url(#path-7-inside-1_8044_30947)"/> - <path d="M11.8164 45.7676H23.6914" stroke="currentcolor" stroke-linecap="round"/> +<svg width="1em" height="1em" viewBox="0 0 35 53" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M6.13379 12.6543C6.13379 12.102 6.5815 11.6543 7.13379 11.6543H10.0074C10.5597 11.6543 11.0074 12.102 11.0074 12.6543V15.5279C11.0074 16.0802 10.5597 16.5279 10.0074 16.5279H7.13379C6.5815 16.5279 6.13379 16.0802 6.13379 15.5279V12.6543Z" fill="currentcolor"/> +<path d="M6.13379 19.0034C6.13379 18.4511 6.5815 18.0034 7.13379 18.0034H10.0074C10.5597 18.0034 11.0074 18.4511 11.0074 19.0034V21.8771C11.0074 22.4294 10.5597 22.8771 10.0074 22.8771H7.13379C6.5815 22.8771 6.13379 22.4294 6.13379 21.8771V19.0034Z" fill="currentcolor"/> +<path d="M12.4824 12.6543C12.4824 12.102 12.9301 11.6543 13.4824 11.6543H16.3561C16.9084 11.6543 17.3561 12.102 17.3561 12.6543V15.5279C17.3561 16.0802 16.9084 16.5279 16.3561 16.5279H13.4824C12.9301 16.5279 12.4824 16.0802 12.4824 15.5279V12.6543Z" fill="currentcolor"/> +<path d="M12.4824 19.0034C12.4824 18.4511 12.9301 18.0034 13.4824 18.0034H16.3561C16.9084 18.0034 17.3561 18.4511 17.3561 19.0034V21.8771C17.3561 22.4294 16.9084 22.8771 16.3561 22.8771H13.4824C12.9301 22.8771 12.4824 22.4294 12.4824 21.8771V19.0034Z" fill="currentcolor"/> +<path d="M18.8311 12.6543C18.8311 12.102 19.2788 11.6543 19.8311 11.6543H22.7047C23.257 11.6543 23.7047 12.102 23.7047 12.6543V15.5279C23.7047 16.0802 23.257 16.5279 22.7047 16.5279H19.8311C19.2788 16.5279 18.8311 16.0802 18.8311 15.5279V12.6543Z" fill="currentcolor"/> +<path d="M25.1787 12.6543C25.1787 12.102 25.6264 11.6543 26.1787 11.6543H29.0524C29.6046 11.6543 30.0524 12.102 30.0524 12.6543V15.5279C30.0524 16.0802 29.6046 16.5279 29.0524 16.5279H26.1787C25.6264 16.5279 25.1787 16.0802 25.1787 15.5279V12.6543Z" fill="currentcolor"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M3.95605 3.58398V49.4155H31.9113V3.58398H3.95605ZM2.95605 0.583984C1.85149 0.583984 0.956055 1.47942 0.956055 2.58399V50.4155C0.956055 51.5201 1.85149 52.4155 2.95606 52.4155H32.9113C34.0158 52.4155 34.9113 51.5201 34.9113 50.4155V2.58398C34.9113 1.47941 34.0158 0.583984 32.9113 0.583984H2.95605Z" fill="currentcolor"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M11.3301 46.2676C11.3301 45.9914 11.5539 45.7676 11.8301 45.7676H23.7051C23.9812 45.7676 24.2051 45.9914 24.2051 46.2676C24.2051 46.5437 23.9812 46.7676 23.7051 46.7676H11.8301C11.5539 46.7676 11.3301 46.5437 11.3301 46.2676Z" fill="currentcolor"/> </svg> \ No newline at end of file From 4af1a7f7248f385923e347ee46bb514076243cb9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:33:13 -0700 Subject: [PATCH 176/273] chore: use vector banner for vitalik blog --- public/images/vitalik-blog-banner.png | Bin 13901 -> 0 bytes public/images/vitalik-blog-banner.svg | 10 ++++++++++ src/lib/utils/rss.ts | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) delete mode 100644 public/images/vitalik-blog-banner.png create mode 100644 public/images/vitalik-blog-banner.svg diff --git a/public/images/vitalik-blog-banner.png b/public/images/vitalik-blog-banner.png deleted file mode 100644 index 938eb13eb469d2d7146cd909486bccb37b496b20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13901 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 LN)q)zlhFSGw;SPc diff --git a/public/images/vitalik-blog-banner.svg b/public/images/vitalik-blog-banner.svg new file mode 100644 index 00000000000..cea992081c9 --- /dev/null +++ b/public/images/vitalik-blog-banner.svg @@ -0,0 +1,10 @@ +<svg width="480" height="200" viewBox="0 0 480 200" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect width="480" height="200" fill="url(#paint0_linear_7723_369)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M235.687 118.346C222.276 133.138 207.911 142 196.5 142C185 142 160 135 160 100.5C160 66 185.5 59 200.5 59C216.42 59 224 65 243.313 84.6539C256.724 69.8617 271.089 59 282.5 59C301 59 319 70 319 100.5C319 135 293.5 142 278.5 142C262.58 142 253 137 235.687 118.346ZM282 74C272 74 265 81 251.5 96C264.5 115 273.5 121.5 282.5 121.5C291.5 121.5 301 116.5 301 99C301 81.5 292 74 282 74ZM197 127C207 127 214 122 227.5 107C214.5 88 205.5 79.5 196.5 79.5C187.5 79.5 178 84.5 178 102C178 119.5 187 127 197 127Z" fill="black" /> +<defs> +<linearGradient id="paint0_linear_7723_369" x1="240" y1="0" x2="240" y2="200" gradientUnits="userSpaceOnUse"> +<stop stop-color="#E0E3FB"/> +<stop offset="1" stop-color="white"/> +</linearGradient> +</defs> +</svg> diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts index b619ca9f26d..d5147d4d495 100644 --- a/src/lib/utils/rss.ts +++ b/src/lib/utils/rss.ts @@ -24,7 +24,7 @@ export const postProcess = (rssItems: RSSItem[]) => case VITALIK_BLOG: return { ...item, - imgSrc: "/images/vitalik-blog-banner.png", + imgSrc: "/images/vitalik-blog-banner.svg", link: item.link.replace(".ca", ".eth.limo"), } case PANDA_OPS_BLOG: From 10b16a8659cf7fbc21f9a6de1359cfda26452342 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:18:13 -0700 Subject: [PATCH 177/273] feat: implement nav/pagination for swiper cards --- src/components/SwiperCards/index.tsx | 28 +++++++++++------ src/styles/global.css | 46 ++++++++++++++++++++++++++++ src/styles/semantic-tokens.css | 7 +++++ tailwind.config.ts | 1 + 4 files changed, 73 insertions(+), 9 deletions(-) diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx index 8b1308909f8..81d185dd2b4 100644 --- a/src/components/SwiperCards/index.tsx +++ b/src/components/SwiperCards/index.tsx @@ -1,4 +1,5 @@ -import { EffectCards } from "swiper/modules" +import { MdChevronLeft, MdChevronRight } from "react-icons/md" +import { EffectCards, Navigation, Pagination } from "swiper/modules" import { Swiper, SwiperSlide } from "swiper/react" import type { ClassNameProp } from "@/lib/types" @@ -11,10 +12,9 @@ import { useBentoBox } from "../BentoBox/useBentoBox" import "swiper/css" import "swiper/css/effect-cards" -// import "swiper/css/navigation" -// import "swiper/css/pagination" +import "swiper/css/navigation" +import "swiper/css/pagination" -// TODO: Fix height constraints on const SwiperCards = ({ className }: ClassNameProp) => { const { items } = useBentoBox() return ( @@ -26,14 +26,20 @@ const SwiperCards = ({ className }: ClassNameProp) => { > <Title /> <Swiper - className="mx-auto mt-4 h-fit max-w-128" + className="mx-auto mt-4 !flex h-fit max-w-128 flex-col items-center" effect="cards" - grabCursor - cssMode - modules={[EffectCards]} + pagination={{ clickable: true }} + navigation={{ + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }} + modules={[EffectCards, Pagination, Navigation]} > {items.map(({ className, ...item }) => ( - <SwiperSlide key={item.title}> + <SwiperSlide + key={item.title} + className="overflow-visible rounded-2xl shadow-card-hover" + > <BentoCard imgHeight={220} className={cn(className, "bg-background text-body")} @@ -42,6 +48,10 @@ const SwiperCards = ({ className }: ClassNameProp) => { /> </SwiperSlide> ))} + + <MdChevronLeft className="swiper-button-prev" /> + <div className="swiper-pagination" /> + <MdChevronRight className="swiper-button-next" /> </Swiper> </div> ) diff --git a/src/styles/global.css b/src/styles/global.css index cae5f2615e6..ad404ce5f90 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -220,3 +220,49 @@ } } } + +@layer components { + .swiper-horizontal > .swiper-pagination-bullets, + .swiper-pagination-bullets.swiper-pagination-horizontal { + @apply bg-background-highlight; + } + + .swiper-pagination.swiper-pagination-clickable.swiper-pagination-bullets.swiper-pagination-horizontal { + @apply !relative; + } + + .swiper-pagination { + @apply relative mt-8 flex h-[26px] max-w-48 items-center justify-center rounded-full bg-background-highlight; + } + + .swiper-pagination .swiper-pagination-bullet { + @apply bg-primary-high-contrast; + } + + .swiper-pagination.swiper-pagination-clickable.swiper-pagination-bullets.swiper-pagination-horizontal + .swiper-pagination-bullet-active { + @apply bg-primary-hover; + } + + .swiper-button-prev, + .swiper-button-next { + @apply !h-6 !w-fit fill-primary px-2; + + top: calc(100% - 11px) !important; + --nav-inset: calc(50% - 6rem); + } + + .swiper-button-next { + inset-inline-end: var(--nav-inset) !important; + inset-inline-start: auto !important; + } + + .swiper-button-prev { + inset-inline-end: auto !important; + inset-inline-start: var(--nav-inset) !important; + } +} + +.swiper-slide-shadow { + background: transparent !important; +} diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 5f283e9ded9..684889eb89e 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -61,6 +61,11 @@ --shadow-2-hover: 0px 0px 12px 2px var(--shadow-color-a); --shadow-3-hover: 0px 0px 24px 2px var(--shadow-color-a); --shadow-4-hover: 0px 0px 40px 2px var(--shadow-color-b); + --shadow-body-color-a: hsla(var(--gray-900), 0.25); + --shadow-body-color-b: hsla(var(--gray-900), 0.05); + --shadow-body-md: 0px 4px 4px 0px var(--shadow-body-color-a); + --shadow-body-lg: 0px -6px 10px 0px var(--shadow-body-color-b); + } /* Dark mode token declarations */ @@ -98,5 +103,7 @@ --shadow-2-hover: 0px 0px 12px 2px var(--shadow-color); --shadow-3-hover: 0px 0px 24px 2px var(--shadow-color); --shadow-4-hover: 0px 0px 40px 2px var(--shadow-color); + --shadow-body-color-a: hsla(var(--gray-600), 0.25); + --shadow-body-color-b: hsla(var(--gray-600), 0.05); } } diff --git a/tailwind.config.ts b/tailwind.config.ts index 5f73c5a0b49..0f5d16ce7ef 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -207,6 +207,7 @@ const config = { "var(--shadow-1), var(--shadow-2), var(--shadow-3), var(--shadow-4)", "svg-button-link-hover": "var(--shadow-1-hover), var(--shadow-2-hover), var(--shadow-3-hover), var(--shadow-4-hover)", + "card-hover": "var(--shadow-body-md), var(--shadow-body-lg)", }, spacing: { 7.5: "1.875rem", From 96a9b6d12d49a261c4455b2f990f27ad1aa90825 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:58:38 -0700 Subject: [PATCH 178/273] feat: add default bg-gradient to card banner --- src/components/ui/card.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 1afcedb18a5..930e042ce3f 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -67,7 +67,8 @@ const CardBanner = React.forwardRef< ref={ref} className={cn( "h-48 w-full self-stretch overflow-hidden rounded-2xl", - "[&_img]:size-full [&_img]:object-cover [&_img]:outline [&_img]:duration-200 group-hover:[&_img]:scale-110 group-hover:[&_img]:duration-200", + "bg-gradient-to-b from-accent-a/10 to-accent-a/0 dark:from-accent-a/15 dark:to-accent-a/5", + "[&_img]:size-full [&_img]:object-cover [&_img]:duration-200 group-hover:[&_img]:scale-110 group-hover:[&_img]:duration-200", className )} {...props} From ed1bb892da7b22987fd13ab86aa53ea95af37df7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:20:48 -0700 Subject: [PATCH 179/273] theme: add radial-a --- src/styles/semantic-tokens.css | 14 +++++++++++++- tailwind.config.ts | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 684889eb89e..504386b348b 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -50,6 +50,16 @@ hsla(var(--teal-500), var(--gradient-primary-opacity-to)) 40.63% ); + --radial-a-opacity-1: 0.08; + --radial-a-opacity-2: 0.24; + --radial-a: radial-gradient( + 127.67% 82.36% at 50% -30.36%, + hsla(var(--purple-500), var(--radial-a-opacity-1)) 0%, + hsla(var(--purple-500), var(--radial-a-opacity-2)) 33%, + hsla(var(--blue-500), var(--radial-a-opacity-1)) 66%, + transparent 100% + ); + /* Shadows */ --shadow-color-a: hsla(266, 20%, 21%, 0.02); --shadow-color-b: hsla(0, 48%, 6%, 0.04); @@ -65,7 +75,6 @@ --shadow-body-color-b: hsla(var(--gray-900), 0.05); --shadow-body-md: 0px 4px 4px 0px var(--shadow-body-color-a); --shadow-body-lg: 0px -6px 10px 0px var(--shadow-body-color-b); - } /* Dark mode token declarations */ @@ -93,6 +102,9 @@ --gradient-primary-angle: 180deg; --gradient-primary-opacity-to: 0.2; + --radial-a-opacity-1: 0.16; + --radial-a-opacity-2: 0.48; + /* Shadows */ --shadow-color: hsla(var(--white), 0.04); --shadow-1: -2px 2px 12px 1px var(--shadow-color); diff --git a/tailwind.config.ts b/tailwind.config.ts index 0f5d16ce7ef..4e0b254adac 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -185,6 +185,7 @@ const config = { "main-gradient": "var(--gradient-main)", // TODO: Duplicate; remove one "feedback-gradient": "var(--feedback-gradient)", "banner-grid-gradient": "var(--banner-grid-gradient)", + "radial-a": "var(--radial-a)", }, boxShadow: { "table-box": "var(--table-box-shadow)", From 7e6584737e5a71970cd472adc2ca21d30570a64d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:21:48 -0700 Subject: [PATCH 180/273] chore: rm accent-gradients --- src/styles/global.css | 12 ------------ tailwind.config.ts | 2 -- 2 files changed, 14 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index ad404ce5f90..3b48df65a0a 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -59,18 +59,6 @@ rgba(167, 121, 226, 0.05) 0%, rgba(167, 121, 226, 0) 100% ); - --accent-gradient-a: linear-gradient( - 0deg, - rgba(185, 185, 241, 0.24) 0%, - rgba(84, 132, 234, 0.08) 100% - ); - --accent-gradient-b: radial-gradient( - 127.67% 82.36% at 50% -30.36%, - rgba(201, 179, 245, 0.16) 0%, - rgba(201, 179, 245, 0.48) 33%, - rgba(136, 170, 241, 0.16) 66%, - rgba(255, 255, 255, 0) 100% - ); --gradient-banner: radial-gradient( 155% 100% at 50% 0%, diff --git a/tailwind.config.ts b/tailwind.config.ts index 4e0b254adac..658f6dbbbe9 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -175,8 +175,6 @@ const config = { backgroundImage: { "gradient-main": "var(--gradient-main)", "primary-highlight-gradient": "var(--primary-highlight-gradient)", - "accent-gradient-a": "var(--accent-gradient-a)", - "accent-gradient-b": "var(--accent-gradient-b)", "gradient-banner": "var(--gradient-banner)", "gradient-primary": "var(--gradient-primary)", "gradient-accent-a": "var(--gradient-accent-a)", From 09948f3852e501744754037d5753a3ae2308083b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:23:08 -0700 Subject: [PATCH 181/273] fix: bg and border gradients for "join" card match bg gradients to Figma, and add pseudo "border gradient" effect to also match Figma. Adjust trailing spacing before footer --- src/pages/index.tsx | 58 +++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 541d5ca75c7..7ac1062fd0c 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -650,29 +650,41 @@ const HomePage = ({ </div> </div> - <div className="flex flex-col gap-y-8 rounded-4xl border border-b-0 border-black/[0.04] bg-accent-gradient-b px-4 py-8"> - <div className="flex flex-col space-y-4 text-center"> - <h2>Join ethereum.org</h2> - <p> - This website is open source with hundreds of community - contributors. You can propose edits to any of the content on this - site. - </p> - </div> - {/* TODO: Fix icon sizing, fix button/icon layout on mobile */} - <div className="max-w-105 mx-auto grid grid-cols-1 gap-16 md:max-w-screen-md md:grid-cols-2"> - {joinActions.map(({ Svg, label, href, className, description }) => ( - <SvgButtonLink - key={label} - Svg={Svg} - label={label} - href={href} - className={cn("max-w-screen-sm", className)} - variant="row" - > - <p className="text-body">{description}</p> - </SvgButtonLink> - ))} + <div + className={cn( + // Border/gradient positioning + "before:absolute before:-inset-px before:bottom-0 before:z-hide before:rounded-4xl before:content-['']", + // Border/gradient coloring + "before:bg-gradient-to-b before:from-primary-hover/[0.24] before:to-primary-hover/[0.08] before:dark:from-primary-hover/40 before:dark:to-primary-hover/20", + // Paint background color over card portion + "relative inset-0 rounded-4xl bg-background" + )} + > + <div className="mb-12 flex flex-col gap-y-8 rounded-4xl bg-radial-a px-4 py-8 lg:mb-32 xl:mb-36"> + <div className="flex flex-col space-y-4 text-center"> + <h2>Join ethereum.org</h2> + <p> + This website is open source with hundreds of community + contributors. You can propose edits to any of the content on + this site. + </p> + </div> + <div className="mx-auto grid grid-cols-1 gap-16 md:max-w-screen-md md:grid-cols-2"> + {joinActions.map( + ({ Svg, label, href, className, description }) => ( + <SvgButtonLink + key={label} + Svg={Svg} + label={label} + href={href} + className={cn("max-w-screen-sm", className)} + variant="row" + > + <p className="text-body">{description}</p> + </SvgButtonLink> + ) + )} + </div> </div> </div> </div> From bd307bdba027bb7158efbbfdd5bccf93668b6457 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:38:01 -0700 Subject: [PATCH 182/273] chore: restyle and arrange title --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7ac1062fd0c..7ffdb0f5fc2 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -523,6 +523,7 @@ const HomePage = ({ className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row" > <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> + <p className="text-sm font-bold text-body">{title}</p> <p className="italic text-body-medium"> {new Intl.DateTimeFormat(locale, { month: "long", @@ -532,7 +533,6 @@ const HomePage = ({ minute: "numeric", }).format(new Date(date))} </p> - <p className="text-sm text-body">{title}</p> </div> <ButtonLink className="h-fit w-full text-nowrap px-5 sm:w-fit lg:self-center" From 02bbc637af6becb793820a7ee8377963df5fbf72 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:10:07 -0700 Subject: [PATCH 183/273] chore: clean up feed naming, fix media pulls --- src/lib/api/fetchRSS.ts | 26 +++++++++------- src/lib/constants.ts | 68 ++++++++++++++++++++++++++++------------- src/lib/types.ts | 7 +++++ src/lib/utils/rss.ts | 18 ++++------- src/pages/index.tsx | 8 ++--- 5 files changed, 78 insertions(+), 49 deletions(-) diff --git a/src/lib/api/fetchRSS.ts b/src/lib/api/fetchRSS.ts index f3810a9673f..548bc885546 100644 --- a/src/lib/api/fetchRSS.ts +++ b/src/lib/api/fetchRSS.ts @@ -35,17 +35,21 @@ export const fetchRSS = async (xmlUrl: string | string[]) => { // Slice to first RSS_DISPLAY_COUNT items .slice(0, RSS_DISPLAY_COUNT) // Map to RSSItem object - .map( - (item) => - ({ - pubDate: item.pubDate[0], - title: item.title[0], - link: item.link[0], - imgSrc: item.enclosure ? item.enclosure[0].$.url : channelImage, - source, - sourceFeedUrl: url, - }) as RSSItem - ) + .map((item) => { + const getImgSrc = () => { + if (item.enclosure) return item.enclosure[0].$.url + if (item["media:content"]) return item["media:content"][0].$.url + return channelImage + } + return { + pubDate: item.pubDate[0], + title: item.title[0], + link: item.link[0], + imgSrc: getImgSrc(), + source, + sourceFeedUrl: url, + } as RSSItem + }) allItems.push(...parsedRssItems) } diff --git a/src/lib/constants.ts b/src/lib/constants.ts index b9bd56e33cc..5ffca9dafec 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -4,6 +4,8 @@ import { NavSectionKey } from "@/components/Nav/types" import i18nConfig from "../../i18n.config.json" +import type { CommunityFeed } from "./types" + export const OLD_CONTENT_DIR = "src/content" export const CONTENT_DIR = "public/content" export const TRANSLATIONS_DIR = "public/content/translations" @@ -159,32 +161,54 @@ export const LINES_BEFORE_COLLAPSABLE = 8 // RSS Feeds export const RSS_DISPLAY_COUNT = 3 -export const VITALIK_BLOG = "https://vitalik.eth.limo/feed.xml" -export const EF_BLOG = "https://blog.ethereum.org/en/feed.xml" -export const PANDA_OPS_BLOG = "https://ethpandaops.io/posts/index.xml" -export const SOLIDITY_BLOG = "https://soliditylang.org/feed.xml" -export const ETH_STAKER_BLOG = "https://paragraph.xyz/api/blogs/rss/@ethstaker" -export const _0X_PARC_BLOG = "https://rss.app/feeds/cWXGYts0ZM8C3F6t.xml" -export const XML_FEEDS = [ - EF_BLOG, - ETH_STAKER_BLOG, - PANDA_OPS_BLOG, - SOLIDITY_BLOG, - VITALIK_BLOG, - _0X_PARC_BLOG, -] -export const ALL_COMMUNITY_BLOGS = [ - { name: "Vitalik Buterin", href: "https://vitalik.eth.limo/" }, - { name: "Ethereum Foundation", href: "https://blog.ethereum.org/" }, - { name: "ethPandaOps", href: "https://ethpandaops.io/posts/" }, - { name: "EthStaker", href: "https://ethstaker.cc/blog" }, - { name: "0xParc", href: "https://0xparc.org/blog" }, - { name: "Attestant", href: "https://www.attestant.io/posts/" }, +export const VITALIK_FEED = "https://vitalik.eth.limo/feed.xml" +export const SOLIDITY_FEED = "https://soliditylang.org/feed.xml" +export const _0X_PARC_FEED = "https://rss.app/feeds/cWXGYts0ZM8C3F6t.xml" + +export const COMMUNITY_BLOGS: CommunityFeed[] = [ + { + name: "Vitalik Buterin", + href: "https://vitalik.eth.limo/", + feed: VITALIK_FEED, + }, + { + name: "Ethereum Foundation", + href: "https://blog.ethereum.org/", + feed: "https://blog.ethereum.org/en/feed.xml", + }, + { + name: "ethPandaOps", + href: "https://ethpandaops.io/posts/", + feed: "https://ethpandaops.io/posts/index.xml", + }, + { + name: "EthStaker", + href: "https://ethstaker.cc/blog", + feed: "https://paragraph.xyz/api/blogs/rss/@ethstaker", + }, + { + name: "0xParc", + href: "https://0xparc.org/blog", + feed: _0X_PARC_FEED, + }, + { + name: "Attestant", + href: "https://www.attestant.io/posts/", + }, { name: "Devcon", href: "https://devcon.org/en/blogs/" }, - { name: "Solidity", href: "https://soliditylang.org/blog/" }, + { + name: "Solidity", + href: "https://soliditylang.org/blog/", + feed: SOLIDITY_FEED, + }, { name: "Privacy and Scaling Explorations", href: "https://mirror.xyz/privacy-scaling-explorations.eth", + // feed: "https://mirror.xyz/privacy-scaling-explorations.eth/feed/atom", // Old xml format }, ] + +export const FEEDS = COMMUNITY_BLOGS.map(({ feed }) => feed).filter( + Boolean +) as string[] diff --git a/src/lib/types.ts b/src/lib/types.ts index 992e5a8611c..42395e37313 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -791,6 +791,7 @@ export type RSSChannel = { type: string[] } }[] + "media:content": { $: { url: string } }[] }[] } @@ -800,6 +801,12 @@ export type RSSResult = { } } +export type CommunityFeed = { + name: string + href: string + feed?: string +} + type NestedDivs = { div: NestedDivs[] } diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts index d5147d4d495..8edc3c8c2cd 100644 --- a/src/lib/utils/rss.ts +++ b/src/lib/utils/rss.ts @@ -1,9 +1,8 @@ import { - _0X_PARC_BLOG, - PANDA_OPS_BLOG, + _0X_PARC_FEED, RSS_DISPLAY_COUNT, - SOLIDITY_BLOG, - VITALIK_BLOG, + SOLIDITY_FEED, + VITALIK_FEED, } from "../constants" import type { RSSItem } from "../types" @@ -21,23 +20,18 @@ export const sortByPubDate = (items: RSSItem[]) => export const postProcess = (rssItems: RSSItem[]) => rssItems.map((item) => { switch (item.sourceFeedUrl) { - case VITALIK_BLOG: + case VITALIK_FEED: return { ...item, imgSrc: "/images/vitalik-blog-banner.svg", link: item.link.replace(".ca", ".eth.limo"), } - case PANDA_OPS_BLOG: - return { - ...item, - imgSrc: "/images/panda-ops-banner.png", - } - case SOLIDITY_BLOG: + case SOLIDITY_FEED: return { ...item, imgSrc: "/images/solidity-banner.png", } - case _0X_PARC_BLOG: + case _0X_PARC_FEED: return { ...item, imgSrc: "/images/0xparc-logo.svg", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7ffdb0f5fc2..0112407e5a4 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -67,10 +67,10 @@ import { import events from "@/data/community-events.json" import { - ALL_COMMUNITY_BLOGS, BASE_TIME_UNIT, + COMMUNITY_BLOGS, + FEEDS, GITHUB_REPO_URL, - XML_FEEDS, } from "@/lib/constants" import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" @@ -94,7 +94,7 @@ import hero from "@/public/images/home/hero.png" const cachedEthPrice = runOnlyOnce(fetchEthPrice) const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) const cachedFetchTotalValueLocked = runOnlyOnce(fetchTotalValueLocked) -const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(XML_FEEDS)) +const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(FEEDS)) const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) const cachedGrowThePieData = runOnlyOnce(fetchGrowThePie) const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) @@ -566,7 +566,7 @@ const HomePage = ({ <div className="mt-8 flex flex-col gap-4 rounded-2xl border p-8"> <p className="text-lg">Read more on these websites</p> <div className="flex flex-wrap gap-x-6 gap-y-4"> - {ALL_COMMUNITY_BLOGS.map(({ name, href }) => ( + {COMMUNITY_BLOGS.map(({ name, href }) => ( <Link href={href} key={name}> {name} </Link> From cb2a25709172b0b0fa4d381287b5b3e85c58845d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:21:29 -0700 Subject: [PATCH 184/273] feat: add pagination/nav to mobile PostsSwiper --- src/components/PostsSwiper/index.tsx | 26 +++++++++++++++----------- src/styles/global.css | 27 +++++++++++++++------------ 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx index 629c67f04f0..fc99834a5d0 100644 --- a/src/components/PostsSwiper/index.tsx +++ b/src/components/PostsSwiper/index.tsx @@ -1,4 +1,5 @@ -import { Keyboard /* , Pagination */ } from "swiper/modules" +import { MdChevronLeft, MdChevronRight } from "react-icons/md" +import { Navigation, Pagination } from "swiper/modules" import { Swiper, SwiperSlide } from "swiper/react" import type { ClassNameProp, RSSItem } from "@/lib/types" @@ -8,8 +9,8 @@ import { cn } from "@/lib/utils/cn" import PostPreviewCard from "../Homepage/PostPreviewCard" import "swiper/css" -// import "swiper/css/navigation" -// import "swiper/css/pagination" +import "swiper/css/navigation" +import "swiper/css/pagination" type PostsSwiperProps = ClassNameProp & { items: RSSItem[] @@ -17,22 +18,25 @@ type PostsSwiperProps = ClassNameProp & { const PostsSwiper = ({ className, items }: PostsSwiperProps) => ( <div className={cn("h-fit gap-8", className)}> <Swiper - cssMode - // navigation - // pagination + // cssMode + navigation={{ + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }} + pagination={{ clickable: true }} keyboard spaceBetween={32} - modules={[ - // Navigation, - // Pagination, - Keyboard, - ]} + modules={[Navigation, Pagination]} > {items.map((item) => ( <SwiperSlide key={item.title}> <PostPreviewCard {...item} /> </SwiperSlide> ))} + + <MdChevronLeft className="swiper-button-prev" /> + <div className="swiper-pagination" /> + <MdChevronRight className="swiper-button-next" /> </Swiper> </div> ) diff --git a/src/styles/global.css b/src/styles/global.css index 3b48df65a0a..9ee36278b4d 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -220,7 +220,7 @@ } .swiper-pagination { - @apply relative mt-8 flex h-[26px] max-w-48 items-center justify-center rounded-full bg-background-highlight; + @apply relative mt-8 mx-auto flex h-[26px] max-w-48 items-center justify-center rounded-full bg-background-highlight; } .swiper-pagination .swiper-pagination-bullet { @@ -235,20 +235,23 @@ .swiper-button-prev, .swiper-button-next { @apply !h-6 !w-fit fill-primary px-2; - - top: calc(100% - 11px) !important; - --nav-inset: calc(50% - 6rem); } +} - .swiper-button-next { - inset-inline-end: var(--nav-inset) !important; - inset-inline-start: auto !important; - } +.swiper-button-prev, +.swiper-button-next { + top: calc(100% - 11px) !important; + --nav-inset: calc(50% - 6rem); +} - .swiper-button-prev { - inset-inline-end: auto !important; - inset-inline-start: var(--nav-inset) !important; - } +.swiper-button-next { + inset-inline-end: var(--nav-inset) !important; + inset-inline-start: auto !important; +} + +.swiper-button-prev { + inset-inline-end: auto !important; + inset-inline-start: var(--nav-inset) !important; } .swiper-slide-shadow { From 77755b785b7db712adf1c42cfca25fe75085b69f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:23:15 -0700 Subject: [PATCH 185/273] chore: rearrange title per design review --- src/components/Homepage/PostPreviewCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Homepage/PostPreviewCard.tsx b/src/components/Homepage/PostPreviewCard.tsx index 9e69f172b15..d2420504403 100644 --- a/src/components/Homepage/PostPreviewCard.tsx +++ b/src/components/Homepage/PostPreviewCard.tsx @@ -15,6 +15,7 @@ const PostPreviewCard = ({ pubDate, title, source, link, imgSrc }: RSSItem) => { <img src={imgSrc} alt="" /> </CardBanner> <CardContent className=""> + <CardTitle variant="strong">{title}</CardTitle> {isValidDate(pubDate) && ( <p className="text-sm italic"> {new Intl.DateTimeFormat(locale, { @@ -27,7 +28,6 @@ const PostPreviewCard = ({ pubDate, title, source, link, imgSrc }: RSSItem) => { <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> {source} </div> - <CardTitle variant="strong">{title}</CardTitle> </CardContent> </Card> ) From f485d02a96c81e49908ea14520b220b3996b778e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 18:37:43 -0700 Subject: [PATCH 186/273] patch: metric label --- src/components/StatsBoxGrid/useStatsBoxGrid.tsx | 2 +- src/intl/en/page-index.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx index ecb5f2f486c..afa150dc0ae 100644 --- a/src/components/StatsBoxGrid/useStatsBoxGrid.tsx +++ b/src/components/StatsBoxGrid/useStatsBoxGrid.tsx @@ -109,7 +109,7 @@ export const useStatsBoxGrid = ({ { apiProvider: "GrowThePie", apiUrl: "https://growthepie.xyz/", - label: "Median transaction cost", // t("page-index-network-stats-nodes-description"), + label: t("page-index-network-stats-tx-cost-description"), state: medianTxCost, }, { diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 3e7464c4f8a..f9291c7c38b 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -57,6 +57,7 @@ "page-index-network-stats-value-defi-description": "Value locked in DeFi (USD)", "page-index-network-stats-value-defi-explainer": "The amount of money in decentralized finance (DeFi) applications, the Ethereum digital economy.", "page-index-network-stats-nodes-description": "Nodes", + "page-index-network-stats-tx-cost-description": "Average transaction cost", "page-index-network-stats-nodes-explainer": "Ethereum is run by thousands of volunteers around the globe, known as nodes.", "page-index-touts-header": "Explore ethereum.org", "page-index-contribution-banner-title": "Contribute to ethereum.org", From 32821aba3f6cde0792021990e1ec291c52970854 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 18:46:56 -0700 Subject: [PATCH 187/273] chore: adjust date range formatting for events --- src/pages/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 0112407e5a4..39bf637c346 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -620,8 +620,8 @@ const HomePage = ({ <CardDescription className="italic"> {(isValidDate(startDate) || isValidDate(endDate)) && new Intl.DateTimeFormat(locale, { - month: "2-digit", - day: "2-digit", + month: "long", + day: "numeric", year: "numeric", }).formatRange( new Date( From 7f11711286a158e393c1d239d20a8c9416cc0a6d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 18:51:29 -0700 Subject: [PATCH 188/273] chore: upres event placeholder image (migrate image usage in EventCard to tw) --- public/images/events/event-placeholder.png | Bin 4219 -> 9445 bytes src/components/EventCard.tsx | 22 ++++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/public/images/events/event-placeholder.png b/public/images/events/event-placeholder.png index 3f53dfc191764b1ccb61fb79077aafc2c592d33d..a94614605d5a5b222a79baeb9fb3985e48898ab5 100644 GIT binary patch literal 9445 zcmeHtc{tQ-`1cn@p>#S~DjA(lQMN26``AKpLdu>cDobh<DU2bGRLW9HvJA<wH`$39 zOEIPFAxmbY><lqu?C<^Mob&$ve&2t8T~}Av^UU*o?(K7b?)!P3?wOewZsXm<iy+9h zlP8XwBM4VDf^bA{;f9&>)UEpP&sMJ!Hr@y#bP)Z^ank(vX_(~jHaFBoUNwo1!eEoD z&M6%P$&cb&KED}3e)m6lT<7d9j>)ghxX<%RTGOTZ`*=LWZJ*|rD5NW8roLYB*PO5% zFZy~*DlghMeJHlyzbELzS~Pi5rgUyo#`U|N_ef*!3r>x{%gjtx8dW)b$BCO-J+X93 zGf(e|hFCLxXm)TW+JLJ*ILJPEcJYrn+S&?@#t({^U8i!wKWBpx7-=8eQjHEm{&(>I z?1SA)-yfTLF#T725Jcf1!livDS;OzT|Ah+|{4ZYoVf){tX27w)i7)y28Ky)NX<6B1 zK1BP{CMV?miR{(->45T;B_@*@k02Ke5bodyMYef2Z?0jvzZJrtVwly1S$>TG)<i=~ zOG}n8jZ$8&O3u%p@j#G86Zj2loY!nh#3uERH#=M0^1OEKni_%xN`N}V^l}<GyXs2g zCGWAcD6GFG%%f^z(#LQ;%lMY1yu7@|O-Kp}lo?4gsl|Ph-igc+0TF?Zgd8Wa0Y1?N zY1bNcrI8T~hX}HGp{mYG&Ts9Ev9a+P4rGK6ouhwvEKwXML+LRs?9S~NXSTx+s_=uq zv<$_g*tWPO%tvUnDM`KQHx6wKK(58bea1q$gH{5vKMFZ>Xfw9Lq+Zryz_U85C3mGg z+2|V1qsUyRsh+^g!V};H`{L7FNWibb94Urv-Dzx}V{`9^hK7m?ParMo=*su!o5lA1 zF7xiX&{o9X5L_arGWIQJMZ<s2t;gnfWMmuY6DcV}G2&2}`_RzP0A3Z12P+LfH%}+L z46_E^s#`$~uTAoa$>Vk1X`xDcwplnKD!-v0idzOLZv9){jkrh;73kyU4nD90G%+5X zIIRUv%INm&Ow{KLo<hwCD`IDNxkhb&)byK-tZX(Xmv$WLTHUH9(9iOAhV(mF2u|=i zk+qmm2P$sJ89|dUe3w)eE}X;2HRkHqH#dMz!hZw0+5fW6D$jD<S>&}`)$;Wo2!)C$ zD7Ah6IC$%%Ys}N9PygmbTI69)O(}C@Zj8AIyyJ5m9I<^OQ8PPC6c$=qTE5zhq#OW$ z`8Z`Psta8|wBazd10aTjJCHRZK0ZFK$bqOtgEl;F#kPz)q7fV`6B84juX+kO#G}BJ zTlaielBN+PR$+PhD1b#&8-%QopT`v%@|@($7ZMico5|;_P5~QVM_I2V9noc$=5>3T z1kSY@l6Vj&QxHF~A0m-J)T_x|N8iR=>fHh5YY;vb;I^8tq_k9SXknsNXV1g>Klt(y zItjcx-E~R#cHNQbtn~EsECj(n1T`x({C>W)1RpKAA4@3qCldhrL5E<ANQgv-M~CiK zK+w&pK6Go}UxGQD3~liicgAqNot>Q*(T(N6s4YR+t3rM=9fUm(?;HXBAiQ)_!X6{Z zB>m?}NizC&%82L_gkSrICM2N|UTv?Dhqt#kiY!<uZgJB1>!Cy;XVr*J2v{d*RRY@h z&5g98_&l2g-(5_vvpS4~-?z50DHlRgYC+_Y9HRkca2Oybr2!ouzEe|pQDZ&fQhDJM zu=lKa?keTiBa+-}XE6Bb+r2RJ2-V_cp`nE}zL<Ea(8gP6Yw(es!5o>fVD7~K1fH2H z=<;NzRMi=aSF0u9wb(Fg<Se*M`{K(nTrQ!Lv-yv8j33cQxKk9eeIfj#(rwGj%XJ7M zxF6v%+X{Iq2zm9rpB$hFiE1W@?r6sRpSVLyiS}rErz;>LuIaap^fv-hO8M;DBxb*L zLMlmrkv$mY%8A4#!qTj)Ro_bi0ZZFlV-QJo4w2wCqYlRil3FQ+g8daqc?X^_%IWYR z?;Wwm*U$lZx#}N~*r)L2;q*d7TcQB&AICQsfs6+ZH&~hK?)y8xeS1OLhot`wTC3$R zs;4jZk}nmiGFuHXWHBV=0=nzLb<A-Y7L=4614-+1`s~SvC?%^zY|`!q#KzXMSS)?l zDF2LBw{wL%_<|JxF_MqtwVU7lhq{BPYj~T)n1(=iS)5#ELg1CKI3Y*XfX^6kU~O&f zpGfdd0ET2`5!;Aa8dOqJB5QYdv-WO~u*)`k)fV3o^w2;rY+rCKFq&kM^#WOFqyk8? zGtbV76WR3)tUV8i$+NutTlBr9c}BA}d>sRT*!8r|s@rG-H1EME-Vfh$YEHPuY~=f9 z)O-~P8gKROPw7Xd8yfDHUq*OOf}_0tqSgHK-Cgv%gLg=UO=8;|(pt?n!>{X8mO-?w z{O9odzkP;$mqD~|qv{%{1zec1Ab4KAYN8HKib3aeZSg-QPE&w3BO)Rw63DJQpz!{8 z4UE_^+^SMS<6%fENnVI;pK%Ax`ic_n`57=*P$XCvobq1NHR`7f<Q0)vC4z_#gXrrr zGL-8q$+fAk70NFAg%CerfauFYj)Hn>5k*BsN`i<u6<sD(jJ3mCh&Em-v?O(z@*wXI zgN$=MssTO+%|yWSR7{Y@uZVaCy7nZq^cipn%?t9Q67u7H(%F?_c6J%0n>Yzwkb#0s zGS^4Q-PgDC>m}qmR1I;fw(bLY&2^<vUnhav{D2svB}i%kXSZ))jByYt2TqROyN)qC zF(|7IKmtF3XvKxwzU34xsG1#-l9KA;M85w8PLbVG^&@tj7_=S0bNqc9@M_5U2VNSe zLqg-V-TyDCaRGN7HER;H(A$95Q8$1W*JBi3XSe+aFAgwC<k>pB)c%22wKxET|2PUS z3r+BM9VYlTpjYIs^}-EINl2T`OS{sm_FIvoC`ZK`N04muI*+G3nxa){p-vAK2fI`w zNZB&$MIl%RRV}v8>i1D;bFzchK15s({qAH0$sE}(D5$kI-Ah|NwmfE4#T&Fdh-tU{ zZf23iTUk)xyj?W-&xf0!x8bd#Mp`h6yP$3<;91?S1MQ|-fnp&<Y~UUU&D;8V0}(N? z?KF11a_yHd)|owBP>-PaQPx%%q|L~Clvxfre^Iq7E;O8<`pS2c(I2>4N!)b@qj76m zV@uV~2C4ISe5JWgS*zR2Bhzaja^n-`d{Sy^s+n(AZNd?9*0+QsRY^uVW!;|GAW<#C z@`8(xk5a7ta;0fwQ&VTZ|9IX4G)3U`mYYz}yM-Oo=@lg<tmPO&;I2t=QLbrA{#uvA z{BhmTaLm=$*H3mi1WaB-g0T>Sk(~7+b1JTQF`*~n%*e{}Y_lHe3Jw>QZZjaVW9^)v ztV@88?cL(CGL@A<%o;n616e!)`ABk}J~i)PY_)Rgw(@3LT;n{;$Rmoto*tMr<gK}w z_-mvfBTFR2O6DDB3K7t{c*r7X@Qh6Cak<{aisBs2#b%3v0ym{SqsLKZqye<%PT4ex zr60j%vrC#qe&~2Syjp4)_v3-NT7;68R#3iWP98Th!Ug$4IT1m+Phe#}Rx}9h#HJ}J zDHSota!8SaWKA_fp6jt=$Hsu_TLd83fxm>>>=$+{ZWaMrAI_`Sj}bcgWB}b0%}Qn( zX2new(T)Px&7I?qDSnZp+3*&RBNc^C!=G8!$cx6U)F`r$V{n<Ky!<sSL|Xt|`njn) z&GvM5mA;$zlx2mcTH{tUl40FqN!i_)pyioA`KuW`$jE-sHMz$I|73g&mpxq)XZu8+ zO_AI@@O82^>quhuTfY)Ad8Pi_w{NOYNk$H$t50^&G~_5p&Lnu3-uE&10Ey{;3Va<$ z*mGUd!f$OlT<fK_MK^uv#czqH0cV$7T`%Lv%uYNKECyg7K^q%v(l%A|p@n`2_vWpJ zcKLe}D-@07Q%rH5o_)T+Bo64hFss??tjw=N%iXR-!LbLYw=XX|Fwf@B$o3Lzl1yLk zC0nGxeTG6gRcAu60Y$~df`qjtnw3AL)T*sZLG$NzgVEMB!**yoTlmn0&}!FZj2;#5 zNnDaJb&W+EwK`<k0a@=eRURc38tyj+Fq?>^pD_r*t&wjT9M&wj8fCIx2<VvrkT*hl zAIhbh#Z+CCZiQ;3eRflNRhO~06=^{o^Qvx)Q7kQl1~PrO<InRuTw}lS$!1{L^iX%8 z>Jbz}z<g;0If?=;A*iBBQj^3zA7G+lNxZyw?_P`=5Wg}A*$zAn4Sk?$z{|$+GT&0e z(wtiIQ)qOhr9V}!uzI_=5K-t)s#7PWDP!);`Hyl{ctVA;OzBR1giNsk^~fZ#S(5oi z)Bp12@t+X60%%A?L3nj4G$eAuj_%&FB;NoZ-dZviwV-WO29(zW4pWJRd@i-ivsAgy z+MRZG=F}6%hCGaG>_42gP$NKiEsCU|1ho%{&6!OWd2@jhXYXBWC%+|X-;W1vD@*ez zw5QNQiq;1;p`5Gs&=5>E9-bqtE(~)#nw*@>XYEe+wP3%VYz4M&Yio;z_RR-vGY+`V zbie^4y*eR;wBW#c+>?gE;@Qisjl0u*gt8n+wB%>c$}k8WWmX=jM`y=hF6K1GU!4Ry zUh!gnx43QfUr4ziSw-E3Ct8i8-u#W`tD4KZ)9IZfV7LTWq?=n;SLY4L@Y(^!$El4> z#3&lfeLUYJnMWcuzsp$LhD`4SF>)Oq#r=W#%<{ncOb3z{&L)g7_WgnRa=eDRy1HG! zcwXrc7c!xTa637UPP9(dSq%m3F7n-BVlnVpj2vKc3%V$O7ni{jFmVDZpOdM21Sy%Q z**5fNe^GB*d*bvf)<{06G76+ct>Q;s^ME><SFT*KkGws9*5if{{zHy%Z`vRu1G_kq z_Jcu~uXu<ca*!Wi+JFB1nf37DLqtDDciPG^kV!9W#;U`q^R+O##|oWCtLz#OdO2-n z>SlWsMvJmjoO<WZof4B|4b`=`m{qS;+!_m4%85+qp!(BRS*4hF)Q3>MI;xg`ejJ64 zEtxl3QNkqAdNn+V9bT?X!_Vp<!Eqp6#VnUwj+*g9<S){e+V6Ezq)Kxw=>GfcaO7g> zyt&pPqQiz(<8sf7-7g0Q26$YXlarR_gVyGMz=;d0pqJ!iiQ8<=g~miV#1PbOdE&bx z8M+m3Mn8G?mDah(s*Z?1XhuKbQQYH!xBUb2r`EIC%_-<X&;Nxc<{YW(a+H{6_GXn3 zrD1hozFEgLrlS=XGItjet$CtIpY}lKRzLpe*Q3LH+FB?lCN4O=i5bGv2uqU*A#%tH z^cXG5L!qO8fv5s>aC0cMI|3a*or>N%TT>K2yV=PM1S(v_mi2sE;5>Q)EaN(lEwhC| zG!Hs}U;5C2#9Kv0MF}pXlHOhDYUOOf%5kAaGRYRq;x32Y#m-X74dpxOKN=ew^Ce7^ zE5(eY30I)^;J^5E2ydFC##~#Qq^(ZY&r{~f%;*@}@{sbd7@*%{IlhM<ndTI9LRh;( z8Mgc$jCV)hXecNsU=*CNWun~j!*<Z61^xUWp(uY#i{dld1^@{_0n!{Qf{$}SlDqr+ zftn`H@z;Ia&ovYp;l9J00(?X2FZXsGn;E2L1ro+<!}u7RkuTxE5+6TN@AuTPHGavd z>2el%Rkvd~LgWD>oWE!|RBL6feON~&+Bo$2ti82$rY4^4rMBuBnNB0B-548Eu3Bj1 z;XqjDxgn*D@>=pa0}gTz#IV^0_%kxx1MSdgYvwG_tu1on+_7cSiq)Zsv-UPN3pTln zl-)twiB-?EjvXt(Gsim00pqEh{M9;Q4<aL*(k(|=d!47rqC{C74%b|_!$&>hzE=SD z*0pOhzG<yxf6Ms422d{yL=ooFx}}HlXQs)}#rQ1SBz{?8v1gwhX{nV%c+f`TxJOv> z-Hwuo3YrM**gl%?K}#jY1cBAn`6}X&@fsCB?Zofgbknt_V-7Ovh95}_gTWBn7x}d% zP&V5cI`xpPBCN;wGF3{Y5shYR<nNlemP>xbdzG{$;<Bp+JZdZgn&$Phn10u<D?BEu zBKMp5fi3UVu-y6g&pXoty-8Z8H7XW&U3OrFiQ_||^Hwi+)4zICaFm51jGjSTNRBmg z#XWbCP@y@z^y2d(esy_aF97CK?zX+b&SyBdQ(V&0(sJbKO;m03UPhpKjt_p3By#R5 zHCVwFTUN%cGOYfq<0qAXmZfA>@1Z-LuE=(vC%Tz4JIVM-|L4W!g85#uq!jnCz#s_| zj#b3;?G1f4OAeTy8YdDKM?XdIy<&MUvu6b4?BB$8Q+c#iQ6@FY9l2WP6hCyEHu-&} z{Y9=w2<e$XQ<YBR!mC%WR*j*DzOi`IeB7JAs*nTO{sC+bf694+zuNt9EA8gb)rz6e z_WBVXc{gU@Q>EtF8ovY%v3H3$UdqRhAJ;@3U$UFooFB^HE`Md<ht<~thCam`!Zs&2 zLs9kV;U)JrEv<gWdlAssoIgL%@HSi^V~~#{eAOXQ<y!5B1IQb+uYB^hM3>Q-EYPH| z1w#5p=hMQJblLMMA2c4b^s$Z{Zw}-QoZVWAfsTqpOLVLL<gJ}yn0VrFa#4|ymv(x# z;ird*L6pTADyA!21*36Sl?FE*{#UL{+LqRoPHrTL3MbI(fziJO{Y#Uo;znQOexBNk z@dmuvuYP3^lvmg@gHoyA+Y%XYUpE}Yev4^x?U+g&!ZZ5H6`3QgX$PuWQkc8fdmQLF zEJx;DwygT8gzWl@s2T9|l23-qA8g^7Qx98QCl~0BYl~g8RnVx@4qvvL6Cc6{F>@T# zg@rt30@Q>ePmC)fWM@7lXo0vIW*=6{Z^C#aFdW+IM?{{l(jH5gnoxsqnybBm0#|^1 z1Lu+$c-PekIm)daQmrJ0XW3LjZi#k=Dh;hFjJ59)S~ih_pELGzxi{T}TUA#mDIIm} z8xtS+Cfy;jGx1?Jkp^RkN%D!0xz4XEM1uT|&1namw#@yFAd>TG)<(MF$VdD%Xc_f} z?xAH%<k;vJ?{)N!%Wqnfwz#Gj^^UGCD0L6_E~pDX&C%mcVN}kVT$-$Puj!B=;uZEu zQR4KX>KH3;0Ji=o!7|Oqwy7@68F&61+IG!Y&KtHx%(>Basl(svsQx2`a74H=zPvDd z)A_aC*S@~WmX9SPgd)@=;_`P1Mwdr%1z1zl0hLlKXr@lsy<(OYE@qs^$iKgmye<N) zaY%^b_@gn1RU~+<yI4|c^T1x4BK;sn0L?Bcs;^(b1ah--re1Dsl(?G3kmD_aHtaJn zv&z?q%~nghF_<o3hvxO>JeSjv*5AMCCuf&>Gh*#3Z`Yb&PGM>L#5KX;P@X@A6OK^i z*(|1haDIM%$A=Fe;5?*>;#NSwz|e3QF0>VXUCe~kyfaxYavwLZzGe74_7-sUimg|1 zoX<};XXkI1;5>x(#&MKl-73jdt@fF<@<$yna&^86G%Y6MfR*j-SK{Elif?x-sHJ5S zvRRu3^`b<P)H^SHjwfF-r+29)+&<(9Q<KID$uR{+*BTtY@x8YxY0uuhb|nBzf;o^3 zQNcZ|KM#~yB@P!P3PhTIgifZNoG1Wk%YdtwCrO*F;$@e5+yjLO93xVY5rmJqkP$4r z*VBlCzcVrd6foylsx-1&Ah$T$d<S+h@>=8`hj=Xq(eAFT;j<0Gv6q{9sNxzohntd! z`+Tt~<Nsw_Pf7^xku6a|LShM9u?=naY)(8O@12=xKZ>{?Q<iDCzn^WyKWHP{Fvcc$ zJ)d2n1}#&^fkH1GvS`tfF6)Va;1)otN8hs!w12qY>kpZ1Uaq!efk+J1hu=ZjS!8O- zb5duv#-@4UZ~9)T_A}5Py{aSW4+$;^yMxBYATs{mz`OyzGC9OeBxP=m8a4P;r;#Va z$OptFR4pWwud$=no(b$O4_so^0ed!HAOq;BQJ6I|NJ|^^F62-C=XUvv&vmCO_VW}t z#C9YLIM~?4t9uW9vb6N3ggQW2f#65m(z_94H~PU@5B13Xx3G8Ux0{luo`!h!nD68I zhUc#dB)z``_z^l6xL)SzRli(6L_xe<@OX{K!U&QA$1ibjdC#VF8@f)ZE~8{N{}Yf} zSAlJ8hn!!+Y+&oXUnPc|naYK|^+*fa+LTuo164Z23g*-li-ZKl)ZxA4{>60?m7egj zb2!I})U(K6t&QHN92Y|otuyHfrAAu#;y!)w!M6yxS3fS+bP#0El}*DLiUYj_d8PrZ z3K+f|5D*|sNGzQd`fIif+>*uY2A1ZAD>5gipMAV5FGL6#gH*qRme$_#7~n?e+oAG( zOht;YTpL~0lX=ULuRXIhGlNNDpI_uw%9Zs*K~R6fHMkSqT*?QpCX8{_<0uOC!k>Fk zMUJ<yn?qq4E`Vv;b(nn!$mc!0ngrkObq}M6g-$o?<-c5dgPQ}kf(Fp>CE#2G6n-BD zrGTmAxEIr&>eTik*IJO^0;&^ye2QGplN?Ay2Rpk8%XjqNzyJN<;aUB!?ozVHrRJ{Y z`)fWGx>&aZ|08p@1~~J^4W{Gs#!FMfFB}a30_(S0QU?wkU{H4~%!(Z1`(wDL1myGA zD7QT#nXFwsEqreBAOSOu>be(nt@MlTxl2T8fLD6+fKPu``vM)(tX-Zx#5#06<J)k> z4QK|&Igsn{d?g+=<Puyd!gb-it7C5)-V6Vx(s76E&ybvz2T@U%0m5jTeBJ%lEw+D* zU8-Yjh!^kNjJK_c;FJR7$Hy;UzWn_D{X3k=MN#18m>20Xp7y*LY@dT89BG+VS|x+e znT=@skaq9hR_`k0duKj^EIhGI9Z$XBoGE9|K7~f=CZtLEQ`=O#yiQB;E?-+>1$Jc< zVgn5IzG679<#t~ikkDyB&@LU1Fo$j5A3+4~!z)|L4!9KCme;b725$Wg;vo4~Oiau! z0&dfFJ@A}9+y|P8plwcbvS!7;_hE{zO?@q})%vxlQLfr*L5IgydoJI9+LR(VacG0N zya$VQsXKs%g8%JAc)?RCUU$O7yWrq6#Km=Os;_*WN~OyD&b4tHo7Lgb=pNS8k0uC( znTN~cK_tZ?7P@V`Nn}V)=9q;Ykwa1%rfOj-k55>(QW#08Mx~vS@;PQcUijD$*@Zqn zq`HSqY2`H|v0*S6fPvh<gTwE3;1#jmCVegtYRO+=ueQ4u^zqxtC`Yf~ha2Q_lA<0w z=;If);jgkoSD}C?h>v<g_ottzr&5ctaN`c%PXAS^rVDj<id6o62V!Dk(OLfBHq?V@ zJm9cPRu$1hgl3`^?&+RjbBL^@R9=fc>biKSP_a)fN8auRnomwlJhvS&GlvZ?{w?@M z5872{=h`mbU~}}MTs^O4ANq+P1THq&awHDze=T5ewkA|01joI4AHtXocd;ouom=e0 z_Uy6UhJX0)l)^@2gHj=~*`QbEgMT8MT#9w1;1{5R@uJhQt*xycaNV$AcFnaZv0NUD zeYI!1b~-A>B&XwfL{vi)Sq!cb-x|ls=50nYMZg~oC-YjUk^6EkNcngKMh@IOhG=gF zv(C1`J(#VaU8)=~5n9%>(aVH_>`vamZ|}BBL?M|<=*QW>8XkcZf9BXZ&;bn1EXpp@ z&FCD4XBfB%H}kuQ3+r6uM}puWXyyk_V1(}k{31c{5TSjmpO-B5)_FAK1?<m8-(!6z zHqn`8J0Vu|aX`bDix)0@U$M-wV5^tU%w|Fc29rPreH=Z(2&t*m8?ibUW`{{U2>miF zXJ4Mx)6-*`nGFsO!WK^GJ>bN7G+TeMOQqJ=TSDzK4(bv?-hlM#e%>zLBonbyfBxCW zk5nh4;v7?LQvnp!AHf0BJN4be#QuwGH3b&jD({0zP=r<Y+l25yLeibeudbVy1l~{K z^1HGz02Nadvugbhe7_5Zt-pAxDXFQwQG@%+J=b+18AT(}C({;>;;Zkd)q2BlUex*w zUI|AZGxtAu@W6AQy02$SUP~5pp)K7Qx_^~j=(8y>&#fzNZf;oq_wkCZSAmp<SC7df z-_f^3dwBBn4s{E|Ui<d$T<$8omeN~5<&j!(+tf4TvmH5BSHOL;U|CCg?nYQ0ko6wF z`j-nGyh*miBn{5sG%$p|rNC|75HjkfUzinwwxIGHJd_}s(YC3B?fxV3kcAtM*V-Oo zk&t$&;Xqy5ICS>|Z{NNhmoH*TzxDuu{g5vy;pRvrB%R8OGZ`jdQA5e-JAPE1(KORC zr&#cfl7fOcq}`_p%2DJjWI95gcY<n>V>x22)2|k^iZ^w=#}TZBI$3L|0>Xm9lrncC zi|89MR@GB#4w$z9T)pwmpD}1TvfkODhnSHA;JC${G)p&B<sd-BT(?eMi+W!3M|kRo z9t&B-(bj*A-Uow%7~51UM|>J=_8yJVZueqaW#3X=6ndUuT{I*f%Be3M(U}Q&DiBvh zIn^{-BVG%7kbNK}8m|5j1=h`=`J2jv2N0yYjdL6FzyD+9|MP$C)UI))mwESjuADc7 R|M-KP)HgZ)O4ljm{{Wirr#}Dy literal 4219 zcmcgw`9GBF`+o*CVTMX->^X{}LMV(eX*fa|)fnPfqK;)`X&n19hmUcnXp;(KtE@v} zlyxdX%D(TRY||LB494=gIj`^Q_5BMzKg=`Fb3fO8&2?Yz`~AMJYho<Sjgdl<LJ$NY zO)eN-fgsp7aNn?JH@K?(aXJWm33^|+Mus3^vF#5GdY+5|gD~<H<MU8Kv-C805O6WL zWB@@$@xtrZcR|qJy(WeRga8<O$j;01W)gf(N{H}!Oy#+{(GkZZgowwr7cVdPUPR#a zyyKEJ;%Ta5@Oh8sWCf*X0&!IScEyx`42(`3aQ><2nioNT*{S?B^pRcarM`+GRT7&) zT-|t>VrLqNS>=`&@XC8i<Mr33K0(l8*D|=IK)We?dmN!-l>fyIHMTr(VWJ_?A*>7w zC6p*Y2@Cad;d*7x^>IaIWo1z-HGL2vP6(y!%3Ed|kCQm5;hQ>oT3TBBDUJKyTd3!( zRRwcrd;8-L9XeF+IaI!64JjKzxKEl?ul;%7svJU>x?&(gEJPKG8AU(rZ((7Xm6dun zd0jNbxtn_&v+rB8<Ft6|z{&2ctSme{?X-Xz!7zCv&U2vjmRDXX9{wi(sKH;rlHxn3 zOf1Vx3LRQsUk`wk4ItdE7m-#{mQ0e91t;n0(_YQ&zsCd}kChQN&Y%Oj8r$0+GLB?J zFvJgTn36-X$c<0e=By#pOAs#RB_ngCRMpotFmSatLB)zDdd>|@EFzMO*-ukaWd423 z@e{RYIGq%11TzHbOir0CnM}@-X^6PJ|GmZeYya^Yqq!bag&~fL;mF}iB;zC>yyoLa z5cOe9m)9$Q-7LlnQcuA(vxtWvPrtdbvlAn&==u5i(tjNmZUiYZ0l`=0%iQ|Y)6-lW zar8Gz`jH?zbpJ&gv)jN=G(_D$wOBprS*9e}hywxCHgdhvMce;AK{Bxr;X?^M5wZW| zs3*PleVIMr-2E^uV0&!xLmu%}R+fg{Uwpbsl=O3fa+U6%Fl`okFvPB$LK$&CWt|~0 z8Op~!j>j%kt;ryEnQ#qLvEjp>Y6lD<9Bhr@SMtmkU&1(Yj0#ct1}pqIkrsSzCyzHr zSbneonGAi>6WTHqYdI$ff0MQ)ptg8<n2YiMf@y0F=R>U>YYP2B*eEa|nOwbkRRK07 z1tvVq9r698^SE<tEF(B0JswOkc~)~4n9RmdH}}17g-?I8l<1B-^QimbpcryPo{}!w z7%-RntmMgen(LG(454$Uc%<#L?9Mt`<@ivyAA^PGzIn}~RcK+cSXs&+f{qQBFXPcO zmg{xbM`~*ge^mQWl=r>A|LDyicaZ+_<x!H!eFYd|H4sa98k`~T0DRo<jvE`Ow(yyz zO{rKF=*dyO0w)HR-EsZuXf#@O=h52oU-*B?Q{-_s{~!Dwz_yi$7^%gy-N(QX5;5`& zW+Q+f<T5Wp9?ge3y+3c{WN7ql8?*9&`LO`#H1NRh#&%VasdT@2^X89i{%iM<Fa*XF zURc`R-}dLk#Ka%XFp0hITQljU0D+PxnmYue?Qxtk=;8#=b{8@?b!X2VT>Krvi8}q@ zy`9@*y2A@E0X5&_GL^9gzS?>jo+H&5;tsK_z;Mn~q*W18nrLN(djPh?+r=62?{3DB zF0u1No;KNB)cD<&&9!TS%=KSpC=_Z>Ja#jnw<_3w>MbKUBVGo5Mv4*#e%?YiK-{(^ zQ=Niio;Y=iDi^jQKlsjPJZ#U|Sb5aJg9kshw_oXHkgQOWl0pM-xrJp3voUdAa_}?- zK9ug`+!2&_WV)#5aHT{wZ?=NRNis30tgH;#O2{20h-b}cdjS9zCR^gGmbz^p!CaFd zs>q@<`<Ugsoc2rNUb!I^MF(rq{<D>Gb%AfQSX{&K&CaX%A;ELDV1b8AY1oFmr9tfx zyOBR<iMlTm>~k<F%3~iseE6fkV`tOW4~OyCTgYwmlH-Lu8rn_6pLEMynqKQ3pcb#= zlOKVv-AnU1EZna^Nyo$kRXCA1!oXPu?)DOkB(bLn$gEs#Mo#e+rjiYWlLB7kiA<$8 z*<lN=8vZJD^_NypNEh8sPJfINjy5(ncHw(14?`qffESM0;uAezD08z?!`#b%CzRy( zJRM_d4T;&24-21Bq+AzUVq~`73;XI{{3h()@v3q+JWz`r;`Kg-sL1?+0@+z#wky3U z`OnJZUvsm2v|g1wA>?&c%gV}bYC)F-9eaBNDjcj|t$Gs6?VL?XCRT;^GV!o=H|Y8P z_pRp<ZEb!c_LezKgLJCaD_)m3nmmRYj0Oy&3p%<w74v9UqbmHe-BsXT8u!@KjNEtP zB$L+X5LIyoUMQOz_SPw>%r-|Wl+{gVc0Ya2$m+0ZudS_}%DI|#O5hue57q7FH$u+6 z9lkzaPiVvZ`cN@!6Rf+-r&#NiHdgkI!3KkIB;Y<ojjm!Yf5=oDX)?{zQsf%q$b2Zt z7d)DCR0Te%>@1Qz#`DM5<5RM`+z;g+{eT6rc`wa$Jz(_|3J>3{)tUd+FWK?qOQNwe zloyeHiZ}VtAgXF@CNH%%wh3u2(O-INz%+S_7R(*;k5bjNfYs<aJ3Bw}nGK%iahP%y z<jLj>X)4D9QUk_fguSX)C!!{4!JbDUQNXm?FRIMSy$&wUd-3)aer#;}M%~|~?0!bx z@*1l!HAW^X3er4Exz4|Icr(D=-Tj7-kI%)uUMF^OHaB=m_!QkAzmUEEfv9IH=j)^r z#|B=0{`|S<K<(e~7k&#GEqWTO!@-;~Z~p!xlyv@y8qw2}QL}=8P2(Xe176GxZpm3` zS%ZnnR-lk}x$yaLefNdyWcvmny1S<p^H*}&y+xU9sU*qC8s^6GfNOb>x`#o|(E3MV z)fb_|W-^=Yb4_PQe&RXCank$xEzYXx>u(xDvu5&QDt)5PdpQ3Xl)nq*EtgI{FH+7& zA`ll<Po6~9l`byGyUcSA0iBTf^<)#jJUhe-=Tt5<Z%L#5e*Uh+EG6b)0#|?i2*0zX zl-X7WtsCt^h?*{ZEmrp(j)x`Yj($dcyk!+)drMzWTU(pFzA{fvX%6%Phdz*i9`nI6 zvWw=XoQSNh@6<S?cMhu21>8-Jv7EcOKIe^y@0cGivhMQ}t4&A|<({6b0@~>6@hSf0 zw@cXJVwaZhcT}sV(hlYWD#loE(C!s(6z!M2TUd4cpK+G=dJfq(P=An>%$;aT8oy^5 zzW(aw==aZ$X1l410&1H3aA%q#w$QsL;K)?{$M(#vO<s?>wIW(@><veh`=&)|%dTbQ zosYsU&fHomI$-Xb63o>U!U-3#^`vks=MkfAbuIOC7)gFs>&(ndRBwT2MY#$q<Xxf; z=j+$6%u}kW@n?8}beA1=*3PBeEv(5wR?RNtXkiZG0$$`UjCxL1vP7-5c+Y!fvfVH> zbpmQ0X~VJl6$RoOiHucm-E48(ibw8qTvF`w|6BZp4T|L#FUj_q?!Wor%>s_NWgraG zhc9EKw_bMjyr{96zjdTEA@!~UdL({h)SOER?wh;>&o8jATH|(l4*!&j(l*oIYE&r< zIYdF`P|}ffn>N<VRqqgV|Fi+U4%}>DHrGb)r-Rt0f4kS$*VoY`V$E0~pZbKY7kiL~ z<U{qpzNQjXb)a^h6g_@-<;o#AL;th;cAC!;dv9Tb)c+EqMn^Y=re6Z4oihYql_mGG zyhxjS3!|tAg_PYs>k9`#`Ej<dDVbZ`qAxWtMX^-D;c(^{92_Wg+7Qt<vo6wRetfHu z9R4mbbXaq8V|6kW@8$bGHz9~sHvT%=_!-drPTRKBy1kofzS*+<TMZ=rN|zRzSz*<3 z|BWp2@EVfn%x(_s=?J3EZl6dVoaU@(&04F0g|^>GaE6l+FAy;*EVFwaw}ZkorE7`R zQ}2`}hs3o0JLP<?Bg-G>ADU!|7#1sfsNXp)me@T}BPJ%6ne!XRw|Su1NRr(SYym~D zAeeY7D=Tb12l9XEqdy2TX+7^(Ia|DGVpIkE4TBJd&)cZS7I)0IW>OE!#>l0zzo!w= zK{}3IjU9Mws5wib9MoQC4>>u?nxmQW{PSE>W(&4FaO{dkmF#Qxo7~x<R5?tLuOeh8 z29Eq*UHuLcK!E`g#Z9?uxjZ>Pj!s!$)0|A9(PTMG6w5ozfsYRqj1~D>#bAi4FZtqC z_F4Ep8h?Rg^SGQXUsu=cOd02I*ZELy9=NHLUmiE0uhfv$e<qcNvGB^0Eh+(z7VnNE z+6TGmLm095_aErlwB4II6j;d&(@*Y6_OI#;TE6Sh5C>6ze(#R;EIA`*Z)3Bz2Kd;U z<Ud!Sv%{B$uglPl<BSYaIyP=uCFClruW{cEGYD5VCaparUUgICxEltiFQ9hggq^6w zNHg{1d6vX>=>(sCaofYlYBNKK?$QtsQIl)WEcUJBdISLTY5}$HM;IB-|5&~em)ROt zv1z#v>S-NG6zb_c`cz!14MDSIC2AeiTh}~rcw&yYj0(4Ze!O0Vdx@WL5BRdo5l@+@ zhKopRi%|vvdXc#$84Ox__;#7uXWJGT8JXzB3hYoi1?vNvuXNMXD64y6Ztiu0!W5_o zLkZo)l5UN~REVm7M?U0Kb;886a+?+l1gMt(vGhJ}E=j`Rd<4`E943BP@KFpob>JdP zA{OYA_C|=`9Ik|xZVig=11h5$MtW##@Cv|gEetg8XYgKq-p^te5DKt}?dc&d&JI;z zvA4fBctAo&Dd_@hU9sl$NmR8M>{v2Hy**{7qKg^#2S9Q(T(*I1Q~+~mnBaVAgBVb( zKd7{6%UKHf_1z?kmToAZ_SozceX27^<XjGTnc5jk6O?ERqVDu1Maa-Icea=HI1#iE zrY$0IUKs3lbd3Nk6VL)(RBaLI2F7CVEu4yw7zqcNXxIES5?Hq<AIkIuBV%0pZ6?uo zeJz0>F7kLRu;v^IjC(pdI+i{nmbk2+*V=Bz{C2XdQ6DeI3GzfN0$_z)v&8Mf>o{c) zAp)Yt_U4Pzmk?c`tvPQ4AZD#z@xV9;{oC{XNuLVZ-amx9z|e#~g(?r<RnV<L=!k;| z=0e|kWA&wNTgV_HpgYPlAayQIES&`xIRAEkkO9suw44JhTT$bG)g*(4d>w1o9kW&q TKbZ*rD}YRl%nb|9J4XB$@A2Bj diff --git a/src/components/EventCard.tsx b/src/components/EventCard.tsx index 632c92e802a..0e46357593a 100644 --- a/src/components/EventCard.tsx +++ b/src/components/EventCard.tsx @@ -3,13 +3,15 @@ import { useRouter } from "next/router" import { useTranslation } from "react-i18next" import { BsCalendar3 } from "react-icons/bs" import { Box, Flex, Heading, Icon } from "@chakra-ui/react" -import { Image } from "@chakra-ui/react" import type { EventCardProps } from "@/lib/types" import { ButtonLink } from "./Buttons" +import { TwImage } from "./Image" import Text from "./OldText" +import EventFallback from "@/public/images/events/event-placeholder.png" + const clearStyles = { content: '""', display: "block", @@ -80,14 +82,16 @@ const EventCard = ({ justifyContent="center" boxShadow="rgb(0 0 0 / 10%) 0px -1px 0px inset;" > - <Image - src={imageUrl || "/images/events/event-placeholder.png"} - alt={title} - w="full" - height={{ base: "224px", xl: "124px" }} - objectFit={"cover"} - fallbackSrc="/images/events/event-placeholder.png" - /> + {imageUrl ? ( + // eslint-disable-next-line @next/next/no-img-element + <img + src={imageUrl} + alt={title} + className="max-h-[224px] w-full object-cover xl:h-[124px]" + /> + ) : ( + <TwImage src={EventFallback} alt="" /> + )} </Flex> <Box padding={4}> <Box textAlign={"center"}> From 901bc0b2c5653001af627ae0968ea81a52c58922 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 21:09:52 -0700 Subject: [PATCH 189/273] chore: extract homepage strings for intl --- src/components/BentoBox/useBentoBox.ts | 40 +++--- src/intl/en/page-index.json | 147 +++++++++++++------ src/pages/index.tsx | 192 ++++++++++++------------- 3 files changed, 216 insertions(+), 163 deletions(-) diff --git a/src/components/BentoBox/useBentoBox.ts b/src/components/BentoBox/useBentoBox.ts index b937de6e249..9ea3c15273e 100644 --- a/src/components/BentoBox/useBentoBox.ts +++ b/src/components/BentoBox/useBentoBox.ts @@ -1,3 +1,5 @@ +import { useTranslation } from "react-i18next" + import { cn } from "@/lib/utils/cn" import type { BentoCardProps } from "./BentoCard" @@ -9,6 +11,8 @@ import RobotBarImage from "@/public/images/robot-help-bar.png" import MergeImage from "@/public/images/upgrades/merge.png" export const useBentoBox = () => { + const { t } = useTranslation("page-index") + const flow = { mobile: { down: "flex-col bg-gradient-to-b", @@ -51,10 +55,9 @@ export const useBentoBox = () => { const items: BentoCardProps[] = [ { - title: "Crypto without volatility", - children: - "Stablecoins are currencies that maintain stable value. Their price matches the U.S. dollar or other steady asset", - action: "Learn more", + title: t("page-index:page-index-bento-stablecoins-title"), + children: t("page-index:page-index-bento-stablecoins-content"), + action: t("page-index:page-index-bento-stablecoins-action"), href: "/stablecoins/", imgSrc: ImpactImage, imgWidth: 400, // TODO: Fix tablet size alignment (aligning top, should be center?) @@ -69,11 +72,11 @@ export const useBentoBox = () => { "xl:col-span-7 xl:col-start-5 xl:row-start-1" ), }, + { - title: "A fairer financial system", - children: - "Billions can't open bank accounts or freely use their money. Ethereum's financial system is always open and unbiased.", - action: "Explore DeFi", + title: t("page-index:page-index-bento-defi-title"), + children: t("page-index:page-index-bento-defi-content"), + action: t("page-index:page-index-bento-defi-action"), href: "/defi/", imgSrc: ManAndDogImage, className: cn( @@ -88,10 +91,9 @@ export const useBentoBox = () => { ), }, { - title: "Innovative apps", - children: - "Ethereum apps work without selling your data. Protect your privacy.", - action: "Browse apps", + title: t("page-index:page-index-bento-dapps-title"), + children: t("page-index:page-index-bento-dapps-content"), + action: t("page-index:page-index-bento-dapps-action"), href: "/dapps/", imgSrc: MergeImage, imgWidth: 320, @@ -107,10 +109,9 @@ export const useBentoBox = () => { ), }, { - title: "The network of networks", - children: - "Ethereum is the hub for blockchain innovation. The best project are built on Ethereum.", - action: "Explore benefits", + title: t("page-index:page-index-bento-networks-title"), + children: t("page-index:page-index-bento-networks-content"), + action: t("page-index:page-index-bento-networks-action"), href: "/layer-2/", imgSrc: ManBabyWomanImage, imgWidth: 324, @@ -126,10 +127,9 @@ export const useBentoBox = () => { ), }, { - title: "The internet of assets", - children: - "Arts, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", - action: "More on NFTs", + title: t("page-index:page-index-bento-assets-title"), + children: t("page-index:page-index-bento-assets-content"), + action: t("page-index:page-index-bento-assets-action"), href: "/nft/", imgSrc: RobotBarImage, imgWidth: 324, diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index f9291c7c38b..85433d6fa5d 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -1,10 +1,24 @@ { - "page-index-hero-image-alt": "An illustration of a futuristic city, representing the Ethereum ecosystem.", - "page-index-meta-description": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.", - "page-index-meta-title": "Home", - "page-index-title": "Welcome to Ethereum", "page-index-description": "Ethereum is the community-run technology powering the cryptocurrency ether (ETH) and thousands of decentralized applications.", "page-index-title-button": "Explore Ethereum", + "page-index-touts-header": "Explore ethereum.org", + "page-index-contribution-banner-title": "Contribute to ethereum.org", + "page-index-contribution-banner-description": "This website is open source with hundreds of community contributors. You can propose edits to any of the content on this site, suggest awesome new features, or help us squash bugs.", + "page-index-contribution-banner-image-alt": "An Ethereum logo made of lego bricks.", + "page-index-contribution-banner-button": "More on contributing", + "page-index-tout-upgrades-title": "Level up your upgrade knowledge", + "page-index-tout-upgrades-description": "The Ethereum roadmap consists of interconnected upgrades designed to make the network more scalable, secure, and sustainable.", + "page-index-tout-upgrades-image-alt": "Illustration of a spaceship representing the increased power after Ethereum upgrades.", + "page-index-tout-enterprise-title": "Ethereum for enterprise", + "page-index-tout-enterprise-description": "See how Ethereum can open up new business models, reduce your costs and future-proof your business.", + "page-index-tout-enterprise-image-alt": "Illustration of a futuristic computer/device.", + "page-index-tout-community-title": "The Ethereum community", + "page-index-tout-community-description": "Ethereum is all about community. It's made up of people from all different backgrounds and interests. See how you can join in.", + "page-index-tout-community-image-alt": "Illustration of a group of builders working together.", + "page-index-nft": "The internet of assets", + "page-index-nft-description": "Ethereum isn't just for digital money. Anything you can own can be represented, traded and put to use as non-fungible tokens (NFTs). You can tokenise your art and get royalties automatically every time it's re-sold. Or use a token for something you own to take out a loan. The possibilities are growing all the time.", + "page-index-nft-button": "More on NFTs", + "page-index-nft-alt": "An Eth logo being displayed via hologram.", "page-index-get-started": "Get started", "page-index-get-started-description": "ethereum.org is your portal into the world of Ethereum. The tech is new and ever-evolving – it helps to have a guide. Here's what we recommend you do if you want to dive in.", "page-index-get-started-image-alt": "Illustration of a person working on a computer.", @@ -37,46 +51,8 @@ "page-index-developers": "A new frontier for development", "page-index-developers-description": "Ethereum and its apps are transparent and open source. You can fork code and re-use functionality others have already built. If you don't want to learn a new language you can just interact with open-sourced code using JavaScript and other existing languages.", "page-index-developers-button": "Developer portal", - "page-index-developers-code-examples": "Code examples", - "page-index-developers-code-example-title-0": "Your own bank", - "page-index-developers-code-example-description-0": "Build a bank powered by logic you've programmed", - "page-index-developers-code-example-title-1": "Your own currency", - "page-index-developers-code-example-description-1": "Create tokens that you can transfer and use across applications", - "page-index-developers-code-example-title-2": "A JavaScript Ethereum wallet", - "page-index-developers-code-example-description-2": "Use existing languages to interact with Ethereum and other applications", - "page-index-developers-code-example-title-3": "An open, permissionless DNS", - "page-index-developers-code-example-description-3": "Reimagine existing services as decentralized, open applications", - "page-index-network-stats-title": "Ethereum today", - "page-index-network-stats-subtitle": "The latest network statistics", - "page-index-network-stats-total-eth-staked": "Value protecting Ethereum", - "page-index-network-stats-eth-price-description": "ETH price (USD)", - "page-index-network-stats-eth-price-explainer": "The latest price for 1 ether. You can buy as little as 0.000000000000000001 – you don't need to buy 1 whole ETH.", - "page-index-network-stats-total-eth-staked-explainer": "The total amount of ETH currently being staked and securing the network.", - "page-index-network-stats-tx-day-description": "Transactions in the last 24h", - "page-index-network-stats-tx-day-explainer": "The number of transactions successfully processed on the network in the last 24 hours.", - "page-index-network-stats-value-defi-description": "Value locked in DeFi (USD)", - "page-index-network-stats-value-defi-explainer": "The amount of money in decentralized finance (DeFi) applications, the Ethereum digital economy.", "page-index-network-stats-nodes-description": "Nodes", - "page-index-network-stats-tx-cost-description": "Average transaction cost", "page-index-network-stats-nodes-explainer": "Ethereum is run by thousands of volunteers around the globe, known as nodes.", - "page-index-touts-header": "Explore ethereum.org", - "page-index-contribution-banner-title": "Contribute to ethereum.org", - "page-index-contribution-banner-description": "This website is open source with hundreds of community contributors. You can propose edits to any of the content on this site, suggest awesome new features, or help us squash bugs.", - "page-index-contribution-banner-image-alt": "An Ethereum logo made of lego bricks.", - "page-index-contribution-banner-button": "More on contributing", - "page-index-tout-upgrades-title": "Level up your upgrade knowledge", - "page-index-tout-upgrades-description": "The Ethereum roadmap consists of interconnected upgrades designed to make the network more scalable, secure, and sustainable.", - "page-index-tout-upgrades-image-alt": "Illustration of a spaceship representing the increased power after Ethereum upgrades.", - "page-index-tout-enterprise-title": "Ethereum for enterprise", - "page-index-tout-enterprise-description": "See how Ethereum can open up new business models, reduce your costs and future-proof your business.", - "page-index-tout-enterprise-image-alt": "Illustration of a futuristic computer/device.", - "page-index-tout-community-title": "The Ethereum community", - "page-index-tout-community-description": "Ethereum is all about community. It's made up of people from all different backgrounds and interests. See how you can join in.", - "page-index-tout-community-image-alt": "Illustration of a group of builders working together.", - "page-index-nft": "The internet of assets", - "page-index-nft-description": "Ethereum isn't just for digital money. Anything you can own can be represented, traded and put to use as non-fungible tokens (NFTs). You can tokenise your art and get royalties automatically every time it's re-sold. Or use a token for something you own to take out a loan. The possibilities are growing all the time.", - "page-index-nft-button": "More on NFTs", - "page-index-nft-alt": "An Eth logo being displayed via hologram.", "community-events-content-heading": "Join the ethereum.org community", "community-events-content-1": "Join almost <strong>40 000 members</strong> on our <a href=\"/discord/\">Discord server</a>.", "community-events-content-2": "Join our monthly community calls for exciting updates on Ethereum.org development and important ecosystem news. Get the chance to ask questions, share ideas, and provide feedback - it's the perfect opportunity to be part of the thriving Ethereum community.", @@ -86,5 +62,90 @@ "community-events-no-upcoming-calls": "No upcoming calls", "community-events-previous-calls": "Previous calls", "community-events-there-are-no-past-calls": "There are no past calls", - "community-events-add-to-calendar": "Add to calendar" + "community-events-add-to-calendar": "Add to calendar", + "page-index-activity-description": "Activity from all Ethereum networks", + "page-index-activity-tag": "Activity", + "page-index-activity-title": "The strongest ecosystem", + "page-index-bento-assets-action": "More on NFTs", + "page-index-bento-assets-content": "Arts, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", + "page-index-bento-assets-title": "The internet of assets", + "page-index-bento-dapps-action": "Browse apps", + "page-index-bento-dapps-content": "Ethereum apps work without selling your data. Protect your privacy.", + "page-index-bento-dapps-title": "Innovative apps", + "page-index-bento-defi-action": "Explore DeFi", + "page-index-bento-defi-content": "Billions can't open bank accounts or freely use their money. Ethereum's financial system is always open and unbiased.", + "page-index-bento-defi-title": "A fairer financial system", + "page-index-bento-networks-action": "Explore benefits", + "page-index-bento-networks-content": "Ethereum is the hub for blockchain innovation. The best project are built on Ethereum.", + "page-index-bento-networks-title": "The network of networks", + "page-index-bento-stablecoins-action": "Learn more", + "page-index-bento-stablecoins-content": "Stablecoins are currencies that maintain stable value. Their price matches the U.S. dollar or other steady asset", + "page-index-bento-stablecoins-title": "Crypto without volatility", + "page-index-builders-action-primary": "Builder's Portal", + "page-index-builders-action-secondary": "Documentation", + "page-index-builders-description": "Ethereum is home to Web3's largest and most vibrant developer ecosystem. Use JavaScript and Python, or learn a smart contract language like Solidity or Vyper to write your own app.", + "page-index-builders-tag": "Builders", + "page-index-builders-title": "Blockchain's biggest builder community", + "page-index-calendar-add": "Add to calendar", + "page-index-calendar-fallback": "No upcoming calls", + "page-index-calendar-title": "Next calls", + "page-index-community-action": "More on ethereum.org", + "page-index-community-description-1": "The ethereum.org website is built and maintained by hundreds of translators, coders, designers, copywriters, and enthusiastic community members each month.", + "page-index-community-description-2": "Come ask questions, connect with people around the world and contribute to the website. You will get relevant practical experience and be guided during the process!", + "page-index-community-description-3": "Ethereum.org community is the perfect place to start and learn.", + "page-index-community-tag": "Ethereum.org Community", + "page-index-community-title": "Built by the community", + "page-index-cta-dapps-description": "See what Ethereum can do", + "page-index-cta-dapps-label": "Try apps", + "page-index-cta-get-eth-description": "The currency of Ethereum", + "page-index-cta-get-eth-label": "Get ETH", + "page-index-cta-networks-description": "Enjoy minimal fees", + "page-index-cta-networks-label": "Choose a network", + "page-index-cta-wallet-description": "Create accounts, manage assets", + "page-index-cta-wallet-label": "Pick a wallet", + "page-index-developers-code-example-description-0": "Build a bank powered by logic you've programmed", + "page-index-developers-code-example-description-1": "Create tokens that you can transfer and use across applications", + "page-index-developers-code-example-description-2": "Use existing languages to interact with Ethereum and other applications", + "page-index-developers-code-example-description-3": "Reimagine existing services as decentralized, open applications", + "page-index-developers-code-example-title-0": "Your own bank", + "page-index-developers-code-example-title-1": "Your own currency", + "page-index-developers-code-example-title-2": "A JavaScript Ethereum wallet", + "page-index-developers-code-example-title-3": "An open, permissionless DNS", + "page-index-developers-code-examples": "Code examples", + "page-index-events-action": "See all events", + "page-index-events-header": "Events", + "page-index-events-subtitle": "We have many community events scheduled around the globe", + "page-index-hero-image-alt": "An illustration of a futuristic city, representing the Ethereum ecosystem.", + "page-index-join-action-contribute-description": "Find out all the different ways you can help ethereum.org grow and be better.", + "page-index-join-action-contribute-label": "How to contribute", + "page-index-join-action-discord-description": "To ask questions, coordinate contribution and join community calls.", + "page-index-join-action-github-description": "Contribute to code, content, articles etc.", + "page-index-join-action-twitter-description": "To keep up with our updates and important news.", + "page-index-join-description": "This website is open source with hundreds of community contributors. You can propose edits to any of the content on this site.", + "page-index-join-header": "Join ethereum.org", + "page-index-learn-description": "Crypto can feel overwhelming. Don't worry, these materials are designed to help you understand Ethereum in just a few minutes.", + "page-index-learn-tag": "Learn", + "page-index-learn-title": "Understanding Ethereum", + "page-index-meta-description": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.", + "page-index-meta-title": "Home", + "page-index-network-stats-subtitle": "The latest network statistics", + "page-index-network-stats-title": "Ethereum today", + "page-index-network-stats-total-eth-staked-explainer": "The total amount of ETH currently being staked and securing the network.", + "page-index-network-stats-total-eth-staked": "Value protecting Ethereum", + "page-index-network-stats-tx-cost-description": "Average transaction cost", + "page-index-network-stats-tx-day-description": "Transactions in the last 24h", + "page-index-network-stats-tx-day-explainer": "The number of transactions successfully processed on the network in the last 24 hours.", + "page-index-network-stats-value-defi-description": "Value locked in DeFi (USD)", + "page-index-network-stats-value-defi-explainer": "The amount of money in decentralized finance (DeFi) applications, the Ethereum digital economy.", + "page-index-popular-topics-ethereum": "What is Ethereum?", + "page-index-popular-topics-label": "Popular topics", + "page-index-popular-topics-other": "Other topics", + "page-index-popular-topics-roadmap": "Ethereum roadmap", + "page-index-popular-topics-start": "How to start? (step by step)", + "page-index-popular-topics-wallets": "What are crypto wallets?", + "page-index-popular-topics-whitepaper": "Ethereum Whitepaper", + "page-index-posts-action": "Read more on these websites", + "page-index-posts-header": "Recent posts", + "page-index-posts-subtitle": "The latest blog posts and updates from the community", + "page-index-title": "Welcome to Ethereum" } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 39bf637c346..f7ce253b263 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -202,29 +202,29 @@ const HomePage = ({ const subHeroCTAs = [ { - label: "Pick a wallet", - description: "Create accounts, manage assets", + label: t("page-index:page-index-cta-wallet-label"), + description: t("page-index:page-index-cta-wallet-description"), href: "/wallets/find-wallet/", Svg: PickWalletIcon, className: "text-primary hover:text-primary/80", // TODO: Confirm hover style }, { - label: "Get ETH", - description: "The currency of Ethereum", + label: t("page-index:page-index-cta-get-eth-label"), + description: t("page-index:page-index-cta-get-eth-description"), href: "/get-eth/", Svg: EthTokenIcon, className: "text-accent-a hover:text-accent-a/80", }, { - label: "Choose a network", - description: "Enjoy minimal fees", + label: t("page-index:page-index-cta-networks-label"), + description: t("page-index:page-index-cta-networks-description"), href: "/layer-2/", // TODO: Update with new networks page when ready Svg: ChooseNetworkIcon, className: "text-accent-b hover:text-accent-b/80", }, { - label: "Try apps", - description: "See what Ethereum can do", + label: t("page-index:page-index-cta-dapps-label"), + description: t("page-index:page-index-cta-dapps-description"), href: "/dapps/", Svg: TryAppsIcon, className: "text-accent-c hover:text-accent-c/80", @@ -233,27 +233,27 @@ const HomePage = ({ const popularTopics = [ { - label: "What is Ethereum?", + label: t("page-index:page-index-popular-topics-ethereum"), Svg: EthTokenIcon, href: "/what-is-ethereum/", }, { - label: "What are crypto wallets?", + label: t("page-index:page-index-popular-topics-wallets"), Svg: PickWalletIcon, href: "/wallets/", }, { - label: "How to start? (step by step)", + label: t("page-index:page-index-popular-topics-start"), Svg: BlockHeap, href: "/guides/", }, { - label: "Ethereum Whitepaper", + label: t("page-index:page-index-popular-topics-whitepaper"), Svg: Whitepaper, href: "/whitepaper/", }, { - label: "Ethereum roadmap", + label: t("page-index:page-index-popular-topics-roadmap"), Svg: RoadmapSign, href: "/roadmap/", }, @@ -282,33 +282,33 @@ const HomePage = ({ const joinActions = [ { Svg: Layer2Icon, - label: "How to contribute", + label: t("page-index:page-index-join-action-contribute-label"), href: "/contributing/", className: "text-accent-c hover:text-accent-c/80", // TODO: Confirm hover style - description: - "Find out all the different ways you can help ethereum.org grow and be better.", + description: t( + "page-index:page-index-join-action-contribute-description" + ), }, { Svg: FaGithub, label: "GitHub", href: GITHUB_REPO_URL, className: "text-accent-a hover:text-accent-a/80", - description: "Contribute to code, content, articles etc.", + description: t("page-index:page-index-join-action-github-description"), }, { Svg: FaDiscord, label: "Discord", href: "/discord/", className: "text-primary hover:text-primary/80", - description: - "To ask questions, coordinate contribution and join community calls.", + description: t("page-index:page-index-join-action-discord-description"), }, { Svg: FaXTwitter, - label: "Twitter", + label: "X", href: "https://x.com/EthDotOrg", className: "text-accent-b hover:text-accent-b/80", - description: "To keep up with our updates and important news.", + description: t("page-index:page-index-join-action-twitter-description"), }, ] @@ -359,32 +359,32 @@ const HomePage = ({ <BentoBox className="hidden lg:block" /> <HomeSection - tag="Activity" - title="The strongest ecosystem" + tag={t("page-index:page-index-activity-tag")} + title={t("page-index:page-index-activity-title")} imgSrc={activityImage} > <div className="mt-16 lg:mt-32"> <p className="mt-8 text-xl font-bold"> - Activity from all Ethereum networks + {t("page-index:page-index-activity-description")} </p> <StatsBoxGrid metricResults={metricResults} /> </div> </HomeSection> <HomeSection - tag="Learn" - title="Understanding Ethereum" + tag={t("page-index:page-index-learn-tag")} + title={t("page-index:page-index-learn-title")} imgSrc={learnImage} isFlipped > <div className="flex flex-col space-y-16 lg:space-y-32"> <p className="text-lg"> - Crypto can feel overwhelming. Don't worry, these materials - are designed to help you understand Ethereum in just a few - minutes. + {t("page-index:page-index-learn-description")} </p> <div className="flex flex-col space-y-8"> - <p className="text-xl font-bold">Popular topics</p> + <p className="text-xl font-bold"> + {t("page-index:page-index-popular-topics-label")} + </p> <div className="grid grid-cols-1 gap-8 sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-2"> {popularTopics.map(({ label, Svg, href }) => ( <SvgButtonLink @@ -401,7 +401,8 @@ const HomePage = ({ </div> <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/learn/" size="lg"> - Other topics <MdChevronRight /> + {t("page-index:page-index-popular-topics-other")}{" "} + <MdChevronRight /> </ButtonLink> </div> </div> @@ -411,18 +412,17 @@ const HomePage = ({ {/* TODO: Add "The Internet Is Changing" section */} <HomeSection - tag="Builders" - title="Blockchain's biggest builder community" + tag={t("page-index:page-index-builders-tag")} + title={t("page-index:page-index-builders-title")} imgSrc={buildersImage} > <p className="text-lg"> - Ethereum is home to Web3’s largest and most vibrant developer - ecosystem. Use JavaScript and Python, or learn a smart contract - language like Solidity or Vyper to write your own app. + {t("page-index:page-index-builders-description")} </p> <div className="flex flex-wrap gap-6 py-8"> <ButtonLink href="/developers/" size="lg" className="w-fit"> - Builder's Portal <MdChevronRight /> + {t("page-index:page-index-builders-action-primary")}{" "} + <MdChevronRight /> </ButtonLink> <ButtonLink href="/developers/docs/" @@ -430,7 +430,7 @@ const HomePage = ({ variant="outline" className="w-fit" > - Documentation + {t("page-index:page-index-builders-action-secondary")} </ButtonLink> </div> <WindowBox @@ -472,29 +472,19 @@ const HomePage = ({ </HomeSection> <HomeSection - tag="Ethereum.org Community" - title="Built by the community" + tag={t("page-index:page-index-community-tag")} + title={t("page-index:page-index-community-title")} imgSrc={communityImage} isFlipped > - <div className="mt-8 flex flex-col gap-8"> - <p className="text-lg"> - The ethereum.org website is built and maintained by hundreds of - translators, coders, designers, copywriters, and enthusiastic - community members each month. - </p> - <p className="text-lg"> - Come ask questions, connect with people around the world and - contribute to the website. You will get relevant practical - experience and be guided during the process! - </p> - <p className="text-lg"> - Ethereum.org community is the perfect place to start and learn. - </p> + <div className="mt-8 flex flex-col gap-8 text-lg"> + <p>{t("page-index:page-index-community-description-1")}</p> + <p>{t("page-index:page-index-community-description-2")}</p> + <p>{t("page-index:page-index-community-description-3")}</p> </div> <div className="flex flex-wrap gap-3 py-8"> <ButtonLink href="/community/" size="lg"> - More on ethereum.org <MdChevronRight /> + {t("page-index:page-index-community-action")} <MdChevronRight /> </ButtonLink> <div className="flex gap-3"> <ButtonLink @@ -516,43 +506,52 @@ const HomePage = ({ </div> </div> - <WindowBox title="Next calls" Svg={Calendar}> - {calendar.map(({ date, title, calendarLink }) => ( - <div - key={title} - className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row" - > - <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> - <p className="text-sm font-bold text-body">{title}</p> - <p className="italic text-body-medium"> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "2-digit", - year: "numeric", - hour: "numeric", - minute: "numeric", - }).format(new Date(date))} - </p> - </div> - <ButtonLink - className="h-fit w-full text-nowrap px-5 sm:w-fit lg:self-center" - size="md" - variant="outline" - href={calendarLink} - hideArrow + <WindowBox + title={t("page-index:page-index-calendar-title")} + Svg={Calendar} + > + {calendar.length > 0 ? ( + calendar.map(({ date, title, calendarLink }) => ( + <div + key={title} + className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row" > - <CalendarAdd /> Add to calendar - </ButtonLink> + <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> + <p className="text-sm font-bold text-body">{title}</p> + <p className="italic text-body-medium"> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "2-digit", + year: "numeric", + hour: "numeric", + minute: "numeric", + }).format(new Date(date))} + </p> + </div> + <ButtonLink + className="h-fit w-full text-nowrap px-5 sm:w-fit lg:self-center" + size="md" + variant="outline" + href={calendarLink} + hideArrow + > + <CalendarAdd /> {t("page-index:page-index-calendar-add")} + </ButtonLink> + </div> + )) + ) : ( + <div className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row"> + {t("page-index:page-index-calendar-fallback")} </div> - ))} + )} </WindowBox> </HomeSection> <div className="w-full"> <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> - Recent posts + {t("page-index:page-index-posts-header")} </h3> - <p>The latest blog posts and updates from the community</p> + <p>{t("page-index:page-index-posts-subtitle")}</p> {/* Mobile */} <PostsSwiper items={rssItems} className="mt-4 md:hidden" /> @@ -564,7 +563,7 @@ const HomePage = ({ </div> <div className="mt-8 flex flex-col gap-4 rounded-2xl border p-8"> - <p className="text-lg">Read more on these websites</p> + <p className="text-lg">{t("page-index:page-index-posts-action")}</p> <div className="flex flex-wrap gap-x-6 gap-y-4"> {COMMUNITY_BLOGS.map(({ name, href }) => ( <Link href={href} key={name}> @@ -577,9 +576,9 @@ const HomePage = ({ <div className="w-full"> <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> - Events + {t("page-index:page-index-events-header")} </h3> - <p>We have many community events scheduled around the globe</p> + <p>{t("page-index:page-index-events-subtitle")}</p> <div className="mt-4 md:mt-16"> <div className="grid grid-cols-1 gap-8 self-stretch sm:grid-cols-2 md:grid-cols-3"> {upcomingEvents.map( @@ -645,29 +644,22 @@ const HomePage = ({ </div> <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/community/events/" size="lg" className="mx-auto"> - See all events <MdChevronRight /> + {t("page-index:page-index-events-action")} <MdChevronRight /> </ButtonLink> </div> </div> <div className={cn( - // Border/gradient positioning - "before:absolute before:-inset-px before:bottom-0 before:z-hide before:rounded-4xl before:content-['']", - // Border/gradient coloring - "before:bg-gradient-to-b before:from-primary-hover/[0.24] before:to-primary-hover/[0.08] before:dark:from-primary-hover/40 before:dark:to-primary-hover/20", - // Paint background color over card portion - "relative inset-0 rounded-4xl bg-background" + "before:absolute before:-inset-px before:bottom-0 before:z-hide before:rounded-4xl before:content-['']", // Border/gradient positioning + "before:bg-gradient-to-b before:from-primary-hover/[0.24] before:to-primary-hover/[0.08] before:dark:from-primary-hover/40 before:dark:to-primary-hover/20", // Border/gradient coloring + "relative inset-0 rounded-4xl bg-background" // Paint background color over card portion )} > <div className="mb-12 flex flex-col gap-y-8 rounded-4xl bg-radial-a px-4 py-8 lg:mb-32 xl:mb-36"> <div className="flex flex-col space-y-4 text-center"> - <h2>Join ethereum.org</h2> - <p> - This website is open source with hundreds of community - contributors. You can propose edits to any of the content on - this site. - </p> + <h2>{t("page-index:page-index-join-header")}</h2> + <p>{t("page-index:page-index-join-description")}</p> </div> <div className="mx-auto grid grid-cols-1 gap-16 md:max-w-screen-md md:grid-cols-2"> {joinActions.map( From 7496c358683f808289cea2176465c10ba2530558 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 28 Aug 2024 21:10:04 -0700 Subject: [PATCH 190/273] chore: clean up unused --- src/components/CommunityEvents/index.tsx | 201 ----------------------- src/components/PostsSwiper/index.tsx | 1 - 2 files changed, 202 deletions(-) delete mode 100644 src/components/CommunityEvents/index.tsx diff --git a/src/components/CommunityEvents/index.tsx b/src/components/CommunityEvents/index.tsx deleted file mode 100644 index b963a8bb03d..00000000000 --- a/src/components/CommunityEvents/index.tsx +++ /dev/null @@ -1,201 +0,0 @@ -import { useRouter } from "next/router" -import { useTranslation } from "next-i18next" -import { FaDiscord } from "react-icons/fa" -import { - Box, - Center, - Divider, - Flex, - Grid, - GridItem, - Icon, -} from "@chakra-ui/react" - -import type { Lang } from "@/lib/types" -import type { CommunityEvent } from "@/lib/interfaces" - -import { ButtonLink } from "@/components/Buttons" -import InlineLink from "@/components/Link" -import OldHeading from "@/components/OldHeading" -import Text from "@/components/OldText" -import Translation from "@/components/Translation" - -import { trackCustomEvent } from "@/lib/utils/matomo" -import { getLocaleTimestamp } from "@/lib/utils/time" - -const matomoEvent = (buttonType: string) => { - trackCustomEvent({ - eventCategory: "CommunityEventsWidget", - eventAction: "clicked", - eventName: buttonType, - }) -} - -type EventProps = { - event: CommunityEvent - type: "upcoming" | "past" -} - -const Event = ({ event, type }: EventProps) => { - const { locale } = useRouter() - const { date, title, calendarLink } = event - const options: Intl.DateTimeFormatOptions = { - year: "numeric", - month: "short", - day: "numeric", - } - - return ( - <Grid gap={6} templateColumns="auto 1fr" mb={4}> - <GridItem> - <Text color="body.medium" m={0}> - {getLocaleTimestamp(locale! as Lang, date, options)} - </Text> - </GridItem> - <GridItem> - <InlineLink href={calendarLink} onClick={() => matomoEvent(type)}> - {title} - </InlineLink> - </GridItem> - </Grid> - ) -} - -type CommunityEventsProps = { - events: { - pastEventData: CommunityEvent[] - upcomingEventData: CommunityEvent[] - } -} - -const CommunityEvents = ({ events }: CommunityEventsProps) => { - const { locale } = useRouter() - const { t } = useTranslation("page-index") - const { pastEventData, upcomingEventData } = events - - const reversedUpcomingEventData = upcomingEventData.slice().reverse() - const reversedPastEventData = pastEventData.slice().reverse() - - return ( - <Flex - w="full" - flexDirection={{ base: "column", lg: "row" }} - p={{ - base: "0", - sm: "2rem 0 0", - lg: "2rem 2rem 0", - }} - id="community-events" - > - <Center w={{ base: "100%", lg: "40%" }}> - <Box pe={8} ps={{ base: 8, lg: 0 }}> - <OldHeading> - {t("page-index:community-events-content-heading")} - </OldHeading> - <Text> - <Translation id="page-index:community-events-content-1" /> - </Text> - <Text>{t("page-index:community-events-content-2")}</Text> - </Box> - </Center> - <Flex - w={{ base: "100%", lg: "60%" }} - flexDirection={{ base: "column", lg: "row" }} - > - <Flex - w={{ base: "100%", lg: "50%" }} - bg="layer2Gradient" - px={8} - py={16} - textAlign="center" - flexDir="column" - > - <Flex direction="column" h="full" gap={8}> - {reversedUpcomingEventData.length ? ( - <Box flex={1}> - <Text fontSize="3xl" fontWeight="bold" lineHeight={1.4}> - {reversedUpcomingEventData[0].title} - </Text> - <Text m={0} fontSize="xl"> - {getLocaleTimestamp( - locale! as Lang, - reversedUpcomingEventData[0].date, - { - year: "numeric", - month: "long", - day: "numeric", - hour12: false, - hour: "numeric", - minute: "numeric", - } - )} - </Text> - <Text color="body.medium" fontSize="md"> - ({Intl.DateTimeFormat().resolvedOptions().timeZone}) - </Text> - </Box> - ) : ( - <Text fontSize="3xl" fontWeight="bold" mb={8}> - {t("page-index:community-events-no-events-planned")} - </Text> - )} - <Flex flexDirection="column" gap={2}> - <ButtonLink - href="/discord/" - gap={2} - onClick={() => matomoEvent("discord")} - > - <Icon as={FaDiscord} fontSize={25} /> - Join Discord - </ButtonLink> - {reversedUpcomingEventData[0] && ( - <InlineLink - href={reversedUpcomingEventData[0].calendarLink} - onClick={() => matomoEvent("Add to calendar")} - fontWeight={700} - > - {t("community-events-add-to-calendar")} - </InlineLink> - )} - </Flex> - </Flex> - </Flex> - <Flex - w={{ base: "100%", lg: "50%" }} - bg="background.highlight" - p={8} - flexDir="column" - > - <Text fontSize="lg" fontWeight="bold" mb={2}> - {t("page-index:community-events-upcoming-calls")} - </Text> - <Divider mb={4} /> - {reversedUpcomingEventData.slice(1).length ? ( - reversedUpcomingEventData.slice(1).map((item, idx) => { - return <Event key={idx} event={item} type="upcoming" /> - }) - ) : ( - <Text mx="auto"> - {t("page-index:community-events-no-upcoming-calls")} - </Text> - )} - <Text fontSize="lg" fontWeight="bold" mb={2} mt={4}> - {t("page-index:community-events-previous-calls")} - </Text> - <Divider mb={4} /> - {reversedPastEventData.length ? ( - reversedPastEventData.map((item, idx) => { - return <Event key={idx} event={item} type="past" /> - }) - ) : ( - <Text mx="auto"> - {t("page-index:community-events-there-are-no-past-calls")} - </Text> - )} - </Flex> - </Flex> - </Flex> - ) -} - -export default CommunityEvents diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx index fc99834a5d0..0a60cbed3cc 100644 --- a/src/components/PostsSwiper/index.tsx +++ b/src/components/PostsSwiper/index.tsx @@ -18,7 +18,6 @@ type PostsSwiperProps = ClassNameProp & { const PostsSwiper = ({ className, items }: PostsSwiperProps) => ( <div className={cn("h-fit gap-8", className)}> <Swiper - // cssMode navigation={{ nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev", From e8e9697722997b2467984f0cd5d13b2e863c36bd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:40:54 -0700 Subject: [PATCH 191/273] theme: update base color tokens Co-Authored-By: Nuno Loureiro <1120748+nloureiro@users.noreply.github.com> --- src/styles/colors.css | 47 ++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/styles/colors.css b/src/styles/colors.css index aa95e08c8e5..3c4c30c927d 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -6,16 +6,17 @@ :root { --white: 0, 0%, 100%; /* #ffffff */ --gray-50: 0, 0%, 97%; /* #f7f7f7 */ - --gray-100: 0, 0%, 95%; /* #f2f2f2 */ + --gray-100: 0, 0%, 93%; /* #eeeeee */ --gray-150: 0, 0%, 93%; /* #ececec */ /* TODO: Confirm this shade, used in nav menu */ - --gray-200: 0, 0%, 91%; /* #e0e0e0 */ - --gray-300: 0, 0%, 78%; /* #bcbcbc */ - --gray-400: 0, 0%, 55%; /* #7a7a7a */ + --gray-200: 0, 0%, 81%; /*#cecece */ + --gray-300: 0, 0%, 67%; /* #acacac */ + --gray-400: 0, 0%, 55%; /* #8C8C8C */ --gray-500: 0, 0%, 38%; /* #616161 */ --gray-600: 0, 0%, 20%; /* #333333 */ --gray-700: 0, 0%, 13%; /* #222222 */ - --gray-800: 0, 0%, 11%; /* #1c1c1c */ - --gray-900: 0, 0%, 8%; /* #141414 */ + --gray-800: 0, 0%, 11%; /* #1b1b1b */ + --gray-900: 0, 0%, 7%; /* #121212 */ + --gray-950: 0, 0%, 4%; /* #0a0a0a */ --black: 0, 0%, 0%; /* #000000 */ --purple-50: 262, 100%, 96%; /* #F3ECFF */ @@ -32,13 +33,13 @@ --pink-50: 325, 63%, 93%; /* #F8E0EE */ --pink-100: 322, 78%, 87%; /* #F8C5E5 */ --pink-200: 323, 100%, 85%; /* #FFB2E2 */ - --pink-300: 323, 77%, 78%; /* #F29AD0 */ - --pink-400: 323, 77%, 69%; /* #ED75BF */ - --pink-500: 323, 73%, 59%; /* #E34AA8 */ - --pink-600: 323, 62%, 47%; /* #C32E8A */ - --pink-700: 323, 66%, 39%; /* #A42172 */ - --pink-800: 323, 74%, 25%; /* #70114B */ - --pink-900: 323, 66%, 16%; /* #440E2F */ + --pink-300: 323, 100%, 83%; /* #FFA6DD */ + --pink-400: 323, 91%, 75%; /* #F986CD */ + --pink-500: 323, 100%, 66%; /* #FF51BC */ + --pink-600: 323, 93%, 51%; /* #F6109E */ + --pink-700: 323, 99%, 39%; /* #C7017B */ + --pink-800: 323, 87%, 29%; /* #8C0A5A */ + --pink-900: 323, 82%, 18%; /* #530836 */ --blue-50: 214, 100%, 99%; /* #F8FBFF */ --blue-100: 217, 100%, 95%; /* #E8F1FF */ @@ -51,16 +52,16 @@ --blue-800: 231, 53%, 29%; /* #232F71 */ --blue-900: 217, 36%, 17%; /* #1B273A */ - --teal-50: 173, 100%, 96%; /* #EDFFFD */ - --teal-100: 174, 100%, 93%; /* #D9FFFB */ - --teal-200: 176, 87%, 85%; /* #B8FAF6 */ - --teal-300: 174, 73%, 71%; /* #80EBE1 */ - --teal-400: 174, 56%, 56%; /* #50CEC1 */ - --teal-500: 175, 73%, 38%; /* #1AA99E */ - --teal-600: 177, 57%, 37%; /* #29948F */ - --teal-700: 179, 55%, 26%; /* #1E6766 */ - --teal-800: 180, 42%, 19%; /* #1C4545 */ - --teal-900: 173, 23%, 16%; /* #1F312F */ + --teal-50: 164, 100%, 98%; /* #F4FFFC */ + --teal-100: 164, 79%, 95%; /* #E6FCF6 */ + --teal-200: 163, 81%, 85%; /* #BBF8E7 */ + --teal-300: 163, 96%, 78%; /* #91FDDE */ + --teal-400: 163, 90%, 65%; /* #58F6C9 */ + --teal-500: 163, 76%, 48%; /* #1DD8A3 */ + --teal-600: 163, 88%, 39%; /* #0CB988 */ + --teal-700: 163, 82%, 33%; /* #0F9971 */ + --teal-800: 163, 93%, 21%; /* #04674B */ + --teal-900: 162, 97%, 13% /* #01422F */ --orange-100: 30, 100%, 94%; /* #FFF0DB */ --orange-200: 30, 100%, 82%; /* #FFD7A7 */ From 363a0bd7fc5b215ce62bd36f2d8937132cb75198 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:41:45 -0700 Subject: [PATCH 192/273] fix: accent color hover styling --- src/pages/index.tsx | 8 ++++---- src/styles/semantic-tokens.css | 8 +++++++- tailwind.config.ts | 3 +++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index f7ce253b263..2f2752b9e93 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -206,28 +206,28 @@ const HomePage = ({ description: t("page-index:page-index-cta-wallet-description"), href: "/wallets/find-wallet/", Svg: PickWalletIcon, - className: "text-primary hover:text-primary/80", // TODO: Confirm hover style + className: "text-primary hover:text-primary-hover", // TODO: Confirm hover style }, { label: t("page-index:page-index-cta-get-eth-label"), description: t("page-index:page-index-cta-get-eth-description"), href: "/get-eth/", Svg: EthTokenIcon, - className: "text-accent-a hover:text-accent-a/80", + className: "text-accent-a hover:text-accent-a-hover", }, { label: t("page-index:page-index-cta-networks-label"), description: t("page-index:page-index-cta-networks-description"), href: "/layer-2/", // TODO: Update with new networks page when ready Svg: ChooseNetworkIcon, - className: "text-accent-b hover:text-accent-b/80", + className: "text-accent-b hover:text-accent-b-hover", }, { label: t("page-index:page-index-cta-dapps-label"), description: t("page-index:page-index-cta-dapps-description"), href: "/dapps/", Svg: TryAppsIcon, - className: "text-accent-c hover:text-accent-c/80", + className: "text-accent-c hover:text-accent-c-hover", }, ] diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 504386b348b..b9bd9c5e2c6 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -23,7 +23,10 @@ --accent-a: var(--blue-600); --accent-b: var(--pink-600); - --accent-c: var(--teal-600); + --accent-c: var(--teal-700); + --accent-a-hover: var(--blue-500); + --accent-b-hover: var(--pink-500); + --accent-c-hover: var(--teal-600); /* Gradients */ --gradient-primary-angle: 90deg; @@ -97,6 +100,9 @@ --accent-a: var(--blue-400); --accent-b: var(--pink-400); --accent-c: var(--teal-400); + --accent-a-hover: var(--blue-300); + --accent-b-hover: var(--pink-300); + --accent-c-hover: var(--teal-300); /* Gradients */ --gradient-primary-angle: 180deg; diff --git a/tailwind.config.ts b/tailwind.config.ts index 658f6dbbbe9..cb4097a79f3 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -129,12 +129,15 @@ const config = { accent: { a: { DEFAULT: "hsla(var(--accent-a))", + hover: "hsla(var(--accent-a-hover))", }, b: { DEFAULT: "hsla(var(--accent-b))", + hover: "hsla(var(--accent-b-hover))", }, c: { DEFAULT: "hsla(var(--accent-c))", + hover: "hsla(var(--accent-c-hover))", }, }, body: { From 8c2b3bb940518969d5623082caf31bfca1b3c749 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:51:09 -0700 Subject: [PATCH 193/273] theme: update shadow tokens --- src/styles/semantic-tokens.css | 62 +++++++++++++++++++++++----------- tailwind.config.ts | 6 ++-- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index b9bd9c5e2c6..befe3a7f1d2 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -64,20 +64,36 @@ ); /* Shadows */ - --shadow-color-a: hsla(266, 20%, 21%, 0.02); - --shadow-color-b: hsla(0, 48%, 6%, 0.04); - --shadow-1: -2px 2px 12px 1px var(--shadow-color-a); - --shadow-2: -16px 16px 12px -3px var(--shadow-color-a); - --shadow-3: -32px 32px 24px -6px var(--shadow-color-a); - --shadow-4: -40px 40px 40px -12px var(--shadow-color-b); - --shadow-1-hover: 0px 0px 12px 2px var(--shadow-color-a); - --shadow-2-hover: 0px 0px 12px 2px var(--shadow-color-a); - --shadow-3-hover: 0px 0px 24px 2px var(--shadow-color-a); - --shadow-4-hover: 0px 0px 40px 2px var(--shadow-color-b); + --shadow-color-a: hsla(var(--purple-800), 0.02); + --shadow-color-b: hsla(var(--red-800), 0.04); + --shadow-color-c: hsla(var(--purple-700), 0.04); + --shadow-color-d: hsla(var(--purple-100), 0.08); + + --shadow-svg-button-link-1: -2px 2px 12px 1px var(--shadow-color-a); + --shadow-svg-button-link-2: -16px 16px 12px -3px var(--shadow-color-a); + --shadow-svg-button-link-3: -32px 32px 24px -6px var(--shadow-color-a); + --shadow-svg-button-link-4: -40px 40px 40px -12px var(--shadow-color-b); + --shadow-svg-button-link-1-hover: 0px 0px 12px 2px var(--shadow-color-a); + --shadow-svg-button-link-2-hover: 0px 0px 12px 2px var(--shadow-color-a); + --shadow-svg-button-link-3-hover: 0px 0px 24px 2px var(--shadow-color-a); + --shadow-svg-button-link-4-hover: 0px 0px 40px 2px var(--shadow-color-b); + --shadow-body-color-a: hsla(var(--gray-900), 0.25); --shadow-body-color-b: hsla(var(--gray-900), 0.05); --shadow-body-md: 0px 4px 4px 0px var(--shadow-body-color-a); --shadow-body-lg: 0px -6px 10px 0px var(--shadow-body-color-b); + + --shadow-window-box-1-opacity: 0.02; + --shadow-window-box-2-opacity: 0.02; + --shadow-window-box-3-opacity: 0.02; + --shadow-window-box-4-opacity: 0.04; + --shadow-window-box-5-opacity: 0.08; + --shadow-window-box-1: 0px 2px 12px 1px + hsla(var(--purple-800), var(--shadow-window-box-1-opacity)); + --shadow-window-box-2: 0px 16px 12px -3px hsla(var(--purple-800), var(--shadow-window-box-2-opacity)); + --shadow-window-box-3: 0px 32px 24px -6px hsla(var(--purple-800), var(--shadow-window-box-3-opacity)); + --shadow-window-box-4: 0px 40px 40px -12px hsla(var(--purple-700), var(--shadow-window-box-4-opacity)); + --shadow-window-box-5: 0px -64px 120px 80px hsla(var(--purple-100), var(--shadow-window-box-5-opacity)); } /* Dark mode token declarations */ @@ -104,24 +120,30 @@ --accent-b-hover: var(--pink-300); --accent-c-hover: var(--teal-300); - /* Gradients */ + /* Gradients (dark mode adjustments) */ --gradient-primary-angle: 180deg; --gradient-primary-opacity-to: 0.2; --radial-a-opacity-1: 0.16; --radial-a-opacity-2: 0.48; - /* Shadows */ + /* Shadows (dark mode adjustments) */ --shadow-color: hsla(var(--white), 0.04); - --shadow-1: -2px 2px 12px 1px var(--shadow-color); - --shadow-2: -6px 6px 12px -3px var(--shadow-color); - --shadow-3: -12px 12px 24px -6px var(--shadow-color); - --shadow-4: -20px 20px 40px -12px var(--shadow-color); - --shadow-1-hover: 0px 0px 12px 2px var(--shadow-color); - --shadow-2-hover: 0px 0px 12px 2px var(--shadow-color); - --shadow-3-hover: 0px 0px 24px 2px var(--shadow-color); - --shadow-4-hover: 0px 0px 40px 2px var(--shadow-color); + --shadow-svg-button-link-1: -2px 2px 12px 1px var(--shadow-color); + --shadow-svg-button-link-2: -6px 6px 12px -3px var(--shadow-color); + --shadow-svg-button-link-3: -12px 12px 24px -6px var(--shadow-color); + --shadow-svg-button-link-4: -20px 20px 40px -12px var(--shadow-color); + --shadow-svg-button-link-1-hover: 0px 0px 12px 2px var(--shadow-color); + --shadow-svg-button-link-2-hover: 0px 0px 12px 2px var(--shadow-color); + --shadow-svg-button-link-3-hover: 0px 0px 24px 2px var(--shadow-color); + --shadow-svg-button-link-4-hover: 0px 0px 40px 2px var(--shadow-color); --shadow-body-color-a: hsla(var(--gray-600), 0.25); --shadow-body-color-b: hsla(var(--gray-600), 0.05); + + --shadow-window-box-1-opacity: 0.1; + --shadow-window-box-2-opacity: 0.08; + --shadow-window-box-3-opacity: 0.16; + --shadow-window-box-4-opacity: 0.06; + --shadow-window-box-5-opacity: 0.06; } } diff --git a/tailwind.config.ts b/tailwind.config.ts index cb4097a79f3..00f2e31d25d 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -206,10 +206,12 @@ const config = { "button-hover": "4px 4px 0 0 hsla(var(--primary-low-contrast))", tooltip: "0 0 16px var(--tooltip-shadow)", "svg-button-link": - "var(--shadow-1), var(--shadow-2), var(--shadow-3), var(--shadow-4)", + "var(--shadow-svg-button-link-1), var(--shadow-svg-button-link-2), var(--shadow-svg-button-link-3), var(--shadow-svg-button-link-4)", "svg-button-link-hover": - "var(--shadow-1-hover), var(--shadow-2-hover), var(--shadow-3-hover), var(--shadow-4-hover)", + "var(--shadow-svg-button-link-1-hover), var(--shadow-svg-button-link-2-hover), var(--shadow-svg-button-link-3-hover), var(--shadow-svg-button-link-4-hover)", "card-hover": "var(--shadow-body-md), var(--shadow-body-lg)", + "window-box": + "var(--shadow-window-box-1), var(--shadow-window-box-2), var(--shadow-window-box-3), var(--shadow-window-box-4), var(--shadow-window-box-5)", }, spacing: { 7.5: "1.875rem", From b32675664fdeee10046d9c55b281f49402dd87f5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:52:40 -0700 Subject: [PATCH 194/273] chore: font size and margin adjustments --- src/components/HomeSection/index.tsx | 2 +- src/components/Homepage/PostPreviewCard.tsx | 4 +--- src/pages/index.tsx | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 9514716454a..63243f3bbd4 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -39,7 +39,7 @@ const HomeSection = ({ <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0.5 text-sm uppercase text-primary"> {tag} </div> - <h2 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> + <h2 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-6xl"> {title} </h2> {children} diff --git a/src/components/Homepage/PostPreviewCard.tsx b/src/components/Homepage/PostPreviewCard.tsx index d2420504403..e88d2d3d3b7 100644 --- a/src/components/Homepage/PostPreviewCard.tsx +++ b/src/components/Homepage/PostPreviewCard.tsx @@ -25,9 +25,7 @@ const PostPreviewCard = ({ pubDate, title, source, link, imgSrc }: RSSItem) => { }).format(new Date(pubDate))} </p> )} - <div className="primary-low-contrast w-fit rounded-full bg-accent-a/20 px-4 py-0 text-sm uppercase text-accent-a"> - {source} - </div> + <div className="w-fit text-sm uppercase text-accent-a">{source}</div> </CardContent> </Card> ) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2f2752b9e93..619943ca007 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -363,7 +363,7 @@ const HomePage = ({ title={t("page-index:page-index-activity-title")} imgSrc={activityImage} > - <div className="mt-16 lg:mt-32"> + <div className="my-16 lg:my-32"> <p className="mt-8 text-xl font-bold"> {t("page-index:page-index-activity-description")} </p> @@ -548,7 +548,7 @@ const HomePage = ({ </HomeSection> <div className="w-full"> - <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> + <h3 className="mb-4 mt-2 text-4xl font-black lg:text-5xl"> {t("page-index:page-index-posts-header")} </h3> <p>{t("page-index:page-index-posts-subtitle")}</p> @@ -575,7 +575,7 @@ const HomePage = ({ </div> <div className="w-full"> - <h3 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-7xl"> + <h3 className="mb-4 mt-2 text-4xl font-black lg:text-5xl"> {t("page-index:page-index-events-header")} </h3> <p>{t("page-index:page-index-events-subtitle")}</p> From f473ec581facf5b44a2e49cb128177300781d0f5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:53:19 -0700 Subject: [PATCH 195/273] fix: WindowBox shadow and spacing --- src/components/WindowBox/index.tsx | 12 ++++++++++-- src/pages/index.tsx | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/components/WindowBox/index.tsx b/src/components/WindowBox/index.tsx index c7a82d49eef..a53c87d1b7f 100644 --- a/src/components/WindowBox/index.tsx +++ b/src/components/WindowBox/index.tsx @@ -1,13 +1,21 @@ import type { FC, ReactNode, SVGProps } from "react" +import { cn } from "@/lib/utils/cn" + type WindowBoxProps = { title: ReactNode Svg: FC<SVGProps<SVGElement>> children?: ReactNode + className?: string } -const WindowBox = ({ title, children, Svg }: WindowBoxProps) => ( - <div className="flex max-w-screen-md flex-col overflow-hidden rounded-2xl border shadow"> +const WindowBox = ({ title, Svg, children, className }: WindowBoxProps) => ( + <div + className={cn( + "flex max-w-screen-md flex-col overflow-hidden rounded-2xl border shadow-window-box", + className + )} + > <div className="flex items-center gap-4 bg-primary-highlight-gradient p-4"> <div className="grid size-10 place-items-center rounded-lg border"> <Svg /> diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 619943ca007..153fdb9591e 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -436,6 +436,7 @@ const HomePage = ({ <WindowBox title={t("page-index:page-index-developers-code-examples")} Svg={AngleBrackets} + className="my-8 md:mb-16 md:mt-8 lg:mb-32 lg:mt-16" > {codeExamples.map(({ title, description }, idx) => ( <button @@ -509,6 +510,7 @@ const HomePage = ({ <WindowBox title={t("page-index:page-index-calendar-title")} Svg={Calendar} + className="my-8 md:mt-8 lg:mt-16" > {calendar.length > 0 ? ( calendar.map(({ date, title, calendarLink }) => ( From 971cb7868e4180baea646250d908874ebdce63bb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:53:29 -0700 Subject: [PATCH 196/273] chore: apply outline variant (secondary action) --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 153fdb9591e..7b4974088c5 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -400,7 +400,7 @@ const HomePage = ({ ))} </div> <div className="flex justify-center py-8 md:justify-start"> - <ButtonLink href="/learn/" size="lg"> + <ButtonLink href="/learn/" size="lg" variant="outline"> {t("page-index:page-index-popular-topics-other")}{" "} <MdChevronRight /> </ButtonLink> From 2a804542ca172d8e5aa9f79cbe5185f7d5106db7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:01:00 -0700 Subject: [PATCH 197/273] fix: accent/primary hover styling --- src/pages/index.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7b4974088c5..d640d451418 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -284,7 +284,7 @@ const HomePage = ({ Svg: Layer2Icon, label: t("page-index:page-index-join-action-contribute-label"), href: "/contributing/", - className: "text-accent-c hover:text-accent-c/80", // TODO: Confirm hover style + className: "text-accent-c hover:text-accent-c-hover", description: t( "page-index:page-index-join-action-contribute-description" ), @@ -293,21 +293,21 @@ const HomePage = ({ Svg: FaGithub, label: "GitHub", href: GITHUB_REPO_URL, - className: "text-accent-a hover:text-accent-a/80", + className: "text-accent-a hover:text-accent-a-hover", description: t("page-index:page-index-join-action-github-description"), }, { Svg: FaDiscord, label: "Discord", href: "/discord/", - className: "text-primary hover:text-primary/80", + className: "text-primary hover:text-primary-hover", description: t("page-index:page-index-join-action-discord-description"), }, { Svg: FaXTwitter, label: "X", href: "https://x.com/EthDotOrg", - className: "text-accent-b hover:text-accent-b/80", + className: "text-accent-b hover:text-accent-b-hover", description: t("page-index:page-index-join-action-twitter-description"), }, ] From ca27208b17ced8c25af3897858876f67c14eaadd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:03:33 -0700 Subject: [PATCH 198/273] feat: update RSS logic aggregate only the latest post for each feed; use order of recent posts to dictate order of "Read more" links (those that do not post will drift to end of list over time). Use title from feed where possible. --- src/lib/api/fetchPosts.ts | 1 + src/lib/api/fetchRSS.ts | 11 +++++------ src/lib/constants.ts | 9 ++++++--- src/lib/types.ts | 3 ++- src/lib/utils/rss.ts | 17 ++++++++--------- src/pages/index.tsx | 25 +++++++++++++++++-------- 6 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/lib/api/fetchPosts.ts b/src/lib/api/fetchPosts.ts index 6729f3eb0f4..31b1bea95a6 100644 --- a/src/lib/api/fetchPosts.ts +++ b/src/lib/api/fetchPosts.ts @@ -25,6 +25,7 @@ export const fetchAttestantPosts = async () => { link, content, source: "Attestant", + sourceUrl: BASE_URL, sourceFeedUrl: BASE_URL, imgSrc: "/images/attestant-logo.svg", pubDate, diff --git a/src/lib/api/fetchRSS.ts b/src/lib/api/fetchRSS.ts index 548bc885546..2136a2f1c8e 100644 --- a/src/lib/api/fetchRSS.ts +++ b/src/lib/api/fetchRSS.ts @@ -1,6 +1,5 @@ import { parseString } from "xml2js" -import { RSS_DISPLAY_COUNT } from "../constants" import type { RSSChannel, RSSItem, RSSResult } from "../types" import { isValidDate } from "../utils/date" @@ -11,12 +10,13 @@ import { isValidDate } from "../utils/date" */ export const fetchRSS = async (xmlUrl: string | string[]) => { const urls = Array.isArray(xmlUrl) ? xmlUrl : [xmlUrl] - const allItems: RSSItem[] = [] + const allItems: RSSItem[][] = [] for (const url of urls) { const rssItems = (await fetchXml(url)) as RSSResult if (!rssItems.rss) continue const [mainChannel] = rssItems.rss.channel as RSSChannel[] const [source] = mainChannel.title + const [sourceUrl] = mainChannel.link const channelImage = mainChannel.image ? mainChannel.image[0].url[0] : "" const parsedRssItems = mainChannel.item @@ -32,8 +32,6 @@ export const fetchRSS = async (xmlUrl: string | string[]) => { const dateB = new Date(b.pubDate[0]) return dateB.getTime() - dateA.getTime() }) - // Slice to first RSS_DISPLAY_COUNT items - .slice(0, RSS_DISPLAY_COUNT) // Map to RSSItem object .map((item) => { const getImgSrc = () => { @@ -47,13 +45,14 @@ export const fetchRSS = async (xmlUrl: string | string[]) => { link: item.link[0], imgSrc: getImgSrc(), source, + sourceUrl, sourceFeedUrl: url, } as RSSItem }) - allItems.push(...parsedRssItems) + allItems.push(parsedRssItems) } - return allItems as RSSItem[] + return allItems as RSSItem[][] } /** diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 5ffca9dafec..b0e784f7493 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -4,7 +4,7 @@ import { NavSectionKey } from "@/components/Nav/types" import i18nConfig from "../../i18n.config.json" -import type { CommunityFeed } from "./types" +import type { CommunityBlog } from "./types" export const OLD_CONTENT_DIR = "src/content" export const CONTENT_DIR = "public/content" @@ -166,7 +166,7 @@ export const VITALIK_FEED = "https://vitalik.eth.limo/feed.xml" export const SOLIDITY_FEED = "https://soliditylang.org/feed.xml" export const _0X_PARC_FEED = "https://rss.app/feeds/cWXGYts0ZM8C3F6t.xml" -export const COMMUNITY_BLOGS: CommunityFeed[] = [ +export const COMMUNITY_BLOGS: CommunityBlog[] = [ { name: "Vitalik Buterin", href: "https://vitalik.eth.limo/", @@ -195,6 +195,7 @@ export const COMMUNITY_BLOGS: CommunityFeed[] = [ { name: "Attestant", href: "https://www.attestant.io/posts/", + feed: "https://www.attestant.io/posts/", }, { name: "Devcon", href: "https://devcon.org/en/blogs/" }, { @@ -209,6 +210,8 @@ export const COMMUNITY_BLOGS: CommunityFeed[] = [ }, ] -export const FEEDS = COMMUNITY_BLOGS.map(({ feed }) => feed).filter( +export const BLOG_FEEDS = COMMUNITY_BLOGS.map(({ feed }) => feed).filter( Boolean ) as string[] + +export const BLOGS_WITHOUT_FEED = COMMUNITY_BLOGS.filter((item) => !item.feed) diff --git a/src/lib/types.ts b/src/lib/types.ts index 42395e37313..4a017a5ec70 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -761,6 +761,7 @@ export type RSSItem = { source: string link: string sourceFeedUrl: string + sourceUrl: string imgSrc?: string } @@ -801,7 +802,7 @@ export type RSSResult = { } } -export type CommunityFeed = { +export type CommunityBlog = { name: string href: string feed?: string diff --git a/src/lib/utils/rss.ts b/src/lib/utils/rss.ts index 8edc3c8c2cd..11de14e0f2c 100644 --- a/src/lib/utils/rss.ts +++ b/src/lib/utils/rss.ts @@ -1,9 +1,4 @@ -import { - _0X_PARC_FEED, - RSS_DISPLAY_COUNT, - SOLIDITY_FEED, - VITALIK_FEED, -} from "../constants" +import { _0X_PARC_FEED, SOLIDITY_FEED, VITALIK_FEED } from "../constants" import type { RSSItem } from "../types" export const sortByPubDate = (items: RSSItem[]) => @@ -42,7 +37,11 @@ export const postProcess = (rssItems: RSSItem[]) => }) export const polishRSSList = (...items: RSSItem[][]) => { - const allItems = items.flat() - const readyForSorting = postProcess(allItems) - return sortByPubDate(readyForSorting).slice(0, RSS_DISPLAY_COUNT) + const latestOfEach = items + .filter(({ length }) => length) + .map((item) => item[0]) // Take only latest post (first in array) from each + + const latestItems = latestOfEach.flat() + const readyForSorting = postProcess(latestItems) + return sortByPubDate(readyForSorting) } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d640d451418..3d68e034085 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -10,6 +10,7 @@ import { Flex, Skeleton } from "@chakra-ui/react" import type { AllMetricData, BasePageProps, + CommunityBlog, EventCardProps, Lang, RSSItem, @@ -68,9 +69,10 @@ import events from "@/data/community-events.json" import { BASE_TIME_UNIT, - COMMUNITY_BLOGS, - FEEDS, + BLOG_FEEDS, + BLOGS_WITHOUT_FEED, GITHUB_REPO_URL, + RSS_DISPLAY_COUNT, } from "@/lib/constants" import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" @@ -94,7 +96,7 @@ import hero from "@/public/images/home/hero.png" const cachedEthPrice = runOnlyOnce(fetchEthPrice) const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) const cachedFetchTotalValueLocked = runOnlyOnce(fetchTotalValueLocked) -const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(FEEDS)) +const cachedXmlBlogFeeds = runOnlyOnce(async () => await fetchRSS(BLOG_FEEDS)) const cachedAttestantBlog = runOnlyOnce(fetchAttestantPosts) const cachedGrowThePieData = runOnlyOnce(fetchGrowThePie) const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) @@ -102,7 +104,7 @@ const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) type Props = BasePageProps & { communityEvents: CommunityEventsReturnType metricResults: AllMetricData - rssItems: RSSItem[] + rssData: { rssItems: RSSItem[]; blogLinks: CommunityBlog[] } } export const getStaticProps = (async ({ locale }) => { @@ -133,7 +135,14 @@ export const getStaticProps = (async ({ locale }) => { // load RSS feed items const xmlBlogs = await cachedXmlBlogFeeds() const attestantBlog = await cachedAttestantBlog() - const rssItems = polishRSSList(xmlBlogs, attestantBlog) + const polishedRssItems = polishRSSList(attestantBlog, ...xmlBlogs) + const rssItems = polishedRssItems.slice(0, RSS_DISPLAY_COUNT) + + const blogLinks = polishedRssItems.map(({ source, sourceUrl }) => ({ + name: source, + href: sourceUrl, + })) as CommunityBlog[] + blogLinks.push(...BLOGS_WITHOUT_FEED) return { props: { @@ -142,7 +151,7 @@ export const getStaticProps = (async ({ locale }) => { contentNotTranslated, lastDeployLocaleTimestamp, metricResults, - rssItems, + rssData: { rssItems, blogLinks }, }, revalidate: BASE_TIME_UNIT * 24, } @@ -151,7 +160,7 @@ export const getStaticProps = (async ({ locale }) => { const HomePage = ({ communityEvents, metricResults, - rssItems, + rssData: { rssItems, blogLinks }, }: InferGetStaticPropsType<typeof getStaticProps>) => { const { t } = useTranslation(["common", "page-index"]) const { locale, asPath } = useRouter() @@ -567,7 +576,7 @@ const HomePage = ({ <div className="mt-8 flex flex-col gap-4 rounded-2xl border p-8"> <p className="text-lg">{t("page-index:page-index-posts-action")}</p> <div className="flex flex-wrap gap-x-6 gap-y-4"> - {COMMUNITY_BLOGS.map(({ name, href }) => ( + {blogLinks.map(({ name, href }) => ( <Link href={href} key={name}> {name} </Link> From d3580a0498eda4b53afc2fed4dea2fe2a68a3132 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:17:28 -0700 Subject: [PATCH 199/273] patch: make cal event title into link --- src/pages/index.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3d68e034085..543329fa49d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -528,7 +528,12 @@ const HomePage = ({ className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row" > <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> - <p className="text-sm font-bold text-body">{title}</p> + <a + href={calendarLink} + className="text-sm font-bold text-body no-underline hover:underline" + > + {title} + </a> <p className="italic text-body-medium"> {new Intl.DateTimeFormat(locale, { month: "long", From ee5cd8b0e648eaa2a0e33c628e0f3747f4f17e43 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:34:58 -0700 Subject: [PATCH 200/273] fix: accent hover styles --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 543329fa49d..d815c4c5a80 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -400,7 +400,7 @@ const HomePage = ({ key={label} Svg={Svg} href={href} - className="text-accent-b [&>:first-child]:flex-row" + className="text-accent-b hover:text-accent-b-hover [&>:first-child]:flex-row" > <p className="text-start text-xl font-bold text-body group-hover:underline"> {label} From a0791fcda595286181bce6ee58061bce1176a8a9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:36:21 -0700 Subject: [PATCH 201/273] chore: adjust flex breakpoint wrap sooner to allow for larger text --- src/pages/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d815c4c5a80..c2af498910b 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -525,7 +525,7 @@ const HomePage = ({ calendar.map(({ date, title, calendarLink }) => ( <div key={title} - className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row" + className="flex flex-col justify-between gap-6 border-t px-6 py-4 xl:flex-row" > <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> <a @@ -545,7 +545,7 @@ const HomePage = ({ </p> </div> <ButtonLink - className="h-fit w-full text-nowrap px-5 sm:w-fit lg:self-center" + className="h-fit w-full text-nowrap px-5 sm:w-fit xl:self-center" size="md" variant="outline" href={calendarLink} From d3236d750e39b4aee6535fb8887a307c280cbff8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:36:50 -0700 Subject: [PATCH 202/273] chore: make button primary action, update label --- src/intl/en/page-index.json | 2 +- src/pages/index.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 85433d6fa5d..8f8ae01c885 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -139,7 +139,7 @@ "page-index-network-stats-value-defi-explainer": "The amount of money in decentralized finance (DeFi) applications, the Ethereum digital economy.", "page-index-popular-topics-ethereum": "What is Ethereum?", "page-index-popular-topics-label": "Popular topics", - "page-index-popular-topics-other": "Other topics", + "page-index-popular-topics-action": "Start learning", "page-index-popular-topics-roadmap": "Ethereum roadmap", "page-index-popular-topics-start": "How to start? (step by step)", "page-index-popular-topics-wallets": "What are crypto wallets?", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c2af498910b..29ed07905d0 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -409,8 +409,8 @@ const HomePage = ({ ))} </div> <div className="flex justify-center py-8 md:justify-start"> - <ButtonLink href="/learn/" size="lg" variant="outline"> - {t("page-index:page-index-popular-topics-other")}{" "} + <ButtonLink href="/learn/" size="lg"> + {t("page-index:page-index-popular-topics-action")}{" "} <MdChevronRight /> </ButtonLink> </div> From c8e37fa7cc2976da495b974fa7191156a88cf32e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 14:03:17 -0700 Subject: [PATCH 203/273] chore: adjustments --- src/components/Hero/HomeHero/index.tsx | 2 +- src/intl/en/page-index.json | 4 ++-- src/pages/index.tsx | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 323e2404a7d..8bb43b0bc35 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -21,7 +21,7 @@ const HomeHero = ({ heroImg, className }: HomeHeroProps) => { priority /> </div> - <div className="flex flex-col items-center space-y-4 border-t-[3px] border-primary-low-contrast px-4 py-8 text-center lg:space-y-7"> + <div className="flex flex-col items-center border-t-[3px] border-primary-low-contrast px-4 py-12 text-center"> <Morpher /> <div className="flex flex-col items-center space-y-5 lg:max-w-2xl"> <h1 className="font-black">{t("page-index:page-index-title")}</h1> diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 8f8ae01c885..3c938b2dc73 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -79,7 +79,7 @@ "page-index-bento-networks-content": "Ethereum is the hub for blockchain innovation. The best project are built on Ethereum.", "page-index-bento-networks-title": "The network of networks", "page-index-bento-stablecoins-action": "Learn more", - "page-index-bento-stablecoins-content": "Stablecoins are currencies that maintain stable value. Their price matches the U.S. dollar or other steady asset", + "page-index-bento-stablecoins-content": "Stablecoins are currencies that maintain stable value. Their price matches the U.S. dollar or other steady asset.", "page-index-bento-stablecoins-title": "Crypto without volatility", "page-index-builders-action-primary": "Builder's Portal", "page-index-builders-action-secondary": "Documentation", @@ -138,7 +138,7 @@ "page-index-network-stats-value-defi-description": "Value locked in DeFi (USD)", "page-index-network-stats-value-defi-explainer": "The amount of money in decentralized finance (DeFi) applications, the Ethereum digital economy.", "page-index-popular-topics-ethereum": "What is Ethereum?", - "page-index-popular-topics-label": "Popular topics", + "page-index-popular-topics-header": "Popular topics", "page-index-popular-topics-action": "Start learning", "page-index-popular-topics-roadmap": "Ethereum roadmap", "page-index-popular-topics-start": "How to start? (step by step)", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 29ed07905d0..5dc2890f6bb 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -336,7 +336,7 @@ const HomePage = ({ <TranslatathonBanner pathname={asPath} /> <HomeHero heroImg={hero} className="w-full" /> <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> - <div className="grid w-full grid-cols-2 gap-x-4 gap-y-8 py-20 md:grid-cols-4 md:gap-x-10"> + <div className="my-20 grid w-full grid-cols-2 gap-x-4 gap-y-8 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( <Fragment key={label}> <SvgButtonLink @@ -391,9 +391,9 @@ const HomePage = ({ {t("page-index:page-index-learn-description")} </p> <div className="flex flex-col space-y-8"> - <p className="text-xl font-bold"> - {t("page-index:page-index-popular-topics-label")} - </p> + <h3 className="text-xl font-bold"> + {t("page-index:page-index-popular-topics-header")} + </h3> <div className="grid grid-cols-1 gap-8 sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-2"> {popularTopics.map(({ label, Svg, href }) => ( <SvgButtonLink From cfc43291261e7c1bc1d42ec32c354330c2ff03e7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 15:23:36 -0700 Subject: [PATCH 204/273] style: use multi-line syntax for long tokens --- tailwind.config.ts | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/tailwind.config.ts b/tailwind.config.ts index 00f2e31d25d..2d0f797d838 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -190,8 +190,10 @@ const config = { }, boxShadow: { "table-box": "var(--table-box-shadow)", - table: - "0 14px 66px rgba(0,0,0,.07), 0 10px 17px rgba(0,0,0,.03), 0 4px 7px rgba(0,0,0,.05)", + table: ` + 0 14px 66px rgba(0,0,0,.07), + 0 10px 17px rgba(0,0,0,.03), + 0 4px 7px rgba(0,0,0,.05)`, drop: "0 4px 17px 0 rgba(0,0,0,0.08)", "table-box-hover": "0px 8px 17px rgba(0, 0, 0, 0.15)", "table-item-box": "var(--table-item-box-shadow)", @@ -199,19 +201,26 @@ const config = { "grid-yellow-box-shadow": "8px 8px 0px 0px #ffe78e", "grid-blue-box-shadow": "8px 8px 0px 0px #a7d0f4", // Part of new DS - "menu-accordion": - "0px 2px 2px 0px rgba(0, 0, 0, 0.12) inset, 0px -3px 2px 0px rgba(0, 0, 0, 0.14) inset", + "menu-accordion": ` + 0px 2px 2px 0px rgba(0, 0, 0, 0.12) inset, + 0px -3px 2px 0px rgba(0, 0, 0, 0.14) inset`, // TODO: From current theme. Deprecate for 'button-hover' primary: "4px 4px 0px 0px hsla(var(--primary))", "button-hover": "4px 4px 0 0 hsla(var(--primary-low-contrast))", tooltip: "0 0 16px var(--tooltip-shadow)", - "svg-button-link": - "var(--shadow-svg-button-link-1), var(--shadow-svg-button-link-2), var(--shadow-svg-button-link-3), var(--shadow-svg-button-link-4)", - "svg-button-link-hover": - "var(--shadow-svg-button-link-1-hover), var(--shadow-svg-button-link-2-hover), var(--shadow-svg-button-link-3-hover), var(--shadow-svg-button-link-4-hover)", + "svg-button-link": ` + var(--shadow-svg-button-link-1), var(--shadow-svg-button-link-2), + var(--shadow-svg-button-link-3), var(--shadow-svg-button-link-4)`, + "svg-button-link-hover": ` + var(--shadow-svg-button-link-1-hover), + var(--shadow-svg-button-link-2-hover), + var(--shadow-svg-button-link-3-hover), + var(--shadow-svg-button-link-4-hover)`, "card-hover": "var(--shadow-body-md), var(--shadow-body-lg)", - "window-box": - "var(--shadow-window-box-1), var(--shadow-window-box-2), var(--shadow-window-box-3), var(--shadow-window-box-4), var(--shadow-window-box-5)", + "window-box": ` + var(--shadow-window-box-1), var(--shadow-window-box-2), + var(--shadow-window-box-3), var(--shadow-window-box-4), + var(--shadow-window-box-5)`, }, spacing: { 7.5: "1.875rem", From 3688f0bdab874426cf1ff9fb82b3d923d571b815 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 15:24:07 -0700 Subject: [PATCH 205/273] fix: hydration warnings from useBentoBox --- src/components/BentoBox/useBentoBox.ts | 264 +++++++++++++------------ 1 file changed, 134 insertions(+), 130 deletions(-) diff --git a/src/components/BentoBox/useBentoBox.ts b/src/components/BentoBox/useBentoBox.ts index 9ea3c15273e..b63432320fc 100644 --- a/src/components/BentoBox/useBentoBox.ts +++ b/src/components/BentoBox/useBentoBox.ts @@ -1,3 +1,4 @@ +import { useEffect, useState } from "react" import { useTranslation } from "react-i18next" import { cn } from "@/lib/utils/cn" @@ -10,141 +11,144 @@ import ManBabyWomanImage from "@/public/images/man-baby-woman.png" import RobotBarImage from "@/public/images/robot-help-bar.png" import MergeImage from "@/public/images/upgrades/merge.png" -export const useBentoBox = () => { - const { t } = useTranslation("page-index") +const flow = { + mobile: { + down: "flex-col bg-gradient-to-b", + up: "flex-col-reverse bg-gradient-to-t", + right: "flex-row bg-gradient-to-r", + left: "flex-row-reverse bg-gradient-to-l", + }, + md: { + down: "md:flex-col md:bg-gradient-to-b", + up: "md:flex-col-reverse md:bg-gradient-to-t", + right: "md:flex-row md:bg-gradient-to-r", + left: "md:flex-row-reverse md:bg-gradient-to-l", + }, + lg: { + down: "lg:flex-col lg:bg-gradient-to-b", + up: "lg:flex-col-reverse lg:bg-gradient-to-t", + right: "lg:flex-row lg:bg-gradient-to-r", + left: "lg:flex-row-reverse lg:bg-gradient-to-l", + }, + xl: { + down: "xl:flex-col xl:bg-gradient-to-b", + up: "xl:flex-col-reverse xl:bg-gradient-to-t", + right: "xl:flex-row xl:bg-gradient-to-r", + left: "xl:flex-row-reverse xl:bg-gradient-to-l", + }, +} - const flow = { - mobile: { - down: "flex-col bg-gradient-to-b", - up: "flex-col-reverse bg-gradient-to-t", - right: "flex-row bg-gradient-to-r", - left: "flex-row-reverse bg-gradient-to-l", - }, - md: { - down: "md:flex-col md:bg-gradient-to-b", - up: "md:flex-col-reverse md:bg-gradient-to-t", - right: "md:flex-row md:bg-gradient-to-r", - left: "md:flex-row-reverse md:bg-gradient-to-l", - }, - lg: { - down: "lg:flex-col lg:bg-gradient-to-b", - up: "lg:flex-col-reverse lg:bg-gradient-to-t", - right: "lg:flex-row lg:bg-gradient-to-r", - left: "lg:flex-row-reverse lg:bg-gradient-to-l", - }, - xl: { - down: "xl:flex-col xl:bg-gradient-to-b", - up: "xl:flex-col-reverse xl:bg-gradient-to-t", - right: "xl:flex-row xl:bg-gradient-to-r", - left: "xl:flex-row-reverse xl:bg-gradient-to-l", - }, - } +const positions = "from-20% to-60%" - const positions = "from-20% to-60%" +const colors = (color: "primary" | "accent-a" | "accent-b" | "accent-c") => { + if (color === "primary") + return "from-primary/10 to-primary/5 dark:from-primary/20 dark:to-primary/10" + if (color === "accent-a") + return "from-accent-a/10 to-accent-a/5 dark:from-accent-a/20 dark:to-accent-a/10" + if (color === "accent-b") + return "from-accent-b/10 to-accent-b/5 dark:from-accent-b/20 dark:to-accent-b/10" + if (color === "accent-c") + return "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10" +} - const colors = (color: "primary" | "accent-a" | "accent-b" | "accent-c") => { - if (color === "primary") - return "from-primary/10 to-primary/5 dark:from-primary/20 dark:to-primary/10" - if (color === "accent-a") - return "from-accent-a/10 to-accent-a/5 dark:from-accent-a/20 dark:to-accent-a/10" - if (color === "accent-b") - return "from-accent-b/10 to-accent-b/5 dark:from-accent-b/20 dark:to-accent-b/10" - if (color === "accent-c") - return "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10" - } +export const useBentoBox = () => { + const { t } = useTranslation("page-index") + const [items, setItems] = useState<BentoCardProps[]>([]) - const items: BentoCardProps[] = [ - { - title: t("page-index:page-index-bento-stablecoins-title"), - children: t("page-index:page-index-bento-stablecoins-content"), - action: t("page-index:page-index-bento-stablecoins-action"), - href: "/stablecoins/", - imgSrc: ImpactImage, - imgWidth: 400, // TODO: Fix tablet size alignment (aligning top, should be center?) - className: cn( - "border-primary/10", - positions, - colors("primary"), - flow.mobile.down, - flow.lg.up, - flow.xl.right, - "lg:col-span-6 lg:row-start-2", - "xl:col-span-7 xl:col-start-5 xl:row-start-1" - ), - }, + useEffect(() => { + setItems([ + { + title: t("page-index-bento-stablecoins-title"), + children: t("page-index:page-index-bento-stablecoins-content"), + action: t("page-index:page-index-bento-stablecoins-action"), + href: "/stablecoins/", + imgSrc: ImpactImage, + imgWidth: 400, // TODO: Fix tablet size alignment (aligning top, should be center?) + className: cn( + "border-primary/10", + positions, + colors("primary"), + flow.mobile.down, + flow.lg.up, + flow.xl.right, + "lg:col-span-6 lg:row-start-2", + "xl:col-span-7 xl:col-start-5 xl:row-start-1" + ), + }, - { - title: t("page-index:page-index-bento-defi-title"), - children: t("page-index:page-index-bento-defi-content"), - action: t("page-index:page-index-bento-defi-action"), - href: "/defi/", - imgSrc: ManAndDogImage, - className: cn( - "border-accent-c/10", - positions, - colors("accent-c"), - flow.mobile.down, - flow.lg.down, - flow.xl.up, - "lg:col-span-6 lg:col-start-7 lg:row-start-2", - "xl:col-span-4 xl:col-start-2 xl:row-start-2" - ), - }, - { - title: t("page-index:page-index-bento-dapps-title"), - children: t("page-index:page-index-bento-dapps-content"), - action: t("page-index:page-index-bento-dapps-action"), - href: "/dapps/", - imgSrc: MergeImage, - imgWidth: 320, - className: cn( - "border-accent-b/10", - positions, - colors("accent-b"), - flow.mobile.down, - flow.lg.right, - flow.xl.down, - "lg:col-span-12 lg:row-start-3", - "xl:col-span-3 xl:col-start-6 xl:row-start-2" - ), - }, - { - title: t("page-index:page-index-bento-networks-title"), - children: t("page-index:page-index-bento-networks-content"), - action: t("page-index:page-index-bento-networks-action"), - href: "/layer-2/", - imgSrc: ManBabyWomanImage, - imgWidth: 324, - className: cn( - "border-accent-a/10", - positions, - colors("accent-a"), - flow.mobile.down, - flow.lg.up, - flow.xl.up, - "lg:col-span-6 lg:col-start-7 lg:row-start-4", - "xl:col-span-3 xl:col-start-9 xl:row-span-2 xl:row-start-2" - ), - }, - { - title: t("page-index:page-index-bento-assets-title"), - children: t("page-index:page-index-bento-assets-content"), - action: t("page-index:page-index-bento-assets-action"), - href: "/nft/", - imgSrc: RobotBarImage, - imgWidth: 324, - className: cn( - "border-primary/10", - positions, - colors("primary"), - flow.mobile.down, - flow.lg.down, - flow.xl.right, - "lg:col-span-6 lg:row-start-4", - "xl:col-span-7 xl:col-start-2 xl:row-start-3" - ), - }, - ] + { + title: t("page-index:page-index-bento-defi-title"), + children: t("page-index:page-index-bento-defi-content"), + action: t("page-index:page-index-bento-defi-action"), + href: "/defi/", + imgSrc: ManAndDogImage, + className: cn( + "border-accent-c/10", + positions, + colors("accent-c"), + flow.mobile.down, + flow.lg.down, + flow.xl.up, + "lg:col-span-6 lg:col-start-7 lg:row-start-2", + "xl:col-span-4 xl:col-start-2 xl:row-start-2" + ), + }, + { + title: t("page-index:page-index-bento-dapps-title"), + children: t("page-index:page-index-bento-dapps-content"), + action: t("page-index:page-index-bento-dapps-action"), + href: "/dapps/", + imgSrc: MergeImage, + imgWidth: 320, + className: cn( + "border-accent-b/10", + positions, + colors("accent-b"), + flow.mobile.down, + flow.lg.right, + flow.xl.down, + "lg:col-span-12 lg:row-start-3", + "xl:col-span-3 xl:col-start-6 xl:row-start-2" + ), + }, + { + title: t("page-index:page-index-bento-networks-title"), + children: t("page-index:page-index-bento-networks-content"), + action: t("page-index:page-index-bento-networks-action"), + href: "/layer-2/", + imgSrc: ManBabyWomanImage, + imgWidth: 324, + className: cn( + "border-accent-a/10", + positions, + colors("accent-a"), + flow.mobile.down, + flow.lg.up, + flow.xl.up, + "lg:col-span-6 lg:col-start-7 lg:row-start-4", + "xl:col-span-3 xl:col-start-9 xl:row-span-2 xl:row-start-2" + ), + }, + { + title: t("page-index:page-index-bento-assets-title"), + children: t("page-index:page-index-bento-assets-content"), + action: t("page-index:page-index-bento-assets-action"), + href: "/nft/", + imgSrc: RobotBarImage, + imgWidth: 324, + className: cn( + "border-primary/10", + positions, + colors("primary"), + flow.mobile.down, + flow.lg.down, + flow.xl.right, + "lg:col-span-6 lg:row-start-4", + "xl:col-span-7 xl:col-start-2 xl:row-start-3" + ), + }, + ]) + }, [t]) return { items } } From f35de90cd67fcbbd84340c8f92237fe1dba2d0c7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 15:56:24 -0700 Subject: [PATCH 206/273] refactor: unify card styling apply styling to ui card component; reuse without class modification for both post preview card, and event preview cards on homepage --- src/components/Homepage/PostPreviewCard.tsx | 19 +++++++--- src/components/ui/card.tsx | 26 ++++++++++++- src/pages/index.tsx | 42 +++++++++------------ 3 files changed, 55 insertions(+), 32 deletions(-) diff --git a/src/components/Homepage/PostPreviewCard.tsx b/src/components/Homepage/PostPreviewCard.tsx index e88d2d3d3b7..afdb52d377c 100644 --- a/src/components/Homepage/PostPreviewCard.tsx +++ b/src/components/Homepage/PostPreviewCard.tsx @@ -4,7 +4,14 @@ import type { RSSItem } from "@/lib/types" import { isValidDate } from "@/lib/utils/date" -import { Card, CardBanner, CardContent, CardTitle } from "../ui/card" +import { + Card, + CardBanner, + CardContent, + CardHighlight, + CardSubTitle, + CardTitle, +} from "../ui/card" const PostPreviewCard = ({ pubDate, title, source, link, imgSrc }: RSSItem) => { const { locale } = useRouter() @@ -14,18 +21,18 @@ const PostPreviewCard = ({ pubDate, title, source, link, imgSrc }: RSSItem) => { {/* eslint-disable-next-line @next/next/no-img-element */} <img src={imgSrc} alt="" /> </CardBanner> - <CardContent className=""> - <CardTitle variant="strong">{title}</CardTitle> + <CardContent> + <CardTitle>{title}</CardTitle> {isValidDate(pubDate) && ( - <p className="text-sm italic"> + <CardSubTitle> {new Intl.DateTimeFormat(locale, { month: "long", day: "numeric", year: "numeric", }).format(new Date(pubDate))} - </p> + </CardSubTitle> )} - <div className="w-fit text-sm uppercase text-accent-a">{source}</div> + <CardHighlight>{source}</CardHighlight> </CardContent> </Card> ) diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 930e042ce3f..72e76fd89d9 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -13,7 +13,7 @@ const titleVariants = cva("group-hover:underline", { }, }, defaultVariants: { - variant: "normal", + variant: "strong", }, }) @@ -77,7 +77,7 @@ const CardBanner = React.forwardRef< CardBanner.displayName = "CardBanner" const CardTitle = React.forwardRef< - HTMLParagraphElement, + HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement> & VariantProps<typeof titleVariants> >(({ className, variant, ...props }, ref) => ( <h3 @@ -88,6 +88,26 @@ const CardTitle = React.forwardRef< )) CardTitle.displayName = "CardTitle" +const CardSubTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes<HTMLParagraphElement> +>(({ className, ...props }, ref) => ( + <p ref={ref} className={cn("text-sm italic", className)} {...props} /> +)) +CardSubTitle.displayName = "CardSubTitle" + +const CardHighlight = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes<HTMLParagraphElement> +>(({ className, ...props }, ref) => ( + <p + ref={ref} + className={cn("text-sm uppercase text-accent-a", className)} + {...props} + /> +)) +CardHighlight.displayName = "CardHighlight" + const CardDescription = React.forwardRef< HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement> @@ -127,5 +147,7 @@ export { CardDescription, CardFooter, CardHeader, + CardHighlight, + CardSubTitle, CardTitle, } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5dc2890f6bb..cec5f2ae933 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -47,7 +47,8 @@ import { Card, CardBanner, CardContent, - CardDescription, + CardHighlight, + CardSubTitle, CardTitle, } from "@/components/ui/card" import Link from "@/components/ui/Link" @@ -629,29 +630,22 @@ const HomePage = ({ <TwImage src={EventFallback} alt="" /> )} </CardBanner> - <CardContent className="space-y-8 p-2"> - <div> - <CardTitle variant="strong">{title}</CardTitle> - <CardDescription className="italic"> - {(isValidDate(startDate) || isValidDate(endDate)) && - new Intl.DateTimeFormat(locale, { - month: "long", - day: "numeric", - year: "numeric", - }).formatRange( - new Date( - isValidDate(startDate) ? startDate : endDate - ), - new Date( - isValidDate(endDate) ? endDate : startDate - ) - )} - </CardDescription> - <p className="text-sm italic text-body-medium"> - {location} - </p> - </div> - <p>{description}</p> + <CardContent> + <CardTitle>{title}</CardTitle> + <CardSubTitle> + {(isValidDate(startDate) || isValidDate(endDate)) && + new Intl.DateTimeFormat(locale, { + month: "long", + day: "numeric", + year: "numeric", + }).formatRange( + new Date( + isValidDate(startDate) ? startDate : endDate + ), + new Date(isValidDate(endDate) ? endDate : startDate) + )} + </CardSubTitle> + <CardHighlight>{location}</CardHighlight> </CardContent> </Card> ) From 58f580b7aa89e65c12c4ca58d6c754b921825b78 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 17:15:46 -0700 Subject: [PATCH 207/273] refactor: HomeSection props --- src/components/HomeSection/index.tsx | 25 ++++++++----------------- src/pages/index.tsx | 4 ++-- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index 63243f3bbd4..bcf5c2336b4 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -6,8 +6,7 @@ import { cn } from "@/lib/utils/cn" type HomeSectionProps = { tag: string title: ReactNode - imgSrc?: StaticImageData // TODO: Revert to required before prod - isFlipped?: boolean + imgSrc: StaticImageData className?: string children?: ReactNode } @@ -16,25 +15,17 @@ const HomeSection = ({ tag, title, imgSrc, - isFlipped, className, children, }: HomeSectionProps) => { return ( - <div - className={cn( - "flex flex-col gap-8 md:flex-row lg:gap-16", - isFlipped && "md:flex-row-reverse", - className - )} - > - {imgSrc && ( - <NextImage - className="min-h-full w-full rounded-4xl object-cover object-center md:max-w-96 lg:max-w-128" - src={imgSrc} - alt="" - /> - )} + <div className={cn("flex flex-col gap-8 md:flex-row lg:gap-16", className)}> + <NextImage + className="min-h-full w-full rounded-4xl object-cover object-center md:w-1/3 md:max-w-96 lg:max-w-128" + src={imgSrc} + alt="" + /> + <div className="w-full"> <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0.5 text-sm uppercase text-primary"> {tag} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index cec5f2ae933..829691f630b 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -385,7 +385,7 @@ const HomePage = ({ tag={t("page-index:page-index-learn-tag")} title={t("page-index:page-index-learn-title")} imgSrc={learnImage} - isFlipped + className="md:flex-row-reverse" > <div className="flex flex-col space-y-16 lg:space-y-32"> <p className="text-lg"> @@ -486,7 +486,7 @@ const HomePage = ({ tag={t("page-index:page-index-community-tag")} title={t("page-index:page-index-community-title")} imgSrc={communityImage} - isFlipped + className="md:flex-row-reverse" > <div className="mt-8 flex flex-col gap-8 text-lg"> <p>{t("page-index:page-index-community-description-1")}</p> From 030ce94e1a6efb41b87b5808ca2f2831a1d7a915 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 17:59:19 -0700 Subject: [PATCH 208/273] feat: create ui/section component --- src/components/ui/section.tsx | 75 +++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/components/ui/section.tsx diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx new file mode 100644 index 00000000000..f3af75c27ce --- /dev/null +++ b/src/components/ui/section.tsx @@ -0,0 +1,75 @@ +import * as React from "react" + +import { cn } from "@/lib/utils/cn" + +const Section = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn( + "group/section flex flex-col gap-8 md:flex-row lg:gap-16", + className + )} + {...props} + /> +)) +Section.displayName = "Section" + +const SectionBanner = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn( + "w-full overflow-hidden rounded-4xl md:max-w-96 lg:max-w-128", + "bg-gradient-to-b from-accent-a/10 to-accent-a/0 dark:from-accent-a/15 dark:to-accent-a/5", + "[&_img]:min-h-full [&_img]:object-cover [&_img]:object-center", + className + )} + {...props} + /> +)) +SectionBanner.displayName = "SectionBanner" + +const SectionTitle = React.forwardRef< + HTMLHeadingElement, + React.HTMLAttributes<HTMLHeadingElement> +>(({ className, ...props }, ref) => ( + <h2 + ref={ref} + className={cn( + "mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-6xl", + className + )} + {...props} + /> +)) +SectionTitle.displayName = "SectionTitle" + +const SectionTag = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn( + "w-fit rounded-full bg-primary-low-contrast px-4 py-0.5 text-sm uppercase text-primary", + className + )} + {...props} + /> +)) +SectionTag.displayName = "SectionTag" + +const SectionContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div ref={ref} className={cn("w-full space-y-2", className)} {...props} /> +)) +SectionContent.displayName = "SectionContent" + +export { Section, SectionBanner, SectionContent, SectionTag, SectionTitle } From 2ff97e36cde77a5b857622af5146cb50f137705e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:10:54 -0700 Subject: [PATCH 209/273] refactor: use Stack with gap --- src/pages/index.tsx | 134 ++++++++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 66 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 829691f630b..a379d089ffe 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -51,6 +51,7 @@ import { CardSubTitle, CardTitle, } from "@/components/ui/card" +import { Stack } from "@/components/ui/flex" import Link from "@/components/ui/Link" import WindowBox from "@/components/WindowBox" @@ -336,7 +337,7 @@ const HomePage = ({ /> <TranslatathonBanner pathname={asPath} /> <HomeHero heroImg={hero} className="w-full" /> - <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> + <Stack className="flex flex-col gap-16 px-4 sm:px-6 md:gap-32"> <div className="my-20 grid w-full grid-cols-2 gap-x-4 gap-y-8 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( <Fragment key={label}> @@ -373,7 +374,7 @@ const HomePage = ({ title={t("page-index:page-index-activity-title")} imgSrc={activityImage} > - <div className="my-16 lg:my-32"> + <div className="py-16 lg:py-32"> <p className="mt-8 text-xl font-bold"> {t("page-index:page-index-activity-description")} </p> @@ -387,11 +388,11 @@ const HomePage = ({ imgSrc={learnImage} className="md:flex-row-reverse" > - <div className="flex flex-col space-y-16 lg:space-y-32"> + <div className="flex flex-col gap-y-16 lg:gap-y-32"> <p className="text-lg"> {t("page-index:page-index-learn-description")} </p> - <div className="flex flex-col space-y-8"> + <div className="flex flex-col gap-y-8"> <h3 className="text-xl font-bold"> {t("page-index:page-index-popular-topics-header")} </h3> @@ -443,24 +444,25 @@ const HomePage = ({ {t("page-index:page-index-builders-action-secondary")} </ButtonLink> </div> - <WindowBox - title={t("page-index:page-index-developers-code-examples")} - Svg={AngleBrackets} - className="my-8 md:mb-16 md:mt-8 lg:mb-32 lg:mt-16" - > - {codeExamples.map(({ title, description }, idx) => ( - <button - key={title} - className="flex flex-col space-y-0.5 border-t px-6 py-4 hover:bg-background-highlight" - onClick={() => toggleCodeExample(idx)} - > - <p className="font-bold">{title}</p> - <p className="text-start text-sm text-body-medium"> - {description} - </p> - </button> - ))} - </WindowBox> + <div className="py-8 md:pb-16 md:pt-8 lg:pb-32 lg:pt-16"> + <WindowBox + title={t("page-index:page-index-developers-code-examples")} + Svg={AngleBrackets} + > + {codeExamples.map(({ title, description }, idx) => ( + <button + key={title} + className="flex flex-col gap-y-0.5 border-t px-6 py-4 hover:bg-background-highlight" + onClick={() => toggleCodeExample(idx)} + > + <p className="font-bold">{title}</p> + <p className="text-start text-sm text-body-medium"> + {description} + </p> + </button> + ))} + </WindowBox> + </div> {isModalOpen && ( // TODO: Migrate CodeModal, CodeBlock, Skeleton from Chakra-UI to tailwind/shad-cn @@ -516,52 +518,52 @@ const HomePage = ({ </ButtonLink> </div> </div> - - <WindowBox - title={t("page-index:page-index-calendar-title")} - Svg={Calendar} - className="my-8 md:mt-8 lg:mt-16" - > - {calendar.length > 0 ? ( - calendar.map(({ date, title, calendarLink }) => ( - <div - key={title} - className="flex flex-col justify-between gap-6 border-t px-6 py-4 xl:flex-row" - > - <div className="flex flex-col space-y-0.5 text-center text-base sm:text-start"> - <a + <div className="py-8 md:pt-8 lg:pt-16"> + <WindowBox + title={t("page-index:page-index-calendar-title")} + Svg={Calendar} + > + {calendar.length > 0 ? ( + calendar.map(({ date, title, calendarLink }) => ( + <div + key={title} + className="flex flex-col justify-between gap-6 border-t px-6 py-4 xl:flex-row" + > + <div className="flex flex-col gap-y-0.5 text-center text-base sm:text-start"> + <a + href={calendarLink} + className="text-sm font-bold text-body no-underline hover:underline" + > + {title} + </a> + <p className="italic text-body-medium"> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "2-digit", + year: "numeric", + hour: "numeric", + minute: "numeric", + }).format(new Date(date))} + </p> + </div> + <ButtonLink + className="h-fit w-full text-nowrap px-5 sm:w-fit xl:self-center" + size="md" + variant="outline" href={calendarLink} - className="text-sm font-bold text-body no-underline hover:underline" + hideArrow > - {title} - </a> - <p className="italic text-body-medium"> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "2-digit", - year: "numeric", - hour: "numeric", - minute: "numeric", - }).format(new Date(date))} - </p> + <CalendarAdd /> {t("page-index:page-index-calendar-add")} + </ButtonLink> </div> - <ButtonLink - className="h-fit w-full text-nowrap px-5 sm:w-fit xl:self-center" - size="md" - variant="outline" - href={calendarLink} - hideArrow - > - <CalendarAdd /> {t("page-index:page-index-calendar-add")} - </ButtonLink> + )) + ) : ( + <div className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row"> + {t("page-index:page-index-calendar-fallback")} </div> - )) - ) : ( - <div className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row"> - {t("page-index:page-index-calendar-fallback")} - </div> - )} - </WindowBox> + )} + </WindowBox> + </div> </HomeSection> <div className="w-full"> @@ -667,7 +669,7 @@ const HomePage = ({ )} > <div className="mb-12 flex flex-col gap-y-8 rounded-4xl bg-radial-a px-4 py-8 lg:mb-32 xl:mb-36"> - <div className="flex flex-col space-y-4 text-center"> + <div className="flex flex-col gap-y-4 text-center"> <h2>{t("page-index:page-index-join-header")}</h2> <p>{t("page-index:page-index-join-description")}</p> </div> @@ -689,7 +691,7 @@ const HomePage = ({ </div> </div> </div> - </div> + </Stack> </Flex> ) } From eb63cd1c37eb1052e8836bbfe046680b80381872 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:11:16 -0700 Subject: [PATCH 210/273] refactor: use ui/section within HomeSection --- src/components/HomeSection/index.tsx | 40 +++++++++++++--------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx index bcf5c2336b4..50938703d8a 100644 --- a/src/components/HomeSection/index.tsx +++ b/src/components/HomeSection/index.tsx @@ -1,7 +1,13 @@ import NextImage, { type StaticImageData } from "next/image" import type { ReactNode } from "react" -import { cn } from "@/lib/utils/cn" +import { + Section, + SectionBanner, + SectionContent, + SectionTag, + SectionTitle, +} from "../ui/section" type HomeSectionProps = { tag: string @@ -17,26 +23,18 @@ const HomeSection = ({ imgSrc, className, children, -}: HomeSectionProps) => { - return ( - <div className={cn("flex flex-col gap-8 md:flex-row lg:gap-16", className)}> - <NextImage - className="min-h-full w-full rounded-4xl object-cover object-center md:w-1/3 md:max-w-96 lg:max-w-128" - src={imgSrc} - alt="" - /> +}: HomeSectionProps) => ( + <Section className={className}> + <SectionBanner> + <NextImage src={imgSrc} alt="" /> + </SectionBanner> - <div className="w-full"> - <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0.5 text-sm uppercase text-primary"> - {tag} - </div> - <h2 className="mb-4 mt-2 text-5xl font-black lg:mb-6 lg:text-6xl"> - {title} - </h2> - {children} - </div> - </div> - ) -} + <SectionContent> + <SectionTag>{tag}</SectionTag> + <SectionTitle>{title}</SectionTitle> + {children} + </SectionContent> + </Section> +) export default HomeSection From 5b560ccc937a5cdcb89e0d9af5e053f5baf0ebad Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:26:07 -0700 Subject: [PATCH 211/273] deprecate: HomeSection in lieu of reusable Section --- src/components/HomeSection/index.tsx | 40 --- src/pages/index.tsx | 388 +++++++++++++++------------ 2 files changed, 209 insertions(+), 219 deletions(-) delete mode 100644 src/components/HomeSection/index.tsx diff --git a/src/components/HomeSection/index.tsx b/src/components/HomeSection/index.tsx deleted file mode 100644 index 50938703d8a..00000000000 --- a/src/components/HomeSection/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import NextImage, { type StaticImageData } from "next/image" -import type { ReactNode } from "react" - -import { - Section, - SectionBanner, - SectionContent, - SectionTag, - SectionTitle, -} from "../ui/section" - -type HomeSectionProps = { - tag: string - title: ReactNode - imgSrc: StaticImageData - className?: string - children?: ReactNode -} - -const HomeSection = ({ - tag, - title, - imgSrc, - className, - children, -}: HomeSectionProps) => ( - <Section className={className}> - <SectionBanner> - <NextImage src={imgSrc} alt="" /> - </SectionBanner> - - <SectionContent> - <SectionTag>{tag}</SectionTag> - <SectionTitle>{title}</SectionTitle> - {children} - </SectionContent> - </Section> -) - -export default HomeSection diff --git a/src/pages/index.tsx b/src/pages/index.tsx index a379d089ffe..6353e1144bc 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,5 +1,6 @@ import { Fragment, Suspense, useState } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" +import NextImage from "next/image" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" @@ -23,7 +24,6 @@ import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" import PostPreviewCard from "@/components/Homepage/PostPreviewCard" -import HomeSection from "@/components/HomeSection" import AngleBrackets from "@/components/icons/angle-brackets.svg" import BlockHeap from "@/components/icons/block-heap.svg" import Calendar from "@/components/icons/calendar.svg" @@ -53,6 +53,13 @@ import { } from "@/components/ui/card" import { Stack } from "@/components/ui/flex" import Link from "@/components/ui/Link" +import { + Section, + SectionBanner, + SectionContent, + SectionTag, + SectionTitle, +} from "@/components/ui/section" import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" @@ -369,202 +376,225 @@ const HomePage = ({ {/* Desktop */} <BentoBox className="hidden lg:block" /> - <HomeSection - tag={t("page-index:page-index-activity-tag")} - title={t("page-index:page-index-activity-title")} - imgSrc={activityImage} - > - <div className="py-16 lg:py-32"> - <p className="mt-8 text-xl font-bold"> - {t("page-index:page-index-activity-description")} - </p> - <StatsBoxGrid metricResults={metricResults} /> - </div> - </HomeSection> - - <HomeSection - tag={t("page-index:page-index-learn-tag")} - title={t("page-index:page-index-learn-title")} - imgSrc={learnImage} - className="md:flex-row-reverse" - > - <div className="flex flex-col gap-y-16 lg:gap-y-32"> - <p className="text-lg"> - {t("page-index:page-index-learn-description")} - </p> - <div className="flex flex-col gap-y-8"> - <h3 className="text-xl font-bold"> - {t("page-index:page-index-popular-topics-header")} - </h3> - <div className="grid grid-cols-1 gap-8 sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-2"> - {popularTopics.map(({ label, Svg, href }) => ( - <SvgButtonLink - key={label} - Svg={Svg} - href={href} - className="text-accent-b hover:text-accent-b-hover [&>:first-child]:flex-row" - > - <p className="text-start text-xl font-bold text-body group-hover:underline"> - {label} - </p> - </SvgButtonLink> - ))} - </div> - <div className="flex justify-center py-8 md:justify-start"> - <ButtonLink href="/learn/" size="lg"> - {t("page-index:page-index-popular-topics-action")}{" "} - <MdChevronRight /> - </ButtonLink> - </div> + <Section> + <SectionBanner> + <NextImage src={activityImage} alt="" /> + </SectionBanner> + + <SectionContent> + <SectionTag>{t("page-index:page-index-activity-tag")}</SectionTag> + <SectionTitle> + {t("page-index:page-index-activity-title")} + </SectionTitle> + <div className="py-16 lg:py-32"> + <p className="mt-8 text-xl font-bold"> + {t("page-index:page-index-activity-description")} + </p> + <StatsBoxGrid metricResults={metricResults} /> </div> - </div> - </HomeSection> + </SectionContent> + </Section> + + <Section className="md:flex-row-reverse"> + <SectionBanner> + <NextImage src={learnImage} alt="" /> + </SectionBanner> + + <SectionContent> + <SectionTag>{t("page-index:page-index-learn-tag")}</SectionTag> + <SectionTitle> + {t("page-index:page-index-learn-title")} + </SectionTitle> + <div className="flex flex-col gap-y-16 lg:gap-y-32"> + <p className="text-lg"> + {t("page-index:page-index-learn-description")} + </p> + <div className="flex flex-col gap-y-8"> + <h3 className="text-xl font-bold"> + {t("page-index:page-index-popular-topics-header")} + </h3> + <div className="grid grid-cols-1 gap-8 sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-2"> + {popularTopics.map(({ label, Svg, href }) => ( + <SvgButtonLink + key={label} + Svg={Svg} + href={href} + className="text-accent-b hover:text-accent-b-hover [&>:first-child]:flex-row" + > + <p className="text-start text-xl font-bold text-body group-hover:underline"> + {label} + </p> + </SvgButtonLink> + ))} + </div> + <div className="flex justify-center py-8 md:justify-start"> + <ButtonLink href="/learn/" size="lg"> + {t("page-index:page-index-popular-topics-action")}{" "} + <MdChevronRight /> + </ButtonLink> + </div> + </div> + </div>{" "} + </SectionContent> + </Section> {/* TODO: Add "The Internet Is Changing" section */} - <HomeSection - tag={t("page-index:page-index-builders-tag")} - title={t("page-index:page-index-builders-title")} - imgSrc={buildersImage} - > - <p className="text-lg"> - {t("page-index:page-index-builders-description")} - </p> - <div className="flex flex-wrap gap-6 py-8"> - <ButtonLink href="/developers/" size="lg" className="w-fit"> - {t("page-index:page-index-builders-action-primary")}{" "} - <MdChevronRight /> - </ButtonLink> - <ButtonLink - href="/developers/docs/" - size="lg" - variant="outline" - className="w-fit" - > - {t("page-index:page-index-builders-action-secondary")} - </ButtonLink> - </div> - <div className="py-8 md:pb-16 md:pt-8 lg:pb-32 lg:pt-16"> - <WindowBox - title={t("page-index:page-index-developers-code-examples")} - Svg={AngleBrackets} - > - {codeExamples.map(({ title, description }, idx) => ( - <button - key={title} - className="flex flex-col gap-y-0.5 border-t px-6 py-4 hover:bg-background-highlight" - onClick={() => toggleCodeExample(idx)} - > - <p className="font-bold">{title}</p> - <p className="text-start text-sm text-body-medium"> - {description} - </p> - </button> - ))} - </WindowBox> - </div> - - {isModalOpen && ( - // TODO: Migrate CodeModal, CodeBlock, Skeleton from Chakra-UI to tailwind/shad-cn - <CodeModal - isOpen={isModalOpen} - setIsOpen={setModalOpen} - title={codeExamples[activeCode].title} - > - <Suspense fallback={<Skeleton />}> - <Codeblock - codeLanguage={codeExamples[activeCode].codeLanguage} - allowCollapse={false} - fromHomepage - > - {codeExamples[activeCode].code} - </Codeblock> - </Suspense> - </CodeModal> - )} - </HomeSection> + <Section> + <SectionBanner> + <NextImage src={buildersImage} alt="" /> + </SectionBanner> - <HomeSection - tag={t("page-index:page-index-community-tag")} - title={t("page-index:page-index-community-title")} - imgSrc={communityImage} - className="md:flex-row-reverse" - > - <div className="mt-8 flex flex-col gap-8 text-lg"> - <p>{t("page-index:page-index-community-description-1")}</p> - <p>{t("page-index:page-index-community-description-2")}</p> - <p>{t("page-index:page-index-community-description-3")}</p> - </div> - <div className="flex flex-wrap gap-3 py-8"> - <ButtonLink href="/community/" size="lg"> - {t("page-index:page-index-community-action")} <MdChevronRight /> - </ButtonLink> - <div className="flex gap-3"> - <ButtonLink - href="/discord/" - size="lg" - variant="outline" - hideArrow - > - <FaDiscord /> + <SectionContent> + <SectionTag>{t("page-index:page-index-builders-tag")}</SectionTag> + <SectionTitle> + {t("page-index:page-index-builders-title")} + </SectionTitle> + <p className="text-lg"> + {t("page-index:page-index-builders-description")} + </p> + <div className="flex flex-wrap gap-6 py-8"> + <ButtonLink href="/developers/" size="lg" className="w-fit"> + {t("page-index:page-index-builders-action-primary")}{" "} + <MdChevronRight /> </ButtonLink> <ButtonLink - href={GITHUB_REPO_URL} + href="/developers/docs/" size="lg" variant="outline" - hideArrow + className="w-fit" > - <FaGithub /> + {t("page-index:page-index-builders-action-secondary")} </ButtonLink> </div> - </div> - <div className="py-8 md:pt-8 lg:pt-16"> - <WindowBox - title={t("page-index:page-index-calendar-title")} - Svg={Calendar} - > - {calendar.length > 0 ? ( - calendar.map(({ date, title, calendarLink }) => ( - <div + <div className="py-8 md:pb-16 md:pt-8 lg:pb-32 lg:pt-16"> + <WindowBox + title={t("page-index:page-index-developers-code-examples")} + Svg={AngleBrackets} + > + {codeExamples.map(({ title, description }, idx) => ( + <button key={title} - className="flex flex-col justify-between gap-6 border-t px-6 py-4 xl:flex-row" + className="flex flex-col gap-y-0.5 border-t px-6 py-4 hover:bg-background-highlight" + onClick={() => toggleCodeExample(idx)} + > + <p className="font-bold">{title}</p> + <p className="text-start text-sm text-body-medium"> + {description} + </p> + </button> + ))} + </WindowBox> + </div> + + {isModalOpen && ( + // TODO: Migrate CodeModal, CodeBlock, Skeleton from Chakra-UI to tailwind/shad-cn + <CodeModal + isOpen={isModalOpen} + setIsOpen={setModalOpen} + title={codeExamples[activeCode].title} + > + <Suspense fallback={<Skeleton />}> + <Codeblock + codeLanguage={codeExamples[activeCode].codeLanguage} + allowCollapse={false} + fromHomepage > - <div className="flex flex-col gap-y-0.5 text-center text-base sm:text-start"> - <a + {codeExamples[activeCode].code} + </Codeblock> + </Suspense> + </CodeModal> + )} + </SectionContent> + </Section> + + <Section className="md:flex-row-reverse"> + <SectionBanner> + <NextImage src={communityImage} alt="" /> + </SectionBanner> + + <SectionContent> + <SectionTag>{t("page-index:page-index-community-tag")}</SectionTag> + <SectionTitle> + {t("page-index:page-index-community-title")} + </SectionTitle> + <div className="mt-8 flex flex-col gap-8 text-lg"> + <p>{t("page-index:page-index-community-description-1")}</p> + <p>{t("page-index:page-index-community-description-2")}</p> + <p>{t("page-index:page-index-community-description-3")}</p> + </div> + <div className="flex flex-wrap gap-3 py-8"> + <ButtonLink href="/community/" size="lg"> + {t("page-index:page-index-community-action")} <MdChevronRight /> + </ButtonLink> + <div className="flex gap-3"> + <ButtonLink + href="/discord/" + size="lg" + variant="outline" + hideArrow + > + <FaDiscord /> + </ButtonLink> + <ButtonLink + href={GITHUB_REPO_URL} + size="lg" + variant="outline" + hideArrow + > + <FaGithub /> + </ButtonLink> + </div> + </div> + <div className="py-8 md:pt-8 lg:pt-16"> + <WindowBox + title={t("page-index:page-index-calendar-title")} + Svg={Calendar} + > + {calendar.length > 0 ? ( + calendar.map(({ date, title, calendarLink }) => ( + <div + key={title} + className="flex flex-col justify-between gap-6 border-t px-6 py-4 xl:flex-row" + > + <div className="flex flex-col gap-y-0.5 text-center text-base sm:text-start"> + <a + href={calendarLink} + className="text-sm font-bold text-body no-underline hover:underline" + > + {title} + </a> + <p className="italic text-body-medium"> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "2-digit", + year: "numeric", + hour: "numeric", + minute: "numeric", + }).format(new Date(date))} + </p> + </div> + <ButtonLink + className="h-fit w-full text-nowrap px-5 sm:w-fit xl:self-center" + size="md" + variant="outline" href={calendarLink} - className="text-sm font-bold text-body no-underline hover:underline" + hideArrow > - {title} - </a> - <p className="italic text-body-medium"> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "2-digit", - year: "numeric", - hour: "numeric", - minute: "numeric", - }).format(new Date(date))} - </p> + <CalendarAdd />{" "} + {t("page-index:page-index-calendar-add")} + </ButtonLink> </div> - <ButtonLink - className="h-fit w-full text-nowrap px-5 sm:w-fit xl:self-center" - size="md" - variant="outline" - href={calendarLink} - hideArrow - > - <CalendarAdd /> {t("page-index:page-index-calendar-add")} - </ButtonLink> + )) + ) : ( + <div className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row"> + {t("page-index:page-index-calendar-fallback")} </div> - )) - ) : ( - <div className="flex flex-col justify-between gap-6 border-t px-6 py-4 lg:flex-row"> - {t("page-index:page-index-calendar-fallback")} - </div> - )} - </WindowBox> - </div> - </HomeSection> + )} + </WindowBox> + </div>{" "} + </SectionContent> + </Section> <div className="w-full"> <h3 className="mb-4 mt-2 text-4xl font-black lg:text-5xl"> From aba8bb3811abb88f5826f863c73288622139134f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:28:41 -0700 Subject: [PATCH 212/273] revert: refactor: use Stack with gap breaks existing layout --- src/pages/index.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6353e1144bc..0a5cefd7a7a 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -51,7 +51,6 @@ import { CardSubTitle, CardTitle, } from "@/components/ui/card" -import { Stack } from "@/components/ui/flex" import Link from "@/components/ui/Link" import { Section, @@ -344,7 +343,7 @@ const HomePage = ({ /> <TranslatathonBanner pathname={asPath} /> <HomeHero heroImg={hero} className="w-full" /> - <Stack className="flex flex-col gap-16 px-4 sm:px-6 md:gap-32"> + <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> <div className="my-20 grid w-full grid-cols-2 gap-x-4 gap-y-8 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( <Fragment key={label}> @@ -721,7 +720,7 @@ const HomePage = ({ </div> </div> </div> - </Stack> + </div> </Flex> ) } From 63452212ed7468b3d8c330fba161419fd33facbf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:10:34 -0700 Subject: [PATCH 213/273] performance: lazy load Codeblock and StatsBoxGrid --- src/pages/index.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 0a5cefd7a7a..c689414b6b1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,4 @@ -import { Fragment, Suspense, useState } from "react" +import { Fragment, lazy, Suspense, useState } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" import NextImage from "next/image" import { useRouter } from "next/router" @@ -20,7 +20,6 @@ import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import BentoBox from "@/components/BentoBox" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" -import Codeblock from "@/components/Codeblock" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" import PostPreviewCard from "@/components/Homepage/PostPreviewCard" @@ -39,7 +38,6 @@ import { TwImage } from "@/components/Image" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import PostsSwiper from "@/components/PostsSwiper" -import StatsBoxGrid from "@/components/StatsBoxGrid" import SwiperCards from "@/components/SwiperCards" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import { ButtonLink } from "@/components/ui/buttons/Button" @@ -101,6 +99,17 @@ import learnImage from "@/public/images/heroes/learn-hub-hero.png" import communityImage from "@/public/images/heroes/quizzes-hub-hero.png" import hero from "@/public/images/home/hero.png" +// lazy loaded components +const Codeblock = lazy(() => + Promise.all([ + import("@/components/Codeblock"), + // Add a delay to prevent the skeleton from flashing + new Promise((resolve) => setTimeout(resolve, 1000)), + ]).then(([module]) => module) +) + +const StatsBoxGrid = lazy(() => import("@/components/StatsBoxGrid")) + const cachedEthPrice = runOnlyOnce(fetchEthPrice) const cachedFetchTotalEthStaked = runOnlyOnce(fetchTotalEthStaked) const cachedFetchTotalValueLocked = runOnlyOnce(fetchTotalValueLocked) From b0b809babdb5d73147f52d1cf3cf188c0c83e8ba Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:12:08 -0700 Subject: [PATCH 214/273] refactor: use capitalized component names image imports treated as components --- src/pages/index.tsx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c689414b6b1..11dbc641594 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -93,11 +93,11 @@ import { fetchRSS } from "@/lib/api/fetchRSS" import { fetchTotalEthStaked } from "@/lib/api/fetchTotalEthStaked" import { fetchTotalValueLocked } from "@/lib/api/fetchTotalValueLocked" import EventFallback from "@/public/images/events/event-placeholder.png" -import buildersImage from "@/public/images/heroes/developers-hub-hero.jpg" -import activityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" -import learnImage from "@/public/images/heroes/learn-hub-hero.png" -import communityImage from "@/public/images/heroes/quizzes-hub-hero.png" -import hero from "@/public/images/home/hero.png" +import BuildersImage from "@/public/images/heroes/developers-hub-hero.jpg" +import ActivityImage from "@/public/images/heroes/layer-2-hub-hero.jpg" +import LearnImage from "@/public/images/heroes/learn-hub-hero.png" +import CommunityImage from "@/public/images/heroes/quizzes-hub-hero.png" +import Hero from "@/public/images/home/hero.png" // lazy loaded components const Codeblock = lazy(() => @@ -351,7 +351,7 @@ const HomePage = ({ description={t("page-index:page-index-meta-description")} /> <TranslatathonBanner pathname={asPath} /> - <HomeHero heroImg={hero} className="w-full" /> + <HomeHero heroImg={Hero} className="w-full" /> <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> <div className="my-20 grid w-full grid-cols-2 gap-x-4 gap-y-8 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( @@ -386,7 +386,7 @@ const HomePage = ({ <Section> <SectionBanner> - <NextImage src={activityImage} alt="" /> + <NextImage src={ActivityImage} alt="" /> </SectionBanner> <SectionContent> @@ -405,7 +405,7 @@ const HomePage = ({ <Section className="md:flex-row-reverse"> <SectionBanner> - <NextImage src={learnImage} alt="" /> + <NextImage src={LearnImage} alt="" /> </SectionBanner> <SectionContent> @@ -450,7 +450,7 @@ const HomePage = ({ <Section> <SectionBanner> - <NextImage src={buildersImage} alt="" /> + <NextImage src={BuildersImage} alt="" /> </SectionBanner> <SectionContent> @@ -518,7 +518,7 @@ const HomePage = ({ <Section className="md:flex-row-reverse"> <SectionBanner> - <NextImage src={communityImage} alt="" /> + <NextImage src={CommunityImage} alt="" /> </SectionBanner> <SectionContent> From 5330c49e775d3121dcaafc5c83d0de3fbc265f59 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:15:20 -0700 Subject: [PATCH 215/273] refactor: CommunityBlog type, require feed OR name If feed present, name not needed (fetched from feed); if no feed, name required. href to blog always required --- src/lib/constants.ts | 7 ------- src/lib/types.ts | 4 +--- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index b0e784f7493..bcf83f4dfc5 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -168,38 +168,31 @@ export const _0X_PARC_FEED = "https://rss.app/feeds/cWXGYts0ZM8C3F6t.xml" export const COMMUNITY_BLOGS: CommunityBlog[] = [ { - name: "Vitalik Buterin", href: "https://vitalik.eth.limo/", feed: VITALIK_FEED, }, { - name: "Ethereum Foundation", href: "https://blog.ethereum.org/", feed: "https://blog.ethereum.org/en/feed.xml", }, { - name: "ethPandaOps", href: "https://ethpandaops.io/posts/", feed: "https://ethpandaops.io/posts/index.xml", }, { - name: "EthStaker", href: "https://ethstaker.cc/blog", feed: "https://paragraph.xyz/api/blogs/rss/@ethstaker", }, { - name: "0xParc", href: "https://0xparc.org/blog", feed: _0X_PARC_FEED, }, { - name: "Attestant", href: "https://www.attestant.io/posts/", feed: "https://www.attestant.io/posts/", }, { name: "Devcon", href: "https://devcon.org/en/blogs/" }, { - name: "Solidity", href: "https://soliditylang.org/blog/", feed: SOLIDITY_FEED, }, diff --git a/src/lib/types.ts b/src/lib/types.ts index 4a017a5ec70..d1652d7d21c 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -803,10 +803,8 @@ export type RSSResult = { } export type CommunityBlog = { - name: string href: string - feed?: string -} +} & ({ name: string; feed?: string } | { name?: string; feed: string }) type NestedDivs = { div: NestedDivs[] From bb817542d096c84413c5f849f113c3aec474697c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:22:04 -0700 Subject: [PATCH 216/273] chore: cleanup --- src/components/ui/section.tsx | 5 +---- src/lib/api/fetchRSS.ts | 2 +- src/styles/colors.css | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx index f3af75c27ce..dae777f80fc 100644 --- a/src/components/ui/section.tsx +++ b/src/components/ui/section.tsx @@ -8,10 +8,7 @@ const Section = React.forwardRef< >(({ className, ...props }, ref) => ( <div ref={ref} - className={cn( - "group/section flex flex-col gap-8 md:flex-row lg:gap-16", - className - )} + className={cn("flex flex-col gap-8 md:flex-row lg:gap-16", className)} {...props} /> )) diff --git a/src/lib/api/fetchRSS.ts b/src/lib/api/fetchRSS.ts index 2136a2f1c8e..c62c3e4a617 100644 --- a/src/lib/api/fetchRSS.ts +++ b/src/lib/api/fetchRSS.ts @@ -6,7 +6,7 @@ import { isValidDate } from "../utils/date" /** * Fetches RSS feed from the specified XML URL(s). * @param xmlUrl - The URL(s) of the XML feed to fetch. - * @returns An array of RSS items containing the publication date, title, link, and source. + * @returns An array sources, each containing an array of RSS items */ export const fetchRSS = async (xmlUrl: string | string[]) => { const urls = Array.isArray(xmlUrl) ? xmlUrl : [xmlUrl] diff --git a/src/styles/colors.css b/src/styles/colors.css index 3c4c30c927d..46942217230 100644 --- a/src/styles/colors.css +++ b/src/styles/colors.css @@ -61,7 +61,7 @@ --teal-600: 163, 88%, 39%; /* #0CB988 */ --teal-700: 163, 82%, 33%; /* #0F9971 */ --teal-800: 163, 93%, 21%; /* #04674B */ - --teal-900: 162, 97%, 13% /* #01422F */ + --teal-900: 162, 97%, 13%; /* #01422F */ --orange-100: 30, 100%, 94%; /* #FFF0DB */ --orange-200: 30, 100%, 82%; /* #FFD7A7 */ From 81ffc3c2a5a933c585bd5c52768e13b5d5db9385 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:22:39 -0700 Subject: [PATCH 217/273] chore: sync chakra theme; solid button and colors --- src/@chakra-ui/components/Button.ts | 4 +-- src/@chakra-ui/foundations/colors.ts | 53 ++++++++++++++-------------- src/@chakra-ui/semanticTokens.ts | 1 + 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/@chakra-ui/components/Button.ts b/src/@chakra-ui/components/Button.ts index 1b51d328012..6a04e1a0db1 100644 --- a/src/@chakra-ui/components/Button.ts +++ b/src/@chakra-ui/components/Button.ts @@ -44,8 +44,8 @@ const baseStyle = defineStyle({ }) const variantSolid = defineStyle({ - color: "background.base", - bg: "primary.base", + color: "white", + bg: "primary.action", borderColor: "transparent", _disabled: { bg: "disabled", diff --git a/src/@chakra-ui/foundations/colors.ts b/src/@chakra-ui/foundations/colors.ts index 760e76e4b4d..58f443a9282 100644 --- a/src/@chakra-ui/foundations/colors.ts +++ b/src/@chakra-ui/foundations/colors.ts @@ -2,41 +2,42 @@ export type Colors = typeof colors const colors = { gray: { - 100: "#F7F7F7", - 150: "#F2F2F2", - 200: "#E7E7E7", - 300: "#C8C8C8", + 50: "#f7f7f7", + 100: "#eeeeee", + 150: "#ececec", + 200: "#cecece", + 300: "#acacac", 400: "#8C8C8C", 500: "#616161", 600: "#333333", 700: "#222222", - 800: "#1B1B1B", - 900: "#141414", + 800: "#1b1b1b", + 900: "#121212", + 950: "#0a0a0a", }, blue: { - 50: "#F6F6FF", - 100: "#EBEBFF", - 200: "#D6D6FF", - 300: "#9999FF", - 400: "#5555FF", - 500: "#1C1CFF", - 600: "#0000E0", - 700: "#0000A3", - 800: "#000066", - 900: "#000029", + 50: "#F8FBFF", + 100: "#E8F1FF", + 200: "#CADFFB", + 300: "#88AAF1", + 400: "#6995F7", + 500: "#4473EF", + 600: "#3C4CEB", + 700: "#2B36A8", + 800: "#232F71", + 900: "#1B273A", }, orange: { 50: "#FFF3ED", - 100: "#FFE5D6", - 200: "#FFCBAD", - 300: "#FFB185", - 400: "#FF985C", - 500: "#FF7324", - 550: "#DF5A0E", - 600: "#B84300", - 700: "#7A2D00", - 800: "#521E00", - 900: "#2F1000", + 100: "#FFF0DB", + 200: "#FFD7A7", + 300: "#FEB077", + 400: "#FD8640", + 500: "#FB610E", + 600: "#EC4A0A", + 700: "#C4350A", + 800: "#7D2711", + 900: "#3A291D", }, purple: { 50: "#F3ECFF", diff --git a/src/@chakra-ui/semanticTokens.ts b/src/@chakra-ui/semanticTokens.ts index f66313c7be2..69729eaa013 100644 --- a/src/@chakra-ui/semanticTokens.ts +++ b/src/@chakra-ui/semanticTokens.ts @@ -38,6 +38,7 @@ const semanticTokens = { // Main Set primary: { base: { _light: "purple.600", _dark: "purple.400" }, + action: { _light: "purple.500", _dark: "purple.500" }, highContrast: { _light: "purple.800", _dark: "purple.200" }, lowContrast: { _light: "purple.100", _dark: "purple.900" }, hover: { _light: "purple.500", _dark: "purple.500" }, From b5df6340e41c4accb7afe3367596c19b1127bb63 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:47:31 -0700 Subject: [PATCH 218/273] chore: general polishes and cleanup --- src/components/BentoBox/BentoCard.tsx | 2 +- src/components/BentoBox/Title.tsx | 24 +++++++++++++++--------- src/components/BentoBox/useBentoBox.ts | 4 ++-- src/components/BigNumber/index.tsx | 4 +++- src/components/FeedbackCard.tsx | 2 +- src/components/Hero/HomeHero/index.tsx | 11 +++-------- src/components/PostsSwiper/index.tsx | 2 +- src/intl/en/common.json | 3 ++- src/intl/en/page-index.json | 3 ++- 9 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/components/BentoBox/BentoCard.tsx b/src/components/BentoBox/BentoCard.tsx index 1a2f2ca662c..3d6a4d99e7b 100644 --- a/src/components/BentoBox/BentoCard.tsx +++ b/src/components/BentoBox/BentoCard.tsx @@ -32,7 +32,7 @@ const BentoCard = ({ className )} > - <div className="mb-6 grid place-items-center md:mb-auto"> + <div className="mb-6 grid place-items-center"> <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> </div> <div> diff --git a/src/components/BentoBox/Title.tsx b/src/components/BentoBox/Title.tsx index f0d5d2b6d02..a931a785644 100644 --- a/src/components/BentoBox/Title.tsx +++ b/src/components/BentoBox/Title.tsx @@ -1,16 +1,22 @@ +import { useTranslation } from "next-i18next" + import type { ClassNameProp } from "@/lib/types" import { cn } from "@/lib/utils/cn" -const Title = ({ className }: ClassNameProp) => ( - <div className={cn("flex flex-col", className)}> - <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> - Use Cases +const Title = ({ className }: ClassNameProp) => { + const { t } = useTranslation("page-index") + + return ( + <div className={cn("flex flex-col", className)}> + <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> + {t("common:nav-use-cases-label")} + </div> + <h2 className="mb-4 me-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> + {t("page-index-bento-header")} + </h2> </div> - <h2 className="mb-4 me-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> - A new way to use the internet - </h2> - </div> -) + ) +} export default Title diff --git a/src/components/BentoBox/useBentoBox.ts b/src/components/BentoBox/useBentoBox.ts index b63432320fc..d0d9375296f 100644 --- a/src/components/BentoBox/useBentoBox.ts +++ b/src/components/BentoBox/useBentoBox.ts @@ -1,5 +1,5 @@ import { useEffect, useState } from "react" -import { useTranslation } from "react-i18next" +import { useTranslation } from "next-i18next" import { cn } from "@/lib/utils/cn" @@ -63,7 +63,7 @@ export const useBentoBox = () => { action: t("page-index:page-index-bento-stablecoins-action"), href: "/stablecoins/", imgSrc: ImpactImage, - imgWidth: 400, // TODO: Fix tablet size alignment (aligning top, should be center?) + imgWidth: 400, className: cn( "border-primary/10", positions, diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx index 9f916e2056c..d276611edd4 100644 --- a/src/components/BigNumber/index.tsx +++ b/src/components/BigNumber/index.tsx @@ -55,7 +55,9 @@ const BigNumber = ({ <Link href={sourceUrl}>{sourceName}</Link> </p> {lastUpdated && ( - <p className="mt-2">Last updated: {lastUpdatedDisplay}</p> + <p className="mt-2"> + {t("last-updated")}: {lastUpdatedDisplay} + </p> )} </> } diff --git a/src/components/FeedbackCard.tsx b/src/components/FeedbackCard.tsx index 230935cc6b5..190325d2fb4 100644 --- a/src/components/FeedbackCard.tsx +++ b/src/components/FeedbackCard.tsx @@ -5,11 +5,11 @@ import { useTranslation } from "next-i18next" import type { Lang } from "@/lib/types" import { FeedbackThumbsUpIcon } from "@/components/icons" -import { Button } from "@/components/ui/buttons/Button" import { trackCustomEvent } from "@/lib/utils/matomo" import { isLangRightToLeft } from "@/lib/utils/translations" +import { Button } from "./ui/buttons/Button" import Translation from "./Translation" import { useSurvey } from "@/hooks/useSurvey" diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 8bb43b0bc35..2247880c6c8 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -23,15 +23,10 @@ const HomeHero = ({ heroImg, className }: HomeHeroProps) => { </div> <div className="flex flex-col items-center border-t-[3px] border-primary-low-contrast px-4 py-12 text-center"> <Morpher /> - <div className="flex flex-col items-center space-y-5 lg:max-w-2xl"> + <div className="flex flex-col items-center gap-y-5 lg:max-w-2xl"> <h1 className="font-black">{t("page-index:page-index-title")}</h1> - <p - className="max-w-96 text-body-medium" - // TODO: Match paragraph color to design - // TODO: Extract intl - > - The leading platform for innovative apps and Ethereum-backed - blockchain networks + <p className="max-w-96 text-body-medium"> + {t("page-index:page-index-description")} </p> </div> </div> diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx index 0a60cbed3cc..67e68a7a427 100644 --- a/src/components/PostsSwiper/index.tsx +++ b/src/components/PostsSwiper/index.tsx @@ -16,7 +16,7 @@ type PostsSwiperProps = ClassNameProp & { items: RSSItem[] } const PostsSwiper = ({ className, items }: PostsSwiperProps) => ( - <div className={cn("h-fit gap-8", className)}> + <div className={cn("h-fit", className)}> <Swiper navigation={{ nextEl: ".swiper-button-next", diff --git a/src/intl/en/common.json b/src/intl/en/common.json index 4eb2fc148cd..134b022c7b7 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -198,6 +198,7 @@ "languages": "Languages", "last-24-hrs": "Last 24 hours", "last-edit": "Last edit", + "last-updated": "Last updated", "layer-2": "Layer 2", "learn": "Learn", "learn-by-coding": "Learn by coding", @@ -431,4 +432,4 @@ "wrapped-ether": "Wrapped Ether", "yes": "Yes", "zero-knowledge-proofs": "Zero-knowledge proofs" -} +} \ No newline at end of file diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 3c938b2dc73..0c16df88e21 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -1,5 +1,4 @@ { - "page-index-description": "Ethereum is the community-run technology powering the cryptocurrency ether (ETH) and thousands of decentralized applications.", "page-index-title-button": "Explore Ethereum", "page-index-touts-header": "Explore ethereum.org", "page-index-contribution-banner-title": "Contribute to ethereum.org", @@ -66,6 +65,7 @@ "page-index-activity-description": "Activity from all Ethereum networks", "page-index-activity-tag": "Activity", "page-index-activity-title": "The strongest ecosystem", + "page-index-bento-header": "A new way to use the internet", "page-index-bento-assets-action": "More on NFTs", "page-index-bento-assets-content": "Arts, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", "page-index-bento-assets-title": "The internet of assets", @@ -103,6 +103,7 @@ "page-index-cta-networks-label": "Choose a network", "page-index-cta-wallet-description": "Create accounts, manage assets", "page-index-cta-wallet-label": "Pick a wallet", + "page-index-description": "The leading platform for innovative apps and Ethereum-backed blockchain networks", "page-index-developers-code-example-description-0": "Build a bank powered by logic you've programmed", "page-index-developers-code-example-description-1": "Create tokens that you can transfer and use across applications", "page-index-developers-code-example-description-2": "Use existing languages to interact with Ethereum and other applications", From 1903544791179003ff1117d1ed5b885a32861536 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 20:54:59 -0700 Subject: [PATCH 219/273] chore: apply bg gradients to WindowBox --- src/components/WindowBox/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/WindowBox/index.tsx b/src/components/WindowBox/index.tsx index a53c87d1b7f..da52cb65960 100644 --- a/src/components/WindowBox/index.tsx +++ b/src/components/WindowBox/index.tsx @@ -16,7 +16,7 @@ const WindowBox = ({ title, Svg, children, className }: WindowBoxProps) => ( className )} > - <div className="flex items-center gap-4 bg-primary-highlight-gradient p-4"> + <div className="flex items-center gap-4 bg-gradient-to-b from-primary-hover/5 p-4 dark:from-primary-hover/20"> <div className="grid size-10 place-items-center rounded-lg border"> <Svg /> </div> From ed64296e77b54bc0c1fa8ac2558eee86551d346c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:00:06 -0700 Subject: [PATCH 220/273] feat: use TwImage over NextImage --- src/components/BentoBox/BentoCard.tsx | 4 ++-- src/components/Hero/HomeHero/index.tsx | 5 +++-- src/pages/index.tsx | 9 ++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/BentoBox/BentoCard.tsx b/src/components/BentoBox/BentoCard.tsx index 3d6a4d99e7b..b7f23a0e3f0 100644 --- a/src/components/BentoBox/BentoCard.tsx +++ b/src/components/BentoBox/BentoCard.tsx @@ -1,8 +1,8 @@ import { HTMLAttributes } from "react" -import NextImage from "next/image" import { type StaticImageData } from "next/image" import { MdChevronRight } from "react-icons/md" +import { TwImage } from "@/components/Image" import { ButtonLink } from "@/components/ui/buttons/Button" import { cn } from "@/lib/utils/cn" @@ -33,7 +33,7 @@ const BentoCard = ({ )} > <div className="mb-6 grid place-items-center"> - <NextImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> + <TwImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> </div> <div> <h3 className="mb-2 text-3xl font-black">{title}</h3> diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 2247880c6c8..1f007f442af 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -1,18 +1,19 @@ -import NextImage from "next/image" import { useTranslation } from "next-i18next" import type { ClassNameProp, CommonHeroProps } from "@/lib/types" +import { TwImage } from "@/components/Image" import Morpher from "@/components/Morpher" export type HomeHeroProps = Pick<CommonHeroProps, "heroImg"> & ClassNameProp const HomeHero = ({ heroImg, className }: HomeHeroProps) => { const { t } = useTranslation("page-index") + return ( <div className={className}> <div className="h-[300px] sm:h-[350px] md:h-[380px] lg:h-[440px]"> - <NextImage + <TwImage src={heroImg} alt={t("page-index:page-index-hero-image-alt")} // TODO: adjust value when the old theme breakpoints are removed (src/theme.ts) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 11dbc641594..f27b785ff01 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,6 +1,5 @@ import { Fragment, lazy, Suspense, useState } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" -import NextImage from "next/image" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" @@ -386,7 +385,7 @@ const HomePage = ({ <Section> <SectionBanner> - <NextImage src={ActivityImage} alt="" /> + <TwImage src={ActivityImage} alt="" /> </SectionBanner> <SectionContent> @@ -405,7 +404,7 @@ const HomePage = ({ <Section className="md:flex-row-reverse"> <SectionBanner> - <NextImage src={LearnImage} alt="" /> + <TwImage src={LearnImage} alt="" /> </SectionBanner> <SectionContent> @@ -450,7 +449,7 @@ const HomePage = ({ <Section> <SectionBanner> - <NextImage src={BuildersImage} alt="" /> + <TwImage src={BuildersImage} alt="" /> </SectionBanner> <SectionContent> @@ -518,7 +517,7 @@ const HomePage = ({ <Section className="md:flex-row-reverse"> <SectionBanner> - <NextImage src={CommunityImage} alt="" /> + <TwImage src={CommunityImage} alt="" /> </SectionBanner> <SectionContent> From 4484598ec065068ec6a7d37c16a3bb3e2d6abf04 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:13:29 -0700 Subject: [PATCH 221/273] deprecate: recently added linear gradient tokens --- src/styles/global.css | 8 +------- src/styles/semantic-tokens.css | 33 +++++---------------------------- tailwind.config.ts | 5 ----- 3 files changed, 6 insertions(+), 40 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index 9ee36278b4d..3570c7d2234 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -54,12 +54,6 @@ 0 10px 17px rgba(0, 0, 0, 0.03), 0 4px 7px rgba(0, 0, 0, 0.05); --table-item-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - --primary-highlight-gradient: linear-gradient( - 180deg, - rgba(167, 121, 226, 0.05) 0%, - rgba(167, 121, 226, 0) 100% - ); - --gradient-banner: radial-gradient( 155% 100% at 50% 0%, rgba(201, 179, 245, 0.16) 0%, @@ -220,7 +214,7 @@ } .swiper-pagination { - @apply relative mt-8 mx-auto flex h-[26px] max-w-48 items-center justify-center rounded-full bg-background-highlight; + @apply relative mx-auto mt-8 flex h-[26px] max-w-48 items-center justify-center rounded-full bg-background-highlight; } .swiper-pagination .swiper-pagination-bullet { diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index befe3a7f1d2..6139b37b3f2 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -28,31 +28,11 @@ --accent-b-hover: var(--pink-500); --accent-c-hover: var(--teal-600); - /* Gradients */ - --gradient-primary-angle: 90deg; - --gradient-primary-opacity-from: 0.1; - --gradient-primary-opacity-to: 0.05; - --gradient-primary: linear-gradient( - var(--gradient-primary-angle), - hsla(var(--purple-500), var(--gradient-primary-opacity-from)) 19.09%, - hsla(var(--purple-500), var(--gradient-primary-opacity-to)) 40.63% - ); - --gradient-accent-a: linear-gradient( - var(--gradient-primary-angle), - hsla(var(--blue-500), var(--gradient-primary-opacity-from)) 19.09%, - hsla(var(--blue-500), var(--gradient-primary-opacity-to)) 40.63% - ); - --gradient-accent-b: linear-gradient( - var(--gradient-primary-angle), - hsla(var(--pink-500), var(--gradient-primary-opacity-from)) 19.09%, - hsla(var(--pink-500), var(--gradient-primary-opacity-to)) 40.63% - ); - --gradient-accent-c: linear-gradient( - var(--gradient-primary-angle), - hsla(var(--teal-500), var(--gradient-primary-opacity-from)) 19.09%, - hsla(var(--teal-500), var(--gradient-primary-opacity-to)) 40.63% - ); - + /** + /* Gradients (radial, conic) + /* For linear-gradient, Tailwind classes preferred + /* https://tailwindcss.com/docs/background-image#linear-gradients + */ --radial-a-opacity-1: 0.08; --radial-a-opacity-2: 0.24; --radial-a: radial-gradient( @@ -121,9 +101,6 @@ --accent-c-hover: var(--teal-300); /* Gradients (dark mode adjustments) */ - --gradient-primary-angle: 180deg; - --gradient-primary-opacity-to: 0.2; - --radial-a-opacity-1: 0.16; --radial-a-opacity-2: 0.48; diff --git a/tailwind.config.ts b/tailwind.config.ts index 2d0f797d838..85cf80ee976 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -177,12 +177,7 @@ const config = { }, backgroundImage: { "gradient-main": "var(--gradient-main)", - "primary-highlight-gradient": "var(--primary-highlight-gradient)", "gradient-banner": "var(--gradient-banner)", - "gradient-primary": "var(--gradient-primary)", - "gradient-accent-a": "var(--gradient-accent-a)", - "gradient-accent-b": "var(--gradient-accent-b)", - "gradient-accent-c": "var(--gradient-accent-c)", "main-gradient": "var(--gradient-main)", // TODO: Duplicate; remove one "feedback-gradient": "var(--feedback-gradient)", "banner-grid-gradient": "var(--banner-grid-gradient)", From 7e74dbf4a0614ea9e719b2798ba585861d6e93ed Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:21:28 -0700 Subject: [PATCH 222/273] chore: rm unnecessary placeholder div --- src/components/PostsSwiper/index.tsx | 1 - src/components/SwiperCards/index.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx index 67e68a7a427..7685f8bf533 100644 --- a/src/components/PostsSwiper/index.tsx +++ b/src/components/PostsSwiper/index.tsx @@ -34,7 +34,6 @@ const PostsSwiper = ({ className, items }: PostsSwiperProps) => ( ))} <MdChevronLeft className="swiper-button-prev" /> - <div className="swiper-pagination" /> <MdChevronRight className="swiper-button-next" /> </Swiper> </div> diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx index 81d185dd2b4..4215b5781f7 100644 --- a/src/components/SwiperCards/index.tsx +++ b/src/components/SwiperCards/index.tsx @@ -50,7 +50,6 @@ const SwiperCards = ({ className }: ClassNameProp) => { ))} <MdChevronLeft className="swiper-button-prev" /> - <div className="swiper-pagination" /> <MdChevronRight className="swiper-button-next" /> </Swiper> </div> From e05abaecd796fd5110f73e7c28a5282324f71e56 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:21:38 -0700 Subject: [PATCH 223/273] chore: punctuation patch --- src/intl/en/page-index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 0c16df88e21..273c560f079 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -120,7 +120,7 @@ "page-index-join-action-contribute-description": "Find out all the different ways you can help ethereum.org grow and be better.", "page-index-join-action-contribute-label": "How to contribute", "page-index-join-action-discord-description": "To ask questions, coordinate contribution and join community calls.", - "page-index-join-action-github-description": "Contribute to code, content, articles etc.", + "page-index-join-action-github-description": "Contribute to code, content, articles, etc.", "page-index-join-action-twitter-description": "To keep up with our updates and important news.", "page-index-join-description": "This website is open source with hundreds of community contributors. You can propose edits to any of the content on this site.", "page-index-join-header": "Join ethereum.org", From b3df3728991adb9689bae8422fa9e4e21f6b0a10 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:25:36 -0700 Subject: [PATCH 224/273] Revert "chore: rm unnecessary placeholder div" This reverts commit 7e74dbf4a0614ea9e719b2798ba585861d6e93ed. --- src/components/PostsSwiper/index.tsx | 1 + src/components/SwiperCards/index.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx index 7685f8bf533..67e68a7a427 100644 --- a/src/components/PostsSwiper/index.tsx +++ b/src/components/PostsSwiper/index.tsx @@ -34,6 +34,7 @@ const PostsSwiper = ({ className, items }: PostsSwiperProps) => ( ))} <MdChevronLeft className="swiper-button-prev" /> + <div className="swiper-pagination" /> <MdChevronRight className="swiper-button-next" /> </Swiper> </div> diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx index 4215b5781f7..81d185dd2b4 100644 --- a/src/components/SwiperCards/index.tsx +++ b/src/components/SwiperCards/index.tsx @@ -50,6 +50,7 @@ const SwiperCards = ({ className }: ClassNameProp) => { ))} <MdChevronLeft className="swiper-button-prev" /> + <div className="swiper-pagination" /> <MdChevronRight className="swiper-button-next" /> </Swiper> </div> From 38c1cc84bf6fc17fe3a49bd629d04c0f547e54e0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 30 Aug 2024 12:00:43 -0700 Subject: [PATCH 225/273] chore: apply adjustments from review --- src/components/BentoBox/BentoCard.tsx | 2 +- src/components/BentoBox/useBentoBox.ts | 1 - src/components/icons/eth-glyph.svg | 5 +++++ src/intl/en/page-index.json | 6 +++--- src/lib/constants.ts | 5 +++++ src/pages/index.tsx | 8 ++++---- 6 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 src/components/icons/eth-glyph.svg diff --git a/src/components/BentoBox/BentoCard.tsx b/src/components/BentoBox/BentoCard.tsx index b7f23a0e3f0..871db770da7 100644 --- a/src/components/BentoBox/BentoCard.tsx +++ b/src/components/BentoBox/BentoCard.tsx @@ -38,7 +38,7 @@ const BentoCard = ({ <div> <h3 className="mb-2 text-3xl font-black">{title}</h3> <p className="mb-8 text-md">{children}</p> - <ButtonLink href={href} size="lg" variant="outline"> + <ButtonLink href={href} variant="outline"> {action} <MdChevronRight /> </ButtonLink> </div> diff --git a/src/components/BentoBox/useBentoBox.ts b/src/components/BentoBox/useBentoBox.ts index d0d9375296f..efb69018082 100644 --- a/src/components/BentoBox/useBentoBox.ts +++ b/src/components/BentoBox/useBentoBox.ts @@ -75,7 +75,6 @@ export const useBentoBox = () => { "xl:col-span-7 xl:col-start-5 xl:row-start-1" ), }, - { title: t("page-index:page-index-bento-defi-title"), children: t("page-index:page-index-bento-defi-content"), diff --git a/src/components/icons/eth-glyph.svg b/src/components/icons/eth-glyph.svg new file mode 100644 index 00000000000..0d15d4f95d4 --- /dev/null +++ b/src/components/icons/eth-glyph.svg @@ -0,0 +1,5 @@ +<svg width="1em" height="1em" viewBox="0 0 33 49" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M31.745 27.446L16.6083 36.2503V47.5212L31.745 27.446ZM28.798 30.0589L16.9963 36.9234V45.711L28.798 30.0589Z" fill="currentcolor"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M1.46738 27.4467L1.46937 27.4493L1.46635 27.4476L16.6029 47.5226L16.6032 36.2505L1.46738 27.4467ZM4.40834 30.0591L16.2158 45.7188V36.9269L16.2108 36.924L4.40834 30.0591Z" fill="currentcolor"/> +<path d="M1.46582 25.1172L16.604 1.36035L16.6046 1.36129V18.3848L1.46582 25.1172ZM1.46582 25.1172L1.46985 25.116L16.6075 18.3853M1.46582 25.1172L1.47517 25.123L16.6075 33.733M16.6075 33.733V18.3853M16.6075 33.733L31.7401 25.1235L31.7488 25.1178L31.7452 25.1162M16.6075 18.3853L31.7447 25.1154L31.7452 25.1162M16.6075 18.3853L16.6083 1.36147L31.7452 25.1162M16.6075 18.3853L31.7472 25.1174L31.7452 25.1162M16.6083 36.2503L31.745 27.446L16.6083 47.5212V36.2503ZM16.9963 36.9234L28.798 30.0589L16.9963 45.711V36.9234ZM1.46738 27.4467L1.46937 27.4493L1.46635 27.4476L16.6029 47.5226L16.6032 36.2505L1.46738 27.4467ZM16.2158 45.7188L4.40834 30.0591L16.2108 36.924L16.2158 36.9269V45.7188ZM16.2143 3.43365V18.132L3.1447 23.9442L16.2143 3.43365ZM16.2187 32.6317L2.75441 24.9708L16.2187 18.9842V32.6317ZM30.4605 24.9708L16.9963 32.6317V18.9842L30.4605 24.9708ZM30.0659 23.9444L16.9963 18.1322V3.43383L30.0659 23.9444Z" stroke="currentcolor" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 0c16df88e21..01aec1cf3bf 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -120,7 +120,7 @@ "page-index-join-action-contribute-description": "Find out all the different ways you can help ethereum.org grow and be better.", "page-index-join-action-contribute-label": "How to contribute", "page-index-join-action-discord-description": "To ask questions, coordinate contribution and join community calls.", - "page-index-join-action-github-description": "Contribute to code, content, articles etc.", + "page-index-join-action-github-description": "Contribute to code, content, articles, etc.", "page-index-join-action-twitter-description": "To keep up with our updates and important news.", "page-index-join-description": "This website is open source with hundreds of community contributors. You can propose edits to any of the content on this site.", "page-index-join-header": "Join ethereum.org", @@ -140,9 +140,9 @@ "page-index-network-stats-value-defi-explainer": "The amount of money in decentralized finance (DeFi) applications, the Ethereum digital economy.", "page-index-popular-topics-ethereum": "What is Ethereum?", "page-index-popular-topics-header": "Popular topics", - "page-index-popular-topics-action": "Start learning", + "page-index-popular-topics-action": "Other topics", "page-index-popular-topics-roadmap": "Ethereum roadmap", - "page-index-popular-topics-start": "How to start? (step by step)", + "page-index-popular-topics-start": "How to start, step by step", "page-index-popular-topics-wallets": "What are crypto wallets?", "page-index-popular-topics-whitepaper": "Ethereum Whitepaper", "page-index-posts-action": "Read more on these websites", diff --git a/src/lib/constants.ts b/src/lib/constants.ts index bcf83f4dfc5..c725eed204f 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -201,6 +201,11 @@ export const COMMUNITY_BLOGS: CommunityBlog[] = [ href: "https://mirror.xyz/privacy-scaling-explorations.eth", // feed: "https://mirror.xyz/privacy-scaling-explorations.eth/feed/atom", // Old xml format }, + // { + // href: "https://stark.mirror.xyz/", + // feed: "https://stark.mirror.xyz/feed/atom", // Old xml format + // }, + // TODO: Add support for old xml format, re-enable above when ready ] export const BLOG_FEEDS = COMMUNITY_BLOGS.map(({ feed }) => feed).filter( diff --git a/src/pages/index.tsx b/src/pages/index.tsx index f27b785ff01..b421c4b1af8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -26,9 +26,9 @@ import AngleBrackets from "@/components/icons/angle-brackets.svg" import BlockHeap from "@/components/icons/block-heap.svg" import Calendar from "@/components/icons/calendar.svg" import CalendarAdd from "@/components/icons/calendar-add.svg" +import EthGlyphIcon from "@/components/icons/eth-glyph.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" -import Layer2Icon from "@/components/icons/layer-2.svg" import ChooseNetworkIcon from "@/components/icons/network-layers.svg" import TryAppsIcon from "@/components/icons/phone-homescreen.svg" import RoadmapSign from "@/components/icons/roadmap-sign.svg" @@ -306,7 +306,7 @@ const HomePage = ({ const joinActions = [ { - Svg: Layer2Icon, + Svg: EthGlyphIcon, label: t("page-index:page-index-join-action-contribute-label"), href: "/contributing/", className: "text-accent-c hover:text-accent-c-hover", @@ -435,7 +435,7 @@ const HomePage = ({ ))} </div> <div className="flex justify-center py-8 md:justify-start"> - <ButtonLink href="/learn/" size="lg"> + <ButtonLink href="/learn/" size="lg" variant="outline"> {t("page-index:page-index-popular-topics-action")}{" "} <MdChevronRight /> </ButtonLink> @@ -705,7 +705,7 @@ const HomePage = ({ "relative inset-0 rounded-4xl bg-background" // Paint background color over card portion )} > - <div className="mb-12 flex flex-col gap-y-8 rounded-4xl bg-radial-a px-4 py-8 lg:mb-32 xl:mb-36"> + <div className="mb-12 flex flex-col gap-y-8 rounded-4xl bg-radial-a px-8 py-12 lg:mb-32 xl:mb-36"> <div className="flex flex-col gap-y-4 text-center"> <h2>{t("page-index:page-index-join-header")}</h2> <p>{t("page-index:page-index-join-description")}</p> From 2d5e079e882b35f43b09c2df55a270f2251c03c3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 30 Aug 2024 12:06:13 -0700 Subject: [PATCH 226/273] theme: adjust hover tokens --- src/styles/semantic-tokens.css | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 6139b37b3f2..9a197e29c38 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -22,10 +22,12 @@ --primary-action-hover: var(--purple-700); --accent-a: var(--blue-600); - --accent-b: var(--pink-600); - --accent-c: var(--teal-700); --accent-a-hover: var(--blue-500); + + --accent-b: var(--pink-600); --accent-b-hover: var(--pink-500); + + --accent-c: var(--teal-700); --accent-c-hover: var(--teal-600); /** @@ -90,14 +92,18 @@ --primary: var(--purple-400); --primary-high-contrast: var(--purple-200); --primary-low-contrast: var(--purple-900); - --primary-visited: var(--purple-300); + --primary-hover: var(--purple-300); + --primary-visited: var(--purple-500); --primary-action-hover: var(--purple-600); + /* TODO: hover same as action in dark mode: */ --accent-a: var(--blue-400); - --accent-b: var(--pink-400); - --accent-c: var(--teal-400); --accent-a-hover: var(--blue-300); + + --accent-b: var(--pink-400); --accent-b-hover: var(--pink-300); + + --accent-c: var(--teal-400); --accent-c-hover: var(--teal-300); /* Gradients (dark mode adjustments) */ From 341ed45c69861b76dd8f76282f5f609fc77e3494 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 30 Aug 2024 16:27:31 -0700 Subject: [PATCH 227/273] copy: adjustments --- src/intl/en/page-index.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index 01aec1cf3bf..f4318fccf9b 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -67,7 +67,7 @@ "page-index-activity-title": "The strongest ecosystem", "page-index-bento-header": "A new way to use the internet", "page-index-bento-assets-action": "More on NFTs", - "page-index-bento-assets-content": "Arts, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", + "page-index-bento-assets-content": "Art, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", "page-index-bento-assets-title": "The internet of assets", "page-index-bento-dapps-action": "Browse apps", "page-index-bento-dapps-content": "Ethereum apps work without selling your data. Protect your privacy.", @@ -115,7 +115,7 @@ "page-index-developers-code-examples": "Code examples", "page-index-events-action": "See all events", "page-index-events-header": "Events", - "page-index-events-subtitle": "We have many community events scheduled around the globe", + "page-index-events-subtitle": "Ethereum communities host events all around the globe, all year long", "page-index-hero-image-alt": "An illustration of a futuristic city, representing the Ethereum ecosystem.", "page-index-join-action-contribute-description": "Find out all the different ways you can help ethereum.org grow and be better.", "page-index-join-action-contribute-label": "How to contribute", @@ -126,7 +126,7 @@ "page-index-join-header": "Join ethereum.org", "page-index-learn-description": "Crypto can feel overwhelming. Don't worry, these materials are designed to help you understand Ethereum in just a few minutes.", "page-index-learn-tag": "Learn", - "page-index-learn-title": "Understanding Ethereum", + "page-index-learn-title": "Understand Ethereum", "page-index-meta-description": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.", "page-index-meta-title": "Home", "page-index-network-stats-subtitle": "The latest network statistics", From 42cdff442222206b93a189b343224d7dc73d80fb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 30 Aug 2024 19:56:36 -0700 Subject: [PATCH 228/273] refactor: extract homepage logic to useHome --- src/components/Homepage/useHome.ts | 196 ++++++++++++++++++++++++++ src/lib/constants.ts | 3 + src/pages/index.tsx | 214 ++++------------------------- 3 files changed, 228 insertions(+), 185 deletions(-) create mode 100644 src/components/Homepage/useHome.ts diff --git a/src/components/Homepage/useHome.ts b/src/components/Homepage/useHome.ts new file mode 100644 index 00000000000..981fe20194e --- /dev/null +++ b/src/components/Homepage/useHome.ts @@ -0,0 +1,196 @@ +import { useState } from "react" +import { useRouter } from "next/router" +import { useTranslation } from "next-i18next" +import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6" + +import { EventCardProps, Lang } from "@/lib/types" +import { CodeExample } from "@/lib/interfaces" + +import BlockHeap from "@/components/icons/block-heap.svg" +import EthGlyphIcon from "@/components/icons/eth-glyph.svg" +import EthTokenIcon from "@/components/icons/eth-token.svg" +import PickWalletIcon from "@/components/icons/eth-wallet.svg" +import ChooseNetworkIcon from "@/components/icons/network-layers.svg" +import TryAppsIcon from "@/components/icons/phone-homescreen.svg" +import RoadmapSign from "@/components/icons/roadmap-sign.svg" +import Whitepaper from "@/components/icons/whitepaper.svg" + +import { isValidDate } from "@/lib/utils/date" +import { isLangRightToLeft } from "@/lib/utils/translations" + +import events from "@/data/community-events.json" + +import { GITHUB_REPO_URL } from "@/lib/constants" + +import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" +import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" +import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" +import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" + +export const useHome = () => { + const { t } = useTranslation(["common", "page-index"]) + const { locale, asPath } = useRouter() + const dir = isLangRightToLeft(locale as Lang) ? "rtl" : "ltr" + + const [isModalOpen, setModalOpen] = useState(false) + const [activeCode, setActiveCode] = useState(0) + + const toggleCodeExample = (id: number): void => { + setActiveCode(id) + setModalOpen(true) + } + + const codeExamples: CodeExample[] = [ + { + title: t("page-index:page-index-developers-code-example-title-0"), + description: t( + "page-index:page-index-developers-code-example-description-0" + ), + codeLanguage: "language-solidity", + code: SimpleWalletContent, + }, + { + title: t("page-index:page-index-developers-code-example-title-1"), + description: t( + "page-index:page-index-developers-code-example-description-1" + ), + codeLanguage: "language-solidity", + code: SimpleTokenContent, + }, + { + title: t("page-index:page-index-developers-code-example-title-2"), + description: t( + "page-index:page-index-developers-code-example-description-2" + ), + codeLanguage: "language-javascript", + code: CreateWalletContent, + }, + { + title: t("page-index:page-index-developers-code-example-title-3"), + description: t( + "page-index:page-index-developers-code-example-description-3" + ), + codeLanguage: "language-solidity", + code: SimpleDomainRegistryContent, + }, + ] + + const subHeroCTAs = [ + { + label: t("page-index:page-index-cta-wallet-label"), + description: t("page-index:page-index-cta-wallet-description"), + href: "/wallets/find-wallet/", + Svg: PickWalletIcon, + className: "text-primary hover:text-primary-hover", // TODO: Confirm hover style + }, + { + label: t("page-index:page-index-cta-get-eth-label"), + description: t("page-index:page-index-cta-get-eth-description"), + href: "/get-eth/", + Svg: EthTokenIcon, + className: "text-accent-a hover:text-accent-a-hover", + }, + { + label: t("page-index:page-index-cta-networks-label"), + description: t("page-index:page-index-cta-networks-description"), + href: "/layer-2/", // TODO: Update with new networks page when ready + Svg: ChooseNetworkIcon, + className: "text-accent-b hover:text-accent-b-hover", + }, + { + label: t("page-index:page-index-cta-dapps-label"), + description: t("page-index:page-index-cta-dapps-description"), + href: "/dapps/", + Svg: TryAppsIcon, + className: "text-accent-c hover:text-accent-c-hover", + }, + ] + + const popularTopics = [ + { + label: t("page-index:page-index-popular-topics-ethereum"), + Svg: EthTokenIcon, + href: "/what-is-ethereum/", + }, + { + label: t("page-index:page-index-popular-topics-wallets"), + Svg: PickWalletIcon, + href: "/wallets/", + }, + { + label: t("page-index:page-index-popular-topics-start"), + Svg: BlockHeap, + href: "/guides/", + }, + { + label: t("page-index:page-index-popular-topics-whitepaper"), + Svg: Whitepaper, + href: "/whitepaper/", + }, + { + label: t("page-index:page-index-popular-topics-roadmap"), + Svg: RoadmapSign, + href: "/roadmap/", + }, + ] + + const upcomingEvents = events + .filter((event) => { + const isValid = isValidDate(event.endDate) + const isUpcoming = + new Date(event.endDate).getTime() > new Date().getTime() + return isValid && isUpcoming + }) + .sort( + (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() + ) + .slice(0, 3) as EventCardProps[] // Show 3 events ending soonest + + const joinActions = [ + { + Svg: EthGlyphIcon, + label: t("page-index:page-index-join-action-contribute-label"), + href: "/contributing/", + className: "text-accent-c hover:text-accent-c-hover", + description: t( + "page-index:page-index-join-action-contribute-description" + ), + }, + { + Svg: FaGithub, + label: "GitHub", + href: GITHUB_REPO_URL, + className: "text-accent-a hover:text-accent-a-hover", + description: t("page-index:page-index-join-action-github-description"), + }, + { + Svg: FaDiscord, + label: "Discord", + href: "/discord/", + className: "text-primary hover:text-primary-hover", + description: t("page-index:page-index-join-action-discord-description"), + }, + { + Svg: FaXTwitter, + label: "X", + href: "https://x.com/EthDotOrg", + className: "text-accent-b hover:text-accent-b-hover", + description: t("page-index:page-index-join-action-twitter-description"), + }, + ] + return { + t, + locale, + asPath, + dir, + isModalOpen, + setModalOpen, + activeCode, + toggleCodeExample, + codeExamples, + subHeroCTAs, + popularTopics, + upcomingEvents, + joinActions, + } +} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index c725eed204f..6dbf0695175 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -159,6 +159,9 @@ export const DESKTOP_LANGUAGE_BUTTON_NAME = "desktop-language-button" // Codeblock export const LINES_BEFORE_COLLAPSABLE = 8 +// Ethereum.org community +export const CALENDAR_DISPLAY_COUNT = 4 + // RSS Feeds export const RSS_DISPLAY_COUNT = 3 diff --git a/src/pages/index.tsx b/src/pages/index.tsx index b421c4b1af8..64e31fe4c34 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,9 +1,7 @@ -import { Fragment, lazy, Suspense, useState } from "react" +import { Fragment, lazy, Suspense } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" -import { useRouter } from "next/router" -import { useTranslation } from "next-i18next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6" +import { FaDiscord, FaGithub } from "react-icons/fa6" import { MdChevronRight } from "react-icons/md" import { Flex, Skeleton } from "@chakra-ui/react" @@ -11,28 +9,19 @@ import type { AllMetricData, BasePageProps, CommunityBlog, - EventCardProps, Lang, RSSItem, } from "@/lib/types" -import type { CodeExample, CommunityEventsReturnType } from "@/lib/interfaces" import BentoBox from "@/components/BentoBox" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" import PostPreviewCard from "@/components/Homepage/PostPreviewCard" +import { useHome } from "@/components/Homepage/useHome" import AngleBrackets from "@/components/icons/angle-brackets.svg" -import BlockHeap from "@/components/icons/block-heap.svg" import Calendar from "@/components/icons/calendar.svg" import CalendarAdd from "@/components/icons/calendar-add.svg" -import EthGlyphIcon from "@/components/icons/eth-glyph.svg" -import EthTokenIcon from "@/components/icons/eth-token.svg" -import PickWalletIcon from "@/components/icons/eth-wallet.svg" -import ChooseNetworkIcon from "@/components/icons/network-layers.svg" -import TryAppsIcon from "@/components/icons/phone-homescreen.svg" -import RoadmapSign from "@/components/icons/roadmap-sign.svg" -import Whitepaper from "@/components/icons/whitepaper.svg" import { TwImage } from "@/components/Image" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" @@ -65,25 +54,17 @@ import { getLastDeployDate } from "@/lib/utils/getLastDeployDate" import { polishRSSList } from "@/lib/utils/rss" import { runOnlyOnce } from "@/lib/utils/runOnlyOnce" import { getLocaleTimestamp } from "@/lib/utils/time" -import { - getRequiredNamespacesForPage, - isLangRightToLeft, -} from "@/lib/utils/translations" - -import events from "@/data/community-events.json" +import { getRequiredNamespacesForPage } from "@/lib/utils/translations" import { BASE_TIME_UNIT, BLOG_FEEDS, BLOGS_WITHOUT_FEED, + CALENDAR_DISPLAY_COUNT, GITHUB_REPO_URL, RSS_DISPLAY_COUNT, } from "@/lib/constants" -import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" -import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" -import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" -import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" import { fetchEthPrice } from "@/lib/api/fetchEthPrice" import { fetchGrowThePie } from "@/lib/api/fetchGrowThePie" @@ -118,7 +99,6 @@ const cachedGrowThePieData = runOnlyOnce(fetchGrowThePie) const cachedFetchCommunityEvents = runOnlyOnce(fetchCommunityEvents) type Props = BasePageProps & { - communityEvents: CommunityEventsReturnType metricResults: AllMetricData rssData: { rssItems: RSSItem[]; blogLinks: CommunityBlog[] } } @@ -134,6 +114,13 @@ export const getStaticProps = (async ({ locale }) => { } const communityEvents = await cachedFetchCommunityEvents() + const calendar = communityEvents.upcomingEventData + .sort((a, b) => { + const dateA = isValidDate(a.date) ? new Date(a.date).getTime() : -Infinity + const dateB = isValidDate(b.date) ? new Date(b.date).getTime() : -Infinity + return dateA - dateB + }) + .slice(0, CALENDAR_DISPLAY_COUNT) // load i18n required namespaces for the given page const requiredNamespaces = getRequiredNamespacesForPage("/") @@ -163,7 +150,7 @@ export const getStaticProps = (async ({ locale }) => { return { props: { ...(await serverSideTranslations(locale!, requiredNamespaces)), - communityEvents, + calendar, contentNotTranslated, lastDeployLocaleTimestamp, metricResults, @@ -174,168 +161,25 @@ export const getStaticProps = (async ({ locale }) => { }) satisfies GetStaticProps<Props> const HomePage = ({ - communityEvents, + calendar, metricResults, rssData: { rssItems, blogLinks }, }: InferGetStaticPropsType<typeof getStaticProps>) => { - const { t } = useTranslation(["common", "page-index"]) - const { locale, asPath } = useRouter() - const dir = isLangRightToLeft(locale as Lang) ? "rtl" : "ltr" - - const [isModalOpen, setModalOpen] = useState(false) - const [activeCode, setActiveCode] = useState(0) - - const toggleCodeExample = (id: number): void => { - setActiveCode(id) - setModalOpen(true) - } - - const codeExamples: CodeExample[] = [ - { - title: t("page-index:page-index-developers-code-example-title-0"), - description: t( - "page-index:page-index-developers-code-example-description-0" - ), - codeLanguage: "language-solidity", - code: SimpleWalletContent, - }, - { - title: t("page-index:page-index-developers-code-example-title-1"), - description: t( - "page-index:page-index-developers-code-example-description-1" - ), - codeLanguage: "language-solidity", - code: SimpleTokenContent, - }, - { - title: t("page-index:page-index-developers-code-example-title-2"), - description: t( - "page-index:page-index-developers-code-example-description-2" - ), - codeLanguage: "language-javascript", - code: CreateWalletContent, - }, - { - title: t("page-index:page-index-developers-code-example-title-3"), - description: t( - "page-index:page-index-developers-code-example-description-3" - ), - codeLanguage: "language-solidity", - code: SimpleDomainRegistryContent, - }, - ] - - const subHeroCTAs = [ - { - label: t("page-index:page-index-cta-wallet-label"), - description: t("page-index:page-index-cta-wallet-description"), - href: "/wallets/find-wallet/", - Svg: PickWalletIcon, - className: "text-primary hover:text-primary-hover", // TODO: Confirm hover style - }, - { - label: t("page-index:page-index-cta-get-eth-label"), - description: t("page-index:page-index-cta-get-eth-description"), - href: "/get-eth/", - Svg: EthTokenIcon, - className: "text-accent-a hover:text-accent-a-hover", - }, - { - label: t("page-index:page-index-cta-networks-label"), - description: t("page-index:page-index-cta-networks-description"), - href: "/layer-2/", // TODO: Update with new networks page when ready - Svg: ChooseNetworkIcon, - className: "text-accent-b hover:text-accent-b-hover", - }, - { - label: t("page-index:page-index-cta-dapps-label"), - description: t("page-index:page-index-cta-dapps-description"), - href: "/dapps/", - Svg: TryAppsIcon, - className: "text-accent-c hover:text-accent-c-hover", - }, - ] - - const popularTopics = [ - { - label: t("page-index:page-index-popular-topics-ethereum"), - Svg: EthTokenIcon, - href: "/what-is-ethereum/", - }, - { - label: t("page-index:page-index-popular-topics-wallets"), - Svg: PickWalletIcon, - href: "/wallets/", - }, - { - label: t("page-index:page-index-popular-topics-start"), - Svg: BlockHeap, - href: "/guides/", - }, - { - label: t("page-index:page-index-popular-topics-whitepaper"), - Svg: Whitepaper, - href: "/whitepaper/", - }, - { - label: t("page-index:page-index-popular-topics-roadmap"), - Svg: RoadmapSign, - href: "/roadmap/", - }, - ] - - const upcomingEvents = events - .filter((event) => { - const isValid = isValidDate(event.endDate) - const isUpcoming = - new Date(event.endDate).getTime() > new Date().getTime() - return isValid && isUpcoming - }) - .sort( - (a, b) => new Date(a.endDate).getTime() - new Date(b.endDate).getTime() - ) - .slice(0, 3) as EventCardProps[] // Show 3 events ending soonest - - const calendar = communityEvents.upcomingEventData - .sort((a, b) => { - const dateA = isValidDate(a.date) ? new Date(a.date).getTime() : -Infinity - const dateB = isValidDate(b.date) ? new Date(b.date).getTime() : -Infinity - return dateA - dateB - }) - .slice(0, 4) // Show next 4 events on the calendar - - const joinActions = [ - { - Svg: EthGlyphIcon, - label: t("page-index:page-index-join-action-contribute-label"), - href: "/contributing/", - className: "text-accent-c hover:text-accent-c-hover", - description: t( - "page-index:page-index-join-action-contribute-description" - ), - }, - { - Svg: FaGithub, - label: "GitHub", - href: GITHUB_REPO_URL, - className: "text-accent-a hover:text-accent-a-hover", - description: t("page-index:page-index-join-action-github-description"), - }, - { - Svg: FaDiscord, - label: "Discord", - href: "/discord/", - className: "text-primary hover:text-primary-hover", - description: t("page-index:page-index-join-action-discord-description"), - }, - { - Svg: FaXTwitter, - label: "X", - href: "https://x.com/EthDotOrg", - className: "text-accent-b hover:text-accent-b-hover", - description: t("page-index:page-index-join-action-twitter-description"), - }, - ] + const { + t, + locale, + asPath, + dir, + isModalOpen, + setModalOpen, + activeCode, + toggleCodeExample, + codeExamples, + subHeroCTAs, + popularTopics, + upcomingEvents, + joinActions, + } = useHome() return ( <Flex From 198f5e93abaf2bacd3ceee386a6fb80a235f5803 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 30 Aug 2024 20:16:46 -0700 Subject: [PATCH 229/273] chore: patch event logic, show events today --- src/components/Homepage/useHome.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/Homepage/useHome.ts b/src/components/Homepage/useHome.ts index 981fe20194e..b395a47a1f8 100644 --- a/src/components/Homepage/useHome.ts +++ b/src/components/Homepage/useHome.ts @@ -3,8 +3,8 @@ import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6" -import { EventCardProps, Lang } from "@/lib/types" -import { CodeExample } from "@/lib/interfaces" +import type { EventCardProps, Lang } from "@/lib/types" +import type { CodeExample } from "@/lib/interfaces" import BlockHeap from "@/components/icons/block-heap.svg" import EthGlyphIcon from "@/components/icons/eth-glyph.svg" @@ -137,8 +137,9 @@ export const useHome = () => { const upcomingEvents = events .filter((event) => { const isValid = isValidDate(event.endDate) - const isUpcoming = - new Date(event.endDate).getTime() > new Date().getTime() + const beginningOfEndDate = new Date(event.endDate).getTime() + const endOfEndDate = beginningOfEndDate + 24 * 60 * 60 * 1000 + const isUpcoming = endOfEndDate >= new Date().getTime() return isValid && isUpcoming }) .sort( From 02ec3ccf60050284fdb0c0db05e43006f79d0181 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 30 Aug 2024 20:16:55 -0700 Subject: [PATCH 230/273] chore: rm unused imports, linting --- src/components/BentoBox/index.tsx | 5 ----- src/components/SwiperCards/index.tsx | 1 + 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/BentoBox/index.tsx b/src/components/BentoBox/index.tsx index 912e1519ef3..3e347a1b18c 100644 --- a/src/components/BentoBox/index.tsx +++ b/src/components/BentoBox/index.tsx @@ -4,11 +4,6 @@ import BentoCard from "./BentoCard" import Title from "./Title" import { useBentoBox } from "./useBentoBox" -import "swiper/css" -import "swiper/css/effect-cards" -import "swiper/css/navigation" -import "swiper/css/pagination" - const BentoBox = ({ className }: ClassNameProp) => { const { items } = useBentoBox() diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx index 81d185dd2b4..f0525635197 100644 --- a/src/components/SwiperCards/index.tsx +++ b/src/components/SwiperCards/index.tsx @@ -17,6 +17,7 @@ import "swiper/css/pagination" const SwiperCards = ({ className }: ClassNameProp) => { const { items } = useBentoBox() + return ( <div className={cn( From 877809a7e7d563fbd0944b9c98c5046eaf577ed7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:28:43 -0700 Subject: [PATCH 231/273] refactor: title -> header --- src/components/ui/section.tsx | 6 +++--- src/intl/en/page-index.json | 8 ++++---- src/pages/index.tsx | 26 +++++++++++++------------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx index dae777f80fc..e82c7e74b75 100644 --- a/src/components/ui/section.tsx +++ b/src/components/ui/section.tsx @@ -31,7 +31,7 @@ const SectionBanner = React.forwardRef< )) SectionBanner.displayName = "SectionBanner" -const SectionTitle = React.forwardRef< +const SectionHeader = React.forwardRef< HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement> >(({ className, ...props }, ref) => ( @@ -44,7 +44,7 @@ const SectionTitle = React.forwardRef< {...props} /> )) -SectionTitle.displayName = "SectionTitle" +SectionHeader.displayName = "SectionHeader" const SectionTag = React.forwardRef< HTMLDivElement, @@ -69,4 +69,4 @@ const SectionContent = React.forwardRef< )) SectionContent.displayName = "SectionContent" -export { Section, SectionBanner, SectionContent, SectionTag, SectionTitle } +export { Section, SectionBanner, SectionContent, SectionHeader, SectionTag } diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index f4318fccf9b..d4c87175069 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -64,7 +64,7 @@ "community-events-add-to-calendar": "Add to calendar", "page-index-activity-description": "Activity from all Ethereum networks", "page-index-activity-tag": "Activity", - "page-index-activity-title": "The strongest ecosystem", + "page-index-activity-header": "The strongest ecosystem", "page-index-bento-header": "A new way to use the internet", "page-index-bento-assets-action": "More on NFTs", "page-index-bento-assets-content": "Art, certificates or even real estate can be tokenized. Anything can be a tradable token. Ownership is public and verifiable.", @@ -85,7 +85,7 @@ "page-index-builders-action-secondary": "Documentation", "page-index-builders-description": "Ethereum is home to Web3's largest and most vibrant developer ecosystem. Use JavaScript and Python, or learn a smart contract language like Solidity or Vyper to write your own app.", "page-index-builders-tag": "Builders", - "page-index-builders-title": "Blockchain's biggest builder community", + "page-index-builders-header": "Blockchain's biggest builder community", "page-index-calendar-add": "Add to calendar", "page-index-calendar-fallback": "No upcoming calls", "page-index-calendar-title": "Next calls", @@ -94,7 +94,7 @@ "page-index-community-description-2": "Come ask questions, connect with people around the world and contribute to the website. You will get relevant practical experience and be guided during the process!", "page-index-community-description-3": "Ethereum.org community is the perfect place to start and learn.", "page-index-community-tag": "Ethereum.org Community", - "page-index-community-title": "Built by the community", + "page-index-community-header": "Built by the community", "page-index-cta-dapps-description": "See what Ethereum can do", "page-index-cta-dapps-label": "Try apps", "page-index-cta-get-eth-description": "The currency of Ethereum", @@ -126,7 +126,7 @@ "page-index-join-header": "Join ethereum.org", "page-index-learn-description": "Crypto can feel overwhelming. Don't worry, these materials are designed to help you understand Ethereum in just a few minutes.", "page-index-learn-tag": "Learn", - "page-index-learn-title": "Understand Ethereum", + "page-index-learn-header": "Understand Ethereum", "page-index-meta-description": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.", "page-index-meta-title": "Home", "page-index-network-stats-subtitle": "The latest network statistics", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 64e31fe4c34..6b188c04cc1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -42,8 +42,8 @@ import { Section, SectionBanner, SectionContent, + SectionHeader, SectionTag, - SectionTitle, } from "@/components/ui/section" import WindowBox from "@/components/WindowBox" @@ -234,9 +234,9 @@ const HomePage = ({ <SectionContent> <SectionTag>{t("page-index:page-index-activity-tag")}</SectionTag> - <SectionTitle> - {t("page-index:page-index-activity-title")} - </SectionTitle> + <SectionHeader> + {t("page-index:page-index-activity-header")} + </SectionHeader> <div className="py-16 lg:py-32"> <p className="mt-8 text-xl font-bold"> {t("page-index:page-index-activity-description")} @@ -253,9 +253,9 @@ const HomePage = ({ <SectionContent> <SectionTag>{t("page-index:page-index-learn-tag")}</SectionTag> - <SectionTitle> - {t("page-index:page-index-learn-title")} - </SectionTitle> + <SectionHeader> + {t("page-index:page-index-learn-header")} + </SectionHeader> <div className="flex flex-col gap-y-16 lg:gap-y-32"> <p className="text-lg"> {t("page-index:page-index-learn-description")} @@ -298,9 +298,9 @@ const HomePage = ({ <SectionContent> <SectionTag>{t("page-index:page-index-builders-tag")}</SectionTag> - <SectionTitle> - {t("page-index:page-index-builders-title")} - </SectionTitle> + <SectionHeader> + {t("page-index:page-index-builders-header")} + </SectionHeader> <p className="text-lg"> {t("page-index:page-index-builders-description")} </p> @@ -366,9 +366,9 @@ const HomePage = ({ <SectionContent> <SectionTag>{t("page-index:page-index-community-tag")}</SectionTag> - <SectionTitle> - {t("page-index:page-index-community-title")} - </SectionTitle> + <SectionHeader> + {t("page-index:page-index-community-header")} + </SectionHeader> <div className="mt-8 flex flex-col gap-8 text-lg"> <p>{t("page-index:page-index-community-description-1")}</p> <p>{t("page-index:page-index-community-description-2")}</p> From 3fa2e7b0142c82eaa330f919579334867f3636b7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:02:05 -0700 Subject: [PATCH 232/273] refactor: useBentoBox --- src/components/BentoBox/useBentoBox.ts | 118 +++++++++++-------------- 1 file changed, 51 insertions(+), 67 deletions(-) diff --git a/src/components/BentoBox/useBentoBox.ts b/src/components/BentoBox/useBentoBox.ts index efb69018082..58272f54153 100644 --- a/src/components/BentoBox/useBentoBox.ts +++ b/src/components/BentoBox/useBentoBox.ts @@ -11,19 +11,16 @@ import ManBabyWomanImage from "@/public/images/man-baby-woman.png" import RobotBarImage from "@/public/images/robot-help-bar.png" import MergeImage from "@/public/images/upgrades/merge.png" -const flow = { +type Breakpoint = "mobile" | "lg" | "xl" +type Direction = "down" | "up" | "right" | "left" + +const flow: Record<Breakpoint, Record<Direction, string>> = { mobile: { down: "flex-col bg-gradient-to-b", up: "flex-col-reverse bg-gradient-to-t", right: "flex-row bg-gradient-to-r", left: "flex-row-reverse bg-gradient-to-l", }, - md: { - down: "md:flex-col md:bg-gradient-to-b", - up: "md:flex-col-reverse md:bg-gradient-to-t", - right: "md:flex-row md:bg-gradient-to-r", - left: "md:flex-row-reverse md:bg-gradient-to-l", - }, lg: { down: "lg:flex-col lg:bg-gradient-to-b", up: "lg:flex-col-reverse lg:bg-gradient-to-t", @@ -38,17 +35,49 @@ const flow = { }, } -const positions = "from-20% to-60%" +const pos: Record<Breakpoint, string[]> = { + mobile: [ + flow.mobile.down, + flow.mobile.down, + flow.mobile.down, + flow.mobile.down, + flow.mobile.down, + ], + lg: [ + cn("lg:col-span-6 lg:row-start-2", flow.lg.up), + cn("lg:col-span-6 lg:col-start-7 lg:row-start-2", flow.lg.down), + cn("lg:col-span-12 lg:row-start-3", flow.lg.right), + cn("lg:col-span-6 lg:col-start-7 lg:row-start-4", flow.lg.up), + cn("lg:col-span-6 lg:row-start-4", flow.lg.down), + ], + xl: [ + cn("xl:col-span-7 xl:col-start-5 xl:row-start-1", flow.xl.right), + cn("xl:col-span-4 xl:col-start-2 xl:row-start-2", flow.xl.up), + cn("xl:col-span-3 xl:col-start-6 xl:row-start-2", flow.xl.down), + cn("xl:col-span-3 xl:col-start-9 xl:row-span-2 xl:row-start-2", flow.xl.up), + cn("xl:col-span-7 xl:col-start-2 xl:row-start-3", flow.xl.right), + ], +} + +const gradientStops = "from-20% to-60%" -const colors = (color: "primary" | "accent-a" | "accent-b" | "accent-c") => { - if (color === "primary") - return "from-primary/10 to-primary/5 dark:from-primary/20 dark:to-primary/10" - if (color === "accent-a") - return "from-accent-a/10 to-accent-a/5 dark:from-accent-a/20 dark:to-accent-a/10" - if (color === "accent-b") - return "from-accent-b/10 to-accent-b/5 dark:from-accent-b/20 dark:to-accent-b/10" - if (color === "accent-c") - return "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10" +const colors = { + primary: cn( + gradientStops, + "from-primary/10 to-primary/5 dark:from-primary/20 dark:to-primary/10 border-primary/10" + ), + "accent-a": cn( + gradientStops, + "from-accent-a/10 to-accent-a/5 dark:from-accent-a/20 dark:to-accent-a/10 border-accent-a/10" + ), + "accent-b": cn( + gradientStops, + "from-accent-b/10 to-accent-b/5 dark:from-accent-b/20 dark:to-accent-b/10 border-accent-b/10" + ), + "accent-c": cn( + gradientStops, + "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10 border-accent-c/10" + ), } export const useBentoBox = () => { @@ -64,16 +93,7 @@ export const useBentoBox = () => { href: "/stablecoins/", imgSrc: ImpactImage, imgWidth: 400, - className: cn( - "border-primary/10", - positions, - colors("primary"), - flow.mobile.down, - flow.lg.up, - flow.xl.right, - "lg:col-span-6 lg:row-start-2", - "xl:col-span-7 xl:col-start-5 xl:row-start-1" - ), + className: cn(colors["primary"], pos.mobile[0], pos.lg[0], pos.xl[0]), }, { title: t("page-index:page-index-bento-defi-title"), @@ -81,16 +101,7 @@ export const useBentoBox = () => { action: t("page-index:page-index-bento-defi-action"), href: "/defi/", imgSrc: ManAndDogImage, - className: cn( - "border-accent-c/10", - positions, - colors("accent-c"), - flow.mobile.down, - flow.lg.down, - flow.xl.up, - "lg:col-span-6 lg:col-start-7 lg:row-start-2", - "xl:col-span-4 xl:col-start-2 xl:row-start-2" - ), + className: cn(colors["accent-c"], pos.mobile[1], pos.lg[1], pos.xl[1]), }, { title: t("page-index:page-index-bento-dapps-title"), @@ -99,16 +110,7 @@ export const useBentoBox = () => { href: "/dapps/", imgSrc: MergeImage, imgWidth: 320, - className: cn( - "border-accent-b/10", - positions, - colors("accent-b"), - flow.mobile.down, - flow.lg.right, - flow.xl.down, - "lg:col-span-12 lg:row-start-3", - "xl:col-span-3 xl:col-start-6 xl:row-start-2" - ), + className: cn(colors["accent-b"], pos.mobile[2], pos.lg[2], pos.xl[2]), }, { title: t("page-index:page-index-bento-networks-title"), @@ -117,16 +119,7 @@ export const useBentoBox = () => { href: "/layer-2/", imgSrc: ManBabyWomanImage, imgWidth: 324, - className: cn( - "border-accent-a/10", - positions, - colors("accent-a"), - flow.mobile.down, - flow.lg.up, - flow.xl.up, - "lg:col-span-6 lg:col-start-7 lg:row-start-4", - "xl:col-span-3 xl:col-start-9 xl:row-span-2 xl:row-start-2" - ), + className: cn(colors["accent-a"], pos.mobile[3], pos.lg[3], pos.xl[3]), }, { title: t("page-index:page-index-bento-assets-title"), @@ -135,16 +128,7 @@ export const useBentoBox = () => { href: "/nft/", imgSrc: RobotBarImage, imgWidth: 324, - className: cn( - "border-primary/10", - positions, - colors("primary"), - flow.mobile.down, - flow.lg.down, - flow.xl.right, - "lg:col-span-6 lg:row-start-4", - "xl:col-span-7 xl:col-start-2 xl:row-start-3" - ), + className: cn(colors["primary"], pos.mobile[4], pos.lg[4], pos.xl[4]), }, ]) }, [t]) From 69468175393ed036d7fc0e45432303972bf6fa53 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 31 Aug 2024 18:21:19 -0700 Subject: [PATCH 233/273] feat: add screen util, BreakpointKey type --- src/lib/types.ts | 14 ++++++++++---- src/lib/utils/screen.ts | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 src/lib/utils/screen.ts diff --git a/src/lib/types.ts b/src/lib/types.ts index d1652d7d21c..9093c74f0a3 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -1,10 +1,11 @@ import type { Options } from "mdast-util-toc" import type { NextPage } from "next" import type { AppProps } from "next/app" -import { StaticImageData } from "next/image" -import { SSRConfig } from "next-i18next" +import type { StaticImageData } from "next/image" +import type { SSRConfig } from "next-i18next" import type { ReactElement, ReactNode } from "react" -import { Icon } from "@chakra-ui/react" +import resolveConfig from "tailwindcss/resolveConfig" +import type { Icon } from "@chakra-ui/react" import type { DocsFrontmatter, @@ -18,13 +19,14 @@ import type { import type { BreadcrumbsProps } from "@/components/Breadcrumbs" import type { CallToActionProps } from "@/components/Hero/CallToAction" -import { SimulatorNav } from "@/components/Simulator/interfaces" +import type { SimulatorNav } from "@/components/Simulator/interfaces" import allQuizData from "@/data/quizzes" import allQuestionData from "@/data/quizzes/questionBank" import { WALLETS_FILTERS_DEFAULT } from "./constants" +import tailwindConfig from "@/../tailwind.config" import { layoutMapping } from "@/pages/[...slug]" // Credit: https://stackoverflow.com/a/52331580 @@ -826,3 +828,7 @@ export type EventCardProps = { location: string imageUrl?: string } + +const twConfig = resolveConfig(tailwindConfig) + +export type BreakpointKey = keyof typeof twConfig.theme.screens diff --git a/src/lib/utils/screen.ts b/src/lib/utils/screen.ts new file mode 100644 index 00000000000..e1fe01dc059 --- /dev/null +++ b/src/lib/utils/screen.ts @@ -0,0 +1,15 @@ +import resolveConfig from "tailwindcss/resolveConfig" + +import type { BreakpointKey } from "../types" + +import tailwindConfig from "@/../tailwind.config" + +const fullConfig = resolveConfig(tailwindConfig) + +export const breakpointAsNumber = Object.entries( + fullConfig.theme.screens +).reduce((acc, curr) => { + const [breakpoint, value] = curr + acc[breakpoint] = +value.split("px")[0] + return acc +}, {}) as Record<BreakpointKey, number> From 776db767a1d211b35b81733ea98639023a57fa07 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 31 Aug 2024 19:08:13 -0700 Subject: [PATCH 234/273] refactor: update useBentoBox organization --- src/components/BentoBox/useBentoBox.ts | 60 +++++++++++++++----------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/src/components/BentoBox/useBentoBox.ts b/src/components/BentoBox/useBentoBox.ts index 58272f54153..10275fb6e2f 100644 --- a/src/components/BentoBox/useBentoBox.ts +++ b/src/components/BentoBox/useBentoBox.ts @@ -13,6 +13,28 @@ import MergeImage from "@/public/images/upgrades/merge.png" type Breakpoint = "mobile" | "lg" | "xl" type Direction = "down" | "up" | "right" | "left" +type Color = "primary" | "accent-a" | "accent-b" | "accent-c" + +const gradientStops = "from-20% to-60%" + +const colorOptions: Record<Color, string> = { + primary: cn( + gradientStops, + "from-primary/10 to-primary/5 dark:from-primary/20 dark:to-primary/10 border-primary/10" + ), + "accent-a": cn( + gradientStops, + "from-accent-a/10 to-accent-a/5 dark:from-accent-a/20 dark:to-accent-a/10 border-accent-a/10" + ), + "accent-b": cn( + gradientStops, + "from-accent-b/10 to-accent-b/5 dark:from-accent-b/20 dark:to-accent-b/10 border-accent-b/10" + ), + "accent-c": cn( + gradientStops, + "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10 border-accent-c/10" + ), +} const flow: Record<Breakpoint, Record<Direction, string>> = { mobile: { @@ -35,7 +57,7 @@ const flow: Record<Breakpoint, Record<Direction, string>> = { }, } -const pos: Record<Breakpoint, string[]> = { +const stylesByPosition: Record<Breakpoint, string[]> = { mobile: [ flow.mobile.down, flow.mobile.down, @@ -59,26 +81,12 @@ const pos: Record<Breakpoint, string[]> = { ], } -const gradientStops = "from-20% to-60%" - -const colors = { - primary: cn( - gradientStops, - "from-primary/10 to-primary/5 dark:from-primary/20 dark:to-primary/10 border-primary/10" - ), - "accent-a": cn( - gradientStops, - "from-accent-a/10 to-accent-a/5 dark:from-accent-a/20 dark:to-accent-a/10 border-accent-a/10" - ), - "accent-b": cn( - gradientStops, - "from-accent-b/10 to-accent-b/5 dark:from-accent-b/20 dark:to-accent-b/10 border-accent-b/10" - ), - "accent-c": cn( - gradientStops, - "from-accent-c/10 to-accent-c/5 dark:from-accent-c/20 dark:to-accent-c/10 border-accent-c/10" - ), -} +const getPosition = (position: number): string => + cn( + stylesByPosition.mobile[position], + stylesByPosition.lg[position], + stylesByPosition.xl[position] + ) export const useBentoBox = () => { const { t } = useTranslation("page-index") @@ -93,7 +101,7 @@ export const useBentoBox = () => { href: "/stablecoins/", imgSrc: ImpactImage, imgWidth: 400, - className: cn(colors["primary"], pos.mobile[0], pos.lg[0], pos.xl[0]), + className: cn(colorOptions["primary"], getPosition(0)), }, { title: t("page-index:page-index-bento-defi-title"), @@ -101,7 +109,7 @@ export const useBentoBox = () => { action: t("page-index:page-index-bento-defi-action"), href: "/defi/", imgSrc: ManAndDogImage, - className: cn(colors["accent-c"], pos.mobile[1], pos.lg[1], pos.xl[1]), + className: cn(colorOptions["accent-c"], getPosition(1)), }, { title: t("page-index:page-index-bento-dapps-title"), @@ -110,7 +118,7 @@ export const useBentoBox = () => { href: "/dapps/", imgSrc: MergeImage, imgWidth: 320, - className: cn(colors["accent-b"], pos.mobile[2], pos.lg[2], pos.xl[2]), + className: cn(colorOptions["accent-b"], getPosition(2)), }, { title: t("page-index:page-index-bento-networks-title"), @@ -119,7 +127,7 @@ export const useBentoBox = () => { href: "/layer-2/", imgSrc: ManBabyWomanImage, imgWidth: 324, - className: cn(colors["accent-a"], pos.mobile[3], pos.lg[3], pos.xl[3]), + className: cn(colorOptions["accent-a"], getPosition(3)), }, { title: t("page-index:page-index-bento-assets-title"), @@ -128,7 +136,7 @@ export const useBentoBox = () => { href: "/nft/", imgSrc: RobotBarImage, imgWidth: 324, - className: cn(colors["primary"], pos.mobile[4], pos.lg[4], pos.xl[4]), + className: cn(colorOptions["primary"], getPosition(4)), }, ]) }, [t]) From cc9306bd72868a2cbf361a78ec739add1b123eaf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 31 Aug 2024 19:10:08 -0700 Subject: [PATCH 235/273] feat: implement PostsSwiper for desktop --- src/components/PostsSwiper/index.tsx | 63 +++++++++++++++++----------- src/lib/constants.ts | 2 +- src/pages/index.tsx | 12 +----- src/styles/global.css | 20 ++++++++- 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx index 67e68a7a427..b33b15c3442 100644 --- a/src/components/PostsSwiper/index.tsx +++ b/src/components/PostsSwiper/index.tsx @@ -1,10 +1,12 @@ +import { useTranslation } from "next-i18next" import { MdChevronLeft, MdChevronRight } from "react-icons/md" -import { Navigation, Pagination } from "swiper/modules" +import { Keyboard, Navigation, Pagination } from "swiper/modules" import { Swiper, SwiperSlide } from "swiper/react" import type { ClassNameProp, RSSItem } from "@/lib/types" import { cn } from "@/lib/utils/cn" +import { breakpointAsNumber } from "@/lib/utils/screen" import PostPreviewCard from "../Homepage/PostPreviewCard" @@ -15,29 +17,42 @@ import "swiper/css/pagination" type PostsSwiperProps = ClassNameProp & { items: RSSItem[] } -const PostsSwiper = ({ className, items }: PostsSwiperProps) => ( - <div className={cn("h-fit", className)}> - <Swiper - navigation={{ - nextEl: ".swiper-button-next", - prevEl: ".swiper-button-prev", - }} - pagination={{ clickable: true }} - keyboard - spaceBetween={32} - modules={[Navigation, Pagination]} - > - {items.map((item) => ( - <SwiperSlide key={item.title}> - <PostPreviewCard {...item} /> - </SwiperSlide> - ))} +const PostsSwiper = ({ className, items }: PostsSwiperProps) => { + const { t } = useTranslation("page-developers-docs") + return ( + <div className={cn("css-posts-swiper h-fit", className)}> + <Swiper + navigation={{ + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }} + a11y={{ + prevSlideMessage: t("previous"), + nextSlideMessage: t("next"), + }} + pagination={{ clickable: true }} + keyboard + spaceBetween={32} + modules={[Navigation, Pagination, Keyboard]} + slidesPerView={1} + slidesPerGroup={1} + breakpoints={{ + [breakpointAsNumber.sm]: { slidesPerView: 2, slidesPerGroup: 2 }, + [breakpointAsNumber.lg]: { slidesPerView: 3, slidesPerGroup: 3 }, + }} + > + {items.map((item) => ( + <SwiperSlide key={item.title}> + <PostPreviewCard {...item} /> + </SwiperSlide> + ))} - <MdChevronLeft className="swiper-button-prev" /> - <div className="swiper-pagination" /> - <MdChevronRight className="swiper-button-next" /> - </Swiper> - </div> -) + <MdChevronLeft className="swiper-button-prev" /> + <div className="swiper-pagination" /> + <MdChevronRight className="swiper-button-next" /> + </Swiper> + </div> + ) +} export default PostsSwiper diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 6dbf0695175..bbec432a6f8 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -163,7 +163,7 @@ export const LINES_BEFORE_COLLAPSABLE = 8 export const CALENDAR_DISPLAY_COUNT = 4 // RSS Feeds -export const RSS_DISPLAY_COUNT = 3 +export const RSS_DISPLAY_COUNT = 6 export const VITALIK_FEED = "https://vitalik.eth.limo/feed.xml" export const SOLIDITY_FEED = "https://soliditylang.org/feed.xml" diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6b188c04cc1..6c8d3fcf390 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -17,7 +17,6 @@ import BentoBox from "@/components/BentoBox" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" -import PostPreviewCard from "@/components/Homepage/PostPreviewCard" import { useHome } from "@/components/Homepage/useHome" import AngleBrackets from "@/components/icons/angle-brackets.svg" import Calendar from "@/components/icons/calendar.svg" @@ -452,15 +451,8 @@ const HomePage = ({ {t("page-index:page-index-posts-header")} </h3> <p>{t("page-index:page-index-posts-subtitle")}</p> - {/* Mobile */} - <PostsSwiper items={rssItems} className="mt-4 md:hidden" /> - - {/* Desktop */} - <div className="hidden gap-8 md:mt-16 md:grid md:grid-cols-3"> - {rssItems.map((post) => ( - <PostPreviewCard key={post.title} {...post} /> - ))} - </div> + + <PostsSwiper items={rssItems} className="mt-4 md:mt-16" /> <div className="mt-8 flex flex-col gap-4 rounded-2xl border p-8"> <p className="text-lg">{t("page-index:page-index-posts-action")}</p> diff --git a/src/styles/global.css b/src/styles/global.css index 3570c7d2234..add67962c9b 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -217,6 +217,10 @@ @apply relative mx-auto mt-8 flex h-[26px] max-w-48 items-center justify-center rounded-full bg-background-highlight; } + .css-posts-swiper .swiper-pagination { + @apply max-w-52 sm:max-w-40 lg:max-w-36; + } + .swiper-pagination .swiper-pagination-bullet { @apply bg-primary-high-contrast; } @@ -235,7 +239,21 @@ .swiper-button-prev, .swiper-button-next { top: calc(100% - 11px) !important; - --nav-inset: calc(50% - 6rem); + --nav-inset: calc(50% - 6.5rem); +} + +@media (min-width: theme("screens.sm")) { + .swiper-button-prev, + .swiper-button-next { + --nav-inset: calc(50% - 5rem); + } +} + +@media (min-width: theme("screens.lg")) { + .swiper-button-prev, + .swiper-button-next { + --nav-inset: calc(50% - 4.5rem); + } } .swiper-button-next { From d76f6064d44d4898b3a7cdda9477e14d71d22000 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 31 Aug 2024 19:23:58 -0700 Subject: [PATCH 236/273] feat: create re-usable SlidingSwiper component --- src/components/SlidingSwiper/index.tsx | 55 ++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/components/SlidingSwiper/index.tsx diff --git a/src/components/SlidingSwiper/index.tsx b/src/components/SlidingSwiper/index.tsx new file mode 100644 index 00000000000..f0fbb9af9cb --- /dev/null +++ b/src/components/SlidingSwiper/index.tsx @@ -0,0 +1,55 @@ +import { useTranslation } from "next-i18next" +import { MdChevronLeft, MdChevronRight } from "react-icons/md" +import { Keyboard, Navigation, Pagination } from "swiper/modules" +import { Swiper, SwiperSlide } from "swiper/react" +import type { SwiperOptions } from "swiper/types" + +import { cn } from "@/lib/utils/cn" + +import "swiper/css" +import "swiper/css/navigation" +import "swiper/css/pagination" + +type SlidingSwiperProps = { + children: React.ReactNode[] + options?: SwiperOptions + className?: string +} +const SlidingSwiper = ({ + children, + className, + options, +}: SlidingSwiperProps) => { + const { t } = useTranslation("common") + return ( + <div className={cn("h-fit", className)}> + <Swiper + navigation={{ + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }} + a11y={{ + prevSlideMessage: t("previous"), + nextSlideMessage: t("next"), + }} + pagination={{ clickable: true }} + keyboard + spaceBetween={32} + modules={[Navigation, Pagination, Keyboard]} + slidesPerView={1} + slidesPerGroup={1} + {...options} + > + {children.map((child, index) => ( + <SwiperSlide key={index}>{child}</SwiperSlide> + ))} + + <MdChevronLeft className="swiper-button-prev" /> + <div className="swiper-pagination" /> + <MdChevronRight className="swiper-button-next" /> + </Swiper> + </div> + ) +} + +export default SlidingSwiper From 74146abbce9807e7bd3b6ea70e332d6c82b9ac9e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 1 Sep 2024 21:42:06 -0700 Subject: [PATCH 237/273] style: rename and mv Swiper, mv useHome --- .../{SlidingSwiper => Swiper}/index.tsx | 29 ++++++++++++------- src/{components/Homepage => hooks}/useHome.ts | 5 ++++ 2 files changed, 23 insertions(+), 11 deletions(-) rename src/components/{SlidingSwiper => Swiper}/index.tsx (65%) rename src/{components/Homepage => hooks}/useHome.ts (98%) diff --git a/src/components/SlidingSwiper/index.tsx b/src/components/Swiper/index.tsx similarity index 65% rename from src/components/SlidingSwiper/index.tsx rename to src/components/Swiper/index.tsx index f0fbb9af9cb..ccb115e2c74 100644 --- a/src/components/SlidingSwiper/index.tsx +++ b/src/components/Swiper/index.tsx @@ -1,7 +1,7 @@ import { useTranslation } from "next-i18next" import { MdChevronLeft, MdChevronRight } from "react-icons/md" -import { Keyboard, Navigation, Pagination } from "swiper/modules" -import { Swiper, SwiperSlide } from "swiper/react" +import { EffectCards, Keyboard, Navigation, Pagination } from "swiper/modules" +import { Swiper as SwiperParent, SwiperSlide } from "swiper/react" import type { SwiperOptions } from "swiper/types" import { cn } from "@/lib/utils/cn" @@ -9,21 +9,26 @@ import { cn } from "@/lib/utils/cn" import "swiper/css" import "swiper/css/navigation" import "swiper/css/pagination" +import "swiper/css/effect-cards" -type SlidingSwiperProps = { +type SwiperProps = { children: React.ReactNode[] options?: SwiperOptions className?: string + swiperClass?: string + sliderClass?: string } -const SlidingSwiper = ({ +const Swiper = ({ children, className, + swiperClass, + sliderClass, options, -}: SlidingSwiperProps) => { +}: SwiperProps) => { const { t } = useTranslation("common") return ( <div className={cn("h-fit", className)}> - <Swiper + <SwiperParent navigation={{ nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev", @@ -34,22 +39,24 @@ const SlidingSwiper = ({ }} pagination={{ clickable: true }} keyboard - spaceBetween={32} - modules={[Navigation, Pagination, Keyboard]} + modules={[Navigation, Pagination, Keyboard, EffectCards]} slidesPerView={1} slidesPerGroup={1} + className={swiperClass} {...options} > {children.map((child, index) => ( - <SwiperSlide key={index}>{child}</SwiperSlide> + <SwiperSlide className={sliderClass} key={index}> + {child} + </SwiperSlide> ))} <MdChevronLeft className="swiper-button-prev" /> <div className="swiper-pagination" /> <MdChevronRight className="swiper-button-next" /> - </Swiper> + </SwiperParent> </div> ) } -export default SlidingSwiper +export default Swiper diff --git a/src/components/Homepage/useHome.ts b/src/hooks/useHome.ts similarity index 98% rename from src/components/Homepage/useHome.ts rename to src/hooks/useHome.ts index b395a47a1f8..d7f8a8d0c6e 100644 --- a/src/components/Homepage/useHome.ts +++ b/src/hooks/useHome.ts @@ -6,6 +6,7 @@ import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6" import type { EventCardProps, Lang } from "@/lib/types" import type { CodeExample } from "@/lib/interfaces" +import { useBentoBox } from "@/components/BentoBox/useBentoBox" import BlockHeap from "@/components/icons/block-heap.svg" import EthGlyphIcon from "@/components/icons/eth-glyph.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" @@ -35,6 +36,8 @@ export const useHome = () => { const [isModalOpen, setModalOpen] = useState(false) const [activeCode, setActiveCode] = useState(0) + const { items: bentoItems } = useBentoBox() + const toggleCodeExample = (id: number): void => { setActiveCode(id) setModalOpen(true) @@ -179,6 +182,7 @@ export const useHome = () => { description: t("page-index:page-index-join-action-twitter-description"), }, ] + return { t, locale, @@ -193,5 +197,6 @@ export const useHome = () => { popularTopics, upcomingEvents, joinActions, + bentoItems, } } From 233778ff94014b552d25f2c7f2a79626c4a3bd9e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 1 Sep 2024 21:43:02 -0700 Subject: [PATCH 238/273] refactor: use Slider component for sliders --- src/pages/index.tsx | 71 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6c8d3fcf390..da317102791 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -14,18 +14,18 @@ import type { } from "@/lib/types" import BentoBox from "@/components/BentoBox" +import BentoCard from "@/components/BentoBox/BentoCard" +import Title from "@/components/BentoBox/Title" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" -import { useHome } from "@/components/Homepage/useHome" import AngleBrackets from "@/components/icons/angle-brackets.svg" import Calendar from "@/components/icons/calendar.svg" import CalendarAdd from "@/components/icons/calendar-add.svg" import { TwImage } from "@/components/Image" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" -import PostsSwiper from "@/components/PostsSwiper" -import SwiperCards from "@/components/SwiperCards" +import Swiper from "@/components/Swiper" import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import { ButtonLink } from "@/components/ui/buttons/Button" import { @@ -52,6 +52,7 @@ import { existsNamespace } from "@/lib/utils/existsNamespace" import { getLastDeployDate } from "@/lib/utils/getLastDeployDate" import { polishRSSList } from "@/lib/utils/rss" import { runOnlyOnce } from "@/lib/utils/runOnlyOnce" +import { breakpointAsNumber } from "@/lib/utils/screen" import { getLocaleTimestamp } from "@/lib/utils/time" import { getRequiredNamespacesForPage } from "@/lib/utils/translations" @@ -64,6 +65,9 @@ import { RSS_DISPLAY_COUNT, } from "@/lib/constants" +import "swiper/css/effect-cards" + +import { useHome } from "@/hooks/useHome" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" import { fetchEthPrice } from "@/lib/api/fetchEthPrice" import { fetchGrowThePie } from "@/lib/api/fetchGrowThePie" @@ -178,6 +182,7 @@ const HomePage = ({ popularTopics, upcomingEvents, joinActions, + bentoItems, } = useHome() return ( @@ -221,7 +226,26 @@ const HomePage = ({ </div> {/* Mobile */} - <SwiperCards className="lg:hidden" /> + <div className="-mx-4 w-[100vw] overflow-hidden px-4 sm:-mx-6 sm:px-6 lg:hidden"> + <Title /> + <Swiper + options={{ effect: "cards", createElements: true }} + className={cn( + "[&_.swiper-slide]:overflow-visible [&_.swiper-slide]:rounded-2xl [&_.swiper-slide]:shadow-card-hover", + "[&_.swiper]:mx-auto [&_.swiper]:mt-4 [&_.swiper]:!flex [&_.swiper]:h-fit [&_.swiper]:max-w-128 [&_.swiper]:flex-col [&_.swiper]:items-center" + )} + > + {bentoItems.map((item) => ( + <BentoCard + key={item.title} + imgHeight={220} + {...item} + className={cn(item.className, "bg-background text-body")} + imgWidth={undefined} // Intentionally last to override box + /> + ))} + </Swiper> + </div> {/* Desktop */} <BentoBox className="hidden lg:block" /> @@ -452,7 +476,44 @@ const HomePage = ({ </h3> <p>{t("page-index:page-index-posts-subtitle")}</p> - <PostsSwiper items={rssItems} className="mt-4 md:mt-16" /> + <Swiper + className="mt-4 md:mt-16" + options={{ + spaceBetween: 32, + breakpoints: { + [breakpointAsNumber.sm]: { + slidesPerView: 2, + slidesPerGroup: 2, + }, + [breakpointAsNumber.lg]: { + slidesPerView: 3, + slidesPerGroup: 3, + }, + }, + }} + > + {rssItems.map(({ pubDate, title, source, link, imgSrc }) => ( + <Card key={title} href={link}> + <CardBanner> + {/* eslint-disable-next-line @next/next/no-img-element */} + <img src={imgSrc} alt="" /> + </CardBanner> + <CardContent> + <CardTitle>{title}</CardTitle> + {isValidDate(pubDate) && ( + <CardSubTitle> + {new Intl.DateTimeFormat(locale, { + month: "long", + day: "numeric", + year: "numeric", + }).format(new Date(pubDate))} + </CardSubTitle> + )} + <CardHighlight>{source}</CardHighlight> + </CardContent> + </Card> + ))} + </Swiper> <div className="mt-8 flex flex-col gap-4 rounded-2xl border p-8"> <p className="text-lg">{t("page-index:page-index-posts-action")}</p> From c2769e6466b7e10ff97e1b779745bf2dc0caf28d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 1 Sep 2024 21:43:23 -0700 Subject: [PATCH 239/273] deprecate: single-use swiper components --- src/components/Homepage/PostPreviewCard.tsx | 41 -------------- src/components/PostsSwiper/index.tsx | 58 -------------------- src/components/SwiperCards/index.tsx | 61 --------------------- 3 files changed, 160 deletions(-) delete mode 100644 src/components/Homepage/PostPreviewCard.tsx delete mode 100644 src/components/PostsSwiper/index.tsx delete mode 100644 src/components/SwiperCards/index.tsx diff --git a/src/components/Homepage/PostPreviewCard.tsx b/src/components/Homepage/PostPreviewCard.tsx deleted file mode 100644 index afdb52d377c..00000000000 --- a/src/components/Homepage/PostPreviewCard.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { useRouter } from "next/router" - -import type { RSSItem } from "@/lib/types" - -import { isValidDate } from "@/lib/utils/date" - -import { - Card, - CardBanner, - CardContent, - CardHighlight, - CardSubTitle, - CardTitle, -} from "../ui/card" - -const PostPreviewCard = ({ pubDate, title, source, link, imgSrc }: RSSItem) => { - const { locale } = useRouter() - return ( - <Card href={link}> - <CardBanner> - {/* eslint-disable-next-line @next/next/no-img-element */} - <img src={imgSrc} alt="" /> - </CardBanner> - <CardContent> - <CardTitle>{title}</CardTitle> - {isValidDate(pubDate) && ( - <CardSubTitle> - {new Intl.DateTimeFormat(locale, { - month: "long", - day: "numeric", - year: "numeric", - }).format(new Date(pubDate))} - </CardSubTitle> - )} - <CardHighlight>{source}</CardHighlight> - </CardContent> - </Card> - ) -} - -export default PostPreviewCard diff --git a/src/components/PostsSwiper/index.tsx b/src/components/PostsSwiper/index.tsx deleted file mode 100644 index b33b15c3442..00000000000 --- a/src/components/PostsSwiper/index.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { useTranslation } from "next-i18next" -import { MdChevronLeft, MdChevronRight } from "react-icons/md" -import { Keyboard, Navigation, Pagination } from "swiper/modules" -import { Swiper, SwiperSlide } from "swiper/react" - -import type { ClassNameProp, RSSItem } from "@/lib/types" - -import { cn } from "@/lib/utils/cn" -import { breakpointAsNumber } from "@/lib/utils/screen" - -import PostPreviewCard from "../Homepage/PostPreviewCard" - -import "swiper/css" -import "swiper/css/navigation" -import "swiper/css/pagination" - -type PostsSwiperProps = ClassNameProp & { - items: RSSItem[] -} -const PostsSwiper = ({ className, items }: PostsSwiperProps) => { - const { t } = useTranslation("page-developers-docs") - return ( - <div className={cn("css-posts-swiper h-fit", className)}> - <Swiper - navigation={{ - nextEl: ".swiper-button-next", - prevEl: ".swiper-button-prev", - }} - a11y={{ - prevSlideMessage: t("previous"), - nextSlideMessage: t("next"), - }} - pagination={{ clickable: true }} - keyboard - spaceBetween={32} - modules={[Navigation, Pagination, Keyboard]} - slidesPerView={1} - slidesPerGroup={1} - breakpoints={{ - [breakpointAsNumber.sm]: { slidesPerView: 2, slidesPerGroup: 2 }, - [breakpointAsNumber.lg]: { slidesPerView: 3, slidesPerGroup: 3 }, - }} - > - {items.map((item) => ( - <SwiperSlide key={item.title}> - <PostPreviewCard {...item} /> - </SwiperSlide> - ))} - - <MdChevronLeft className="swiper-button-prev" /> - <div className="swiper-pagination" /> - <MdChevronRight className="swiper-button-next" /> - </Swiper> - </div> - ) -} - -export default PostsSwiper diff --git a/src/components/SwiperCards/index.tsx b/src/components/SwiperCards/index.tsx deleted file mode 100644 index f0525635197..00000000000 --- a/src/components/SwiperCards/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { MdChevronLeft, MdChevronRight } from "react-icons/md" -import { EffectCards, Navigation, Pagination } from "swiper/modules" -import { Swiper, SwiperSlide } from "swiper/react" - -import type { ClassNameProp } from "@/lib/types" - -import { cn } from "@/lib/utils/cn" - -import BentoCard from "../BentoBox/BentoCard" -import Title from "../BentoBox/Title" -import { useBentoBox } from "../BentoBox/useBentoBox" - -import "swiper/css" -import "swiper/css/effect-cards" -import "swiper/css/navigation" -import "swiper/css/pagination" - -const SwiperCards = ({ className }: ClassNameProp) => { - const { items } = useBentoBox() - - return ( - <div - className={cn( - "-mx-4 w-[100vw] overflow-hidden px-4 sm:-mx-6 sm:px-6", - className - )} - > - <Title /> - <Swiper - className="mx-auto mt-4 !flex h-fit max-w-128 flex-col items-center" - effect="cards" - pagination={{ clickable: true }} - navigation={{ - nextEl: ".swiper-button-next", - prevEl: ".swiper-button-prev", - }} - modules={[EffectCards, Pagination, Navigation]} - > - {items.map(({ className, ...item }) => ( - <SwiperSlide - key={item.title} - className="overflow-visible rounded-2xl shadow-card-hover" - > - <BentoCard - imgHeight={220} - className={cn(className, "bg-background text-body")} - {...item} - imgWidth={undefined} // Intentionally last to override box - /> - </SwiperSlide> - ))} - - <MdChevronLeft className="swiper-button-prev" /> - <div className="swiper-pagination" /> - <MdChevronRight className="swiper-button-next" /> - </Swiper> - </div> - ) -} - -export default SwiperCards From 82b4999f778e940a8a776e87dd9778a56470d6bf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 11:02:21 -0700 Subject: [PATCH 240/273] theme: color and token adjustments --- src/@chakra-ui/semanticTokens.ts | 2 +- src/components/ui/buttons/Button.tsx | 2 +- src/components/ui/card.tsx | 2 +- src/styles/global.css | 2 +- src/styles/semantic-tokens.css | 5 ++--- tailwind.config.ts | 2 ++ 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/@chakra-ui/semanticTokens.ts b/src/@chakra-ui/semanticTokens.ts index 69729eaa013..e2d0e3a4dc5 100644 --- a/src/@chakra-ui/semanticTokens.ts +++ b/src/@chakra-ui/semanticTokens.ts @@ -58,7 +58,7 @@ const semanticTokens = { inverted: { _light: "gray.100", _dark: "gray.800" }, }, background: { - base: { _light: "white", _dark: "black" }, + base: { _light: "white", _dark: "gray.950" }, highlight: { _light: "gray.100", _dark: "gray.900" }, }, disabled: { _light: "gray.400", _dark: "gray.500" }, diff --git a/src/components/ui/buttons/Button.tsx b/src/components/ui/buttons/Button.tsx index 5747dd818a8..fbf4e1278d8 100644 --- a/src/components/ui/buttons/Button.tsx +++ b/src/components/ui/buttons/Button.tsx @@ -14,7 +14,7 @@ const buttonVariants = cva( variants: { variant: { solid: - "text-white bg-primary-action border-transparent disabled:bg-disabled disabled:text-background hover:text-background hover:bg-primary-hover hover:shadow-button-hover active:shadow-none", + "text-white bg-primary-action border-transparent disabled:bg-disabled disabled:text-background hover:text-white hover:bg-primary-action-hover hover:shadow-button-hover active:shadow-none", outline: "hover:shadow-button-hover active:shadow-none text-body", "outline-color": "hover:shadow-button-hover active:shadow-none border-primary", diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 72e76fd89d9..95e8c171f08 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -102,7 +102,7 @@ const CardHighlight = React.forwardRef< >(({ className, ...props }, ref) => ( <p ref={ref} - className={cn("text-sm uppercase text-accent-a", className)} + className={cn("text-sm uppercase text-body-medium", className)} {...props} /> )) diff --git a/src/styles/global.css b/src/styles/global.css index add67962c9b..e7e20473ea2 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -124,7 +124,7 @@ @layer base { body { - @apply !bg-background font-body text-sm text-body lg:text-md; + @apply !bg-background font-body text-sm !text-body lg:text-md; } a { diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 9a197e29c38..14b7ea4b9e6 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -19,7 +19,7 @@ --primary-hover: var(--purple-500); --primary-visited: var(--purple-700); --primary-action: var(--purple-600); - --primary-action-hover: var(--purple-700); + --primary-action-hover: var(--purple-500); --accent-a: var(--blue-600); --accent-a-hover: var(--blue-500); @@ -80,7 +80,7 @@ /* Dark mode token declarations */ .dark { - --body: var(--gray-50); + --body: var(--gray-100); --body-medium: var(--gray-400); --body-light: var(--gray-600); --body-inverse: var(--black); @@ -94,7 +94,6 @@ --primary-low-contrast: var(--purple-900); --primary-hover: var(--purple-300); --primary-visited: var(--purple-500); - --primary-action-hover: var(--purple-600); /* TODO: hover same as action in dark mode: */ --accent-a: var(--blue-400); diff --git a/tailwind.config.ts b/tailwind.config.ts index 85cf80ee976..3d0866a69dc 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -122,7 +122,9 @@ const config = { "high-contrast": "hsla(var(--primary-high-contrast))", "low-contrast": "hsla(var(--primary-low-contrast))", hover: "hsla(var(--primary-hover))", + visited: "hsla(var(--primary-visited))", action: "hsla(var(--primary-action))", + "action-hover": "hsla(var(--primary-action-hover))", light: "hsla(var(--primary-light))" /* TODO: Migrate/deprecate */, dark: "hsla(var(--primary-dark))" /* TODO: Migrate/deprecate */, }, From d77ac4959737721a60b43fafb2f55db5c63258e0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:28:32 -0700 Subject: [PATCH 241/273] refactor: rm single-use bentobox and title, restructure "a new way to use the internet" section to use a single structure within pages/index.tsx, using classnames to handle mobile vs desktop accordingly --- src/components/BentoBox/Title.tsx | 22 ----------------- src/components/BentoBox/index.tsx | 22 ----------------- src/pages/index.tsx | 40 ++++++++++++++++++++++++------- 3 files changed, 32 insertions(+), 52 deletions(-) delete mode 100644 src/components/BentoBox/Title.tsx delete mode 100644 src/components/BentoBox/index.tsx diff --git a/src/components/BentoBox/Title.tsx b/src/components/BentoBox/Title.tsx deleted file mode 100644 index a931a785644..00000000000 --- a/src/components/BentoBox/Title.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { useTranslation } from "next-i18next" - -import type { ClassNameProp } from "@/lib/types" - -import { cn } from "@/lib/utils/cn" - -const Title = ({ className }: ClassNameProp) => { - const { t } = useTranslation("page-index") - - return ( - <div className={cn("flex flex-col", className)}> - <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> - {t("common:nav-use-cases-label")} - </div> - <h2 className="mb-4 me-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> - {t("page-index-bento-header")} - </h2> - </div> - ) -} - -export default Title diff --git a/src/components/BentoBox/index.tsx b/src/components/BentoBox/index.tsx deleted file mode 100644 index 3e347a1b18c..00000000000 --- a/src/components/BentoBox/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { ClassNameProp } from "@/lib/types" - -import BentoCard from "./BentoCard" -import Title from "./Title" -import { useBentoBox } from "./useBentoBox" - -const BentoBox = ({ className }: ClassNameProp) => { - const { items } = useBentoBox() - - return ( - <div className={className}> - <div className="flex grid-cols-bento flex-row gap-4 lg:grid"> - <Title className="lg:col-span-12 lg:flex xl:col-span-3 xl:col-start-2" /> - {items.map((item) => ( - <BentoCard key={item.title} {...item} /> - ))} - </div> - </div> - ) -} - -export default BentoBox diff --git a/src/pages/index.tsx b/src/pages/index.tsx index da317102791..27923737a38 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -13,9 +13,7 @@ import type { RSSItem, } from "@/lib/types" -import BentoBox from "@/components/BentoBox" import BentoCard from "@/components/BentoBox/BentoCard" -import Title from "@/components/BentoBox/Title" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" @@ -225,12 +223,32 @@ const HomePage = ({ ))} </div> - {/* Mobile */} - <div className="-mx-4 w-[100vw] overflow-hidden px-4 sm:-mx-6 sm:px-6 lg:hidden"> - <Title /> + {/* A new way to use the internet */} + <div + className={cn( + "max-lg:-mx-4 max-lg:w-[100vw] max-lg:overflow-hidden max-lg:px-4 sm:max-lg:-mx-6 sm:max-lg:px-6", // Mobile: Swiper cards + "lg:grid lg:grid-cols-bento lg:gap-4" // Desktop: BentoBox grid + )} + > + <div + className={cn( + "flex flex-col", + "lg:col-span-12 lg:flex xl:col-span-3 xl:col-start-2" + )} + > + <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> + {t("common:nav-use-cases-label")} + </div> + <h2 className="mb-4 me-4 mt-2 text-5xl font-black xl:mb-6 xl:text-7xl"> + {t("page-index:page-index-bento-header")} + </h2> + </div> + + {/* Mobile */} <Swiper options={{ effect: "cards", createElements: true }} className={cn( + "lg:hidden", // Mobile only "[&_.swiper-slide]:overflow-visible [&_.swiper-slide]:rounded-2xl [&_.swiper-slide]:shadow-card-hover", "[&_.swiper]:mx-auto [&_.swiper]:mt-4 [&_.swiper]:!flex [&_.swiper]:h-fit [&_.swiper]:max-w-128 [&_.swiper]:flex-col [&_.swiper]:items-center" )} @@ -245,10 +263,16 @@ const HomePage = ({ /> ))} </Swiper> - </div> - {/* Desktop */} - <BentoBox className="hidden lg:block" /> + {/* Desktop */} + {bentoItems.map(({ className, ...item }) => ( + <BentoCard + key={item.title} + {...item} + className={cn(className, "max-lg:hidden")} // Desktop only + /> + ))} + </div> <Section> <SectionBanner> From 0e137b9b6753ea26fadbc1c954bc21f785cb11e9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:43:35 -0700 Subject: [PATCH 242/273] refactor: BentoCard, ui/card compose with reusable components, move to Homepage component folder --- .../{BentoBox => Homepage}/BentoCard.tsx | 17 +++++++++++------ src/components/ui/card.tsx | 6 +++--- 2 files changed, 14 insertions(+), 9 deletions(-) rename src/components/{BentoBox => Homepage}/BentoCard.tsx (80%) diff --git a/src/components/BentoBox/BentoCard.tsx b/src/components/Homepage/BentoCard.tsx similarity index 80% rename from src/components/BentoBox/BentoCard.tsx rename to src/components/Homepage/BentoCard.tsx index 871db770da7..6ba4d565661 100644 --- a/src/components/BentoBox/BentoCard.tsx +++ b/src/components/Homepage/BentoCard.tsx @@ -7,6 +7,9 @@ import { ButtonLink } from "@/components/ui/buttons/Button" import { cn } from "@/lib/utils/cn" +import { Card, CardTitle } from "../ui/card" +import { Center } from "../ui/flex" + export type BentoCardProps = HTMLAttributes<HTMLDivElement> & { action: string href: string @@ -26,23 +29,25 @@ const BentoCard = ({ imgHeight, title, }: BentoCardProps) => ( - <div + <Card className={cn( - "bg-gradient-to-right flex items-center justify-evenly gap-4 rounded-2xl border p-8 lg:gap-16", + "bg-gradient-to-right flex items-center justify-evenly gap-4 border p-8 lg:gap-16", className )} > - <div className="mb-6 grid place-items-center"> + <Center> <TwImage src={imgSrc} alt="" width={imgWidth} height={imgHeight} /> - </div> + </Center> <div> - <h3 className="mb-2 text-3xl font-black">{title}</h3> + <CardTitle variant="black" className="mb-2"> + {title} + </CardTitle> <p className="mb-8 text-md">{children}</p> <ButtonLink href={href} variant="outline"> {action} <MdChevronRight /> </ButtonLink> </div> - </div> + </Card> ) export default BentoCard diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 95e8c171f08..428de74cb81 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -8,12 +8,12 @@ import { BaseLink } from "./Link" const titleVariants = cva("group-hover:underline", { variants: { variant: { - normal: "font-normal text-lg", - strong: "text-2xl font-bold", + bold: "text-2xl font-bold", + black: "text-3xl font-black", }, }, defaultVariants: { - variant: "strong", + variant: "bold", }, }) From be6d996d72a9c118c2d7b4407585e4f20c6f8792 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:49:27 -0700 Subject: [PATCH 243/273] style: move homepage related items to /Homepage --- src/components/{BentoBox => Homepage}/useBentoBox.ts | 0 src/{hooks => components/Homepage}/useHome.ts | 2 +- src/pages/index.tsx | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/components/{BentoBox => Homepage}/useBentoBox.ts (100%) rename src/{hooks => components/Homepage}/useHome.ts (99%) diff --git a/src/components/BentoBox/useBentoBox.ts b/src/components/Homepage/useBentoBox.ts similarity index 100% rename from src/components/BentoBox/useBentoBox.ts rename to src/components/Homepage/useBentoBox.ts diff --git a/src/hooks/useHome.ts b/src/components/Homepage/useHome.ts similarity index 99% rename from src/hooks/useHome.ts rename to src/components/Homepage/useHome.ts index d7f8a8d0c6e..142b1ef9467 100644 --- a/src/hooks/useHome.ts +++ b/src/components/Homepage/useHome.ts @@ -6,7 +6,7 @@ import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6" import type { EventCardProps, Lang } from "@/lib/types" import type { CodeExample } from "@/lib/interfaces" -import { useBentoBox } from "@/components/BentoBox/useBentoBox" +import { useBentoBox } from "@/components/Homepage/useBentoBox" import BlockHeap from "@/components/icons/block-heap.svg" import EthGlyphIcon from "@/components/icons/eth-glyph.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 27923737a38..a3a6d48402a 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -13,10 +13,11 @@ import type { RSSItem, } from "@/lib/types" -import BentoCard from "@/components/BentoBox/BentoCard" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" +import BentoCard from "@/components/Homepage/BentoCard" +import { useHome } from "@/components/Homepage/useHome" import AngleBrackets from "@/components/icons/angle-brackets.svg" import Calendar from "@/components/icons/calendar.svg" import CalendarAdd from "@/components/icons/calendar-add.svg" @@ -65,7 +66,6 @@ import { import "swiper/css/effect-cards" -import { useHome } from "@/hooks/useHome" import { fetchCommunityEvents } from "@/lib/api/calendarEvents" import { fetchEthPrice } from "@/lib/api/fetchEthPrice" import { fetchGrowThePie } from "@/lib/api/fetchGrowThePie" From 4da3525bfcb2960a60d8c83d4335706ade0b9ff7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 12:59:40 -0700 Subject: [PATCH 244/273] theme: sync chakra primaryAction and solid Button with latest tailwind updates --- src/@chakra-ui/components/Button.ts | 4 ++-- src/@chakra-ui/semanticTokens.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/@chakra-ui/components/Button.ts b/src/@chakra-ui/components/Button.ts index 6a04e1a0db1..c0741641a70 100644 --- a/src/@chakra-ui/components/Button.ts +++ b/src/@chakra-ui/components/Button.ts @@ -52,8 +52,8 @@ const variantSolid = defineStyle({ color: "background.base", }, _hover: { - color: "background.base", - bg: "primary.hover", + color: "white", + bg: "primary.actionHover", boxShadow: "buttonHover", }, _active: { diff --git a/src/@chakra-ui/semanticTokens.ts b/src/@chakra-ui/semanticTokens.ts index e2d0e3a4dc5..7d3a68a0a18 100644 --- a/src/@chakra-ui/semanticTokens.ts +++ b/src/@chakra-ui/semanticTokens.ts @@ -38,11 +38,12 @@ const semanticTokens = { // Main Set primary: { base: { _light: "purple.600", _dark: "purple.400" }, - action: { _light: "purple.500", _dark: "purple.500" }, highContrast: { _light: "purple.800", _dark: "purple.200" }, lowContrast: { _light: "purple.100", _dark: "purple.900" }, hover: { _light: "purple.500", _dark: "purple.500" }, visited: { _light: "purple.700", _dark: "purple.300" }, + action: { _light: "purple.600", _dark: "purple.600" }, + actionHover: { _light: "purple.500", _dark: "purple.500" }, // ! Deprecating primary.light light: { _light: "blue.100", _dark: "orange.100" }, // ! Deprecating primary.dark From 46537a57c9d0dbb5d5ff3cfcfbb4aacff2ee3a9e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 13:26:57 -0700 Subject: [PATCH 245/273] fix: small patches and improvements "section" semantic naming, named group for "links" to avoid underlining non-href cards, add section comments for improved scanability, and small adjustment to gradient border radius math --- src/components/ui/card.tsx | 4 ++-- src/components/ui/section.tsx | 2 +- src/pages/index.tsx | 15 +++++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 428de74cb81..e4cc9f5d50c 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -5,7 +5,7 @@ import { cn } from "@/lib/utils/cn" import { BaseLink } from "./Link" -const titleVariants = cva("group-hover:underline", { +const titleVariants = cva("group-hover/link:underline", { variants: { variant: { bold: "text-2xl font-bold", @@ -27,7 +27,7 @@ const Card = React.forwardRef<HTMLDivElement, CardProps>( <BaseLink href={href} className={cn( - "group rounded-2xl text-body no-underline hover:text-body", + "group/link rounded-2xl text-body no-underline hover:text-body", className )} hideArrow diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx index e82c7e74b75..b55c6489f05 100644 --- a/src/components/ui/section.tsx +++ b/src/components/ui/section.tsx @@ -6,7 +6,7 @@ const Section = React.forwardRef< HTMLDivElement, React.HTMLAttributes<HTMLDivElement> >(({ className, ...props }, ref) => ( - <div + <section ref={ref} className={cn("flex flex-col gap-8 md:flex-row lg:gap-16", className)} {...props} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index a3a6d48402a..6c8abb3696b 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -223,8 +223,8 @@ const HomePage = ({ ))} </div> - {/* A new way to use the internet */} - <div + {/* Use Cases - A new way to use the internet */} + <Section className={cn( "max-lg:-mx-4 max-lg:w-[100vw] max-lg:overflow-hidden max-lg:px-4 sm:max-lg:-mx-6 sm:max-lg:px-6", // Mobile: Swiper cards "lg:grid lg:grid-cols-bento lg:gap-4" // Desktop: BentoBox grid @@ -272,8 +272,9 @@ const HomePage = ({ className={cn(className, "max-lg:hidden")} // Desktop only /> ))} - </div> + </Section> + {/* Activity - The strongest ecosystem */} <Section> <SectionBanner> <TwImage src={ActivityImage} alt="" /> @@ -293,6 +294,7 @@ const HomePage = ({ </SectionContent> </Section> + {/* Learn - Understand Ethereum */} <Section className="md:flex-row-reverse"> <SectionBanner> <TwImage src={LearnImage} alt="" /> @@ -338,6 +340,7 @@ const HomePage = ({ {/* TODO: Add "The Internet Is Changing" section */} + {/* Builders - Blockchain's biggest builder community */} <Section> <SectionBanner> <TwImage src={BuildersImage} alt="" /> @@ -406,6 +409,7 @@ const HomePage = ({ </SectionContent> </Section> + {/* Ethereum.org community - Built by the community */} <Section className="md:flex-row-reverse"> <SectionBanner> <TwImage src={CommunityImage} alt="" /> @@ -494,6 +498,7 @@ const HomePage = ({ </SectionContent> </Section> + {/* Recent posts */} <div className="w-full"> <h3 className="mb-4 mt-2 text-4xl font-black lg:text-5xl"> {t("page-index:page-index-posts-header")} @@ -551,6 +556,7 @@ const HomePage = ({ </div> </div> + {/* Event */} <div className="w-full"> <h3 className="mb-4 mt-2 text-4xl font-black lg:text-5xl"> {t("page-index:page-index-events-header")} @@ -619,9 +625,10 @@ const HomePage = ({ </div> </div> + {/* Join ethereum.org */} <div className={cn( - "before:absolute before:-inset-px before:bottom-0 before:z-hide before:rounded-4xl before:content-['']", // Border/gradient positioning + "before:absolute before:-inset-px before:bottom-0 before:z-hide before:rounded-[calc(theme(borderRadius.4xl)+1px)] before:content-['']", // Border/gradient positioning "before:bg-gradient-to-b before:from-primary-hover/[0.24] before:to-primary-hover/[0.08] before:dark:from-primary-hover/40 before:dark:to-primary-hover/20", // Border/gradient coloring "relative inset-0 rounded-4xl bg-background" // Paint background color over card portion )} From 7b726b6fbe995fc2e350688581d9903a45084eab Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:32:55 -0700 Subject: [PATCH 246/273] fix: bento box classes on homepage avoids pre-loaded "Section" component, uses semantic "section" with as-needed classes instead to minimize hidden classes --- src/pages/index.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6c8abb3696b..ba932e6867d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -224,16 +224,16 @@ const HomePage = ({ </div> {/* Use Cases - A new way to use the internet */} - <Section + <section className={cn( - "max-lg:-mx-4 max-lg:w-[100vw] max-lg:overflow-hidden max-lg:px-4 sm:max-lg:-mx-6 sm:max-lg:px-6", // Mobile: Swiper cards + "max-lg:-mx-4 max-lg:flex max-lg:w-[100vw] max-lg:flex-col max-lg:overflow-hidden max-lg:px-4 sm:max-lg:-mx-6 sm:max-lg:px-6", // Mobile: Swiper cards "lg:grid lg:grid-cols-bento lg:gap-4" // Desktop: BentoBox grid )} > <div className={cn( "flex flex-col", - "lg:col-span-12 lg:flex xl:col-span-3 xl:col-start-2" + "lg:col-span-12 xl:col-span-3 xl:col-start-2" )} > <div className="w-fit rounded-full bg-primary-low-contrast px-4 py-0 text-sm uppercase text-primary"> @@ -253,12 +253,12 @@ const HomePage = ({ "[&_.swiper]:mx-auto [&_.swiper]:mt-4 [&_.swiper]:!flex [&_.swiper]:h-fit [&_.swiper]:max-w-128 [&_.swiper]:flex-col [&_.swiper]:items-center" )} > - {bentoItems.map((item) => ( + {bentoItems.map(({ className, ...item }) => ( <BentoCard key={item.title} imgHeight={220} {...item} - className={cn(item.className, "bg-background text-body")} + className={cn(className, "bg-background text-body")} imgWidth={undefined} // Intentionally last to override box /> ))} @@ -272,7 +272,7 @@ const HomePage = ({ className={cn(className, "max-lg:hidden")} // Desktop only /> ))} - </Section> + </section> {/* Activity - The strongest ecosystem */} <Section> From df6f53eaa3770c8321d1a67c965268d6bd473395 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:37:57 -0700 Subject: [PATCH 247/273] fix: empty bento box on load refactor useBentoBox as data without useState --- src/components/Homepage/useBentoBox.ts | 100 ++++++++++++------------- src/components/Homepage/useHome.ts | 2 +- 2 files changed, 47 insertions(+), 55 deletions(-) diff --git a/src/components/Homepage/useBentoBox.ts b/src/components/Homepage/useBentoBox.ts index 10275fb6e2f..ecfd63f7b34 100644 --- a/src/components/Homepage/useBentoBox.ts +++ b/src/components/Homepage/useBentoBox.ts @@ -1,10 +1,7 @@ -import { useEffect, useState } from "react" import { useTranslation } from "next-i18next" import { cn } from "@/lib/utils/cn" -import type { BentoCardProps } from "./BentoCard" - import ImpactImage from "@/public/images/impact_transparent.png" import ManAndDogImage from "@/public/images/man-and-dog-playing.png" import ManBabyWomanImage from "@/public/images/man-baby-woman.png" @@ -90,56 +87,51 @@ const getPosition = (position: number): string => export const useBentoBox = () => { const { t } = useTranslation("page-index") - const [items, setItems] = useState<BentoCardProps[]>([]) - - useEffect(() => { - setItems([ - { - title: t("page-index-bento-stablecoins-title"), - children: t("page-index:page-index-bento-stablecoins-content"), - action: t("page-index:page-index-bento-stablecoins-action"), - href: "/stablecoins/", - imgSrc: ImpactImage, - imgWidth: 400, - className: cn(colorOptions["primary"], getPosition(0)), - }, - { - title: t("page-index:page-index-bento-defi-title"), - children: t("page-index:page-index-bento-defi-content"), - action: t("page-index:page-index-bento-defi-action"), - href: "/defi/", - imgSrc: ManAndDogImage, - className: cn(colorOptions["accent-c"], getPosition(1)), - }, - { - title: t("page-index:page-index-bento-dapps-title"), - children: t("page-index:page-index-bento-dapps-content"), - action: t("page-index:page-index-bento-dapps-action"), - href: "/dapps/", - imgSrc: MergeImage, - imgWidth: 320, - className: cn(colorOptions["accent-b"], getPosition(2)), - }, - { - title: t("page-index:page-index-bento-networks-title"), - children: t("page-index:page-index-bento-networks-content"), - action: t("page-index:page-index-bento-networks-action"), - href: "/layer-2/", - imgSrc: ManBabyWomanImage, - imgWidth: 324, - className: cn(colorOptions["accent-a"], getPosition(3)), - }, - { - title: t("page-index:page-index-bento-assets-title"), - children: t("page-index:page-index-bento-assets-content"), - action: t("page-index:page-index-bento-assets-action"), - href: "/nft/", - imgSrc: RobotBarImage, - imgWidth: 324, - className: cn(colorOptions["primary"], getPosition(4)), - }, - ]) - }, [t]) - return { items } + return [ + { + title: t("page-index-bento-stablecoins-title"), + children: t("page-index:page-index-bento-stablecoins-content"), + action: t("page-index:page-index-bento-stablecoins-action"), + href: "/stablecoins/", + imgSrc: ImpactImage, + imgWidth: 400, + className: cn(colorOptions["primary"], getPosition(0)), + }, + { + title: t("page-index:page-index-bento-defi-title"), + children: t("page-index:page-index-bento-defi-content"), + action: t("page-index:page-index-bento-defi-action"), + href: "/defi/", + imgSrc: ManAndDogImage, + className: cn(colorOptions["accent-c"], getPosition(1)), + }, + { + title: t("page-index:page-index-bento-dapps-title"), + children: t("page-index:page-index-bento-dapps-content"), + action: t("page-index:page-index-bento-dapps-action"), + href: "/dapps/", + imgSrc: MergeImage, + imgWidth: 320, + className: cn(colorOptions["accent-b"], getPosition(2)), + }, + { + title: t("page-index:page-index-bento-networks-title"), + children: t("page-index:page-index-bento-networks-content"), + action: t("page-index:page-index-bento-networks-action"), + href: "/layer-2/", + imgSrc: ManBabyWomanImage, + imgWidth: 324, + className: cn(colorOptions["accent-a"], getPosition(3)), + }, + { + title: t("page-index:page-index-bento-assets-title"), + children: t("page-index:page-index-bento-assets-content"), + action: t("page-index:page-index-bento-assets-action"), + href: "/nft/", + imgSrc: RobotBarImage, + imgWidth: 324, + className: cn(colorOptions["primary"], getPosition(4)), + }, + ] } diff --git a/src/components/Homepage/useHome.ts b/src/components/Homepage/useHome.ts index 142b1ef9467..6f9a51dbb2a 100644 --- a/src/components/Homepage/useHome.ts +++ b/src/components/Homepage/useHome.ts @@ -36,7 +36,7 @@ export const useHome = () => { const [isModalOpen, setModalOpen] = useState(false) const [activeCode, setActiveCode] = useState(0) - const { items: bentoItems } = useBentoBox() + const bentoItems = useBentoBox() const toggleCodeExample = (id: number): void => { setActiveCode(id) From cb6f1ca4f29bee34475869503cdabd06b9a1a872 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:53:26 -0700 Subject: [PATCH 248/273] fix: hover and focus states for card `group/link` --- src/components/ui/card.tsx | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index e4cc9f5d50c..1fc23d96378 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -5,17 +5,20 @@ import { cn } from "@/lib/utils/cn" import { BaseLink } from "./Link" -const titleVariants = cva("group-hover/link:underline", { - variants: { - variant: { - bold: "text-2xl font-bold", - black: "text-3xl font-black", +const titleVariants = cva( + "group-hover/link:underline group-focus/link:underline", + { + variants: { + variant: { + bold: "text-2xl font-bold", + black: "text-3xl font-black", + }, }, - }, - defaultVariants: { - variant: "bold", - }, -}) + defaultVariants: { + variant: "bold", + }, + } +) type CardProps = React.HTMLAttributes<HTMLDivElement> & { href?: string @@ -68,7 +71,8 @@ const CardBanner = React.forwardRef< className={cn( "h-48 w-full self-stretch overflow-hidden rounded-2xl", "bg-gradient-to-b from-accent-a/10 to-accent-a/0 dark:from-accent-a/15 dark:to-accent-a/5", - "[&_img]:size-full [&_img]:object-cover [&_img]:duration-200 group-hover:[&_img]:scale-110 group-hover:[&_img]:duration-200", + "[&_img]:size-full [&_img]:object-cover [&_img]:duration-200", + "group-hover/link:[&_img]:scale-110 group-hover/link:[&_img]:duration-200 group-focus/link:[&_img]:scale-110 group-focus/link:[&_img]:duration-200", className )} {...props} From 281fda4db05a3a0ee3445da6c7e2b734c72a6b93 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:28:31 -0700 Subject: [PATCH 249/273] chore: patches --- src/pages/index.tsx | 2 +- src/styles/semantic-tokens.css | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index ba932e6867d..5c3ef5d4a30 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -479,7 +479,7 @@ const HomePage = ({ <ButtonLink className="h-fit w-full text-nowrap px-5 sm:w-fit xl:self-center" size="md" - variant="outline" + variant="ghost" href={calendarLink} hideArrow > diff --git a/src/styles/semantic-tokens.css b/src/styles/semantic-tokens.css index 14b7ea4b9e6..e8400ac7236 100644 --- a/src/styles/semantic-tokens.css +++ b/src/styles/semantic-tokens.css @@ -51,10 +51,10 @@ --shadow-color-c: hsla(var(--purple-700), 0.04); --shadow-color-d: hsla(var(--purple-100), 0.08); - --shadow-svg-button-link-1: -2px 2px 12px 1px var(--shadow-color-a); - --shadow-svg-button-link-2: -16px 16px 12px -3px var(--shadow-color-a); - --shadow-svg-button-link-3: -32px 32px 24px -6px var(--shadow-color-a); - --shadow-svg-button-link-4: -40px 40px 40px -12px var(--shadow-color-b); + --shadow-svg-button-link-1: 2px 2px 12px 1px var(--shadow-color-a); + --shadow-svg-button-link-2: 12px 16px 12px -3px var(--shadow-color-a); + --shadow-svg-button-link-3: 24px 32px 24px -6px var(--shadow-color-a); + --shadow-svg-button-link-4: 32px 40px 40px -12px var(--shadow-color-b); --shadow-svg-button-link-1-hover: 0px 0px 12px 2px var(--shadow-color-a); --shadow-svg-button-link-2-hover: 0px 0px 12px 2px var(--shadow-color-a); --shadow-svg-button-link-3-hover: 0px 0px 24px 2px var(--shadow-color-a); From 3962a0da67b64c68bd04c9b311502554bf5096b0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:32:57 -0700 Subject: [PATCH 250/273] chore: adjust button container sizing --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5c3ef5d4a30..32686e16725 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -638,7 +638,7 @@ const HomePage = ({ <h2>{t("page-index:page-index-join-header")}</h2> <p>{t("page-index:page-index-join-description")}</p> </div> - <div className="mx-auto grid grid-cols-1 gap-16 md:max-w-screen-md md:grid-cols-2"> + <div className="mx-auto grid grid-cols-1 gap-16 md:grid-cols-2"> {joinActions.map( ({ Svg, label, href, className, description }) => ( <SvgButtonLink From fa9f8b0faa79e4f5cf76d67c4e58a3a6b3effdf6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:42:53 -0700 Subject: [PATCH 251/273] refactor: add variants to ui/section --- src/components/ui/section.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx index b55c6489f05..9f86add943f 100644 --- a/src/components/ui/section.tsx +++ b/src/components/ui/section.tsx @@ -1,14 +1,27 @@ import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils/cn" +const variants = cva("w-full scroll-mt-20", { + variants: { + variant: { + responsiveFlex: "flex flex-col gap-8 md:flex-row lg:gap-16", + normal: "", + }, + }, + defaultVariants: { + variant: "normal", + }, +}) + const Section = React.forwardRef< HTMLDivElement, - React.HTMLAttributes<HTMLDivElement> ->(({ className, ...props }, ref) => ( + React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof variants> +>(({ className, variant, ...props }, ref) => ( <section ref={ref} - className={cn("flex flex-col gap-8 md:flex-row lg:gap-16", className)} + className={cn(variants({ variant, className }))} {...props} /> )) From 8a1be751ffa6a49f4cd00a81fc80b3f97dab816f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:45:37 -0700 Subject: [PATCH 252/273] feat: homepage sections to use ui/section using new variant setup; applies custom ID to each for hash linking --- src/pages/index.tsx | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 32686e16725..365bdadbfa2 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -225,6 +225,7 @@ const HomePage = ({ {/* Use Cases - A new way to use the internet */} <section + id="use" className={cn( "max-lg:-mx-4 max-lg:flex max-lg:w-[100vw] max-lg:flex-col max-lg:overflow-hidden max-lg:px-4 sm:max-lg:-mx-6 sm:max-lg:px-6", // Mobile: Swiper cards "lg:grid lg:grid-cols-bento lg:gap-4" // Desktop: BentoBox grid @@ -275,7 +276,7 @@ const HomePage = ({ </section> {/* Activity - The strongest ecosystem */} - <Section> + <Section id="activity" variant="responsiveFlex"> <SectionBanner> <TwImage src={ActivityImage} alt="" /> </SectionBanner> @@ -295,7 +296,11 @@ const HomePage = ({ </Section> {/* Learn - Understand Ethereum */} - <Section className="md:flex-row-reverse"> + <Section + id="learn" + variant="responsiveFlex" + className="md:flex-row-reverse" + > <SectionBanner> <TwImage src={LearnImage} alt="" /> </SectionBanner> @@ -341,7 +346,7 @@ const HomePage = ({ {/* TODO: Add "The Internet Is Changing" section */} {/* Builders - Blockchain's biggest builder community */} - <Section> + <Section id="builders" variant="responsiveFlex"> <SectionBanner> <TwImage src={BuildersImage} alt="" /> </SectionBanner> @@ -410,7 +415,11 @@ const HomePage = ({ </Section> {/* Ethereum.org community - Built by the community */} - <Section className="md:flex-row-reverse"> + <Section + id="community" + variant="responsiveFlex" + className="md:flex-row-reverse" + > <SectionBanner> <TwImage src={CommunityImage} alt="" /> </SectionBanner> @@ -499,7 +508,7 @@ const HomePage = ({ </Section> {/* Recent posts */} - <div className="w-full"> + <Section id="recent"> <h3 className="mb-4 mt-2 text-4xl font-black lg:text-5xl"> {t("page-index:page-index-posts-header")} </h3> @@ -554,10 +563,10 @@ const HomePage = ({ ))} </div> </div> - </div> + </Section> - {/* Event */} - <div className="w-full"> + {/* Events */} + <Section id="events"> <h3 className="mb-4 mt-2 text-4xl font-black lg:text-5xl"> {t("page-index:page-index-events-header")} </h3> @@ -623,10 +632,11 @@ const HomePage = ({ {t("page-index:page-index-events-action")} <MdChevronRight /> </ButtonLink> </div> - </div> + </Section> {/* Join ethereum.org */} - <div + <Section + id="join" className={cn( "before:absolute before:-inset-px before:bottom-0 before:z-hide before:rounded-[calc(theme(borderRadius.4xl)+1px)] before:content-['']", // Border/gradient positioning "before:bg-gradient-to-b before:from-primary-hover/[0.24] before:to-primary-hover/[0.08] before:dark:from-primary-hover/40 before:dark:to-primary-hover/20", // Border/gradient coloring @@ -655,7 +665,7 @@ const HomePage = ({ )} </div> </div> - </div> + </Section> </div> </Flex> ) From c117744d0ed0bed3bcefc06fe6e0a0dd1bd888f1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:35:29 -0700 Subject: [PATCH 253/273] chore: adjustments, add todo --- src/components/ui/section.tsx | 5 +---- src/pages/index.tsx | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx index 9f86add943f..dd4a440de78 100644 --- a/src/components/ui/section.tsx +++ b/src/components/ui/section.tsx @@ -3,16 +3,13 @@ import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils/cn" +// TODO: Add to design system const variants = cva("w-full scroll-mt-20", { variants: { variant: { responsiveFlex: "flex flex-col gap-8 md:flex-row lg:gap-16", - normal: "", }, }, - defaultVariants: { - variant: "normal", - }, }) const Section = React.forwardRef< diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 365bdadbfa2..8805ef0386f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -224,7 +224,7 @@ const HomePage = ({ </div> {/* Use Cases - A new way to use the internet */} - <section + <Section id="use" className={cn( "max-lg:-mx-4 max-lg:flex max-lg:w-[100vw] max-lg:flex-col max-lg:overflow-hidden max-lg:px-4 sm:max-lg:-mx-6 sm:max-lg:px-6", // Mobile: Swiper cards @@ -273,7 +273,7 @@ const HomePage = ({ className={cn(className, "max-lg:hidden")} // Desktop only /> ))} - </section> + </Section> {/* Activity - The strongest ecosystem */} <Section id="activity" variant="responsiveFlex"> From 38acf901c99add798c095cef7da5eff33ca75312 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:41:05 -0700 Subject: [PATCH 254/273] refactor: MainArticle to tailwind --- src/components/MainArticle.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/MainArticle.tsx b/src/components/MainArticle.tsx index 3ce72e677d4..cbe807d47a8 100644 --- a/src/components/MainArticle.tsx +++ b/src/components/MainArticle.tsx @@ -1,9 +1,16 @@ -import { Box, type BoxProps } from "@chakra-ui/react" +import { cn } from "@/lib/utils/cn" import { MAIN_CONTENT_ID } from "@/lib/constants" -const MainArticle = (props: BoxProps) => ( - <Box as="article" id={MAIN_CONTENT_ID} scrollMarginTop={24} {...props} /> +const MainArticle = ({ + className, + ...props +}: React.HTMLAttributes<HTMLDivElement>) => ( + <article + id={MAIN_CONTENT_ID} + className={cn("scroll-mt-24", className)} + {...props} + /> ) export default MainArticle From 6d1dde66719791665b753f08324248285e69cf77 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari <pettinarip@gmail.com> Date: Wed, 4 Sep 2024 13:16:57 +0200 Subject: [PATCH 255/273] add missing Suspense wrapper around lazy component --- src/pages/index.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 8805ef0386f..843c12eb538 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -290,7 +290,9 @@ const HomePage = ({ <p className="mt-8 text-xl font-bold"> {t("page-index:page-index-activity-description")} </p> - <StatsBoxGrid metricResults={metricResults} /> + <Suspense fallback={<Skeleton />}> + <StatsBoxGrid metricResults={metricResults} /> + </Suspense> </div> </SectionContent> </Section> From 38339fcb064d13d70dc47015ded761c317bd2b37 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:55:13 -0700 Subject: [PATCH 256/273] refactor: MainArticle for tailwind --- src/pages/developers/learning-tools.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/developers/learning-tools.tsx b/src/pages/developers/learning-tools.tsx index 4df27c84044..2020e03a2aa 100644 --- a/src/pages/developers/learning-tools.tsx +++ b/src/pages/developers/learning-tools.tsx @@ -424,7 +424,7 @@ const LearningToolsPage = () => { "page-developers-learning-tools:page-learning-tools-meta-desc" )} /> - <MainArticle w="full"> + <MainArticle className="w-full"> <Box w="full"> <Header> <H1> From 701648ee4715a50e830a88052cb41e9458f7535a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:05:18 -0700 Subject: [PATCH 257/273] chore: apply review suggestions, resolve merge --- src/components/Hero/HomeHero/index.tsx | 4 ++-- src/components/Homepage/useHome.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 1f007f442af..e333649c95a 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -12,7 +12,7 @@ const HomeHero = ({ heroImg, className }: HomeHeroProps) => { return ( <div className={className}> - <div className="h-[300px] sm:h-[350px] md:h-[380px] lg:h-[440px]"> + <div className="h-[240px] md:h-[380px] lg:h-[480px]"> <TwImage src={heroImg} alt={t("page-index:page-index-hero-image-alt")} @@ -22,7 +22,7 @@ const HomeHero = ({ heroImg, className }: HomeHeroProps) => { priority /> </div> - <div className="flex flex-col items-center border-t-[3px] border-primary-low-contrast px-4 py-12 text-center"> + <div className="flex flex-col items-center border-t-[3px] border-primary-low-contrast px-4 py-10 text-center"> <Morpher /> <div className="flex flex-col items-center gap-y-5 lg:max-w-2xl"> <h1 className="font-black">{t("page-index:page-index-title")}</h1> diff --git a/src/components/Homepage/useHome.ts b/src/components/Homepage/useHome.ts index 6f9a51dbb2a..1d7993aee5f 100644 --- a/src/components/Homepage/useHome.ts +++ b/src/components/Homepage/useHome.ts @@ -20,10 +20,10 @@ import { isValidDate } from "@/lib/utils/date" import { isLangRightToLeft } from "@/lib/utils/translations" import events from "@/data/community-events.json" +import CreateWalletContent from "@/data/CreateWallet" import { GITHUB_REPO_URL } from "@/lib/constants" -import CreateWalletContent from "!!raw-loader!@/data/CreateWallet.js" import SimpleDomainRegistryContent from "!!raw-loader!@/data/SimpleDomainRegistry.sol" import SimpleTokenContent from "!!raw-loader!@/data/SimpleToken.sol" import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" @@ -31,13 +31,14 @@ import SimpleWalletContent from "!!raw-loader!@/data/SimpleWallet.sol" export const useHome = () => { const { t } = useTranslation(["common", "page-index"]) const { locale, asPath } = useRouter() - const dir = isLangRightToLeft(locale as Lang) ? "rtl" : "ltr" const [isModalOpen, setModalOpen] = useState(false) const [activeCode, setActiveCode] = useState(0) const bentoItems = useBentoBox() + const dir = isLangRightToLeft(locale as Lang) ? "rtl" : "ltr" + const toggleCodeExample = (id: number): void => { setActiveCode(id) setModalOpen(true) From f4c0ceb5e3dd27d6765cec780c04f7b2ba098d48 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:22:07 -0700 Subject: [PATCH 258/273] feat: add ui/skeleton --- src/components/ui/skeleton.tsx | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/components/ui/skeleton.tsx diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 00000000000..de142751443 --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,56 @@ +import { cn } from "@/lib/utils/cn" + +// Pseudo-random list of skeleton widths for multiple lines +const widths = [ + "w-1/3", + "w-1/5", + "w-4", + "w-1/4", + "w-1/2", + "w-1/6", + "w-8", + "w-1/4", + "w-1/3", + "w-1/5", + "w-1/6", + "w-4", + "w-1/4", + "w-1/3", + "w-1/2", + "w-1/5", +] + +const Skeleton = ({ + className, + ...props +}: React.HTMLAttributes<HTMLDivElement>) => { + return ( + <div + className={cn("h-4 animate-pulse rounded bg-disabled", className)} + {...props} + /> + ) +} + +type SkeletonLinesProps = React.HTMLAttributes<HTMLDivElement> & { + noOfLines?: number +} + +const SkeletonLines = ({ + className, + noOfLines = 1, + ...props +}: SkeletonLinesProps) => ( + <div + className={cn("flex !h-full flex-col gap-4 px-4 pt-8", className)} + {...props} + > + {Array(noOfLines) + .fill(0) + .map((_, idx) => ( + <Skeleton key={idx} className={cn("h-3", widths[idx])} /> + ))} + </div> +) + +export { Skeleton, SkeletonLines } From f44c0a9354aa76ec4c21c8b8695d7c21c2d3adee Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:22:31 -0700 Subject: [PATCH 259/273] chore: adjust section scroll mt --- src/components/ui/section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx index dd4a440de78..565d22c86c1 100644 --- a/src/components/ui/section.tsx +++ b/src/components/ui/section.tsx @@ -4,7 +4,7 @@ import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils/cn" // TODO: Add to design system -const variants = cva("w-full scroll-mt-20", { +const variants = cva("w-full scroll-mt-24", { variants: { variant: { responsiveFlex: "flex flex-col gap-8 md:flex-row lg:gap-16", From 25ccbe6fddfc49a63380c87b81910957d8b1b7cf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:30:32 -0700 Subject: [PATCH 260/273] refactor: use ui/skeleton, and MainArticle --- src/pages/index.tsx | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 84619504496..7642b38f1a0 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -3,7 +3,6 @@ import type { GetStaticProps, InferGetStaticPropsType } from "next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" import { FaDiscord, FaGithub } from "react-icons/fa6" import { MdChevronRight } from "react-icons/md" -import { Flex, Skeleton } from "@chakra-ui/react" import type { AllMetricData, @@ -43,6 +42,7 @@ import { SectionHeader, SectionTag, } from "@/components/ui/section" +import { SkeletonLines } from "@/components/ui/skeleton" import WindowBox from "@/components/WindowBox" import { cn } from "@/lib/utils/cn" @@ -182,13 +182,7 @@ const HomePage = ({ } = useHome() return ( - <Flex - as={MainArticle} - flexDirection="column" - alignItems="center" - dir={dir} - width="full" - > + <MainArticle className="flex w-full flex-col items-center" dir={dir}> <PageMetadata title={t("page-index:page-index-meta-title")} description={t("page-index:page-index-meta-description")} @@ -288,7 +282,7 @@ const HomePage = ({ <p className="mt-8 text-xl font-bold"> {t("page-index:page-index-activity-description")} </p> - <Suspense fallback={<Skeleton />}> + <Suspense fallback={<SkeletonLines noOfLines={10} />}> <StatsBoxGrid metricResults={metricResults} /> </Suspense> </div> @@ -394,13 +388,13 @@ const HomePage = ({ </div> {isModalOpen && ( - // TODO: Migrate CodeModal, CodeBlock, Skeleton from Chakra-UI to tailwind/shad-cn + // TODO: Migrate CodeModal, CodeBlock from Chakra-UI to tailwind/shad-cn <CodeModal isOpen={isModalOpen} setIsOpen={setModalOpen} title={codeExamples[activeCode].title} > - <Suspense fallback={<Skeleton />}> + <Suspense fallback={<SkeletonLines noOfLines={16} />}> <Codeblock codeLanguage={codeExamples[activeCode].codeLanguage} allowCollapse={false} @@ -667,7 +661,7 @@ const HomePage = ({ </div> </Section> </div> - </Flex> + </MainArticle> ) } From 655433c7f865fd6bdf8b4ad90aa48bf6454b41ca Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:47:55 -0700 Subject: [PATCH 261/273] chore: adjust homepage layout spacing --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7642b38f1a0..37f37b0348c 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -189,7 +189,7 @@ const HomePage = ({ /> <TranslatathonBanner pathname={asPath} /> <HomeHero heroImg={Hero} className="w-full" /> - <div className="w-full space-y-16 px-4 sm:px-6 md:space-y-32"> + <div className="w-full space-y-32 lg:space-y-48"> <div className="my-20 grid w-full grid-cols-2 gap-x-4 gap-y-8 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( <Fragment key={label}> From 5a624f507f4f37e80ae155fc44be5bec0abf8726 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:48:56 -0700 Subject: [PATCH 262/273] feat: update Codeblock for tw, latest color theme --- src/components/Codeblock.tsx | 112 +++++++++++++++-------------------- 1 file changed, 47 insertions(+), 65 deletions(-) diff --git a/src/components/Codeblock.tsx b/src/components/Codeblock.tsx index 9f00303918c..ead9c3ddb85 100644 --- a/src/components/Codeblock.tsx +++ b/src/components/Codeblock.tsx @@ -6,34 +6,32 @@ import Highlight, { PrismTheme, } from "prism-react-renderer" import Prism from "prism-react-renderer/prism" -import { Box, BoxProps, Flex, useColorModeValue } from "@chakra-ui/react" // https://github.com/FormidableLabs/prism-react-renderer/tree/master#custom-language-support import CopyToClipboard from "@/components/CopyToClipboard" import Emoji from "@/components/Emoji" +import { Flex } from "@/components/ui/flex" + +import { cn } from "@/lib/utils/cn" import { LINES_BEFORE_COLLAPSABLE } from "@/lib/constants" + +import useColorModeValue from "@/hooks/useColorModeValue" ;(typeof global !== "undefined" ? global : window).Prism = Prism require("prismjs/components/prism-solidity") -const TopBarItem = (props: BoxProps) => { - const bgColor = useColorModeValue("#f7f7f7", "#363641") - +const TopBarItem = ({ + className, + ...props +}: React.HTMLAttributes<HTMLDivElement>) => { return ( - <Box - border="1px" - borderRadius="base" - borderColor="searchBorder" - bg={bgColor} - ms={2} - py={1} - px={2} - _hover={{ - cursor: "pointer", - color: "text100", - transform: "scale(1.04)", - boxShadow: "1px 1px 8px 1px rgba(0, 0, 0, 0.5)", - }} + <div + className={cn( + "ms-2 rounded border px-2 py-1 shadow-[1px_1px_8px_1px_rgba(var(--black),_0.5)] transition-transform duration-100", + "hover:scale-105 hover:cursor-pointer hover:bg-gray-200 hover:shadow-md hover:transition-transform hover:duration-100", + "bg-background-highlight hover:bg-background", + className + )} {...props} /> ) @@ -42,8 +40,8 @@ const TopBarItem = (props: BoxProps) => { const codeTheme = { light: { plain: { - backgroundColor: "#fafafa", - color: "#333333", + backgroundColor: "#f7f7f7", // background-highlight (gray-50) + color: "#6C24DF", // primary (purple-600) }, styles: [ { @@ -114,8 +112,8 @@ const codeTheme = { dark: { // Pulled from `defaultProps.theme` for potential customization plain: { - backgroundColor: "#2a2734", - color: "#9a86fd", + backgroundColor: "#121212", // background-highlight (gray-900) + color: "#B38DF0", // primary (purple-400) }, styles: [ { @@ -251,18 +249,17 @@ const Codeblock = ({ return ( /* Overwrites codeblocks inheriting RTL styling in Right-To-Left script languages (e.g. Arabic) */ /* Context: https://github.com/ethereum/ethereum-org-website/issues/6202 */ - <Box position="relative" dir="ltr"> - <Box - borderRadius="base" - border={fromHomepage ? "none" : "1px solid"} - borderColor="border" - maxH={ - isCollapsed + <div className="relative" dir="ltr"> + <div + className={cn( + "mb-4 overflow-scroll rounded", + fromHomepage && "mb-0 border" + )} + style={{ + maxHeight: isCollapsed ? `calc((1.2rem * ${LINES_BEFORE_COLLAPSABLE}) + 4.185rem)` - : "none" - } - overflow="scroll" - mb={fromHomepage ? 0 : 4} + : "none", + }} > <Highlight {...defaultProps} @@ -271,53 +268,38 @@ const Codeblock = ({ theme={selectedTheme as PrismTheme} > {({ className, style, tokens, getLineProps, getTokenProps }) => ( - <Box - as="pre" + <pre + className={cn( + "m-0 w-fit min-w-full overflow-visible py-6 ps-4", + hasTopBar && "pt-[2.75rem]", + className + )} style={style} - className={className} - pt={hasTopBar ? "2.75rem" : 6} - pb={6} - ps={4} - m={0} - overflow="visible" - minW="full" - w="fit-content" > {tokens.map((line, i) => { return i === tokens.length - 1 && line[0].content === "" ? null : ( - <Box + <div key={i} - display="table-row" + style={{ display: "table-row" }} {...getLineProps({ line, key: i })} > {shouldShowLineNumbers && ( - <Box - as="span" - display="table-cell" - textAlign="end" - pe={8} - userSelect="none" - opacity={0.4} - > + <span className="table-cell select-none pe-8 text-end opacity-40"> {i + 1} - </Box> + </span> )} - <Box as="span" display="table-cell"> + <span className="table-cell"> {line.map((token, key) => ( <span key={key} {...getTokenProps({ token, key })} /> ))} - </Box> - </Box> + </span> + </div> ) })} {!fromHomepage && ( <Flex - className={className} - justify="flex-end" - position="absolute" - top={3} - insetInlineEnd={4} + className={cn("absolute end-4 top-3 justify-end", className)} > {allowCollapse && totalLines - 1 > LINES_BEFORE_COLLAPSABLE && ( @@ -349,11 +331,11 @@ const Codeblock = ({ )} </Flex> )} - </Box> + </pre> )} </Highlight> - </Box> - </Box> + </div> + </div> ) } From 6d1f252c89751a846214af2bea3d72ec4b1545de Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:48:29 -0700 Subject: [PATCH 263/273] refactor: extract exported tailwind config --- src/lib/types.ts | 5 +---- src/lib/utils/screen.ts | 21 +++++++++------------ src/styles/config.ts | 7 +++++++ 3 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 src/styles/config.ts diff --git a/src/lib/types.ts b/src/lib/types.ts index 9093c74f0a3..ec5a8e9853a 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -4,7 +4,6 @@ import type { AppProps } from "next/app" import type { StaticImageData } from "next/image" import type { SSRConfig } from "next-i18next" import type { ReactElement, ReactNode } from "react" -import resolveConfig from "tailwindcss/resolveConfig" import type { Icon } from "@chakra-ui/react" import type { @@ -26,8 +25,8 @@ import allQuestionData from "@/data/quizzes/questionBank" import { WALLETS_FILTERS_DEFAULT } from "./constants" -import tailwindConfig from "@/../tailwind.config" import { layoutMapping } from "@/pages/[...slug]" +import twConfig from "@/styles/config" // Credit: https://stackoverflow.com/a/52331580 export type Unpacked<T> = T extends (infer U)[] ? U : T @@ -829,6 +828,4 @@ export type EventCardProps = { imageUrl?: string } -const twConfig = resolveConfig(tailwindConfig) - export type BreakpointKey = keyof typeof twConfig.theme.screens diff --git a/src/lib/utils/screen.ts b/src/lib/utils/screen.ts index e1fe01dc059..3fda3f97301 100644 --- a/src/lib/utils/screen.ts +++ b/src/lib/utils/screen.ts @@ -1,15 +1,12 @@ -import resolveConfig from "tailwindcss/resolveConfig" - import type { BreakpointKey } from "../types" -import tailwindConfig from "@/../tailwind.config" - -const fullConfig = resolveConfig(tailwindConfig) +import twConfig from "@/styles/config" -export const breakpointAsNumber = Object.entries( - fullConfig.theme.screens -).reduce((acc, curr) => { - const [breakpoint, value] = curr - acc[breakpoint] = +value.split("px")[0] - return acc -}, {}) as Record<BreakpointKey, number> +export const breakpointAsNumber = Object.entries(twConfig.theme.screens).reduce( + (acc, curr) => { + const [breakpoint, value] = curr + acc[breakpoint] = +value.split("px")[0] + return acc + }, + {} +) as Record<BreakpointKey, number> diff --git a/src/styles/config.ts b/src/styles/config.ts new file mode 100644 index 00000000000..8ce8205b09d --- /dev/null +++ b/src/styles/config.ts @@ -0,0 +1,7 @@ +import resolveConfig from "tailwindcss/resolveConfig" + +import tailwindConfig from "../../tailwind.config" + +const config = resolveConfig(tailwindConfig) + +export default config From 9671459fe45af293c70b7b3094014c3135828fd0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:16:34 -0700 Subject: [PATCH 264/273] refactor: create tw rtl-reponsive next/prev icons as "Chevron" file with `ChevronNext` and `ChevronPrev` exports, deprecating non-tailwind "NextChevron" from nav component structure; updated references --- src/components/Chevron/index.tsx | 21 +++++++++++++++++++++ src/components/Nav/Menu/NextChevron.tsx | 15 --------------- src/components/Nav/Menu/SubMenu.tsx | 4 ++-- 3 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 src/components/Chevron/index.tsx delete mode 100644 src/components/Nav/Menu/NextChevron.tsx diff --git a/src/components/Chevron/index.tsx b/src/components/Chevron/index.tsx new file mode 100644 index 00000000000..33116e5cdd9 --- /dev/null +++ b/src/components/Chevron/index.tsx @@ -0,0 +1,21 @@ +import { MdChevronLeft, MdChevronRight } from "react-icons/md" + +import { cn } from "@/lib/utils/cn" + +import { useRtlFlip } from "@/hooks/useRtlFlip" + +export const ChevronNext = ({ + className, + ...props +}: React.HTMLAttributes<SVGElement>) => { + const { twFlipForRtl } = useRtlFlip() + return <MdChevronRight className={cn(className, twFlipForRtl)} {...props} /> +} + +export const ChevronPrev = ({ + className, + ...props +}: React.HTMLAttributes<SVGElement>) => { + const { twFlipForRtl } = useRtlFlip() + return <MdChevronLeft className={cn(className, twFlipForRtl)} {...props} /> +} diff --git a/src/components/Nav/Menu/NextChevron.tsx b/src/components/Nav/Menu/NextChevron.tsx deleted file mode 100644 index 425d211b1bb..00000000000 --- a/src/components/Nav/Menu/NextChevron.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { useRouter } from "next/router" -import { MdChevronLeft, MdChevronRight } from "react-icons/md" -import { Icon, type IconProps } from "@chakra-ui/react" - -import type { Lang } from "@/lib/types" - -import { isLangRightToLeft } from "@/lib/utils/translations" - -const NextChevron = (props: IconProps) => { - const { locale } = useRouter() - const isRtl = isLangRightToLeft(locale! as Lang) - return <Icon as={isRtl ? MdChevronLeft : MdChevronRight} {...props} /> -} - -export default NextChevron diff --git a/src/components/Nav/Menu/SubMenu.tsx b/src/components/Nav/Menu/SubMenu.tsx index e53f2a0f5ae..621772c304b 100644 --- a/src/components/Nav/Menu/SubMenu.tsx +++ b/src/components/Nav/Menu/SubMenu.tsx @@ -19,6 +19,7 @@ import { } from "@radix-ui/react-navigation-menu" import { ButtonProps } from "@/components/Buttons" +import { ChevronNext } from "@/components/Chevron" import Link from "@/components/Link" import { trackCustomEvent } from "@/lib/utils/matomo" @@ -27,7 +28,6 @@ import { cleanPath } from "@/lib/utils/url" import type { Level, NavItem, NavSectionKey } from "../types" import ItemContent from "./ItemContent" -import NextChevron from "./NextChevron" import { useSubMenu } from "./useSubMenu" type LvlContentProps = { @@ -83,7 +83,7 @@ const SubMenu = ({ lvl, items, activeSection, onClose }: LvlContentProps) => { const buttonProps: ButtonProps = { color: menuColors.body, leftIcon: lvl === 1 && icon ? <Icon as={icon} /> : undefined, - rightIcon: isLink ? undefined : <NextChevron />, + rightIcon: isLink ? undefined : <ChevronNext />, position: "relative", w: "full", me: -PADDING, From 4a2fc64627c4d423e44dc14b4e32734d876df8d5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:16:56 -0700 Subject: [PATCH 265/273] fix: twFlipForRtl horizontal flip class --- src/hooks/useRtlFlip.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/useRtlFlip.ts b/src/hooks/useRtlFlip.ts index b3a39369818..3c684d06800 100644 --- a/src/hooks/useRtlFlip.ts +++ b/src/hooks/useRtlFlip.ts @@ -7,7 +7,7 @@ import { isLangRightToLeft } from "@/lib/utils/translations" type UseDirection = { /** @deprecated */ flipForRtl: "scaleX(-1)" | undefined // transform (deprecated) - twFlipForRtl: "-scale-x-1" | "" // className + twFlipForRtl: "-scale-x-100" | "" // className isRtl: boolean direction: "ltr" | "rtl" } @@ -22,7 +22,7 @@ export const useRtlFlip = (): UseDirection => { const isRtl = isLangRightToLeft(locale as Lang) return { flipForRtl: isRtl ? "scaleX(-1)" : undefined, // transform (deprecated) - twFlipForRtl: isRtl ? "-scale-x-1" : "", // className (preferred) + twFlipForRtl: isRtl ? "-scale-x-100" : "", // className (preferred) isRtl, direction: isRtl ? "rtl" : "ltr", } From 7b9b8b21417c5d1a218522f5db080a2dfc7bb8da Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:17:27 -0700 Subject: [PATCH 266/273] fix: use rtl responsive chevrons --- src/components/Homepage/BentoCard.tsx | 4 ++-- src/components/Swiper/index.tsx | 7 ++++--- src/pages/index.tsx | 12 ++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/components/Homepage/BentoCard.tsx b/src/components/Homepage/BentoCard.tsx index 6ba4d565661..1ff68bb53cb 100644 --- a/src/components/Homepage/BentoCard.tsx +++ b/src/components/Homepage/BentoCard.tsx @@ -1,12 +1,12 @@ import { HTMLAttributes } from "react" import { type StaticImageData } from "next/image" -import { MdChevronRight } from "react-icons/md" import { TwImage } from "@/components/Image" import { ButtonLink } from "@/components/ui/buttons/Button" import { cn } from "@/lib/utils/cn" +import { ChevronNext } from "../Chevron" import { Card, CardTitle } from "../ui/card" import { Center } from "../ui/flex" @@ -44,7 +44,7 @@ const BentoCard = ({ </CardTitle> <p className="mb-8 text-md">{children}</p> <ButtonLink href={href} variant="outline"> - {action} <MdChevronRight /> + {action} <ChevronNext /> </ButtonLink> </div> </Card> diff --git a/src/components/Swiper/index.tsx b/src/components/Swiper/index.tsx index ccb115e2c74..d235a381a03 100644 --- a/src/components/Swiper/index.tsx +++ b/src/components/Swiper/index.tsx @@ -1,9 +1,10 @@ import { useTranslation } from "next-i18next" -import { MdChevronLeft, MdChevronRight } from "react-icons/md" import { EffectCards, Keyboard, Navigation, Pagination } from "swiper/modules" import { Swiper as SwiperParent, SwiperSlide } from "swiper/react" import type { SwiperOptions } from "swiper/types" +import { ChevronNext, ChevronPrev } from "@/components/Chevron" + import { cn } from "@/lib/utils/cn" import "swiper/css" @@ -51,9 +52,9 @@ const Swiper = ({ </SwiperSlide> ))} - <MdChevronLeft className="swiper-button-prev" /> + <ChevronPrev className="swiper-button-prev" /> <div className="swiper-pagination" /> - <MdChevronRight className="swiper-button-next" /> + <ChevronNext className="swiper-button-next" /> </SwiperParent> </div> ) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 37f37b0348c..56ccb4e602c 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -2,7 +2,6 @@ import { Fragment, lazy, Suspense } from "react" import type { GetStaticProps, InferGetStaticPropsType } from "next" import { serverSideTranslations } from "next-i18next/serverSideTranslations" import { FaDiscord, FaGithub } from "react-icons/fa6" -import { MdChevronRight } from "react-icons/md" import type { AllMetricData, @@ -13,6 +12,7 @@ import type { } from "@/lib/types" import SvgButtonLink from "@/components/Buttons/SvgButtonLink" +import { ChevronNext } from "@/components/Chevron" import CodeModal from "@/components/CodeModal" import HomeHero from "@/components/Hero/HomeHero" import BentoCard from "@/components/Homepage/BentoCard" @@ -189,7 +189,7 @@ const HomePage = ({ /> <TranslatathonBanner pathname={asPath} /> <HomeHero heroImg={Hero} className="w-full" /> - <div className="w-full space-y-32 lg:space-y-48"> + <div className="w-full space-y-32 px-4 md:mx-6 lg:space-y-48"> <div className="my-20 grid w-full grid-cols-2 gap-x-4 gap-y-8 md:grid-cols-4 md:gap-x-10"> {subHeroCTAs.map(({ label, description, href, className, Svg }) => ( <Fragment key={label}> @@ -329,7 +329,7 @@ const HomePage = ({ <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/learn/" size="lg" variant="outline"> {t("page-index:page-index-popular-topics-action")}{" "} - <MdChevronRight /> + <ChevronNext /> </ButtonLink> </div> </div> @@ -356,7 +356,7 @@ const HomePage = ({ <div className="flex flex-wrap gap-6 py-8"> <ButtonLink href="/developers/" size="lg" className="w-fit"> {t("page-index:page-index-builders-action-primary")}{" "} - <MdChevronRight /> + <ChevronNext /> </ButtonLink> <ButtonLink href="/developers/docs/" @@ -430,7 +430,7 @@ const HomePage = ({ </div> <div className="flex flex-wrap gap-3 py-8"> <ButtonLink href="/community/" size="lg"> - {t("page-index:page-index-community-action")} <MdChevronRight /> + {t("page-index:page-index-community-action")} <ChevronNext /> </ButtonLink> <div className="flex gap-3"> <ButtonLink @@ -623,7 +623,7 @@ const HomePage = ({ </div> <div className="flex justify-center py-8 md:justify-start"> <ButtonLink href="/community/events/" size="lg" className="mx-auto"> - {t("page-index:page-index-events-action")} <MdChevronRight /> + {t("page-index:page-index-events-action")} <ChevronNext /> </ButtonLink> </div> </Section> From 2069fb89214c478c2e1b0ba7a529cccc14a36a76 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:17:38 -0700 Subject: [PATCH 267/273] fix: use rtl responsive text lignment --- src/components/Buttons/SvgButtonLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Buttons/SvgButtonLink.tsx b/src/components/Buttons/SvgButtonLink.tsx index 2ab015cf4c7..a070a9e30dc 100644 --- a/src/components/Buttons/SvgButtonLink.tsx +++ b/src/components/Buttons/SvgButtonLink.tsx @@ -18,7 +18,7 @@ const variants = cva("flex items-center gap-3.5", { variants: { variant: { col: "flex-col text-center [&_.body]:text-center", - row: "flex-row text-start [&_.body]:text-left [&_.header]:self-start", + row: "flex-row text-start [&_.body]:text-start [&_.header]:self-start", }, }, defaultVariants: { From 9e628951bb5cc6750f8938b631affb902b8a7041 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:21:30 -0700 Subject: [PATCH 268/273] refactor: use fetchGrowThePie for txCount on what-is-ethereum page --- src/pages/what-is-ethereum.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/what-is-ethereum.tsx b/src/pages/what-is-ethereum.tsx index a03639b3e87..3b8bb28d605 100644 --- a/src/pages/what-is-ethereum.tsx +++ b/src/pages/what-is-ethereum.tsx @@ -49,7 +49,7 @@ import { getRequiredNamespacesForPage, } from "@/lib/utils/translations" -import { fetchTxCount } from "@/lib/api/fetchTxCount" +import { fetchGrowThePie } from "@/lib/api/fetchGrowThePie" import dogeComputerImg from "@/public/images/doge-computer.png" import ethImg from "@/public/images/eth.png" import diffEthAndBtc from "@/public/images/eth.png" @@ -157,7 +157,7 @@ const Image400 = ({ src }: Pick<ImageProps, "src">) => ( <TwImage src={src} alt="" width={400} /> ) -const cachedFetchTxCount = runOnlyOnce(fetchTxCount) +const cachedFetchTxCount = runOnlyOnce(fetchGrowThePie) type Props = BasePageProps & { data: MetricReturnData @@ -181,7 +181,7 @@ export const getStaticProps = (async ({ locale }) => { ...(await serverSideTranslations(locale!, requiredNamespaces)), contentNotTranslated, lastDeployLocaleTimestamp, - data, + data: data.txCount, }, } }) satisfies GetStaticProps<Props> From 89654da0a22257dbbd668ade1cbc167a7e1bf2f5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:21:46 -0700 Subject: [PATCH 269/273] deprecate: unused data fetch utilities --- src/lib/api/fetchNodes.ts | 41 ----------------------------------- src/lib/api/fetchTxCount.ts | 43 ------------------------------------- 2 files changed, 84 deletions(-) delete mode 100644 src/lib/api/fetchNodes.ts delete mode 100644 src/lib/api/fetchTxCount.ts diff --git a/src/lib/api/fetchNodes.ts b/src/lib/api/fetchNodes.ts deleted file mode 100644 index c3d58684e27..00000000000 --- a/src/lib/api/fetchNodes.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { EtherscanNodeResponse, MetricReturnData } from "@/lib/types" - -import { DAYS_TO_FETCH, ETHERSCAN_API_URL } from "@/lib/constants" - -export const fetchNodes = async (): Promise<MetricReturnData> => { - const apiKey = process.env.ETHERSCAN_API_KEY - const now = new Date() - const endDate = now.toISOString().split("T")[0] // YYYY-MM-DD - const startDate = new Date(now.setDate(now.getDate() - DAYS_TO_FETCH)) - .toISOString() - .split("T")[0] // {daysToFetch} days ago - - const queryParams = new URLSearchParams({ - module: "stats", - action: "nodecounthistory", - startdate: startDate, - enddate: endDate, - sort: "desc", - apikey: apiKey, - }).toString() - - const { href } = new URL(`api?${queryParams}`, ETHERSCAN_API_URL) - - try { - const response = await fetch(href) - if (!response.ok) { - console.log(response.status, response.statusText) - throw new Error("Failed to fetch Etherscan node data") - } - - const json: EtherscanNodeResponse = await response.json() - // Today's value at start (only value) of array - const value = json.result[0].TotalNodeCount - - // current value (number, unformatted) - return { value } - } catch (error: unknown) { - console.error((error as Error).message) - return { error: (error as Error).message } - } -} diff --git a/src/lib/api/fetchTxCount.ts b/src/lib/api/fetchTxCount.ts deleted file mode 100644 index 144f545a3f0..00000000000 --- a/src/lib/api/fetchTxCount.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { EtherscanTxCountResponse, MetricReturnData } from "@/lib/types" - -import { DAYS_TO_FETCH, ETHERSCAN_API_URL } from "@/lib/constants" - -export const fetchTxCount = async (): Promise<MetricReturnData> => { - const apiKey = process.env.ETHERSCAN_API_KEY - const now = new Date() - const endDate = now.toISOString().split("T")[0] // YYYY-MM-DD - const startDate = new Date(now.setDate(now.getDate() - DAYS_TO_FETCH)) - .toISOString() - .split("T")[0] // {DAYS_TO_FETCH} days ago - - const queryParams = new URLSearchParams({ - module: "stats", - action: "dailytx", - startdate: startDate, - enddate: endDate, - sort: "desc", - apikey: apiKey, - }).toString() - - const { href } = new URL(`api?${queryParams}`, ETHERSCAN_API_URL) - - try { - const response = await fetch(href) - if (!response.ok) { - console.log(response.status, response.statusText) - throw new Error("Failed to fetch Etherscan tx count data") - } - - const json: EtherscanTxCountResponse = await response.json() - // Today's value at start (only value) of array - const value = json.result[0].transactionCount - - // current value (number, unformatted) - return { value } - } catch (error: unknown) { - console.error((error as Error).message) - return { - error: (error as Error).message, - } - } -} From 2dec337d43d6a5e2d2036409eb941e6c8b1daa1d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 5 Sep 2024 07:44:43 -0700 Subject: [PATCH 270/273] fix: remove createElements --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 56ccb4e602c..a294aac62e2 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -239,7 +239,7 @@ const HomePage = ({ {/* Mobile */} <Swiper - options={{ effect: "cards", createElements: true }} + options={{ effect: "cards" }} className={cn( "lg:hidden", // Mobile only "[&_.swiper-slide]:overflow-visible [&_.swiper-slide]:rounded-2xl [&_.swiper-slide]:shadow-card-hover", From 6b1a628cae5d7286a7a04d02988c060865dda181 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 5 Sep 2024 12:42:24 -0700 Subject: [PATCH 271/273] feat: add support for atom feeds --- src/lib/api/fetchRSS.ts | 133 ++++++++++++++++++++++++++++------------ src/lib/types.ts | 30 +++++++++ 2 files changed, 125 insertions(+), 38 deletions(-) diff --git a/src/lib/api/fetchRSS.ts b/src/lib/api/fetchRSS.ts index c62c3e4a617..f3d0496a1aa 100644 --- a/src/lib/api/fetchRSS.ts +++ b/src/lib/api/fetchRSS.ts @@ -1,6 +1,6 @@ import { parseString } from "xml2js" -import type { RSSChannel, RSSItem, RSSResult } from "../types" +import type { AtomResult, RSSChannel, RSSItem, RSSResult } from "../types" import { isValidDate } from "../utils/date" /** @@ -12,45 +12,102 @@ export const fetchRSS = async (xmlUrl: string | string[]) => { const urls = Array.isArray(xmlUrl) ? xmlUrl : [xmlUrl] const allItems: RSSItem[][] = [] for (const url of urls) { - const rssItems = (await fetchXml(url)) as RSSResult - if (!rssItems.rss) continue - const [mainChannel] = rssItems.rss.channel as RSSChannel[] - const [source] = mainChannel.title - const [sourceUrl] = mainChannel.link - const channelImage = mainChannel.image ? mainChannel.image[0].url[0] : "" + const response = (await fetchXml(url)) as RSSResult | AtomResult + if ("rss" in response) { + const [mainChannel] = response.rss.channel as RSSChannel[] + const [source] = mainChannel.title + const [sourceUrl] = mainChannel.link + const channelImage = mainChannel.image ? mainChannel.image[0].url[0] : "" - const parsedRssItems = mainChannel.item - // Filter out items with invalid dates - .filter((item) => { - if (!item.pubDate) return false - const [pubDate] = item.pubDate - return isValidDate(pubDate) - }) - // Sort by pubDate (most recent is first in array - .sort((a, b) => { - const dateA = new Date(a.pubDate[0]) - const dateB = new Date(b.pubDate[0]) - return dateB.getTime() - dateA.getTime() - }) - // Map to RSSItem object - .map((item) => { - const getImgSrc = () => { - if (item.enclosure) return item.enclosure[0].$.url - if (item["media:content"]) return item["media:content"][0].$.url - return channelImage - } - return { - pubDate: item.pubDate[0], - title: item.title[0], - link: item.link[0], - imgSrc: getImgSrc(), - source, - sourceUrl, - sourceFeedUrl: url, - } as RSSItem - }) + const parsedRssItems = mainChannel.item + // Filter out items with invalid dates + .filter((item) => { + if (!item.pubDate) return false + const [pubDate] = item.pubDate + return isValidDate(pubDate) + }) + // Sort by pubDate (most recent is first in array + .sort((a, b) => { + const dateA = new Date(a.pubDate[0]) + const dateB = new Date(b.pubDate[0]) + return dateB.getTime() - dateA.getTime() + }) + // Map to RSSItem object + .map((item) => { + const getImgSrc = () => { + if (item.enclosure) return item.enclosure[0].$.url + if (item["media:content"]) return item["media:content"][0].$.url + return channelImage + } + return { + pubDate: item.pubDate[0], + title: item.title[0], + link: item.link[0], + imgSrc: getImgSrc(), + source, + sourceUrl, + sourceFeedUrl: url, + } as RSSItem + }) - allItems.push(parsedRssItems) + allItems.push(parsedRssItems) + } else if ("feed" in response) { + const [source] = response.feed.title + const [sourceUrl] = response.feed.id + const feedImage = response.feed.icon?.[0] + + const parsedAtomItems = response.feed.entry + // Filter out items with invalid dates + .filter((entry) => { + if (!entry.updated) return false + const [published] = entry.updated + return isValidDate(published) + }) + // Sort by published (most recent is first in array + .sort((a, b) => { + const dateA = new Date(a.updated[0]) + const dateB = new Date(b.updated[0]) + return dateB.getTime() - dateA.getTime() + }) + // Map to RSSItem object + .map((entry) => { + const getImgSrc = (): string => { + const imgRegEx = /https?:\/\/[^"]*?\.(jpe?g|png|webp)/g + const content = entry.content?.[0]?._ || "" + const summary = entry.summary?.[0]?._ || "" + const contentMatch = content.match(imgRegEx) + const summaryMatch = summary.match(imgRegEx) + if (contentMatch) return contentMatch[0] + if (summaryMatch) return summaryMatch[0] + return feedImage || "" + } + const getLink = (): string => { + if (!entry.link) { + console.warn(`No link found for RSS url: ${url}`) + return "" + } + const link = entry.link[0] + if (typeof link === "string") return link + return link.$.href || "" + } + const getTitle = (): string => { + const title = entry.title[0] + if (typeof title === "string") return title + return title._ || "" + } + return { + pubDate: entry.updated[0], + title: getTitle(), + link: getLink(), + imgSrc: getImgSrc(), + source, + sourceUrl, + sourceFeedUrl: url, + } as RSSItem + }) + + allItems.push(parsedAtomItems) + } } return allItems as RSSItem[][] } diff --git a/src/lib/types.ts b/src/lib/types.ts index ec5a8e9853a..ad5c5f9635c 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -803,6 +803,36 @@ export type RSSResult = { } } +export type AtomItem = { + _?: string + $: { + type?: string + href?: string + rel?: string + } +} +export type AtomEntry = { + id: string[] + title: (AtomItem | string)[] + updated: string[] + content?: AtomItem[] + link?: (AtomItem | string)[] + summary?: AtomItem[] +} + +export type AtomResult = { + feed: { + id: string[] + title: string[] + updated: string[] + generator: string[] + link: string[] + subtitle: string[] + icon?: string[] + entry: AtomEntry[] + } +} + export type CommunityBlog = { href: string } & ({ name: string; feed?: string } | { name?: string; feed: string }) From 52d08b1d9f10a510ac883fea2edf12e2a21cf84b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 5 Sep 2024 12:42:56 -0700 Subject: [PATCH 272/273] feat: activate PSE and Josh Stark feeds --- src/lib/constants.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 5c456c14de7..df5f68b4176 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -201,15 +201,13 @@ export const COMMUNITY_BLOGS: CommunityBlog[] = [ feed: SOLIDITY_FEED, }, { - name: "Privacy and Scaling Explorations", href: "https://mirror.xyz/privacy-scaling-explorations.eth", - // feed: "https://mirror.xyz/privacy-scaling-explorations.eth/feed/atom", // Old xml format + feed: "https://mirror.xyz/privacy-scaling-explorations.eth/feed/atom", + }, + { + href: "https://stark.mirror.xyz/", + feed: "https://stark.mirror.xyz/feed/atom", }, - // { - // href: "https://stark.mirror.xyz/", - // feed: "https://stark.mirror.xyz/feed/atom", // Old xml format - // }, - // TODO: Add support for old xml format, re-enable above when ready ] export const BLOG_FEEDS = COMMUNITY_BLOGS.map(({ feed }) => feed).filter( From 6e205c9abaefbe27bb6d3cda1d1c4953796ba4c7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 5 Sep 2024 13:17:53 -0700 Subject: [PATCH 273/273] refactor: simplify types and getters Always check for possible string value first before AtomElement struct --- src/lib/api/fetchRSS.ts | 39 ++++++++++++++++++++++----------------- src/lib/types.ts | 24 ++++++++++++------------ 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/src/lib/api/fetchRSS.ts b/src/lib/api/fetchRSS.ts index f3d0496a1aa..f191e3091bf 100644 --- a/src/lib/api/fetchRSS.ts +++ b/src/lib/api/fetchRSS.ts @@ -1,6 +1,12 @@ import { parseString } from "xml2js" -import type { AtomResult, RSSChannel, RSSItem, RSSResult } from "../types" +import type { + AtomElement, + AtomResult, + RSSChannel, + RSSItem, + RSSResult, +} from "../types" import { isValidDate } from "../utils/date" /** @@ -71,17 +77,13 @@ export const fetchRSS = async (xmlUrl: string | string[]) => { }) // Map to RSSItem object .map((entry) => { - const getImgSrc = (): string => { - const imgRegEx = /https?:\/\/[^"]*?\.(jpe?g|png|webp)/g - const content = entry.content?.[0]?._ || "" - const summary = entry.summary?.[0]?._ || "" - const contentMatch = content.match(imgRegEx) - const summaryMatch = summary.match(imgRegEx) - if (contentMatch) return contentMatch[0] - if (summaryMatch) return summaryMatch[0] - return feedImage || "" + const getString = (el?: AtomElement[]): string => { + if (!el) return "" + const [firstEl] = el + if (typeof firstEl === "string") return firstEl + return firstEl._ || "" } - const getLink = (): string => { + const getHref = (): string => { if (!entry.link) { console.warn(`No link found for RSS url: ${url}`) return "" @@ -90,15 +92,18 @@ export const fetchRSS = async (xmlUrl: string | string[]) => { if (typeof link === "string") return link return link.$.href || "" } - const getTitle = (): string => { - const title = entry.title[0] - if (typeof title === "string") return title - return title._ || "" + const getImgSrc = (): string => { + const imgRegEx = /https?:\/\/[^"]*?\.(jpe?g|png|webp)/g + const contentMatch = getString(entry.content).match(imgRegEx) + if (contentMatch) return contentMatch[0] + const summaryMatch = getString(entry.summary).match(imgRegEx) + if (summaryMatch) return summaryMatch[0] + return feedImage || "" } return { pubDate: entry.updated[0], - title: getTitle(), - link: getLink(), + title: getString(entry.title), + link: getHref(), imgSrc: getImgSrc(), source, sourceUrl, diff --git a/src/lib/types.ts b/src/lib/types.ts index ad5c5f9635c..852fdd3cc9a 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -803,21 +803,21 @@ export type RSSResult = { } } -export type AtomItem = { - _?: string - $: { - type?: string - href?: string - rel?: string - } -} +export type AtomElement = + | string + | { + _?: string // children + $: { + href?: string + } + } export type AtomEntry = { id: string[] - title: (AtomItem | string)[] + title: AtomElement[] updated: string[] - content?: AtomItem[] - link?: (AtomItem | string)[] - summary?: AtomItem[] + content?: AtomElement[] + link?: AtomElement[] + summary?: AtomElement[] } export type AtomResult = {