"use client"; import { useEffect, useRef, useState } from "react"; import Link from "next/link"; import { motion } from "framer-motion"; import { ChevronDown, Menu, Volume2, VolumeX, X } from "lucide-react"; import { useSound } from "@/components/providers/sound-provider"; const TOOLS = [ { href: "/ja-nein-generator", label: "Ja-Nein-Generator", hint: "Schnelle Entscheidungen" }, { href: "/muenze-werfen", label: "Münze werfen", hint: "Kopf oder Zahl" }, { href: "/entweder-oder", label: "Entweder oder", hint: "Zwei Optionen abwägen" }, { href: "/gluecksrad", label: "Glücksrad", hint: "Drehen & auswählen" }, { href: "/wuerfel-online", label: "Würfel online", hint: "Für Spiel & Zufall" }, { href: "/zufallszahl-generator", label: "Zufallszahl", hint: "Dein Zahlenbereich" }, { href: "/magic-8-ball", label: "Magic 8-Ball", hint: "Das kleine Orakel" }, { href: "/namen-auslosen", label: "Namen auslosen", hint: "Listen & Gewinner" }, ]; export default function Nav() { const [scrolled, setScrolled] = useState(false); const [toolsOpen, setToolsOpen] = useState(false); const [mobileOpen, setMobileOpen] = useState(false); const dropdownRef = useRef(null); const { enabled, toggle, play } = useSound(); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 10); const onKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") { setToolsOpen(false); setMobileOpen(false); } }; const onPointerDown = (event: MouseEvent) => { if (!dropdownRef.current?.contains(event.target as Node)) setToolsOpen(false); }; onScroll(); window.addEventListener("scroll", onScroll, { passive: true }); window.addEventListener("keydown", onKeyDown); window.addEventListener("mousedown", onPointerDown); return () => { window.removeEventListener("scroll", onScroll); window.removeEventListener("keydown", onKeyDown); window.removeEventListener("mousedown", onPointerDown); }; }, []); const closeMenus = () => { setToolsOpen(false); setMobileOpen(false); }; const soundButton = ( { toggle(); if (!enabled) play("pop"); }} whileTap={{ scale: 0.88 }} aria-label={enabled ? "Sound ausschalten" : "Sound einschalten"} title={enabled ? "Sound ausschalten" : "Sound einschalten"} className="flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-full border border-line bg-surface text-ink-soft shadow-soft transition-colors duration-200 hover:border-[#0d7a57]/50 hover:text-[#0d7a57]" > {enabled ? : } ); return (
{mobileOpen && (

Tools auswählen

{TOOLS.map((tool) => {tool.label}{tool.hint})}
Extensions & Developer Suite Ratgeber Features
)}
); }