Major categories fixed: - TS6133 (188): Remove unused imports (React, icons, types) and variables - TS2322 (222): Fix type mismatches in stories (satisfies Meta -> const meta: Meta), add nullish coalescing for optional values, fix component prop types - TS2345 (43): Fix argument type mismatches with proper null checks and type narrowing - TS2741 (21): Add missing required properties to mock/story data - TS2339 (19): Fix property access on incorrect types, add type guards - TS2353 (13): Remove extra properties from object literals or extend interfaces - TS2352 (11): Fix type conversion chains - TS2307 (9): Fix import paths and module references - Other (42): Fix implicit any, possibly undefined, export declarations Vite build and tsc --noEmit both pass cleanly. Co-authored-by: Cursor <cursoragent@cursor.com>
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import { useTranslation } from '@/hooks/useTranslation';
|
|
import { Button } from '@/components/ui/button';
|
|
import { ArrowLeft } from 'lucide-react';
|
|
|
|
interface ComingSoonProps {
|
|
feature: string;
|
|
onGoBack?: () => void;
|
|
}
|
|
|
|
/** SUMI-themed logo mark (simplified V shape) */
|
|
function SumiLogoIllustration() {
|
|
return (
|
|
<div className="relative mb-6">
|
|
<div className="w-24 h-24 mx-auto rounded-2xl bg-gradient-to-br from-primary/30 via-primary/20 to-secondary/20 flex items-center justify-center">
|
|
<svg
|
|
viewBox="0 0 24 24"
|
|
className="w-12 h-12 text-primary"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
strokeWidth="2"
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
aria-hidden
|
|
>
|
|
<path d="M12 3v18M6 9l6 6 6-6" />
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export function ComingSoon({ feature, onGoBack }: ComingSoonProps) {
|
|
const { t } = useTranslation();
|
|
|
|
return (
|
|
<div className="flex min-h-layout-page flex-col items-center justify-center gap-6 px-6 text-center">
|
|
<SumiLogoIllustration />
|
|
<h1 className="text-3xl font-bold tracking-tight text-foreground">{feature}</h1>
|
|
<p className="max-w-md text-lg text-muted-foreground">
|
|
{t('comingSoon.description')}
|
|
</p>
|
|
<div className="flex flex-wrap items-center justify-center gap-3">
|
|
{onGoBack && (
|
|
<Button
|
|
variant="outline"
|
|
onClick={onGoBack}
|
|
className="gap-2"
|
|
>
|
|
<ArrowLeft className="h-4 w-4" />
|
|
{t('comingSoon.goBack')}
|
|
</Button>
|
|
)}
|
|
<Button variant="default" disabled>
|
|
{t('comingSoon.notifyMe')}
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|