Skip to content

DesktopMenu

Component for displaying a desktop menu

Code

"use client"

import { CaretDown, Heart, MagnifyingGlass } from "@phosphor-icons/react"
import * as DropdownMenu from "@radix-ui/react-dropdown-menu"

const DropdownMenuItemClass = "group text-[14px] leading-none rounded-[3px] flex items-center min-h-[25px] p-[12px] relative pl-[25px] select-none outline-none cursor-pointer"

const DesktopMenu = () => (
	<header className="relative z-40 hidden lg:block">
		<nav aria-label="Top">
			<div className="bg-white">
				<div className="border-b border-gray-200">
					<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
						<div className="flex h-16 items-center justify-between">
							<div className="hidden lg:flex lg:items-center">
								<a className="flex" href="/">
									<span className="sr-only">Your Company</span>
									<img width="20px" src="https://a.storyblok.com/f/222232/289x320/09d8a4562e/core-logo.svg" alt="Logo" />
									<span className="font-bold ml-2">Core</span>
								</a>
							</div>

							<div className="hidden h-full lg:flex">
								<div className="ml-8">
									<div className="flex h-full justify-center space-x-8">
										<div className="flex">
											<div className="relative flex">
												<a href="#" className="flex items-center text-sm font-medium text-gray-700 hover:text-gray-800">
													Spaces
												</a>
											</div>
										</div>

										<div className="flex">
											<div className="relative flex">
												<DropdownMenu.Root>
													<DropdownMenu.Trigger className="outline-none cursor-pointer">
														<div className="flex items-center outline-none">
															<span className="pr-1 text-sm">Products</span>
															<CaretDown size={14} weight="bold" />
														</div>
													</DropdownMenu.Trigger>

													<DropdownMenu.Content className="min-w-[220px] bg-white rounded-md p-[5px] shadow-[0px_10px_38px_-10px_rgba(22,_23,_24,_0.35),_0px_10px_20px_-15px_rgba(22,_23,_24,_0.2)] will-change-[opacity,transform] data-[side=top]:animate-slideDownAndFade data-[side=right]:animate-slideLeftAndFade data-[side=bottom]:animate-slideUpAndFade data-[side=left]:animate-slideRightAndFade">
														<DropdownMenu.Item className={DropdownMenuItemClass}>Analytics</DropdownMenu.Item>
														<DropdownMenu.Item className={DropdownMenuItemClass}>Engagement</DropdownMenu.Item>
														<DropdownMenu.Separator />
														<DropdownMenu.Item className={DropdownMenuItemClass}>Security</DropdownMenu.Item>
														<DropdownMenu.Item className={DropdownMenuItemClass}>Move to project</DropdownMenu.Item>
														<DropdownMenu.Item className={DropdownMenuItemClass}>Move to folder</DropdownMenu.Item>
														<DropdownMenu.Item className={DropdownMenuItemClass}>Advanced options</DropdownMenu.Item>
													</DropdownMenu.Content>
												</DropdownMenu.Root>
											</div>
										</div>
										<div className="flex">
											<div className="relative flex">
												<a href="#" className="flex items-center text-sm font-medium text-gray-700 hover:text-gray-800">
													About
												</a>
											</div>
										</div>
									</div>
								</div>
							</div>

							<div className="flex flex-1 items-center justify-end">
								<div className="flex items-center lg:ml-8">
									<div className="flex items-center space-x-8">
										<div className="hidden lg:flex">
											<div className="relative flex">
												<input
													type="text"
													name="searchTerm"
													className="flex w-full rounded-sm border border-gray-300 py-2 px-4 focus:outline-none"
													placeholder="Search"
												/>
												<div className="pointer-events-none absolute inset-y-0 right-0 flex items-center py-2 pr-4">
													<MagnifyingGlass color="#9ca3af" size={20} />
												</div>
											</div>
										</div>

										<div className="flex">
											<a href="/account" className="-m-2 p-2 text-gray-400 hover:text-gray-500">
												<span className="sr-only">Account</span>
												<svg className="h-6 w-6" fill="none" viewBox="0 0 24 24" strokeWidth="1.5" stroke="currentColor" aria-hidden="true">
													<path
														strokeLinecap="round"
														strokeLinejoin="round"
														d="M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z"
													/>
												</svg>
											</a>
										</div>
										<div className="flex">
											<a href="/wishlist" className="-m-2 p-2 text-gray-400 hover:text-gray-500">
												<span className="sr-only">Wishlist</span>
												<Heart size={23} />
											</a>
										</div>
									</div>

									<span className="mx-4 h-6 w-px bg-gray-200 lg:mx-6" aria-hidden="true"></span>

									<div className="flow-root">
										<a href="#" className="group -m-2 flex items-center p-2">
											<svg
												className="h-6 w-6 flex-shrink-0 text-gray-400 group-hover:text-gray-500"
												fill="none"
												viewBox="0 0 24 24"
												strokeWidth="1.5"
												stroke="currentColor"
												aria-hidden="true"
											>
												<path
													strokeLinecap="round"
													strokeLinejoin="round"
													d="M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z"
												/>
											</svg>
											<span className="ml-2 text-sm font-medium text-gray-700 group-hover:text-gray-800">0</span>
											<span className="sr-only">items in cart, view bag</span>
										</a>
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</nav>
	</header>
)

export default DesktopMenu