magicui
77 строк · 2.9 Кб
1import { CommandMenu } from "@/components/command-menu";
2import { Icons } from "@/components/icons";
3import { MainNav } from "@/components/main-nav";
4import { MobileNav } from "@/components/mobile-nav";
5import { ModeToggle } from "@/components/mode-toggle";
6import { buttonVariants } from "@/components/ui/button";
7import { siteConfig } from "@/config/site";
8import { cn } from "@/lib/utils";
9import NumberTicker from "@/registry/components/magicui/number-ticker";
10import { StarIcon } from "@heroicons/react/24/solid";
11import { User } from "next-auth";
12import Link from "next/link";
13
14interface SiteHeaderProps {
15user?: User;
16}
17
18export async function SiteHeader({ user }: SiteHeaderProps) {
19const { stargazers_count: stars } = await fetch(
20"https://api.github.com/repos/magicuidesign/magicui",
21{
22...(process.env.GITHUB_OAUTH_TOKEN && {
23headers: {
24Authorization: `Bearer ${process.env.GITHUB_OAUTH_TOKEN}`,
25"Content-Type": "application/json",
26},
27}),
28next: {
29revalidate: 3600,
30},
31},
32)
33.then((res) => res.json())
34.catch(() => ({ stargazers_count: 300 }));
35
36return (
37<header
38className={cn(
39"supports-backdrop-blur:bg-background/90 sticky top-0 z-40 w-full bg-background/40 backdrop-blur-lg",
40)}
41>
42<div className="container flex h-16 items-center">
43<MainNav />
44<MobileNav />
45<div className="flex flex-1 items-center justify-between gap-2 md:justify-end">
46<Link
47className={cn(
48buttonVariants(),
49"hidden max-w-52 gap-2 overflow-hidden whitespace-pre md:flex",
50"group relative w-full justify-center gap-2 rounded-md transition-all duration-300 ease-out hover:ring-2 hover:ring-primary hover:ring-offset-2",
51)}
52target="_blank"
53href={siteConfig.links.github}
54>
55<span className="absolute right-0 -mt-12 h-32 w-8 translate-x-12 rotate-12 transform bg-white opacity-10 transition-all duration-1000 ease-out group-hover:-translate-x-40" />
56<Icons.gitHub className="h-4 w-4" />
57Star on GitHub
58<div className="hidden items-center gap-1 text-sm md:flex">
59<StarIcon className="h-4 w-4 text-gray-500 transition-all duration-300 group-hover:text-yellow-300" />
60<NumberTicker
61value={stars}
62className="font-display font-medium text-white dark:text-black"
63/>
64</div>
65</Link>
66<div className="w-full flex-1 md:w-auto md:flex-none">
67<CommandMenu />
68</div>
69<nav className="flex items-center gap-2">
70<ModeToggle />
71</nav>
72</div>
73</div>
74<hr className="m-0 h-px w-full border-none bg-gradient-to-r from-neutral-200/0 via-neutral-200/30 to-neutral-200/0" />
75</header>
76);
77}
78