Spaces:
Paused
Paused
| "use client"; | |
| import { AnimatePresence, cubicBezier, motion } from "motion/react"; | |
| import { useState } from "react"; | |
| import { | |
| ConnectorToLeft, | |
| ConnectorToRight, | |
| } from "@/components/shared/layout/curvy-rect"; | |
| import { NAV_ITEMS } from "@/components/shared/header/Nav/Nav"; | |
| import { cn } from "@/utils/cn"; | |
| export default function HeaderDropdownMobileItem({ | |
| item, | |
| }: { | |
| item: (typeof NAV_ITEMS)[number]; | |
| }) { | |
| const [open, setOpen] = useState(false); | |
| return ( | |
| <> | |
| <a | |
| className="p-24 flex group relative" | |
| href={item.href} | |
| onClick={() => { | |
| setOpen((v) => !v); | |
| }} | |
| > | |
| <div className="h-1 bottom-0 absolute left-0 w-full bg-border-faint" /> | |
| <ConnectorToRight className="-top-11 left-0" /> | |
| <ConnectorToRight className="-bottom-10 left-0" /> | |
| <ConnectorToLeft className="-top-11 right-0" /> | |
| <ConnectorToLeft className="-bottom-10 right-0" /> | |
| <span className="px-4 flex-1 text-label-medium text-accent-black"> | |
| {item.label} | |
| </span> | |
| {item.dropdown && ( | |
| <svg | |
| className={cn( | |
| "transition-all duration-200", | |
| open ? "rotate-180 text-accent-black" : "text-black-alpha-48", | |
| )} | |
| fill="none" | |
| height="24" | |
| viewBox="0 0 24 24" | |
| width="24" | |
| xmlns="http://www.w3.org/2000/svg" | |
| > | |
| <path | |
| d="M8.4001 10.2L12.0001 13.8L15.6001 10.2" | |
| stroke="currentColor" | |
| strokeLinecap="round" | |
| strokeLinejoin="round" | |
| strokeWidth="1.25" | |
| /> | |
| </svg> | |
| )} | |
| </a> | |
| <AnimatePresence> | |
| {open && ( | |
| <motion.div | |
| animate={{ height: "auto", opacity: 1, filter: "blur(0px)" }} | |
| className="overflow-hidden" | |
| exit={{ height: 0, opacity: 0, filter: "blur(4px)" }} | |
| initial={{ height: 0, opacity: 0, filter: "blur(4px)" }} | |
| transition={{ duration: 0.3, ease: cubicBezier(0.4, 0, 0.2, 1) }} | |
| > | |
| {item.dropdown} | |
| <div className="h-44 relative"> | |
| <ConnectorToRight className="-top-11 left-0" /> | |
| <ConnectorToRight className="-bottom-10 left-0" /> | |
| <ConnectorToLeft className="-top-11 right-0" /> | |
| <ConnectorToLeft className="-bottom-10 right-0" /> | |
| <div className="h-1 bottom-0 absolute left-0 w-full bg-border-faint" /> | |
| </div> | |
| </motion.div> | |
| )} | |
| </AnimatePresence> | |
| </> | |
| ); | |
| } | |