0.1.0-rc.2

Navigation Menu

Navigation menus organize site sections with optional dropdown panels for nested links.

Try it

Usage

Compose triggers, links, and panels with the sub-components. Use RuiNavigationMenuTrigger for sections with flyout content.

import {
  RuiNavigationMenu,
  RuiNavigationMenuTrigger,
  RuiNavigationMenuLink,
  RuiNavigationMenuPanel,
} from '@ecopages/radiant-ui/navigation-menu';
 
<RuiNavigationMenu label="Main">
  <RuiNavigationMenuTrigger>Products</RuiNavigationMenuTrigger>
  <RuiNavigationMenuPanel>
    <RuiNavigationMenuLink href="/widgets">Widgets</RuiNavigationMenuLink>
  </RuiNavigationMenuPanel>
  <RuiNavigationMenuLink href="/pricing">Pricing</RuiNavigationMenuLink>
</RuiNavigationMenu>

Site-wide navigation

Keep top-level items to five or fewer. Move secondary links into panels or the footer.

Theming

Navigation Menu surfaces map to semantic surface roles, never Tailwind palette steps:

PartCSS roles
Root (rui-navigation-menu)surface, border, shadow-sm, rounded-container
Bar (rui-navigation-menu__bar)background, border
Open trigger ([data-navigation-trigger][aria-expanded='true'])primary-container, on-primary-container, primary ring
Panel region (rui-navigation-menu__panels)background, on-background; on-surface / link (text)

Override roles at the theme layer, not in component CSS.

API

RuiNavigationMenu is a custom element (<rui-navigation-menu>) rendering a nav landmark. Compose the view helpers for triggers, links, and panels, or use the slots directly.

Attributes

AttributeTypeDefaultDescription
labelstring''Accessible name for the nav landmark.

Slots

SlotDescription
triggersTop-level navigation triggers and plain links.
panelsDisclosure panels composed from other primitives.

View helpers

ComponentRendersSlot
RuiNavigationMenu<rui-navigation-menu>
RuiNavigationMenuTriggerRuiButton triggertriggers
RuiNavigationMenuLinkAnchor styled as a buttontriggers
RuiNavigationMenuPanelPanel divpanels

CSS classes

Public BEM classes on the composed light-DOM surface (documented via @cssclass):

ClassDescription
.rui-navigation-menuRoot nav surface.
.rui-navigation-menu__barTop-level trigger / link bar.
.rui-navigation-menu__panelsPanel region.

Content helper classes authored in consumer markup (see stories):

ClassDescription
.rui-navigation-menu__megamenuPanel content grid.
.rui-navigation-menu__link-columnsTwo-column link group layout.
.rui-navigation-menu__link-group-labelLink group heading.
.rui-navigation-menu__link-listLink list.
.rui-navigation-menu__disclosure-copyParagraph copy inside disclosure panels.

Theme roles

PartCSS variables consumed
Root--surface, --border, --shadow-sm
Bar--background, --border
Open trigger--primary-container, --on-primary-container, --primary, --focus-ring
Panel text--on-background, --on-surface, --link

Accessibility

  • The menu renders as a nav landmark with an accessible name from label.
  • Expanded panels are associated with their triggers via aria-controls.
  • Current page links should use aria-current="page".