Docs Navbar
Render or adapt nested docs group and docs set navigation.
Docs Navbar
Use the /next navigation helpers when a site header needs links into generated
docs groups and docs sets.
Drop-In Navbar
PayloadMarkdownDocsNavbar is the default docs navigation UI. It reads docs
groups and docs sets, renders nested navigation, and does not require your
existing CMSLink component.
1import { PayloadMarkdownDocsNavbar } from '@valkyrianlabs/payload-markdown-docs/next'2import type { Payload } from 'payload'3 4export function DocsNav({ payload }: { payload: Payload }) {5 return (6 <PayloadMarkdownDocsNavbar7 classNames={{8 root: 'docs-nav',9 activeLink: 'is-active',10 }}11 currentPath="/plugins/payload-markdown-docs"12 payload={payload}13 />14 )15}
Use renderLink when the app needs a framework link component, tracking, or
custom link props.
Headless Tree
Use getPayloadMarkdownDocsNavItems when the app owns the markup.
1import { getPayloadMarkdownDocsNavItems } from '@valkyrianlabs/payload-markdown-docs/next'2 3const docsNav = await getPayloadMarkdownDocsNavItems({4 payload,5})
The helper returns a serializable tree sorted by:
order- label
Top-level items are:
- docs groups without a parent
- docs sets without a group
Child groups and grouped docs sets are nested under their parent group.
Header Adapter
Use appendPayloadMarkdownDocsHeaderNavItems when the app already has a Header
global with navItems.
1import { appendPayloadMarkdownDocsHeaderNavItems } from '@valkyrianlabs/payload-markdown-docs/next'2 3const navItems = await appendPayloadMarkdownDocsHeaderNavItems({4 existingItems: header.navItems ?? [],5 maxItems: 8,6 payload,7})
Capacity only applies to top-level docs entries. When a top-level group fits, its child groups and docs sets stay intact.
The adapter emits custom URL links by default. This is the safest mode for existing CMSLink implementations.
1import { getPayloadMarkdownDocsHeaderNavItems } from '@valkyrianlabs/payload-markdown-docs/next'2 3const docsItems = await getPayloadMarkdownDocsHeaderNavItems({4 mode: 'url',5 payload,6})
Use relationship mode only when the frontend renderer understands docs relationships.
1import { getPayloadMarkdownDocsHeaderNavItems } from '@valkyrianlabs/payload-markdown-docs/next'2 3const docsItems = await getPayloadMarkdownDocsHeaderNavItems({4 mode: 'relationship',5 payload,6})