website refactor
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
'use client';
|
'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 type { DriversViewData } from '@/lib/types/view-data/DriversViewData';
|
||||||
|
import { DriversTemplate } from '@/templates/DriversTemplate';
|
||||||
import { Container } from '@/ui/Container';
|
import { Container } from '@/ui/Container';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import { useRouter } from 'next/navigation';
|
||||||
|
import { useMemo, useState } from 'react';
|
||||||
|
|
||||||
import { routes } from '@/lib/routing/RouteConfig';
|
import { routes } from '@/lib/routing/RouteConfig';
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
'use client';
|
'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 { DriverProfileViewData } from '@/lib/types/view-data/DriverProfileViewData';
|
||||||
import type { ProfileTab } from '@/ui/ProfileTabs';
|
import { DriverProfileTemplate } from '@/templates/DriverProfileTemplate';
|
||||||
import { Container } from '@/ui/Container';
|
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 { Text } from '@/ui/Text';
|
||||||
|
import { useRouter } from 'next/navigation';
|
||||||
|
import { useState } from 'react';
|
||||||
|
|
||||||
interface DriverProfilePageClientProps {
|
interface DriverProfilePageClientProps {
|
||||||
viewData: DriverProfileViewData | null;
|
viewData: DriverProfileViewData | null;
|
||||||
|
|||||||
@@ -1,32 +1,32 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React, { useState } from 'react';
|
|
||||||
import { LeagueCard } from '@/components/leagues/LeagueCardWrapper';
|
import { LeagueCard } from '@/components/leagues/LeagueCardWrapper';
|
||||||
import { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel';
|
|
||||||
import { routes } from '@/lib/routing/RouteConfig';
|
import { routes } from '@/lib/routing/RouteConfig';
|
||||||
import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData';
|
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 { Stack } from '@/ui/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Heading } from '@/ui/Heading';
|
|
||||||
import { Button } from '@/ui/Button';
|
|
||||||
import { Input } from '@/ui/Input';
|
|
||||||
import {
|
import {
|
||||||
Flame,
|
Award,
|
||||||
Globe,
|
Clock,
|
||||||
Plus,
|
Flag,
|
||||||
Search,
|
Flame,
|
||||||
Sparkles,
|
Globe,
|
||||||
Target,
|
Plus,
|
||||||
Trophy,
|
Search,
|
||||||
Users,
|
Sparkles,
|
||||||
Flag,
|
Target,
|
||||||
Award,
|
Timer,
|
||||||
Timer,
|
Trophy,
|
||||||
Clock,
|
Users,
|
||||||
type LucideIcon,
|
type LucideIcon,
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
|
import React, { useState } from 'react';
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// TYPES
|
// TYPES
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
'use client';
|
'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 {
|
import {
|
||||||
useLeagueAdminStatus,
|
createRaceAction,
|
||||||
useLeagueSeasons,
|
deleteRaceAction,
|
||||||
useLeagueAdminSchedule
|
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";
|
} from "@/hooks/league/useLeagueScheduleAdminPageData";
|
||||||
import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId";
|
import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId";
|
||||||
import {
|
|
||||||
publishScheduleAction,
|
|
||||||
unpublishScheduleAction,
|
|
||||||
createRaceAction,
|
|
||||||
updateRaceAction,
|
|
||||||
deleteRaceAction
|
|
||||||
} from '@/app/actions/leagueScheduleActions';
|
|
||||||
import { RaceScheduleCommandModel } from '@/lib/command-models/leagues/RaceScheduleCommandModel';
|
import { RaceScheduleCommandModel } from '@/lib/command-models/leagues/RaceScheduleCommandModel';
|
||||||
import { Box } from '@/ui/Box';
|
import { LeagueAdminScheduleTemplate } from '@/templates/LeagueAdminScheduleTemplate';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Heading } from '@/ui/Heading';
|
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() {
|
export function LeagueAdminSchedulePageClient() {
|
||||||
const params = useParams();
|
const params = useParams();
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { StewardingQueuePanel } from '@/components/leagues/StewardingQueuePanel';
|
import { PenaltyHistoryList } from '@/components/leagues/PenaltyHistoryList';
|
||||||
import { PenaltyFAB } from '@/components/races/PenaltyFAB';
|
|
||||||
import { QuickPenaltyModal } from '@/components/leagues/QuickPenaltyModal';
|
import { QuickPenaltyModal } from '@/components/leagues/QuickPenaltyModal';
|
||||||
import { ReviewProtestModal } from '@/components/leagues/ReviewProtestModal';
|
import { ReviewProtestModal } from '@/components/leagues/ReviewProtestModal';
|
||||||
|
import { StewardingQueuePanel } from '@/components/leagues/StewardingQueuePanel';
|
||||||
import { StewardingStats } from '@/components/leagues/StewardingStats';
|
import { StewardingStats } from '@/components/leagues/StewardingStats';
|
||||||
import { Button } from '@/ui/Button';
|
import { PenaltyFAB } from '@/components/races/PenaltyFAB';
|
||||||
import { Card } from '@/ui/Card';
|
|
||||||
import { useLeagueStewardingMutations } from "@/hooks/league/useLeagueStewardingMutations";
|
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 type { StewardingViewData } from '@/lib/view-data/leagues/StewardingViewData';
|
||||||
|
import { DriverViewModel } from '@/lib/view-models/DriverViewModel';
|
||||||
import { ProtestViewModel } from '@/lib/view-models/ProtestViewModel';
|
import { ProtestViewModel } from '@/lib/view-models/ProtestViewModel';
|
||||||
import { RaceViewModel } from '@/lib/view-models/RaceViewModel';
|
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 {
|
interface StewardingTemplateProps {
|
||||||
data: StewardingViewData;
|
data: StewardingViewData;
|
||||||
|
|||||||
@@ -1,51 +1,51 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { Button } from '@/ui/Button';
|
|
||||||
import { Card } from '@/ui/Card';
|
|
||||||
import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId";
|
import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId";
|
||||||
|
import { ProtestDecisionCommandModel } from '@/lib/command-models/protests/ProtestDecisionCommandModel';
|
||||||
import { useInject } from '@/lib/di/hooks/useInject';
|
import { useInject } from '@/lib/di/hooks/useInject';
|
||||||
import { PROTEST_SERVICE_TOKEN } from '@/lib/di/tokens';
|
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 {
|
import {
|
||||||
AlertTriangle,
|
AlertCircle,
|
||||||
ArrowLeft,
|
AlertTriangle,
|
||||||
Calendar,
|
ArrowLeft,
|
||||||
CheckCircle,
|
Calendar,
|
||||||
ChevronDown,
|
CheckCircle,
|
||||||
Clock,
|
ChevronDown,
|
||||||
ExternalLink,
|
Clock,
|
||||||
Flag,
|
ExternalLink,
|
||||||
Gavel,
|
Flag,
|
||||||
Grid3x3,
|
Gavel,
|
||||||
MapPin,
|
Grid3x3,
|
||||||
MessageCircle,
|
MapPin,
|
||||||
Send,
|
MessageCircle,
|
||||||
Shield,
|
Send,
|
||||||
ShieldAlert,
|
Shield,
|
||||||
TrendingDown,
|
ShieldAlert,
|
||||||
User,
|
TrendingDown,
|
||||||
Video,
|
User,
|
||||||
XCircle,
|
Video,
|
||||||
AlertCircle,
|
XCircle,
|
||||||
type LucideIcon
|
type LucideIcon
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
import { useParams, useRouter } from 'next/navigation';
|
import { useParams, useRouter } from 'next/navigation';
|
||||||
import { useMemo, useState, useEffect } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
|
|
||||||
// Shared state components
|
// Shared state components
|
||||||
import { StateContainer } from '@/components/shared/state/StateContainer';
|
|
||||||
import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper';
|
import { LoadingWrapper } from '@/components/shared/state/LoadingWrapper';
|
||||||
|
import { StateContainer } from '@/components/shared/state/StateContainer';
|
||||||
import { useLeagueAdminStatus } from "@/hooks/league/useLeagueAdminStatus";
|
import { useLeagueAdminStatus } from "@/hooks/league/useLeagueAdminStatus";
|
||||||
import { useProtestDetail } from "@/hooks/league/useProtestDetail";
|
import { useProtestDetail } from "@/hooks/league/useProtestDetail";
|
||||||
import { Box } from '@/ui/Box';
|
import { routes } from '@/lib/routing/RouteConfig';
|
||||||
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 { GridItem } from '@/ui/GridItem';
|
||||||
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Icon as UIIcon } from '@/ui/Icon';
|
import { Icon as UIIcon } from '@/ui/Icon';
|
||||||
import { Link as UILink } from '@/ui/Link';
|
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 = {
|
type PenaltyUiConfig = {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { WalletSummaryPanel } from '@/components/leagues/WalletSummaryPanel';
|
import { WalletSummaryPanel } from '@/components/leagues/WalletSummaryPanel';
|
||||||
import type { LeagueWalletViewData } from '@/lib/view-data/leagues/LeagueWalletViewData';
|
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 { Stack } from '@/ui/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Heading } from '@/ui/Heading';
|
|
||||||
import { Container } from '@/ui/Container';
|
|
||||||
import { Icon as UIIcon } from '@/ui/Icon';
|
|
||||||
import {
|
import {
|
||||||
Download
|
Download
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
import { Button } from '@/ui/Button';
|
|
||||||
|
|
||||||
interface WalletTemplateProps {
|
interface WalletTemplateProps {
|
||||||
viewData: LeagueWalletViewData;
|
viewData: LeagueWalletViewData;
|
||||||
|
|||||||
@@ -1,51 +1,51 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { useAuth } from '@/components/auth/AuthContext';
|
||||||
import { LeagueReviewSummary } from '@/components/leagues/LeagueReviewSummary';
|
import { LeagueReviewSummary } from '@/components/leagues/LeagueReviewSummary';
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
|
import { Icon } from '@/ui/Icon';
|
||||||
import { Input } from '@/ui/Input';
|
import { Input } from '@/ui/Input';
|
||||||
import { Box } from '@/ui/Box';
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Icon } from '@/ui/Icon';
|
|
||||||
import { useAuth } from '@/components/auth/AuthContext';
|
|
||||||
import {
|
import {
|
||||||
AlertCircle,
|
AlertCircle,
|
||||||
Award,
|
Award,
|
||||||
Calendar,
|
Calendar,
|
||||||
Check,
|
Check,
|
||||||
CheckCircle2,
|
CheckCircle2,
|
||||||
ChevronLeft,
|
ChevronLeft,
|
||||||
ChevronRight,
|
ChevronRight,
|
||||||
FileText,
|
FileText,
|
||||||
Loader2,
|
Loader2,
|
||||||
Scale,
|
Scale,
|
||||||
Sparkles,
|
Sparkles,
|
||||||
Trophy,
|
Trophy,
|
||||||
Users,
|
Users,
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
import { FormEvent, useCallback, useEffect, useState } from 'react';
|
import { FormEvent, useCallback, useEffect, useState } from 'react';
|
||||||
|
|
||||||
import { LeagueWizardCommandModel } from '@/lib/command-models/leagues/LeagueWizardCommandModel';
|
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 { LeagueBasicsSection } from '@/components/leagues/LeagueBasicsSection';
|
||||||
import { LeagueDropSection } from '@/components/leagues/LeagueDropSection';
|
import { LeagueDropSection } from '@/components/leagues/LeagueDropSection';
|
||||||
import {
|
import {
|
||||||
ChampionshipsSection,
|
ChampionshipsSection,
|
||||||
ScoringPatternSection
|
ScoringPatternSection
|
||||||
} from '@/components/leagues/LeagueScoringSection';
|
} from '@/components/leagues/LeagueScoringSection';
|
||||||
import { LeagueStewardingSection } from '@/components/leagues/LeagueStewardingSection';
|
import { LeagueStewardingSection } from '@/components/leagues/LeagueStewardingSection';
|
||||||
import { LeagueStructureSection } from '@/components/leagues/LeagueStructureSection';
|
import { LeagueStructureSection } from '@/components/leagues/LeagueStructureSection';
|
||||||
import { LeagueTimingsSection } from '@/components/leagues/LeagueTimingsSection';
|
import { LeagueTimingsSection } from '@/components/leagues/LeagueTimingsSection';
|
||||||
import { LeagueVisibilitySection } from '@/components/leagues/LeagueVisibilitySection';
|
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 { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel';
|
||||||
import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel';
|
|
||||||
import type { Weekday } from '@/lib/types/Weekday';
|
import type { Weekday } from '@/lib/types/Weekday';
|
||||||
import type { WizardErrors } from '@/lib/types/WizardErrors';
|
import type { WizardErrors } from '@/lib/types/WizardErrors';
|
||||||
|
import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel';
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// LOCAL STORAGE PERSISTENCE
|
// LOCAL STORAGE PERSISTENCE
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React, { useState } from 'react';
|
import { UploadDropzone } from '@/components/media/UploadDropzone';
|
||||||
import Link from 'next/link';
|
import { routes } from '@/lib/routing/RouteConfig';
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Container } from '@/ui/Container';
|
import { Container } from '@/ui/Container';
|
||||||
import { Heading } from '@/ui/Heading';
|
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 { 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() {
|
export function ProfileLiveryUploadPageClient() {
|
||||||
const [selectedFile, setSelectedFile] = useState<File | null>(null);
|
const [selectedFile, setSelectedFile] = useState<File | null>(null);
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
'use client';
|
'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 { 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 {
|
interface ProfileSettingsPageClientProps {
|
||||||
viewData: ProfileViewData;
|
viewData: ProfileViewData;
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useState } from 'react';
|
import { InlineNotice } from '@/components/shared/ux/InlineNotice';
|
||||||
import { useRouter } from 'next/navigation';
|
import { ProgressLine } from '@/components/shared/ux/ProgressLine';
|
||||||
import type { Result } from '@/lib/contracts/Result';
|
import type { Result } from '@/lib/contracts/Result';
|
||||||
import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData';
|
import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData';
|
||||||
import { SponsorshipRequestsTemplate } from '@/templates/SponsorshipRequestsTemplate';
|
import { SponsorshipRequestsTemplate } from '@/templates/SponsorshipRequestsTemplate';
|
||||||
import { InlineNotice } from '@/components/shared/ux/InlineNotice';
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { ProgressLine } from '@/components/shared/ux/ProgressLine';
|
import { useRouter } from 'next/navigation';
|
||||||
import { Box } from '@/ui/Box';
|
import { useState } from 'react';
|
||||||
|
|
||||||
interface SponsorshipRequestsClientProps {
|
interface SponsorshipRequestsClientProps {
|
||||||
viewData: SponsorshipRequestsViewData;
|
viewData: SponsorshipRequestsViewData;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import { createRouteGuard } from '@/lib/auth/createRouteGuard';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { headers } from 'next/headers';
|
import { headers } from 'next/headers';
|
||||||
import { redirect } from 'next/navigation';
|
import { redirect } from 'next/navigation';
|
||||||
import { createRouteGuard } from '@/lib/auth/createRouteGuard';
|
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
|
|
||||||
interface SponsorLayoutProps {
|
interface SponsorLayoutProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,37 +1,37 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useState } from 'react';
|
import { SponsorBenefitCard } from '@/components/sponsors/SponsorBenefitCard';
|
||||||
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 { SponsorHero } from '@/components/sponsors/SponsorHero';
|
import { SponsorHero } from '@/components/sponsors/SponsorHero';
|
||||||
import { SponsorWorkflowMockup } from '@/components/sponsors/SponsorWorkflowMockup';
|
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 { 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 {
|
import {
|
||||||
Building2,
|
ArrowRight,
|
||||||
Mail,
|
BarChart3,
|
||||||
Globe,
|
Building2,
|
||||||
Upload,
|
Car,
|
||||||
Eye,
|
CheckCircle2,
|
||||||
TrendingUp,
|
Eye,
|
||||||
Users,
|
Flag,
|
||||||
ArrowRight,
|
Globe,
|
||||||
Trophy,
|
Mail,
|
||||||
Car,
|
Megaphone,
|
||||||
Flag,
|
Shield,
|
||||||
Target,
|
Target,
|
||||||
BarChart3,
|
TrendingUp,
|
||||||
Shield,
|
Trophy,
|
||||||
CheckCircle2,
|
Upload,
|
||||||
Megaphone
|
Users
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
|
import { useState } from 'react';
|
||||||
|
|
||||||
// Sponsorship type definitions
|
// Sponsorship type definitions
|
||||||
interface SponsorshipType {
|
interface SponsorshipType {
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { useRouter } from 'next/navigation';
|
|
||||||
import { CreateTeamForm } from '@/components/teams/CreateTeamForm';
|
import { CreateTeamForm } from '@/components/teams/CreateTeamForm';
|
||||||
import { Section } from '@/ui/Section';
|
import { routes } from '@/lib/routing/RouteConfig';
|
||||||
import { Container } from '@/ui/Container';
|
import { Container } from '@/ui/Container';
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { routes } from '@/lib/routing/RouteConfig';
|
import { Section } from '@/ui/Section';
|
||||||
|
import { useRouter } from 'next/navigation';
|
||||||
|
|
||||||
export default function CreateTeamPage() {
|
export default function CreateTeamPage() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|||||||
@@ -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 { 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 SkillLevel = 'pro' | 'advanced' | 'intermediate' | 'beginner';
|
||||||
type SortBy = 'rating' | 'wins' | 'winRate' | 'races';
|
type SortBy = 'rating' | 'wins' | 'winRate' | 'races';
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
|
||||||
interface AchievementCardProps {
|
interface AchievementCardProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
|
||||||
interface MilestoneItemProps {
|
interface MilestoneItemProps {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
'use client';
|
'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 { 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() {
|
export function ActionFiltersBar() {
|
||||||
const [filter, setFilter] = useState('all');
|
const [filter, setFilter] = useState('all');
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import { StatusIndicator } from '@/ui/StatusIndicator';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Activity } from 'lucide-react';
|
import { Activity } from 'lucide-react';
|
||||||
import { StatusIndicator } from '@/ui/StatusIndicator';
|
|
||||||
|
|
||||||
interface ActionsHeaderProps {
|
interface ActionsHeaderProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface AdminDangerZonePanelProps {
|
interface AdminDangerZonePanelProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface AdminDataTableProps {
|
interface AdminDataTableProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
import { LucideIcon } from 'lucide-react';
|
import { LucideIcon } from 'lucide-react';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface AdminEmptyStateProps {
|
interface AdminEmptyStateProps {
|
||||||
icon: LucideIcon;
|
icon: LucideIcon;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
'use client';
|
'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 { 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 {
|
interface AdminHeaderPanelProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface AdminSectionHeaderProps {
|
interface AdminSectionHeaderProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
import { Grid } from '@/ui/primitives/Grid';
|
||||||
import { Grid } from '@/ui/Grid';
|
|
||||||
import { StatCard } from '@/ui/StatCard';
|
import { StatCard } from '@/ui/StatCard';
|
||||||
import { LucideIcon } from 'lucide-react';
|
import { LucideIcon } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface AdminToolbarProps {
|
interface AdminToolbarProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,23 +1,22 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
import { DateDisplay } from '@/lib/display-objects/DateDisplay';
|
||||||
import {
|
import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData';
|
||||||
Table,
|
|
||||||
TableHead,
|
|
||||||
TableBody,
|
|
||||||
TableRow,
|
|
||||||
TableHeader,
|
|
||||||
TableCell
|
|
||||||
} from '@/ui/Table';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { SimpleCheckbox } from '@/ui/SimpleCheckbox';
|
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 { 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 {
|
interface AdminUsersTableProps {
|
||||||
users: AdminUsersViewData['users'];
|
users: AdminUsersViewData['users'];
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Button } from '@/ui/Button';
|
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 {
|
interface BulkActionBarProps {
|
||||||
selectedCount: number;
|
selectedCount: number;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
'use client';
|
'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 { Button } from '@/ui/Button';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { Input } from '@/ui/Input';
|
import { Input } from '@/ui/Input';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Select } from '@/ui/Select';
|
import { Select } from '@/ui/Select';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
|
import { Filter, Search } from 'lucide-react';
|
||||||
import { AdminToolbar } from './AdminToolbar';
|
import { AdminToolbar } from './AdminToolbar';
|
||||||
|
|
||||||
interface UserFiltersProps {
|
interface UserFiltersProps {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Users, Shield } from 'lucide-react';
|
|
||||||
import { Grid } from '@/ui/Grid';
|
|
||||||
import { MetricCard } from '@/ui/MetricCard';
|
import { MetricCard } from '@/ui/MetricCard';
|
||||||
|
import { Grid } from '@/ui/primitives/Grid';
|
||||||
|
import { Shield, Users } from 'lucide-react';
|
||||||
|
|
||||||
interface UserStatsSummaryProps {
|
interface UserStatsSummaryProps {
|
||||||
total: number;
|
total: number;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface AuthCardProps {
|
interface AuthCardProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
|
|
||||||
interface AuthFooterLinksProps {
|
interface AuthFooterLinksProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
|
|
||||||
interface AuthFormProps {
|
interface AuthFormProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { Grid } from '@/ui/primitives/Grid';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Grid } from '@/ui/Grid';
|
|
||||||
|
|
||||||
interface AuthProviderButtonsProps {
|
interface AuthProviderButtonsProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
|
|
||||||
interface AuthShellProps {
|
interface AuthShellProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -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 { Heading } from '@/ui/Heading';
|
||||||
import { Icon } from '@/ui/Icon';
|
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 = [
|
const USER_ROLES = [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Panel } from '@/ui/Panel';
|
import { Panel } from '@/ui/Panel';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { ActivityFeed } from '../feed/ActivityFeed';
|
import { ActivityFeed } from '../feed/ActivityFeed';
|
||||||
|
|
||||||
interface FeedItem {
|
interface FeedItem {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface DashboardControlBarProps {
|
interface DashboardControlBarProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Grid } from '@/ui/Grid';
|
import { Grid } from '@/ui/Grid';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface KpiItem {
|
interface KpiItem {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
|
|
||||||
interface DashboardRailProps {
|
interface DashboardRailProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
|
|
||||||
interface DashboardShellProps {
|
interface DashboardShellProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Panel } from '@/ui/Panel';
|
import { Panel } from '@/ui/Panel';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface TelemetryPanelProps {
|
interface TelemetryPanelProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -2,13 +2,13 @@ import type { ApiRequestLogger } from '@/lib/infrastructure/ApiRequestLogger';
|
|||||||
import { getGlobalApiLogger } from '@/lib/infrastructure/ApiRequestLogger';
|
import { getGlobalApiLogger } from '@/lib/infrastructure/ApiRequestLogger';
|
||||||
import type { GlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler';
|
import type { GlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler';
|
||||||
import { getGlobalErrorHandler } 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 { Button } from '@/ui/Button';
|
||||||
import { Icon } from '@/ui/Icon';
|
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 { 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
|
// Extend Window interface for debug globals
|
||||||
declare global {
|
declare global {
|
||||||
|
|||||||
@@ -1,26 +1,26 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React, { useEffect, useState } from 'react';
|
import { useNotifications } from '@/components/notifications/NotificationProvider';
|
||||||
import { Wrench, ChevronDown, ChevronUp, X, MessageSquare, Activity, AlertTriangle } from 'lucide-react';
|
import type { NotificationVariant } from '@/components/notifications/notificationTypes';
|
||||||
|
import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId";
|
||||||
import { ApiConnectionMonitor } from '@/lib/api/base/ApiConnectionMonitor';
|
import { ApiConnectionMonitor } from '@/lib/api/base/ApiConnectionMonitor';
|
||||||
import { CircuitBreakerRegistry } from '@/lib/api/base/RetryHandler';
|
import { CircuitBreakerRegistry } from '@/lib/api/base/RetryHandler';
|
||||||
import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler';
|
import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler';
|
||||||
import { useEffectiveDriverId } from "@/hooks/useEffectiveDriverId";
|
import { Activity, AlertTriangle, ChevronDown, ChevronUp, MessageSquare, Wrench, X } from 'lucide-react';
|
||||||
import { useNotifications } from '@/components/notifications/NotificationProvider';
|
import { useEffect, useState } from 'react';
|
||||||
import type { NotificationVariant } from '@/components/notifications/notificationTypes';
|
|
||||||
|
|
||||||
// Import our new components
|
// Import our new components
|
||||||
import { Accordion } from '@/ui/Accordion';
|
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 { Badge } from '@/ui/Badge';
|
||||||
import { Button } from '@/ui/Button';
|
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 types
|
||||||
import type { DemoNotificationType, DemoUrgency } from './types';
|
import type { DemoNotificationType, DemoUrgency } from './types';
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
'use client';
|
'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 { Button } from '@/ui/Button';
|
||||||
import { Grid } from '@/ui/Grid';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { StatusIndicator, StatRow, Badge } from '@/ui/StatusIndicator';
|
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 {
|
interface APIStatusSectionProps {
|
||||||
apiStatus: string;
|
apiStatus: string;
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
'use client';
|
'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 { Bell, Loader2 } from 'lucide-react';
|
||||||
import type { DemoNotificationType, DemoUrgency } from '../types';
|
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 {
|
interface NotificationSendSectionProps {
|
||||||
selectedType: DemoNotificationType;
|
selectedType: DemoNotificationType;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
'use client';
|
'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 { 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 {
|
interface NotificationOption {
|
||||||
type: DemoNotificationType;
|
type: DemoNotificationType;
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React, { useState, useEffect } from 'react';
|
|
||||||
import { Play, Copy, Trash2, Download, Clock } from 'lucide-react';
|
|
||||||
import { getGlobalReplaySystem } from '@/lib/infrastructure/ErrorReplay';
|
import { getGlobalReplaySystem } from '@/lib/infrastructure/ErrorReplay';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Button } from '@/ui/Button';
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { IconButton } from '@/ui/IconButton';
|
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 {
|
interface ReplayEntry {
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
'use client';
|
'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 { 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 {
|
interface UrgencyOption {
|
||||||
urgency: DemoUrgency;
|
urgency: DemoUrgency;
|
||||||
|
|||||||
@@ -1,18 +1,7 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Image } from '@/ui/Image';
|
import { Image } from '@/ui/Image';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
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({
|
export function ActiveDriverCard({
|
||||||
name,
|
name,
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { Grid } from '@/ui/Grid';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
|
import { Grid } from '@/ui/primitives/Grid';
|
||||||
import { StatGridItem } from '@/ui/StatGridItem';
|
import { StatGridItem } from '@/ui/StatGridItem';
|
||||||
import { TrendingUp } from 'lucide-react';
|
import { TrendingUp } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React, { useState, FormEvent } from 'react';
|
|
||||||
import { Input } from '@/ui/Input';
|
|
||||||
import { Button } from '@/ui/Button';
|
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 { Text } from '@/ui/Text';
|
||||||
import { TextArea } from '@/ui/TextArea';
|
import { TextArea } from '@/ui/TextArea';
|
||||||
import { InfoBox } from '@/ui/InfoBox';
|
|
||||||
import { AlertCircle } from 'lucide-react';
|
import { AlertCircle } from 'lucide-react';
|
||||||
|
import React, { FormEvent, useState } from 'react';
|
||||||
|
|
||||||
interface FormErrors {
|
interface FormErrors {
|
||||||
name?: string;
|
name?: string;
|
||||||
|
|||||||
@@ -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 { DriverIdentity } from '@/components/drivers/DriverIdentity';
|
||||||
import { DriverViewModel } from '@/lib/view-models/DriverViewModel';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { DriverStats } from '@/components/drivers/DriverStats';
|
import { DriverStats } from '@/components/drivers/DriverStats';
|
||||||
|
import { RankBadge } from '@/components/leaderboards/RankBadge';
|
||||||
import { routes } from '@/lib/routing/RouteConfig';
|
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 {
|
export interface DriverCardProps {
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
|
|
||||||
import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay';
|
import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay';
|
||||||
import { Zap } from 'lucide-react';
|
|
||||||
import { Badge } from '@/ui/Badge';
|
import { Badge } from '@/ui/Badge';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { Image } from '@/ui/Image';
|
import { Image } from '@/ui/Image';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import { Zap } from 'lucide-react';
|
||||||
|
|
||||||
interface DriverEntryRowProps {
|
interface DriverEntryRowProps {
|
||||||
index: number;
|
index: number;
|
||||||
|
|||||||
@@ -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 { 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 {
|
interface DriverHeaderPanelProps {
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -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 { Badge } from '@/ui/Badge';
|
||||||
import { Image } from '@/ui/Image';
|
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 {
|
export interface DriverIdentityProps {
|
||||||
driver: {
|
driver: {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Box } from '@/ui/Box';
|
import { Box } from '@/ui/primitives/Box';
|
||||||
|
|
||||||
interface DriverPerformanceOverviewProps {
|
interface DriverPerformanceOverviewProps {
|
||||||
stats: {
|
stats: {
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
'use client';
|
'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 { CareerHighlights } from '@/components/drivers/CareerHighlights';
|
||||||
import { DriverRankings } from '@/components/drivers/DriverRankings';
|
import { DriverRankings } from '@/components/drivers/DriverRankings';
|
||||||
import { PerformanceMetrics } from '@/components/drivers/PerformanceMetrics';
|
import { PerformanceMetrics } from '@/components/drivers/PerformanceMetrics';
|
||||||
|
import { ProfileHeader } from '@/components/drivers/ProfileHeader';
|
||||||
import { useDriverProfile } from "@/hooks/driver/useDriverProfile";
|
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 {
|
interface DriverProfileProps {
|
||||||
driver: DriverViewModel;
|
driver: DriverViewModel;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
'use client';
|
'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 { 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 { 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';
|
import { SafetyRatingBadge } from './SafetyRatingBadge';
|
||||||
|
|
||||||
interface DriverProfileHeaderProps {
|
interface DriverProfileHeaderProps {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { LayoutDashboard, BarChart3, ShieldCheck } from 'lucide-react';
|
|
||||||
import { Text } from '@/ui/Text';
|
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';
|
export type ProfileTab = 'overview' | 'stats' | 'ratings';
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { MapPin, Car, Clock, Users2, MailCheck } from 'lucide-react';
|
import { Car, Clock, MailCheck, MapPin, Users2 } from 'lucide-react';
|
||||||
|
|
||||||
interface DriverRacingProfileProps {
|
interface DriverRacingProfileProps {
|
||||||
racingStyle?: string | null;
|
racingStyle?: string | null;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Star, Trophy } from 'lucide-react';
|
import { Star, Trophy } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Search } from 'lucide-react';
|
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
import { Input } from '@/ui/Input';
|
import { Input } from '@/ui/Input';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
|
import { Search } from 'lucide-react';
|
||||||
|
|
||||||
interface DriverSearchBarProps {
|
interface DriverSearchBarProps {
|
||||||
query: string;
|
query: string;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import React from 'react';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface DriverStatsProps {
|
interface DriverStatsProps {
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Box } from '@/ui/Box';
|
import { Box } from '@/ui/primitives/Box';
|
||||||
|
|
||||||
interface StatItem {
|
interface StatItem {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Image } from '@/ui/Image';
|
import { Image } from '@/ui/Image';
|
||||||
import { Link } from '@/ui/Link';
|
import { Link } from '@/ui/Link';
|
||||||
import { PlaceholderImage } from '@/ui/PlaceholderImage';
|
import { PlaceholderImage } from '@/ui/PlaceholderImage';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface DriverSummaryPillProps {
|
interface DriverSummaryPillProps {
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { TrendingUp } from 'lucide-react';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Text } from '@/ui/Text';
|
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 {
|
interface DriverTableProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { RatingBadge } from '@/components/drivers/RatingBadge';
|
import { RatingBadge } from '@/components/drivers/RatingBadge';
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Image } from '@/ui/Image';
|
import { Image } from '@/ui/Image';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
|
||||||
interface DriverTableRowProps {
|
interface DriverTableRowProps {
|
||||||
rank: number;
|
rank: number;
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
'use client';
|
'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 { 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 {
|
interface DriverStat {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { Input } from '@/ui/Input';
|
import { Input } from '@/ui/Input';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { Search } from 'lucide-react';
|
import { Search } from 'lucide-react';
|
||||||
|
|
||||||
interface DriversSearchProps {
|
interface DriversSearchProps {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import { MedalBadge } from '@/components/leaderboards/MedalBadge';
|
||||||
import { mediaConfig } from '@/lib/config/mediaConfig';
|
import { mediaConfig } from '@/lib/config/mediaConfig';
|
||||||
import { Badge } from '@/ui/Badge';
|
import { Badge } from '@/ui/Badge';
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { Image } from '@/ui/Image';
|
import { Image } from '@/ui/Image';
|
||||||
import { MedalBadge } from '@/components/leaderboards/MedalBadge';
|
|
||||||
import { MiniStat } from '@/ui/MiniStat';
|
import { MiniStat } from '@/ui/MiniStat';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Flag, Shield, Star, TrendingUp } from 'lucide-react';
|
import { Flag, Shield, Star, TrendingUp } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -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 { 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 { 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 {
|
interface DriverLiveryItem {
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface PerformanceMetricsProps {
|
interface PerformanceMetricsProps {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Card } from '@/ui/Card';
|
import { Card } from '@/ui/Card';
|
||||||
import { CircularProgress } from '@/ui/CircularProgress';
|
import { CircularProgress } from '@/ui/CircularProgress';
|
||||||
import { Grid } from '@/ui/Grid';
|
|
||||||
import { GridItem } from '@/ui/GridItem';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { HorizontalBarChart } from '@/ui/HorizontalBarChart';
|
import { HorizontalBarChart } from '@/ui/HorizontalBarChart';
|
||||||
import { Icon } from '@/ui/Icon';
|
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 { Text } from '@/ui/Text';
|
||||||
import { Activity, BarChart3, Target, TrendingUp } from 'lucide-react';
|
import { Activity, BarChart3, Target, TrendingUp } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import { DriverRatingPill } from '@/components/drivers/DriverRatingPill';
|
||||||
import type { DriverViewModel } from '@/lib/view-models/DriverViewModel';
|
import type { DriverViewModel } from '@/lib/view-models/DriverViewModel';
|
||||||
import { Badge } from '@/ui/Badge';
|
import { Badge } from '@/ui/Badge';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { CountryFlag } from '@/ui/CountryFlag';
|
import { CountryFlag } from '@/ui/CountryFlag';
|
||||||
import { DriverRatingPill } from '@/components/drivers/DriverRatingPill';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Image } from '@/ui/Image';
|
import { Image } from '@/ui/Image';
|
||||||
import { PlaceholderImage } from '@/ui/PlaceholderImage';
|
import { PlaceholderImage } from '@/ui/PlaceholderImage';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface ProfileHeaderProps {
|
interface ProfileHeaderProps {
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
import { mediaConfig } from '@/lib/config/mediaConfig';
|
import { mediaConfig } from '@/lib/config/mediaConfig';
|
||||||
import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay';
|
import { CountryFlagDisplay } from '@/lib/display-objects/CountryFlagDisplay';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Image } from '@/ui/Image';
|
import { Image } from '@/ui/Image';
|
||||||
import { Link } from '@/ui/Link';
|
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 { Text } from '@/ui/Text';
|
||||||
import { Calendar, Clock, ExternalLink, Globe, Star, Trophy, UserPlus } from 'lucide-react';
|
import { Calendar, Clock, ExternalLink, Globe, Star, Trophy, UserPlus } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
'use client';
|
'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 { 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 { Pagination } from '@/ui/Pagination';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
import { Trophy } from 'lucide-react';
|
import { Trophy } from 'lucide-react';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
interface RaceHistoryProps {
|
interface RaceHistoryProps {
|
||||||
driverId: string;
|
driverId: string;
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useState } from 'react';
|
|
||||||
import type { DriverProfileDriverSummaryViewModel } from '@/lib/view-models/DriverProfileViewModel';
|
import type { DriverProfileDriverSummaryViewModel } from '@/lib/view-models/DriverProfileViewModel';
|
||||||
import { Card } from '@/ui/Card';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Input } from '@/ui/Input';
|
import { Card } from '@/ui/Card';
|
||||||
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 { Checkbox } from '@/ui/Checkbox';
|
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 {
|
interface ProfileSettingsProps {
|
||||||
driver: DriverProfileDriverSummaryViewModel;
|
driver: DriverProfileDriverSummaryViewModel;
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
'use client';
|
'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 { 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 {
|
interface ProfileStatsProps {
|
||||||
driverId?: string;
|
driverId?: string;
|
||||||
|
|||||||
@@ -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 { Heading } from '@/ui/Heading';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Flag, UserPlus, Users } from 'lucide-react';
|
import { Flag, UserPlus, Users } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -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 { RatingComponent } from '@/components/drivers/RatingComponent';
|
||||||
import { RatingHistoryItem } from '@/components/drivers/RatingHistoryItem';
|
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';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface RatingBreakdownProps {
|
interface RatingBreakdownProps {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { ProgressBar } from '@/ui/ProgressBar';
|
import { ProgressBar } from '@/ui/ProgressBar';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Box } from '@/ui/Box';
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface RatingHistoryItemProps {
|
interface RatingHistoryItemProps {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Shield } from 'lucide-react';
|
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { Box } from '@/ui/Box';
|
import { Box } from '@/ui/primitives/Box';
|
||||||
|
import { Shield } from 'lucide-react';
|
||||||
|
|
||||||
interface SafetyRatingBadgeProps {
|
interface SafetyRatingBadgeProps {
|
||||||
rating: number;
|
rating: number;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
|
|
||||||
import { Box } from '@/ui/Box';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Box } from '@/ui/primitives/Box';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { BarChart3 } from 'lucide-react';
|
import { BarChart3 } from 'lucide-react';
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import React from 'react';
|
|
||||||
import { LucideIcon } from 'lucide-react';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
|
import { LucideIcon } from 'lucide-react';
|
||||||
|
|
||||||
interface SkillLevelButtonProps {
|
interface SkillLevelButtonProps {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import React from 'react';
|
import { Badge } from '@/ui/Badge';
|
||||||
import { LucideIcon, ChevronRight, UserPlus } from 'lucide-react';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Icon } from '@/ui/Icon';
|
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 {
|
interface SkillLevelHeaderProps {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
'use client';
|
'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 { Heading } from '@/ui/Heading';
|
||||||
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import { AlertTriangle } from 'lucide-react';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface AppErrorBoundaryViewProps {
|
interface AppErrorBoundaryViewProps {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
'use client';
|
'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 { connectionMonitor } from '@/lib/api/base/ApiConnectionMonitor';
|
||||||
|
import { ApiError } from '@/lib/api/base/ApiError';
|
||||||
import { CircuitBreakerRegistry } from '@/lib/api/base/RetryHandler';
|
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 { Badge } from '@/ui/Badge';
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Heading } from '@/ui/Heading';
|
|
||||||
import { Card } from '@/ui/Card';
|
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 {
|
interface DevErrorPanelProps {
|
||||||
error: ApiError;
|
error: ApiError;
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
'use client';
|
'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 { ApiError } from '@/lib/api/base/ApiError';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { getErrorSeverity, isConnectivityError, isRetryable, parseApiError } from '@/lib/utils/errorUtils';
|
||||||
import { Text } from '@/ui/Text';
|
import { Button } from '@/ui/Button';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { IconButton } from '@/ui/IconButton';
|
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 {
|
interface EnhancedFormErrorProps {
|
||||||
error: unknown;
|
error: unknown;
|
||||||
|
|||||||
@@ -1,33 +1,33 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React, { useState, useEffect } from 'react';
|
|
||||||
import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler';
|
|
||||||
import { getGlobalApiLogger } from '@/lib/infrastructure/ApiRequestLogger';
|
import { getGlobalApiLogger } from '@/lib/infrastructure/ApiRequestLogger';
|
||||||
|
import { getGlobalErrorHandler } from '@/lib/infrastructure/GlobalErrorHandler';
|
||||||
import { getErrorAnalyticsStats, type ErrorStats } from '@/lib/services/error/ErrorAnalyticsService';
|
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 { Badge } from '@/ui/Badge';
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
|
import { Icon } from '@/ui/Icon';
|
||||||
|
import { IconButton } from '@/ui/IconButton';
|
||||||
import { Input } from '@/ui/Input';
|
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 {
|
interface ErrorAnalyticsDashboardProps {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
'use client';
|
'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 { Button } from '@/ui/Button';
|
||||||
import { Icon } from '@/ui/Icon';
|
|
||||||
import { Card } from '@/ui/Card';
|
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 {
|
interface ErrorDetailsProps {
|
||||||
error: Error & { digest?: string };
|
error: Error & { digest?: string };
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
'use client';
|
'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 { Button } from '@/ui/Button';
|
||||||
import { Icon } from '@/ui/Icon';
|
|
||||||
import { Card } from '@/ui/Card';
|
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 {
|
interface ErrorDetailsBlockProps {
|
||||||
error: Error & { digest?: string };
|
error: Error & { digest?: string };
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { RefreshCw, Home } from 'lucide-react';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import { Home, RefreshCw } from 'lucide-react';
|
||||||
|
|
||||||
interface ErrorRecoveryActionsProps {
|
interface ErrorRecoveryActionsProps {
|
||||||
onRetry: () => void;
|
onRetry: () => void;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
import { Card } from '@/ui/Card';
|
||||||
import { Glow } from '@/ui/Glow';
|
import { Glow } from '@/ui/Glow';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
import { AppErrorBoundaryView } from './AppErrorBoundaryView';
|
import { AppErrorBoundaryView } from './AppErrorBoundaryView';
|
||||||
import { ErrorRecoveryActions } from './ErrorRecoveryActions';
|
|
||||||
import { ErrorDetailsBlock } from './ErrorDetailsBlock';
|
import { ErrorDetailsBlock } from './ErrorDetailsBlock';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { ErrorRecoveryActions } from './ErrorRecoveryActions';
|
||||||
import { Card } from '@/ui/Card';
|
|
||||||
|
|
||||||
interface ErrorScreenProps {
|
interface ErrorScreenProps {
|
||||||
error: Error & { digest?: string };
|
error: Error & { digest?: string };
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
import { Button } from '@/ui/Button';
|
||||||
|
import { Card } from '@/ui/Card';
|
||||||
import { Glow } from '@/ui/Glow';
|
import { Glow } from '@/ui/Glow';
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Heading } from '@/ui/Heading';
|
import { Heading } from '@/ui/Heading';
|
||||||
import { Icon } from '@/ui/Icon';
|
import { Icon } from '@/ui/Icon';
|
||||||
import { AlertTriangle, RefreshCw, Home, Terminal } from 'lucide-react';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Button } from '@/ui/Button';
|
import { Text } from '@/ui/Text';
|
||||||
import { Stack } from '@/ui/Stack';
|
import { AlertTriangle, Home, RefreshCw, Terminal } from 'lucide-react';
|
||||||
import { Card } from '@/ui/Card';
|
|
||||||
|
|
||||||
interface GlobalErrorScreenProps {
|
interface GlobalErrorScreenProps {
|
||||||
error: Error & { digest?: string };
|
error: Error & { digest?: string };
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface NotFoundActionsProps {
|
interface NotFoundActionsProps {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
|
||||||
import { Button } from '@/ui/Button';
|
import { Button } from '@/ui/Button';
|
||||||
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface NotFoundCallToActionProps {
|
interface NotFoundCallToActionProps {
|
||||||
label: string;
|
label: string;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
|
||||||
interface NotFoundDiagnosticsProps {
|
interface NotFoundDiagnosticsProps {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import React from 'react';
|
import { Stack } from '@/ui/primitives/Stack';
|
||||||
import { Stack } from '@/ui/Stack';
|
|
||||||
import { Text } from '@/ui/Text';
|
import { Text } from '@/ui/Text';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
interface NotFoundHelpLinksProps {
|
interface NotFoundHelpLinksProps {
|
||||||
links: Array<{ label: string; href: string }>;
|
links: Array<{ label: string; href: string }>;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user