UNPKG

fumadocs-ui

Version:

The framework for building a documentation website in Next.js

47 lines (46 loc) 1.59 kB
import { jsx as _jsx } from "react/jsx-runtime"; const defaultTransform = (option, node) => { if (!node.icon) return option; return { ...option, icon: (_jsx("div", { className: "size-full [&_svg]:size-full max-md:p-1.5 max-md:rounded-md max-md:border max-md:bg-fd-secondary", children: node.icon })), }; }; export function getSidebarTabs(pageTree, { transform = defaultTransform } = {}) { function findOptions(node) { const results = []; if (node.root) { const urls = getFolderUrls(node); if (urls.size > 0) { const option = { url: urls.values().next().value ?? '', title: node.name, icon: node.icon, description: node.description, urls, }; const mapped = transform ? transform(option, node) : option; if (mapped) results.push(mapped); } } for (const child of node.children) { if (child.type === 'folder') results.push(...findOptions(child)); } return results; } return findOptions(pageTree); } function getFolderUrls(folder, output = new Set()) { if (folder.index) output.add(folder.index.url); for (const child of folder.children) { if (child.type === 'page' && !child.external) output.add(child.url); if (child.type === 'folder') getFolderUrls(child, output); } return output; }