@arolariu/website / types / NavigationItem
Type Alias: NavigationItem
NavigationItem =
object
Defined in: types/index.ts:403
Represents a navigation menu item with optional nested children.
Remarks
Purpose: Defines the structure for hierarchical navigation menus, supporting both flat and nested menu structures.
Properties:
label: Display text for the navigation item (e.g., "Home", "Invoices", "Profile")href: Type-safe Next.js route path (enforced byRoutetype)children: Optional array of nested navigation items for dropdown/submenu support
Recursive Structure: The children property allows for arbitrary nesting depth,
enabling complex menu hierarchies (e.g., "Products → Electronics → Laptops").
Type Safety: The href property uses Next.js's Route type, providing
compile-time validation that routes exist in the application.
Usage Context:
- Header navigation menus
- Sidebar navigation
- Footer site maps
- Breadcrumb trails
- Mobile navigation drawers
Internationalization: Labels should be translated using next-intl. Store translation keys instead of hardcoded text for multi-language support.
Accessibility: When rendering, ensure:
- Proper ARIA attributes for dropdowns (
aria-haspopup,aria-expanded) - Keyboard navigation support (arrow keys for nested items)
- Focus management for interactive elements
Example
// Flat navigation
const simpleNav: NavigationItem = {
label: "Home",
href: "/"
};
// Nested navigation with children
const nestedNav: NavigationItem = {
label: "Invoices",
href: "/invoices",
children: [
{ label: "All Invoices", href: "/invoices" },
{ label: "Create Invoice", href: "/invoices/create" },
{ label: "Archive", href: "/invoices/archive" }
]
};
// Deep nesting example
const deepNav: NavigationItem = {
label: "Settings",
href: "/settings",
children: [
{
label: "Account",
href: "/settings/account",
children: [
{ label: "Profile", href: "/settings/account/profile" },
{ label: "Security", href: "/settings/account/security" }
]
}
]
};
See
Route - Next.js type-safe route type
Properties
label
label:
string
Defined in: types/index.ts:404
href
href:
Route
Defined in: types/index.ts:405
children?
optionalchildren:NavigationItem[]
Defined in: types/index.ts:406