Navigation Menu
Site links with panels that open on hover or click.
import { … } from '@inlaylab/ivorie/navigation-menu'import { ChangeDetectionStrategy, Component } from '@angular/core';
import { IV_NAVIGATION_MENU_IMPORTS, navigationMenuTriggerStyle } from '@inlaylab/ivorie/navigation-menu';
@Component({
selector: 'demo-navigation-menu',
imports: [IV_NAVIGATION_MENU_IMPORTS],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<iv-navigation-menu>
<ul ivNavigationMenuList>
<li ivNavigationMenuItem>
<button ivNavigationMenuTrigger>Getting started</button>
<iv-navigation-menu-content>
<ul class="grid w-72 gap-1">
@for (l of guides; track l.title) {
<li>
<a ivNavigationMenuLink [href]="l.href" class="flex-col items-start gap-0.5">
<span class="font-medium">{{ l.title }}</span>
<span class="text-muted-foreground">{{ l.text }}</span>
</a>
</li>
}
</ul>
</iv-navigation-menu-content>
</li>
<li ivNavigationMenuItem>
<button ivNavigationMenuTrigger>Components</button>
<iv-navigation-menu-content>
<ul class="grid w-96 grid-cols-2 gap-1">
@for (c of components; track c) {
<li><a ivNavigationMenuLink [href]="'docs/' + c">{{ c }}</a></li>
}
</ul>
</iv-navigation-menu-content>
</li>
<li ivNavigationMenuItem>
<a ivNavigationMenuLink href="docs/cli" [class]="triggerStyle">CLI</a>
</li>
</ul>
</iv-navigation-menu>
`,
})
export default class NavigationMenuDemo {
protected readonly triggerStyle = navigationMenuTriggerStyle;
protected readonly guides = [
{ title: 'Installation', text: 'Add Ivorie to an app.', href: 'docs/installation' },
{ title: 'Theming', text: 'Colors, radius and dark mode.', href: 'docs/theming' },
];
protected readonly components = ['button', 'dialog', 'select', 'tabs'];
}
Installation
npx ivorie add navigation-menuimport { … } from '@inlaylab/ivorie/navigation-menu'Usage
import { IV_NAVIGATION_MENU_IMPORTS } from '@inlaylab/ivorie/navigation-menu';<iv-navigation-menu>
<ul ivNavigationMenuList>
<li ivNavigationMenuItem>
<button ivNavigationMenuTrigger>Docs</button>
<iv-navigation-menu-content>
<a ivNavigationMenuLink href="docs/installation">Installation</a>
</iv-navigation-menu-content>
</li>
</ul>
</iv-navigation-menu>API
Every part also accepts class.
iv-navigation-menu
| Name | Type | Default | Description |
|---|---|---|---|
aria-label |
string |
'Main' |
Label of the inner nav. |
li[ivNavigationMenuItem]
| Name | Type | Default | Description |
|---|---|---|---|
value |
string | null |
auto id | Item key. |
a[ivNavigationMenuLink]
| Name | Type | Default | Description |
|---|---|---|---|
active |
boolean |
false |
Marks the current page (aria-current="page"). |
Other parts
ul[ivNavigationMenuList].button[ivNavigationMenuTrigger]: opens its item's panel. Adds a chevron.iv-navigation-menu-content: the panel, shown under the menu. It slides in from the side of the last open panel.navigationMenuTriggerStyle: classes to make a plain link look like a trigger.
Accessibility
- A
navlandmark with a list of links. - Triggers have
aria-expandedandaria-controls. Down arrow opens the panel and focuses its first link. - Escape closes the panel and returns focus to its trigger. A click outside closes it.