"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { X } from "lucide-react"; import { dataConsent } from "@/content/consent"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Label } from "@/components/ui/label"; import { cn } from "@/lib/utils"; const copy = dataConsent.siteEntry; function hasAcceptedConsent(): boolean { if (typeof window === "undefined") return false; return localStorage.getItem(copy.storageKey) === "accepted"; } export function SiteEntryPrompt() { const pathname = usePathname(); const [open, setOpen] = useState(false); const [visible, setVisible] = useState(false); const [checked, setChecked] = useState(false); useEffect(() => { if (hasAcceptedConsent()) { setOpen(false); setVisible(false); return; } setOpen(true); setChecked(false); const show = requestAnimationFrame(() => setVisible(true)); return () => cancelAnimationFrame(show); }, [pathname]); const dismiss = () => { setVisible(false); window.setTimeout(() => setOpen(false), 280); }; const handleAccept = () => { if (!checked) return; localStorage.setItem(copy.storageKey, "accepted"); dismiss(); }; const handleDecline = () => { dismiss(); }; if (!open) return null; return (

{copy.title}

{copy.description}

setChecked(v === true)} className="mt-0.5 border-[#1a5c38]/40 data-[state=checked]:border-[#1a5c38] data-[state=checked]:bg-[#1a5c38]" />
); }