import { useState, createContext, useContext } from 'react' import { motion, AnimatePresence } from 'motion/react' import { IconMenu2, IconX } from '@tabler/icons-react' import { cn } from '../lib/utils' import './ModernSidebar.css' const SidebarContext = createContext(undefined) export const useSidebar = () => { const context = useContext(SidebarContext) if (!context) { throw new Error('useSidebar must be used within a SidebarProvider') } return context } export const SidebarProvider = ({ children, open: openProp, setOpen: setOpenProp, animate = true }) => { const [openState, setOpenState] = useState(false) const open = openProp !== undefined ? openProp : openState const setOpen = setOpenProp !== undefined ? setOpenProp : setOpenState return ( {children} ) } export const Sidebar = ({ children, open, setOpen, animate }) => { return ( {children} ) } export const SidebarBody = ({ className, children, ...props }) => { return ( <> {children} {children} ) } export const DesktopSidebar = ({ className, children, ...props }) => { const { open, setOpen, animate } = useSidebar() return ( setOpen(true)} onMouseLeave={() => setOpen(false)} {...props} > {children} ) } export const MobileSidebar = ({ className, children }) => { const { open, setOpen } = useSidebar() return ( <>
setOpen(!open)} />
{open && (
setOpen(!open)}>
{children}
)}
) } export const SidebarLink = ({ link, className, ...props }) => { const { open, animate } = useSidebar() return ( {link.icon} {link.label} ) }