website refactor

This commit is contained in:
2026-01-15 17:12:24 +01:00
parent c3b308e960
commit f035cfe7ce
468 changed files with 24378 additions and 17324 deletions

View File

@@ -1,7 +1,7 @@
import { headers } from 'next/headers';
import { redirect } from 'next/navigation';
import { createRouteGuard } from '@/lib/auth/createRouteGuard';
import Section from '@/ui/Section';
import { Section } from '@/ui/Section';
interface AdminLayoutProps {
children: React.ReactNode;

View File

@@ -18,7 +18,7 @@ import {
Target,
Timer,
} from 'lucide-react';
import LeagueCard from '@/components/leagues/LeagueCard';
import { LeagueCard } from '@/ui/LeagueCardWrapper';
import { Button } from '@/ui/Button';
import { Card } from '@/ui/Card';
import { Input } from '@/ui/Input';
@@ -29,7 +29,7 @@ import { Stack } from '@/ui/Stack';
import { Text } from '@/ui/Text';
import { Grid } from '@/ui/Grid';
import { GridItem } from '@/ui/GridItem';
import { HeroSection } from '@/components/shared/HeroSection';
import { PageHero } from '@/ui/PageHero';
import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData';
import type { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel';
@@ -468,7 +468,7 @@ export function LeaguesClient({
return (
<Container size="lg" pb={12}>
{/* Hero Section */}
<HeroSection
<PageHero
title="Find Your Grid"
description="From casual sprints to epic endurance battles — discover the perfect league for your racing style."
icon={Trophy}

View File

@@ -2,7 +2,7 @@
import React, { useState } from 'react';
import { LeagueRulebookTemplate } from '@/templates/LeagueRulebookTemplate';
import { type RulebookSection } from '@/components/leagues/RulebookTabs';
import { type RulebookSection } from '@/ui/RulebookTabs';
import type { LeagueRulebookViewData } from '@/lib/view-data/LeagueRulebookViewData';
interface LeagueRulebookPageClientProps {

View File

@@ -1,9 +1,9 @@
'use client';
import PenaltyFAB from '@/components/leagues/PenaltyFAB';
import QuickPenaltyModal from '@/components/leagues/QuickPenaltyModal';
import { PenaltyFAB } from '@/ui/PenaltyFAB';
import { QuickPenaltyModal } from '@/components/leagues/QuickPenaltyModal';
import { ReviewProtestModal } from '@/components/leagues/ReviewProtestModal';
import StewardingStats from '@/components/leagues/StewardingStats';
import { StewardingStats } from '@/components/leagues/StewardingStats';
import { Button } from '@/ui/Button';
import { Card } from '@/ui/Card';
import { useLeagueStewardingMutations } from "@/hooks/league/useLeagueStewardingMutations";
@@ -19,7 +19,7 @@ import {
} from 'lucide-react';
import Link from 'next/link';
import { useMemo, useState } from 'react';
import { PendingProtestsList } from '@/components/leagues/PendingProtestsList';
import { PendingProtestsList } from '@/ui/PendingProtestsList';
import { PenaltyHistoryList } from '@/components/leagues/PenaltyHistoryList';
interface StewardingData {

View File

@@ -1,7 +1,7 @@
'use client';
import Button from '@/ui/Button';
import Card from '@/ui/Card';
import { Button } from '@/ui/Button';
import { Card } from '@/ui/Card';
import { useEffectiveDriverId } from "@/lib/hooks/useEffectiveDriverId";
import { LeagueRoleUtility } from '@/lib/utilities/LeagueRoleUtility';
import { useInject } from '@/lib/di/hooks/useInject';
@@ -37,7 +37,7 @@ import { useMemo, useState } from 'react';
// Shared state components
import { StateContainer } from '@/components/shared/state/StateContainer';
import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper';
import { LoadingWrapper } from '@/ui/LoadingWrapper';
import { useLeagueAdminStatus } from "@/lib/hooks/league/useLeagueAdminStatus";
import { useProtestDetail } from "@/lib/hooks/league/useProtestDetail";

View File

@@ -1,9 +1,9 @@
'use client';
import React, { useState } from 'react';
import Card from '@/ui/Card';
import Button from '@/ui/Button';
import TransactionRow from '@/components/leagues/TransactionRow';
import { Card } from '@/ui/Card';
import { Button } from '@/ui/Button';
import { TransactionRow } from '@/components/leagues/TransactionRow';
import { LeagueWalletViewModel } from '@/lib/view-models/LeagueWalletViewModel';
import {
Wallet,

View File

@@ -1,10 +1,10 @@
'use client';
import LeagueReviewSummary from '@/components/leagues/LeagueReviewSummary';
import Button from '@/ui/Button';
import Card from '@/ui/Card';
import Heading from '@/ui/Heading';
import Input from '@/ui/Input';
import { LeagueReviewSummary } from '@/components/leagues/LeagueReviewSummary';
import { Button } from '@/ui/Button';
import { Card } from '@/ui/Card';
import { Heading } from '@/ui/Heading';
import { Input } from '@/ui/Input';
import { useAuth } from '@/lib/auth/AuthContext';
import {
AlertCircle,

View File

@@ -3,8 +3,8 @@
import React from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import CreateLeagueWizard from '@/components/leagues/CreateLeagueWizard';
import Section from '@/ui/Section';
import Container from '@/ui/Container';
import { Section } from '@/ui/Section';
import { Container } from '@/ui/Container';
type StepName = 'basics' | 'visibility' | 'structure' | 'schedule' | 'scoring' | 'stewarding' | 'review';

View File

@@ -1,7 +1,7 @@
import type { ReactNode } from 'react';
import { headers } from 'next/headers';
import { redirect } from 'next/navigation';
import ProfileLayoutShell from '@/components/profile/ProfileLayoutShell';
import { ProfileLayoutShell } from '@/ui/ProfileLayoutShell';
import { createRouteGuard } from '@/lib/auth/createRouteGuard';
interface ProfileLayoutProps {

View File

@@ -5,7 +5,7 @@ import { Container } from '@/ui/Container';
import { Heading } from '@/ui/Heading';
import { Grid } from '@/ui/Grid';
import { routes } from '@/lib/routing/RouteConfig';
import { LiveryCard } from '@/components/profile/LiveryCard';
import { LiveryCard } from '@/ui/LiveryCard';
export default async function ProfileLiveriesPage() {
const mockLiveries = [

View File

@@ -1,8 +1,8 @@
import Link from 'next/link';
import Button from '@/ui/Button';
import Card from '@/ui/Card';
import Container from '@/ui/Container';
import Heading from '@/ui/Heading';
import { Button } from '@/ui/Button';
import { Card } from '@/ui/Card';
import { Container } from '@/ui/Container';
import { Heading } from '@/ui/Heading';
import { routes } from '@/lib/routing/RouteConfig';
export default async function ProfileLiveryUploadPage() {

View File

@@ -1,8 +1,8 @@
import Link from 'next/link';
import Button from '@/ui/Button';
import Card from '@/ui/Card';
import Container from '@/ui/Container';
import Heading from '@/ui/Heading';
import { Button } from '@/ui/Button';
import { Card } from '@/ui/Card';
import { Container } from '@/ui/Container';
import { Heading } from '@/ui/Heading';
import { routes } from '@/lib/routing/RouteConfig';
export default async function ProfileSettingsPage() {

View File

@@ -2,13 +2,13 @@
import { useState } from 'react';
import { motion, useReducedMotion } from 'framer-motion';
import Card from '@/ui/Card';
import Button from '@/ui/Button';
import StatCard from '@/ui/StatCard';
import SectionHeader from '@/ui/SectionHeader';
import StatusBadge from '@/ui/StatusBadge';
import InfoBanner from '@/ui/InfoBanner';
import PageHeader from '@/ui/PageHeader';
import { Card } from '@/ui/Card';
import { Button } from '@/ui/Button';
import { StatCard } from '@/ui/StatCard';
import { SectionHeader } from '@/ui/SectionHeader';
import { StatusBadge } from '@/ui/StatusBadge';
import { InfoBanner } from '@/ui/InfoBanner';
import { PageHeader } from '@/ui/PageHeader';
import { siteConfig } from '@/lib/siteConfig';
import { useSponsorBilling } from "@/lib/hooks/sponsor/useSponsorBilling";
import {

View File

@@ -4,9 +4,9 @@ import { useState } from 'react';
import { useSearchParams } from 'next/navigation';
import { motion, useReducedMotion, AnimatePresence } from 'framer-motion';
import Link from 'next/link';
import Card from '@/ui/Card';
import Button from '@/ui/Button';
import InfoBanner from '@/ui/InfoBanner';
import { Card } from '@/ui/Card';
import { Button } from '@/ui/Button';
import { InfoBanner } from '@/ui/InfoBanner';
import { useSponsorSponsorships } from "@/lib/hooks/sponsor/useSponsorSponsorships";
import {
Megaphone,

View File

@@ -2,13 +2,13 @@
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 Toggle from '@/ui/Toggle';
import SectionHeader from '@/ui/SectionHeader';
import FormField from '@/ui/FormField';
import PageHeader from '@/ui/PageHeader';
import { Card } from '@/ui/Card';
import { Button } from '@/ui/Button';
import { Input } from '@/ui/Input';
import { Toggle } from '@/ui/Toggle';
import { SectionHeader } from '@/ui/SectionHeader';
import { FormField } from '@/ui/FormField';
import { PageHeader } from '@/ui/PageHeader';
import {
Settings,
Building2,

View File

@@ -2,12 +2,12 @@
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 SponsorHero from '@/components/sponsors/SponsorHero';
import SponsorWorkflowMockup from '@/components/sponsors/SponsorWorkflowMockup';
import SponsorBenefitCard from '@/components/sponsors/SponsorBenefitCard';
import { Card } from '@/ui/Card';
import { Button } from '@/ui/Button';
import { Input } from '@/ui/Input';
import { SponsorHero } from '@/ui/SponsorHero';
import { SponsorWorkflowMockup } from '@/components/sponsors/SponsorWorkflowMockup';
import { SponsorBenefitCard } from '@/components/sponsors/SponsorBenefitCard';
import { siteConfig } from '@/lib/siteConfig';
import {
Building2,
@@ -468,7 +468,7 @@ export default function SponsorSignupPage() {
value={formData.contactEmail}
onChange={(e) => setFormData({ ...formData, contactEmail: e.target.value })}
placeholder="sponsor@company.com"
error={!!errors.contactEmail}
variant={errors.contactEmail ? 'error' : 'default'}
errorMessage={errors.contactEmail}
/>
</div>
@@ -482,7 +482,7 @@ export default function SponsorSignupPage() {
value={formData.password}
onChange={(e) => setFormData({ ...formData, password: e.target.value })}
placeholder="••••••••"
error={!!errors.password}
variant={errors.password ? 'error' : 'default'}
errorMessage={errors.password}
/>
</div>
@@ -567,7 +567,7 @@ export default function SponsorSignupPage() {
value={formData.companyName}
onChange={(e) => setFormData({ ...formData, companyName: e.target.value })}
placeholder="Your company name"
error={!!errors.companyName}
variant={errors.companyName ? 'error' : 'default'}
errorMessage={errors.companyName}
/>
</div>
@@ -584,7 +584,7 @@ export default function SponsorSignupPage() {
value={formData.contactEmail}
onChange={(e) => setFormData({ ...formData, contactEmail: e.target.value })}
placeholder="sponsor@company.com"
error={!!errors.contactEmail}
variant={errors.contactEmail ? 'error' : 'default'}
errorMessage={errors.contactEmail}
/>
</div>
@@ -688,7 +688,7 @@ export default function SponsorSignupPage() {
value={formData.password}
onChange={(e) => setFormData({ ...formData, password: e.target.value })}
placeholder="Min. 8 characters"
error={!!errors.password}
variant={errors.password ? 'error' : 'default'}
errorMessage={errors.password}
/>
</div>
@@ -702,7 +702,7 @@ export default function SponsorSignupPage() {
value={formData.confirmPassword}
onChange={(e) => setFormData({ ...formData, confirmPassword: e.target.value })}
placeholder="Confirm password"
error={!!errors.confirmPassword}
variant={errors.confirmPassword ? 'error' : 'default'}
errorMessage={errors.confirmPassword}
/>
</div>

View File

@@ -1,7 +1,7 @@
'use client';
import { useRouter } from 'next/navigation';
import TeamLeaderboardTemplate from '@/templates/TeamLeaderboardTemplate';
import { TeamLeaderboardTemplate } from '@/templates/TeamLeaderboardTemplate';
import { useState } from 'react';
import type { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel';