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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

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