website refactor

This commit is contained in:
2026-01-18 16:43:32 +01:00
parent 13567d51af
commit b263de3a35
418 changed files with 1986 additions and 2161 deletions

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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';

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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;

View File

@@ -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';

View File

@@ -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({
/>
<Stack p={6} position="relative">
<Stack direction={{ base: 'col', md: 'row' }} gap={6} align="start" className="md:items-center">
<Stack direction={{ base: 'col', md: 'row' }} gap={6} align={{ base: 'start', md: 'center' }}>
{/* Info */}
<Stack flexGrow={1}>
<Stack gap={3}>
@@ -83,7 +83,7 @@ export function RaceHeaderPanel({
{/* Actions */}
{actions && (
<Stack flexShrink={0} width={{ base: 'full', md: 'auto' }}>
<Stack flexShrink={0} w={{ base: 'full', md: 'auto' }}>
{actions}
</Stack>
)}

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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'

View File

@@ -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[];

View File

@@ -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;

View File

@@ -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: {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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: {

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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';

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;