fumadocs-ui
Version:
The Radix UI version of Fumadocs UI
34 lines (33 loc) • 1.05 kB
JavaScript
"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 };