From d72fd1bfbe7e44856a8be474e22b4994a4027b89 Mon Sep 17 00:00:00 2001 From: Pouria Delfanazari Date: Wed, 5 Nov 2025 11:44:34 -0800 Subject: [PATCH] refactor: unify colour tokens for future dark mode support --- src/webapp/.storybook/preview.tsx | 4 +-- .../profile/[handle]/(withHeader)/layout.tsx | 2 +- src/webapp/app/layout.tsx | 2 +- .../bottomBarItem/BottomBarItem.tsx | 10 ++++-- .../components/navigation/header/Header.tsx | 6 ++-- .../feedActivityStatus/FeedActivityStatus.tsx | 12 ++++--- .../components/feedItem/Skeleton.FeedItem.tsx | 15 ++++++-- .../profileHeader/ProfileHeader.tsx | 6 ++-- .../profileHeader/Skeleton.ProfileHeader.tsx | 2 +- .../components/profileMenu/ProfileMenu.tsx | 5 +-- .../components/profileTabs/ProfileTabs.tsx | 34 ++++++++++--------- 11 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/webapp/.storybook/preview.tsx b/src/webapp/.storybook/preview.tsx index d54f76ab..05689d5a 100644 --- a/src/webapp/.storybook/preview.tsx +++ b/src/webapp/.storybook/preview.tsx @@ -1,7 +1,7 @@ import '@mantine/core/styles.css'; -import React, { useEffect } from 'react'; -import { MantineProvider, useMantineColorScheme } from '@mantine/core'; +import React from 'react'; +import { MantineProvider } from '@mantine/core'; import { theme } from '../styles/theme'; import { Hanken_Grotesk } from 'next/font/google'; diff --git a/src/webapp/app/(dashboard)/profile/[handle]/(withHeader)/layout.tsx b/src/webapp/app/(dashboard)/profile/[handle]/(withHeader)/layout.tsx index d152aac6..48cf3c36 100644 --- a/src/webapp/app/(dashboard)/profile/[handle]/(withHeader)/layout.tsx +++ b/src/webapp/app/(dashboard)/profile/[handle]/(withHeader)/layout.tsx @@ -42,7 +42,7 @@ export default async function Layout(props: Props) { zIndex: 1, }} > - + diff --git a/src/webapp/app/layout.tsx b/src/webapp/app/layout.tsx index c7262cd6..73839230 100644 --- a/src/webapp/app/layout.tsx +++ b/src/webapp/app/layout.tsx @@ -26,7 +26,7 @@ export default function RootLayout({ {...mantineHtmlProps} > - + {children} diff --git a/src/webapp/components/navigation/bottomBarItem/BottomBarItem.tsx b/src/webapp/components/navigation/bottomBarItem/BottomBarItem.tsx index c289c264..0683b7bf 100644 --- a/src/webapp/components/navigation/bottomBarItem/BottomBarItem.tsx +++ b/src/webapp/components/navigation/bottomBarItem/BottomBarItem.tsx @@ -3,6 +3,7 @@ import { ActionIcon } from '@mantine/core'; import { usePathname } from 'next/navigation'; import Link from 'next/link'; import { ReactElement, isValidElement } from 'react'; +import { useColorScheme } from '@mantine/hooks'; interface Props { href: string; @@ -10,6 +11,7 @@ interface Props { } export default function BottomBarItem(props: Props) { + const colorScheme = useColorScheme(); const pathname = usePathname(); const isActive = pathname === props.href; @@ -28,8 +30,12 @@ export default function BottomBarItem(props: Props) { href={props.href} variant={isActive ? 'light' : 'transparent'} size={'lg'} - bg={isActive ? 'gray.1' : 'transparent'} - color={isActive ? 'dark' : 'gray'} + bg={ + isActive + ? `${colorScheme === 'dark' ? 'dark.5' : 'gray.1'}` + : 'transparent' + } + color="gray" > {renderIcon()} diff --git a/src/webapp/components/navigation/header/Header.tsx b/src/webapp/components/navigation/header/Header.tsx index ced2768c..278ca9b4 100644 --- a/src/webapp/components/navigation/header/Header.tsx +++ b/src/webapp/components/navigation/header/Header.tsx @@ -1,4 +1,4 @@ -import { Box, Divider, Group } from '@mantine/core'; +import { Box, Divider, Group, Paper } from '@mantine/core'; import NavbarToggle from '../NavbarToggle'; import { ReactElement } from 'react'; @@ -8,7 +8,7 @@ interface Props { export default function Header(props: Props) { return ( - + {props.children} @@ -16,6 +16,6 @@ export default function Header(props: Props) { - + ); } diff --git a/src/webapp/features/feeds/components/feedActivityStatus/FeedActivityStatus.tsx b/src/webapp/features/feeds/components/feedActivityStatus/FeedActivityStatus.tsx index 2f6616cc..a1f4dfde 100644 --- a/src/webapp/features/feeds/components/feedActivityStatus/FeedActivityStatus.tsx +++ b/src/webapp/features/feeds/components/feedActivityStatus/FeedActivityStatus.tsx @@ -1,10 +1,13 @@ -import { Anchor, Avatar, Group, Paper, Stack, Text } from '@mantine/core'; +'use client'; + +import { Anchor, Avatar, Card, Group, Paper, Stack, Text } from '@mantine/core'; import { FeedItem, Collection } from '@/api-client'; import { Fragment } from 'react'; import Link from 'next/link'; import { getRelativeTime } from '@/lib/utils/time'; import { getRecordKey } from '@/lib/utils/atproto'; import { sanitizeText } from '@/lib/utils/text'; +import { useColorScheme } from '@mantine/hooks'; interface Props { user: FeedItem['user']; @@ -13,6 +16,7 @@ interface Props { } export default function FeedActivityStatus(props: Props) { + const colorScheme = useColorScheme(); const MAX_DISPLAYED = 2; const time = getRelativeTime(props.createdAt.toString()); const relativeCreatedDate = time === 'just now' ? `Now` : `${time} ago`; @@ -23,7 +27,7 @@ export default function FeedActivityStatus(props: Props) { const remainingCount = collections.length - MAX_DISPLAYED; return ( - + + - + ); } diff --git a/src/webapp/features/feeds/components/feedItem/Skeleton.FeedItem.tsx b/src/webapp/features/feeds/components/feedItem/Skeleton.FeedItem.tsx index ade0bb0e..c2e30188 100644 --- a/src/webapp/features/feeds/components/feedItem/Skeleton.FeedItem.tsx +++ b/src/webapp/features/feeds/components/feedItem/Skeleton.FeedItem.tsx @@ -1,11 +1,20 @@ +'use client'; + import UrlCardSkeleton from '@/features/cards/components/urlCard/Skeleton.UrlCard'; -import { Avatar, Group, Paper, Skeleton, Stack } from '@mantine/core'; +import { Avatar, Card, Group, Paper, Skeleton, Stack } from '@mantine/core'; +import { useColorScheme } from '@mantine/hooks'; export default function FeedItemSkeleton() { + const colorScheme = useColorScheme(); + return ( {/* Feed activity status*/} - + @@ -15,7 +24,7 @@ export default function FeedItemSkeleton() { - + diff --git a/src/webapp/features/profile/components/profileHeader/ProfileHeader.tsx b/src/webapp/features/profile/components/profileHeader/ProfileHeader.tsx index 5f7dc3fe..cd20535d 100644 --- a/src/webapp/features/profile/components/profileHeader/ProfileHeader.tsx +++ b/src/webapp/features/profile/components/profileHeader/ProfileHeader.tsx @@ -23,7 +23,7 @@ export default async function ProfileHeader(props: Props) { const profile = await getProfile(props.handle); return ( - + } > {truncateText(profile.handle, 14)} diff --git a/src/webapp/features/profile/components/profileHeader/Skeleton.ProfileHeader.tsx b/src/webapp/features/profile/components/profileHeader/Skeleton.ProfileHeader.tsx index f450ccc0..638a070e 100644 --- a/src/webapp/features/profile/components/profileHeader/Skeleton.ProfileHeader.tsx +++ b/src/webapp/features/profile/components/profileHeader/Skeleton.ProfileHeader.tsx @@ -10,7 +10,7 @@ import { export default function ProfileHeaderSkeleton() { return ( - + diff --git a/src/webapp/features/profile/components/profileMenu/ProfileMenu.tsx b/src/webapp/features/profile/components/profileMenu/ProfileMenu.tsx index b5548912..1d3bd1e3 100644 --- a/src/webapp/features/profile/components/profileMenu/ProfileMenu.tsx +++ b/src/webapp/features/profile/components/profileMenu/ProfileMenu.tsx @@ -16,9 +16,11 @@ import Link from 'next/link'; import { IoMdLogOut } from 'react-icons/io'; import { useNavbarContext } from '@/providers/navbar'; import { BiSolidUserCircle } from 'react-icons/bi'; +import { useColorScheme } from '@mantine/hooks'; export default function ProfileMenu() { const router = useRouter(); + const colorScheme = useColorScheme(); const { toggleMobile } = useNavbarContext(); const { data, error, isPending } = useMyProfile(); const { logout } = useAuth(); @@ -46,8 +48,7 @@ export default function ProfileMenu() {