mirror of
https://github.com/PeterMaquiran/tvone.git
synced 2026-04-18 15:27:52 +00:00
add theme button
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useCallback, useEffect, useId, useRef, useState } from "react";
|
import { useCallback, useEffect, useId, useRef, useState } from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
|
import { useTheme } from "next-themes";
|
||||||
|
import { Moon, Sun } from "lucide-react";
|
||||||
|
|
||||||
const primaryNav = [
|
const primaryNav = [
|
||||||
{ label: "Música", href: "#" },
|
{ label: "Música", href: "#" },
|
||||||
@@ -69,6 +71,9 @@ export function TvoneSiteNav() {
|
|||||||
|
|
||||||
const closeMenu = useCallback(() => setMenuOpen(false), []);
|
const closeMenu = useCallback(() => setMenuOpen(false), []);
|
||||||
const toggleMenu = useCallback(() => setMenuOpen((o) => !o), []);
|
const toggleMenu = useCallback(() => setMenuOpen((o) => !o), []);
|
||||||
|
const { theme, setTheme } = useTheme();
|
||||||
|
const [mounted, setMounted] = useState(false);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const el = sentinelRef.current;
|
const el = sentinelRef.current;
|
||||||
@@ -82,12 +87,14 @@ export function TvoneSiteNav() {
|
|||||||
sync();
|
sync();
|
||||||
window.addEventListener("scroll", sync, { passive: true });
|
window.addEventListener("scroll", sync, { passive: true });
|
||||||
window.addEventListener("resize", sync);
|
window.addEventListener("resize", sync);
|
||||||
|
setMounted(true);
|
||||||
return () => {
|
return () => {
|
||||||
window.removeEventListener("scroll", sync);
|
window.removeEventListener("scroll", sync);
|
||||||
window.removeEventListener("resize", sync);
|
window.removeEventListener("resize", sync);
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!menuOpen) return;
|
if (!menuOpen) return;
|
||||||
const onKey = (e: KeyboardEvent) => {
|
const onKey = (e: KeyboardEvent) => {
|
||||||
@@ -163,6 +170,16 @@ export function TvoneSiteNav() {
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div className="ml-auto flex shrink-0 items-center gap-1 sm:gap-2">
|
<div className="ml-auto flex shrink-0 items-center gap-1 sm:gap-2">
|
||||||
|
{/* Theme Toggle */}
|
||||||
|
{mounted && (
|
||||||
|
<button
|
||||||
|
onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
|
||||||
|
className="flex h-10 w-10 items-center justify-center rounded-md hover:bg-white/10"
|
||||||
|
>
|
||||||
|
{theme === "dark" ? <Moon size={18} /> : <Sun size={18} />}
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="flex h-10 w-10 items-center justify-center rounded-md hover:bg-white/10 sm:h-11 sm:w-11"
|
className="flex h-10 w-10 items-center justify-center rounded-md hover:bg-white/10 sm:h-11 sm:w-11"
|
||||||
|
|||||||
Reference in New Issue
Block a user