UNPKG

fumadocs-ui

Version:

The Radix UI version of Fumadocs UI

34 lines (33 loc) 1.05 kB
"use client"; import { usePathname } from "fumadocs-core/framework"; import { jsx } from "react/jsx-runtime"; import { createContext, use, useMemo, useRef, useState } from "react"; import { useOnChange } from "fumadocs-core/utils/use-on-change"; //#region src/legacy/sidebar.tsx const SidebarContext = createContext(null); function useSidebar() { const ctx = use(SidebarContext); if (!ctx) throw new Error("the component must be wrapped under <SidebarProvider /> (fumadocs-ui/legacy/sidebar)"); return ctx; } function SidebarProvider({ children }) { const [open, setOpen] = useState(false); const [collapsed, setCollapsed] = useState(false); const closeOnRedirect = useRef(true); useOnChange(usePathname(), () => { if (closeOnRedirect.current) setOpen(false); else closeOnRedirect.current = true; }); return /* @__PURE__ */ jsx(SidebarContext, { value: useMemo(() => ({ closeOnRedirect, collapsed, open, setCollapsed, setOpen }), [open, collapsed]), children }); } //#endregion export { SidebarProvider, useSidebar };