From ce7be3915548eb517fd9b72d03e5d6ab4b4bf878 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Thu, 15 Jan 2026 19:55:46 +0100 Subject: [PATCH] website refactor --- apps/website/app/layout.tsx | 2 +- apps/website/app/leagues/LeaguesClient.tsx | 2 +- .../[id]/stewarding/StewardingTemplate.tsx | 2 +- .../stewarding/protests/[protestId]/page.tsx | 2 +- apps/website/app/sponsor/signup/page.tsx | 2 +- .../achievements}/AchievementGrid.tsx | 0 .../components/auth/AuthWorkflowMockup.tsx | 2 +- .../dashboard}/DashboardHeroWrapper.tsx | 0 .../dashboard}/QuickActions.tsx | 6 +- .../dev}/DebugModeToggle.tsx | 10 +-- .../{ui => components/drivers}/DriverCard.tsx | 2 +- .../drivers}/DriverEntryRow.tsx | 12 ++-- .../drivers}/DriverIdentity.tsx | 14 ++-- .../components/drivers/DriverProfile.tsx | 4 +- .../drivers}/DriverRankings.tsx | 6 +- .../drivers}/DriverSummaryPillWrapper.tsx | 0 .../drivers}/FeaturedDriverCard.tsx | 0 .../drivers}/ProfileHeader.tsx | 0 .../drivers}/ProfileHero.tsx | 1 + .../components/drivers/ProfileRaceHistory.tsx | 4 +- .../components/errors/ApiErrorBoundary.tsx | 2 +- .../errors/EnhancedErrorBoundary.tsx | 2 +- .../components/errors/ErrorDisplay.tsx | 2 +- .../{ui => components/feed}/ActivityFeed.tsx | 4 +- .../feed}/ActivityFeedItem.tsx | 5 +- .../feed}/ActivityFeedList.tsx | 2 +- .../{ui => components/feed}/FeedLayout.tsx | 6 +- .../{ui => components/feed}/FeedList.tsx | 0 .../feed}/RecentActivity.tsx | 0 .../landing}/AlternatingSection.tsx | 0 .../landing}/BenefitCard.tsx | 10 +-- .../landing}/FeatureGrid.tsx | 4 +- .../landing}/LandingHero.tsx | 6 +- .../landing}/LandingItems.tsx | 0 .../layout}/HeaderContent.tsx | 2 +- .../leaderboards}/LeaderboardItem.tsx | 10 +-- .../leaderboards}/LeaderboardPreview.tsx | 2 +- .../leaderboards}/RankingList.tsx | 2 +- .../leaderboards}/RankingListItem.tsx | 6 +- .../leagues}/ChampionshipStandings.tsx | 2 +- .../leagues}/ChampionshipStandingsList.tsx | 2 +- .../website/components/leagues/EmptyState.tsx | 2 +- .../components/leagues/LeagueActivityFeed.tsx | 2 +- .../leagues}/LeagueCardWrapper.tsx | 0 .../leagues}/LeagueMemberRow.tsx | 12 ++-- .../components/leagues/LeagueMembers.tsx | 4 +- .../leagues/LeagueOwnershipTransfer.tsx | 2 +- .../components/leagues/LeagueSchedule.tsx | 2 +- .../leagues}/LeagueSummaryCardWrapper.tsx | 0 .../leagues/LeagueTimingsSection.tsx | 2 +- .../leagues}/PendingProtestsList.tsx | 24 +++++-- .../leagues}/ProtestCardWrapper.tsx | 2 +- .../leagues}/ProtestListItem.tsx | 16 ++--- .../mockups}/MockupStack.tsx | 2 +- .../mockups}/WorkflowMockup.tsx | 10 +-- .../onboarding/PersonalInfoStep.tsx | 2 +- .../races}/LatestResultsSidebar.tsx | 0 .../races}/LiveRacesBanner.tsx | 0 .../races}/NextRaceCardWrapper.tsx | 0 .../races}/RaceCardWrapper.tsx | 0 .../races}/RaceEntryList.tsx | 2 +- .../races}/RaceFilterBar.tsx | 0 .../{ui => components/races}/RaceList.tsx | 2 +- .../{ui => components/races}/RaceListItem.tsx | 14 ++-- .../races}/RaceListItemWrapper.tsx | 2 +- .../races}/RaceResultCardWrapper.tsx | 0 .../races}/RaceResultRow.tsx | 12 ++-- .../{ui => components/races}/RaceSidebar.tsx | 0 .../races}/UpcomingRaces.tsx | 4 +- .../races}/UpcomingRacesList.tsx | 2 +- .../races}/UpcomingRacesSidebar.tsx | 0 .../shared}/CountrySelect.tsx | 2 +- .../{ui => components/shared}/RangeField.tsx | 2 +- .../shared/state}/EmptyState.tsx | 4 +- .../shared/state}/ErrorDisplay.tsx | 16 ++--- .../shared/state}/LoadingWrapper.tsx | 8 +-- .../shared/state}/PageWrapper.tsx | 6 +- .../shared/state}/StateContainer.tsx | 13 ++-- .../shared/state}/StatefulPageWrapper.tsx | 4 +- .../social}/FriendsPreview.tsx | 0 .../social}/FriendsSidebar.tsx | 2 +- .../sponsors/SponsorBenefitCard.tsx | 2 +- .../sponsors}/SponsorHero.tsx | 13 ++-- .../sponsors/SponsorWorkflowMockup.tsx | 2 +- apps/website/components/teams/TeamAdmin.tsx | 2 +- .../{ui => components/teams}/TeamHero.tsx | 0 .../teams}/TeamHeroSection.tsx | 10 +-- .../teams}/TeamHeroSectionWrapper.tsx | 4 +- .../teams}/TeamHeroStats.tsx | 8 +-- .../{ui => components/teams}/TeamIdentity.tsx | 11 +-- .../teams}/TeamLeaderboardPreviewWrapper.tsx | 0 .../{ui => components/teams}/TeamPodium.tsx | 14 ++-- .../teams}/TeamRankingsTable.tsx | 16 ++--- apps/website/components/teams/TeamRoster.tsx | 4 +- .../teams}/TeamRosterItem.tsx | 8 +-- .../components/teams/TeamStandings.tsx | 4 +- .../teams}/TopThreePodium.tsx | 0 .../teams}/WhyJoinTeamSection.tsx | 2 +- apps/website/templates/DashboardTemplate.tsx | 12 ++-- .../templates/DriverProfileTemplate.tsx | 6 +- apps/website/templates/DriversTemplate.tsx | 8 +-- apps/website/templates/HomeTemplate.tsx | 8 +-- .../templates/LeaderboardsTemplate.tsx | 2 +- apps/website/templates/ProfileTemplate.tsx | 4 +- apps/website/templates/RaceDetailTemplate.tsx | 4 +- .../website/templates/RaceResultsTemplate.tsx | 2 +- .../templates/RaceStewardingTemplate.tsx | 2 +- apps/website/templates/RacesAllTemplate.tsx | 2 +- apps/website/templates/RacesTemplate.tsx | 8 +-- apps/website/templates/TeamDetailTemplate.tsx | 2 +- .../templates/TeamLeaderboardTemplate.tsx | 4 +- apps/website/templates/TeamsTemplate.tsx | 4 +- apps/website/ui/ActivityItem.tsx | 1 + apps/website/ui/AvailableLeagueCard.tsx | 1 + apps/website/ui/Box.tsx | 1 + apps/website/ui/Button.tsx | 14 ++-- apps/website/ui/Card.tsx | 48 ++++++------- apps/website/ui/Container.tsx | 2 +- apps/website/ui/DashboardHero.tsx | 1 + apps/website/ui/DiscordCTA.tsx | 7 +- apps/website/ui/DurationField.tsx | 4 +- apps/website/ui/FeedItem.tsx | 8 +-- apps/website/ui/Footer.tsx | 3 - apps/website/ui/Grid.tsx | 2 +- apps/website/ui/InfoBanner.tsx | 2 +- apps/website/ui/Input.tsx | 4 +- apps/website/ui/JoinRequestItem.tsx | 2 +- apps/website/ui/LeagueCard.tsx | 22 +++--- apps/website/ui/LeagueHeader.tsx | 9 +-- apps/website/ui/LeagueMemberTable.tsx | 2 +- apps/website/ui/Link.tsx | 4 +- apps/website/ui/Podium.tsx | 2 +- apps/website/ui/PresetCard.tsx | 4 +- apps/website/ui/ProfileStatGrid.tsx | 2 +- apps/website/ui/RaceCard.tsx | 6 +- apps/website/ui/RaceSummaryItem.tsx | 1 - apps/website/ui/RatingHistoryItem.tsx | 6 ++ apps/website/ui/SidebarActionLink.tsx | 1 - apps/website/ui/SidebarRaceItem.tsx | 1 - apps/website/ui/SkillDistribution.tsx | 1 + apps/website/ui/SkillLevelHeader.tsx | 2 +- apps/website/ui/SponsorMetricCard.tsx | 5 +- apps/website/ui/SponsorSlotCard.tsx | 1 - apps/website/ui/SponsorshipRequestItem.tsx | 1 + apps/website/ui/Stack.tsx | 72 ++++++++++++------- apps/website/ui/StatCard.tsx | 7 -- apps/website/ui/StatusIndicator.tsx | 1 + apps/website/ui/Surface.tsx | 2 +- apps/website/ui/TabNavigation.tsx | 3 +- apps/website/ui/Table.tsx | 2 +- apps/website/ui/TeamCard.tsx | 5 +- apps/website/ui/TeamLeaderboardItem.tsx | 2 +- apps/website/ui/Text.tsx | 42 ++++++++--- apps/website/ui/state-types.ts | 1 + 154 files changed, 436 insertions(+), 356 deletions(-) rename apps/website/{ui => components/achievements}/AchievementGrid.tsx (100%) rename apps/website/{ui => components/dashboard}/DashboardHeroWrapper.tsx (100%) rename apps/website/{ui => components/dashboard}/QuickActions.tsx (83%) rename apps/website/{ui => components/dev}/DebugModeToggle.tsx (98%) rename apps/website/{ui => components/drivers}/DriverCard.tsx (95%) rename apps/website/{ui => components/drivers}/DriverEntryRow.tsx (92%) rename apps/website/{ui => components/drivers}/DriverIdentity.tsx (88%) rename apps/website/{ui => components/drivers}/DriverRankings.tsx (86%) rename apps/website/{ui => components/drivers}/DriverSummaryPillWrapper.tsx (100%) rename apps/website/{ui => components/drivers}/FeaturedDriverCard.tsx (100%) rename apps/website/{ui => components/drivers}/ProfileHeader.tsx (100%) rename apps/website/{ui => components/drivers}/ProfileHero.tsx (98%) rename apps/website/{ui => components/feed}/ActivityFeed.tsx (89%) rename apps/website/{ui => components/feed}/ActivityFeedItem.tsx (89%) rename apps/website/{ui => components/feed}/ActivityFeedList.tsx (87%) rename apps/website/{ui => components/feed}/FeedLayout.tsx (87%) rename apps/website/{ui => components/feed}/FeedList.tsx (100%) rename apps/website/{ui => components/feed}/RecentActivity.tsx (100%) rename apps/website/{ui => components/landing}/AlternatingSection.tsx (100%) rename apps/website/{ui => components/landing}/BenefitCard.tsx (94%) rename apps/website/{ui => components/landing}/FeatureGrid.tsx (97%) rename apps/website/{ui => components/landing}/LandingHero.tsx (99%) rename apps/website/{ui => components/landing}/LandingItems.tsx (100%) rename apps/website/{ui => components/layout}/HeaderContent.tsx (95%) rename apps/website/{ui => components/leaderboards}/LeaderboardItem.tsx (94%) rename apps/website/{ui => components/leaderboards}/LeaderboardPreview.tsx (97%) rename apps/website/{ui => components/leaderboards}/RankingList.tsx (86%) rename apps/website/{ui => components/leaderboards}/RankingListItem.tsx (94%) rename apps/website/{ui => components/leagues}/ChampionshipStandings.tsx (94%) rename apps/website/{ui => components/leagues}/ChampionshipStandingsList.tsx (88%) rename apps/website/{ui => components/leagues}/LeagueCardWrapper.tsx (100%) rename apps/website/{ui => components/leagues}/LeagueMemberRow.tsx (89%) rename apps/website/{ui => components/leagues}/LeagueSummaryCardWrapper.tsx (100%) rename apps/website/{ui => components/leagues}/PendingProtestsList.tsx (72%) rename apps/website/{ui => components/leagues}/ProtestCardWrapper.tsx (96%) rename apps/website/{ui => components/leagues}/ProtestListItem.tsx (92%) rename apps/website/{ui => components/mockups}/MockupStack.tsx (98%) rename apps/website/{ui => components/mockups}/WorkflowMockup.tsx (97%) rename apps/website/{ui => components/races}/LatestResultsSidebar.tsx (100%) rename apps/website/{ui => components/races}/LiveRacesBanner.tsx (100%) rename apps/website/{ui => components/races}/NextRaceCardWrapper.tsx (100%) rename apps/website/{ui => components/races}/RaceCardWrapper.tsx (100%) rename apps/website/{ui => components/races}/RaceEntryList.tsx (96%) rename apps/website/{ui => components/races}/RaceFilterBar.tsx (100%) rename apps/website/{ui => components/races}/RaceList.tsx (97%) rename apps/website/{ui => components/races}/RaceListItem.tsx (94%) rename apps/website/{ui => components/races}/RaceListItemWrapper.tsx (95%) rename apps/website/{ui => components/races}/RaceResultCardWrapper.tsx (100%) rename apps/website/{ui => components/races}/RaceResultRow.tsx (94%) rename apps/website/{ui => components/races}/RaceSidebar.tsx (100%) rename apps/website/{ui => components/races}/UpcomingRaces.tsx (91%) rename apps/website/{ui => components/races}/UpcomingRacesList.tsx (87%) rename apps/website/{ui => components/races}/UpcomingRacesSidebar.tsx (100%) rename apps/website/{ui => components/shared}/CountrySelect.tsx (99%) rename apps/website/{ui => components/shared}/RangeField.tsx (99%) rename apps/website/{ui => components/shared/state}/EmptyState.tsx (99%) rename apps/website/{ui => components/shared/state}/ErrorDisplay.tsx (95%) rename apps/website/{ui => components/shared/state}/LoadingWrapper.tsx (97%) rename apps/website/{ui => components/shared/state}/PageWrapper.tsx (96%) rename apps/website/{ui => components/shared/state}/StateContainer.tsx (96%) rename apps/website/{ui => components/shared/state}/StatefulPageWrapper.tsx (87%) rename apps/website/{ui => components/social}/FriendsPreview.tsx (100%) rename apps/website/{ui => components/social}/FriendsSidebar.tsx (96%) rename apps/website/{ui => components/sponsors}/SponsorHero.tsx (95%) rename apps/website/{ui => components/teams}/TeamHero.tsx (100%) rename apps/website/{ui => components/teams}/TeamHeroSection.tsx (92%) rename apps/website/{ui => components/teams}/TeamHeroSectionWrapper.tsx (95%) rename apps/website/{ui => components/teams}/TeamHeroStats.tsx (90%) rename apps/website/{ui => components/teams}/TeamIdentity.tsx (85%) rename apps/website/{ui => components/teams}/TeamLeaderboardPreviewWrapper.tsx (100%) rename apps/website/{ui => components/teams}/TeamPodium.tsx (94%) rename apps/website/{ui => components/teams}/TeamRankingsTable.tsx (91%) rename apps/website/{ui => components/teams}/TeamRosterItem.tsx (91%) rename apps/website/{ui => components/teams}/TopThreePodium.tsx (100%) rename apps/website/{ui => components/teams}/WhyJoinTeamSection.tsx (96%) diff --git a/apps/website/app/layout.tsx b/apps/website/app/layout.tsx index a22de4009..c882b6c53 100644 --- a/apps/website/app/layout.tsx +++ b/apps/website/app/layout.tsx @@ -6,7 +6,7 @@ import React from 'react'; import './globals.css'; import { AppWrapper } from '@/components/AppWrapper'; import { Header } from '@/ui/Header'; -import { HeaderContent } from '@/ui/HeaderContent'; +import { HeaderContent } from '@/components/layout/HeaderContent'; import { MainContent } from '@/ui/MainContent'; export const dynamic = 'force-dynamic'; diff --git a/apps/website/app/leagues/LeaguesClient.tsx b/apps/website/app/leagues/LeaguesClient.tsx index 44ccdce84..90b1569dc 100644 --- a/apps/website/app/leagues/LeaguesClient.tsx +++ b/apps/website/app/leagues/LeaguesClient.tsx @@ -18,7 +18,7 @@ import { Target, Timer, } from 'lucide-react'; -import { LeagueCard } from '@/ui/LeagueCardWrapper'; +import { LeagueCard } from '@/components/leagues/LeagueCardWrapper'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Input } from '@/ui/Input'; diff --git a/apps/website/app/leagues/[id]/stewarding/StewardingTemplate.tsx b/apps/website/app/leagues/[id]/stewarding/StewardingTemplate.tsx index 77d0100d1..8e02db512 100644 --- a/apps/website/app/leagues/[id]/stewarding/StewardingTemplate.tsx +++ b/apps/website/app/leagues/[id]/stewarding/StewardingTemplate.tsx @@ -19,7 +19,7 @@ import { } from 'lucide-react'; import Link from 'next/link'; import { useMemo, useState } from 'react'; -import { PendingProtestsList } from '@/ui/PendingProtestsList'; +import { PendingProtestsList } from '@/components/leagues/PendingProtestsList'; import { PenaltyHistoryList } from '@/components/leagues/PenaltyHistoryList'; interface StewardingData { diff --git a/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/page.tsx b/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/page.tsx index f2de7bc85..40f014c7c 100644 --- a/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/page.tsx +++ b/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/page.tsx @@ -37,7 +37,7 @@ import { useMemo, useState } from 'react'; // Shared state components import { StateContainer } from '@/components/shared/state/StateContainer'; -import { LoadingWrapper } from '@/ui/LoadingWrapper'; +import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; import { useLeagueAdminStatus } from "@/lib/hooks/league/useLeagueAdminStatus"; import { useProtestDetail } from "@/lib/hooks/league/useProtestDetail"; diff --git a/apps/website/app/sponsor/signup/page.tsx b/apps/website/app/sponsor/signup/page.tsx index c8a91b798..ada21f254 100644 --- a/apps/website/app/sponsor/signup/page.tsx +++ b/apps/website/app/sponsor/signup/page.tsx @@ -5,7 +5,7 @@ import { motion, useReducedMotion } from 'framer-motion'; import { Card } from '@/ui/Card'; import { Button } from '@/ui/Button'; import { Input } from '@/ui/Input'; -import { SponsorHero } from '@/ui/SponsorHero'; +import { SponsorHero } from '@/components/sponsors/SponsorHero'; import { SponsorWorkflowMockup } from '@/components/sponsors/SponsorWorkflowMockup'; import { SponsorBenefitCard } from '@/components/sponsors/SponsorBenefitCard'; import { siteConfig } from '@/lib/siteConfig'; diff --git a/apps/website/ui/AchievementGrid.tsx b/apps/website/components/achievements/AchievementGrid.tsx similarity index 100% rename from apps/website/ui/AchievementGrid.tsx rename to apps/website/components/achievements/AchievementGrid.tsx diff --git a/apps/website/components/auth/AuthWorkflowMockup.tsx b/apps/website/components/auth/AuthWorkflowMockup.tsx index 6f5654b4c..b0aacdbfe 100644 --- a/apps/website/components/auth/AuthWorkflowMockup.tsx +++ b/apps/website/components/auth/AuthWorkflowMockup.tsx @@ -8,7 +8,7 @@ import { Trophy, Car, } from 'lucide-react'; -import { WorkflowMockup, WorkflowStep } from '@/ui/WorkflowMockup'; +import { WorkflowMockup, WorkflowStep } from '@/components/mockups/WorkflowMockup'; const WORKFLOW_STEPS: WorkflowStep[] = [ { diff --git a/apps/website/ui/DashboardHeroWrapper.tsx b/apps/website/components/dashboard/DashboardHeroWrapper.tsx similarity index 100% rename from apps/website/ui/DashboardHeroWrapper.tsx rename to apps/website/components/dashboard/DashboardHeroWrapper.tsx diff --git a/apps/website/ui/QuickActions.tsx b/apps/website/components/dashboard/QuickActions.tsx similarity index 83% rename from apps/website/ui/QuickActions.tsx rename to apps/website/components/dashboard/QuickActions.tsx index 9d76fd8ff..54a198cbc 100644 --- a/apps/website/ui/QuickActions.tsx +++ b/apps/website/components/dashboard/QuickActions.tsx @@ -2,9 +2,9 @@ import { routes } from '@/lib/routing/RouteConfig'; import { Trophy, Users } from 'lucide-react'; -import { Box } from './Box'; -import { Heading } from './Heading'; -import { QuickActionItem } from './QuickActionItem'; +import { Box } from '@/ui/Box'; +import { Heading } from '@/ui/Heading'; +import { QuickActionItem } from '@/ui/QuickActionItem'; export function QuickActions() { return ( diff --git a/apps/website/ui/DebugModeToggle.tsx b/apps/website/components/dev/DebugModeToggle.tsx similarity index 98% rename from apps/website/ui/DebugModeToggle.tsx rename to apps/website/components/dev/DebugModeToggle.tsx index 847417120..52f02678f 100644 --- a/apps/website/ui/DebugModeToggle.tsx +++ b/apps/website/components/dev/DebugModeToggle.tsx @@ -6,11 +6,11 @@ import type { GlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler'; import { Bug, Shield, X } from 'lucide-react'; import { useCallback, useEffect, useState } from 'react'; -import { Box } from './Box'; -import { Button } from './Button'; -import { Icon } from './Icon'; -import { Stack } from './Stack'; -import { Text } from './Text'; +import { Box } from '@/ui/Box'; +import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; // Extend Window interface for debug globals declare global { diff --git a/apps/website/ui/DriverCard.tsx b/apps/website/components/drivers/DriverCard.tsx similarity index 95% rename from apps/website/ui/DriverCard.tsx rename to apps/website/components/drivers/DriverCard.tsx index 2fbdf464d..fa981f88a 100644 --- a/apps/website/ui/DriverCard.tsx +++ b/apps/website/components/drivers/DriverCard.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Card } from '@/ui/Card'; import { RankBadge } from '@/ui/RankBadge'; -import { DriverIdentity } from '@/ui/DriverIdentity'; +import { DriverIdentity } from '@/components/drivers/DriverIdentity'; import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; import { Stack } from '@/ui/Stack'; import { DriverStats } from '@/ui/DriverStats'; diff --git a/apps/website/ui/DriverEntryRow.tsx b/apps/website/components/drivers/DriverEntryRow.tsx similarity index 92% rename from apps/website/ui/DriverEntryRow.tsx rename to apps/website/components/drivers/DriverEntryRow.tsx index fead0fdb4..62bc60cf1 100644 --- a/apps/website/ui/DriverEntryRow.tsx +++ b/apps/website/components/drivers/DriverEntryRow.tsx @@ -2,12 +2,12 @@ import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; import { Zap } from 'lucide-react'; -import { Badge } from './Badge'; -import { Box } from './Box'; -import { Icon } from './Icon'; -import { Image } from './Image'; -import { Stack } from './Stack'; -import { Text } from './Text'; +import { Badge } from '@/ui/Badge'; +import { Box } from '@/ui/Box'; +import { Icon } from '@/ui/Icon'; +import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; interface DriverEntryRowProps { index: number; diff --git a/apps/website/ui/DriverIdentity.tsx b/apps/website/components/drivers/DriverIdentity.tsx similarity index 88% rename from apps/website/ui/DriverIdentity.tsx rename to apps/website/components/drivers/DriverIdentity.tsx index b918ac041..49aeb4d83 100644 --- a/apps/website/ui/DriverIdentity.tsx +++ b/apps/website/components/drivers/DriverIdentity.tsx @@ -1,9 +1,9 @@ import Link from 'next/link'; -import Image from 'next/image'; -import { PlaceholderImage } from './PlaceholderImage'; -import { Box } from './Box'; -import { Text } from './Text'; -import { Badge } from './Badge'; +import { PlaceholderImage } from '@/ui/PlaceholderImage'; +import { Box } from '@/ui/Box'; +import { Text } from '@/ui/Text'; +import { Badge } from '@/ui/Badge'; +import { Image } from '@/ui/Image'; export interface DriverIdentityProps { driver: { @@ -43,7 +43,9 @@ export function DriverIdentity(props: DriverIdentityProps) { alt={driver.name} width={avatarSize} height={avatarSize} - className="w-full h-full object-cover" + fullWidth + fullHeight + objectFit="cover" /> ) : ( diff --git a/apps/website/components/drivers/DriverProfile.tsx b/apps/website/components/drivers/DriverProfile.tsx index 5d34e9417..f02da4a81 100644 --- a/apps/website/components/drivers/DriverProfile.tsx +++ b/apps/website/components/drivers/DriverProfile.tsx @@ -7,10 +7,10 @@ import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Stack } from '@/ui/Stack'; import { StatCard } from '@/ui/StatCard'; -import { ProfileHeader } from '@/ui/ProfileHeader'; +import { ProfileHeader } from '@/components/drivers/ProfileHeader'; import { ProfileStats } from './ProfileStats'; import { CareerHighlights } from '@/ui/CareerHighlights'; -import { DriverRankings } from '@/ui/DriverRankings'; +import { DriverRankings } from '@/components/drivers/DriverRankings'; import { PerformanceMetrics } from '@/ui/PerformanceMetrics'; import { useDriverProfile } from "@/hooks/driver/useDriverProfile"; diff --git a/apps/website/ui/DriverRankings.tsx b/apps/website/components/drivers/DriverRankings.tsx similarity index 86% rename from apps/website/ui/DriverRankings.tsx rename to apps/website/components/drivers/DriverRankings.tsx index 16bcead10..acc198ce0 100644 --- a/apps/website/ui/DriverRankings.tsx +++ b/apps/website/components/drivers/DriverRankings.tsx @@ -1,9 +1,9 @@ import React from 'react'; import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; -import { RankingListItem } from '@/ui/RankingListItem'; -import { RankingList } from '@/ui/RankingList'; -import { MinimalEmptyState } from '@/ui/EmptyState'; +import { RankingListItem } from '@/components/leaderboards/RankingListItem'; +import { RankingList } from '@/components/leaderboards/RankingList'; +import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; export interface DriverRanking { type: 'overall' | 'league'; diff --git a/apps/website/ui/DriverSummaryPillWrapper.tsx b/apps/website/components/drivers/DriverSummaryPillWrapper.tsx similarity index 100% rename from apps/website/ui/DriverSummaryPillWrapper.tsx rename to apps/website/components/drivers/DriverSummaryPillWrapper.tsx diff --git a/apps/website/ui/FeaturedDriverCard.tsx b/apps/website/components/drivers/FeaturedDriverCard.tsx similarity index 100% rename from apps/website/ui/FeaturedDriverCard.tsx rename to apps/website/components/drivers/FeaturedDriverCard.tsx diff --git a/apps/website/ui/ProfileHeader.tsx b/apps/website/components/drivers/ProfileHeader.tsx similarity index 100% rename from apps/website/ui/ProfileHeader.tsx rename to apps/website/components/drivers/ProfileHeader.tsx diff --git a/apps/website/ui/ProfileHero.tsx b/apps/website/components/drivers/ProfileHero.tsx similarity index 98% rename from apps/website/ui/ProfileHero.tsx rename to apps/website/components/drivers/ProfileHero.tsx index cca864612..ffcef5320 100644 --- a/apps/website/ui/ProfileHero.tsx +++ b/apps/website/components/drivers/ProfileHero.tsx @@ -1,6 +1,7 @@ import { mediaConfig } from '@/lib/config/mediaConfig'; +import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; diff --git a/apps/website/components/drivers/ProfileRaceHistory.tsx b/apps/website/components/drivers/ProfileRaceHistory.tsx index bcf9d1761..557afb09d 100644 --- a/apps/website/components/drivers/ProfileRaceHistory.tsx +++ b/apps/website/components/drivers/ProfileRaceHistory.tsx @@ -6,8 +6,8 @@ import { Button } from '@/ui/Button'; import { Box } from '@/ui/Box'; import { Text } from '@/ui/Text'; import { Stack } from '@/ui/Stack'; -import { LoadingWrapper } from '@/ui/LoadingWrapper'; -import { EmptyState } from '@/ui/EmptyState'; +import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; +import { EmptyState } from '@/components/shared/state/EmptyState'; import { Pagination } from '@/ui/Pagination'; import { Trophy } from 'lucide-react'; diff --git a/apps/website/components/errors/ApiErrorBoundary.tsx b/apps/website/components/errors/ApiErrorBoundary.tsx index 3efc70380..d942d27aa 100644 --- a/apps/website/components/errors/ApiErrorBoundary.tsx +++ b/apps/website/components/errors/ApiErrorBoundary.tsx @@ -3,7 +3,7 @@ import React, { Component, ReactNode, useState } from 'react'; import { ApiError } from '@/lib/api/base/ApiError'; import { connectionMonitor } from '@/lib/api/base/ApiConnectionMonitor'; -import { ErrorDisplay } from './ErrorDisplay'; +import { ErrorDisplay } from '@/components/shared/state/ErrorDisplay'; import { DevErrorPanel } from './DevErrorPanel'; interface Props { diff --git a/apps/website/components/errors/EnhancedErrorBoundary.tsx b/apps/website/components/errors/EnhancedErrorBoundary.tsx index 601f05a67..a38f51b67 100644 --- a/apps/website/components/errors/EnhancedErrorBoundary.tsx +++ b/apps/website/components/errors/EnhancedErrorBoundary.tsx @@ -4,7 +4,7 @@ import React, { Component, ReactNode, ErrorInfo, useState, version } from 'react import { ApiError } from '@/lib/api/base/ApiError'; import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler'; import { DevErrorPanel } from './DevErrorPanel'; -import { ErrorDisplay } from './ErrorDisplay'; +import { ErrorDisplay } from '@/components/shared/state/ErrorDisplay'; interface Props { children: ReactNode; diff --git a/apps/website/components/errors/ErrorDisplay.tsx b/apps/website/components/errors/ErrorDisplay.tsx index 9baa4d8dc..4349fed1d 100644 --- a/apps/website/components/errors/ErrorDisplay.tsx +++ b/apps/website/components/errors/ErrorDisplay.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { ApiError } from '@/lib/api/base/ApiError'; -import { ErrorDisplay as UiErrorDisplay } from '@/ui/ErrorDisplay'; +import { ErrorDisplay as UiErrorDisplay } from '@/components/shared/state/ErrorDisplay'; interface ErrorDisplayProps { error: ApiError; diff --git a/apps/website/ui/ActivityFeed.tsx b/apps/website/components/feed/ActivityFeed.tsx similarity index 89% rename from apps/website/ui/ActivityFeed.tsx rename to apps/website/components/feed/ActivityFeed.tsx index 9a48e8fb5..9c33cb0ff 100644 --- a/apps/website/ui/ActivityFeed.tsx +++ b/apps/website/components/feed/ActivityFeed.tsx @@ -4,8 +4,8 @@ import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { ActivityItem } from '@/ui/ActivityItem'; import { Icon } from '@/ui/Icon'; -import { ActivityFeedList } from '@/ui/ActivityFeedList'; -import { MinimalEmptyState } from '@/ui/EmptyState'; +import { ActivityFeedList } from '@/components/feed/ActivityFeedList'; +import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; interface FeedItem { id: string; diff --git a/apps/website/ui/ActivityFeedItem.tsx b/apps/website/components/feed/ActivityFeedItem.tsx similarity index 89% rename from apps/website/ui/ActivityFeedItem.tsx rename to apps/website/components/feed/ActivityFeedItem.tsx index 4a0866210..a64b9acf6 100644 --- a/apps/website/ui/ActivityFeedItem.tsx +++ b/apps/website/components/feed/ActivityFeedItem.tsx @@ -1,8 +1,9 @@ import { ReactNode } from 'react'; -import { Box } from './Box'; -import { Surface } from './Surface'; +import { Box } from '@/ui/Box'; +import { Surface } from '@/ui/Surface'; +import { Text } from '@/ui/Text'; interface ActivityFeedItemProps { icon: ReactNode; diff --git a/apps/website/ui/ActivityFeedList.tsx b/apps/website/components/feed/ActivityFeedList.tsx similarity index 87% rename from apps/website/ui/ActivityFeedList.tsx rename to apps/website/components/feed/ActivityFeedList.tsx index f2c969919..7e9b7ca9c 100644 --- a/apps/website/ui/ActivityFeedList.tsx +++ b/apps/website/components/feed/ActivityFeedList.tsx @@ -1,5 +1,5 @@ import React, { ReactNode } from 'react'; -import { Stack } from './Stack'; +import { Stack } from '@/ui/Stack'; interface ActivityFeedListProps { children: ReactNode; diff --git a/apps/website/ui/FeedLayout.tsx b/apps/website/components/feed/FeedLayout.tsx similarity index 87% rename from apps/website/ui/FeedLayout.tsx rename to apps/website/components/feed/FeedLayout.tsx index f960fc166..b1d53e2c3 100644 --- a/apps/website/ui/FeedLayout.tsx +++ b/apps/website/components/feed/FeedLayout.tsx @@ -1,7 +1,7 @@ import { Card } from '@/ui/Card'; -import { FeedList } from '@/ui/FeedList'; -import { UpcomingRacesSidebar } from '@/ui/UpcomingRacesSidebar'; -import { LatestResultsSidebar } from '@/ui/LatestResultsSidebar'; +import { FeedList } from '@/components/feed/FeedList'; +import { UpcomingRacesSidebar } from '@/components/races/UpcomingRacesSidebar'; +import { LatestResultsSidebar } from '@/components/races/LatestResultsSidebar'; interface FeedItemData { id: string; diff --git a/apps/website/ui/FeedList.tsx b/apps/website/components/feed/FeedList.tsx similarity index 100% rename from apps/website/ui/FeedList.tsx rename to apps/website/components/feed/FeedList.tsx diff --git a/apps/website/ui/RecentActivity.tsx b/apps/website/components/feed/RecentActivity.tsx similarity index 100% rename from apps/website/ui/RecentActivity.tsx rename to apps/website/components/feed/RecentActivity.tsx diff --git a/apps/website/ui/AlternatingSection.tsx b/apps/website/components/landing/AlternatingSection.tsx similarity index 100% rename from apps/website/ui/AlternatingSection.tsx rename to apps/website/components/landing/AlternatingSection.tsx diff --git a/apps/website/ui/BenefitCard.tsx b/apps/website/components/landing/BenefitCard.tsx similarity index 94% rename from apps/website/ui/BenefitCard.tsx rename to apps/website/components/landing/BenefitCard.tsx index 9fa0982cf..ad0dbf82b 100644 --- a/apps/website/ui/BenefitCard.tsx +++ b/apps/website/components/landing/BenefitCard.tsx @@ -3,11 +3,11 @@ import { motion, useReducedMotion } from 'framer-motion'; import { LucideIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; -import { Box } from './Box'; -import { Heading } from './Heading'; -import { Icon } from './Icon'; -import { Surface } from './Surface'; -import { Text } from './Text'; +import { Box } from '@/ui/Box'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Surface } from '@/ui/Surface'; +import { Text } from '@/ui/Text'; interface BenefitCardProps { icon: LucideIcon; diff --git a/apps/website/ui/FeatureGrid.tsx b/apps/website/components/landing/FeatureGrid.tsx similarity index 97% rename from apps/website/ui/FeatureGrid.tsx rename to apps/website/components/landing/FeatureGrid.tsx index baabd1a26..71d69272f 100644 --- a/apps/website/ui/FeatureGrid.tsx +++ b/apps/website/components/landing/FeatureGrid.tsx @@ -1,12 +1,12 @@ 'use client'; -import { useRef, useState, useEffect } from 'react'; import { Section } from '@/ui/Section'; import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; -import { MockupStack } from '@/ui/MockupStack'; +import { MockupStack } from '@/components/mockups/MockupStack'; import { Box } from '@/ui/Box'; import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/Stack'; import { LeagueHomeMockup } from '@/components/mockups/LeagueHomeMockup'; import { StandingsTableMockup } from '@/components/mockups/StandingsTableMockup'; import { TeamCompetitionMockup } from '@/components/mockups/TeamCompetitionMockup'; diff --git a/apps/website/ui/LandingHero.tsx b/apps/website/components/landing/LandingHero.tsx similarity index 99% rename from apps/website/ui/LandingHero.tsx rename to apps/website/components/landing/LandingHero.tsx index 305515d27..b9648c8a4 100644 --- a/apps/website/ui/LandingHero.tsx +++ b/apps/website/components/landing/LandingHero.tsx @@ -1,5 +1,5 @@ - +import { useRef } from 'react'; import { useParallax } from '@/hooks/useScrollProgress'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; @@ -126,7 +126,7 @@ export function LandingHero() {