diff --git a/apps/website/app/drivers/DriversPageClient.tsx b/apps/website/app/drivers/DriversPageClient.tsx index 75e77f163..868880835 100644 --- a/apps/website/app/drivers/DriversPageClient.tsx +++ b/apps/website/app/drivers/DriversPageClient.tsx @@ -1,12 +1,12 @@ 'use client'; -import React, { useState, useMemo } from 'react'; -import { useRouter } from 'next/navigation'; -import { DriversTemplate } from '@/templates/DriversTemplate'; import type { DriversViewData } from '@/lib/types/view-data/DriversViewData'; +import { DriversTemplate } from '@/templates/DriversTemplate'; import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { useRouter } from 'next/navigation'; +import { useMemo, useState } from 'react'; import { routes } from '@/lib/routing/RouteConfig'; diff --git a/apps/website/app/drivers/[id]/DriverProfilePageClient.tsx b/apps/website/app/drivers/[id]/DriverProfilePageClient.tsx index 27f7cccee..74e859149 100644 --- a/apps/website/app/drivers/[id]/DriverProfilePageClient.tsx +++ b/apps/website/app/drivers/[id]/DriverProfilePageClient.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { useState } from 'react'; -import { useRouter } from 'next/navigation'; -import { DriverProfileTemplate } from '@/templates/DriverProfileTemplate'; import type { DriverProfileViewData } from '@/lib/types/view-data/DriverProfileViewData'; -import type { ProfileTab } from '@/ui/ProfileTabs'; +import { DriverProfileTemplate } from '@/templates/DriverProfileTemplate'; import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import type { ProfileTab } from '@/ui/ProfileTabs'; import { Text } from '@/ui/Text'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; interface DriverProfilePageClientProps { viewData: DriverProfileViewData | null; diff --git a/apps/website/app/leagues/LeaguesPageClient.tsx b/apps/website/app/leagues/LeaguesPageClient.tsx index 3d18597f7..546214b59 100644 --- a/apps/website/app/leagues/LeaguesPageClient.tsx +++ b/apps/website/app/leagues/LeaguesPageClient.tsx @@ -1,32 +1,32 @@ 'use client'; -import React, { useState } from 'react'; import { LeagueCard } from '@/components/leagues/LeagueCardWrapper'; -import { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel'; import { routes } from '@/lib/routing/RouteConfig'; import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; -import { Box } from '@/ui/Box'; +import { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Input } from '@/ui/Input'; +import { Box } from '@/ui/primitives/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; import { - Flame, - Globe, - Plus, - Search, - Sparkles, - Target, - Trophy, - Users, - Flag, - Award, - Timer, - Clock, - type LucideIcon, + Award, + Clock, + Flag, + Flame, + Globe, + Plus, + Search, + Sparkles, + Target, + Timer, + Trophy, + Users, + type LucideIcon, } from 'lucide-react'; import { useRouter } from 'next/navigation'; +import React, { useState } from 'react'; // ============================================================================ // TYPES diff --git a/apps/website/app/leagues/[id]/schedule/admin/LeagueAdminSchedulePageClient.tsx b/apps/website/app/leagues/[id]/schedule/admin/LeagueAdminSchedulePageClient.tsx index 68b58e32e..78930c367 100644 --- a/apps/website/app/leagues/[id]/schedule/admin/LeagueAdminSchedulePageClient.tsx +++ b/apps/website/app/leagues/[id]/schedule/admin/LeagueAdminSchedulePageClient.tsx @@ -1,29 +1,29 @@ 'use client'; -import { useState } from 'react'; -import { useParams, useRouter } from 'next/navigation'; -import { PageWrapper } from '@/components/shared/state/PageWrapper'; -import { LeagueAdminScheduleTemplate } from '@/templates/LeagueAdminScheduleTemplate'; import { - useLeagueAdminStatus, - useLeagueSeasons, - useLeagueAdminSchedule + createRaceAction, + deleteRaceAction, + publishScheduleAction, + unpublishScheduleAction, + updateRaceAction +} from '@/app/actions/leagueScheduleActions'; +import { PageWrapper } from '@/components/shared/state/PageWrapper'; +import { ConfirmDialog } from '@/components/shared/ux/ConfirmDialog'; +import { + useLeagueAdminSchedule, + useLeagueAdminStatus, + useLeagueSeasons } from "@/hooks/league/useLeagueScheduleAdminPageData"; import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; -import { - publishScheduleAction, - unpublishScheduleAction, - createRaceAction, - updateRaceAction, - deleteRaceAction -} from '@/app/actions/leagueScheduleActions'; import { RaceScheduleCommandModel } from '@/lib/command-models/leagues/RaceScheduleCommandModel'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { LeagueAdminScheduleTemplate } from '@/templates/LeagueAdminScheduleTemplate'; import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; -import { ConfirmDialog } from '@/components/shared/ux/ConfirmDialog'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; +import { useParams, useRouter } from 'next/navigation'; +import { useState } from 'react'; export function LeagueAdminSchedulePageClient() { const params = useParams(); diff --git a/apps/website/app/leagues/[id]/stewarding/StewardingPageClient.tsx b/apps/website/app/leagues/[id]/stewarding/StewardingPageClient.tsx index 66eeb8242..8b0c26b4b 100644 --- a/apps/website/app/leagues/[id]/stewarding/StewardingPageClient.tsx +++ b/apps/website/app/leagues/[id]/stewarding/StewardingPageClient.tsx @@ -1,22 +1,22 @@ 'use client'; -import { StewardingQueuePanel } from '@/components/leagues/StewardingQueuePanel'; -import { PenaltyFAB } from '@/components/races/PenaltyFAB'; +import { PenaltyHistoryList } from '@/components/leagues/PenaltyHistoryList'; import { QuickPenaltyModal } from '@/components/leagues/QuickPenaltyModal'; import { ReviewProtestModal } from '@/components/leagues/ReviewProtestModal'; +import { StewardingQueuePanel } from '@/components/leagues/StewardingQueuePanel'; import { StewardingStats } from '@/components/leagues/StewardingStats'; -import { Button } from '@/ui/Button'; -import { Card } from '@/ui/Card'; +import { PenaltyFAB } from '@/components/races/PenaltyFAB'; import { useLeagueStewardingMutations } from "@/hooks/league/useLeagueStewardingMutations"; -import { useMemo, useState } from 'react'; -import { PenaltyHistoryList } from '@/components/leagues/PenaltyHistoryList'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import type { StewardingViewData } from '@/lib/view-data/leagues/StewardingViewData'; +import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; import { ProtestViewModel } from '@/lib/view-models/ProtestViewModel'; import { RaceViewModel } from '@/lib/view-models/RaceViewModel'; -import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; +import { useMemo, useState } from 'react'; interface StewardingTemplateProps { data: StewardingViewData; diff --git a/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/ProtestDetailPageClient.tsx b/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/ProtestDetailPageClient.tsx index ffd2ff5e9..470e8693b 100644 --- a/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/ProtestDetailPageClient.tsx +++ b/apps/website/app/leagues/[id]/stewarding/protests/[protestId]/ProtestDetailPageClient.tsx @@ -1,51 +1,51 @@ 'use client'; -import { Button } from '@/ui/Button'; -import { Card } from '@/ui/Card'; import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; +import { ProtestDecisionCommandModel } from '@/lib/command-models/protests/ProtestDecisionCommandModel'; import { useInject } from '@/lib/di/hooks/useInject'; import { PROTEST_SERVICE_TOKEN } from '@/lib/di/tokens'; -import { ProtestDecisionCommandModel } from '@/lib/command-models/protests/ProtestDecisionCommandModel'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; import { - AlertTriangle, - ArrowLeft, - Calendar, - CheckCircle, - ChevronDown, - Clock, - ExternalLink, - Flag, - Gavel, - Grid3x3, - MapPin, - MessageCircle, - Send, - Shield, - ShieldAlert, - TrendingDown, - User, - Video, - XCircle, - AlertCircle, - type LucideIcon + AlertCircle, + AlertTriangle, + ArrowLeft, + Calendar, + CheckCircle, + ChevronDown, + Clock, + ExternalLink, + Flag, + Gavel, + Grid3x3, + MapPin, + MessageCircle, + Send, + Shield, + ShieldAlert, + TrendingDown, + User, + Video, + XCircle, + type LucideIcon } from 'lucide-react'; import { useParams, useRouter } from 'next/navigation'; -import { useMemo, useState, useEffect } from 'react'; +import { useEffect, useMemo, useState } from 'react'; // Shared state components -import { StateContainer } from '@/components/shared/state/StateContainer'; import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; +import { StateContainer } from '@/components/shared/state/StateContainer'; import { useLeagueAdminStatus } from "@/hooks/league/useLeagueAdminStatus"; import { useProtestDetail } from "@/hooks/league/useProtestDetail"; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Grid } from '@/ui/Grid'; +import { routes } from '@/lib/routing/RouteConfig'; import { GridItem } from '@/ui/GridItem'; +import { Heading } from '@/ui/Heading'; import { Icon as UIIcon } from '@/ui/Icon'; import { Link as UILink } from '@/ui/Link'; -import { routes } from '@/lib/routing/RouteConfig'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; type PenaltyUiConfig = { label: string; diff --git a/apps/website/app/leagues/[id]/wallet/LeagueWalletPageClient.tsx b/apps/website/app/leagues/[id]/wallet/LeagueWalletPageClient.tsx index 69efc68dc..47a53fb22 100644 --- a/apps/website/app/leagues/[id]/wallet/LeagueWalletPageClient.tsx +++ b/apps/website/app/leagues/[id]/wallet/LeagueWalletPageClient.tsx @@ -1,18 +1,17 @@ 'use client'; -import React from 'react'; import { WalletSummaryPanel } from '@/components/leagues/WalletSummaryPanel'; import type { LeagueWalletViewData } from '@/lib/view-data/leagues/LeagueWalletViewData'; -import { Box } from '@/ui/Box'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { Heading } from '@/ui/Heading'; +import { Icon as UIIcon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Container } from '@/ui/Container'; -import { Icon as UIIcon } from '@/ui/Icon'; import { - Download + Download } from 'lucide-react'; -import { Button } from '@/ui/Button'; interface WalletTemplateProps { viewData: LeagueWalletViewData; diff --git a/apps/website/app/leagues/create/CreateLeagueWizard.tsx b/apps/website/app/leagues/create/CreateLeagueWizard.tsx index 9d6e03d56..abc1c0f94 100644 --- a/apps/website/app/leagues/create/CreateLeagueWizard.tsx +++ b/apps/website/app/leagues/create/CreateLeagueWizard.tsx @@ -1,51 +1,51 @@ 'use client'; +import { useAuth } from '@/components/auth/AuthContext'; import { LeagueReviewSummary } from '@/components/leagues/LeagueReviewSummary'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { useAuth } from '@/components/auth/AuthContext'; import { - AlertCircle, - Award, - Calendar, - Check, - CheckCircle2, - ChevronLeft, - ChevronRight, - FileText, - Loader2, - Scale, - Sparkles, - Trophy, - Users, + AlertCircle, + Award, + Calendar, + Check, + CheckCircle2, + ChevronLeft, + ChevronRight, + FileText, + Loader2, + Scale, + Sparkles, + Trophy, + Users, } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { FormEvent, useCallback, useEffect, useState } from 'react'; import { LeagueWizardCommandModel } from '@/lib/command-models/leagues/LeagueWizardCommandModel'; -import { useCreateLeagueWizard } from "@/hooks/useLeagueWizardService"; -import { useLeagueScoringPresets } from "@/hooks/useLeagueScoringPresets"; import { LeagueBasicsSection } from '@/components/leagues/LeagueBasicsSection'; import { LeagueDropSection } from '@/components/leagues/LeagueDropSection'; import { - ChampionshipsSection, - ScoringPatternSection + ChampionshipsSection, + ScoringPatternSection } from '@/components/leagues/LeagueScoringSection'; import { LeagueStewardingSection } from '@/components/leagues/LeagueStewardingSection'; import { LeagueStructureSection } from '@/components/leagues/LeagueStructureSection'; import { LeagueTimingsSection } from '@/components/leagues/LeagueTimingsSection'; import { LeagueVisibilitySection } from '@/components/leagues/LeagueVisibilitySection'; +import { useLeagueScoringPresets } from "@/hooks/useLeagueScoringPresets"; +import { useCreateLeagueWizard } from "@/hooks/useLeagueWizardService"; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; -import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel'; import type { Weekday } from '@/lib/types/Weekday'; import type { WizardErrors } from '@/lib/types/WizardErrors'; +import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel'; // ============================================================================ // LOCAL STORAGE PERSISTENCE diff --git a/apps/website/app/profile/liveries/upload/ProfileLiveryUploadPageClient.tsx b/apps/website/app/profile/liveries/upload/ProfileLiveryUploadPageClient.tsx index 63fe87cd1..936055ed6 100644 --- a/apps/website/app/profile/liveries/upload/ProfileLiveryUploadPageClient.tsx +++ b/apps/website/app/profile/liveries/upload/ProfileLiveryUploadPageClient.tsx @@ -1,17 +1,17 @@ 'use client'; -import React, { useState } from 'react'; -import Link from 'next/link'; +import { UploadDropzone } from '@/components/media/UploadDropzone'; +import { routes } from '@/lib/routing/RouteConfig'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; -import { routes } from '@/lib/routing/RouteConfig'; -import { UploadDropzone } from '@/components/media/UploadDropzone'; -import { MediaPreviewCard } from '@/ui/MediaPreviewCard'; import { MediaMetaPanel, mapMediaMetadata } from '@/ui/MediaMetaPanel'; +import { MediaPreviewCard } from '@/ui/MediaPreviewCard'; +import { Text } from '@/ui/Text'; +import { Box } from '@/ui/primitives/Box'; +import Link from 'next/link'; +import { useState } from 'react'; export function ProfileLiveryUploadPageClient() { const [selectedFile, setSelectedFile] = useState(null); diff --git a/apps/website/app/profile/settings/ProfileSettingsPageClient.tsx b/apps/website/app/profile/settings/ProfileSettingsPageClient.tsx index f3c2ac061..ae75f8e2b 100644 --- a/apps/website/app/profile/settings/ProfileSettingsPageClient.tsx +++ b/apps/website/app/profile/settings/ProfileSettingsPageClient.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { useState } from 'react'; -import { useRouter } from 'next/navigation'; -import { ProfileSettingsTemplate } from '@/templates/ProfileSettingsTemplate'; -import type { ProfileViewData } from '@/lib/view-data/ProfileViewData'; -import type { Result } from '@/lib/contracts/Result'; -import { ProgressLine } from '@/components/shared/ux/ProgressLine'; import { InlineNotice } from '@/components/shared/ux/InlineNotice'; -import { Box } from '@/ui/Box'; +import { ProgressLine } from '@/components/shared/ux/ProgressLine'; +import type { Result } from '@/lib/contracts/Result'; +import type { ProfileViewData } from '@/lib/view-data/ProfileViewData'; +import { ProfileSettingsTemplate } from '@/templates/ProfileSettingsTemplate'; +import { Box } from '@/ui/primitives/Box'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; interface ProfileSettingsPageClientProps { viewData: ProfileViewData; diff --git a/apps/website/app/profile/sponsorship-requests/SponsorshipRequestsClient.tsx b/apps/website/app/profile/sponsorship-requests/SponsorshipRequestsClient.tsx index dfe865ee5..24d2ace6d 100644 --- a/apps/website/app/profile/sponsorship-requests/SponsorshipRequestsClient.tsx +++ b/apps/website/app/profile/sponsorship-requests/SponsorshipRequestsClient.tsx @@ -1,13 +1,13 @@ 'use client'; -import { useState } from 'react'; -import { useRouter } from 'next/navigation'; +import { InlineNotice } from '@/components/shared/ux/InlineNotice'; +import { ProgressLine } from '@/components/shared/ux/ProgressLine'; import type { Result } from '@/lib/contracts/Result'; import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData'; import { SponsorshipRequestsTemplate } from '@/templates/SponsorshipRequestsTemplate'; -import { InlineNotice } from '@/components/shared/ux/InlineNotice'; -import { ProgressLine } from '@/components/shared/ux/ProgressLine'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; interface SponsorshipRequestsClientProps { viewData: SponsorshipRequestsViewData; diff --git a/apps/website/app/sponsor/layout.tsx b/apps/website/app/sponsor/layout.tsx index 522b9a050..c89ba96b3 100644 --- a/apps/website/app/sponsor/layout.tsx +++ b/apps/website/app/sponsor/layout.tsx @@ -1,7 +1,7 @@ +import { createRouteGuard } from '@/lib/auth/createRouteGuard'; +import { Box } from '@/ui/primitives/Box'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; -import { createRouteGuard } from '@/lib/auth/createRouteGuard'; -import { Box } from '@/ui/Box'; interface SponsorLayoutProps { children: React.ReactNode; diff --git a/apps/website/app/sponsor/signup/page.tsx b/apps/website/app/sponsor/signup/page.tsx index c3f6c7702..445569922 100644 --- a/apps/website/app/sponsor/signup/page.tsx +++ b/apps/website/app/sponsor/signup/page.tsx @@ -1,37 +1,37 @@ 'use client'; -import { useState } from 'react'; -import { motion, useReducedMotion } from 'framer-motion'; -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; +import { SponsorBenefitCard } from '@/components/sponsors/SponsorBenefitCard'; import { SponsorHero } from '@/components/sponsors/SponsorHero'; import { SponsorWorkflowMockup } from '@/components/sponsors/SponsorWorkflowMockup'; -import { SponsorBenefitCard } from '@/components/sponsors/SponsorBenefitCard'; -import { siteConfig } from '@/lib/siteConfig'; import { SponsorSignupCommandModel } from '@/lib/command-models/sponsors/SponsorSignupCommandModel'; +import { siteConfig } from '@/lib/siteConfig'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Input } from '@/ui/Input'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/Stack'; +import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; import { - Building2, - Mail, - Globe, - Upload, - Eye, - TrendingUp, - Users, - ArrowRight, - Trophy, - Car, - Flag, - Target, - BarChart3, - Shield, - CheckCircle2, - Megaphone + ArrowRight, + BarChart3, + Building2, + Car, + CheckCircle2, + Eye, + Flag, + Globe, + Mail, + Megaphone, + Shield, + Target, + TrendingUp, + Trophy, + Upload, + Users } from 'lucide-react'; +import { useState } from 'react'; // Sponsorship type definitions interface SponsorshipType { diff --git a/apps/website/app/teams/create/page.tsx b/apps/website/app/teams/create/page.tsx index b1ab435e3..842b2db27 100644 --- a/apps/website/app/teams/create/page.tsx +++ b/apps/website/app/teams/create/page.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { useRouter } from 'next/navigation'; import { CreateTeamForm } from '@/components/teams/CreateTeamForm'; -import { Section } from '@/ui/Section'; +import { routes } from '@/lib/routing/RouteConfig'; import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; -import { Stack } from '@/ui/Stack'; -import { routes } from '@/lib/routing/RouteConfig'; +import { Stack } from '@/ui/primitives/Stack'; +import { Section } from '@/ui/Section'; +import { useRouter } from 'next/navigation'; export default function CreateTeamPage() { const router = useRouter(); diff --git a/apps/website/components/TeamRankingsFilter.tsx b/apps/website/components/TeamRankingsFilter.tsx index d3d4e5464..65eb336cd 100644 --- a/apps/website/components/TeamRankingsFilter.tsx +++ b/apps/website/components/TeamRankingsFilter.tsx @@ -1,11 +1,10 @@ -import React from 'react'; -import { Search, Star, Trophy, Percent, Hash, LucideIcon } from 'lucide-react'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; import { Badge } from '@/ui/Badge'; +import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Hash, LucideIcon, Percent, Search, Star, Trophy } from 'lucide-react'; type SkillLevel = 'pro' | 'advanced' | 'intermediate' | 'beginner'; type SortBy = 'rating' | 'wins' | 'winRate' | 'races'; diff --git a/apps/website/components/achievements/AchievementCard.tsx b/apps/website/components/achievements/AchievementCard.tsx index 2db5ba7f6..bb3585e18 100644 --- a/apps/website/components/achievements/AchievementCard.tsx +++ b/apps/website/components/achievements/AchievementCard.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; import { Card } from '@/ui/Card'; +import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/primitives/Stack'; interface AchievementCardProps { title: string; diff --git a/apps/website/components/achievements/MilestoneItem.tsx b/apps/website/components/achievements/MilestoneItem.tsx index d3f8556fa..737bfa565 100644 --- a/apps/website/components/achievements/MilestoneItem.tsx +++ b/apps/website/components/achievements/MilestoneItem.tsx @@ -1,6 +1,5 @@ -import React from 'react'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; interface MilestoneItemProps { label: string; diff --git a/apps/website/components/actions/ActionFiltersBar.tsx b/apps/website/components/actions/ActionFiltersBar.tsx index f00d678ad..b5ee1d200 100644 --- a/apps/website/components/actions/ActionFiltersBar.tsx +++ b/apps/website/components/actions/ActionFiltersBar.tsx @@ -1,10 +1,10 @@ 'use client'; -import { useState } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Select } from '@/ui/Select'; import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; +import { useState } from 'react'; export function ActionFiltersBar() { const [filter, setFilter] = useState('all'); diff --git a/apps/website/components/actions/ActionsHeader.tsx b/apps/website/components/actions/ActionsHeader.tsx index 2750a1f9d..2e4e8549f 100644 --- a/apps/website/components/actions/ActionsHeader.tsx +++ b/apps/website/components/actions/ActionsHeader.tsx @@ -1,9 +1,9 @@ 'use client'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { StatusIndicator } from '@/ui/StatusIndicator'; import { Text } from '@/ui/Text'; import { Activity } from 'lucide-react'; -import { StatusIndicator } from '@/ui/StatusIndicator'; interface ActionsHeaderProps { title: string; diff --git a/apps/website/components/admin/AdminDangerZonePanel.tsx b/apps/website/components/admin/AdminDangerZonePanel.tsx index 09a195590..e69b519bb 100644 --- a/apps/website/components/admin/AdminDangerZonePanel.tsx +++ b/apps/website/components/admin/AdminDangerZonePanel.tsx @@ -1,10 +1,10 @@ 'use client'; -import React from 'react'; import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import React from 'react'; interface AdminDangerZonePanelProps { title: string; diff --git a/apps/website/components/admin/AdminDataTable.tsx b/apps/website/components/admin/AdminDataTable.tsx index 493ea359c..817ef1f83 100644 --- a/apps/website/components/admin/AdminDataTable.tsx +++ b/apps/website/components/admin/AdminDataTable.tsx @@ -1,8 +1,8 @@ 'use client'; -import React from 'react'; import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import React from 'react'; interface AdminDataTableProps { children: React.ReactNode; diff --git a/apps/website/components/admin/AdminEmptyState.tsx b/apps/website/components/admin/AdminEmptyState.tsx index 37959d813..cf13728ce 100644 --- a/apps/website/components/admin/AdminEmptyState.tsx +++ b/apps/website/components/admin/AdminEmptyState.tsx @@ -1,10 +1,10 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { LucideIcon } from 'lucide-react'; +import React from 'react'; interface AdminEmptyStateProps { icon: LucideIcon; diff --git a/apps/website/components/admin/AdminHeaderPanel.tsx b/apps/website/components/admin/AdminHeaderPanel.tsx index 7ca05701f..546e8a595 100644 --- a/apps/website/components/admin/AdminHeaderPanel.tsx +++ b/apps/website/components/admin/AdminHeaderPanel.tsx @@ -1,10 +1,10 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { ProgressLine } from '@/components/shared/ux/ProgressLine'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import React from 'react'; interface AdminHeaderPanelProps { title: string; diff --git a/apps/website/components/admin/AdminSectionHeader.tsx b/apps/website/components/admin/AdminSectionHeader.tsx index 7ed5a8017..64966fce8 100644 --- a/apps/website/components/admin/AdminSectionHeader.tsx +++ b/apps/website/components/admin/AdminSectionHeader.tsx @@ -1,9 +1,9 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import React from 'react'; interface AdminSectionHeaderProps { title: string; diff --git a/apps/website/components/admin/AdminStatsPanel.tsx b/apps/website/components/admin/AdminStatsPanel.tsx index f1d72b7ad..3874f470b 100644 --- a/apps/website/components/admin/AdminStatsPanel.tsx +++ b/apps/website/components/admin/AdminStatsPanel.tsx @@ -1,7 +1,6 @@ 'use client'; -import React from 'react'; -import { Grid } from '@/ui/Grid'; +import { Grid } from '@/ui/primitives/Grid'; import { StatCard } from '@/ui/StatCard'; import { LucideIcon } from 'lucide-react'; diff --git a/apps/website/components/admin/AdminToolbar.tsx b/apps/website/components/admin/AdminToolbar.tsx index a220d9006..2a8d454f1 100644 --- a/apps/website/components/admin/AdminToolbar.tsx +++ b/apps/website/components/admin/AdminToolbar.tsx @@ -1,8 +1,8 @@ 'use client'; -import React from 'react'; import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import React from 'react'; interface AdminToolbarProps { children: React.ReactNode; diff --git a/apps/website/components/admin/AdminUsersTable.tsx b/apps/website/components/admin/AdminUsersTable.tsx index c30171774..3ee05b275 100644 --- a/apps/website/components/admin/AdminUsersTable.tsx +++ b/apps/website/components/admin/AdminUsersTable.tsx @@ -1,23 +1,22 @@ 'use client'; -import React from 'react'; -import { - Table, - TableHead, - TableBody, - TableRow, - TableHeader, - TableCell -} from '@/ui/Table'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { DateDisplay } from '@/lib/display-objects/DateDisplay'; +import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { SimpleCheckbox } from '@/ui/SimpleCheckbox'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { MoreVertical, Shield, Trash2 } from 'lucide-react'; import { UserStatusTag } from './UserStatusTag'; -import { DateDisplay } from '@/lib/display-objects/DateDisplay'; -import { Shield, Trash2, MoreVertical } from 'lucide-react'; -import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; interface AdminUsersTableProps { users: AdminUsersViewData['users']; diff --git a/apps/website/components/admin/BulkActionBar.tsx b/apps/website/components/admin/BulkActionBar.tsx index 9ecc9216e..d7fe793d6 100644 --- a/apps/website/components/admin/BulkActionBar.tsx +++ b/apps/website/components/admin/BulkActionBar.tsx @@ -1,10 +1,10 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; -import { motion, AnimatePresence } from 'framer-motion'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AnimatePresence, motion } from 'framer-motion'; +import React from 'react'; interface BulkActionBarProps { selectedCount: number; diff --git a/apps/website/components/admin/UserFilters.tsx b/apps/website/components/admin/UserFilters.tsx index de355865e..2e2c3782d 100644 --- a/apps/website/components/admin/UserFilters.tsx +++ b/apps/website/components/admin/UserFilters.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Filter, Search } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; +import { Filter, Search } from 'lucide-react'; import { AdminToolbar } from './AdminToolbar'; interface UserFiltersProps { diff --git a/apps/website/components/admin/UserStatsSummary.tsx b/apps/website/components/admin/UserStatsSummary.tsx index 2e0415e4d..15574a22b 100644 --- a/apps/website/components/admin/UserStatsSummary.tsx +++ b/apps/website/components/admin/UserStatsSummary.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; -import { Users, Shield } from 'lucide-react'; -import { Grid } from '@/ui/Grid'; import { MetricCard } from '@/ui/MetricCard'; +import { Grid } from '@/ui/primitives/Grid'; +import { Shield, Users } from 'lucide-react'; interface UserStatsSummaryProps { total: number; diff --git a/apps/website/components/auth/AuthCard.tsx b/apps/website/components/auth/AuthCard.tsx index 2ce6c3715..2723bcc2d 100644 --- a/apps/website/components/auth/AuthCard.tsx +++ b/apps/website/components/auth/AuthCard.tsx @@ -1,9 +1,9 @@ 'use client'; -import React from 'react'; import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import React from 'react'; interface AuthCardProps { children: React.ReactNode; diff --git a/apps/website/components/auth/AuthFooterLinks.tsx b/apps/website/components/auth/AuthFooterLinks.tsx index 80047497b..4055609b8 100644 --- a/apps/website/components/auth/AuthFooterLinks.tsx +++ b/apps/website/components/auth/AuthFooterLinks.tsx @@ -1,7 +1,7 @@ 'use client'; +import { Stack } from '@/ui/primitives/Stack'; import React from 'react'; -import { Stack } from '@/ui/Stack'; interface AuthFooterLinksProps { children: React.ReactNode; diff --git a/apps/website/components/auth/AuthForm.tsx b/apps/website/components/auth/AuthForm.tsx index 21354bd18..3f1f2093a 100644 --- a/apps/website/components/auth/AuthForm.tsx +++ b/apps/website/components/auth/AuthForm.tsx @@ -1,7 +1,7 @@ 'use client'; +import { Stack } from '@/ui/primitives/Stack'; import React from 'react'; -import { Stack } from '@/ui/Stack'; interface AuthFormProps { children: React.ReactNode; diff --git a/apps/website/components/auth/AuthProviderButtons.tsx b/apps/website/components/auth/AuthProviderButtons.tsx index 7ccf02b4f..82250b400 100644 --- a/apps/website/components/auth/AuthProviderButtons.tsx +++ b/apps/website/components/auth/AuthProviderButtons.tsx @@ -1,7 +1,7 @@ 'use client'; +import { Grid } from '@/ui/primitives/Grid'; import React from 'react'; -import { Grid } from '@/ui/Grid'; interface AuthProviderButtonsProps { children: React.ReactNode; diff --git a/apps/website/components/auth/AuthShell.tsx b/apps/website/components/auth/AuthShell.tsx index 86bd1c1a2..9beed7702 100644 --- a/apps/website/components/auth/AuthShell.tsx +++ b/apps/website/components/auth/AuthShell.tsx @@ -1,7 +1,7 @@ 'use client'; +import { Stack } from '@/ui/primitives/Stack'; import React from 'react'; -import { Stack } from '@/ui/Stack'; interface AuthShellProps { children: React.ReactNode; diff --git a/apps/website/components/auth/UserRolesPreview.tsx b/apps/website/components/auth/UserRolesPreview.tsx index 510b31434..2db3cc299 100644 --- a/apps/website/components/auth/UserRolesPreview.tsx +++ b/apps/website/components/auth/UserRolesPreview.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { motion } from 'framer-motion'; -import { Car, Trophy, Users } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { motion } from 'framer-motion'; +import { Car, Trophy, Users } from 'lucide-react'; const USER_ROLES = [ { diff --git a/apps/website/components/dashboard/ActivityFeedPanel.tsx b/apps/website/components/dashboard/ActivityFeedPanel.tsx index 2c22d3ac3..13b420054 100644 --- a/apps/website/components/dashboard/ActivityFeedPanel.tsx +++ b/apps/website/components/dashboard/ActivityFeedPanel.tsx @@ -1,6 +1,5 @@ -import React from 'react'; import { Panel } from '@/ui/Panel'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { ActivityFeed } from '../feed/ActivityFeed'; interface FeedItem { diff --git a/apps/website/components/dashboard/DashboardControlBar.tsx b/apps/website/components/dashboard/DashboardControlBar.tsx index 449b7ffc6..1e3519174 100644 --- a/apps/website/components/dashboard/DashboardControlBar.tsx +++ b/apps/website/components/dashboard/DashboardControlBar.tsx @@ -1,6 +1,6 @@ -import React from 'react'; import { Heading } from '@/ui/Heading'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import React from 'react'; interface DashboardControlBarProps { title: string; diff --git a/apps/website/components/dashboard/DashboardKpiRow.tsx b/apps/website/components/dashboard/DashboardKpiRow.tsx index 6678ffa84..620974e32 100644 --- a/apps/website/components/dashboard/DashboardKpiRow.tsx +++ b/apps/website/components/dashboard/DashboardKpiRow.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Text } from '@/ui/Text'; import { Grid } from '@/ui/Grid'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; interface KpiItem { label: string; diff --git a/apps/website/components/dashboard/DashboardRail.tsx b/apps/website/components/dashboard/DashboardRail.tsx index 422b89485..313fed7fa 100644 --- a/apps/website/components/dashboard/DashboardRail.tsx +++ b/apps/website/components/dashboard/DashboardRail.tsx @@ -1,5 +1,5 @@ +import { Stack } from '@/ui/primitives/Stack'; import React from 'react'; -import { Stack } from '@/ui/Stack'; interface DashboardRailProps { children: React.ReactNode; diff --git a/apps/website/components/dashboard/DashboardShell.tsx b/apps/website/components/dashboard/DashboardShell.tsx index 8d9b9a3ba..35d618b12 100644 --- a/apps/website/components/dashboard/DashboardShell.tsx +++ b/apps/website/components/dashboard/DashboardShell.tsx @@ -1,5 +1,5 @@ +import { Stack } from '@/ui/primitives/Stack'; import React from 'react'; -import { Stack } from '@/ui/Stack'; interface DashboardShellProps { children: React.ReactNode; diff --git a/apps/website/components/dashboard/TelemetryPanel.tsx b/apps/website/components/dashboard/TelemetryPanel.tsx index b436ff351..6f657a0ec 100644 --- a/apps/website/components/dashboard/TelemetryPanel.tsx +++ b/apps/website/components/dashboard/TelemetryPanel.tsx @@ -1,6 +1,6 @@ -import React from 'react'; import { Panel } from '@/ui/Panel'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import React from 'react'; interface TelemetryPanelProps { title: string; diff --git a/apps/website/components/dev/DebugModeToggle.tsx b/apps/website/components/dev/DebugModeToggle.tsx index a9f14fecd..5d8b680fe 100644 --- a/apps/website/components/dev/DebugModeToggle.tsx +++ b/apps/website/components/dev/DebugModeToggle.tsx @@ -2,13 +2,13 @@ import type { ApiRequestLogger } from '@/lib/infrastructure/ApiRequestLogger'; import { getGlobalApiLogger } from '@/lib/infrastructure/ApiRequestLogger'; 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 { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; -import { Grid } from '@/ui/Grid'; +import { Bug, Shield, X } from 'lucide-react'; +import { useCallback, useEffect, useState } from 'react'; // Extend Window interface for debug globals declare global { diff --git a/apps/website/components/dev/DevToolbar.tsx b/apps/website/components/dev/DevToolbar.tsx index f2ba4be98..3fdefac9c 100644 --- a/apps/website/components/dev/DevToolbar.tsx +++ b/apps/website/components/dev/DevToolbar.tsx @@ -1,26 +1,26 @@ 'use client'; -import React, { useEffect, useState } from 'react'; -import { Wrench, ChevronDown, ChevronUp, X, MessageSquare, Activity, AlertTriangle } from 'lucide-react'; +import { useNotifications } from '@/components/notifications/NotificationProvider'; +import type { NotificationVariant } from '@/components/notifications/notificationTypes'; +import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; import { ApiConnectionMonitor } from '@/lib/api/base/ApiConnectionMonitor'; import { CircuitBreakerRegistry } from '@/lib/api/base/RetryHandler'; import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler'; -import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; -import { useNotifications } from '@/components/notifications/NotificationProvider'; -import type { NotificationVariant } from '@/components/notifications/notificationTypes'; +import { Activity, AlertTriangle, ChevronDown, ChevronUp, MessageSquare, Wrench, X } from 'lucide-react'; +import { useEffect, useState } from 'react'; // Import our new components import { Accordion } from '@/ui/Accordion'; -import { NotificationTypeSection } from './sections/NotificationTypeSection'; -import { UrgencySection } from './sections/UrgencySection'; -import { NotificationSendSection } from './sections/NotificationSendSection'; -import { APIStatusSection } from './sections/APIStatusSection'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { Icon } from '@/ui/Icon'; -import { IconButton } from '@/ui/IconButton'; import { Badge } from '@/ui/Badge'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { IconButton } from '@/ui/IconButton'; +import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/primitives/Stack'; +import { APIStatusSection } from './sections/APIStatusSection'; +import { NotificationSendSection } from './sections/NotificationSendSection'; +import { NotificationTypeSection } from './sections/NotificationTypeSection'; +import { UrgencySection } from './sections/UrgencySection'; // Import types import type { DemoNotificationType, DemoUrgency } from './types'; diff --git a/apps/website/components/dev/sections/APIStatusSection.tsx b/apps/website/components/dev/sections/APIStatusSection.tsx index 1465b1095..3cb52864f 100644 --- a/apps/website/components/dev/sections/APIStatusSection.tsx +++ b/apps/website/components/dev/sections/APIStatusSection.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Activity, Wifi, RefreshCw, Terminal } from 'lucide-react'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { Icon } from '@/ui/Icon'; import { Button } from '@/ui/Button'; -import { Grid } from '@/ui/Grid'; -import { StatusIndicator, StatRow, Badge } from '@/ui/StatusIndicator'; +import { Icon } from '@/ui/Icon'; +import { Badge, StatRow, StatusIndicator } from '@/ui/StatusIndicator'; +import { Text } from '@/ui/Text'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Activity, RefreshCw, Terminal, Wifi } from 'lucide-react'; interface APIStatusSectionProps { apiStatus: string; diff --git a/apps/website/components/dev/sections/NotificationSendSection.tsx b/apps/website/components/dev/sections/NotificationSendSection.tsx index fe3f0697e..ca1168c95 100644 --- a/apps/website/components/dev/sections/NotificationSendSection.tsx +++ b/apps/website/components/dev/sections/NotificationSendSection.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; +import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { Bell, Loader2 } from 'lucide-react'; import type { DemoNotificationType, DemoUrgency } from '../types'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; interface NotificationSendSectionProps { selectedType: DemoNotificationType; diff --git a/apps/website/components/dev/sections/NotificationTypeSection.tsx b/apps/website/components/dev/sections/NotificationTypeSection.tsx index 11ddb15d1..145c13196 100644 --- a/apps/website/components/dev/sections/NotificationTypeSection.tsx +++ b/apps/website/components/dev/sections/NotificationTypeSection.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { MessageSquare, AlertTriangle, Shield, Vote, TrendingUp, Award, LucideIcon } from 'lucide-react'; -import type { DemoNotificationType } from '../types'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; -import { Grid } from '@/ui/Grid'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertTriangle, Award, LucideIcon, MessageSquare, Shield, TrendingUp, Vote } from 'lucide-react'; +import type { DemoNotificationType } from '../types'; interface NotificationOption { type: DemoNotificationType; diff --git a/apps/website/components/dev/sections/ReplaySection.tsx b/apps/website/components/dev/sections/ReplaySection.tsx index feb24c089..a33f592e9 100644 --- a/apps/website/components/dev/sections/ReplaySection.tsx +++ b/apps/website/components/dev/sections/ReplaySection.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { useState, useEffect } from 'react'; -import { Play, Copy, Trash2, Download, Clock } from 'lucide-react'; import { getGlobalReplaySystem } from '@/lib/infrastructure/ErrorReplay'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; import { IconButton } from '@/ui/IconButton'; -import { Button } from '@/ui/Button'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Box, Clock, Copy, Download, Play, Trash2 } from 'lucide-react'; +import { useEffect, useState } from 'react'; interface ReplayEntry { id: string; diff --git a/apps/website/components/dev/sections/UrgencySection.tsx b/apps/website/components/dev/sections/UrgencySection.tsx index ba1d90b13..c6f85a4ff 100644 --- a/apps/website/components/dev/sections/UrgencySection.tsx +++ b/apps/website/components/dev/sections/UrgencySection.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Bell, BellRing, AlertCircle, LucideIcon } from 'lucide-react'; -import type { DemoUrgency } from '../types'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; -import { Grid } from '@/ui/Grid'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertCircle, Bell, BellRing, LucideIcon } from 'lucide-react'; +import type { DemoUrgency } from '../types'; interface UrgencyOption { urgency: DemoUrgency; diff --git a/apps/website/components/drivers/ActiveDriverCard.tsx b/apps/website/components/drivers/ActiveDriverCard.tsx index ac0c9e562..a2c724ff6 100644 --- a/apps/website/components/drivers/ActiveDriverCard.tsx +++ b/apps/website/components/drivers/ActiveDriverCard.tsx @@ -1,18 +1,7 @@ -import React from 'react'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; -import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -interface ActiveDriverCardProps { - name: string; - avatarUrl?: string; - categoryLabel?: string; - categoryColor?: string; - skillLevelLabel?: string; - skillLevelColor?: string; - onClick: () => void; -} export function ActiveDriverCard({ name, diff --git a/apps/website/components/drivers/CareerStats.tsx b/apps/website/components/drivers/CareerStats.tsx index 2ddb440e8..02b4ebc3f 100644 --- a/apps/website/components/drivers/CareerStats.tsx +++ b/apps/website/components/drivers/CareerStats.tsx @@ -1,10 +1,10 @@ -import { Box } from '@/ui/Box'; import { Card } from '@/ui/Card'; -import { Grid } from '@/ui/Grid'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; import { StatGridItem } from '@/ui/StatGridItem'; import { TrendingUp } from 'lucide-react'; diff --git a/apps/website/components/drivers/CreateDriverForm.tsx b/apps/website/components/drivers/CreateDriverForm.tsx index 74c364589..460287575 100644 --- a/apps/website/components/drivers/CreateDriverForm.tsx +++ b/apps/website/components/drivers/CreateDriverForm.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { useState, FormEvent } from 'react'; -import { Input } from '@/ui/Input'; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; +import { InfoBox } from '@/ui/InfoBox'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { TextArea } from '@/ui/TextArea'; -import { InfoBox } from '@/ui/InfoBox'; import { AlertCircle } from 'lucide-react'; +import React, { FormEvent, useState } from 'react'; interface FormErrors { name?: string; diff --git a/apps/website/components/drivers/DriverCard.tsx b/apps/website/components/drivers/DriverCard.tsx index 74570f40c..05c2a3a9c 100644 --- a/apps/website/components/drivers/DriverCard.tsx +++ b/apps/website/components/drivers/DriverCard.tsx @@ -1,11 +1,10 @@ -import React from 'react'; -import { Card } from '@/ui/Card'; -import { RankBadge } from '@/components/leaderboards/RankBadge'; import { DriverIdentity } from '@/components/drivers/DriverIdentity'; -import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; -import { Stack } from '@/ui/Stack'; import { DriverStats } from '@/components/drivers/DriverStats'; +import { RankBadge } from '@/components/leaderboards/RankBadge'; import { routes } from '@/lib/routing/RouteConfig'; +import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; +import { Card } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; export interface DriverCardProps { id: string; diff --git a/apps/website/components/drivers/DriverEntryRow.tsx b/apps/website/components/drivers/DriverEntryRow.tsx index d053ebd3f..71036edbc 100644 --- a/apps/website/components/drivers/DriverEntryRow.tsx +++ b/apps/website/components/drivers/DriverEntryRow.tsx @@ -1,12 +1,12 @@ import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; -import { Zap } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { Zap } from 'lucide-react'; interface DriverEntryRowProps { index: number; diff --git a/apps/website/components/drivers/DriverHeaderPanel.tsx b/apps/website/components/drivers/DriverHeaderPanel.tsx index 835fc3f8c..35d5eaaa7 100644 --- a/apps/website/components/drivers/DriverHeaderPanel.tsx +++ b/apps/website/components/drivers/DriverHeaderPanel.tsx @@ -1,8 +1,8 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Image } from '@/ui/Image'; import { RatingBadge } from '@/components/drivers/RatingBadge'; +import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import React from 'react'; interface DriverHeaderPanelProps { name: string; diff --git a/apps/website/components/drivers/DriverIdentity.tsx b/apps/website/components/drivers/DriverIdentity.tsx index ddc47e1cb..f28b59b72 100644 --- a/apps/website/components/drivers/DriverIdentity.tsx +++ b/apps/website/components/drivers/DriverIdentity.tsx @@ -1,9 +1,9 @@ -import { Link } from '@/ui/Link'; -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'; +import { Link } from '@/ui/Link'; +import { PlaceholderImage } from '@/ui/PlaceholderImage'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; export interface DriverIdentityProps { driver: { diff --git a/apps/website/components/drivers/DriverPerformanceOverview.tsx b/apps/website/components/drivers/DriverPerformanceOverview.tsx index 464ba6bcd..8568267ec 100644 --- a/apps/website/components/drivers/DriverPerformanceOverview.tsx +++ b/apps/website/components/drivers/DriverPerformanceOverview.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; import { Heading } from '@/ui/Heading'; import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; interface DriverPerformanceOverviewProps { stats: { diff --git a/apps/website/components/drivers/DriverProfile.tsx b/apps/website/components/drivers/DriverProfile.tsx index 9dafaf373..bb470dc60 100644 --- a/apps/website/components/drivers/DriverProfile.tsx +++ b/apps/website/components/drivers/DriverProfile.tsx @@ -1,17 +1,17 @@ 'use client'; -import type { DriverViewModel } from '@/lib/view-models/DriverViewModel'; -import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { StatCard } from '@/ui/StatCard'; -import { ProfileHeader } from '@/components/drivers/ProfileHeader'; -import { ProfileStats } from './ProfileStats'; import { CareerHighlights } from '@/components/drivers/CareerHighlights'; import { DriverRankings } from '@/components/drivers/DriverRankings'; import { PerformanceMetrics } from '@/components/drivers/PerformanceMetrics'; +import { ProfileHeader } from '@/components/drivers/ProfileHeader'; import { useDriverProfile } from "@/hooks/driver/useDriverProfile"; +import type { DriverViewModel } from '@/lib/view-models/DriverViewModel'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { StatCard } from '@/ui/StatCard'; +import { Text } from '@/ui/Text'; +import { ProfileStats } from './ProfileStats'; interface DriverProfileProps { driver: DriverViewModel; diff --git a/apps/website/components/drivers/DriverProfileHeader.tsx b/apps/website/components/drivers/DriverProfileHeader.tsx index b534fdece..f9a35b1e9 100644 --- a/apps/website/components/drivers/DriverProfileHeader.tsx +++ b/apps/website/components/drivers/DriverProfileHeader.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Globe, Trophy, UserPlus, Check } from 'lucide-react'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Button } from '@/ui/Button'; import { RatingBadge } from '@/components/drivers/RatingBadge'; -import { Stack } from '@/ui/Stack'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Check, Globe, Trophy, UserPlus } from 'lucide-react'; import { SafetyRatingBadge } from './SafetyRatingBadge'; interface DriverProfileHeaderProps { diff --git a/apps/website/components/drivers/DriverProfileTabs.tsx b/apps/website/components/drivers/DriverProfileTabs.tsx index 74d55a81f..27369bf2d 100644 --- a/apps/website/components/drivers/DriverProfileTabs.tsx +++ b/apps/website/components/drivers/DriverProfileTabs.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; -import { LayoutDashboard, BarChart3, ShieldCheck } from 'lucide-react'; import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { BarChart3, LayoutDashboard, ShieldCheck } from 'lucide-react'; export type ProfileTab = 'overview' | 'stats' | 'ratings'; diff --git a/apps/website/components/drivers/DriverRacingProfile.tsx b/apps/website/components/drivers/DriverRacingProfile.tsx index b29124eeb..2d8cdab16 100644 --- a/apps/website/components/drivers/DriverRacingProfile.tsx +++ b/apps/website/components/drivers/DriverRacingProfile.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; import { Heading } from '@/ui/Heading'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { MapPin, Car, Clock, Users2, MailCheck } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { Car, Clock, MailCheck, MapPin, Users2 } from 'lucide-react'; interface DriverRacingProfileProps { racingStyle?: string | null; diff --git a/apps/website/components/drivers/DriverRatingPill.tsx b/apps/website/components/drivers/DriverRatingPill.tsx index f9f080143..9bc622cce 100644 --- a/apps/website/components/drivers/DriverRatingPill.tsx +++ b/apps/website/components/drivers/DriverRatingPill.tsx @@ -1,7 +1,7 @@ -import { Box } from '@/ui/Box'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; import { Star, Trophy } from 'lucide-react'; diff --git a/apps/website/components/drivers/DriverSearchBar.tsx b/apps/website/components/drivers/DriverSearchBar.tsx index e69fe85ef..e0c2c9ccb 100644 --- a/apps/website/components/drivers/DriverSearchBar.tsx +++ b/apps/website/components/drivers/DriverSearchBar.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; -import { Search } from 'lucide-react'; -import { Box } from '@/ui/Box'; import { Input } from '@/ui/Input'; +import { Box } from '@/ui/primitives/Box'; +import { Search } from 'lucide-react'; interface DriverSearchBarProps { query: string; diff --git a/apps/website/components/drivers/DriverStats.tsx b/apps/website/components/drivers/DriverStats.tsx index 22cea7115..f621314a5 100644 --- a/apps/website/components/drivers/DriverStats.tsx +++ b/apps/website/components/drivers/DriverStats.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface DriverStatsProps { diff --git a/apps/website/components/drivers/DriverStatsPanel.tsx b/apps/website/components/drivers/DriverStatsPanel.tsx index 64c4be1f1..6bb69046d 100644 --- a/apps/website/components/drivers/DriverStatsPanel.tsx +++ b/apps/website/components/drivers/DriverStatsPanel.tsx @@ -1,8 +1,7 @@ 'use client'; -import React from 'react'; import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; interface StatItem { label: string; diff --git a/apps/website/components/drivers/DriverSummaryPill.tsx b/apps/website/components/drivers/DriverSummaryPill.tsx index f1790e25d..b74e865f2 100644 --- a/apps/website/components/drivers/DriverSummaryPill.tsx +++ b/apps/website/components/drivers/DriverSummaryPill.tsx @@ -1,11 +1,11 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; import { Image } from '@/ui/Image'; import { Link } from '@/ui/Link'; import { PlaceholderImage } from '@/ui/PlaceholderImage'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import React from 'react'; interface DriverSummaryPillProps { name: string; diff --git a/apps/website/components/drivers/DriverTable.tsx b/apps/website/components/drivers/DriverTable.tsx index 8b25bad8d..b3881cae4 100644 --- a/apps/website/components/drivers/DriverTable.tsx +++ b/apps/website/components/drivers/DriverTable.tsx @@ -1,10 +1,10 @@ 'use client'; -import React from 'react'; -import { TrendingUp } from 'lucide-react'; import { Heading } from '@/ui/Heading'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { TrendingUp } from 'lucide-react'; +import React from 'react'; interface DriverTableProps { children: React.ReactNode; diff --git a/apps/website/components/drivers/DriverTableRow.tsx b/apps/website/components/drivers/DriverTableRow.tsx index 10959ac2c..c394ef3aa 100644 --- a/apps/website/components/drivers/DriverTableRow.tsx +++ b/apps/website/components/drivers/DriverTableRow.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; import { RatingBadge } from '@/components/drivers/RatingBadge'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; import { Image } from '@/ui/Image'; +import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/primitives/Stack'; interface DriverTableRowProps { rank: number; diff --git a/apps/website/components/drivers/DriversDirectoryHeader.tsx b/apps/website/components/drivers/DriversDirectoryHeader.tsx index 4606f1d3a..48f2452fb 100644 --- a/apps/website/components/drivers/DriversDirectoryHeader.tsx +++ b/apps/website/components/drivers/DriversDirectoryHeader.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Users, Trophy } from 'lucide-react'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Trophy, Users } from 'lucide-react'; interface DriverStat { label: string; diff --git a/apps/website/components/drivers/DriversSearch.tsx b/apps/website/components/drivers/DriversSearch.tsx index e25f51032..7fc1a2fd3 100644 --- a/apps/website/components/drivers/DriversSearch.tsx +++ b/apps/website/components/drivers/DriversSearch.tsx @@ -1,8 +1,8 @@ -import { Box } from '@/ui/Box'; import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; +import { Box } from '@/ui/primitives/Box'; import { Search } from 'lucide-react'; interface DriversSearchProps { diff --git a/apps/website/components/drivers/FeaturedDriverCard.tsx b/apps/website/components/drivers/FeaturedDriverCard.tsx index 154c476f1..01af63361 100644 --- a/apps/website/components/drivers/FeaturedDriverCard.tsx +++ b/apps/website/components/drivers/FeaturedDriverCard.tsx @@ -1,13 +1,13 @@ +import { MedalBadge } from '@/components/leaderboards/MedalBadge'; import { mediaConfig } from '@/lib/config/mediaConfig'; import { Badge } from '@/ui/Badge'; -import { Box } from '@/ui/Box'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; -import { MedalBadge } from '@/components/leaderboards/MedalBadge'; import { MiniStat } from '@/ui/MiniStat'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; import { Flag, Shield, Star, TrendingUp } from 'lucide-react'; diff --git a/apps/website/components/drivers/LiveryCard.tsx b/apps/website/components/drivers/LiveryCard.tsx index c2d8e2b92..56ec86ad5 100644 --- a/apps/website/components/drivers/LiveryCard.tsx +++ b/apps/website/components/drivers/LiveryCard.tsx @@ -1,11 +1,11 @@ -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Car, Download, Trash2, Edit } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; import { Badge } from '@/ui/Badge'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Car, Download, Edit, Trash2 } from 'lucide-react'; interface DriverLiveryItem { id: string; diff --git a/apps/website/components/drivers/PerformanceMetrics.tsx b/apps/website/components/drivers/PerformanceMetrics.tsx index 979ad03bd..56f87bd44 100644 --- a/apps/website/components/drivers/PerformanceMetrics.tsx +++ b/apps/website/components/drivers/PerformanceMetrics.tsx @@ -1,7 +1,7 @@ -import { Box } from '@/ui/Box'; import { Card } from '@/ui/Card'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface PerformanceMetricsProps { diff --git a/apps/website/components/drivers/PerformanceOverview.tsx b/apps/website/components/drivers/PerformanceOverview.tsx index 2a78b3894..b89e65dbf 100644 --- a/apps/website/components/drivers/PerformanceOverview.tsx +++ b/apps/website/components/drivers/PerformanceOverview.tsx @@ -1,13 +1,13 @@ -import { Stack } from '@/ui/Stack'; import { Card } from '@/ui/Card'; import { CircularProgress } from '@/ui/CircularProgress'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; import { Heading } from '@/ui/Heading'; import { HorizontalBarChart } from '@/ui/HorizontalBarChart'; import { Icon } from '@/ui/Icon'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Activity, BarChart3, Target, TrendingUp } from 'lucide-react'; diff --git a/apps/website/components/drivers/ProfileHeader.tsx b/apps/website/components/drivers/ProfileHeader.tsx index 961329472..d11202621 100644 --- a/apps/website/components/drivers/ProfileHeader.tsx +++ b/apps/website/components/drivers/ProfileHeader.tsx @@ -1,14 +1,14 @@ +import { DriverRatingPill } from '@/components/drivers/DriverRatingPill'; import type { DriverViewModel } from '@/lib/view-models/DriverViewModel'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { CountryFlag } from '@/ui/CountryFlag'; -import { DriverRatingPill } from '@/components/drivers/DriverRatingPill'; import { Heading } from '@/ui/Heading'; import { Image } from '@/ui/Image'; import { PlaceholderImage } from '@/ui/PlaceholderImage'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface ProfileHeaderProps { diff --git a/apps/website/components/drivers/ProfileHero.tsx b/apps/website/components/drivers/ProfileHero.tsx index 12e12195a..b87489112 100644 --- a/apps/website/components/drivers/ProfileHero.tsx +++ b/apps/website/components/drivers/ProfileHero.tsx @@ -2,12 +2,12 @@ import { mediaConfig } from '@/lib/config/mediaConfig'; import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Image } from '@/ui/Image'; import { Link } from '@/ui/Link'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; import { Calendar, Clock, ExternalLink, Globe, Star, Trophy, UserPlus } from 'lucide-react'; diff --git a/apps/website/components/drivers/ProfileRaceHistory.tsx b/apps/website/components/drivers/ProfileRaceHistory.tsx index 0dc87ff59..c0fe2dbf4 100644 --- a/apps/website/components/drivers/ProfileRaceHistory.tsx +++ b/apps/website/components/drivers/ProfileRaceHistory.tsx @@ -1,14 +1,14 @@ 'use client'; -import { useState, useEffect } from 'react'; -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; import { EmptyState } from '@/components/shared/state/EmptyState'; +import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; import { Pagination } from '@/ui/Pagination'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { Trophy } from 'lucide-react'; +import { useEffect, useState } from 'react'; interface RaceHistoryProps { driverId: string; diff --git a/apps/website/components/drivers/ProfileSettings.tsx b/apps/website/components/drivers/ProfileSettings.tsx index daa024e66..a9f39b232 100644 --- a/apps/website/components/drivers/ProfileSettings.tsx +++ b/apps/website/components/drivers/ProfileSettings.tsx @@ -1,16 +1,16 @@ 'use client'; -import { useState } from 'react'; import type { DriverProfileDriverSummaryViewModel } from '@/lib/view-models/DriverProfileViewModel'; -import { Card } from '@/ui/Card'; import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Select } from '@/ui/Select'; -import { Toggle } from '@/ui/Toggle'; -import { TextArea } from '@/ui/TextArea'; +import { Card } from '@/ui/Card'; import { Checkbox } from '@/ui/Checkbox'; +import { Heading } from '@/ui/Heading'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Select } from '@/ui/Select'; +import { TextArea } from '@/ui/TextArea'; +import { Toggle } from '@/ui/Toggle'; +import { useState } from 'react'; interface ProfileSettingsProps { driver: DriverProfileDriverSummaryViewModel; diff --git a/apps/website/components/drivers/ProfileStats.tsx b/apps/website/components/drivers/ProfileStats.tsx index 4a240b643..2ebdfbee0 100644 --- a/apps/website/components/drivers/ProfileStats.tsx +++ b/apps/website/components/drivers/ProfileStats.tsx @@ -1,13 +1,13 @@ 'use client'; -import { useDriverProfile } from "@/hooks/driver/useDriverProfile"; -import { useMemo } from 'react'; -import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { StatCard } from '@/ui/StatCard'; import { RankBadge } from '@/components/leaderboards/RankBadge'; +import { useDriverProfile } from "@/hooks/driver/useDriverProfile"; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { StatCard } from '@/ui/StatCard'; +import { Text } from '@/ui/Text'; +import { useMemo } from 'react'; interface ProfileStatsProps { driverId?: string; diff --git a/apps/website/components/drivers/RacingProfile.tsx b/apps/website/components/drivers/RacingProfile.tsx index 481f1f7eb..1e06d97d1 100644 --- a/apps/website/components/drivers/RacingProfile.tsx +++ b/apps/website/components/drivers/RacingProfile.tsx @@ -1,9 +1,9 @@ -import { Stack } from '@/ui/Stack'; -import { Card , Card as Surface } from '@/ui/Card'; +import { Card, Card as Surface } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Flag, UserPlus, Users } from 'lucide-react'; diff --git a/apps/website/components/drivers/RatingBreakdown.tsx b/apps/website/components/drivers/RatingBreakdown.tsx index 9433bc1e4..031269ec4 100644 --- a/apps/website/components/drivers/RatingBreakdown.tsx +++ b/apps/website/components/drivers/RatingBreakdown.tsx @@ -1,10 +1,10 @@ -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; -import { Heading } from '@/ui/Heading'; import { RatingComponent } from '@/components/drivers/RatingComponent'; import { RatingHistoryItem } from '@/components/drivers/RatingHistoryItem'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface RatingBreakdownProps { diff --git a/apps/website/components/drivers/RatingComponent.tsx b/apps/website/components/drivers/RatingComponent.tsx index aab598f99..0376b7ea5 100644 --- a/apps/website/components/drivers/RatingComponent.tsx +++ b/apps/website/components/drivers/RatingComponent.tsx @@ -1,6 +1,6 @@ -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { ProgressBar } from '@/ui/ProgressBar'; import { Text } from '@/ui/Text'; diff --git a/apps/website/components/drivers/RatingHistoryItem.tsx b/apps/website/components/drivers/RatingHistoryItem.tsx index 8a587e217..9493dec7a 100644 --- a/apps/website/components/drivers/RatingHistoryItem.tsx +++ b/apps/website/components/drivers/RatingHistoryItem.tsx @@ -1,6 +1,6 @@ -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface RatingHistoryItemProps { diff --git a/apps/website/components/drivers/SafetyRatingBadge.tsx b/apps/website/components/drivers/SafetyRatingBadge.tsx index 784dc418a..c22e44d69 100644 --- a/apps/website/components/drivers/SafetyRatingBadge.tsx +++ b/apps/website/components/drivers/SafetyRatingBadge.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; -import { Shield } from 'lucide-react'; import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { Shield } from 'lucide-react'; interface SafetyRatingBadgeProps { rating: number; diff --git a/apps/website/components/drivers/SkillDistribution.tsx b/apps/website/components/drivers/SkillDistribution.tsx index 2d6b87a64..9604d2963 100644 --- a/apps/website/components/drivers/SkillDistribution.tsx +++ b/apps/website/components/drivers/SkillDistribution.tsx @@ -1,8 +1,8 @@ -import { Box } from '@/ui/Box'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; import { BarChart3 } from 'lucide-react'; diff --git a/apps/website/components/drivers/SkillLevelButton.tsx b/apps/website/components/drivers/SkillLevelButton.tsx index 454e1f615..e44ba41d8 100644 --- a/apps/website/components/drivers/SkillLevelButton.tsx +++ b/apps/website/components/drivers/SkillLevelButton.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { LucideIcon } from 'lucide-react'; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { LucideIcon } from 'lucide-react'; interface SkillLevelButtonProps { label: string; diff --git a/apps/website/components/drivers/SkillLevelHeader.tsx b/apps/website/components/drivers/SkillLevelHeader.tsx index a9e004126..c130523cd 100644 --- a/apps/website/components/drivers/SkillLevelHeader.tsx +++ b/apps/website/components/drivers/SkillLevelHeader.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { LucideIcon, ChevronRight, UserPlus } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { Badge } from '@/ui/Badge'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Badge } from '@/ui/Badge'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ChevronRight, LucideIcon, UserPlus } from 'lucide-react'; interface SkillLevelHeaderProps { label: string; diff --git a/apps/website/components/errors/AppErrorBoundaryView.tsx b/apps/website/components/errors/AppErrorBoundaryView.tsx index 88bcd27cb..9878b8e4b 100644 --- a/apps/website/components/errors/AppErrorBoundaryView.tsx +++ b/apps/website/components/errors/AppErrorBoundaryView.tsx @@ -1,11 +1,11 @@ 'use client'; -import React from 'react'; -import { AlertTriangle } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Icon } from '@/ui/Icon'; import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { AlertTriangle } from 'lucide-react'; +import React from 'react'; interface AppErrorBoundaryViewProps { title: string; diff --git a/apps/website/components/errors/DevErrorPanel.tsx b/apps/website/components/errors/DevErrorPanel.tsx index 640399f8e..3edd109c6 100644 --- a/apps/website/components/errors/DevErrorPanel.tsx +++ b/apps/website/components/errors/DevErrorPanel.tsx @@ -1,18 +1,18 @@ 'use client'; -import React, { useState, useEffect } from 'react'; -import { X, RefreshCw, Copy, Terminal, Activity, AlertTriangle } from 'lucide-react'; -import { ApiError } from '@/lib/api/base/ApiError'; import { connectionMonitor } from '@/lib/api/base/ApiConnectionMonitor'; +import { ApiError } from '@/lib/api/base/ApiError'; import { CircuitBreakerRegistry } from '@/lib/api/base/RetryHandler'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; import { Badge } from '@/ui/Badge'; import { Button } from '@/ui/Button'; -import { Heading } from '@/ui/Heading'; import { Card } from '@/ui/Card'; -import { Grid } from '@/ui/Grid'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Activity, AlertTriangle, Copy, RefreshCw, Terminal, X } from 'lucide-react'; +import { useEffect, useState } from 'react'; interface DevErrorPanelProps { error: ApiError; diff --git a/apps/website/components/errors/EnhancedFormError.tsx b/apps/website/components/errors/EnhancedFormError.tsx index 2bec026cb..dd6a9c6e5 100644 --- a/apps/website/components/errors/EnhancedFormError.tsx +++ b/apps/website/components/errors/EnhancedFormError.tsx @@ -1,25 +1,25 @@ 'use client'; -import React, { useState } from 'react'; -import { motion, AnimatePresence } from 'framer-motion'; -import { - AlertCircle, - AlertTriangle, - Wifi, - RefreshCw, - ChevronDown, - ChevronUp, - Bug, - Info, - X -} from 'lucide-react'; -import { parseApiError, getErrorSeverity, isRetryable, isConnectivityError } from '@/lib/utils/errorUtils'; import { ApiError } from '@/lib/api/base/ApiError'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { getErrorSeverity, isConnectivityError, isRetryable, parseApiError } from '@/lib/utils/errorUtils'; +import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; import { IconButton } from '@/ui/IconButton'; -import { Button } from '@/ui/Button'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AnimatePresence, motion } from 'framer-motion'; +import { + AlertCircle, + AlertTriangle, + Bug, + ChevronDown, + ChevronUp, + Info, + RefreshCw, + Wifi, + X +} from 'lucide-react'; +import { useState } from 'react'; interface EnhancedFormErrorProps { error: unknown; diff --git a/apps/website/components/errors/ErrorAnalyticsDashboard.tsx b/apps/website/components/errors/ErrorAnalyticsDashboard.tsx index e35a97af7..a3e88b1bd 100644 --- a/apps/website/components/errors/ErrorAnalyticsDashboard.tsx +++ b/apps/website/components/errors/ErrorAnalyticsDashboard.tsx @@ -1,33 +1,33 @@ 'use client'; -import React, { useState, useEffect } from 'react'; -import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler'; import { getGlobalApiLogger } from '@/lib/infrastructure/ApiRequestLogger'; +import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler'; import { getErrorAnalyticsStats, type ErrorStats } from '@/lib/services/error/ErrorAnalyticsService'; -import { - Activity, - AlertTriangle, - Clock, - Copy, - RefreshCw, - Bug, - Globe, - Cpu, - FileText, - Trash2, - Download, - Search, - ChevronDown, - Zap, - Terminal -} from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { IconButton } from '@/ui/IconButton'; import { Badge } from '@/ui/Badge'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { IconButton } from '@/ui/IconButton'; import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + Activity, + AlertTriangle, + Bug, + ChevronDown, + Clock, + Copy, + Cpu, + Download, + FileText, + Globe, + RefreshCw, + Search, + Terminal, + Trash2, + Zap +} from 'lucide-react'; +import { useEffect, useState } from 'react'; interface ErrorAnalyticsDashboardProps { /** diff --git a/apps/website/components/errors/ErrorDetails.tsx b/apps/website/components/errors/ErrorDetails.tsx index eb007b11d..8443718bf 100644 --- a/apps/website/components/errors/ErrorDetails.tsx +++ b/apps/website/components/errors/ErrorDetails.tsx @@ -1,12 +1,12 @@ 'use client'; -import React, { useState } from 'react'; -import { ChevronDown, ChevronUp, Copy, Terminal } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; import { Card } from '@/ui/Card'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ChevronDown, ChevronUp, Copy, Terminal } from 'lucide-react'; +import { useState } from 'react'; interface ErrorDetailsProps { error: Error & { digest?: string }; diff --git a/apps/website/components/errors/ErrorDetailsBlock.tsx b/apps/website/components/errors/ErrorDetailsBlock.tsx index 1c0f02d20..93b751086 100644 --- a/apps/website/components/errors/ErrorDetailsBlock.tsx +++ b/apps/website/components/errors/ErrorDetailsBlock.tsx @@ -1,12 +1,12 @@ 'use client'; -import React, { useState } from 'react'; -import { Copy, ChevronDown, ChevronUp } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; import { Card } from '@/ui/Card'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ChevronDown, ChevronUp, Copy } from 'lucide-react'; +import { useState } from 'react'; interface ErrorDetailsBlockProps { error: Error & { digest?: string }; diff --git a/apps/website/components/errors/ErrorRecoveryActions.tsx b/apps/website/components/errors/ErrorRecoveryActions.tsx index 8df6b2568..ec854004a 100644 --- a/apps/website/components/errors/ErrorRecoveryActions.tsx +++ b/apps/website/components/errors/ErrorRecoveryActions.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { RefreshCw, Home } from 'lucide-react'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { Home, RefreshCw } from 'lucide-react'; interface ErrorRecoveryActionsProps { onRetry: () => void; diff --git a/apps/website/components/errors/ErrorScreen.tsx b/apps/website/components/errors/ErrorScreen.tsx index 0ae4c8695..a13257ca9 100644 --- a/apps/website/components/errors/ErrorScreen.tsx +++ b/apps/website/components/errors/ErrorScreen.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; +import { Card } from '@/ui/Card'; import { Glow } from '@/ui/Glow'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { AppErrorBoundaryView } from './AppErrorBoundaryView'; -import { ErrorRecoveryActions } from './ErrorRecoveryActions'; import { ErrorDetailsBlock } from './ErrorDetailsBlock'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; +import { ErrorRecoveryActions } from './ErrorRecoveryActions'; interface ErrorScreenProps { error: Error & { digest?: string }; diff --git a/apps/website/components/errors/GlobalErrorScreen.tsx b/apps/website/components/errors/GlobalErrorScreen.tsx index 1182bb105..f909c3007 100644 --- a/apps/website/components/errors/GlobalErrorScreen.tsx +++ b/apps/website/components/errors/GlobalErrorScreen.tsx @@ -1,14 +1,13 @@ 'use client'; -import React from 'react'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; import { Glow } from '@/ui/Glow'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { AlertTriangle, RefreshCw, Home, Terminal } from 'lucide-react'; -import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertTriangle, Home, RefreshCw, Terminal } from 'lucide-react'; interface GlobalErrorScreenProps { error: Error & { digest?: string }; diff --git a/apps/website/components/errors/NotFoundActions.tsx b/apps/website/components/errors/NotFoundActions.tsx index c26cfd1ab..5963a30ce 100644 --- a/apps/website/components/errors/NotFoundActions.tsx +++ b/apps/website/components/errors/NotFoundActions.tsx @@ -1,8 +1,7 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface NotFoundActionsProps { diff --git a/apps/website/components/errors/NotFoundCallToAction.tsx b/apps/website/components/errors/NotFoundCallToAction.tsx index d1792fbd2..66164e206 100644 --- a/apps/website/components/errors/NotFoundCallToAction.tsx +++ b/apps/website/components/errors/NotFoundCallToAction.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; interface NotFoundCallToActionProps { label: string; diff --git a/apps/website/components/errors/NotFoundDiagnostics.tsx b/apps/website/components/errors/NotFoundDiagnostics.tsx index 8ba828528..a6483ced7 100644 --- a/apps/website/components/errors/NotFoundDiagnostics.tsx +++ b/apps/website/components/errors/NotFoundDiagnostics.tsx @@ -1,7 +1,6 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface NotFoundDiagnosticsProps { diff --git a/apps/website/components/errors/NotFoundHelpLinks.tsx b/apps/website/components/errors/NotFoundHelpLinks.tsx index 14ffa6583..430b0f44c 100644 --- a/apps/website/components/errors/NotFoundHelpLinks.tsx +++ b/apps/website/components/errors/NotFoundHelpLinks.tsx @@ -1,8 +1,8 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import React from 'react'; interface NotFoundHelpLinksProps { links: Array<{ label: string; href: string }>; diff --git a/apps/website/components/errors/NotFoundScreen.tsx b/apps/website/components/errors/NotFoundScreen.tsx index fb8447c98..82cf8a70c 100644 --- a/apps/website/components/errors/NotFoundScreen.tsx +++ b/apps/website/components/errors/NotFoundScreen.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Text } from '@/ui/Text'; -import { Glow } from '@/ui/Glow'; -import { NotFoundActions } from './NotFoundActions'; -import { NotFoundHelpLinks } from './NotFoundHelpLinks'; -import { NotFoundDiagnostics } from './NotFoundDiagnostics'; -import { Stack } from '@/ui/Stack'; import { Card } from '@/ui/Card'; +import { Glow } from '@/ui/Glow'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { NotFoundActions } from './NotFoundActions'; +import { NotFoundDiagnostics } from './NotFoundDiagnostics'; +import { NotFoundHelpLinks } from './NotFoundHelpLinks'; interface NotFoundScreenProps { errorCode: string; diff --git a/apps/website/components/errors/RecoveryActions.tsx b/apps/website/components/errors/RecoveryActions.tsx index b6475df67..0a2a81473 100644 --- a/apps/website/components/errors/RecoveryActions.tsx +++ b/apps/website/components/errors/RecoveryActions.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { RefreshCw, Home, LifeBuoy } from 'lucide-react'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { Home, LifeBuoy, RefreshCw } from 'lucide-react'; interface RecoveryActionsProps { onRetry: () => void; diff --git a/apps/website/components/errors/ServerErrorPanel.tsx b/apps/website/components/errors/ServerErrorPanel.tsx index cfe7b276e..eb22eea17 100644 --- a/apps/website/components/errors/ServerErrorPanel.tsx +++ b/apps/website/components/errors/ServerErrorPanel.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { AlertTriangle } from 'lucide-react'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertTriangle } from 'lucide-react'; interface ServerErrorPanelProps { message?: string; diff --git a/apps/website/components/feed/ActivityFeedItem.tsx b/apps/website/components/feed/ActivityFeedItem.tsx index a64b9acf6..5ebe54d2f 100644 --- a/apps/website/components/feed/ActivityFeedItem.tsx +++ b/apps/website/components/feed/ActivityFeedItem.tsx @@ -1,9 +1,9 @@ -import { ReactNode } from 'react'; -import { Box } from '@/ui/Box'; -import { Surface } from '@/ui/Surface'; +import { Box } from '@/ui/primitives/Box'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; +import { ReactNode } from 'react'; interface ActivityFeedItemProps { icon: ReactNode; diff --git a/apps/website/components/feed/ActivityFeedList.tsx b/apps/website/components/feed/ActivityFeedList.tsx index 7e9b7ca9c..a27e85af7 100644 --- a/apps/website/components/feed/ActivityFeedList.tsx +++ b/apps/website/components/feed/ActivityFeedList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface ActivityFeedListProps { children: ReactNode; diff --git a/apps/website/components/feed/FeedLayout.tsx b/apps/website/components/feed/FeedLayout.tsx index 966e73044..db248df9c 100644 --- a/apps/website/components/feed/FeedLayout.tsx +++ b/apps/website/components/feed/FeedLayout.tsx @@ -1,12 +1,12 @@ -import { Card } from '@/ui/Card'; import { FeedList } from '@/components/feed/FeedList'; -import { UpcomingRacesSidebar } from '@/components/races/UpcomingRacesSidebar'; import { LatestResultsSidebar } from '@/components/races/LatestResultsSidebar'; -import { Section } from '@/ui/Section'; +import { UpcomingRacesSidebar } from '@/components/races/UpcomingRacesSidebar'; +import { Card } from '@/ui/Card'; import { Container } from '@/ui/Container'; -import { Grid } from '@/ui/Grid'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Section } from '@/ui/Section'; import { Text } from '@/ui/Text'; interface FeedItemData { diff --git a/apps/website/components/feed/FeedList.tsx b/apps/website/components/feed/FeedList.tsx index 3bde210c1..97eef3726 100644 --- a/apps/website/components/feed/FeedList.tsx +++ b/apps/website/components/feed/FeedList.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { FeedEmptyState } from '@/ui/FeedEmptyState'; import { FeedItemCard } from '@/components/feed/FeedItemCard'; -import { Stack } from '@/ui/Stack'; +import { FeedEmptyState } from '@/ui/FeedEmptyState'; +import { Stack } from '@/ui/primitives/Stack'; interface FeedItemData { id: string; diff --git a/apps/website/components/feed/RecentActivity.tsx b/apps/website/components/feed/RecentActivity.tsx index 5d4b9cdb1..a73b99823 100644 --- a/apps/website/components/feed/RecentActivity.tsx +++ b/apps/website/components/feed/RecentActivity.tsx @@ -1,10 +1,10 @@ -import { mediaConfig } from '@/lib/config/mediaConfig'; import { ActiveDriverCard } from '@/components/drivers/ActiveDriverCard'; -import { Box } from '@/ui/Box'; +import { mediaConfig } from '@/lib/config/mediaConfig'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; import { Activity } from 'lucide-react'; diff --git a/apps/website/components/home/HomeFeatureDescription.tsx b/apps/website/components/home/HomeFeatureDescription.tsx index 4a70d0736..55b643181 100644 --- a/apps/website/components/home/HomeFeatureDescription.tsx +++ b/apps/website/components/home/HomeFeatureDescription.tsx @@ -1,8 +1,7 @@ 'use client'; -import React from 'react'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; interface HomeFeatureDescriptionProps { lead: string; diff --git a/apps/website/components/home/HomeHeader.tsx b/apps/website/components/home/HomeHeader.tsx index 47c91d3b7..76cbe31ee 100644 --- a/apps/website/components/home/HomeHeader.tsx +++ b/apps/website/components/home/HomeHeader.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; import { Button } from '@/ui/Button'; -import { Glow } from '@/ui/Glow'; import { Container } from '@/ui/Container'; +import { Glow } from '@/ui/Glow'; import { Heading } from '@/ui/Heading'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; interface HomeHeaderProps { title: string; diff --git a/apps/website/components/home/LeagueSummaryPanel.tsx b/apps/website/components/home/LeagueSummaryPanel.tsx index 5b153ee82..26cfeb1e0 100644 --- a/apps/website/components/home/LeagueSummaryPanel.tsx +++ b/apps/website/components/home/LeagueSummaryPanel.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; import { LeagueCard } from '@/components/leagues/LeagueCard'; import { routes } from '@/lib/routing/RouteConfig'; -import { Box } from '@/ui/Box'; import { Heading } from '@/ui/Heading'; import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; interface League { id: string; diff --git a/apps/website/components/home/QuickLinksPanel.tsx b/apps/website/components/home/QuickLinksPanel.tsx index 395993647..e2813f712 100644 --- a/apps/website/components/home/QuickLinksPanel.tsx +++ b/apps/website/components/home/QuickLinksPanel.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; import { routes } from '@/lib/routing/RouteConfig'; -import { Plus, Search, Shield, Users } from 'lucide-react'; +import { Button } from '@/ui/Button'; import { Container } from '@/ui/Container'; +import { Icon } from '@/ui/Icon'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { Plus, Search, Shield, Users } from 'lucide-react'; /** * QuickLinksPanel - Semantic quick actions bar. diff --git a/apps/website/components/home/RecentRacesPanel.tsx b/apps/website/components/home/RecentRacesPanel.tsx index 6929d40d1..6a4f5cdb7 100644 --- a/apps/website/components/home/RecentRacesPanel.tsx +++ b/apps/website/components/home/RecentRacesPanel.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; import { UpcomingRaceItem } from '@/components/races/UpcomingRaceItem'; import { routes } from '@/lib/routing/RouteConfig'; -import { Panel } from '@/ui/Panel'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; import { Link } from '@/ui/Link'; +import { Panel } from '@/ui/Panel'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface Race { diff --git a/apps/website/components/home/TeamSummaryPanel.tsx b/apps/website/components/home/TeamSummaryPanel.tsx index b685a6026..6164bc6c2 100644 --- a/apps/website/components/home/TeamSummaryPanel.tsx +++ b/apps/website/components/home/TeamSummaryPanel.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; import { TeamCard } from '@/components/teams/TeamCard'; import { routes } from '@/lib/routing/RouteConfig'; -import { Box } from '@/ui/Box'; import { Heading } from '@/ui/Heading'; import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; interface Team { id: string; diff --git a/apps/website/components/landing/AlternatingSection.tsx b/apps/website/components/landing/AlternatingSection.tsx index 6a9512ef6..3ff3bb9f1 100644 --- a/apps/website/components/landing/AlternatingSection.tsx +++ b/apps/website/components/landing/AlternatingSection.tsx @@ -1,7 +1,7 @@ import { useParallax } from "@/hooks/useScrollProgress"; -import { Stack } from '@/ui/Stack'; import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { useRef } from 'react'; diff --git a/apps/website/components/landing/BenefitCard.tsx b/apps/website/components/landing/BenefitCard.tsx index ad0dbf82b..451f6e957 100644 --- a/apps/website/components/landing/BenefitCard.tsx +++ b/apps/website/components/landing/BenefitCard.tsx @@ -1,13 +1,13 @@ +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; import { motion, useReducedMotion } from 'framer-motion'; import { LucideIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; -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/components/landing/FAQ.tsx b/apps/website/components/landing/FAQ.tsx index eeffd3cf8..cc82525f7 100644 --- a/apps/website/components/landing/FAQ.tsx +++ b/apps/website/components/landing/FAQ.tsx @@ -1,12 +1,12 @@ 'use client'; -import { useState } from 'react'; -import { motion } from 'framer-motion'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { motion } from 'framer-motion'; import { ChevronDown } from 'lucide-react'; +import { useState } from 'react'; const faqs = [ { diff --git a/apps/website/components/landing/FeatureGrid.tsx b/apps/website/components/landing/FeatureGrid.tsx index 297b8d14a..9422f706a 100644 --- a/apps/website/components/landing/FeatureGrid.tsx +++ b/apps/website/components/landing/FeatureGrid.tsx @@ -1,17 +1,17 @@ 'use client'; -import { Section } from '@/ui/Section'; -import { Container } from '@/ui/Container'; -import { Heading } from '@/ui/Heading'; -import { MockupStack } from '@/components/mockups/MockupStack'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { DriverProfileMockup } from '@/components/mockups/DriverProfileMockup'; +import { LeagueDiscoveryMockup } from '@/components/mockups/LeagueDiscoveryMockup'; import { LeagueHomeMockup } from '@/components/mockups/LeagueHomeMockup'; +import { MockupStack } from '@/components/mockups/MockupStack'; +import { ProtestWorkflowMockup } from '@/components/mockups/ProtestWorkflowMockup'; import { StandingsTableMockup } from '@/components/mockups/StandingsTableMockup'; import { TeamCompetitionMockup } from '@/components/mockups/TeamCompetitionMockup'; -import { ProtestWorkflowMockup } from '@/components/mockups/ProtestWorkflowMockup'; -import { LeagueDiscoveryMockup } from '@/components/mockups/LeagueDiscoveryMockup'; -import { DriverProfileMockup } from '@/components/mockups/DriverProfileMockup'; +import { Container } from '@/ui/Container'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Section } from '@/ui/Section'; +import { Text } from '@/ui/Text'; const features = [ { diff --git a/apps/website/components/landing/FeatureItem.tsx b/apps/website/components/landing/FeatureItem.tsx index 5b2054658..b37b93efa 100644 --- a/apps/website/components/landing/FeatureItem.tsx +++ b/apps/website/components/landing/FeatureItem.tsx @@ -1,7 +1,7 @@ -import { LucideIcon } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { LucideIcon } from 'lucide-react'; interface FeatureItemProps { icon: LucideIcon; diff --git a/apps/website/components/landing/LandingHero.tsx b/apps/website/components/landing/LandingHero.tsx index f78a44858..d0a07e7df 100644 --- a/apps/website/components/landing/LandingHero.tsx +++ b/apps/website/components/landing/LandingHero.tsx @@ -1,11 +1,11 @@ -import { useRef } from 'react'; import { useParallax } from '@/hooks/useScrollProgress'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Container } from '@/ui/Container'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Glow } from '@/ui/Glow'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { useRef } from 'react'; const discordUrl = process.env.NEXT_PUBLIC_DISCORD_URL || '#'; diff --git a/apps/website/components/layout/AuthedNav.tsx b/apps/website/components/layout/AuthedNav.tsx index 0c58a9d9e..2a0dbfdef 100644 --- a/apps/website/components/layout/AuthedNav.tsx +++ b/apps/website/components/layout/AuthedNav.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { NavLink } from './NavLink'; -import { Stack } from '@/ui/Stack'; -import { Home, Trophy, Layout, Users, Calendar, Settings } from 'lucide-react'; import { routes } from '@/lib/routing/RouteConfig'; +import { Stack } from '@/ui/primitives/Stack'; +import { Calendar, Home, Layout, Settings, Trophy, Users } from 'lucide-react'; +import { NavLink } from './NavLink'; interface AuthedNavProps { pathname: string; diff --git a/apps/website/components/layout/BrandMark.tsx b/apps/website/components/layout/BrandMark.tsx index f92606ae6..80a392c97 100644 --- a/apps/website/components/layout/BrandMark.tsx +++ b/apps/website/components/layout/BrandMark.tsx @@ -1,7 +1,6 @@ -import React from 'react'; +import { Box } from '@/ui/primitives/Box'; import Image from 'next/image'; import Link from 'next/link'; -import { Box } from '@/ui/Box'; interface BrandMarkProps { href?: string; diff --git a/apps/website/components/layout/HeaderActions.tsx b/apps/website/components/layout/HeaderActions.tsx index 61f366892..147e1f3ce 100644 --- a/apps/website/components/layout/HeaderActions.tsx +++ b/apps/website/components/layout/HeaderActions.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; import { routes } from '@/lib/routing/RouteConfig'; +import { Button } from '@/ui/Button'; +import { Stack } from '@/ui/primitives/Stack'; import { LogIn, UserPlus } from 'lucide-react'; interface HeaderActionsProps { diff --git a/apps/website/components/layout/NavLink.tsx b/apps/website/components/layout/NavLink.tsx index 2e600bd42..abdcc1092 100644 --- a/apps/website/components/layout/NavLink.tsx +++ b/apps/website/components/layout/NavLink.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import Link from 'next/link'; import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { LucideIcon } from 'lucide-react'; +import Link from 'next/link'; interface NavLinkProps { href: string; diff --git a/apps/website/components/layout/PublicNav.tsx b/apps/website/components/layout/PublicNav.tsx index ee8b84859..47e9ed0e8 100644 --- a/apps/website/components/layout/PublicNav.tsx +++ b/apps/website/components/layout/PublicNav.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { NavLink } from './NavLink'; -import { Stack } from '@/ui/Stack'; -import { Home, Trophy, Layout, Users, Calendar } from 'lucide-react'; import { routes } from '@/lib/routing/RouteConfig'; +import { Stack } from '@/ui/primitives/Stack'; +import { Calendar, Home, Layout, Trophy, Users } from 'lucide-react'; +import { NavLink } from './NavLink'; interface PublicNavProps { pathname: string; diff --git a/apps/website/components/leaderboards/DeltaChip.tsx b/apps/website/components/leaderboards/DeltaChip.tsx index 3988a209a..6dc86dc77 100644 --- a/apps/website/components/leaderboards/DeltaChip.tsx +++ b/apps/website/components/leaderboards/DeltaChip.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { ChevronUp, ChevronDown, Minus } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { ChevronDown, ChevronUp, Minus } from 'lucide-react'; interface DeltaChipProps { value: number; diff --git a/apps/website/components/leaderboards/DriverLeaderboardPreview.tsx b/apps/website/components/leaderboards/DriverLeaderboardPreview.tsx index ac1bebce2..35b4ee22b 100644 --- a/apps/website/components/leaderboards/DriverLeaderboardPreview.tsx +++ b/apps/website/components/leaderboards/DriverLeaderboardPreview.tsx @@ -1,12 +1,12 @@ -import { Trophy } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; +import { RankBadge } from '@/components/leaderboards/RankBadge'; +import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; +import { SkillLevelDisplay } from '@/lib/display-objects/SkillLevelDisplay'; import { Image } from '@/ui/Image'; import { LeaderboardList } from '@/ui/LeaderboardList'; import { LeaderboardPreviewShell } from '@/ui/LeaderboardPreviewShell'; -import { RankBadge } from '@/components/leaderboards/RankBadge'; -import { SkillLevelDisplay } from '@/lib/display-objects/SkillLevelDisplay'; -import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { Trophy } from 'lucide-react'; interface DriverLeaderboardPreviewProps { drivers: { diff --git a/apps/website/components/leaderboards/LeaderboardFiltersBar.tsx b/apps/website/components/leaderboards/LeaderboardFiltersBar.tsx index 91efe79db..a92909513 100644 --- a/apps/website/components/leaderboards/LeaderboardFiltersBar.tsx +++ b/apps/website/components/leaderboards/LeaderboardFiltersBar.tsx @@ -1,8 +1,8 @@ -import React from 'react'; -import { Search, Filter } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { Filter, Search } from 'lucide-react'; +import React from 'react'; interface LeaderboardFiltersBarProps { searchQuery?: string; diff --git a/apps/website/components/leaderboards/LeaderboardHeader.tsx b/apps/website/components/leaderboards/LeaderboardHeader.tsx index f20bde134..61141ff2e 100644 --- a/apps/website/components/leaderboards/LeaderboardHeader.tsx +++ b/apps/website/components/leaderboards/LeaderboardHeader.tsx @@ -1,10 +1,10 @@ -import React from 'react'; -import { ArrowLeft, LucideIcon } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ArrowLeft, LucideIcon } from 'lucide-react'; +import React from 'react'; interface LeaderboardHeaderProps { title: string; diff --git a/apps/website/components/leaderboards/LeaderboardHeaderPanel.tsx b/apps/website/components/leaderboards/LeaderboardHeaderPanel.tsx index ba86267e7..f836a99d0 100644 --- a/apps/website/components/leaderboards/LeaderboardHeaderPanel.tsx +++ b/apps/website/components/leaderboards/LeaderboardHeaderPanel.tsx @@ -1,11 +1,11 @@ -import React from 'react'; -import { ArrowLeft, LucideIcon } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { ArrowLeft, LucideIcon } from 'lucide-react'; +import React from 'react'; interface LeaderboardHeaderPanelProps { title: string; diff --git a/apps/website/components/leaderboards/LeaderboardPodium.tsx b/apps/website/components/leaderboards/LeaderboardPodium.tsx index b37389e13..2a7feee96 100644 --- a/apps/website/components/leaderboards/LeaderboardPodium.tsx +++ b/apps/website/components/leaderboards/LeaderboardPodium.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Image } from '@/ui/Image'; -import { Text } from '@/ui/Text'; -import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; import { MedalDisplay } from '@/lib/display-objects/MedalDisplay'; +import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; +import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; interface PodiumDriver { id: string; diff --git a/apps/website/components/leaderboards/LeaderboardTableShell.tsx b/apps/website/components/leaderboards/LeaderboardTableShell.tsx index 82f42f448..2cef7e069 100644 --- a/apps/website/components/leaderboards/LeaderboardTableShell.tsx +++ b/apps/website/components/leaderboards/LeaderboardTableShell.tsx @@ -1,6 +1,6 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; +import React from 'react'; interface LeaderboardTableShellProps { children: React.ReactNode; diff --git a/apps/website/components/leaderboards/LeaderboardsHero.tsx b/apps/website/components/leaderboards/LeaderboardsHero.tsx index 3ba326e44..eca0b66ca 100644 --- a/apps/website/components/leaderboards/LeaderboardsHero.tsx +++ b/apps/website/components/leaderboards/LeaderboardsHero.tsx @@ -1,14 +1,13 @@ 'use client'; -import React from 'react'; -import { Award, Trophy, Users } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; import { Button } from '@/ui/Button'; -import { Surface } from '@/ui/Surface'; -import { Icon } from '@/ui/Icon'; import { DecorativeBlur } from '@/ui/DecorativeBlur'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { Award, Trophy, Users } from 'lucide-react'; interface LeaderboardsHeroProps { onNavigateToDrivers: () => void; diff --git a/apps/website/components/leaderboards/MedalBadge.tsx b/apps/website/components/leaderboards/MedalBadge.tsx index 14321119a..b3e2a9918 100644 --- a/apps/website/components/leaderboards/MedalBadge.tsx +++ b/apps/website/components/leaderboards/MedalBadge.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Crown } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { Crown } from 'lucide-react'; interface MedalBadgeProps { position: number; diff --git a/apps/website/components/leaderboards/RankBadge.tsx b/apps/website/components/leaderboards/RankBadge.tsx index 599509f00..f63195002 100644 --- a/apps/website/components/leaderboards/RankBadge.tsx +++ b/apps/website/components/leaderboards/RankBadge.tsx @@ -1,6 +1,6 @@ -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface RankBadgeProps { diff --git a/apps/website/components/leaderboards/RankMedal.tsx b/apps/website/components/leaderboards/RankMedal.tsx index 0264a0ea7..4e51f05e5 100644 --- a/apps/website/components/leaderboards/RankMedal.tsx +++ b/apps/website/components/leaderboards/RankMedal.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Crown, Medal } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; import { MedalDisplay } from '@/lib/display-objects/MedalDisplay'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { Crown, Medal } from 'lucide-react'; interface RankMedalProps { rank: number; diff --git a/apps/website/components/leaderboards/RankingList.tsx b/apps/website/components/leaderboards/RankingList.tsx index 2447130f2..4ae4527ee 100644 --- a/apps/website/components/leaderboards/RankingList.tsx +++ b/apps/website/components/leaderboards/RankingList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface RankingListProps { children: ReactNode; diff --git a/apps/website/components/leaderboards/RankingListItem.tsx b/apps/website/components/leaderboards/RankingListItem.tsx index 1881b1f02..8b2e6aa05 100644 --- a/apps/website/components/leaderboards/RankingListItem.tsx +++ b/apps/website/components/leaderboards/RankingListItem.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface RankingListItemProps { diff --git a/apps/website/components/leaderboards/RankingRow.tsx b/apps/website/components/leaderboards/RankingRow.tsx index 87b10406f..08cef236c 100644 --- a/apps/website/components/leaderboards/RankingRow.tsx +++ b/apps/website/components/leaderboards/RankingRow.tsx @@ -1,11 +1,10 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; import { TableCell, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; -import { RankMedal } from './RankMedal'; import { DeltaChip } from './DeltaChip'; -import { RatingDisplay } from '@/lib/display-objects/RatingDisplay'; +import { RankMedal } from './RankMedal'; interface RankingRowProps { id: string; diff --git a/apps/website/components/leaderboards/RankingsPodium.tsx b/apps/website/components/leaderboards/RankingsPodium.tsx index 2ac5cfcff..7d578c6a1 100644 --- a/apps/website/components/leaderboards/RankingsPodium.tsx +++ b/apps/website/components/leaderboards/RankingsPodium.tsx @@ -1,7 +1,7 @@ -import { Stack } from '@/ui/Stack'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface PodiumDriver { diff --git a/apps/website/components/leaderboards/RankingsTable.tsx b/apps/website/components/leaderboards/RankingsTable.tsx index 53ca2d5ee..fe74fd011 100644 --- a/apps/website/components/leaderboards/RankingsTable.tsx +++ b/apps/website/components/leaderboards/RankingsTable.tsx @@ -2,7 +2,7 @@ import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; import { Medal } from 'lucide-react'; diff --git a/apps/website/components/leaderboards/SeasonSelector.tsx b/apps/website/components/leaderboards/SeasonSelector.tsx index e9920be58..6df957ec8 100644 --- a/apps/website/components/leaderboards/SeasonSelector.tsx +++ b/apps/website/components/leaderboards/SeasonSelector.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Calendar } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; +import { Calendar } from 'lucide-react'; interface Season { id: string; diff --git a/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx b/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx index 9fed2f4cd..03441a68b 100644 --- a/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx +++ b/apps/website/components/leaderboards/TeamLeaderboardPreview.tsx @@ -1,12 +1,12 @@ -import { Users } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { Image } from '@/ui/Image'; -import { LeaderboardList } from '@/ui/LeaderboardList'; -import { LeaderboardPreviewShell } from '@/ui/LeaderboardPreviewShell'; import { RankBadge } from '@/components/leaderboards/RankBadge'; import { getMediaUrl } from '@/lib/utilities/media'; import { Icon } from '@/ui/Icon'; +import { Image } from '@/ui/Image'; +import { LeaderboardList } from '@/ui/LeaderboardList'; +import { LeaderboardPreviewShell } from '@/ui/LeaderboardPreviewShell'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { Users } from 'lucide-react'; interface TeamLeaderboardPreviewProps { teams: { diff --git a/apps/website/components/leaderboards/TeamRankingRow.tsx b/apps/website/components/leaderboards/TeamRankingRow.tsx index ace8dc850..b84171d26 100644 --- a/apps/website/components/leaderboards/TeamRankingRow.tsx +++ b/apps/website/components/leaderboards/TeamRankingRow.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { getMediaUrl } from '@/lib/utilities/media'; import { Image } from '@/ui/Image'; +import { Box } from '@/ui/primitives/Box'; import { TableCell, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; import { RankMedal } from './RankMedal'; -import { getMediaUrl } from '@/lib/utilities/media'; interface TeamRankingRowProps { id: string; diff --git a/apps/website/components/leagues/AvailableLeagueCard.tsx b/apps/website/components/leagues/AvailableLeagueCard.tsx index 4fb50a107..c9f82795e 100644 --- a/apps/website/components/leagues/AvailableLeagueCard.tsx +++ b/apps/website/components/leagues/AvailableLeagueCard.tsx @@ -1,14 +1,14 @@ -import { CheckCircle2, Clock, Star } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { CheckCircle2, Clock, Star } from 'lucide-react'; interface AvailableLeague { id: string; diff --git a/apps/website/components/leagues/ChampionshipStandings.tsx b/apps/website/components/leagues/ChampionshipStandings.tsx index f6c701923..0b1feb8c0 100644 --- a/apps/website/components/leagues/ChampionshipStandings.tsx +++ b/apps/website/components/leagues/ChampionshipStandings.tsx @@ -1,12 +1,12 @@ +import { ChampionshipStandingsList } from '@/components/leagues/ChampionshipStandingsList'; import { routes } from '@/lib/routing/RouteConfig'; import { Card } from '@/ui/Card'; -import { ChampionshipStandingsList } from '@/components/leagues/ChampionshipStandingsList'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { SummaryItem } from '@/ui/SummaryItem'; import { Text } from '@/ui/Text'; import { Award, ChevronRight } from 'lucide-react'; diff --git a/apps/website/components/leagues/ChampionshipStandingsList.tsx b/apps/website/components/leagues/ChampionshipStandingsList.tsx index 1d43741a4..ad4bd7091 100644 --- a/apps/website/components/leagues/ChampionshipStandingsList.tsx +++ b/apps/website/components/leagues/ChampionshipStandingsList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface ChampionshipStandingsListProps { children: ReactNode; diff --git a/apps/website/components/leagues/EndRaceModal.tsx b/apps/website/components/leagues/EndRaceModal.tsx index 9162d3289..498c272a5 100644 --- a/apps/website/components/leagues/EndRaceModal.tsx +++ b/apps/website/components/leagues/EndRaceModal.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { TestTube } from 'lucide-react'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { Modal } from '@/ui/Modal'; import { InfoBanner } from '@/ui/InfoBanner'; +import { Modal } from '@/ui/Modal'; import { ModalIcon } from '@/ui/ModalIcon'; +import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/primitives/Stack'; +import { TestTube } from 'lucide-react'; interface EndRaceModalProps { raceId: string; diff --git a/apps/website/components/leagues/JoinLeagueButton.tsx b/apps/website/components/leagues/JoinLeagueButton.tsx index 01c47f305..847d81de5 100644 --- a/apps/website/components/leagues/JoinLeagueButton.tsx +++ b/apps/website/components/leagues/JoinLeagueButton.tsx @@ -1,13 +1,13 @@ 'use client'; +import { useLeagueMembershipMutation } from "@/hooks/league/useLeagueMembershipMutation"; import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; import { getMembership } from '@/lib/leagueMembership'; -import { useState } from 'react'; -import { useLeagueMembershipMutation } from "@/hooks/league/useLeagueMembershipMutation"; import { Button } from '@/ui/Button'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Modal } from '@/ui/Modal'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { useState } from 'react'; interface JoinLeagueButtonProps { leagueId: string; diff --git a/apps/website/components/leagues/JoinRequestItem.tsx b/apps/website/components/leagues/JoinRequestItem.tsx index 89148e972..53df15a78 100644 --- a/apps/website/components/leagues/JoinRequestItem.tsx +++ b/apps/website/components/leagues/JoinRequestItem.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; interface JoinRequestItemProps { driverId: string; diff --git a/apps/website/components/leagues/JoinRequestList.tsx b/apps/website/components/leagues/JoinRequestList.tsx index cdbd3d6a5..bb9da0fc0 100644 --- a/apps/website/components/leagues/JoinRequestList.tsx +++ b/apps/website/components/leagues/JoinRequestList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface JoinRequestListProps { children: ReactNode; diff --git a/apps/website/components/leagues/JoinRequestsPanel.tsx b/apps/website/components/leagues/JoinRequestsPanel.tsx index 4bf9af82c..537e9af4a 100644 --- a/apps/website/components/leagues/JoinRequestsPanel.tsx +++ b/apps/website/components/leagues/JoinRequestsPanel.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; import { Button } from '@/ui/Button'; -import { Check, X, Clock } from 'lucide-react'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Check, Clock, X } from 'lucide-react'; interface JoinRequestsPanelProps { requests: Array<{ diff --git a/apps/website/components/leagues/LeagueActivityFeed.tsx b/apps/website/components/leagues/LeagueActivityFeed.tsx index 5e0fb53d3..ab9a5230c 100644 --- a/apps/website/components/leagues/LeagueActivityFeed.tsx +++ b/apps/website/components/leagues/LeagueActivityFeed.tsx @@ -1,11 +1,11 @@ -import React, { useMemo } from 'react'; -import { Calendar, UserPlus, UserMinus, Shield, Flag, AlertTriangle } from 'lucide-react'; -import { useLeagueRaces } from "@/hooks/league/useLeagueRaces"; import { ActivityFeedItem } from '@/components/feed/ActivityFeedItem'; +import { useLeagueRaces } from "@/hooks/league/useLeagueRaces"; +import { LeagueActivityService } from '@/lib/services/league/LeagueActivityService'; import { Icon } from '@/ui/Icon'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { LeagueActivityService } from '@/lib/services/league/LeagueActivityService'; +import { Stack } from '@/ui/primitives/Stack'; +import { AlertTriangle, Calendar, Flag, Shield, UserMinus, UserPlus } from 'lucide-react'; +import { useMemo } from 'react'; export type LeagueActivity = | { type: 'race_completed'; raceId: string; raceName: string; timestamp: Date } diff --git a/apps/website/components/leagues/LeagueBasicsSection.tsx b/apps/website/components/leagues/LeagueBasicsSection.tsx index ab3cc316c..21103114f 100644 --- a/apps/website/components/leagues/LeagueBasicsSection.tsx +++ b/apps/website/components/leagues/LeagueBasicsSection.tsx @@ -1,17 +1,17 @@ 'use client'; -import React from 'react'; -import { FileText, Gamepad2, Check } from 'lucide-react'; -import { Input } from '@/ui/Input'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { Button } from '@/ui/Button'; +import { Grid } from '@/ui/Grid'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Grid } from '@/ui/Grid'; -import { Surface } from '@/ui/Surface'; -import { Button } from '@/ui/Button'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; import { TextArea } from '@/ui/TextArea'; +import { Check, FileText, Gamepad2 } from 'lucide-react'; +import React from 'react'; interface LeagueBasicsSectionProps { form: LeagueConfigFormModel; diff --git a/apps/website/components/leagues/LeagueCard.tsx b/apps/website/components/leagues/LeagueCard.tsx index 9e4e0339c..1564655cf 100644 --- a/apps/website/components/leagues/LeagueCard.tsx +++ b/apps/website/components/leagues/LeagueCard.tsx @@ -1,13 +1,13 @@ -import { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Text } from '@/ui/Text'; import { Image } from '@/ui/Image'; import { PlaceholderImage } from '@/ui/PlaceholderImage'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { Calendar as LucideCalendar, ChevronRight as LucideChevronRight } from 'lucide-react'; +import { ReactNode } from 'react'; interface LeagueCardProps { name: string; diff --git a/apps/website/components/leagues/LeagueChampionshipStats.tsx b/apps/website/components/leagues/LeagueChampionshipStats.tsx index bfa2d2b0a..fbb2f14f6 100644 --- a/apps/website/components/leagues/LeagueChampionshipStats.tsx +++ b/apps/website/components/leagues/LeagueChampionshipStats.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Text } from '@/ui/Text'; -import { Grid } from '@/ui/Grid'; import { HorizontalStatCard } from '@/ui/HorizontalStatCard'; +import { Text } from '@/ui/Text'; +import { Grid } from '@/ui/primitives/Grid'; interface LeagueChampionshipStatsProps { standings: Array<{ diff --git a/apps/website/components/leagues/LeagueCover.tsx b/apps/website/components/leagues/LeagueCover.tsx index c5fc6089d..78377a0f1 100644 --- a/apps/website/components/leagues/LeagueCover.tsx +++ b/apps/website/components/leagues/LeagueCover.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; import { SafeImage } from '@/components/shared/SafeImage'; import { ImagePlaceholder } from '@/ui/ImagePlaceholder'; +import { Box } from '@/ui/primitives/Box'; export interface LeagueCoverProps { leagueId?: string; diff --git a/apps/website/components/leagues/LeagueDecalPlacementEditor.tsx b/apps/website/components/leagues/LeagueDecalPlacementEditor.tsx index eeba14cc0..3ebb264ca 100644 --- a/apps/website/components/leagues/LeagueDecalPlacementEditor.tsx +++ b/apps/website/components/leagues/LeagueDecalPlacementEditor.tsx @@ -1,20 +1,20 @@ 'use client'; -import { useState, useRef, useCallback } from 'react'; -import { Card } from '@/ui/Card'; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { - RotateCw, - ZoomIn, - ZoomOut, - Save, - Image as ImageIcon, - Target +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + Image as ImageIcon, + RotateCw, + Save, + Target, + ZoomIn, + ZoomOut } from 'lucide-react'; +import { useCallback, useRef, useState } from 'react'; interface DecalPlacement { id: string; diff --git a/apps/website/components/leagues/LeagueDropSection.tsx b/apps/website/components/leagues/LeagueDropSection.tsx index db98b1a42..ca679ebfe 100644 --- a/apps/website/components/leagues/LeagueDropSection.tsx +++ b/apps/website/components/leagues/LeagueDropSection.tsx @@ -1,9 +1,9 @@ 'use client'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Check, HelpCircle, TrendingDown, X, Zap } from 'lucide-react'; import React, { useEffect, useRef, useState } from 'react'; diff --git a/apps/website/components/leagues/LeagueHeader.tsx b/apps/website/components/leagues/LeagueHeader.tsx index 26c5563f8..33d2cae92 100644 --- a/apps/website/components/leagues/LeagueHeader.tsx +++ b/apps/website/components/leagues/LeagueHeader.tsx @@ -1,10 +1,10 @@ -import { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ReactNode } from 'react'; interface LeagueHeaderProps { name: string; diff --git a/apps/website/components/leagues/LeagueHeaderPanel.tsx b/apps/website/components/leagues/LeagueHeaderPanel.tsx index 923859aa1..6e8923558 100644 --- a/apps/website/components/leagues/LeagueHeaderPanel.tsx +++ b/apps/website/components/leagues/LeagueHeaderPanel.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Text } from '@/ui/Text'; +import type { LeagueDetailViewData } from '@/lib/view-data/LeagueDetailViewData'; +import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Trophy, Users, Timer, Activity, type LucideIcon } from 'lucide-react'; -import type { LeagueDetailViewData } from '@/lib/view-data/LeagueDetailViewData'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Activity, Timer, Trophy, Users, type LucideIcon } from 'lucide-react'; interface LeagueHeaderPanelProps { viewData: LeagueDetailViewData; diff --git a/apps/website/components/leagues/LeagueListItem.tsx b/apps/website/components/leagues/LeagueListItem.tsx index 235f8dac6..0e825403b 100644 --- a/apps/website/components/leagues/LeagueListItem.tsx +++ b/apps/website/components/leagues/LeagueListItem.tsx @@ -1,8 +1,8 @@ import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; import { Link } from '@/ui/Link'; import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; interface League { leagueId: string; diff --git a/apps/website/components/leagues/LeagueLogo.tsx b/apps/website/components/leagues/LeagueLogo.tsx index f437f0dda..e33338de2 100644 --- a/apps/website/components/leagues/LeagueLogo.tsx +++ b/apps/website/components/leagues/LeagueLogo.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; import { SafeImage } from '@/components/shared/SafeImage'; -import { Trophy } from 'lucide-react'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Trophy } from 'lucide-react'; export interface LeagueLogoProps { leagueId?: string; diff --git a/apps/website/components/leagues/LeagueMemberRow.tsx b/apps/website/components/leagues/LeagueMemberRow.tsx index ebb5c89b5..2ea0dc376 100644 --- a/apps/website/components/leagues/LeagueMemberRow.tsx +++ b/apps/website/components/leagues/LeagueMemberRow.tsx @@ -1,10 +1,10 @@ -import React, { ReactNode } from 'react'; -import { TableRow, TableCell } from '@/ui/Table'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { Badge } from '@/ui/Badge'; import { DriverIdentity } from '@/components/drivers/DriverIdentity'; import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; +import { Badge } from '@/ui/Badge'; +import { Box } from '@/ui/primitives/Box'; +import { TableCell, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { ReactNode } from 'react'; interface LeagueMemberRowProps { driver?: DriverViewModel; diff --git a/apps/website/components/leagues/LeagueMembers.tsx b/apps/website/components/leagues/LeagueMembers.tsx index 7454822f0..c4bb37179 100644 --- a/apps/website/components/leagues/LeagueMembers.tsx +++ b/apps/website/components/leagues/LeagueMembers.tsx @@ -1,20 +1,20 @@ 'use client'; +import { LeagueMemberRow } from '@/components/leagues/LeagueMemberRow'; +import { LeagueMemberTable } from '@/components/leagues/LeagueMemberTable'; +import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; import { useInject } from '@/lib/di/hooks/useInject'; -import { LEAGUE_MEMBERSHIP_SERVICE_TOKEN, DRIVER_SERVICE_TOKEN } from '@/lib/di/tokens'; +import { DRIVER_SERVICE_TOKEN, LEAGUE_MEMBERSHIP_SERVICE_TOKEN } from '@/lib/di/tokens'; import { routes } from '@/lib/routing/RouteConfig'; import type { LeagueMembership } from '@/lib/types/LeagueMembership'; import type { MembershipRole } from '@/lib/types/MembershipRole'; import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; -import { useCallback, useEffect, useState } from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { Select } from '@/ui/Select'; import { Button } from '@/ui/Button'; -import { LeagueMemberTable } from '@/components/leagues/LeagueMemberTable'; -import { LeagueMemberRow } from '@/components/leagues/LeagueMemberRow'; -import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; +import { Box } from '@/ui/primitives/Box'; +import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; +import { useCallback, useEffect, useState } from 'react'; interface LeagueMembersProps { leagueId: string; diff --git a/apps/website/components/leagues/LeagueMembershipFeesSection.tsx b/apps/website/components/leagues/LeagueMembershipFeesSection.tsx index d99bdec05..43effc1f0 100644 --- a/apps/website/components/leagues/LeagueMembershipFeesSection.tsx +++ b/apps/website/components/leagues/LeagueMembershipFeesSection.tsx @@ -1,13 +1,13 @@ 'use client'; -import { useState } from 'react'; import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { DollarSign, Calendar, User, TrendingUp } from 'lucide-react'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Calendar, DollarSign, TrendingUp, User } from 'lucide-react'; +import { useState } from 'react'; type FeeType = 'season' | 'monthly' | 'per_race'; diff --git a/apps/website/components/leagues/LeagueNavTabs.tsx b/apps/website/components/leagues/LeagueNavTabs.tsx index c6e15e225..0e626a2f0 100644 --- a/apps/website/components/leagues/LeagueNavTabs.tsx +++ b/apps/website/components/leagues/LeagueNavTabs.tsx @@ -1,8 +1,7 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; interface Tab { label: string; diff --git a/apps/website/components/leagues/LeagueOwnershipTransfer.tsx b/apps/website/components/leagues/LeagueOwnershipTransfer.tsx index bef82013f..e3955f8c3 100644 --- a/apps/website/components/leagues/LeagueOwnershipTransfer.tsx +++ b/apps/website/components/leagues/LeagueOwnershipTransfer.tsx @@ -1,15 +1,15 @@ -import React, { useState } from 'react'; import { DriverSummaryPill } from '@/components/drivers/DriverSummaryPillWrapper'; -import { Button } from '@/ui/Button'; -import { UserCog } from 'lucide-react'; -import { LeagueSettingsViewModel } from '@/lib/view-models/LeagueSettingsViewModel'; import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; +import { LeagueSettingsViewModel } from '@/lib/view-models/LeagueSettingsViewModel'; +import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; -import { Select } from '@/ui/Select'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; +import { UserCog } from 'lucide-react'; +import { useState } from 'react'; interface LeagueOwnershipTransferProps { settings: LeagueSettingsViewModel; diff --git a/apps/website/components/leagues/LeagueRulesPanel.tsx b/apps/website/components/leagues/LeagueRulesPanel.tsx index 4ca7d720b..bc3162736 100644 --- a/apps/website/components/leagues/LeagueRulesPanel.tsx +++ b/apps/website/components/leagues/LeagueRulesPanel.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; -import { Shield, Info } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Info, Shield } from 'lucide-react'; interface Rule { id: string; diff --git a/apps/website/components/leagues/LeagueSchedule.tsx b/apps/website/components/leagues/LeagueSchedule.tsx index aefbc9758..96a434ad9 100644 --- a/apps/website/components/leagues/LeagueSchedule.tsx +++ b/apps/website/components/leagues/LeagueSchedule.tsx @@ -1,19 +1,19 @@ 'use client'; -import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; import { useRegisterForRace } from "@/hooks/race/useRegisterForRace"; import { useWithdrawFromRace } from "@/hooks/race/useWithdrawFromRace"; -import { useState } from 'react'; +import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; import type { LeagueScheduleRaceViewModel } from '@/lib/view-models/LeagueScheduleViewModel'; +import { useState } from 'react'; // Shared state components import { StateContainer } from '@/components/shared/state/StateContainer'; import { useLeagueSchedule } from "@/hooks/league/useLeagueSchedule"; -import { Calendar } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Calendar } from 'lucide-react'; interface LeagueScheduleProps { leagueId: string; diff --git a/apps/website/components/leagues/LeagueSchedulePanel.tsx b/apps/website/components/leagues/LeagueSchedulePanel.tsx index 7d1a25abe..5f7a72f79 100644 --- a/apps/website/components/leagues/LeagueSchedulePanel.tsx +++ b/apps/website/components/leagues/LeagueSchedulePanel.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; -import { MapPin, Clock } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Clock, MapPin } from 'lucide-react'; interface RaceEvent { id: string; diff --git a/apps/website/components/leagues/LeagueScoringSection.tsx b/apps/website/components/leagues/LeagueScoringSection.tsx index b4c4a2848..41e40d03a 100644 --- a/apps/website/components/leagues/LeagueScoringSection.tsx +++ b/apps/website/components/leagues/LeagueScoringSection.tsx @@ -1,18 +1,18 @@ 'use client'; -import React, { useState, useRef, useEffect } from 'react'; -import { Trophy, Award, Check, Zap, Settings, Globe, Medal, Plus, Minus, RotateCcw, HelpCircle, X } from 'lucide-react'; -import { createPortal } from 'react-dom'; -import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; +import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel'; import type { CustomPointsConfig } from '@/lib/view-models/ScoringConfigurationViewModel'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Grid } from '@/ui/Grid'; -import { Surface } from '@/ui/Surface'; import { Button } from '@/ui/Button'; +import { Grid } from '@/ui/Grid'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { Award, Check, Globe, HelpCircle, Medal, Minus, Plus, RotateCcw, Settings, Trophy, X, Zap } from 'lucide-react'; +import React, { useEffect, useRef, useState } from 'react'; +import { createPortal } from 'react-dom'; // ============================================================================ // INFO FLYOUT COMPONENT diff --git a/apps/website/components/leagues/LeagueSlider.tsx b/apps/website/components/leagues/LeagueSlider.tsx index b44cbd9ab..c720b58ce 100644 --- a/apps/website/components/leagues/LeagueSlider.tsx +++ b/apps/website/components/leagues/LeagueSlider.tsx @@ -1,17 +1,17 @@ 'use client'; -import React, { useCallback, useRef, useState } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; -import { Link } from '@/ui/Link'; -import { ChevronLeft, ChevronRight, type LucideIcon } from 'lucide-react'; import { LeagueCard } from '@/components/leagues/LeagueCardWrapper'; import { LeagueSummaryViewModelBuilder } from '@/lib/builders/view-models/LeagueSummaryViewModelBuilder'; -import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; import { routes } from '@/lib/routing/RouteConfig'; +import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ChevronLeft, ChevronRight, type LucideIcon } from 'lucide-react'; +import { useCallback, useRef, useState } from 'react'; interface LeagueSliderProps { title: string; diff --git a/apps/website/components/leagues/LeagueSponsorshipsSection.tsx b/apps/website/components/leagues/LeagueSponsorshipsSection.tsx index 0c5520870..bdacf5152 100644 --- a/apps/website/components/leagues/LeagueSponsorshipsSection.tsx +++ b/apps/website/components/leagues/LeagueSponsorshipsSection.tsx @@ -1,20 +1,20 @@ 'use client'; +import { Badge } from '@/ui/Badge'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { StatBox } from '@/ui/StatBox'; +import { Text } from '@/ui/Text'; import { Award, DollarSign, Star, X } from 'lucide-react'; import { useState } from 'react'; import { PendingSponsorshipRequests } from '../sponsors/PendingSponsorshipRequests'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Icon } from '@/ui/Icon'; -import { Badge } from '@/ui/Badge'; -import { StatBox } from '@/ui/StatBox'; -import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; import { useLeagueSeasons } from "@/hooks/league/useLeagueSeasons"; import { useSponsorshipRequests } from "@/hooks/league/useSponsorshipRequests"; +import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId"; import { useInject } from '@/lib/di/hooks/useInject'; import { SPONSOR_SERVICE_TOKEN } from '@/lib/di/tokens'; diff --git a/apps/website/components/leagues/LeagueStandingsTable.tsx b/apps/website/components/leagues/LeagueStandingsTable.tsx index 210c0962c..352779bf0 100644 --- a/apps/website/components/leagues/LeagueStandingsTable.tsx +++ b/apps/website/components/leagues/LeagueStandingsTable.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; interface StandingEntry { position: number; diff --git a/apps/website/components/leagues/LeagueStewardingSection.tsx b/apps/website/components/leagues/LeagueStewardingSection.tsx index c034cf3d4..1b8707cb0 100644 --- a/apps/website/components/leagues/LeagueStewardingSection.tsx +++ b/apps/website/components/leagues/LeagueStewardingSection.tsx @@ -1,14 +1,14 @@ 'use client'; -import React from 'react'; -import { Scale, Clock, Bell, Shield, Vote, AlertTriangle } from 'lucide-react'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { Checkbox } from '@/ui/Checkbox'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; -import { Checkbox } from '@/ui/Checkbox'; +import { Text } from '@/ui/Text'; +import { AlertTriangle, Bell, Clock, Scale, Shield, Vote } from 'lucide-react'; +import React from 'react'; interface LeagueStewardingSectionProps { form: LeagueConfigFormModel; diff --git a/apps/website/components/leagues/LeagueStructureSection.tsx b/apps/website/components/leagues/LeagueStructureSection.tsx index e091bc7d5..e57d756dc 100644 --- a/apps/website/components/leagues/LeagueStructureSection.tsx +++ b/apps/website/components/leagues/LeagueStructureSection.tsx @@ -1,15 +1,15 @@ 'use client'; -import { User, Users2, Check, HelpCircle, X } from 'lucide-react'; -import { useState, useRef, useEffect, useMemo } from 'react'; -import type * as React from 'react'; -import { createPortal } from 'react-dom'; -import { Input } from '@/ui/Input'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Check, HelpCircle, User, Users2, X } from 'lucide-react'; +import type * as React from 'react'; +import { useEffect, useMemo, useRef, useState } from 'react'; +import { createPortal } from 'react-dom'; // ============================================================================ // INFO FLYOUT COMPONENT diff --git a/apps/website/components/leagues/LeagueTabs.tsx b/apps/website/components/leagues/LeagueTabs.tsx index 233ef65ad..9a36c8cdb 100644 --- a/apps/website/components/leagues/LeagueTabs.tsx +++ b/apps/website/components/leagues/LeagueTabs.tsx @@ -1,8 +1,7 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface Tab { diff --git a/apps/website/components/leagues/LeagueTimingsSection.tsx b/apps/website/components/leagues/LeagueTimingsSection.tsx index bb7364568..c5f2789b9 100644 --- a/apps/website/components/leagues/LeagueTimingsSection.tsx +++ b/apps/website/components/leagues/LeagueTimingsSection.tsx @@ -1,31 +1,31 @@ 'use client'; -import React, { useEffect, useState, useMemo, useRef, useCallback } from 'react'; -import { - Calendar, - Clock, - Flag, - CalendarDays, - Timer, - Trophy, - ChevronDown, - ChevronUp, - Play, - Eye, - CalendarRange, - Info, - Globe, - MapPin, - Pencil, -} from 'lucide-react'; +import { RangeField } from '@/components/shared/RangeField'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; import type { Weekday } from '@/lib/types/Weekday'; -import { Input } from '@/ui/Input'; -import { RangeField } from '@/components/shared/RangeField'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + Calendar, + CalendarDays, + CalendarRange, + ChevronDown, + ChevronUp, + Clock, + Eye, + Flag, + Globe, + Info, + MapPin, + Pencil, + Play, + Timer, + Trophy, +} from 'lucide-react'; +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; // Common time zones for racing leagues const TIME_ZONES = [ diff --git a/apps/website/components/leagues/LeagueVisibilitySection.tsx b/apps/website/components/leagues/LeagueVisibilitySection.tsx index 2a623eb34..068295bb7 100644 --- a/apps/website/components/leagues/LeagueVisibilitySection.tsx +++ b/apps/website/components/leagues/LeagueVisibilitySection.tsx @@ -1,14 +1,14 @@ 'use client'; -import { Trophy, Users, Check, HelpCircle, X } from 'lucide-react'; -import { useState, useRef, useEffect } from 'react'; -import type * as React from 'react'; -import { createPortal } from 'react-dom'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Check, HelpCircle, Trophy, Users, X } from 'lucide-react'; +import type * as React from 'react'; +import { useEffect, useRef, useState } from 'react'; +import { createPortal } from 'react-dom'; // Minimum drivers for ranked leagues const MIN_RANKED_DRIVERS = 10; diff --git a/apps/website/components/leagues/ProtestListItem.tsx b/apps/website/components/leagues/ProtestListItem.tsx index 9a10aee7c..f86fd1141 100644 --- a/apps/website/components/leagues/ProtestListItem.tsx +++ b/apps/website/components/leagues/ProtestListItem.tsx @@ -1,13 +1,13 @@ -import { AlertCircle, AlertTriangle, Video } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { AlertCircle, AlertTriangle, Video } from 'lucide-react'; interface ProtestListItemProps { protesterName: string; diff --git a/apps/website/components/leagues/QuickPenaltyModal.tsx b/apps/website/components/leagues/QuickPenaltyModal.tsx index 6b081d74d..51f7cc93e 100644 --- a/apps/website/components/leagues/QuickPenaltyModal.tsx +++ b/apps/website/components/leagues/QuickPenaltyModal.tsx @@ -1,15 +1,15 @@ 'use client'; -import { useState } from 'react'; -import { Button } from '@/ui/Button'; import { usePenaltyMutation } from "@/hooks/league/usePenaltyMutation"; -import { AlertTriangle, Clock, Flag, Zap } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; import { TextArea } from '@/ui/TextArea'; +import { AlertTriangle, Clock, Flag, Zap } from 'lucide-react'; +import { useState } from 'react'; interface DriverOption { id: string; diff --git a/apps/website/components/leagues/ReadonlyLeagueInfo.tsx b/apps/website/components/leagues/ReadonlyLeagueInfo.tsx index c3a5434c4..00d30f970 100644 --- a/apps/website/components/leagues/ReadonlyLeagueInfo.tsx +++ b/apps/website/components/leagues/ReadonlyLeagueInfo.tsx @@ -1,10 +1,10 @@ 'use client'; -import { Calendar, Users, Trophy, Gamepad2, Eye, Hash, Award } from 'lucide-react'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; -import { Box } from '@/ui/Box'; import { Heading } from '@/ui/Heading'; import { InfoItem } from '@/ui/InfoItem'; +import { Box } from '@/ui/primitives/Box'; +import { Award, Calendar, Eye, Gamepad2, Hash, Trophy, Users } from 'lucide-react'; interface ReadonlyLeagueInfoProps { league: { diff --git a/apps/website/components/leagues/RosterTable.tsx b/apps/website/components/leagues/RosterTable.tsx index 2610f35c5..6ed4e9f7a 100644 --- a/apps/website/components/leagues/RosterTable.tsx +++ b/apps/website/components/leagues/RosterTable.tsx @@ -1,7 +1,7 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; +import { ReactNode } from 'react'; interface RosterTableProps { children: ReactNode; diff --git a/apps/website/components/leagues/ScheduleTable.tsx b/apps/website/components/leagues/ScheduleTable.tsx index c14a2ed03..24a937b09 100644 --- a/apps/website/components/leagues/ScheduleTable.tsx +++ b/apps/website/components/leagues/ScheduleTable.tsx @@ -1,14 +1,13 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Calendar, MapPin, ChevronRight } from 'lucide-react'; -import { Surface } from '@/ui/Surface'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; -import { Link } from '@/ui/Link'; import { routes } from '@/lib/routing/RouteConfig'; +import { Icon } from '@/ui/Icon'; +import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { Calendar, ChevronRight, MapPin } from 'lucide-react'; interface RaceEntry { id: string; diff --git a/apps/website/components/leagues/SponsorshipRequestCard.tsx b/apps/website/components/leagues/SponsorshipRequestCard.tsx index 6af96381f..78c9338a1 100644 --- a/apps/website/components/leagues/SponsorshipRequestCard.tsx +++ b/apps/website/components/leagues/SponsorshipRequestCard.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { CheckCircle, XCircle, AlertCircle } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Badge } from '@/ui/Badge'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { AlertCircle, CheckCircle, XCircle } from 'lucide-react'; interface SponsorshipRequest { id: string; diff --git a/apps/website/components/leagues/SponsorshipSlotCard.tsx b/apps/website/components/leagues/SponsorshipSlotCard.tsx index 01aaf201b..05c1b47b9 100644 --- a/apps/website/components/leagues/SponsorshipSlotCard.tsx +++ b/apps/website/components/leagues/SponsorshipSlotCard.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { DollarSign } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; import { Badge } from '@/ui/Badge'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { DollarSign } from 'lucide-react'; interface SponsorshipSlot { id: string; diff --git a/apps/website/components/leagues/StandingsTable.tsx b/apps/website/components/leagues/StandingsTable.tsx index 132765f46..8241b20e0 100644 --- a/apps/website/components/leagues/StandingsTable.tsx +++ b/apps/website/components/leagues/StandingsTable.tsx @@ -1,17 +1,17 @@ 'use client'; -import { useState, useRef, useEffect } from 'react'; -import { Link } from '@/ui/Link'; -import { Image } from '@/ui/Image'; -import { CountryFlag } from '@/ui/CountryFlag'; -import { PlaceholderImage } from '@/ui/PlaceholderImage'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; -import { Badge } from '@/ui/Badge'; import { routes } from '@/lib/routing/RouteConfig'; +import { Badge } from '@/ui/Badge'; +import { CountryFlag } from '@/ui/CountryFlag'; import { Icon } from '@/ui/Icon'; -import { User, Edit } from 'lucide-react'; +import { Image } from '@/ui/Image'; +import { Link } from '@/ui/Link'; +import { PlaceholderImage } from '@/ui/PlaceholderImage'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { Edit, User } from 'lucide-react'; +import { useEffect, useRef, useState } from 'react'; // League role display data const leagueRoleDisplay = { diff --git a/apps/website/components/leagues/StandingsTableShell.tsx b/apps/website/components/leagues/StandingsTableShell.tsx index da68fa5ad..f950da0bc 100644 --- a/apps/website/components/leagues/StandingsTableShell.tsx +++ b/apps/website/components/leagues/StandingsTableShell.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Surface } from '@/ui/Surface'; import { Icon } from '@/ui/Icon'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; -import { Trophy, TrendingUp } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { TrendingUp, Trophy } from 'lucide-react'; interface StandingsEntry { position: number; diff --git a/apps/website/components/leagues/StewardingQueuePanel.tsx b/apps/website/components/leagues/StewardingQueuePanel.tsx index a81adc43e..39e4dbadd 100644 --- a/apps/website/components/leagues/StewardingQueuePanel.tsx +++ b/apps/website/components/leagues/StewardingQueuePanel.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Clock, ShieldAlert, MessageSquare } from 'lucide-react'; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; import { Card } from '@/ui/Card'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Clock, MessageSquare, ShieldAlert } from 'lucide-react'; interface Protest { id: string; diff --git a/apps/website/components/leagues/StewardingStats.tsx b/apps/website/components/leagues/StewardingStats.tsx index 92f6aa7c7..05de95ed9 100644 --- a/apps/website/components/leagues/StewardingStats.tsx +++ b/apps/website/components/leagues/StewardingStats.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { CheckCircle, Clock, Gavel } from 'lucide-react'; import { StatBox } from '@/ui/StatBox'; -import { Grid } from '@/ui/Grid'; +import { Grid } from '@/ui/primitives/Grid'; +import { CheckCircle, Clock, Gavel } from 'lucide-react'; interface StewardingStatsProps { totalPending: number; diff --git a/apps/website/components/leagues/TransactionRow.tsx b/apps/website/components/leagues/TransactionRow.tsx index 6785f5a9e..1f2c8058d 100644 --- a/apps/website/components/leagues/TransactionRow.tsx +++ b/apps/website/components/leagues/TransactionRow.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { ArrowUpRight, ArrowDownRight, DollarSign, TrendingUp, LucideIcon } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { ArrowDownRight, ArrowUpRight, DollarSign, LucideIcon, TrendingUp } from 'lucide-react'; interface Transaction { id: string; diff --git a/apps/website/components/leagues/WalletSummaryPanel.tsx b/apps/website/components/leagues/WalletSummaryPanel.tsx index 323a9418d..ba16dccac 100644 --- a/apps/website/components/leagues/WalletSummaryPanel.tsx +++ b/apps/website/components/leagues/WalletSummaryPanel.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Surface } from '@/ui/Surface'; -import { Icon } from '@/ui/Icon'; import { Button } from '@/ui/Button'; -import { Wallet, ArrowUpRight, ArrowDownLeft, History } from 'lucide-react'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { ArrowDownLeft, ArrowUpRight, History, Wallet } from 'lucide-react'; interface Transaction { id: string; diff --git a/apps/website/components/media/MediaCard.tsx b/apps/website/components/media/MediaCard.tsx index 1adf8466d..e05e7b755 100644 --- a/apps/website/components/media/MediaCard.tsx +++ b/apps/website/components/media/MediaCard.tsx @@ -1,12 +1,12 @@ 'use client'; -import React from 'react'; -import { motion } from 'framer-motion'; -import { Stack } from '@/ui/Stack'; import { Card } from '@/ui/Card'; -import { Text } from '@/ui/Text'; import { Image } from '@/ui/Image'; import { ImagePlaceholder } from '@/ui/ImagePlaceholder'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { motion } from 'framer-motion'; +import React from 'react'; export interface MediaCardProps { src?: string; diff --git a/apps/website/components/media/MediaFiltersBar.tsx b/apps/website/components/media/MediaFiltersBar.tsx index 146fc39f6..d472b86f2 100644 --- a/apps/website/components/media/MediaFiltersBar.tsx +++ b/apps/website/components/media/MediaFiltersBar.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Search, Grid, List } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Input } from '@/ui/Input'; import { IconButton } from '@/ui/IconButton'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; +import { Grid, List, Search } from 'lucide-react'; export interface MediaFiltersBarProps { searchQuery: string; diff --git a/apps/website/components/media/MediaGallery.tsx b/apps/website/components/media/MediaGallery.tsx index a8dd6ad72..ef973e64f 100644 --- a/apps/website/components/media/MediaGallery.tsx +++ b/apps/website/components/media/MediaGallery.tsx @@ -1,12 +1,12 @@ 'use client'; -import React, { useState } from 'react'; -import { Box } from '@/ui/Box'; -import { MediaGrid } from './MediaGrid'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { useState } from 'react'; import { MediaCard } from './MediaCard'; import { MediaFiltersBar } from './MediaFiltersBar'; +import { MediaGrid } from './MediaGrid'; import { MediaViewerModal } from './MediaViewerModal'; -import { Text } from '@/ui/Text'; export interface MediaAsset { id: string; diff --git a/apps/website/components/media/MediaGrid.tsx b/apps/website/components/media/MediaGrid.tsx index 27b963e51..f5e97f03c 100644 --- a/apps/website/components/media/MediaGrid.tsx +++ b/apps/website/components/media/MediaGrid.tsx @@ -1,5 +1,5 @@ +import { Grid } from '@/ui/primitives/Grid'; import React from 'react'; -import { Grid } from '@/ui/Grid'; export interface MediaGridProps { children: React.ReactNode; diff --git a/apps/website/components/media/MediaViewerModal.tsx b/apps/website/components/media/MediaViewerModal.tsx index 7d7e7683a..6093003f8 100644 --- a/apps/website/components/media/MediaViewerModal.tsx +++ b/apps/website/components/media/MediaViewerModal.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { motion, AnimatePresence } from 'framer-motion'; -import { X, ChevronLeft, ChevronRight, Download } from 'lucide-react'; -import { Box } from '@/ui/Box'; import { IconButton } from '@/ui/IconButton'; import { Image } from '@/ui/Image'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; +import { AnimatePresence, motion } from 'framer-motion'; +import { ChevronLeft, ChevronRight, Download, X } from 'lucide-react'; export interface MediaViewerModalProps { isOpen: boolean; diff --git a/apps/website/components/media/UploadDropzone.tsx b/apps/website/components/media/UploadDropzone.tsx index 11f833b72..4401d0b2c 100644 --- a/apps/website/components/media/UploadDropzone.tsx +++ b/apps/website/components/media/UploadDropzone.tsx @@ -1,9 +1,9 @@ -import React, { useState, useRef } from 'react'; -import { Upload, File, X, CheckCircle2, AlertCircle } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { AlertCircle, CheckCircle2, File, Upload, X } from 'lucide-react'; +import React, { useRef, useState } from 'react'; export interface UploadDropzoneProps { onFilesSelected: (files: File[]) => void; diff --git a/apps/website/components/mockups/CareerProgressionMockup.tsx b/apps/website/components/mockups/CareerProgressionMockup.tsx index c2b7c0cd2..d5868d939 100644 --- a/apps/website/components/mockups/CareerProgressionMockup.tsx +++ b/apps/website/components/mockups/CareerProgressionMockup.tsx @@ -1,9 +1,9 @@ 'use client'; -import { motion, useReducedMotion } from 'framer-motion'; -import { useState, useEffect } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function CareerProgressionMockup() { const shouldReduceMotion = useReducedMotion(); diff --git a/apps/website/components/mockups/CompanionAutomationMockup.tsx b/apps/website/components/mockups/CompanionAutomationMockup.tsx index e42a12c7a..613f2c6ab 100644 --- a/apps/website/components/mockups/CompanionAutomationMockup.tsx +++ b/apps/website/components/mockups/CompanionAutomationMockup.tsx @@ -1,10 +1,10 @@ 'use client'; -import { motion, useReducedMotion } from 'framer-motion'; -import { useState, useEffect } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function CompanionAutomationMockup() { const shouldReduceMotion = useReducedMotion(); diff --git a/apps/website/components/mockups/DriverProfileMockup.tsx b/apps/website/components/mockups/DriverProfileMockup.tsx index 79c1de40f..748c03c77 100644 --- a/apps/website/components/mockups/DriverProfileMockup.tsx +++ b/apps/website/components/mockups/DriverProfileMockup.tsx @@ -1,9 +1,9 @@ 'use client'; -import { motion, useReducedMotion, useMotionValue, useSpring, useTransform } from 'framer-motion'; -import { useEffect, useState } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { motion, useMotionValue, useReducedMotion, useSpring, useTransform } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function DriverProfileMockup() { const shouldReduceMotion = useReducedMotion(); diff --git a/apps/website/components/mockups/LeagueDiscoveryMockup.tsx b/apps/website/components/mockups/LeagueDiscoveryMockup.tsx index 59a1c33ac..8a36203df 100644 --- a/apps/website/components/mockups/LeagueDiscoveryMockup.tsx +++ b/apps/website/components/mockups/LeagueDiscoveryMockup.tsx @@ -1,13 +1,13 @@ 'use client'; -import { motion, useReducedMotion } from 'framer-motion'; -import { useState, useEffect } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function LeagueDiscoveryMockup() { const shouldReduceMotion = useReducedMotion(); - const [hoveredIndex, setHoveredIndex] = useState(null); + const [, setHoveredIndex] = useState(null); const [isMobile, setIsMobile] = useState(false); useEffect(() => { diff --git a/apps/website/components/mockups/LeagueHomeMockup.tsx b/apps/website/components/mockups/LeagueHomeMockup.tsx index 6647c1fc4..963548667 100644 --- a/apps/website/components/mockups/LeagueHomeMockup.tsx +++ b/apps/website/components/mockups/LeagueHomeMockup.tsx @@ -1,10 +1,10 @@ 'use client'; -import { motion, useReducedMotion } from 'framer-motion'; -import { useState, useEffect } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function LeagueHomeMockup() { const shouldReduceMotion = useReducedMotion(); diff --git a/apps/website/components/mockups/ProtestWorkflowMockup.tsx b/apps/website/components/mockups/ProtestWorkflowMockup.tsx index eb189cfa3..476cf4c46 100644 --- a/apps/website/components/mockups/ProtestWorkflowMockup.tsx +++ b/apps/website/components/mockups/ProtestWorkflowMockup.tsx @@ -1,9 +1,9 @@ 'use client'; -import { motion, useReducedMotion } from 'framer-motion'; -import { useState, useEffect } from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function ProtestWorkflowMockup() { const shouldReduceMotion = useReducedMotion(); diff --git a/apps/website/components/mockups/RaceHistoryMockup.tsx b/apps/website/components/mockups/RaceHistoryMockup.tsx index 928649167..1aec36da5 100644 --- a/apps/website/components/mockups/RaceHistoryMockup.tsx +++ b/apps/website/components/mockups/RaceHistoryMockup.tsx @@ -1,10 +1,10 @@ 'use client'; -import { motion, useReducedMotion } from 'framer-motion'; -import { useState, useEffect } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function RaceHistoryMockup() { const shouldReduceMotion = useReducedMotion(); diff --git a/apps/website/components/mockups/SimPlatformMockup.tsx b/apps/website/components/mockups/SimPlatformMockup.tsx index 966738444..d281fc0b2 100644 --- a/apps/website/components/mockups/SimPlatformMockup.tsx +++ b/apps/website/components/mockups/SimPlatformMockup.tsx @@ -1,8 +1,8 @@ 'use client'; -import { useState, useEffect } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { useEffect, useState } from 'react'; export function SimPlatformMockup() { const [isMobile, setIsMobile] = useState(false); diff --git a/apps/website/components/mockups/StandingsTableMockup.tsx b/apps/website/components/mockups/StandingsTableMockup.tsx index 69f7c19b2..359e3b75b 100644 --- a/apps/website/components/mockups/StandingsTableMockup.tsx +++ b/apps/website/components/mockups/StandingsTableMockup.tsx @@ -1,13 +1,13 @@ 'use client'; -import { motion, useReducedMotion, useMotionValue, useSpring } from 'framer-motion'; -import { useEffect, useState } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { motion, useMotionValue, useReducedMotion, useSpring } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function StandingsTableMockup() { const shouldReduceMotion = useReducedMotion(); - const [hoveredRow, setHoveredRow] = useState(null); + const [, setHoveredRow] = useState(null); const [isMobile, setIsMobile] = useState(false); useEffect(() => { diff --git a/apps/website/components/mockups/TeamCompetitionMockup.tsx b/apps/website/components/mockups/TeamCompetitionMockup.tsx index 9380dc3b2..878daf095 100644 --- a/apps/website/components/mockups/TeamCompetitionMockup.tsx +++ b/apps/website/components/mockups/TeamCompetitionMockup.tsx @@ -1,9 +1,9 @@ 'use client'; -import { motion, useReducedMotion } from 'framer-motion'; -import { useState, useEffect } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { motion, useReducedMotion } from 'framer-motion'; +import { useEffect, useState } from 'react'; export function TeamCompetitionMockup() { const shouldReduceMotion = useReducedMotion(); diff --git a/apps/website/components/mockups/WorkflowMockup.tsx b/apps/website/components/mockups/WorkflowMockup.tsx index 3bb177b12..4538d6bf5 100644 --- a/apps/website/components/mockups/WorkflowMockup.tsx +++ b/apps/website/components/mockups/WorkflowMockup.tsx @@ -1,12 +1,12 @@ 'use client'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; import { AnimatePresence, motion, useReducedMotion } from 'framer-motion'; import { CheckCircle2, LucideIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; -import { Text } from '@/ui/Text'; export interface WorkflowStep { id: number; diff --git a/apps/website/components/notifications/ModalNotification.tsx b/apps/website/components/notifications/ModalNotification.tsx index 9f58b552d..e99fc0c6e 100644 --- a/apps/website/components/notifications/ModalNotification.tsx +++ b/apps/website/components/notifications/ModalNotification.tsx @@ -1,27 +1,27 @@ 'use client'; -import { useState, useEffect } from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; +import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { IconButton } from '@/ui/IconButton'; -import type { Notification, NotificationAction } from './notificationTypes'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; import { - Bell, - AlertTriangle, - Shield, - Vote, - Trophy, - Users, - Flag, - AlertCircle, - Clock, - Star, - Medal, - X, + AlertCircle, + AlertTriangle, + Bell, + Clock, + Flag, + Medal, + Shield, + Star, + Trophy, + Users, + Vote, + X, } from 'lucide-react'; -import { Button } from '@/ui/Button'; +import { useEffect, useState } from 'react'; +import type { Notification, NotificationAction } from './notificationTypes'; interface ModalNotificationProps { notification: Notification; diff --git a/apps/website/components/notifications/NotificationCenter.tsx b/apps/website/components/notifications/NotificationCenter.tsx index b95dc25a6..e4a10520f 100644 --- a/apps/website/components/notifications/NotificationCenter.tsx +++ b/apps/website/components/notifications/NotificationCenter.tsx @@ -1,20 +1,20 @@ 'use client'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { - AlertTriangle, - Bell, - CheckCheck, - ExternalLink, - Flag, - Shield, - Trophy, - Users, - Vote + AlertTriangle, + Bell, + CheckCheck, + ExternalLink, + Flag, + Shield, + Trophy, + Users, + Vote } from 'lucide-react'; import { useEffect, useRef, useState } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; const notificationIcons: Record = { protest_filed: AlertTriangle, diff --git a/apps/website/components/notifications/NotificationProvider.tsx b/apps/website/components/notifications/NotificationProvider.tsx index 5f10f229d..887fba0ac 100644 --- a/apps/website/components/notifications/NotificationProvider.tsx +++ b/apps/website/components/notifications/NotificationProvider.tsx @@ -6,7 +6,7 @@ import { v4 as uuid } from 'uuid'; import { ModalNotification } from './ModalNotification'; import { ToastNotification } from './ToastNotification'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import type { Notification, NotificationAction, NotificationVariant } from './notificationTypes'; diff --git a/apps/website/components/notifications/ToastNotification.tsx b/apps/website/components/notifications/ToastNotification.tsx index 4b2cb2fd7..d41eebea6 100644 --- a/apps/website/components/notifications/ToastNotification.tsx +++ b/apps/website/components/notifications/ToastNotification.tsx @@ -1,22 +1,22 @@ 'use client'; -import { useState, useEffect, useCallback } from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; import { IconButton } from '@/ui/IconButton'; -import type { Notification } from './notificationTypes'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; import { - Bell, - AlertTriangle, - Shield, - Vote, - Trophy, - Users, - Flag, - X, - ExternalLink, + AlertTriangle, + Bell, + ExternalLink, + Flag, + Shield, + Trophy, + Users, + Vote, + X, } from 'lucide-react'; +import { useCallback, useEffect, useState } from 'react'; +import type { Notification } from './notificationTypes'; interface ToastNotificationProps { notification: Notification; diff --git a/apps/website/components/onboarding/AvatarStep.tsx b/apps/website/components/onboarding/AvatarStep.tsx index 31d172a21..db777ea9a 100644 --- a/apps/website/components/onboarding/AvatarStep.tsx +++ b/apps/website/components/onboarding/AvatarStep.tsx @@ -1,12 +1,12 @@ -import { useRef, ChangeEvent } from 'react'; -import { Upload, Loader2, Sparkles, Palette, Check, User } from 'lucide-react'; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; -import { Grid } from '@/ui/Grid'; -import { Surface } from '@/ui/Surface'; import { Image } from '@/ui/Image'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { Check, Loader2, Palette, Sparkles, Upload, User } from 'lucide-react'; +import { ChangeEvent, useRef } from 'react'; export type RacingSuitColor = | 'red' diff --git a/apps/website/components/onboarding/OnboardingHelpPanel.tsx b/apps/website/components/onboarding/OnboardingHelpPanel.tsx index 5c6eaf3ed..0abc571ec 100644 --- a/apps/website/components/onboarding/OnboardingHelpPanel.tsx +++ b/apps/website/components/onboarding/OnboardingHelpPanel.tsx @@ -1,7 +1,7 @@ -import { Surface } from '@/ui/Surface'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; import { HelpCircle } from 'lucide-react'; interface OnboardingHelpPanelProps { diff --git a/apps/website/components/onboarding/OnboardingPrimaryActions.tsx b/apps/website/components/onboarding/OnboardingPrimaryActions.tsx index 7563eb95f..3ff74eefa 100644 --- a/apps/website/components/onboarding/OnboardingPrimaryActions.tsx +++ b/apps/website/components/onboarding/OnboardingPrimaryActions.tsx @@ -1,7 +1,7 @@ import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; -import { ChevronLeft, ChevronRight, Check } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { Check, ChevronLeft, ChevronRight } from 'lucide-react'; interface OnboardingPrimaryActionsProps { onBack?: () => void; diff --git a/apps/website/components/onboarding/OnboardingShell.tsx b/apps/website/components/onboarding/OnboardingShell.tsx index 5a4bd4d2d..85faa4325 100644 --- a/apps/website/components/onboarding/OnboardingShell.tsx +++ b/apps/website/components/onboarding/OnboardingShell.tsx @@ -1,5 +1,5 @@ -import { Stack } from '@/ui/Stack'; import { Container } from '@/ui/Container'; +import { Stack } from '@/ui/primitives/Stack'; interface OnboardingShellProps { children: React.ReactNode; diff --git a/apps/website/components/onboarding/OnboardingStepPanel.tsx b/apps/website/components/onboarding/OnboardingStepPanel.tsx index a3613098a..f4b440007 100644 --- a/apps/website/components/onboarding/OnboardingStepPanel.tsx +++ b/apps/website/components/onboarding/OnboardingStepPanel.tsx @@ -1,5 +1,5 @@ import { Panel } from '@/ui/Panel'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface OnboardingStepPanelProps { diff --git a/apps/website/components/onboarding/OnboardingStepper.tsx b/apps/website/components/onboarding/OnboardingStepper.tsx index caead1bd9..c440a4b96 100644 --- a/apps/website/components/onboarding/OnboardingStepper.tsx +++ b/apps/website/components/onboarding/OnboardingStepper.tsx @@ -1,6 +1,6 @@ 'use client'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { motion } from 'framer-motion'; diff --git a/apps/website/components/onboarding/PersonalInfoStep.tsx b/apps/website/components/onboarding/PersonalInfoStep.tsx index 056080507..2ea4ba894 100644 --- a/apps/website/components/onboarding/PersonalInfoStep.tsx +++ b/apps/website/components/onboarding/PersonalInfoStep.tsx @@ -1,11 +1,11 @@ -import { Clock, ChevronRight } from 'lucide-react'; -import { Input } from '@/ui/Input'; import { CountrySelect } from '@/components/shared/CountrySelect'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; -import { Grid } from '@/ui/Grid'; +import { Input } from '@/ui/Input'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; +import { ChevronRight, Clock } from 'lucide-react'; export interface PersonalInfo { firstName: string; diff --git a/apps/website/components/profile/ConnectedAccountsPanel.tsx b/apps/website/components/profile/ConnectedAccountsPanel.tsx index 31fe16210..6f1f185b6 100644 --- a/apps/website/components/profile/ConnectedAccountsPanel.tsx +++ b/apps/website/components/profile/ConnectedAccountsPanel.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { Globe, Link as LinkIcon } from 'lucide-react'; interface ConnectedAccountsPanelProps { diff --git a/apps/website/components/profile/LiveryGallery.tsx b/apps/website/components/profile/LiveryGallery.tsx index 69f0e0082..ceeadccef 100644 --- a/apps/website/components/profile/LiveryGallery.tsx +++ b/apps/website/components/profile/LiveryGallery.tsx @@ -1,10 +1,10 @@ 'use client'; -import React from 'react'; -import { Grid } from '@/ui/Grid'; import { LiveryCard } from '@/components/drivers/LiveryCard'; -import { ProfileSection } from './ProfileSection'; import { ProfileLiveryViewData } from '@/lib/view-data/ProfileLiveriesViewData'; +import { Grid } from '@/ui/primitives/Grid'; +import React from 'react'; +import { ProfileSection } from './ProfileSection'; interface LiveryGalleryProps { liveries: ProfileLiveryViewData[]; diff --git a/apps/website/components/profile/MembershipPanel.tsx b/apps/website/components/profile/MembershipPanel.tsx index cd22f1be3..a74282243 100644 --- a/apps/website/components/profile/MembershipPanel.tsx +++ b/apps/website/components/profile/MembershipPanel.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; -import { Text } from '@/ui/Text'; import { LeagueListItem } from '@/components/leagues/LeagueListItem'; +import { Card } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { ProfileSection } from './ProfileSection'; interface League { diff --git a/apps/website/components/profile/PreferencesPanel.tsx b/apps/website/components/profile/PreferencesPanel.tsx index ff29401b2..1d2e9da87 100644 --- a/apps/website/components/profile/PreferencesPanel.tsx +++ b/apps/website/components/profile/PreferencesPanel.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; import { Toggle } from '@/ui/Toggle'; interface PreferencesPanelProps { diff --git a/apps/website/components/profile/ProfileDetailsPanel.tsx b/apps/website/components/profile/ProfileDetailsPanel.tsx index ad5eaa9ba..8b281060c 100644 --- a/apps/website/components/profile/ProfileDetailsPanel.tsx +++ b/apps/website/components/profile/ProfileDetailsPanel.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Input } from '@/ui/Input'; -import { TextArea } from '@/ui/TextArea'; import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { TextArea } from '@/ui/TextArea'; interface ProfileDetailsPanelProps { driver: { diff --git a/apps/website/components/profile/ProfileHeader.tsx b/apps/website/components/profile/ProfileHeader.tsx index ea21c7ea4..1adea6c4a 100644 --- a/apps/website/components/profile/ProfileHeader.tsx +++ b/apps/website/components/profile/ProfileHeader.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; import { mediaConfig } from '@/lib/config/mediaConfig'; import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Image } from '@/ui/Image'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; import { Calendar, Globe, Star, Trophy, UserPlus } from 'lucide-react'; diff --git a/apps/website/components/profile/ProfileNavTabs.tsx b/apps/website/components/profile/ProfileNavTabs.tsx index 1fd66fab6..646d56efe 100644 --- a/apps/website/components/profile/ProfileNavTabs.tsx +++ b/apps/website/components/profile/ProfileNavTabs.tsx @@ -1,7 +1,6 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; export type ProfileTab = 'overview' | 'history' | 'stats' | 'leagues' | 'liveries' | 'settings'; diff --git a/apps/website/components/profile/ProfileSection.tsx b/apps/website/components/profile/ProfileSection.tsx index 980a41fa3..dc6046e89 100644 --- a/apps/website/components/profile/ProfileSection.tsx +++ b/apps/website/components/profile/ProfileSection.tsx @@ -1,9 +1,9 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import React from 'react'; interface ProfileSectionProps { title: string; diff --git a/apps/website/components/profile/ProfileSettingsPanel.tsx b/apps/website/components/profile/ProfileSettingsPanel.tsx index f8601f0c9..28e974fee 100644 --- a/apps/website/components/profile/ProfileSettingsPanel.tsx +++ b/apps/website/components/profile/ProfileSettingsPanel.tsx @@ -1,15 +1,15 @@ 'use client'; -import React, { useState } from 'react'; -import { Card } from '@/ui/Card'; import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Heading } from '@/ui/Heading'; -import { Stack } from '@/ui/Stack'; -import { Select } from '@/ui/Select'; -import { Toggle } from '@/ui/Toggle'; -import { TextArea } from '@/ui/TextArea'; +import { Card } from '@/ui/Card'; import { Checkbox } from '@/ui/Checkbox'; +import { Heading } from '@/ui/Heading'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Select } from '@/ui/Select'; +import { TextArea } from '@/ui/TextArea'; +import { Toggle } from '@/ui/Toggle'; +import React, { useState } from 'react'; import { ProfileSection } from './ProfileSection'; interface ProfileSettingsPanelProps { diff --git a/apps/website/components/profile/SessionHistoryTable.tsx b/apps/website/components/profile/SessionHistoryTable.tsx index 4b59ccfc5..fe74fec2b 100644 --- a/apps/website/components/profile/SessionHistoryTable.tsx +++ b/apps/website/components/profile/SessionHistoryTable.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; -import { Text } from '@/ui/Text'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; -import { Trophy, Calendar } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { Calendar, Trophy } from 'lucide-react'; interface SessionResult { id: string; diff --git a/apps/website/components/profile/SponsorshipRequestsPanel.tsx b/apps/website/components/profile/SponsorshipRequestsPanel.tsx index c6e2dbcf8..1fd67fd31 100644 --- a/apps/website/components/profile/SponsorshipRequestsPanel.tsx +++ b/apps/website/components/profile/SponsorshipRequestsPanel.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Card , Card as Surface } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { DateDisplay } from '@/lib/display-objects/DateDisplay'; +import { Button } from '@/ui/Button'; +import { Card, Card as Surface } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { ProfileSection } from './ProfileSection'; interface Request { diff --git a/apps/website/components/profile/UserPill.tsx b/apps/website/components/profile/UserPill.tsx index dfae52dd6..c8a151f8a 100644 --- a/apps/website/components/profile/UserPill.tsx +++ b/apps/website/components/profile/UserPill.tsx @@ -1,28 +1,28 @@ 'use client'; -import React, { useEffect, useMemo, useState } from 'react'; -import { AnimatePresence, motion } from 'framer-motion'; -import { - BarChart3, - ChevronDown, - CreditCard, - Handshake, - LogOut, - Megaphone, - Paintbrush, - Settings, - Shield -} from 'lucide-react'; import { useAuth } from '@/components/auth/AuthContext'; -import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; -import { DriverViewModel as DriverViewModelClass } from '@/lib/view-models/DriverViewModel'; import { useFindDriverById } from '@/hooks/driver/useFindDriverById'; +import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; import { routes } from '@/lib/routing/RouteConfig'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; +import { DriverViewModel as DriverViewModelClass } from '@/lib/view-models/DriverViewModel'; import { Icon } from '@/ui/Icon'; -import { Link } from '@/ui/Link'; import { Image } from '@/ui/Image'; +import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { AnimatePresence, motion } from 'framer-motion'; +import { + BarChart3, + ChevronDown, + CreditCard, + Handshake, + LogOut, + Megaphone, + Paintbrush, + Settings, + Shield +} from 'lucide-react'; +import { useEffect, useMemo, useState } from 'react'; // Hook to detect demo user mode based on session function useDemoUserMode(): { isDemo: boolean; demoRole: string | null } { diff --git a/apps/website/components/races/FileProtestModal.tsx b/apps/website/components/races/FileProtestModal.tsx index ee9c95bca..0775af54e 100644 --- a/apps/website/components/races/FileProtestModal.tsx +++ b/apps/website/components/races/FileProtestModal.tsx @@ -1,20 +1,20 @@ 'use client'; -import { useState } from 'react'; -import { Modal } from '@/ui/Modal'; +import { useFileProtest } from "@/hooks/race/useFileProtest"; import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; import { InfoBox } from '@/ui/InfoBox'; import { Input } from '@/ui/Input'; -import { TextArea } from '@/ui/TextArea'; +import { Modal } from '@/ui/Modal'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; -import { useFileProtest } from "@/hooks/race/useFileProtest"; +import { Text } from '@/ui/Text'; +import { TextArea } from '@/ui/TextArea'; import { - AlertTriangle, - CheckCircle2, + AlertTriangle, + CheckCircle2, } from 'lucide-react'; +import { useState } from 'react'; export interface ProtestParticipant { id: string; diff --git a/apps/website/components/races/FinishDistributionChart.tsx b/apps/website/components/races/FinishDistributionChart.tsx index 17ae1a28f..d99f1d753 100644 --- a/apps/website/components/races/FinishDistributionChart.tsx +++ b/apps/website/components/races/FinishDistributionChart.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface FinishDistributionProps { diff --git a/apps/website/components/races/ImportResultsForm.tsx b/apps/website/components/races/ImportResultsForm.tsx index cb2e53420..a7b6f896b 100644 --- a/apps/website/components/races/ImportResultsForm.tsx +++ b/apps/website/components/races/ImportResultsForm.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { useState } from 'react'; -import { AlertCircle } from 'lucide-react'; import { useInject } from '@/lib/di/hooks/useInject'; import { RACE_RESULTS_SERVICE_TOKEN } from '@/lib/di/tokens'; import { FilePicker } from '@/ui/FilePicker'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { InfoBox } from '@/ui/InfoBox'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertCircle } from 'lucide-react'; +import React, { useState } from 'react'; interface ImportResultsFormProps { raceId: string; diff --git a/apps/website/components/races/LatestResultsSidebar.tsx b/apps/website/components/races/LatestResultsSidebar.tsx index 0ef873aab..a27bdfc43 100644 --- a/apps/website/components/races/LatestResultsSidebar.tsx +++ b/apps/website/components/races/LatestResultsSidebar.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Heading } from '@/ui/Heading'; import { RaceResultList } from '@/components/races/RaceResultList'; import { RaceSummaryItem } from '@/components/races/RaceSummaryItem'; -import { Box } from '@/ui/Box'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; type RaceWithResults = { raceId: string; diff --git a/apps/website/components/races/LiveRaceBanner.tsx b/apps/website/components/races/LiveRaceBanner.tsx index 74f9c49fd..a9a39a315 100644 --- a/apps/website/components/races/LiveRaceBanner.tsx +++ b/apps/website/components/races/LiveRaceBanner.tsx @@ -1,7 +1,7 @@ -import { Box } from '@/ui/Box'; import { LiveRaceItem } from '@/components/races/LiveRaceItem'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface LiveRaceBannerProps { diff --git a/apps/website/components/races/LiveRaceItem.tsx b/apps/website/components/races/LiveRaceItem.tsx index 51b80c6e0..a1947842d 100644 --- a/apps/website/components/races/LiveRaceItem.tsx +++ b/apps/website/components/races/LiveRaceItem.tsx @@ -1,10 +1,10 @@ -import { ChevronRight, PlayCircle } from 'lucide-react'; -import { Box } from '@/ui/Box'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; +import { ChevronRight, PlayCircle } from 'lucide-react'; interface LiveRaceItemProps { track: string; diff --git a/apps/website/components/races/LiveRacesBanner.tsx b/apps/website/components/races/LiveRacesBanner.tsx index 4096bd91a..0aadfe221 100644 --- a/apps/website/components/races/LiveRacesBanner.tsx +++ b/apps/website/components/races/LiveRacesBanner.tsx @@ -1,8 +1,8 @@ -import type { RaceViewData } from '@/lib/view-data/RacesViewData'; -import { Stack } from '@/ui/Stack'; import { LiveRaceItem } from '@/components/races/LiveRaceItem'; +import type { RaceViewData } from '@/lib/view-data/RacesViewData'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface LiveRacesBannerProps { diff --git a/apps/website/components/races/NextRaceCard.tsx b/apps/website/components/races/NextRaceCard.tsx index 97ff366d0..ed445d151 100644 --- a/apps/website/components/races/NextRaceCard.tsx +++ b/apps/website/components/races/NextRaceCard.tsx @@ -1,14 +1,14 @@ -import { Calendar, ChevronRight, Clock } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; +import { Calendar, ChevronRight, Clock } from 'lucide-react'; interface NextRaceCardProps { track: string; diff --git a/apps/website/components/races/PenaltyFAB.tsx b/apps/website/components/races/PenaltyFAB.tsx index 8d81fdc45..58c4427da 100644 --- a/apps/website/components/races/PenaltyFAB.tsx +++ b/apps/website/components/races/PenaltyFAB.tsx @@ -1,8 +1,8 @@ -import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Plus } from 'lucide-react'; interface PenaltyFABProps { diff --git a/apps/website/components/races/PenaltyRow.tsx b/apps/website/components/races/PenaltyRow.tsx index a3d6b2ec8..f6a3d0b94 100644 --- a/apps/website/components/races/PenaltyRow.tsx +++ b/apps/website/components/races/PenaltyRow.tsx @@ -1,8 +1,8 @@ import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; interface PenaltyRowProps { diff --git a/apps/website/components/races/PointsTable.tsx b/apps/website/components/races/PointsTable.tsx index 5abc032a2..2f9ecd2a9 100644 --- a/apps/website/components/races/PointsTable.tsx +++ b/apps/website/components/races/PointsTable.tsx @@ -1,9 +1,8 @@ -import React from 'react'; import { Card } from '@/ui/Card'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; +import { Box } from '@/ui/primitives/Box'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; interface PointsTableProps { title?: string; diff --git a/apps/website/components/races/RaceActionBar.tsx b/apps/website/components/races/RaceActionBar.tsx index 9c064b4d4..ed9383a12 100644 --- a/apps/website/components/races/RaceActionBar.tsx +++ b/apps/website/components/races/RaceActionBar.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; -import { Trophy, Scale, LogOut, CheckCircle, XCircle, PlayCircle } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { CheckCircle, LogOut, PlayCircle, Scale, Trophy, XCircle } from 'lucide-react'; interface RaceActionBarProps { status: 'scheduled' | 'running' | 'completed' | 'cancelled' | string; diff --git a/apps/website/components/races/RaceCard.tsx b/apps/website/components/races/RaceCard.tsx index f8e01e989..a8453c731 100644 --- a/apps/website/components/races/RaceCard.tsx +++ b/apps/website/components/races/RaceCard.tsx @@ -1,13 +1,13 @@ 'use client'; -import { ArrowRight, Car, ChevronRight, LucideIcon, Trophy, Zap } from 'lucide-react'; +import { routes } from '@/lib/routing/RouteConfig'; +import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; -import { routes } from '@/lib/routing/RouteConfig'; +import { ArrowRight, Car, ChevronRight, LucideIcon, Trophy, Zap } from 'lucide-react'; interface RaceCardProps { track: string; diff --git a/apps/website/components/races/RaceDetailCard.tsx b/apps/website/components/races/RaceDetailCard.tsx index 51398767f..f7d2f667e 100644 --- a/apps/website/components/races/RaceDetailCard.tsx +++ b/apps/website/components/races/RaceDetailCard.tsx @@ -1,10 +1,10 @@ import { Card } from '@/ui/Card'; -import { Grid } from '@/ui/Grid'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; import { StatGridItem } from '@/ui/StatGridItem'; import { Flag } from 'lucide-react'; diff --git a/apps/website/components/races/RaceDetailsHeader.tsx b/apps/website/components/races/RaceDetailsHeader.tsx index 896b0f043..5af00303e 100644 --- a/apps/website/components/races/RaceDetailsHeader.tsx +++ b/apps/website/components/races/RaceDetailsHeader.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { ChevronLeft, Calendar, MapPin } from 'lucide-react'; import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; +import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/primitives/Stack'; +import { Calendar, ChevronLeft, MapPin } from 'lucide-react'; import { SessionStatusBadge, type SessionStatus } from './SessionStatusBadge'; interface RaceDetailsHeaderProps { diff --git a/apps/website/components/races/RaceEntryList.tsx b/apps/website/components/races/RaceEntryList.tsx index a60526b96..d1bf3ca93 100644 --- a/apps/website/components/races/RaceEntryList.tsx +++ b/apps/website/components/races/RaceEntryList.tsx @@ -1,10 +1,10 @@ -import { Card , Card as Surface } from '@/ui/Card'; import { DriverEntryRow } from '@/components/drivers/DriverEntryRow'; +import { Card, Card as Surface } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Users } from 'lucide-react'; diff --git a/apps/website/components/races/RaceFilterBar.tsx b/apps/website/components/races/RaceFilterBar.tsx index 48b2734cf..e1fb9037b 100644 --- a/apps/website/components/races/RaceFilterBar.tsx +++ b/apps/website/components/races/RaceFilterBar.tsx @@ -5,7 +5,7 @@ import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { FilterGroup } from '@/ui/FilterGroup'; import { Select } from '@/ui/Select'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; interface RaceFilterBarProps { timeFilter: TimeFilter; diff --git a/apps/website/components/races/RaceFilterModal.tsx b/apps/website/components/races/RaceFilterModal.tsx index 47fbc6ae1..580923637 100644 --- a/apps/website/components/races/RaceFilterModal.tsx +++ b/apps/website/components/races/RaceFilterModal.tsx @@ -1,10 +1,10 @@ 'use client'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; import { Modal } from '@/ui/Modal'; +import { Stack } from '@/ui/primitives/Stack'; import { Select } from '@/ui/Select'; import { Text } from '@/ui/Text'; import { Filter, Search } from 'lucide-react'; diff --git a/apps/website/components/races/RaceHeaderPanel.tsx b/apps/website/components/races/RaceHeaderPanel.tsx index 433ada2d8..cd58b5447 100644 --- a/apps/website/components/races/RaceHeaderPanel.tsx +++ b/apps/website/components/races/RaceHeaderPanel.tsx @@ -1,9 +1,9 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { RaceStatusBadge } from './RaceStatusBadge'; import { Icon } from '@/ui/Icon'; -import { Calendar, MapPin, Car } from 'lucide-react'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Calendar, Car, MapPin } from 'lucide-react'; +import React from 'react'; +import { RaceStatusBadge } from './RaceStatusBadge'; interface RaceHeaderPanelProps { track: string; @@ -43,7 +43,7 @@ export function RaceHeaderPanel({ /> - + {/* Info */} @@ -83,7 +83,7 @@ export function RaceHeaderPanel({ {/* Actions */} {actions && ( - + {actions} )} diff --git a/apps/website/components/races/RaceHero.tsx b/apps/website/components/races/RaceHero.tsx index 66d7cd5f8..10deb137a 100644 --- a/apps/website/components/races/RaceHero.tsx +++ b/apps/website/components/races/RaceHero.tsx @@ -1,12 +1,12 @@ -import { Calendar, Car, Clock, LucideIcon } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; import { Hero } from '@/ui/Hero'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { Calendar, Car, Clock, LucideIcon } from 'lucide-react'; interface RaceHeroProps { track: string; diff --git a/apps/website/components/races/RaceJoinButton.tsx b/apps/website/components/races/RaceJoinButton.tsx index b4a3b7c1c..88b452b78 100644 --- a/apps/website/components/races/RaceJoinButton.tsx +++ b/apps/website/components/races/RaceJoinButton.tsx @@ -3,7 +3,7 @@ import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; import { InfoBanner } from '@/ui/InfoBanner'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { CheckCircle2, PlayCircle, UserMinus, UserPlus, XCircle } from 'lucide-react'; interface RaceJoinButtonProps { diff --git a/apps/website/components/races/RaceList.tsx b/apps/website/components/races/RaceList.tsx index 9c6384d7e..1b71d53e1 100644 --- a/apps/website/components/races/RaceList.tsx +++ b/apps/website/components/races/RaceList.tsx @@ -1,12 +1,12 @@ +import { RaceListItem } from '@/components/races/RaceListItem'; import { routes } from '@/lib/routing/RouteConfig'; import type { RaceViewData } from '@/lib/view-data/RacesViewData'; -import { Stack } from '@/ui/Stack'; import { Card } from '@/ui/Card'; import { DateHeader } from '@/ui/DateHeader'; import { Icon } from '@/ui/Icon'; -import { RaceListItem } from '@/components/races/RaceListItem'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Calendar, CheckCircle2, Clock, PlayCircle, XCircle } from 'lucide-react'; diff --git a/apps/website/components/races/RaceListItem.tsx b/apps/website/components/races/RaceListItem.tsx index 21e66944d..2aea3cd55 100644 --- a/apps/website/components/races/RaceListItem.tsx +++ b/apps/website/components/races/RaceListItem.tsx @@ -1,12 +1,12 @@ 'use client'; -import { ArrowRight, Car, ChevronRight, LucideIcon, Trophy, Zap } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { ArrowRight, Car, ChevronRight, LucideIcon, Trophy, Zap } from 'lucide-react'; interface RaceListItemProps { track: string; diff --git a/apps/website/components/races/RacePageHeader.tsx b/apps/website/components/races/RacePageHeader.tsx index 3c4d95412..10cb60847 100644 --- a/apps/website/components/races/RacePageHeader.tsx +++ b/apps/website/components/races/RacePageHeader.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Flag, CalendarDays, Clock, Zap, Trophy, LucideIcon } from 'lucide-react'; import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; -import { Grid } from '@/ui/Grid'; -import { Surface } from '@/ui/Surface'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { CalendarDays, Clock, Flag, LucideIcon, Trophy, Zap } from 'lucide-react'; interface RacePageHeaderProps { totalCount: number; diff --git a/apps/website/components/races/RaceResultCard.tsx b/apps/website/components/races/RaceResultCard.tsx index 4310d21ab..59e50ffba 100644 --- a/apps/website/components/races/RaceResultCard.tsx +++ b/apps/website/components/races/RaceResultCard.tsx @@ -1,12 +1,12 @@ 'use client'; -import { ChevronRight } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; +import { routes } from '@/lib/routing/RouteConfig'; import { Card } from '@/ui/Card'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; -import { routes } from '@/lib/routing/RouteConfig'; +import { ChevronRight } from 'lucide-react'; interface RaceResultCardProps { raceId: string; diff --git a/apps/website/components/races/RaceResultHero.tsx b/apps/website/components/races/RaceResultHero.tsx index 8a5a125f4..829801f14 100644 --- a/apps/website/components/races/RaceResultHero.tsx +++ b/apps/website/components/races/RaceResultHero.tsx @@ -1,11 +1,11 @@ -import { Trophy } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; import { DecorativeBlur } from '@/ui/DecorativeBlur'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; +import { Trophy } from 'lucide-react'; interface RaceResultHeroProps { position: number; diff --git a/apps/website/components/races/RaceResultList.tsx b/apps/website/components/races/RaceResultList.tsx index f6d3c2c27..1a558dcb6 100644 --- a/apps/website/components/races/RaceResultList.tsx +++ b/apps/website/components/races/RaceResultList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface RaceResultListProps { children: ReactNode; diff --git a/apps/website/components/races/RaceResultRow.tsx b/apps/website/components/races/RaceResultRow.tsx index 4a33e6ae1..070c71bb6 100644 --- a/apps/website/components/races/RaceResultRow.tsx +++ b/apps/website/components/races/RaceResultRow.tsx @@ -1,9 +1,9 @@ import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; -import { Stack } from '@/ui/Stack'; import { Image } from '@/ui/Image'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; interface ResultEntry { diff --git a/apps/website/components/races/RaceResultsHeader.tsx b/apps/website/components/races/RaceResultsHeader.tsx index c0724da43..29c3967e0 100644 --- a/apps/website/components/races/RaceResultsHeader.tsx +++ b/apps/website/components/races/RaceResultsHeader.tsx @@ -2,7 +2,7 @@ import { Icon } from '@/ui/Icon'; import { PageHero } from '@/ui/PageHero'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Calendar, Trophy, Users, Zap } from 'lucide-react'; diff --git a/apps/website/components/races/RaceResultsTable.tsx b/apps/website/components/races/RaceResultsTable.tsx index ffc180444..b80f15aed 100644 --- a/apps/website/components/races/RaceResultsTable.tsx +++ b/apps/website/components/races/RaceResultsTable.tsx @@ -1,13 +1,13 @@ -import { AlertTriangle, ExternalLink } from 'lucide-react'; -import { ReactNode } from 'react'; +import { Badge } from '@/ui/Badge'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; -import { Badge } from '@/ui/Badge'; +import { AlertTriangle, ExternalLink } from 'lucide-react'; +import { ReactNode } from 'react'; type PenaltyTypeDTO = | 'time_penalty' diff --git a/apps/website/components/races/RaceSidebar.tsx b/apps/website/components/races/RaceSidebar.tsx index 74b4e0b4b..7c91ad39d 100644 --- a/apps/website/components/races/RaceSidebar.tsx +++ b/apps/website/components/races/RaceSidebar.tsx @@ -1,14 +1,13 @@ -import React from 'react'; -import { Clock, Trophy, Users } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Card } from '@/ui/Card'; -import { Icon } from '@/ui/Icon'; import { SidebarRaceItem } from '@/components/races/SidebarRaceItem'; -import { SidebarActionLink } from '@/ui/SidebarActionLink'; -import type { RaceViewData } from '@/lib/view-data/RacesViewData'; import { routes } from '@/lib/routing/RouteConfig'; +import type { RaceViewData } from '@/lib/view-data/RacesViewData'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { SidebarActionLink } from '@/ui/SidebarActionLink'; +import { Text } from '@/ui/Text'; +import { Clock, Trophy, Users } from 'lucide-react'; interface RaceSidebarProps { upcomingRaces: RaceViewData[]; diff --git a/apps/website/components/races/RaceSidebarPanel.tsx b/apps/website/components/races/RaceSidebarPanel.tsx index bdf77bf06..64a92d158 100644 --- a/apps/website/components/races/RaceSidebarPanel.tsx +++ b/apps/website/components/races/RaceSidebarPanel.tsx @@ -1,8 +1,8 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { LucideIcon } from 'lucide-react'; +import React from 'react'; interface RaceSidebarPanelProps { title: string; diff --git a/apps/website/components/races/RaceStats.tsx b/apps/website/components/races/RaceStats.tsx index d6bd0f5dc..5a2c849ca 100644 --- a/apps/website/components/races/RaceStats.tsx +++ b/apps/website/components/races/RaceStats.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { CalendarDays, Clock, Zap, Trophy } from 'lucide-react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { StatGridItem } from '@/ui/StatGridItem'; +import { CalendarDays, Clock, Trophy, Zap } from 'lucide-react'; interface RaceStatsProps { stats: { diff --git a/apps/website/components/races/RaceStatusBadge.tsx b/apps/website/components/races/RaceStatusBadge.tsx index c3aa542c1..77f664f52 100644 --- a/apps/website/components/races/RaceStatusBadge.tsx +++ b/apps/website/components/races/RaceStatusBadge.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; interface RaceStatusBadgeProps { status: 'scheduled' | 'running' | 'completed' | 'cancelled' | string; diff --git a/apps/website/components/races/RaceStewardingStats.tsx b/apps/website/components/races/RaceStewardingStats.tsx index a6efef2ad..4370bad65 100644 --- a/apps/website/components/races/RaceStewardingStats.tsx +++ b/apps/website/components/races/RaceStewardingStats.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { CheckCircle, Clock, Gavel } from 'lucide-react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { StatGridItem } from '@/ui/StatGridItem'; +import { CheckCircle, Clock, Gavel } from 'lucide-react'; interface RaceStewardingStatsProps { pendingCount: number; diff --git a/apps/website/components/races/RaceSummaryItem.tsx b/apps/website/components/races/RaceSummaryItem.tsx index 612351edd..2fbf68cbb 100644 --- a/apps/website/components/races/RaceSummaryItem.tsx +++ b/apps/website/components/races/RaceSummaryItem.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface RaceSummaryItemProps { diff --git a/apps/website/components/races/SessionSummaryPanel.tsx b/apps/website/components/races/SessionSummaryPanel.tsx index 4e8ea0344..6531ac950 100644 --- a/apps/website/components/races/SessionSummaryPanel.tsx +++ b/apps/website/components/races/SessionSummaryPanel.tsx @@ -1,8 +1,7 @@ -import React from 'react'; import { Panel } from '@/ui/Panel'; -import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { StatusDot } from '@/ui/StatusDot'; +import { Text } from '@/ui/Text'; interface SessionSummaryPanelProps { title: string; diff --git a/apps/website/components/races/SidebarRaceItem.tsx b/apps/website/components/races/SidebarRaceItem.tsx index d1d278aa3..6f773c24b 100644 --- a/apps/website/components/races/SidebarRaceItem.tsx +++ b/apps/website/components/races/SidebarRaceItem.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { ChevronRight } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; +import { ChevronRight } from 'lucide-react'; interface SidebarRaceItemProps { race: { diff --git a/apps/website/components/races/StandingsItem.tsx b/apps/website/components/races/StandingsItem.tsx index 0130db80b..3636c4b13 100644 --- a/apps/website/components/races/StandingsItem.tsx +++ b/apps/website/components/races/StandingsItem.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; import { Badge } from '@/ui/Badge'; -import { Grid } from '@/ui/Grid'; -import { StatItem } from '@/ui/StatItem'; import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { StatItem } from '@/ui/StatItem'; interface StandingsItemProps { leagueName: string; diff --git a/apps/website/components/races/StandingsList.tsx b/apps/website/components/races/StandingsList.tsx index a526e3807..eb2b15ac9 100644 --- a/apps/website/components/races/StandingsList.tsx +++ b/apps/website/components/races/StandingsList.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { StandingsItem } from './StandingsItem'; interface Standing { diff --git a/apps/website/components/races/TelemetryLine.tsx b/apps/website/components/races/TelemetryLine.tsx index 20acd2041..b840d304f 100644 --- a/apps/website/components/races/TelemetryLine.tsx +++ b/apps/website/components/races/TelemetryLine.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; interface TelemetryLineProps { color?: 'primary' | 'aqua' | 'amber' | 'green' | 'red'; diff --git a/apps/website/components/races/TelemetryStrip.tsx b/apps/website/components/races/TelemetryStrip.tsx index e666a8f6a..4ce196996 100644 --- a/apps/website/components/races/TelemetryStrip.tsx +++ b/apps/website/components/races/TelemetryStrip.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface TelemetryItem { diff --git a/apps/website/components/races/TrackConditionsPanel.tsx b/apps/website/components/races/TrackConditionsPanel.tsx index d3b974561..c863b400e 100644 --- a/apps/website/components/races/TrackConditionsPanel.tsx +++ b/apps/website/components/races/TrackConditionsPanel.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Thermometer, Wind, Droplets, Sun, type LucideIcon } from 'lucide-react'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; +import { Text } from '@/ui/Text'; +import { Stack } from '@/ui/primitives/Stack'; +import { Droplets, Sun, Thermometer, Wind, type LucideIcon } from 'lucide-react'; interface TrackConditionsPanelProps { airTemp: string; diff --git a/apps/website/components/races/TrackImage.tsx b/apps/website/components/races/TrackImage.tsx index c2ef4bec4..64b5f17cd 100644 --- a/apps/website/components/races/TrackImage.tsx +++ b/apps/website/components/races/TrackImage.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; import { Image } from '@/ui/Image'; import { ImagePlaceholder } from '@/ui/ImagePlaceholder'; +import { Box } from '@/ui/primitives/Box'; export interface TrackImageProps { trackId?: string; diff --git a/apps/website/components/races/UpcomingRaceItem.tsx b/apps/website/components/races/UpcomingRaceItem.tsx index dd6ce410b..cc5eb7747 100644 --- a/apps/website/components/races/UpcomingRaceItem.tsx +++ b/apps/website/components/races/UpcomingRaceItem.tsx @@ -1,8 +1,8 @@ import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; interface UpcomingRaceItemProps { diff --git a/apps/website/components/races/UpcomingRaces.tsx b/apps/website/components/races/UpcomingRaces.tsx index 7ecf514a6..20aaa5315 100644 --- a/apps/website/components/races/UpcomingRaces.tsx +++ b/apps/website/components/races/UpcomingRaces.tsx @@ -1,15 +1,15 @@ +import { UpcomingRaceItem } from '@/components/races/UpcomingRaceItem'; +import { UpcomingRacesList } from '@/components/races/UpcomingRacesList'; +import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; import { routes } from '@/lib/routing/RouteConfig'; import { Card } from '@/ui/Card'; -import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; -import { UpcomingRaceItem } from '@/components/races/UpcomingRaceItem'; -import { UpcomingRacesList } from '@/components/races/UpcomingRacesList'; import { Calendar } from 'lucide-react'; interface UpcomingRace { diff --git a/apps/website/components/races/UpcomingRacesList.tsx b/apps/website/components/races/UpcomingRacesList.tsx index 7c5d4af99..90e19bcd7 100644 --- a/apps/website/components/races/UpcomingRacesList.tsx +++ b/apps/website/components/races/UpcomingRacesList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface UpcomingRacesListProps { children: ReactNode; diff --git a/apps/website/components/races/UpcomingRacesSidebar.tsx b/apps/website/components/races/UpcomingRacesSidebar.tsx index 443eafe92..abd81e27b 100644 --- a/apps/website/components/races/UpcomingRacesSidebar.tsx +++ b/apps/website/components/races/UpcomingRacesSidebar.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; import { RaceSummaryItem } from '@/components/races/RaceSummaryItem'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; type UpcomingRace = { id: string; diff --git a/apps/website/components/shared/state/EmptyState.tsx b/apps/website/components/shared/state/EmptyState.tsx index dcf8aba82..3df0abee3 100644 --- a/apps/website/components/shared/state/EmptyState.tsx +++ b/apps/website/components/shared/state/EmptyState.tsx @@ -1,9 +1,9 @@ import { Button } from '@/ui/Button'; -import { EmptyStateProps } from '@/ui/state-types'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; +import { EmptyStateProps } from '@/ui/state-types'; +import { Text } from '@/ui/Text'; import { Activity, Lock, Search } from 'lucide-react'; // Illustration components (simple SVG representations) diff --git a/apps/website/components/shared/state/ErrorDisplay.tsx b/apps/website/components/shared/state/ErrorDisplay.tsx index 100b5670a..5bee073ed 100644 --- a/apps/website/components/shared/state/ErrorDisplay.tsx +++ b/apps/website/components/shared/state/ErrorDisplay.tsx @@ -1,14 +1,14 @@ import { ApiError } from '@/lib/api/base/ApiError'; -import { AlertCircle, ArrowLeft, Home, RefreshCw } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { ErrorDisplayAction, ErrorDisplayProps } from '@/ui/state-types'; -import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; +import { AlertCircle, ArrowLeft, Box, Home, RefreshCw } from 'lucide-react'; export function ErrorDisplay({ error, diff --git a/apps/website/components/shared/state/LoadingWrapper.tsx b/apps/website/components/shared/state/LoadingWrapper.tsx index 6f5a535dc..d29acb765 100644 --- a/apps/website/components/shared/state/LoadingWrapper.tsx +++ b/apps/website/components/shared/state/LoadingWrapper.tsx @@ -1,8 +1,9 @@ -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { LoadingWrapperProps } from '@/ui/state-types'; import { Text } from '@/ui/Text'; +import { Box } from 'lucide-react'; /** * LoadingWrapper Component diff --git a/apps/website/components/shared/state/PageWrapper.tsx b/apps/website/components/shared/state/PageWrapper.tsx index 5ff872e3f..b4d15ae51 100644 --- a/apps/website/components/shared/state/PageWrapper.tsx +++ b/apps/website/components/shared/state/PageWrapper.tsx @@ -1,10 +1,10 @@ -import React, { ReactNode } from 'react'; -import { ApiError } from '@/lib/api/base/ApiError'; -import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; -import { ErrorDisplay } from '@/components/shared/state/ErrorDisplay'; import { EmptyState } from '@/components/shared/state/EmptyState'; -import { Box } from '@/ui/Box'; +import { ErrorDisplay } from '@/components/shared/state/ErrorDisplay'; +import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; +import { ApiError } from '@/lib/api/base/ApiError'; +import { Box } from '@/ui/primitives/Box'; import { Inbox, List, LucideIcon } from 'lucide-react'; +import React, { ReactNode } from 'react'; // ==================== PAGEWRAPPER TYPES ==================== diff --git a/apps/website/components/shared/state/StateContainer.tsx b/apps/website/components/shared/state/StateContainer.tsx index 2c72dfb08..af9f473b9 100644 --- a/apps/website/components/shared/state/StateContainer.tsx +++ b/apps/website/components/shared/state/StateContainer.tsx @@ -1,14 +1,13 @@ 'use client'; -import React from 'react'; -import { StateContainerProps, StateContainerConfig } from '@/ui/state-types'; -import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; -import { ErrorDisplay } from '@/components/shared/state/ErrorDisplay'; import { EmptyState } from '@/components/shared/state/EmptyState'; -import { Box } from '@/ui/Box'; +import { ErrorDisplay } from '@/components/shared/state/ErrorDisplay'; +import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; +import { StateContainerConfig, StateContainerProps } from '@/ui/state-types'; import { Text } from '@/ui/Text'; -import { Inbox, AlertCircle, Grid, List, LucideIcon } from 'lucide-react'; +import { AlertCircle, Grid, Inbox, List, LucideIcon } from 'lucide-react'; /** * StateContainer Component diff --git a/apps/website/components/shared/ux/ConfirmDialog.tsx b/apps/website/components/shared/ux/ConfirmDialog.tsx index 881eab366..ffbcfd9c2 100644 --- a/apps/website/components/shared/ux/ConfirmDialog.tsx +++ b/apps/website/components/shared/ux/ConfirmDialog.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { Modal } from '@/ui/Modal'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; import { Button } from '@/ui/Button'; -import { AlertCircle } from 'lucide-react'; +import { Heading } from '@/ui/Heading'; +import { Modal } from '@/ui/Modal'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertCircle, Box } from 'lucide-react'; interface ConfirmDialogProps { isOpen: boolean; diff --git a/apps/website/components/shared/ux/InlineNotice.tsx b/apps/website/components/shared/ux/InlineNotice.tsx index de29e0729..5531b25dd 100644 --- a/apps/website/components/shared/ux/InlineNotice.tsx +++ b/apps/website/components/shared/ux/InlineNotice.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; -import { AlertCircle, CheckCircle, Info, AlertTriangle } from 'lucide-react'; +import { AlertCircle, AlertTriangle, Box, CheckCircle, Info } from 'lucide-react'; interface InlineNoticeProps { variant?: 'info' | 'success' | 'warning' | 'error'; diff --git a/apps/website/components/shared/ux/ProgressLine.tsx b/apps/website/components/shared/ux/ProgressLine.tsx index 93fcbaceb..c1b81e20e 100644 --- a/apps/website/components/shared/ux/ProgressLine.tsx +++ b/apps/website/components/shared/ux/ProgressLine.tsx @@ -1,8 +1,7 @@ 'use client'; -import React from 'react'; +import { Box } from '@/ui/primitives/Box'; import { motion } from 'framer-motion'; -import { Box } from '@/ui/Box'; interface ProgressLineProps { isLoading: boolean; diff --git a/apps/website/components/shared/ux/Toast.tsx b/apps/website/components/shared/ux/Toast.tsx index 81ee03ba0..b86384134 100644 --- a/apps/website/components/shared/ux/Toast.tsx +++ b/apps/website/components/shared/ux/Toast.tsx @@ -1,11 +1,11 @@ 'use client'; -import React, { useState, createContext, useContext } from 'react'; -import { motion, AnimatePresence } from 'framer-motion'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { CheckCircle, AlertCircle, Info, X } from 'lucide-react'; import { IconButton } from '@/ui/IconButton'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AnimatePresence, motion } from 'framer-motion'; +import { AlertCircle, CheckCircle, Info, X } from 'lucide-react'; +import React, { createContext, useContext, useState } from 'react'; interface Toast { id: string; diff --git a/apps/website/components/social/FriendItem.tsx b/apps/website/components/social/FriendItem.tsx index c0af598b1..5ebbe65fc 100644 --- a/apps/website/components/social/FriendItem.tsx +++ b/apps/website/components/social/FriendItem.tsx @@ -1,8 +1,8 @@ -import { Box } from '@/ui/Box'; import { Image } from '@/ui/Image'; -import { Surface } from '@/ui/Surface'; +import { Box } from '@/ui/primitives/Box'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; interface FriendItemProps { diff --git a/apps/website/components/social/FriendsList.tsx b/apps/website/components/social/FriendsList.tsx index 17436b7e8..d7217aa58 100644 --- a/apps/website/components/social/FriendsList.tsx +++ b/apps/website/components/social/FriendsList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface FriendsListProps { children: ReactNode; diff --git a/apps/website/components/social/FriendsPreview.tsx b/apps/website/components/social/FriendsPreview.tsx index 0d94a4537..c2c765719 100644 --- a/apps/website/components/social/FriendsPreview.tsx +++ b/apps/website/components/social/FriendsPreview.tsx @@ -1,17 +1,16 @@ 'use client'; -import React from 'react'; import { mediaConfig } from '@/lib/config/mediaConfig'; import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay'; -import { Stack } from '@/ui/Stack'; -import { Card , Card as Surface } from '@/ui/Card'; +import { routes } from '@/lib/routing/RouteConfig'; +import { Card, Card as Surface } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Users } from 'lucide-react'; -import { routes } from '@/lib/routing/RouteConfig'; interface Friend { id: string; diff --git a/apps/website/components/social/FriendsSidebar.tsx b/apps/website/components/social/FriendsSidebar.tsx index 9f93ef0f6..5f9a2d81f 100644 --- a/apps/website/components/social/FriendsSidebar.tsx +++ b/apps/website/components/social/FriendsSidebar.tsx @@ -1,14 +1,14 @@ -import { routes } from '@/lib/routing/RouteConfig'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; import { FriendItem } from '@/components/social/FriendItem'; import { FriendsList } from '@/components/social/FriendsList'; +import { routes } from '@/lib/routing/RouteConfig'; +import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { UserPlus, Users } from 'lucide-react'; diff --git a/apps/website/components/sponsors/BillingSummaryPanel.tsx b/apps/website/components/sponsors/BillingSummaryPanel.tsx index cfa4a2622..78e73562f 100644 --- a/apps/website/components/sponsors/BillingSummaryPanel.tsx +++ b/apps/website/components/sponsors/BillingSummaryPanel.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { LucideIcon } from 'lucide-react'; import { Grid } from '@/ui/Grid'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { LucideIcon } from 'lucide-react'; interface BillingStatProps { label: string; diff --git a/apps/website/components/sponsors/PendingSponsorshipRequests.tsx b/apps/website/components/sponsors/PendingSponsorshipRequests.tsx index 07b01d981..c9c1805c6 100644 --- a/apps/website/components/sponsors/PendingSponsorshipRequests.tsx +++ b/apps/website/components/sponsors/PendingSponsorshipRequests.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { useState } from 'react'; -import { Building } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { SponsorshipRequestItem } from '@/components/sponsors/SponsorshipRequestItem'; +import { Badge } from '@/ui/Badge'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Badge } from '@/ui/Badge'; -import { SponsorshipRequestItem } from '@/components/sponsors/SponsorshipRequestItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Building } from 'lucide-react'; +import { useState } from 'react'; export interface PendingRequestDTO { id: string; diff --git a/apps/website/components/sponsors/PricingTableShell.tsx b/apps/website/components/sponsors/PricingTableShell.tsx index 7105ef44e..f23955466 100644 --- a/apps/website/components/sponsors/PricingTableShell.tsx +++ b/apps/website/components/sponsors/PricingTableShell.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { Check, Info } from 'lucide-react'; export interface PricingTier { diff --git a/apps/website/components/sponsors/RenewalItem.tsx b/apps/website/components/sponsors/RenewalItem.tsx index e72b4504c..0543a658b 100644 --- a/apps/website/components/sponsors/RenewalItem.tsx +++ b/apps/website/components/sponsors/RenewalItem.tsx @@ -1,10 +1,10 @@ -import { LucideIcon } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { LucideIcon } from 'lucide-react'; interface RenewalItemProps { name: string; diff --git a/apps/website/components/sponsors/SponsorActivityItem.tsx b/apps/website/components/sponsors/SponsorActivityItem.tsx index 59a5a2fbb..d1b4a5fd5 100644 --- a/apps/website/components/sponsors/SponsorActivityItem.tsx +++ b/apps/website/components/sponsors/SponsorActivityItem.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface SponsorActivityItemProps { diff --git a/apps/website/components/sponsors/SponsorActivityPanel.tsx b/apps/website/components/sponsors/SponsorActivityPanel.tsx index 22dcd281c..76cbed14c 100644 --- a/apps/website/components/sponsors/SponsorActivityPanel.tsx +++ b/apps/website/components/sponsors/SponsorActivityPanel.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { LucideIcon, Clock } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Clock, LucideIcon } from 'lucide-react'; export interface Activity { id: string; diff --git a/apps/website/components/sponsors/SponsorBrandingPreview.tsx b/apps/website/components/sponsors/SponsorBrandingPreview.tsx index 1aedeab1d..5b029c9e0 100644 --- a/apps/website/components/sponsors/SponsorBrandingPreview.tsx +++ b/apps/website/components/sponsors/SponsorBrandingPreview.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Card , Card as Surface } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { SponsorLogo } from '@/components/sponsors/SponsorLogo'; +import { Card, Card as Surface } from '@/ui/Card'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; interface SponsorBrandingPreviewProps { name: string; diff --git a/apps/website/components/sponsors/SponsorContractCard.tsx b/apps/website/components/sponsors/SponsorContractCard.tsx index e2e818e75..11f78d75c 100644 --- a/apps/website/components/sponsors/SponsorContractCard.tsx +++ b/apps/website/components/sponsors/SponsorContractCard.tsx @@ -1,24 +1,23 @@ 'use client'; -import React from 'react'; +import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Button } from '@/ui/Button'; -import { - Trophy, - Users, - Car, - Flag, - Megaphone, - ChevronRight, - ExternalLink, - Calendar, - BarChart3 +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + BarChart3, + Calendar, + Car, + ChevronRight, + ExternalLink, + Flag, + Megaphone, + Trophy, + Users } from 'lucide-react'; -import { SponsorStatusChip, SponsorStatus } from './SponsorStatusChip'; +import { SponsorStatus, SponsorStatusChip } from './SponsorStatusChip'; export type SponsorshipType = 'league' | 'team' | 'driver' | 'race' | 'platform'; diff --git a/apps/website/components/sponsors/SponsorDashboardHeader.tsx b/apps/website/components/sponsors/SponsorDashboardHeader.tsx index de41a30d9..adbfb2dd1 100644 --- a/apps/website/components/sponsors/SponsorDashboardHeader.tsx +++ b/apps/website/components/sponsors/SponsorDashboardHeader.tsx @@ -1,20 +1,19 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; -import { - LayoutDashboard, - RefreshCw, - Settings, - Bell -} from 'lucide-react'; -import { Link } from '@/ui/Link'; import { routes } from '@/lib/routing/RouteConfig'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { + Bell, + LayoutDashboard, + RefreshCw, + Settings +} from 'lucide-react'; interface SponsorDashboardHeaderProps { sponsorName: string; diff --git a/apps/website/components/sponsors/SponsorHeaderPanel.tsx b/apps/website/components/sponsors/SponsorHeaderPanel.tsx index c534d283d..82ae2d3b2 100644 --- a/apps/website/components/sponsors/SponsorHeaderPanel.tsx +++ b/apps/website/components/sponsors/SponsorHeaderPanel.tsx @@ -1,10 +1,10 @@ -import React from 'react'; -import { LucideIcon } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; +import { LucideIcon } from 'lucide-react'; +import React from 'react'; interface SponsorHeaderPanelProps { icon: LucideIcon; diff --git a/apps/website/components/sponsors/SponsorHero.tsx b/apps/website/components/sponsors/SponsorHero.tsx index 44ca46333..ef7fd8c7e 100644 --- a/apps/website/components/sponsors/SponsorHero.tsx +++ b/apps/website/components/sponsors/SponsorHero.tsx @@ -1,12 +1,12 @@ +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; import { motion, useReducedMotion } from 'framer-motion'; import { Building2 } from 'lucide-react'; import { useEffect, useState } from 'react'; -import { Box } from '@/ui/Box'; -import { Heading } from '@/ui/Heading'; -import { Icon } from '@/ui/Icon'; -import { Text } from '@/ui/Text'; interface SponsorHeroProps { title: string; diff --git a/apps/website/components/sponsors/SponsorInsightsCard.tsx b/apps/website/components/sponsors/SponsorInsightsCard.tsx index f775ef018..e8632d835 100644 --- a/apps/website/components/sponsors/SponsorInsightsCard.tsx +++ b/apps/website/components/sponsors/SponsorInsightsCard.tsx @@ -1,18 +1,30 @@ 'use client'; -import React, { useCallback, useState } from 'react'; +import { SponsorMetricCard } from '@/components/sponsors/SponsorMetricCard'; +import { SponsorshipTierBadge } from '@/components/sponsors/SponsorshipTierBadge'; +import { SponsorSlotCard } from '@/components/sponsors/SponsorSlotCard'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { InfoBox } from '@/ui/InfoBox'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { - Activity, - Check, - Loader2, - MessageCircle, - Shield, - Target, - Users, - Zap, - Calendar, - LucideIcon + Activity, + Calendar, + Check, + Loader2, + LucideIcon, + MessageCircle, + Shield, + Target, + Users, + Zap } from 'lucide-react'; +import { useCallback, useState } from 'react'; +import { getEntityLabel, getSponsorshipTagline, getTierStyles } from './SponsorInsightsCardHelpers'; +import { SponsorMetric, SponsorshipSlot } from './SponsorInsightsCardTypes'; const ICON_MAP: Record = { users: Users, @@ -23,18 +35,6 @@ const ICON_MAP: Record = { target: Target, message: MessageCircle, }; -import { Button } from '@/ui/Button'; -import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Icon } from '@/ui/Icon'; -import { SponsorMetricCard } from '@/components/sponsors/SponsorMetricCard'; -import { SponsorSlotCard } from '@/components/sponsors/SponsorSlotCard'; -import { SponsorshipTierBadge } from '@/components/sponsors/SponsorshipTierBadge'; -import { InfoBox } from '@/ui/InfoBox'; -import { SponsorMetric, SponsorshipSlot } from './SponsorInsightsCardTypes'; -import { getTierStyles, getEntityLabel, getSponsorshipTagline } from './SponsorInsightsCardHelpers'; export type EntityType = 'league' | 'race' | 'driver' | 'team'; diff --git a/apps/website/components/sponsors/SponsorLogo.tsx b/apps/website/components/sponsors/SponsorLogo.tsx index 560376641..35af5c7fc 100644 --- a/apps/website/components/sponsors/SponsorLogo.tsx +++ b/apps/website/components/sponsors/SponsorLogo.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Image } from '@/ui/Image'; -import { Building2 } from 'lucide-react'; import { Icon } from '@/ui/Icon'; +import { Image } from '@/ui/Image'; +import { Box } from '@/ui/primitives/Box'; +import { Building2 } from 'lucide-react'; export interface SponsorLogoProps { sponsorId?: string; diff --git a/apps/website/components/sponsors/SponsorMetricCard.tsx b/apps/website/components/sponsors/SponsorMetricCard.tsx index 82b8c1048..e1d9ff9e4 100644 --- a/apps/website/components/sponsors/SponsorMetricCard.tsx +++ b/apps/website/components/sponsors/SponsorMetricCard.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; import { LucideIcon } from 'lucide-react'; interface SponsorMetricCardProps { diff --git a/apps/website/components/sponsors/SponsorPayoutQueueTable.tsx b/apps/website/components/sponsors/SponsorPayoutQueueTable.tsx index aed7b65cd..40c446da8 100644 --- a/apps/website/components/sponsors/SponsorPayoutQueueTable.tsx +++ b/apps/website/components/sponsors/SponsorPayoutQueueTable.tsx @@ -1,17 +1,16 @@ 'use client'; -import React from 'react'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; import { Badge } from '@/ui/Badge'; -import { - Clock, - CheckCircle2, - AlertCircle, - ArrowUpRight, - DollarSign +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { + AlertCircle, + ArrowUpRight, + CheckCircle2, + Clock, + DollarSign } from 'lucide-react'; export interface PayoutItem { diff --git a/apps/website/components/sponsors/SponsorSlotCard.tsx b/apps/website/components/sponsors/SponsorSlotCard.tsx index 129d30ae7..130d2a5c5 100644 --- a/apps/website/components/sponsors/SponsorSlotCard.tsx +++ b/apps/website/components/sponsors/SponsorSlotCard.tsx @@ -1,6 +1,6 @@ -import React, { ReactNode } from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; +import { ReactNode } from 'react'; interface SponsorSlotCardProps { title: string; diff --git a/apps/website/components/sponsors/SponsorStatusChip.tsx b/apps/website/components/sponsors/SponsorStatusChip.tsx index 0ccec6245..127d97445 100644 --- a/apps/website/components/sponsors/SponsorStatusChip.tsx +++ b/apps/website/components/sponsors/SponsorStatusChip.tsx @@ -1,16 +1,15 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; -import { - Check, - Clock, - ThumbsUp, - ThumbsDown, - XCircle, - AlertTriangle +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + AlertTriangle, + Check, + Clock, + ThumbsDown, + ThumbsUp, + XCircle } from 'lucide-react'; export type SponsorStatus = 'active' | 'pending' | 'approved' | 'declined' | 'expired' | 'warning'; diff --git a/apps/website/components/sponsors/SponsorTierCard.tsx b/apps/website/components/sponsors/SponsorTierCard.tsx index 7c907f8d1..b3cc5c3aa 100644 --- a/apps/website/components/sponsors/SponsorTierCard.tsx +++ b/apps/website/components/sponsors/SponsorTierCard.tsx @@ -1,12 +1,12 @@ -import { CheckCircle2, LucideIcon } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; +import { CheckCircle2, LucideIcon } from 'lucide-react'; interface SponsorTierCardProps { type: 'main' | 'secondary'; diff --git a/apps/website/components/sponsors/SponsorshipCategoryCard.tsx b/apps/website/components/sponsors/SponsorshipCategoryCard.tsx index 55d0ec412..8b61af49f 100644 --- a/apps/website/components/sponsors/SponsorshipCategoryCard.tsx +++ b/apps/website/components/sponsors/SponsorshipCategoryCard.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { LucideIcon } from 'lucide-react'; -import { Link } from '@/ui/Link'; import { Card } from '@/ui/Card'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { LucideIcon } from 'lucide-react'; interface SponsorshipCategoryCardProps { icon: LucideIcon; diff --git a/apps/website/components/sponsors/SponsorshipRequestItem.tsx b/apps/website/components/sponsors/SponsorshipRequestItem.tsx index a3ddf7a89..b4a7ce29c 100644 --- a/apps/website/components/sponsors/SponsorshipRequestItem.tsx +++ b/apps/website/components/sponsors/SponsorshipRequestItem.tsx @@ -1,14 +1,14 @@ -import { Building, Check, Clock, DollarSign, MessageCircle, X } from 'lucide-react'; -import React from 'react'; import { Badge } from '@/ui/Badge'; -import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; +import { Building, Check, Clock, DollarSign, MessageCircle, X } from 'lucide-react'; +import React from 'react'; interface SponsorshipRequestItemProps { sponsorName: string; diff --git a/apps/website/components/sponsors/TransactionTable.tsx b/apps/website/components/sponsors/TransactionTable.tsx index 45ab09ae3..e0bce0c82 100644 --- a/apps/website/components/sponsors/TransactionTable.tsx +++ b/apps/website/components/sponsors/TransactionTable.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; import { Button } from '@/ui/Button'; -import { Download, Receipt, Clock, Check, AlertTriangle } from 'lucide-react'; import { Grid } from '@/ui/Grid'; -import { Stack } from '@/ui/Stack'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertTriangle, Check, Clock, Download, Receipt } from 'lucide-react'; export interface Transaction { id: string; diff --git a/apps/website/components/teams/CreateTeamForm.tsx b/apps/website/components/teams/CreateTeamForm.tsx index 4f9b62ee9..f1ac8731b 100644 --- a/apps/website/components/teams/CreateTeamForm.tsx +++ b/apps/website/components/teams/CreateTeamForm.tsx @@ -1,13 +1,13 @@ 'use client'; -import React, { useState } from 'react'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { TextArea } from '@/ui/TextArea'; import { useCreateTeam } from "@/hooks/team/useCreateTeam"; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; +import { Button } from '@/ui/Button'; import { InfoBanner } from '@/ui/InfoBanner'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { TextArea } from '@/ui/TextArea'; +import React, { useState } from 'react'; interface CreateTeamFormProps { onCancel?: () => void; diff --git a/apps/website/components/teams/FeaturedRecruiting.tsx b/apps/website/components/teams/FeaturedRecruiting.tsx index 26d44d9cd..6ec705a3b 100644 --- a/apps/website/components/teams/FeaturedRecruiting.tsx +++ b/apps/website/components/teams/FeaturedRecruiting.tsx @@ -1,14 +1,13 @@ 'use client'; -import React from 'react'; -import { UserPlus } from 'lucide-react'; +import { RecruitingTeamCard } from '@/components/teams/RecruitingTeamCard'; +import { RecruitingTeamGrid } from '@/components/teams/RecruitingTeamGrid'; import { getMediaUrl } from '@/lib/utilities/media'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { RecruitingTeamGrid } from '@/components/teams/RecruitingTeamGrid'; -import { RecruitingTeamCard } from '@/components/teams/RecruitingTeamCard'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { UserPlus } from 'lucide-react'; interface FeaturedRecruitingProps { teams: Array<{ diff --git a/apps/website/components/teams/RecruitingTeamCard.tsx b/apps/website/components/teams/RecruitingTeamCard.tsx index 2c20ac8b6..b31388006 100644 --- a/apps/website/components/teams/RecruitingTeamCard.tsx +++ b/apps/website/components/teams/RecruitingTeamCard.tsx @@ -1,10 +1,9 @@ -import React from 'react'; -import { Users, Trophy } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Image } from '@/ui/Image'; -import { Icon } from '@/ui/Icon'; import { Badge } from '@/ui/Badge'; +import { Icon } from '@/ui/Icon'; +import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Trophy, Users } from 'lucide-react'; interface RecruitingTeamCardProps { name: string; diff --git a/apps/website/components/teams/RecruitingTeamGrid.tsx b/apps/website/components/teams/RecruitingTeamGrid.tsx index 41996c76c..8a2e31f09 100644 --- a/apps/website/components/teams/RecruitingTeamGrid.tsx +++ b/apps/website/components/teams/RecruitingTeamGrid.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { ReactNode } from 'react'; interface RecruitingTeamGridProps { children: ReactNode; diff --git a/apps/website/components/teams/SkillLevelSection.tsx b/apps/website/components/teams/SkillLevelSection.tsx index 7828a6ea2..cbc8851ef 100644 --- a/apps/website/components/teams/SkillLevelSection.tsx +++ b/apps/website/components/teams/SkillLevelSection.tsx @@ -1,11 +1,11 @@ 'use client'; -import React, { useState } from 'react'; -import { LucideIcon } from 'lucide-react'; -import { TeamCard } from '@/components/teams/TeamCardWrapper'; import { SkillLevelHeader } from '@/components/drivers/SkillLevelHeader'; +import { TeamCard } from '@/components/teams/TeamCardWrapper'; import { TeamGrid } from '@/components/teams/TeamGrid'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { LucideIcon } from 'lucide-react'; +import { useState } from 'react'; type SkillLevel = 'pro' | 'advanced' | 'intermediate' | 'beginner'; type TeamSpecialization = 'endurance' | 'sprint' | 'mixed'; diff --git a/apps/website/components/teams/TeamAdmin.tsx b/apps/website/components/teams/TeamAdmin.tsx index 25ecdcd2e..aea866a2c 100644 --- a/apps/website/components/teams/TeamAdmin.tsx +++ b/apps/website/components/teams/TeamAdmin.tsx @@ -1,22 +1,22 @@ 'use client'; -import React, { useState } from 'react'; -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { TextArea } from '@/ui/TextArea'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { JoinRequestList } from '@/components/leagues/JoinRequestList'; import { JoinRequestItem } from '@/components/leagues/JoinRequestItem'; -import { DangerZone } from '@/ui/DangerZone'; +import { JoinRequestList } from '@/components/leagues/JoinRequestList'; import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; -import { useTeamJoinRequests } from "@/hooks/team/useTeamJoinRequests"; -import { useUpdateTeam } from "@/hooks/team/useUpdateTeam"; import { useApproveJoinRequest } from "@/hooks/team/useApproveJoinRequest"; import { useRejectJoinRequest } from "@/hooks/team/useRejectJoinRequest"; +import { useTeamJoinRequests } from "@/hooks/team/useTeamJoinRequests"; +import { useUpdateTeam } from "@/hooks/team/useUpdateTeam"; import type { TeamJoinRequestViewModel } from '@/lib/view-models/TeamJoinRequestViewModel'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { DangerZone } from '@/ui/DangerZone'; +import { Heading } from '@/ui/Heading'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { TextArea } from '@/ui/TextArea'; +import { useState } from 'react'; interface TeamAdminProps { team: { diff --git a/apps/website/components/teams/TeamCard.tsx b/apps/website/components/teams/TeamCard.tsx index 4f8bf6bba..be8d4f46b 100644 --- a/apps/website/components/teams/TeamCard.tsx +++ b/apps/website/components/teams/TeamCard.tsx @@ -1,19 +1,19 @@ +import { Badge } from '@/ui/Badge'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Image } from '@/ui/Image'; +import { PlaceholderImage } from '@/ui/PlaceholderImage'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { ChevronRight, Globe, Users } from 'lucide-react'; import { ReactNode } from 'react'; -import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; -import { Heading } from '@/ui/Heading'; -import { Icon } from '@/ui/Icon'; -import { Image } from '@/ui/Image'; -import { PlaceholderImage } from '@/ui/PlaceholderImage'; -import { Text } from '@/ui/Text'; interface TeamCardProps { name: string; diff --git a/apps/website/components/teams/TeamCardWrapper.tsx b/apps/website/components/teams/TeamCardWrapper.tsx index 74cb42da7..ef308e024 100644 --- a/apps/website/components/teams/TeamCardWrapper.tsx +++ b/apps/website/components/teams/TeamCardWrapper.tsx @@ -1,19 +1,18 @@ -import React from 'react'; -import { - Zap, - Clock, - Languages, - Crown, - Star, - TrendingUp, - Shield -} from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Badge } from '@/ui/Badge'; import { TeamCard as UiTeamCard } from '@/components/teams/TeamCard'; -import { Icon } from '@/ui/Icon'; import { TeamStatItem } from '@/components/teams/TeamStatItem'; +import { Badge } from '@/ui/Badge'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + Clock, + Crown, + Languages, + Shield, + Star, + TrendingUp, + Zap +} from 'lucide-react'; interface TeamCardProps { id: string; diff --git a/apps/website/components/teams/TeamDetailsHeader.tsx b/apps/website/components/teams/TeamDetailsHeader.tsx index 69b7441f4..f9488edfc 100644 --- a/apps/website/components/teams/TeamDetailsHeader.tsx +++ b/apps/website/components/teams/TeamDetailsHeader.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; interface TeamDetailsHeaderProps { teamId: string; diff --git a/apps/website/components/teams/TeamFilter.tsx b/apps/website/components/teams/TeamFilter.tsx index 42c0d89a2..14bcf63f2 100644 --- a/apps/website/components/teams/TeamFilter.tsx +++ b/apps/website/components/teams/TeamFilter.tsx @@ -1,11 +1,10 @@ -import React from 'react'; -import { Search, Star, Trophy, Percent, Hash, LucideIcon } from 'lucide-react'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; import { Badge } from '@/ui/Badge'; +import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Hash, LucideIcon, Percent, Search, Star, Trophy } from 'lucide-react'; type SkillLevel = 'pro' | 'advanced' | 'intermediate' | 'beginner'; type SortBy = 'rating' | 'wins' | 'winRate' | 'races'; diff --git a/apps/website/components/teams/TeamGrid.tsx b/apps/website/components/teams/TeamGrid.tsx index 54fe242e6..358119463 100644 --- a/apps/website/components/teams/TeamGrid.tsx +++ b/apps/website/components/teams/TeamGrid.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { ReactNode } from 'react'; interface TeamGridProps { children: ReactNode; diff --git a/apps/website/components/teams/TeamHeaderPanel.tsx b/apps/website/components/teams/TeamHeaderPanel.tsx index b90e3131f..4cbf2eeab 100644 --- a/apps/website/components/teams/TeamHeaderPanel.tsx +++ b/apps/website/components/teams/TeamHeaderPanel.tsx @@ -1,7 +1,7 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { ReactNode } from 'react'; import { TeamLogo } from './TeamLogo'; import { TeamTag } from './TeamTag'; diff --git a/apps/website/components/teams/TeamHero.tsx b/apps/website/components/teams/TeamHero.tsx index c1f00eb4d..0878da0ba 100644 --- a/apps/website/components/teams/TeamHero.tsx +++ b/apps/website/components/teams/TeamHero.tsx @@ -1,11 +1,11 @@ import { JoinTeamButton } from '@/components/teams/JoinTeamButton'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; -import { Heading } from '@/ui/Heading'; import { TeamLogo } from '@/components/teams/TeamLogo'; import { TeamTag } from '@/components/teams/TeamTag'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface TeamHeroProps { diff --git a/apps/website/components/teams/TeamHeroSection.tsx b/apps/website/components/teams/TeamHeroSection.tsx index 76c835759..29a881cd1 100644 --- a/apps/website/components/teams/TeamHeroSection.tsx +++ b/apps/website/components/teams/TeamHeroSection.tsx @@ -1,11 +1,11 @@ +import { Badge } from '@/ui/Badge'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { Users } from 'lucide-react'; import { ReactNode } from 'react'; -import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; interface TeamHeroSectionProps { title: ReactNode; diff --git a/apps/website/components/teams/TeamHeroSectionWrapper.tsx b/apps/website/components/teams/TeamHeroSectionWrapper.tsx index 9066db4b9..20559469f 100644 --- a/apps/website/components/teams/TeamHeroSectionWrapper.tsx +++ b/apps/website/components/teams/TeamHeroSectionWrapper.tsx @@ -1,12 +1,12 @@ +import { SkillLevelButton } from '@/components/drivers/SkillLevelButton'; +import { TeamHeroSection as UiTeamHeroSection } from '@/components/teams/TeamHeroSection'; +import { TeamHeroStats } from '@/components/teams/TeamHeroStats'; import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; -import { SkillLevelButton } from '@/components/drivers/SkillLevelButton'; -import { Stack } from '@/ui/Stack'; -import { TeamHeroSection as UiTeamHeroSection } from '@/components/teams/TeamHeroSection'; -import { TeamHeroStats } from '@/components/teams/TeamHeroStats'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { Crown, diff --git a/apps/website/components/teams/TeamHeroStats.tsx b/apps/website/components/teams/TeamHeroStats.tsx index 20b953abb..c9ebba826 100644 --- a/apps/website/components/teams/TeamHeroStats.tsx +++ b/apps/website/components/teams/TeamHeroStats.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Users, UserPlus } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { UserPlus, Users } from 'lucide-react'; interface TeamHeroStatsProps { teamCount: number; diff --git a/apps/website/components/teams/TeamIdentity.tsx b/apps/website/components/teams/TeamIdentity.tsx index 3e64bcfb6..3de594a9a 100644 --- a/apps/website/components/teams/TeamIdentity.tsx +++ b/apps/website/components/teams/TeamIdentity.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; interface TeamIdentityProps { name: string; diff --git a/apps/website/components/teams/TeamLadderRow.tsx b/apps/website/components/teams/TeamLadderRow.tsx index 74c9be6b6..937f84170 100644 --- a/apps/website/components/teams/TeamLadderRow.tsx +++ b/apps/website/components/teams/TeamLadderRow.tsx @@ -1,7 +1,6 @@ -import React from 'react'; -import { TableRow, TableCell } from '@/ui/Table'; import { Image } from '@/ui/Image'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { TableCell, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; export interface TeamLadderRowProps { diff --git a/apps/website/components/teams/TeamLeaderboardItem.tsx b/apps/website/components/teams/TeamLeaderboardItem.tsx index 7d8f06fe8..fb9890800 100644 --- a/apps/website/components/teams/TeamLeaderboardItem.tsx +++ b/apps/website/components/teams/TeamLeaderboardItem.tsx @@ -1,10 +1,10 @@ -import { Crown, Trophy, Users } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; +import { Crown, Trophy, Users } from 'lucide-react'; interface TeamLeaderboardItemProps { position: number; diff --git a/apps/website/components/teams/TeamLeaderboardPanel.tsx b/apps/website/components/teams/TeamLeaderboardPanel.tsx index 63a126ae9..8dfe294d6 100644 --- a/apps/website/components/teams/TeamLeaderboardPanel.tsx +++ b/apps/website/components/teams/TeamLeaderboardPanel.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; -import { TeamLogo } from './TeamLogo'; import { RankBadge } from '@/components/leaderboards/RankBadge'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { TeamLogo } from './TeamLogo'; interface TeamLeaderboardPanelProps { teams: Array<{ diff --git a/apps/website/components/teams/TeamLogo.tsx b/apps/website/components/teams/TeamLogo.tsx index b3a4b025b..3b3033b2f 100644 --- a/apps/website/components/teams/TeamLogo.tsx +++ b/apps/website/components/teams/TeamLogo.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Image } from '@/ui/Image'; -import { Users } from 'lucide-react'; import { Icon } from '@/ui/Icon'; +import { Image } from '@/ui/Image'; +import { Box } from '@/ui/primitives/Box'; +import { Users } from 'lucide-react'; export interface TeamLogoProps { teamId?: string; diff --git a/apps/website/components/teams/TeamMembersTable.tsx b/apps/website/components/teams/TeamMembersTable.tsx index 0849f0cb7..5eefcfaaf 100644 --- a/apps/website/components/teams/TeamMembersTable.tsx +++ b/apps/website/components/teams/TeamMembersTable.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; -import { Table, TableBody, TableHead, TableHeader, TableRow, TableCell } from '@/ui/Table'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; interface Member { driverId: string; diff --git a/apps/website/components/teams/TeamMembershipCard.tsx b/apps/website/components/teams/TeamMembershipCard.tsx index e8e7f036f..eaa7f7155 100644 --- a/apps/website/components/teams/TeamMembershipCard.tsx +++ b/apps/website/components/teams/TeamMembershipCard.tsx @@ -1,12 +1,12 @@ -import { ChevronRight, Users } from 'lucide-react'; import { Badge } from '@/ui/Badge'; -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; -import { Surface } from '@/ui/Surface'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; +import { ChevronRight, Users } from 'lucide-react'; interface TeamMembershipCardProps { teamName: string; diff --git a/apps/website/components/teams/TeamMembershipGrid.tsx b/apps/website/components/teams/TeamMembershipGrid.tsx index 193aa2cd6..19e53af4e 100644 --- a/apps/website/components/teams/TeamMembershipGrid.tsx +++ b/apps/website/components/teams/TeamMembershipGrid.tsx @@ -1,9 +1,9 @@ -import { Stack } from '@/ui/Stack'; -import { Card , Card as Surface } from '@/ui/Card'; +import { Card, Card as Surface } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Link } from '@/ui/Link'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; import { ChevronRight, Shield, Users } from 'lucide-react'; diff --git a/apps/website/components/teams/TeamPodium.tsx b/apps/website/components/teams/TeamPodium.tsx index ccdfdc6c3..89c32e0cc 100644 --- a/apps/website/components/teams/TeamPodium.tsx +++ b/apps/website/components/teams/TeamPodium.tsx @@ -1,13 +1,12 @@ -import React from 'react'; -import { Trophy, Crown, Users } from 'lucide-react'; -import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel'; import { getMediaUrl } from '@/lib/utilities/media'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; +import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; import { Podium, PodiumItem } from '@/ui/Podium'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Crown, Trophy, Users } from 'lucide-react'; interface TeamPodiumProps { teams: TeamSummaryViewModel[]; diff --git a/apps/website/components/teams/TeamRankingsTable.tsx b/apps/website/components/teams/TeamRankingsTable.tsx index 51186a509..83bc0b1e8 100644 --- a/apps/website/components/teams/TeamRankingsTable.tsx +++ b/apps/website/components/teams/TeamRankingsTable.tsx @@ -1,13 +1,12 @@ -import React from 'react'; -import { Users } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Card } from '@/ui/Card'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; import { RankBadge } from '@/components/leaderboards/RankBadge'; import { TeamIdentity } from '@/components/teams/TeamIdentity'; import { getMediaUrl } from '@/lib/utilities/media'; +import { Card } from '@/ui/Card'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { Users } from 'lucide-react'; interface Team { id: string; diff --git a/apps/website/components/teams/TeamRoster.tsx b/apps/website/components/teams/TeamRoster.tsx index cadc61fd8..90152699f 100644 --- a/apps/website/components/teams/TeamRoster.tsx +++ b/apps/website/components/teams/TeamRoster.tsx @@ -1,19 +1,19 @@ 'use client'; -import React, { useMemo, useState } from 'react'; -import { Card } from '@/ui/Card'; -import { useTeamRoster } from "@/hooks/team/useTeamRoster"; -import type { DriverViewModel } from '@/lib/view-models/DriverViewModel'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Select } from '@/ui/Select'; -import { Button } from '@/ui/Button'; -import { routes } from '@/lib/routing/RouteConfig'; -import { TeamRosterList } from '@/components/teams/TeamRosterList'; -import { TeamRosterItem } from '@/components/teams/TeamRosterItem'; import { MinimalEmptyState } from '@/components/shared/state/EmptyState'; +import { TeamRosterItem } from '@/components/teams/TeamRosterItem'; +import { TeamRosterList } from '@/components/teams/TeamRosterList'; +import { useTeamRoster } from "@/hooks/team/useTeamRoster"; +import { routes } from '@/lib/routing/RouteConfig'; import { sortMembers } from '@/lib/utilities/roster-utils'; +import type { DriverViewModel } from '@/lib/view-models/DriverViewModel'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Stack } from '@/ui/primitives/Stack'; +import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; +import { useMemo, useState } from 'react'; export type TeamRole = 'owner' | 'admin' | 'member'; export type TeamMemberRole = 'owner' | 'manager' | 'member'; diff --git a/apps/website/components/teams/TeamRosterItem.tsx b/apps/website/components/teams/TeamRosterItem.tsx index c628e12b2..804eb9ec1 100644 --- a/apps/website/components/teams/TeamRosterItem.tsx +++ b/apps/website/components/teams/TeamRosterItem.tsx @@ -1,8 +1,8 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { DriverIdentity } from '@/components/drivers/DriverIdentity'; import { DriverViewModel } from '@/lib/view-models/DriverViewModel'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ReactNode } from 'react'; interface TeamRosterItemProps { driver: DriverViewModel; diff --git a/apps/website/components/teams/TeamRosterList.tsx b/apps/website/components/teams/TeamRosterList.tsx index 17388ee7f..89bf91936 100644 --- a/apps/website/components/teams/TeamRosterList.tsx +++ b/apps/website/components/teams/TeamRosterList.tsx @@ -1,5 +1,5 @@ -import React, { ReactNode } from 'react'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; +import { ReactNode } from 'react'; interface TeamRosterListProps { children: ReactNode; diff --git a/apps/website/components/teams/TeamSearchBar.tsx b/apps/website/components/teams/TeamSearchBar.tsx index f18d2e7b9..3feac3605 100644 --- a/apps/website/components/teams/TeamSearchBar.tsx +++ b/apps/website/components/teams/TeamSearchBar.tsx @@ -1,8 +1,8 @@ -import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; +import { Stack } from '@/ui/primitives/Stack'; import { Search } from 'lucide-react'; interface TeamSearchBarProps { diff --git a/apps/website/components/teams/TeamStandings.tsx b/apps/website/components/teams/TeamStandings.tsx index d7241444f..72ba59206 100644 --- a/apps/website/components/teams/TeamStandings.tsx +++ b/apps/website/components/teams/TeamStandings.tsx @@ -1,12 +1,12 @@ 'use client'; -import { Card } from '@/ui/Card'; -import { useTeamStandings } from "@/hooks/team/useTeamStandings"; -import { Box } from '@/ui/Box'; -import { Heading } from '@/ui/Heading'; import { StandingsList } from '@/components/races/StandingsList'; -import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; import { EmptyState } from '@/components/shared/state/EmptyState'; +import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper'; +import { useTeamStandings } from "@/hooks/team/useTeamStandings"; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; import { Trophy } from 'lucide-react'; interface TeamStandingsProps { diff --git a/apps/website/components/teams/TeamStandingsPanel.tsx b/apps/website/components/teams/TeamStandingsPanel.tsx index bf6a486f9..21b0ccd80 100644 --- a/apps/website/components/teams/TeamStandingsPanel.tsx +++ b/apps/website/components/teams/TeamStandingsPanel.tsx @@ -1,9 +1,8 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; -import { Table, TableBody, TableHead, TableHeader, TableRow, TableCell } from '@/ui/Table'; interface Standing { leagueId: string; diff --git a/apps/website/components/teams/TeamStatItem.tsx b/apps/website/components/teams/TeamStatItem.tsx index e19165134..3f3c086fa 100644 --- a/apps/website/components/teams/TeamStatItem.tsx +++ b/apps/website/components/teams/TeamStatItem.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface TeamStatItemProps { diff --git a/apps/website/components/teams/TeamTag.tsx b/apps/website/components/teams/TeamTag.tsx index 44d215002..010ed53b7 100644 --- a/apps/website/components/teams/TeamTag.tsx +++ b/apps/website/components/teams/TeamTag.tsx @@ -1,5 +1,4 @@ -import React from 'react'; -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; interface TeamTagProps { diff --git a/apps/website/components/teams/TeamsDirectoryHeader.tsx b/apps/website/components/teams/TeamsDirectoryHeader.tsx index 5b0081af9..870c6d955 100644 --- a/apps/website/components/teams/TeamsDirectoryHeader.tsx +++ b/apps/website/components/teams/TeamsDirectoryHeader.tsx @@ -1,12 +1,11 @@ 'use client'; -import React from 'react'; -import { Plus } from 'lucide-react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Plus } from 'lucide-react'; interface TeamsDirectoryHeaderProps { onCreateTeam: () => void; diff --git a/apps/website/components/teams/TopThreePodium.tsx b/apps/website/components/teams/TopThreePodium.tsx index 2f3a0755a..5a7e07265 100644 --- a/apps/website/components/teams/TopThreePodium.tsx +++ b/apps/website/components/teams/TopThreePodium.tsx @@ -1,13 +1,12 @@ -import React from 'react'; -import { Trophy, Crown, Users } from 'lucide-react'; -import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel'; import { getMediaUrl } from '@/lib/utilities/media'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; +import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; import { Image } from '@/ui/Image'; import { Podium, PodiumItem } from '@/ui/Podium'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Crown, Trophy, Users } from 'lucide-react'; interface TopThreePodiumProps { teams: TeamSummaryViewModel[]; diff --git a/apps/website/components/teams/WhyJoinTeamSection.tsx b/apps/website/components/teams/WhyJoinTeamSection.tsx index f18158667..3251433b0 100644 --- a/apps/website/components/teams/WhyJoinTeamSection.tsx +++ b/apps/website/components/teams/WhyJoinTeamSection.tsx @@ -1,16 +1,15 @@ -import React from 'react'; -import { - Handshake, - MessageCircle, - Calendar, - Trophy, - LucideIcon, -} from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Grid } from '@/ui/Grid'; import { BenefitCard } from '@/components/landing/BenefitCard'; +import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { Text } from '@/ui/Text'; +import { + Calendar, + Handshake, + LucideIcon, + MessageCircle, + Trophy, +} from 'lucide-react'; interface Benefit { icon: LucideIcon; diff --git a/apps/website/eslint-rules/index.js b/apps/website/eslint-rules/index.js index 42771fe78..387f5b319 100644 --- a/apps/website/eslint-rules/index.js +++ b/apps/website/eslint-rules/index.js @@ -270,7 +270,8 @@ module.exports = { 'gridpilot-rules/no-raw-html-in-app': 'warn', 'gridpilot-rules/ui-element-purity': 'error', 'gridpilot-rules/no-nextjs-imports-in-ui': 'error', - 'gridpilot-rules/component-classification': 'warn', + 'gridpilot-rules/component-classification': 'error', + 'gridpilot-rules/no-generic-ui-primitives-in-components': 'error', // Route Configuration Rules 'gridpilot-rules/no-hardcoded-routes': 'error', diff --git a/apps/website/eslint-rules/no-generic-ui-primitives-in-components.js b/apps/website/eslint-rules/no-generic-ui-primitives-in-components.js index e78298e53..19eb2b7bf 100644 --- a/apps/website/eslint-rules/no-generic-ui-primitives-in-components.js +++ b/apps/website/eslint-rules/no-generic-ui-primitives-in-components.js @@ -21,8 +21,9 @@ module.exports = { fixable: null, schema: [], messages: { - noGenericPrimitive: 'Generic UI primitive "{{name}}" is not allowed in components. Primitives are internal to the UI layer. Use semantic UI elements from @/ui instead (e.g., Card, Section, Table, Stack, Grid). If a semantic element is missing, create one in apps/website/ui/ using primitives.', + noGenericPrimitive: 'Generic UI primitive or wrapper "{{name}}" is not allowed in components. Primitives (Box, Surface) and generic wrappers (Layout, Container) are internal to the UI layer. Use semantic UI elements from @/ui instead (e.g., Card, Section, Table, Stack, Grid). If a semantic element is missing, create one in apps/website/ui/ using primitives.', noPrimitiveExport: 'Do not re-export primitives from the UI layer. Primitives should remain internal to apps/website/ui/primitives/.', + noClassName: 'The "className" prop is not allowed in components. Styling must be encapsulated within UI elements in apps/website/ui/. Use semantic UI elements or create a new one if you need custom styling.', }, }, @@ -48,8 +49,12 @@ module.exports = { // Legacy direct paths importPath.endsWith('/ui/Box') || importPath.endsWith('/ui/Surface') || + importPath.endsWith('/ui/Layout') || + importPath.endsWith('/ui/Container') || importPath === '@/ui/Box' || - importPath === '@/ui/Surface'; + importPath === '@/ui/Surface' || + importPath === '@/ui/Layout' || + importPath === '@/ui/Container'; if (isPrimitiveImport) { node.specifiers.forEach(specifier => { @@ -70,6 +75,17 @@ module.exports = { } }, + JSXAttribute(node) { + if (!isComponent) return; + + if (node.name.name === 'className') { + context.report({ + node, + messageId: 'noClassName', + }); + } + }, + ExportNamedDeclaration(node) { if (!isUiLayer) return; if (!node.source) return; diff --git a/apps/website/templates/AdminDashboardTemplate.tsx b/apps/website/templates/AdminDashboardTemplate.tsx index 8eb5a3ff5..ed0e75299 100644 --- a/apps/website/templates/AdminDashboardTemplate.tsx +++ b/apps/website/templates/AdminDashboardTemplate.tsx @@ -1,29 +1,28 @@ 'use client'; -import React from 'react'; -import { AdminDashboardViewData } from '@/lib/view-data/AdminDashboardViewData'; +import { AdminDangerZonePanel } from '@/components/admin/AdminDangerZonePanel'; +import { AdminHeaderPanel } from '@/components/admin/AdminHeaderPanel'; +import { AdminSectionHeader } from '@/components/admin/AdminSectionHeader'; +import { AdminStatsPanel } from '@/components/admin/AdminStatsPanel'; import { routes } from '@/lib/routing/RouteConfig'; -import { Card } from '@/ui/Card'; -import { Text } from '@/ui/Text'; +import { AdminDashboardViewData } from '@/lib/view-data/AdminDashboardViewData'; import { Button } from '@/ui/Button'; -import { QuickActionLink } from '@/ui/QuickActionLink'; -import { StatusBadge } from '@/ui/StatusBadge'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; +import { Card } from '@/ui/Card'; import { Container } from '@/ui/Container'; import { Grid } from '@/ui/Grid'; import { Icon } from '@/ui/Icon'; -import { AdminHeaderPanel } from '@/components/admin/AdminHeaderPanel'; -import { AdminStatsPanel } from '@/components/admin/AdminStatsPanel'; -import { AdminSectionHeader } from '@/components/admin/AdminSectionHeader'; -import { AdminDangerZonePanel } from '@/components/admin/AdminDangerZonePanel'; +import { Box } from '@/ui/primitives/Box'; +import { QuickActionLink } from '@/ui/QuickActionLink'; +import { Stack } from '@/ui/Stack'; +import { StatusBadge } from '@/ui/StatusBadge'; +import { Text } from '@/ui/Text'; import { - Users, - Shield, - Activity, - Clock, - RefreshCw, - ArrowRight + Activity, + ArrowRight, + Clock, + RefreshCw, + Shield, + Users } from 'lucide-react'; /** diff --git a/apps/website/templates/AdminUsersTemplate.tsx b/apps/website/templates/AdminUsersTemplate.tsx index 2caf4d4f8..6e221d83a 100644 --- a/apps/website/templates/AdminUsersTemplate.tsx +++ b/apps/website/templates/AdminUsersTemplate.tsx @@ -1,20 +1,19 @@ 'use client'; -import React from 'react'; -import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; -import { RefreshCw, Users, ShieldAlert } from 'lucide-react'; -import { AdminHeaderPanel } from '@/components/admin/AdminHeaderPanel'; -import { AdminStatsPanel } from '@/components/admin/AdminStatsPanel'; -import { UserFilters } from '@/components/admin/UserFilters'; -import { AdminUsersTable } from '@/components/admin/AdminUsersTable'; -import { BulkActionBar } from '@/components/admin/BulkActionBar'; -import { InlineNotice } from '@/components/shared/ux/InlineNotice'; import { AdminDataTable } from '@/components/admin/AdminDataTable'; import { AdminEmptyState } from '@/components/admin/AdminEmptyState'; +import { AdminHeaderPanel } from '@/components/admin/AdminHeaderPanel'; +import { AdminStatsPanel } from '@/components/admin/AdminStatsPanel'; +import { AdminUsersTable } from '@/components/admin/AdminUsersTable'; +import { BulkActionBar } from '@/components/admin/BulkActionBar'; +import { UserFilters } from '@/components/admin/UserFilters'; +import { InlineNotice } from '@/components/shared/ux/InlineNotice'; +import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { Icon } from '@/ui/Icon'; +import { Stack } from '@/ui/primitives/Stack'; +import { RefreshCw, ShieldAlert, Users } from 'lucide-react'; interface AdminUsersTemplateProps { viewData: AdminUsersViewData; diff --git a/apps/website/templates/DashboardTemplate.tsx b/apps/website/templates/DashboardTemplate.tsx index 59a63093d..67f1c2108 100644 --- a/apps/website/templates/DashboardTemplate.tsx +++ b/apps/website/templates/DashboardTemplate.tsx @@ -1,23 +1,22 @@ 'use client'; -import React from 'react'; -import type { DashboardViewData } from '@/lib/view-data/DashboardViewData'; -import { DashboardShell } from '@/components/dashboard/DashboardShell'; -import { DashboardRail } from '@/components/dashboard/DashboardRail'; import { DashboardControlBar } from '@/components/dashboard/DashboardControlBar'; -import { TelemetryPanel } from '@/components/dashboard/TelemetryPanel'; import { DashboardKpiRow } from '@/components/dashboard/DashboardKpiRow'; +import { DashboardRail } from '@/components/dashboard/DashboardRail'; +import { DashboardShell } from '@/components/dashboard/DashboardShell'; import { RecentActivityTable, type ActivityItem } from '@/components/dashboard/RecentActivityTable'; -import { LayoutDashboard, Trophy, Calendar, Users, Settings, Bell, Search } from 'lucide-react'; -import { useRouter } from 'next/navigation'; +import { TelemetryPanel } from '@/components/dashboard/TelemetryPanel'; import { routes } from '@/lib/routing/RouteConfig'; -import { Box } from '@/ui/Box'; +import type { DashboardViewData } from '@/lib/view-data/DashboardViewData'; +import { Avatar } from '@/ui/Avatar'; +import { Button } from '@/ui/Button'; +import { Grid } from '@/ui/Grid'; +import { IconButton } from '@/ui/IconButton'; +import { Box } from '@/ui/primitives/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; -import { IconButton } from '@/ui/IconButton'; -import { Avatar } from '@/ui/Avatar'; -import { Grid } from '@/ui/Grid'; -import { Button } from '@/ui/Button'; +import { Bell, Calendar, LayoutDashboard, Search, Settings, Trophy, Users } from 'lucide-react'; +import { useRouter } from 'next/navigation'; interface DashboardTemplateProps { viewData: DashboardViewData; diff --git a/apps/website/templates/DriverProfileTemplate.tsx b/apps/website/templates/DriverProfileTemplate.tsx index 7e7470a63..2f5128b37 100644 --- a/apps/website/templates/DriverProfileTemplate.tsx +++ b/apps/website/templates/DriverProfileTemplate.tsx @@ -1,25 +1,25 @@ 'use client'; -import React from 'react'; -import { ArrowLeft } from 'lucide-react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Box } from '@/ui/Box'; -import { Button } from '@/ui/Button'; -import { Breadcrumbs } from '@/ui/Breadcrumbs'; -import { LoadingSpinner } from '@/ui/LoadingSpinner'; -import { Text } from '@/ui/Text'; import { AchievementGrid } from '@/components/achievements/AchievementGrid'; +import { RatingBreakdown } from '@/components/drivers/RatingBreakdown'; import { FriendsPreview } from '@/components/social/FriendsPreview'; import { TeamMembershipGrid } from '@/components/teams/TeamMembershipGrid'; -import { RatingBreakdown } from '@/components/drivers/RatingBreakdown'; +import { Breadcrumbs } from '@/ui/Breadcrumbs'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { LoadingSpinner } from '@/ui/LoadingSpinner'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { ArrowLeft } from 'lucide-react'; +import React from 'react'; -import { DriverProfileHeader } from '@/components/drivers/DriverProfileHeader'; -import { DriverStatsPanel } from '@/components/drivers/DriverStatsPanel'; -import { DriverProfileTabs, type ProfileTab } from '@/components/drivers/DriverProfileTabs'; -import { DriverPerformanceOverview } from '@/components/drivers/DriverPerformanceOverview'; -import { DriverRacingProfile } from '@/components/drivers/DriverRacingProfile'; import { CareerStats } from '@/components/drivers/CareerStats'; +import { DriverPerformanceOverview } from '@/components/drivers/DriverPerformanceOverview'; +import { DriverProfileHeader } from '@/components/drivers/DriverProfileHeader'; +import { DriverProfileTabs, type ProfileTab } from '@/components/drivers/DriverProfileTabs'; +import { DriverRacingProfile } from '@/components/drivers/DriverRacingProfile'; +import { DriverStatsPanel } from '@/components/drivers/DriverStatsPanel'; import type { DriverProfileViewData } from '@/lib/types/view-data/DriverProfileViewData'; diff --git a/apps/website/templates/DriversTemplate.tsx b/apps/website/templates/DriversTemplate.tsx index bee49146d..cc21a334c 100644 --- a/apps/website/templates/DriversTemplate.tsx +++ b/apps/website/templates/DriversTemplate.tsx @@ -1,15 +1,14 @@ 'use client'; -import React from 'react'; -import { Search } from 'lucide-react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; import { DriversDirectoryHeader } from '@/components/drivers/DriversDirectoryHeader'; import { DriverSearchBar } from '@/components/drivers/DriverSearchBar'; import { DriverTable } from '@/components/drivers/DriverTable'; import { DriverTableRow } from '@/components/drivers/DriverTableRow'; import { EmptyState } from '@/components/shared/state/EmptyState'; import type { DriversViewData } from '@/lib/types/view-data/DriversViewData'; +import { Container } from '@/ui/Container'; +import { Stack } from '@/ui/primitives/Stack'; +import { Search } from 'lucide-react'; interface DriversTemplateProps { viewData: DriversViewData | null; diff --git a/apps/website/templates/HomeTemplate.tsx b/apps/website/templates/HomeTemplate.tsx index 2a4e53604..bc67c5fb5 100644 --- a/apps/website/templates/HomeTemplate.tsx +++ b/apps/website/templates/HomeTemplate.tsx @@ -1,27 +1,26 @@ 'use client'; -import React from 'react'; +import { HomeFeatureDescription } from '@/components/home/HomeFeatureDescription'; +import { HomeFeatureSection } from '@/components/home/HomeFeatureSection'; +import { HomeFooterCTA } from '@/components/home/HomeFooterCTA'; import { HomeHeader } from '@/components/home/HomeHeader'; import { HomeStatsStrip } from '@/components/home/HomeStatsStrip'; -import { QuickLinksPanel } from '@/components/home/QuickLinksPanel'; -import { HomeFeatureSection } from '@/components/home/HomeFeatureSection'; -import { RecentRacesPanel } from '@/components/home/RecentRacesPanel'; import { LeagueSummaryPanel } from '@/components/home/LeagueSummaryPanel'; +import { QuickLinksPanel } from '@/components/home/QuickLinksPanel'; +import { RecentRacesPanel } from '@/components/home/RecentRacesPanel'; import { TeamSummaryPanel } from '@/components/home/TeamSummaryPanel'; -import { HomeFeatureDescription } from '@/components/home/HomeFeatureDescription'; import { FAQ } from '@/components/landing/FAQ'; -import { HomeFooterCTA } from '@/components/home/HomeFooterCTA'; -import { ModeGuard } from '@/components/shared/ModeGuard'; import { CareerProgressionMockup } from '@/components/mockups/CareerProgressionMockup'; -import { RaceHistoryMockup } from '@/components/mockups/RaceHistoryMockup'; import { CompanionAutomationMockup } from '@/components/mockups/CompanionAutomationMockup'; +import { RaceHistoryMockup } from '@/components/mockups/RaceHistoryMockup'; import { SimPlatformMockup } from '@/components/mockups/SimPlatformMockup'; -import { Box } from '@/ui/Box'; +import { ModeGuard } from '@/components/shared/ModeGuard'; import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Grid } from '@/ui/Grid'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; import { Section } from '@/ui/Section'; +import { Text } from '@/ui/Text'; export interface HomeViewData { isAlpha: boolean; diff --git a/apps/website/templates/LeaderboardsTemplate.tsx b/apps/website/templates/LeaderboardsTemplate.tsx index 24e34a062..81227654c 100644 --- a/apps/website/templates/LeaderboardsTemplate.tsx +++ b/apps/website/templates/LeaderboardsTemplate.tsx @@ -1,14 +1,13 @@ 'use client'; -import React from 'react'; -import { Trophy, Users } from 'lucide-react'; -import { Container } from '@/ui/Container'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { PageHero } from '@/ui/PageHero'; import { DriverLeaderboardPreview } from '@/components/leaderboards/DriverLeaderboardPreview'; import { TeamLeaderboardPreview } from '@/components/teams/TeamLeaderboardPreviewWrapper'; import type { LeaderboardsViewData } from '@/lib/view-data/LeaderboardsViewData'; +import { Container } from '@/ui/Container'; +import { GridItem } from '@/ui/GridItem'; +import { PageHero } from '@/ui/PageHero'; +import { Grid } from '@/ui/primitives/Grid'; +import { Trophy, Users } from 'lucide-react'; interface LeaderboardsTemplateProps { viewData: LeaderboardsViewData; diff --git a/apps/website/templates/LeagueAdminScheduleTemplate.tsx b/apps/website/templates/LeagueAdminScheduleTemplate.tsx index c8c5a6de6..6693561d5 100644 --- a/apps/website/templates/LeagueAdminScheduleTemplate.tsx +++ b/apps/website/templates/LeagueAdminScheduleTemplate.tsx @@ -1,18 +1,17 @@ 'use client'; -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Select } from '@/ui/Select'; -import { Grid } from '@/ui/Grid'; -import { Surface } from '@/ui/Surface'; import { InlineNotice } from '@/components/shared/ux/InlineNotice'; import type { LeagueAdminScheduleViewData } from '@/lib/view-data/LeagueAdminScheduleViewData'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Input } from '@/ui/Input'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Select } from '@/ui/Select'; +import { Text } from '@/ui/Text'; interface LeagueAdminScheduleTemplateProps { viewData: LeagueAdminScheduleViewData; diff --git a/apps/website/templates/LeagueDetailTemplate.tsx b/apps/website/templates/LeagueDetailTemplate.tsx index d5696aebc..3d84fb50b 100644 --- a/apps/website/templates/LeagueDetailTemplate.tsx +++ b/apps/website/templates/LeagueDetailTemplate.tsx @@ -1,14 +1,14 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { LeagueHeaderPanel } from '@/components/leagues/LeagueHeaderPanel'; import { LeagueNavTabs } from '@/components/leagues/LeagueNavTabs'; import type { LeagueDetailViewData } from '@/lib/view-data/LeagueDetailViewData'; import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; import { ChevronRight } from 'lucide-react'; import { usePathname } from 'next/navigation'; +import React from 'react'; interface Tab { label: string; diff --git a/apps/website/templates/LeagueOverviewTemplate.tsx b/apps/website/templates/LeagueOverviewTemplate.tsx index bd7599de8..a2d01c6a0 100644 --- a/apps/website/templates/LeagueOverviewTemplate.tsx +++ b/apps/website/templates/LeagueOverviewTemplate.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import type { LeagueDetailViewData } from '@/lib/view-data/LeagueDetailViewData'; -import { Trophy, Users, Calendar, Shield, type LucideIcon } from 'lucide-react'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Calendar, Shield, Trophy, Users, type LucideIcon } from 'lucide-react'; interface LeagueOverviewTemplateProps { viewData: LeagueDetailViewData; diff --git a/apps/website/templates/LeagueRulebookTemplate.tsx b/apps/website/templates/LeagueRulebookTemplate.tsx index 2b8274fb3..abfa7a5f9 100644 --- a/apps/website/templates/LeagueRulebookTemplate.tsx +++ b/apps/website/templates/LeagueRulebookTemplate.tsx @@ -1,18 +1,17 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Grid } from '@/ui/Grid'; -import { PointsTable } from '@/components/races/PointsTable'; import { RulebookTabs, type RulebookSection } from '@/components/leagues/RulebookTabs'; +import { PointsTable } from '@/components/races/PointsTable'; import type { LeagueRulebookViewData } from '@/lib/view-data/LeagueRulebookViewData'; -import { Surface } from '@/ui/Surface'; -import { Book, Shield, Scale, AlertTriangle, Info, Clock, type LucideIcon } from 'lucide-react'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { AlertTriangle, Book, Clock, Info, Scale, Shield, type LucideIcon } from 'lucide-react'; interface LeagueRulebookTemplateProps { viewData: LeagueRulebookViewData; diff --git a/apps/website/templates/LeagueScheduleTemplate.tsx b/apps/website/templates/LeagueScheduleTemplate.tsx index 2c4e07499..19d7b4313 100644 --- a/apps/website/templates/LeagueScheduleTemplate.tsx +++ b/apps/website/templates/LeagueScheduleTemplate.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { LeagueSchedulePanel } from '@/components/leagues/LeagueSchedulePanel'; import type { LeagueScheduleViewData } from '@/lib/view-data/leagues/LeagueScheduleViewData'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; interface LeagueScheduleTemplateProps { viewData: LeagueScheduleViewData; diff --git a/apps/website/templates/LeagueSettingsTemplate.tsx b/apps/website/templates/LeagueSettingsTemplate.tsx index 6355471c0..45fb9b3a1 100644 --- a/apps/website/templates/LeagueSettingsTemplate.tsx +++ b/apps/website/templates/LeagueSettingsTemplate.tsx @@ -1,16 +1,15 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; -import { Settings, Users, Trophy, Shield, Clock, type LucideIcon } from 'lucide-react'; import type { LeagueSettingsViewData } from '@/lib/view-data/leagues/LeagueSettingsViewData'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { Clock, Settings, Shield, Trophy, Users, type LucideIcon } from 'lucide-react'; interface LeagueSettingsTemplateProps { viewData: LeagueSettingsViewData; diff --git a/apps/website/templates/LeagueSponsorshipsTemplate.tsx b/apps/website/templates/LeagueSponsorshipsTemplate.tsx index 875d4e9fb..a3e753684 100644 --- a/apps/website/templates/LeagueSponsorshipsTemplate.tsx +++ b/apps/website/templates/LeagueSponsorshipsTemplate.tsx @@ -1,19 +1,18 @@ 'use client'; -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Grid } from '@/ui/Grid'; -import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; -import { Building, Clock, Palette } from 'lucide-react'; -import type { LeagueSponsorshipsViewData } from '@/lib/view-data/leagues/LeagueSponsorshipsViewData'; -import { SponsorshipSlotCard } from '@/components/leagues/SponsorshipSlotCard'; -import { SponsorshipRequestCard } from '@/components/leagues/SponsorshipRequestCard'; import { LeagueDecalPlacementEditor } from '@/components/leagues/LeagueDecalPlacementEditor'; +import { SponsorshipRequestCard } from '@/components/leagues/SponsorshipRequestCard'; +import { SponsorshipSlotCard } from '@/components/leagues/SponsorshipSlotCard'; +import type { LeagueSponsorshipsViewData } from '@/lib/view-data/leagues/LeagueSponsorshipsViewData'; +import { Card } from '@/ui/Card'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { Building, Clock, Palette } from 'lucide-react'; interface LeagueSponsorshipsTemplateProps { viewData: LeagueSponsorshipsViewData; diff --git a/apps/website/templates/LeagueStandingsTemplate.tsx b/apps/website/templates/LeagueStandingsTemplate.tsx index 39bd86c98..05be3a798 100644 --- a/apps/website/templates/LeagueStandingsTemplate.tsx +++ b/apps/website/templates/LeagueStandingsTemplate.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { LeagueStandingsTable } from '@/components/leagues/LeagueStandingsTable'; import type { LeagueStandingsViewData } from '@/lib/view-data/LeagueStandingsViewData'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; interface LeagueStandingsTemplateProps { viewData: LeagueStandingsViewData; diff --git a/apps/website/templates/MediaTemplate.tsx b/apps/website/templates/MediaTemplate.tsx index 91ea90709..03ea79d17 100644 --- a/apps/website/templates/MediaTemplate.tsx +++ b/apps/website/templates/MediaTemplate.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; import { MediaGallery } from '@/components/media/MediaGallery'; -import { Container } from '@/ui/Container'; -import { Box } from '@/ui/Box'; import { MediaViewData } from '@/lib/view-data/MediaViewData'; +import { Container } from '@/ui/Container'; +import { Box } from '@/ui/primitives/Box'; export function MediaTemplate(viewData: MediaViewData) { const { assets, categories, title, description } = viewData; diff --git a/apps/website/templates/ProfileLayoutShellTemplate.tsx b/apps/website/templates/ProfileLayoutShellTemplate.tsx index e764ce1bb..01c93ac7d 100644 --- a/apps/website/templates/ProfileLayoutShellTemplate.tsx +++ b/apps/website/templates/ProfileLayoutShellTemplate.tsx @@ -1,9 +1,9 @@ -import type { ReactNode } from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Box } from '@/ui/Box'; -import { ProfileSidebarTemplate } from '@/templates/ProfileSidebarTemplate'; import { ProfileLayoutViewData } from '@/lib/view-data/ProfileLayoutViewData'; +import { ProfileSidebarTemplate } from '@/templates/ProfileSidebarTemplate'; +import { Container } from '@/ui/Container'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import type { ReactNode } from 'react'; interface ProfileLayoutShellTemplateProps { viewData: ProfileLayoutViewData; diff --git a/apps/website/templates/ProfileLeaguesTemplate.tsx b/apps/website/templates/ProfileLeaguesTemplate.tsx index 799b02543..c9dc44294 100644 --- a/apps/website/templates/ProfileLeaguesTemplate.tsx +++ b/apps/website/templates/ProfileLeaguesTemplate.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Box } from '@/ui/Box'; -import type { ProfileLeaguesViewData } from '@/lib/view-data/ProfileLeaguesViewData'; import { MembershipPanel } from '@/components/profile/MembershipPanel'; +import type { ProfileLeaguesViewData } from '@/lib/view-data/ProfileLeaguesViewData'; +import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; interface ProfileLeaguesTemplateProps { viewData: ProfileLeaguesViewData; diff --git a/apps/website/templates/ProfileLiveriesTemplate.tsx b/apps/website/templates/ProfileLiveriesTemplate.tsx index 84194a326..d5155cbe1 100644 --- a/apps/website/templates/ProfileLiveriesTemplate.tsx +++ b/apps/website/templates/ProfileLiveriesTemplate.tsx @@ -1,15 +1,14 @@ 'use client'; -import React from 'react'; -import Link from 'next/link'; -import { Button } from '@/ui/Button'; -import { Plus } from 'lucide-react'; -import { routes } from '@/lib/routing/RouteConfig'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Box } from '@/ui/Box'; import { LiveryGallery } from '@/components/profile/LiveryGallery'; +import { routes } from '@/lib/routing/RouteConfig'; import type { ProfileLiveriesViewData } from '@/lib/view-data/ProfileLiveriesViewData'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Plus } from 'lucide-react'; +import Link from 'next/link'; interface ProfileLiveriesTemplateProps { viewData: ProfileLiveriesViewData; diff --git a/apps/website/templates/ProfileSettingsTemplate.tsx b/apps/website/templates/ProfileSettingsTemplate.tsx index 89b1e1b5d..569cd3451 100644 --- a/apps/website/templates/ProfileSettingsTemplate.tsx +++ b/apps/website/templates/ProfileSettingsTemplate.tsx @@ -1,14 +1,13 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Button } from '@/ui/Button'; -import { Box } from '@/ui/Box'; -import { ProfileDetailsPanel } from '@/components/profile/ProfileDetailsPanel'; import { ConnectedAccountsPanel } from '@/components/profile/ConnectedAccountsPanel'; import { PreferencesPanel } from '@/components/profile/PreferencesPanel'; +import { ProfileDetailsPanel } from '@/components/profile/ProfileDetailsPanel'; import type { ProfileViewData } from '@/lib/view-data/ProfileViewData'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; interface ProfileSettingsTemplateProps { viewData: ProfileViewData; diff --git a/apps/website/templates/ProfileSidebarTemplate.tsx b/apps/website/templates/ProfileSidebarTemplate.tsx index 0a8e83852..2047874f9 100644 --- a/apps/website/templates/ProfileSidebarTemplate.tsx +++ b/apps/website/templates/ProfileSidebarTemplate.tsx @@ -1,20 +1,19 @@ 'use client'; -import React from 'react'; +import { routes } from '@/lib/routing/RouteConfig'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + Handshake, + Palette, + Settings, + Trophy, + User +} from 'lucide-react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { - User, - Settings, - Trophy, - Palette, - Handshake -} from 'lucide-react'; -import { routes } from '@/lib/routing/RouteConfig'; import { ProfileLayoutViewData } from '@/lib/view-data/ProfileLayoutViewData'; diff --git a/apps/website/templates/ProfileTemplate.tsx b/apps/website/templates/ProfileTemplate.tsx index 2ab6a25e1..b58a0a026 100644 --- a/apps/website/templates/ProfileTemplate.tsx +++ b/apps/website/templates/ProfileTemplate.tsx @@ -1,21 +1,20 @@ 'use client'; -import React from 'react'; +import { AchievementGrid } from '@/components/achievements/AchievementGrid'; import { CreateDriverForm } from '@/components/drivers/CreateDriverForm'; +import { ProfileDetailsPanel } from '@/components/profile/ProfileDetailsPanel'; import { ProfileHeader } from '@/components/profile/ProfileHeader'; import { ProfileNavTabs, type ProfileTab } from '@/components/profile/ProfileNavTabs'; -import { ProfileDetailsPanel } from '@/components/profile/ProfileDetailsPanel'; import { SessionHistoryTable } from '@/components/profile/SessionHistoryTable'; -import { ProfileStatGrid } from '@/ui/ProfileStatGrid'; import { TeamMembershipGrid } from '@/components/teams/TeamMembershipGrid'; -import { AchievementGrid } from '@/components/achievements/AchievementGrid'; import type { ProfileViewData } from '@/lib/view-data/ProfileViewData'; -import { Box } from '@/ui/Box'; import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; -import { Stack } from '@/ui/Stack'; -import { Surface } from '@/ui/Surface'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { ProfileStatGrid } from '@/ui/ProfileStatGrid'; import { Text } from '@/ui/Text'; import { User } from 'lucide-react'; diff --git a/apps/website/templates/RaceDetailTemplate.tsx b/apps/website/templates/RaceDetailTemplate.tsx index eea77b27b..3ef4cf0a8 100644 --- a/apps/website/templates/RaceDetailTemplate.tsx +++ b/apps/website/templates/RaceDetailTemplate.tsx @@ -1,20 +1,19 @@ 'use client'; -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Skeleton } from '@/ui/Skeleton'; -import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; -import { RaceUserResult } from '@/components/races/RaceUserResultWrapper'; import { LeagueSummaryCard } from '@/components/leagues/LeagueSummaryCardWrapper'; +import { EntrantsTable } from '@/components/races/EntrantsTable'; import { RaceActionBar } from '@/components/races/RaceActionBar'; import { RaceDetailsHeader } from '@/components/races/RaceDetailsHeader'; -import { TrackConditionsPanel } from '@/components/races/TrackConditionsPanel'; -import { EntrantsTable } from '@/components/races/EntrantsTable'; +import { RaceUserResult } from '@/components/races/RaceUserResultWrapper'; import type { SessionStatus } from '@/components/races/SessionStatusBadge'; +import { TrackConditionsPanel } from '@/components/races/TrackConditionsPanel'; +import { Container } from '@/ui/Container'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Skeleton } from '@/ui/Skeleton'; +import { Text } from '@/ui/Text'; export interface RaceDetailEntryViewModel { id: string; diff --git a/apps/website/templates/RaceResultsTemplate.tsx b/apps/website/templates/RaceResultsTemplate.tsx index abac826a3..ded581300 100644 --- a/apps/website/templates/RaceResultsTemplate.tsx +++ b/apps/website/templates/RaceResultsTemplate.tsx @@ -1,17 +1,16 @@ 'use client'; -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Box } from '@/ui/Box'; -import { Trophy, Zap, AlertTriangle, type LucideIcon } from 'lucide-react'; -import type { RaceResultsViewData } from '@/lib/view-data/races/RaceResultsViewData'; -import { RaceResultsTable } from '@/components/races/RaceResultsTable'; import { RaceDetailsHeader } from '@/components/races/RaceDetailsHeader'; +import { RaceResultsTable } from '@/components/races/RaceResultsTable'; +import type { RaceResultsViewData } from '@/lib/view-data/races/RaceResultsViewData'; +import { Container } from '@/ui/Container'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertTriangle, Trophy, Zap, type LucideIcon } from 'lucide-react'; export interface RaceResultsTemplateProps { viewData: RaceResultsViewData; diff --git a/apps/website/templates/RaceStewardingTemplate.tsx b/apps/website/templates/RaceStewardingTemplate.tsx index 1fc168414..9fd73da96 100644 --- a/apps/website/templates/RaceStewardingTemplate.tsx +++ b/apps/website/templates/RaceStewardingTemplate.tsx @@ -1,20 +1,19 @@ 'use client'; -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Text } from '@/ui/Text'; -import { Icon } from '@/ui/Icon'; -import { Box } from '@/ui/Box'; -import { Flag, CheckCircle, Gavel, Info } from 'lucide-react'; -import { RaceStewardingStats } from '@/components/races/RaceStewardingStats'; -import { StewardingTabs } from '@/components/leagues/StewardingTabs'; import { ProtestCard } from '@/components/leagues/ProtestCardWrapper'; -import { RacePenaltyRow } from '@/components/races/RacePenaltyRowWrapper'; +import { StewardingTabs } from '@/components/leagues/StewardingTabs'; import { RaceDetailsHeader } from '@/components/races/RaceDetailsHeader'; +import { RacePenaltyRow } from '@/components/races/RacePenaltyRowWrapper'; +import { RaceStewardingStats } from '@/components/races/RaceStewardingStats'; import type { RaceStewardingViewData } from '@/lib/view-data/races/RaceStewardingViewData'; +import { Container } from '@/ui/Container'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { CheckCircle, Flag, Gavel, Info } from 'lucide-react'; export type StewardingTab = 'pending' | 'resolved' | 'penalties'; diff --git a/apps/website/templates/RacesAllTemplate.tsx b/apps/website/templates/RacesAllTemplate.tsx index a2dc0aadc..4ac747798 100644 --- a/apps/website/templates/RacesAllTemplate.tsx +++ b/apps/website/templates/RacesAllTemplate.tsx @@ -1,17 +1,16 @@ 'use client'; -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Skeleton } from '@/ui/Skeleton'; -import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; -import { Pagination } from '@/ui/Pagination'; import { RaceFilterModal } from '@/components/races/RaceFilterModal'; import { RacePageHeader } from '@/components/races/RacePageHeader'; import { RaceScheduleTable } from '@/components/races/RaceScheduleTable'; -import type { RacesViewData } from '@/lib/view-data/RacesViewData'; import type { SessionStatus } from '@/components/races/SessionStatusBadge'; +import type { RacesViewData } from '@/lib/view-data/RacesViewData'; +import { Container } from '@/ui/Container'; +import { Pagination } from '@/ui/Pagination'; +import { Skeleton } from '@/ui/Skeleton'; +import { Text } from '@/ui/Text'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; export type StatusFilter = 'scheduled' | 'running' | 'completed' | 'cancelled' | 'all'; diff --git a/apps/website/templates/RacesTemplate.tsx b/apps/website/templates/RacesTemplate.tsx index c16b6eb28..114dcd3ea 100644 --- a/apps/website/templates/RacesTemplate.tsx +++ b/apps/website/templates/RacesTemplate.tsx @@ -1,20 +1,19 @@ 'use client'; -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; -import { RaceFilterModal } from '@/components/races/RaceFilterModal'; -import type { RacesViewData } from '@/lib/view-data/RacesViewData'; -import { RacePageHeader } from '@/components/races/RacePageHeader'; import { LiveRacesBanner } from '@/components/races/LiveRacesBanner'; import { RaceFilterBar } from '@/components/races/RaceFilterBar'; +import { RaceFilterModal } from '@/components/races/RaceFilterModal'; +import { RacePageHeader } from '@/components/races/RacePageHeader'; import { RaceScheduleTable } from '@/components/races/RaceScheduleTable'; import { RaceSidebar } from '@/components/races/RaceSidebar'; import type { SessionStatus } from '@/components/races/SessionStatusBadge'; +import type { RacesViewData } from '@/lib/view-data/RacesViewData'; +import { Container } from '@/ui/Container'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; export type TimeFilter = 'all' | 'upcoming' | 'live' | 'past'; export type RaceStatusFilter = 'scheduled' | 'running' | 'completed' | 'cancelled' | 'all'; diff --git a/apps/website/templates/RosterAdminTemplate.tsx b/apps/website/templates/RosterAdminTemplate.tsx index 9e9aa1e2c..fe787c524 100644 --- a/apps/website/templates/RosterAdminTemplate.tsx +++ b/apps/website/templates/RosterAdminTemplate.tsx @@ -1,17 +1,17 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Heading } from '@/ui/Heading'; -import { Surface } from '@/ui/Surface'; -import { Button } from '@/ui/Button'; -import { Shield, UserPlus, UserMinus } from 'lucide-react'; -import { Icon } from '@/ui/Icon'; -import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; import type { MembershipRole } from '@/lib/types/MembershipRole'; import type { LeagueRosterAdminViewData } from '@/lib/view-data/LeagueRosterAdminViewData'; +import { Button } from '@/ui/Button'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { Shield, UserMinus, UserPlus } from 'lucide-react'; +import React from 'react'; interface RosterAdminTemplateProps { viewData: LeagueRosterAdminViewData; diff --git a/apps/website/templates/RulebookTemplate.tsx b/apps/website/templates/RulebookTemplate.tsx index ee5564834..79d277638 100644 --- a/apps/website/templates/RulebookTemplate.tsx +++ b/apps/website/templates/RulebookTemplate.tsx @@ -1,10 +1,9 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { LeagueRulesPanel } from '@/components/leagues/LeagueRulesPanel'; import type { RulebookViewData } from '@/lib/view-data/leagues/RulebookViewData'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; interface RulebookTemplateProps { viewData: RulebookViewData; diff --git a/apps/website/templates/ServerErrorTemplate.tsx b/apps/website/templates/ServerErrorTemplate.tsx index ab985121a..4afff8919 100644 --- a/apps/website/templates/ServerErrorTemplate.tsx +++ b/apps/website/templates/ServerErrorTemplate.tsx @@ -1,13 +1,12 @@ 'use client'; -import React from 'react'; -import { Box } from '@/ui/Box'; -import { Surface } from '@/ui/Surface'; -import { Glow } from '@/ui/Glow'; -import { Stack } from '@/ui/Stack'; -import { ServerErrorPanel } from '@/components/errors/ServerErrorPanel'; -import { RecoveryActions } from '@/components/errors/RecoveryActions'; import { ErrorDetails } from '@/components/errors/ErrorDetails'; +import { RecoveryActions } from '@/components/errors/RecoveryActions'; +import { ServerErrorPanel } from '@/components/errors/ServerErrorPanel'; +import { Glow } from '@/ui/Glow'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; export interface ServerErrorViewData { error: Error & { digest?: string }; diff --git a/apps/website/templates/SponsorBillingTemplate.tsx b/apps/website/templates/SponsorBillingTemplate.tsx index b6cd30966..799a97e2f 100644 --- a/apps/website/templates/SponsorBillingTemplate.tsx +++ b/apps/website/templates/SponsorBillingTemplate.tsx @@ -1,29 +1,28 @@ 'use client'; -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; -import { Box } from '@/ui/Box'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; +import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; +import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; +import { PayoutItem, SponsorPayoutQueueTable } from '@/components/sponsors/SponsorPayoutQueueTable'; +import { siteConfig } from '@/lib/siteConfig'; +import type { InvoiceDTO, PaymentMethodDTO } from '@/lib/types/tbd/SponsorBillingDTO'; import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Container } from '@/ui/Container'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { InfoBanner } from '@/ui/InfoBanner'; -import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; -import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; -import { SponsorPayoutQueueTable, PayoutItem } from '@/components/sponsors/SponsorPayoutQueueTable'; -import { - CreditCard, - Building2, - Download, - Percent, - Receipt, - ExternalLink, - LucideIcon +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { + Building2, + CreditCard, + Download, + ExternalLink, + LucideIcon, + Percent, + Receipt } from 'lucide-react'; -import { siteConfig } from '@/lib/siteConfig'; -import type { PaymentMethodDTO, InvoiceDTO } from '@/lib/types/tbd/SponsorBillingDTO'; export interface SponsorBillingViewData { stats: { diff --git a/apps/website/templates/SponsorCampaignsTemplate.tsx b/apps/website/templates/SponsorCampaignsTemplate.tsx index fadffc48e..717059096 100644 --- a/apps/website/templates/SponsorCampaignsTemplate.tsx +++ b/apps/website/templates/SponsorCampaignsTemplate.tsx @@ -1,20 +1,20 @@ -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Box } from '@/ui/Box'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; -import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; import { SponsorContractCard } from '@/components/sponsors/SponsorContractCard'; -import { - Search, - Check, - Clock, - Eye, - BarChart3, - LucideIcon +import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { + BarChart3, + Check, + Clock, + Eye, + LucideIcon, + Search } from 'lucide-react'; +import React from 'react'; export type SponsorshipType = 'all' | 'leagues' | 'teams' | 'drivers' | 'races' | 'platform'; export type SponsorshipStatus = 'all' | 'active' | 'pending_approval' | 'approved' | 'rejected' | 'expired'; diff --git a/apps/website/templates/SponsorDashboardTemplate.tsx b/apps/website/templates/SponsorDashboardTemplate.tsx index 5c3964a5b..e9dc17782 100644 --- a/apps/website/templates/SponsorDashboardTemplate.tsx +++ b/apps/website/templates/SponsorDashboardTemplate.tsx @@ -1,40 +1,39 @@ 'use client'; -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Heading } from '@/ui/Heading'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Link } from '@/ui/Link'; -import { Container } from '@/ui/Container'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Icon } from '@/ui/Icon'; -import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; -import { SponsorContractCard } from '@/components/sponsors/SponsorContractCard'; -import { MetricCard } from '@/components/sponsors/MetricCard'; -import { SponsorshipCategoryCard } from '@/components/sponsors/SponsorshipCategoryCard'; -import { RenewalAlert } from '@/components/sponsors/RenewalAlert'; import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; -import { SponsorActivityPanel, Activity } from '@/components/sponsors/SponsorActivityPanel'; -import { - Eye, - Users, - Trophy, - TrendingUp, - DollarSign, - ChevronRight, - Plus, - Bell, - Clock, - Car, - Flag, - Megaphone, - LucideIcon -} from 'lucide-react'; -import type { SponsorDashboardViewData } from '@/lib/view-data/SponsorDashboardViewData'; +import { MetricCard } from '@/components/sponsors/MetricCard'; +import { RenewalAlert } from '@/components/sponsors/RenewalAlert'; +import { Activity, SponsorActivityPanel } from '@/components/sponsors/SponsorActivityPanel'; +import { SponsorContractCard } from '@/components/sponsors/SponsorContractCard'; +import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; +import { SponsorshipCategoryCard } from '@/components/sponsors/SponsorshipCategoryCard'; import { routes } from '@/lib/routing/RouteConfig'; +import type { SponsorDashboardViewData } from '@/lib/view-data/SponsorDashboardViewData'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Container } from '@/ui/Container'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { + Bell, + Car, + ChevronRight, + Clock, + DollarSign, + Eye, + Flag, + LucideIcon, + Megaphone, + Plus, + TrendingUp, + Trophy, + Users +} from 'lucide-react'; interface SponsorDashboardTemplateProps { viewData: SponsorDashboardViewData; diff --git a/apps/website/templates/SponsorLeagueDetailTemplate.tsx b/apps/website/templates/SponsorLeagueDetailTemplate.tsx index 6daf2e0e4..f0dd7773b 100644 --- a/apps/website/templates/SponsorLeagueDetailTemplate.tsx +++ b/apps/website/templates/SponsorLeagueDetailTemplate.tsx @@ -1,37 +1,36 @@ 'use client'; -import React from 'react'; -import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; -import { PricingTableShell, PricingTier } from '@/components/sponsors/PricingTableShell'; import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; +import { PricingTableShell, PricingTier } from '@/components/sponsors/PricingTableShell'; import { SponsorBrandingPreview } from '@/components/sponsors/SponsorBrandingPreview'; +import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; import { SponsorStatusChip } from '@/components/sponsors/SponsorStatusChip'; -import { - Trophy, - Calendar, - Eye, - TrendingUp, - Flag, - BarChart3, - Megaphone, - CreditCard, - FileText, - type LucideIcon -} from 'lucide-react'; -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Heading } from '@/ui/Heading'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Link } from '@/ui/Link'; -import { Container } from '@/ui/Container'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Surface } from '@/ui/Surface'; -import { Icon } from '@/ui/Icon'; -import { siteConfig } from '@/lib/siteConfig'; import { routes } from '@/lib/routing/RouteConfig'; +import { siteConfig } from '@/lib/siteConfig'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Container } from '@/ui/Container'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { + BarChart3, + Calendar, + CreditCard, + Eye, + FileText, + Flag, + Megaphone, + TrendingUp, + Trophy, + type LucideIcon +} from 'lucide-react'; interface SponsorLeagueDetailViewData { league: { diff --git a/apps/website/templates/SponsorLeaguesTemplate.tsx b/apps/website/templates/SponsorLeaguesTemplate.tsx index 83322a2a5..5c9ebb5c1 100644 --- a/apps/website/templates/SponsorLeaguesTemplate.tsx +++ b/apps/website/templates/SponsorLeaguesTemplate.tsx @@ -1,30 +1,29 @@ 'use client'; -import React from 'react'; -import { Card } from '@/ui/Card'; -import { Button } from '@/ui/Button'; -import { Heading } from '@/ui/Heading'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Link } from '@/ui/Link'; -import { Container } from '@/ui/Container'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; -import { Surface } from '@/ui/Surface'; -import { Icon } from '@/ui/Icon'; -import { - Trophy, - Users, - Search, - Car, - Megaphone, -} from 'lucide-react'; -import { siteConfig } from '@/lib/siteConfig'; -import { routes } from '@/lib/routing/RouteConfig'; -import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; import { AvailableLeagueCard } from '@/components/sponsors/AvailableLeagueCard'; +import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; +import { routes } from '@/lib/routing/RouteConfig'; +import { siteConfig } from '@/lib/siteConfig'; +import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Container } from '@/ui/Container'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; +import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; +import { Text } from '@/ui/Text'; +import { + Car, + Megaphone, + Search, + Trophy, + Users, +} from 'lucide-react'; interface AvailableLeague { id: string; diff --git a/apps/website/templates/SponsorSettingsTemplate.tsx b/apps/website/templates/SponsorSettingsTemplate.tsx index 327f42a06..f772675d2 100644 --- a/apps/website/templates/SponsorSettingsTemplate.tsx +++ b/apps/website/templates/SponsorSettingsTemplate.tsx @@ -1,23 +1,23 @@ -import React from 'react'; -import { Container } from '@/ui/Container'; -import { Stack } from '@/ui/Stack'; -import { Card } from '@/ui/Card'; -import { Box } from '@/ui/Box'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; +import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; import { Button } from '@/ui/Button'; +import { Card } from '@/ui/Card'; +import { Container } from '@/ui/Container'; +import { FormField } from '@/ui/FormField'; +import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; import { Toggle } from '@/ui/Toggle'; -import { FormField } from '@/ui/FormField'; -import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; -import { - Building2, - Save, - Bell, - AlertCircle, - RefreshCw +import { + AlertCircle, + Bell, + Building2, + RefreshCw, + Save } from 'lucide-react'; +import React from 'react'; export interface SponsorSettingsViewData { profile: { diff --git a/apps/website/templates/SponsorshipRequestsTemplate.tsx b/apps/website/templates/SponsorshipRequestsTemplate.tsx index 062e45fd4..58294ca5e 100644 --- a/apps/website/templates/SponsorshipRequestsTemplate.tsx +++ b/apps/website/templates/SponsorshipRequestsTemplate.tsx @@ -1,11 +1,10 @@ 'use client'; -import React from 'react'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Box } from '@/ui/Box'; -import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData'; import { SponsorshipRequestsPanel } from '@/components/profile/SponsorshipRequestsPanel'; +import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData'; +import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; export interface SponsorshipRequestsTemplateProps { viewData: SponsorshipRequestsViewData; diff --git a/apps/website/templates/TeamDetailTemplate.tsx b/apps/website/templates/TeamDetailTemplate.tsx index 8e8431d6e..6a90fdbdb 100644 --- a/apps/website/templates/TeamDetailTemplate.tsx +++ b/apps/website/templates/TeamDetailTemplate.tsx @@ -1,24 +1,23 @@ 'use client'; -import React from 'react'; -import { Breadcrumbs } from '@/ui/Breadcrumbs'; -import { SponsorInsightsCard } from '@/components/sponsors/SponsorInsightsCard'; import { SlotTemplates } from '@/components/sponsors/SlotTemplates'; +import { SponsorInsightsCard } from '@/components/sponsors/SponsorInsightsCard'; import { useSponsorMode } from '@/hooks/sponsor/useSponsorMode'; -import { Box } from '@/ui/Box'; +import { Breadcrumbs } from '@/ui/Breadcrumbs'; import { Button } from '@/ui/Button'; import { Container } from '@/ui/Container'; -import { Grid } from '@/ui/Grid'; -import { GridItem } from '@/ui/GridItem'; import { Heading } from '@/ui/Heading'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; import { HorizontalStatItem } from '@/ui/HorizontalStatItem'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; +import { GridItem } from '@/ui/primitives/GridItem'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { TeamAdmin } from '@/components/teams/TeamAdmin'; import { TeamDetailsHeader } from '@/components/teams/TeamDetailsHeader'; import { TeamMembersTable } from '@/components/teams/TeamMembersTable'; import { TeamStandingsPanel } from '@/components/teams/TeamStandingsPanel'; -import { TeamAdmin } from '@/components/teams/TeamAdmin'; import type { TeamDetailViewData } from '@/lib/view-data/TeamDetailViewData'; type Tab = 'overview' | 'roster' | 'standings' | 'admin'; diff --git a/apps/website/templates/TeamLeaderboardTemplate.tsx b/apps/website/templates/TeamLeaderboardTemplate.tsx index d7cfbdd61..011a92784 100644 --- a/apps/website/templates/TeamLeaderboardTemplate.tsx +++ b/apps/website/templates/TeamLeaderboardTemplate.tsx @@ -1,17 +1,16 @@ 'use client'; -import React from 'react'; -import { Award, ChevronLeft } from 'lucide-react'; -import { Container } from '@/ui/Container'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Heading } from '@/ui/Heading'; -import { Text } from '@/ui/Text'; -import { Button } from '@/ui/Button'; -import { Icon } from '@/ui/Icon'; -import { Table, TableBody, TableHead, TableHeader, TableRow, TableCell } from '@/ui/Table'; import { LeaderboardFiltersBar } from '@/components/leaderboards/LeaderboardFiltersBar'; -import type { TeamLeaderboardViewData, SkillLevel, SortBy } from '@/lib/view-data/TeamLeaderboardViewData'; +import type { SkillLevel, SortBy, TeamLeaderboardViewData } from '@/lib/view-data/TeamLeaderboardViewData'; +import { Button } from '@/ui/Button'; +import { Container } from '@/ui/Container'; +import { Heading } from '@/ui/Heading'; +import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; +import { Text } from '@/ui/Text'; +import { Award, ChevronLeft } from 'lucide-react'; interface TeamLeaderboardTemplateProps { viewData: TeamLeaderboardViewData; diff --git a/apps/website/templates/TeamsTemplate.tsx b/apps/website/templates/TeamsTemplate.tsx index 893ea9e14..59c608ca4 100644 --- a/apps/website/templates/TeamsTemplate.tsx +++ b/apps/website/templates/TeamsTemplate.tsx @@ -1,17 +1,16 @@ 'use client'; -import React from 'react'; -import { Users } from 'lucide-react'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Container } from '@/ui/Container'; import { EmptyState } from '@/components/shared/state/EmptyState'; -import { TeamsDirectoryHeader } from '@/components/teams/TeamsDirectoryHeader'; -import { TeamGrid } from '@/components/teams/TeamGrid'; import { TeamCard } from '@/components/teams/TeamCardWrapper'; +import { TeamGrid } from '@/components/teams/TeamGrid'; import { TeamLeaderboardPreview } from '@/components/teams/TeamLeaderboardPreviewWrapper'; +import { TeamsDirectoryHeader } from '@/components/teams/TeamsDirectoryHeader'; import type { TeamsViewData } from '@/lib/view-data/TeamsViewData'; +import { Container } from '@/ui/Container'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { Users } from 'lucide-react'; interface TeamsTemplateProps { viewData: TeamsViewData; diff --git a/apps/website/templates/actions/ActionsTemplate.tsx b/apps/website/templates/actions/ActionsTemplate.tsx index cfa9730bf..50463388d 100644 --- a/apps/website/templates/actions/ActionsTemplate.tsx +++ b/apps/website/templates/actions/ActionsTemplate.tsx @@ -1,10 +1,10 @@ 'use client'; -import { ActionsViewData } from '@/lib/view-data/ActionsViewData'; -import { ActionsHeader } from '@/components/actions/ActionsHeader'; -import { ActionList } from '@/components/actions/ActionList'; import { ActionFiltersBar } from '@/components/actions/ActionFiltersBar'; -import { Box } from '@/ui/Box'; +import { ActionList } from '@/components/actions/ActionList'; +import { ActionsHeader } from '@/components/actions/ActionsHeader'; +import { ActionsViewData } from '@/lib/view-data/ActionsViewData'; +import { Box } from '@/ui/primitives/Box'; export function ActionsTemplate({ actions }: ActionsViewData) { return ( diff --git a/apps/website/templates/auth/ForgotPasswordTemplate.tsx b/apps/website/templates/auth/ForgotPasswordTemplate.tsx index 9889f9178..cf5d07e10 100644 --- a/apps/website/templates/auth/ForgotPasswordTemplate.tsx +++ b/apps/website/templates/auth/ForgotPasswordTemplate.tsx @@ -1,20 +1,20 @@ 'use client'; -import React from 'react'; -import { Mail, ArrowLeft, AlertCircle, Shield, CheckCircle2 } from 'lucide-react'; +import { AuthCard } from '@/components/auth/AuthCard'; +import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; +import { AuthForm } from '@/components/auth/AuthForm'; +import { ForgotPasswordViewData } from '@/lib/builders/view-data/types/ForgotPasswordViewData'; +import { routes } from '@/lib/routing/RouteConfig'; import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; import { Input } from '@/ui/Input'; -import { Text } from '@/ui/Text'; import { Link } from '@/ui/Link'; import { LoadingSpinner } from '@/ui/LoadingSpinner'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Icon } from '@/ui/Icon'; -import { AuthCard } from '@/components/auth/AuthCard'; -import { AuthForm } from '@/components/auth/AuthForm'; -import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; -import { routes } from '@/lib/routing/RouteConfig'; -import { ForgotPasswordViewData } from '@/lib/builders/view-data/types/ForgotPasswordViewData'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertCircle, ArrowLeft, CheckCircle2, Mail, Shield } from 'lucide-react'; +import React from 'react'; interface ForgotPasswordTemplateProps { viewData: ForgotPasswordViewData; diff --git a/apps/website/templates/auth/LoginTemplate.tsx b/apps/website/templates/auth/LoginTemplate.tsx index 14541ea56..8b710b0ab 100644 --- a/apps/website/templates/auth/LoginTemplate.tsx +++ b/apps/website/templates/auth/LoginTemplate.tsx @@ -1,23 +1,23 @@ 'use client'; -import React from 'react'; -import { LogIn, Mail, AlertCircle } from 'lucide-react'; +import { AuthCard } from '@/components/auth/AuthCard'; +import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; +import { AuthForm } from '@/components/auth/AuthForm'; +import { EnhancedFormError } from '@/components/errors/EnhancedFormError'; +import { FormState } from '@/lib/builders/view-data/types/FormState'; +import { LoginViewData } from '@/lib/builders/view-data/types/LoginViewData'; +import { routes } from '@/lib/routing/RouteConfig'; import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Stack } from '@/ui/Stack'; -import { Text } from '@/ui/Text'; -import { Link } from '@/ui/Link'; import { Icon } from '@/ui/Icon'; -import { Box } from '@/ui/Box'; +import { Input } from '@/ui/Input'; +import { Link } from '@/ui/Link'; import { LoadingSpinner } from '@/ui/LoadingSpinner'; import { PasswordField } from '@/ui/PasswordField'; -import { AuthCard } from '@/components/auth/AuthCard'; -import { AuthForm } from '@/components/auth/AuthForm'; -import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; -import { EnhancedFormError } from '@/components/errors/EnhancedFormError'; -import { routes } from '@/lib/routing/RouteConfig'; -import { LoginViewData } from '@/lib/builders/view-data/types/LoginViewData'; -import { FormState } from '@/lib/builders/view-data/types/FormState'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertCircle, LogIn, Mail } from 'lucide-react'; +import React from 'react'; interface LoginTemplateProps { viewData: LoginViewData; diff --git a/apps/website/templates/auth/ResetPasswordTemplate.tsx b/apps/website/templates/auth/ResetPasswordTemplate.tsx index 4d85acdbf..6548fcc56 100644 --- a/apps/website/templates/auth/ResetPasswordTemplate.tsx +++ b/apps/website/templates/auth/ResetPasswordTemplate.tsx @@ -1,20 +1,20 @@ 'use client'; -import React from 'react'; -import { Shield, CheckCircle2, ArrowLeft, AlertCircle } from 'lucide-react'; +import { AuthCard } from '@/components/auth/AuthCard'; +import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; +import { AuthForm } from '@/components/auth/AuthForm'; +import { ResetPasswordViewData } from '@/lib/builders/view-data/types/ResetPasswordViewData'; +import { routes } from '@/lib/routing/RouteConfig'; import { Button } from '@/ui/Button'; -import { Text } from '@/ui/Text'; +import { Icon } from '@/ui/Icon'; import { Link } from '@/ui/Link'; import { LoadingSpinner } from '@/ui/LoadingSpinner'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { Icon } from '@/ui/Icon'; -import { AuthCard } from '@/components/auth/AuthCard'; -import { AuthForm } from '@/components/auth/AuthForm'; import { PasswordField } from '@/ui/PasswordField'; -import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; -import { routes } from '@/lib/routing/RouteConfig'; -import { ResetPasswordViewData } from '@/lib/builders/view-data/types/ResetPasswordViewData'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertCircle, ArrowLeft, CheckCircle2, Shield } from 'lucide-react'; +import React from 'react'; interface ResetPasswordTemplateProps { viewData: ResetPasswordViewData; diff --git a/apps/website/templates/auth/SignupTemplate.tsx b/apps/website/templates/auth/SignupTemplate.tsx index 1dd6549d8..352a24a6f 100644 --- a/apps/website/templates/auth/SignupTemplate.tsx +++ b/apps/website/templates/auth/SignupTemplate.tsx @@ -1,21 +1,21 @@ 'use client'; -import React from 'react'; -import { UserPlus, Mail, User, Check, X, AlertCircle } from 'lucide-react'; -import { Button } from '@/ui/Button'; -import { Input } from '@/ui/Input'; -import { Text } from '@/ui/Text'; -import { Link } from '@/ui/Link'; -import { Icon } from '@/ui/Icon'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { LoadingSpinner } from '@/ui/LoadingSpinner'; -import { PasswordField } from '@/ui/PasswordField'; import { AuthCard } from '@/components/auth/AuthCard'; -import { AuthForm } from '@/components/auth/AuthForm'; import { AuthFooterLinks } from '@/components/auth/AuthFooterLinks'; +import { AuthForm } from '@/components/auth/AuthForm'; import { SignupViewData } from '@/lib/builders/view-data/types/SignupViewData'; import { checkPasswordStrength } from '@/lib/utils/validation'; +import { Button } from '@/ui/Button'; +import { Icon } from '@/ui/Icon'; +import { Input } from '@/ui/Input'; +import { Link } from '@/ui/Link'; +import { LoadingSpinner } from '@/ui/LoadingSpinner'; +import { PasswordField } from '@/ui/PasswordField'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { AlertCircle, Check, Mail, User, UserPlus, X } from 'lucide-react'; +import React from 'react'; interface SignupTemplateProps { viewData: SignupViewData; diff --git a/apps/website/templates/layout/GlobalFooterTemplate.tsx b/apps/website/templates/layout/GlobalFooterTemplate.tsx index 2155402f5..90d6a3298 100644 --- a/apps/website/templates/layout/GlobalFooterTemplate.tsx +++ b/apps/website/templates/layout/GlobalFooterTemplate.tsx @@ -1,8 +1,7 @@ -import React from 'react'; import { AppFooter } from '@/ui/AppFooter'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; import Image from 'next/image'; import Link from 'next/link'; diff --git a/apps/website/templates/layout/GlobalSidebarTemplate.tsx b/apps/website/templates/layout/GlobalSidebarTemplate.tsx index 8f013052f..12b0bfd99 100644 --- a/apps/website/templates/layout/GlobalSidebarTemplate.tsx +++ b/apps/website/templates/layout/GlobalSidebarTemplate.tsx @@ -1,12 +1,12 @@ 'use client'; -import { Box } from '@/ui/Box'; +import { AuthedNav } from '@/components/layout/AuthedNav'; +import { PublicNav } from '@/components/layout/PublicNav'; +import { useCurrentSession } from '@/hooks/auth/useCurrentSession'; import { DashboardRail } from '@/ui/DashboardRail'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; import { usePathname } from 'next/navigation'; -import { useCurrentSession } from '@/hooks/auth/useCurrentSession'; -import { PublicNav } from '@/components/layout/PublicNav'; -import { AuthedNav } from '@/components/layout/AuthedNav'; export interface GlobalSidebarViewData {} diff --git a/apps/website/templates/layout/HeaderContentTemplate.tsx b/apps/website/templates/layout/HeaderContentTemplate.tsx index 23fc544be..63eccb93b 100644 --- a/apps/website/templates/layout/HeaderContentTemplate.tsx +++ b/apps/website/templates/layout/HeaderContentTemplate.tsx @@ -1,13 +1,12 @@ -import React from 'react'; -import { Text } from '@/ui/Text'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; -import { useCurrentSession } from '@/hooks/auth/useCurrentSession'; -import { usePathname } from 'next/navigation'; -import { routes } from '@/lib/routing/RouteConfig'; import { BrandMark } from '@/components/layout/BrandMark'; import { HeaderActions } from '@/components/layout/HeaderActions'; import { PublicNav } from '@/components/layout/PublicNav'; +import { useCurrentSession } from '@/hooks/auth/useCurrentSession'; +import { routes } from '@/lib/routing/RouteConfig'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { usePathname } from 'next/navigation'; export interface HeaderContentViewData {} diff --git a/apps/website/templates/layout/RootAppShellTemplate.tsx b/apps/website/templates/layout/RootAppShellTemplate.tsx index 7b2a46bde..52d4749fa 100644 --- a/apps/website/templates/layout/RootAppShellTemplate.tsx +++ b/apps/website/templates/layout/RootAppShellTemplate.tsx @@ -1,17 +1,17 @@ 'use client'; -import React from 'react'; -import { AppShell } from '@/ui/AppShell'; -import { ControlBar } from '@/ui/ControlBar'; -import { TopNav } from '@/ui/TopNav'; -import { ContentViewport } from '@/ui/ContentViewport'; -import { GlobalSidebarTemplate } from './GlobalSidebarTemplate'; -import { GlobalFooterTemplate } from './GlobalFooterTemplate'; -import { HeaderContentTemplate } from './HeaderContentTemplate'; -import { Box } from '@/ui/Box'; -import { usePathname } from 'next/navigation'; import { useCurrentSession } from '@/hooks/auth/useCurrentSession'; import { routes } from '@/lib/routing/RouteConfig'; +import { AppShell } from '@/ui/AppShell'; +import { ContentViewport } from '@/ui/ContentViewport'; +import { ControlBar } from '@/ui/ControlBar'; +import { Box } from '@/ui/primitives/Box'; +import { TopNav } from '@/ui/TopNav'; +import { usePathname } from 'next/navigation'; +import React from 'react'; +import { GlobalFooterTemplate } from './GlobalFooterTemplate'; +import { GlobalSidebarTemplate } from './GlobalSidebarTemplate'; +import { HeaderContentTemplate } from './HeaderContentTemplate'; export interface RootAppShellViewData { children: React.ReactNode; diff --git a/apps/website/templates/onboarding/OnboardingTemplate.tsx b/apps/website/templates/onboarding/OnboardingTemplate.tsx index f355e432a..130782af5 100644 --- a/apps/website/templates/onboarding/OnboardingTemplate.tsx +++ b/apps/website/templates/onboarding/OnboardingTemplate.tsx @@ -1,17 +1,17 @@ 'use client'; -import { OnboardingShell } from '@/components/onboarding/OnboardingShell'; -import { OnboardingStepper } from '@/components/onboarding/OnboardingStepper'; -import { OnboardingHelpPanel } from '@/components/onboarding/OnboardingHelpPanel'; -import { OnboardingStepPanel } from '@/components/onboarding/OnboardingStepPanel'; -import { OnboardingPrimaryActions } from '@/components/onboarding/OnboardingPrimaryActions'; -import { PersonalInfo, PersonalInfoStep } from '@/components/onboarding/PersonalInfoStep'; import { AvatarInfo, AvatarStep } from '@/components/onboarding/AvatarStep'; -import { FormEvent } from 'react'; -import { Text } from '@/ui/Text'; -import { Stack } from '@/ui/Stack'; -import { Box } from '@/ui/Box'; +import { OnboardingHelpPanel } from '@/components/onboarding/OnboardingHelpPanel'; +import { OnboardingPrimaryActions } from '@/components/onboarding/OnboardingPrimaryActions'; +import { OnboardingShell } from '@/components/onboarding/OnboardingShell'; +import { OnboardingStepPanel } from '@/components/onboarding/OnboardingStepPanel'; +import { OnboardingStepper } from '@/components/onboarding/OnboardingStepper'; +import { PersonalInfo, PersonalInfoStep } from '@/components/onboarding/PersonalInfoStep'; import { OnboardingError } from '@/ui/OnboardingError'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Text } from '@/ui/Text'; +import { FormEvent } from 'react'; type OnboardingStep = 1 | 2; diff --git a/apps/website/ui/Accordion.tsx b/apps/website/ui/Accordion.tsx index 431258dd6..9e91f5ba7 100644 --- a/apps/website/ui/Accordion.tsx +++ b/apps/website/ui/Accordion.tsx @@ -2,8 +2,8 @@ import { ChevronDown, ChevronUp } from 'lucide-react'; import { ReactNode } from 'react'; -import { Box } from './primitives/Box'; import { Icon } from './Icon'; +import { Box } from './primitives/Box'; import { Stack } from './primitives/Stack'; import { Text } from './Text'; diff --git a/apps/website/ui/Breadcrumbs.tsx b/apps/website/ui/Breadcrumbs.tsx index 0fc8f1c66..1b3e942d9 100644 --- a/apps/website/ui/Breadcrumbs.tsx +++ b/apps/website/ui/Breadcrumbs.tsx @@ -1,7 +1,6 @@ -import React from 'react'; import { Link } from '@/ui/Link'; -import { Box } from '@/ui/Box'; -import { Stack } from '@/ui/Stack'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; export type BreadcrumbItem = { diff --git a/apps/website/ui/CategoryDistribution.tsx b/apps/website/ui/CategoryDistribution.tsx index 65d03d110..8aa07e8fd 100644 --- a/apps/website/ui/CategoryDistribution.tsx +++ b/apps/website/ui/CategoryDistribution.tsx @@ -1,10 +1,10 @@ -import { Box } from '@/ui/Box'; import { CategoryDistributionCard } from '@/ui/CategoryDistributionCard'; -import { Grid } from '@/ui/Grid'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; import { Text } from '@/ui/Text'; import { BarChart3 } from 'lucide-react'; diff --git a/apps/website/ui/FeedEmptyState.tsx b/apps/website/ui/FeedEmptyState.tsx index 0b97d355e..4b244dbbf 100644 --- a/apps/website/ui/FeedEmptyState.tsx +++ b/apps/website/ui/FeedEmptyState.tsx @@ -1,9 +1,8 @@ -import React from 'react'; -import { Card } from '@/ui/Card'; import { Button } from '@/ui/Button'; -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; +import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; export function FeedEmptyState() { return ( diff --git a/apps/website/ui/Footer.tsx b/apps/website/ui/Footer.tsx index 14bb7b3e5..b855abd1d 100644 --- a/apps/website/ui/Footer.tsx +++ b/apps/website/ui/Footer.tsx @@ -1,6 +1,6 @@ -import { Box } from '@/ui/Box'; -import { Text } from '@/ui/Text'; import { Link } from '@/ui/Link'; +import { Box } from '@/ui/primitives/Box'; +import { Text } from '@/ui/Text'; const discordUrl = process.env.NEXT_PUBLIC_DISCORD_URL || 'https://discord.gg/gridpilot'; const xUrl = process.env.NEXT_PUBLIC_X_URL || '#'; diff --git a/apps/website/ui/LandingItems.tsx b/apps/website/ui/LandingItems.tsx index b0c68607d..9d39eeb75 100644 --- a/apps/website/ui/LandingItems.tsx +++ b/apps/website/ui/LandingItems.tsx @@ -1,8 +1,7 @@ -import React from 'react'; -import { Stack } from '@/ui/Stack'; +import { Box } from '@/ui/primitives/Box'; +import { Stack } from '@/ui/primitives/Stack'; +import { Surface } from '@/ui/primitives/Surface'; import { Text } from '@/ui/Text'; -import { Surface } from '@/ui/Surface'; -import { Box } from '@/ui/Box'; export function FeatureItem({ text }: { text: string }) { return ( diff --git a/apps/website/ui/OnboardingCTA.tsx b/apps/website/ui/OnboardingCTA.tsx index 93188fff5..78b6e1972 100644 --- a/apps/website/ui/OnboardingCTA.tsx +++ b/apps/website/ui/OnboardingCTA.tsx @@ -1,5 +1,5 @@ import { Button } from '@/ui/Button'; -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; interface OnboardingCTAProps { onBack?: () => void; diff --git a/apps/website/ui/OnboardingStepHeader.tsx b/apps/website/ui/OnboardingStepHeader.tsx index a7389d0eb..fe3330975 100644 --- a/apps/website/ui/OnboardingStepHeader.tsx +++ b/apps/website/ui/OnboardingStepHeader.tsx @@ -1,4 +1,4 @@ -import { Stack } from '@/ui/Stack'; +import { Stack } from '@/ui/primitives/Stack'; import { Text } from '@/ui/Text'; interface OnboardingStepHeaderProps { diff --git a/apps/website/ui/OnboardingStepPanel.tsx b/apps/website/ui/OnboardingStepPanel.tsx index fdc687f5d..b3e299ebd 100644 --- a/apps/website/ui/OnboardingStepPanel.tsx +++ b/apps/website/ui/OnboardingStepPanel.tsx @@ -1,4 +1,4 @@ -import { Surface } from '@/ui/Surface'; +import { Surface } from '@/ui/primitives/Surface'; interface OnboardingStepPanelProps { children: React.ReactNode; diff --git a/apps/website/ui/ProfileBio.tsx b/apps/website/ui/ProfileBio.tsx index 9c23be4dd..7abae6603 100644 --- a/apps/website/ui/ProfileBio.tsx +++ b/apps/website/ui/ProfileBio.tsx @@ -1,9 +1,9 @@ -import { Box } from '@/ui/Box'; import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; +import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; import { User } from 'lucide-react'; diff --git a/apps/website/ui/ProfileStatGrid.tsx b/apps/website/ui/ProfileStatGrid.tsx index f14a6fa4a..58d882745 100644 --- a/apps/website/ui/ProfileStatGrid.tsx +++ b/apps/website/ui/ProfileStatGrid.tsx @@ -1,7 +1,7 @@ -import { Box } from '@/ui/Box'; -import { Grid } from '@/ui/Grid'; +import { Box } from '@/ui/primitives/Box'; +import { Grid } from '@/ui/primitives/Grid'; import { Text } from '@/ui/Text'; interface Stat { diff --git a/apps/website/ui/ProfileTabs.tsx b/apps/website/ui/ProfileTabs.tsx index 7ded79157..b3380b7b6 100644 --- a/apps/website/ui/ProfileTabs.tsx +++ b/apps/website/ui/ProfileTabs.tsx @@ -1,9 +1,9 @@ -import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; -import { Surface } from '@/ui/Surface'; +import { Box } from '@/ui/primitives/Box'; +import { Surface } from '@/ui/primitives/Surface'; import { BarChart3, TrendingUp, User } from 'lucide-react'; export type ProfileTab = 'overview' | 'stats' | 'ratings'; diff --git a/apps/website/ui/StepProgressRail.tsx b/apps/website/ui/StepProgressRail.tsx index c45127c66..f27ccf5ef 100644 --- a/apps/website/ui/StepProgressRail.tsx +++ b/apps/website/ui/StepProgressRail.tsx @@ -1,4 +1,4 @@ -import { Box } from '@/ui/Box'; +import { Box } from '@/ui/primitives/Box'; import { motion } from 'framer-motion'; interface StepProgressRailProps { diff --git a/docs/architecture/website/REACT_COMPONENT_ARCHITECTURE.md b/docs/architecture/website/REACT_COMPONENT_ARCHITECTURE.md index 4fa538dd0..c40fa2812 100644 --- a/docs/architecture/website/REACT_COMPONENT_ARCHITECTURE.md +++ b/docs/architecture/website/REACT_COMPONENT_ARCHITECTURE.md @@ -109,7 +109,8 @@ export function TeamsTemplate({ teams, searchQuery, onSearchChange, onTeamClick - Can contain app-specific business logic - Can use Next.js hooks (but not Next.js components like `Link`) - Should be reusable within the app context -- Should NOT be generic UI primitives +- **Strictly Forbidden**: Generic UI primitives (`Box`, `Surface`) and generic wrappers (`Layout`, `Container`) +- **Strictly Forbidden**: The `className` prop (styling must be handled by UI components) **Example**: ```typescript @@ -177,14 +178,16 @@ export function Card({ children, className }: CardProps) { To prevent "div wrapper" abuse and maintain architectural integrity, we enforce a strict boundary between **Primitives** and **Semantic UI**. -### 1. Primitives (`ui/primitives/`) -- **Generic building blocks**: `Box`, `Surface`, `Stack`, `Grid`, `GridItem`. -- **Internal only**: These should NEVER be imported outside of the `ui/` layer. +### 1. Primitives & Generic Wrappers (Forbidden in Components) +- **Primitives**: `Box`, `Surface` (in `ui/primitives/`) +- **Generic Wrappers**: `Layout`, `Container` (in `ui/`) +- **Internal only**: These should NEVER be imported by `components/`. They are for building semantic UI elements. - **Full flexibility**: They allow arbitrary styling (bg, border, shadow, etc.) to build semantic components. -### 2. Semantic UI (`ui/`) -- **Building blocks for components**: `Card`, `Panel`, `Button`, `Table`, `Stack`, `Grid`. -- **Restricted flexibility**: Semantic layout components (like `Stack`, `Grid`) are restricted to layout-only props. They do NOT allow styling props (bg, border, etc.). +### 2. Semantic UI (Allowed in Components) +- **Building blocks**: `Card`, `Panel`, `Button`, `Table`. +- **Layout Components**: `Stack`, `Grid` (Restricted to layout-only props). +- **Restricted flexibility**: Semantic layout components are restricted to layout-only props. They do NOT allow styling props (bg, border, etc.). - **Public API**: These are the only UI elements that should be imported by `components/` or `pages/`. **Rule of thumb**: If you need a styled container in a component, use `Panel` or `Card`. If you need a new type of styled container, create it in `ui/` using primitives. Direct use of primitives or raw HTML tags in `components/` is forbidden.