Section Menu

Grouped navigation: a sticky rail on desktop whose group headers pin while their links scroll, with an optional filter; on mobile (< 900px) a pill naming the current page opens a bottom sheet (backdrop + drag-down close + focus trap). Powers the docs + components nav.

Live

Example

interactive.SectionMenu(interactive.SectionMenuConfig{
    AriaLabel:    "Documentation sections",
    TriggerLabel: "Sections",
    DrawerName:   "docs-section-menu",
    Filter:       true,
    Lead:         &interactive.SectionItem{Label: "Overview", Href: "/docs/"},
    Groups: []interactive.SectionGroup{
        {Eyebrow: "01", Label: "Modeling", Items: []interactive.SectionItem{
            {Label: "Entities", Href: "/docs/entities", Active: true},
            {Label: "Filter DSL", Href: "/docs/dsl"},
        }},
        {Eyebrow: "02", Label: "Serving", Collapsed: true, Items: []interactive.SectionItem{
            {Label: "Screens", Href: "/docs/screens"},
        }},
    },
})
// Mount the sheet once: widget.MountBuilder(router, interactive.SectionMenuDrawer(cfg))
// Desktop: sticky rail, every group expanded, each header pinned while
// its links scroll. Mobile (< 900px): a pill at the bottom of the
// viewport names the current page and opens a bottom sheet; collapsed
// groups expand on tap; picking a link closes the sheet.