import { useEffect, useState } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { useLocalStorage } from '@/hooks/useLocalStorage'; import { AlertTriangle, Code2, FlaskConical, ShieldOff, Wallet, ArrowRight } from 'lucide-react'; import { useTranslation } from '@/contexts/language'; /** * Bump this version to re-show the disclaimer to everyone * (e.g. after terms change or a major release). */ const DISCLAIMER_VERSION = 1; const STORAGE_KEY = `skatespots_disclaimer_accepted_v${DISCLAIMER_VERSION}`; const REPO_URL = 'https://github.com/search?q=SkateSpots'; export function BetaDisclaimerDialog() { const [accepted, setAccepted] = useLocalStorage(STORAGE_KEY, false); const [open, setOpen] = useState(false); const { t } = useTranslation(); // Open on first launch (after mount so SSR/hydration is clean) useEffect(() => { if (!accepted) { const t = setTimeout(() => setOpen(true), 400); return () => clearTimeout(t); } }, [accepted]); const handleAccept = () => { setAccepted(true); setOpen(false); }; return ( { if (!next) return; setOpen(next); }} > e.preventDefault()} onEscapeKeyDown={(e) => e.preventDefault()} > {/* Accent gradient strip */}
{/* Icon badge */}
{t('settingsUi.betaDisclaimer.title')} {t('settingsUi.betaDisclaimer.subtitle')}
{/* Bullets */}
} title={t('settingsUi.betaDisclaimer.ossTitle')} body={t('settingsUi.betaDisclaimer.ossBody')} /> } title={t('settingsUi.betaDisclaimer.betaTitle')} body={t('settingsUi.betaDisclaimer.betaBody')} /> } title={t('settingsUi.betaDisclaimer.moneyTitle')} body={t('settingsUi.betaDisclaimer.moneyBody')} />
{/* Fine print */}

{t('settingsUi.betaDisclaimer.finePrint')}{' '} {t('settingsUi.betaDisclaimer.viewCode')} .

); } function DisclaimerRow({ icon, title, body, }: { icon: React.ReactNode; title: string; body: string; }) { return (
{icon}

{title}

{body}

); }