veza/apps/web/src/components/ui/ComingSoon.tsx
senke 0a29c544af fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors
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>
2026-02-13 00:32:08 +01:00

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>
);
}