UNPKG

nextuiq

Version:

NextUIQ is a modern, lightweight, and developer-friendly UI component library for React and Next.js. Built with TypeScript and Tailwind CSS, it offers customizable, accessible, and performance-optimized components with built-in dark mode, theme customizat

56 lines (53 loc) 1.98 kB
import { j as jsxRuntimeExports } from './index46.mjs'; import React__default, { createContext, useState, useCallback, useEffect, useContext } from 'react'; const SidebarContext = createContext(void 0); const useSidebar = () => { const context = useContext(SidebarContext); if (!context) { throw new Error("useSidebar must be used within a SidebarProvider"); } return context; }; const SidebarProvider = ({ children }) => { const [isExpanded, setIsExpanded] = useState(true); const [isMobileOpen, setIsMobileOpen] = useState(false); const [isMobile, setIsMobile] = useState(false); const [isHovered, setIsHovered] = useState(false); const [activeItem, setActiveItem] = useState(null); const [openSubmenu, setOpenSubmenu] = useState(null); const handleResize = useCallback(() => { const mobile = window.innerWidth < 768; setIsMobile(mobile); if (!mobile) { setIsMobileOpen(false); } }, []); useEffect(() => { handleResize(); window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, [handleResize]); const toggleSidebar = useCallback(() => { setIsExpanded((prev) => !prev); }, []); const toggleMobileSidebar = useCallback(() => { setIsMobileOpen((prev) => !prev); }, []); const toggleSubmenu = useCallback((item) => { setOpenSubmenu((prev) => prev === item ? null : item); }, []); const contextValue = React__default.useMemo(() => ({ isExpanded: isMobile ? false : isExpanded, isMobileOpen, isHovered, activeItem, openSubmenu, toggleSidebar, toggleMobileSidebar, setIsHovered, setActiveItem, toggleSubmenu }), [isMobile, isExpanded, isMobileOpen, isHovered, activeItem, openSubmenu, toggleSidebar, toggleMobileSidebar, toggleSubmenu]); return /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarContext.Provider, { value: contextValue, children }); }; export { SidebarProvider, useSidebar };