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

View File

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

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 ChampionshipStandingsListProps {
children: ReactNode;

View File

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

View File

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

View File

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

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 JoinRequestListProps {
children: ReactNode;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 = [

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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