UNPKG

fumadocs-ui

Version:

The Radix UI version of Fumadocs UI

58 lines (56 loc) 2.09 kB
import { tree_exports } from "../../contexts/tree.js"; import { jsx, jsxs } from "react/jsx-runtime"; import { Fragment as Fragment$1, useMemo } from "react"; //#region src/components/sidebar/page-tree.tsx function createPageTreeRenderer({ SidebarFolder, SidebarFolderContent, SidebarFolderLink, SidebarFolderTrigger, SidebarSeparator, SidebarItem }) { function PageTreeFolder({ item, children }) { const path = (0, tree_exports.useTreePath)(); return /* @__PURE__ */ jsxs(SidebarFolder, { collapsible: item.collapsible, active: path.includes(item), defaultOpen: item.defaultOpen, children: [item.index ? /* @__PURE__ */ jsxs(SidebarFolderLink, { href: item.index.url, external: item.index.external, children: [item.icon, item.name] }) : /* @__PURE__ */ jsxs(SidebarFolderTrigger, { children: [item.icon, item.name] }), /* @__PURE__ */ jsx(SidebarFolderContent, { children })] }); } /** * Render sidebar items from page tree */ return function SidebarPageTree(components) { const { root } = (0, tree_exports.useTreeContext)(); const { Separator, Item, Folder = PageTreeFolder } = components; return useMemo(() => { function renderSidebarList(items) { return items.map((item, i) => { if (item.type === "separator") { if (Separator) return /* @__PURE__ */ jsx(Separator, { item }, i); return /* @__PURE__ */ jsxs(SidebarSeparator, { children: [item.icon, item.name] }, i); } if (item.type === "folder") return /* @__PURE__ */ jsx(Folder, { item, children: renderSidebarList(item.children) }, i); if (Item) return /* @__PURE__ */ jsx(Item, { item }, item.url); return /* @__PURE__ */ jsx(SidebarItem, { href: item.url, external: item.external, icon: item.icon, children: item.name }, item.url); }); } return /* @__PURE__ */ jsx(Fragment$1, { children: renderSidebarList(root.children) }, root.$id); }, [ Folder, Item, Separator, root ]); }; } //#endregion export { createPageTreeRenderer }; //# sourceMappingURL=page-tree.js.map