Openstatus www.openstatus.dev
at main 99 lines 3.6 kB view raw
1import { headerLinks } from "@/data/content"; 2import { 3 DropdownMenu, 4 DropdownMenuContent, 5 DropdownMenuItem, 6 DropdownMenuTrigger, 7} from "@openstatus/ui"; 8import { 9 ContextMenu, 10 ContextMenuContent, 11 ContextMenuItem, 12 ContextMenuTrigger, 13} from "@openstatus/ui"; 14import Link from "next/link"; 15import { CmdK } from "./cmdk"; 16 17export function Header() { 18 return ( 19 <header className="grid grid-cols-3 gap-px border border-border bg-border lg:grid-cols-6 [&>*]:bg-background [&>*]:px-4 [&>*]:py-4 [&>*]:hover:bg-muted"> 20 <ContextMenu> 21 <ContextMenuTrigger className="group" asChild> 22 <Link href="/" className="relative flex items-center gap-2"> 23 <img 24 src="/assets/landing/openstatus-logo.svg" 25 alt="openstatus logo" 26 width={20} 27 height={20} 28 className="rounded-full border border-border dark:border-foreground" 29 /> 30 <span className="hidden sm:block">openstatus</span> 31 <div className="absolute right-0.5 bottom-0 hidden group-hover:block"> 32 <span className="text-[10px] text-muted-foreground/50"> 33 [right click] 34 </span> 35 </div> 36 </Link> 37 </ContextMenuTrigger> 38 <ContextMenuContent className="min-w-[var(--radix-dropdown-menu-trigger-width)] rounded-none"> 39 <ContextMenuItem className="rounded-none px-2 py-3 font-mono" asChild> 40 {/* FIXME: use relative path */} 41 <a 42 href="https://openstatus.dev/assets/logos/OpenStatus.svg" 43 download="openstatus.svg" 44 > 45 Download Name SVG 46 </a> 47 </ContextMenuItem> 48 <ContextMenuItem className="rounded-none px-2 py-3 font-mono" asChild> 49 <a 50 href="https://openstatus.dev/assets/logos/OpenStatus-Logo.svg" 51 download="openstatus-logo.svg" 52 > 53 Download Logo SVG 54 </a> 55 </ContextMenuItem> 56 </ContextMenuContent> 57 </ContextMenu> 58 {headerLinks.map((section, _) => ( 59 <DropdownMenu key={section.label}> 60 <DropdownMenuTrigger className="group flex items-center gap-1 data-[state=open]:bg-muted"> 61 <span className="w-full truncate text-left">{section.label}</span> 62 <span 63 className="relative top-[1px] shrink-0 origin-center text-[10px] text-muted-foreground transition duration-300 group-hover:text-foreground group-data-[state=open]:rotate-180 group-data-[state=open]:text-foreground" 64 aria-hidden="true" 65 > 66 67 </span> 68 </DropdownMenuTrigger> 69 <DropdownMenuContent 70 align="start" 71 className="min-w-[var(--radix-dropdown-menu-trigger-width)] rounded-none" 72 alignOffset={0} 73 sideOffset={0} 74 > 75 {section.items.map((item) => ( 76 <DropdownMenuItem 77 key={item.href} 78 className="rounded-none px-2 py-3 font-mono" 79 asChild 80 > 81 <Link href={item.href}>{item.label}</Link> 82 </DropdownMenuItem> 83 ))} 84 </DropdownMenuContent> 85 </DropdownMenu> 86 ))} 87 <Link href="/pricing" className="truncate"> 88 Pricing 89 </Link> 90 <CmdK /> 91 <Link 92 href="https://app.openstatus.dev/login" 93 className="truncate text-info" 94 > 95 Dashboard 96 </Link> 97 </header> 98 ); 99}