A collection of React components for building accessible, customizable navigation menus with keyboard support and flexible layout options
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Context scope creation utilities for managing navigation menu instances.
Creates isolated context scopes for navigation menu components to prevent conflicts between multiple navigation menu instances.
/**
* Creates a scoped context factory for navigation menu components
* Used internally by Radix to prevent context conflicts between multiple
* navigation menu instances. Returns scope creation utilities.
*/
function createNavigationMenuScope(): CreateScope;Key Features:
Note: This is primarily an internal utility function used by the Radix UI system for context management. Most applications do not need to use this function directly, as each NavigationMenu component automatically creates its own isolated scope.
Usage Examples:
import { createNavigationMenuScope } from "@radix-ui/react-navigation-menu";
// Basic usage (rarely needed in applications)
const useCustomNavigationMenuScope = createNavigationMenuScope();
// The scope is typically used internally by NavigationMenu components
// Most users don't need to interact with this directly
// Example of internal usage pattern (for reference)
function CustomNavigationWrapper() {
// In most cases, you would just use NavigationMenu directly
// which handles scoping automatically
return (
<NavigationMenu>
{/* Components automatically use proper scoping */}
</NavigationMenu>
);
}The navigation menu uses a sophisticated context system:
// Internal context types (for reference)
type NavigationMenuContextValue = {
isRootMenu: boolean;
value: string;
previousValue: string;
baseId: string;
dir: "ltr" | "rtl";
orientation: "horizontal" | "vertical";
rootNavigationMenu: HTMLElement | null;
indicatorTrack: HTMLDivElement | null;
onIndicatorTrackChange(indicatorTrack: HTMLDivElement | null): void;
viewport: HTMLDivElement | null;
onViewportChange(viewport: HTMLDivElement | null): void;
onViewportContentChange(contentValue: string, contentData: ContentData): void;
onViewportContentRemove(contentValue: string): void;
onTriggerEnter(itemValue: string): void;
onTriggerLeave(): void;
onContentEnter(): void;
onContentLeave(): void;
onItemSelect(itemValue: string): void;
onItemDismiss(): void;
};When you need multiple navigation menus, each NavigationMenu component automatically creates its own scope:
import {
NavigationMenu,
NavigationMenuList,
NavigationMenuItem,
NavigationMenuTrigger,
NavigationMenuContent
} from "@radix-ui/react-navigation-menu";
// Multiple independent navigation menus
function MultipleNavigationExample() {
return (
<div>
{/* First navigation menu - automatically scoped */}
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Products</NavigationMenuTrigger>
<NavigationMenuContent>Products content</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
{/* Second navigation menu - automatically scoped */}
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Services</NavigationMenuTrigger>
<NavigationMenuContent>Services content</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
</div>
);
}For nested navigation, use NavigationMenuSub within content:
function NestedNavigationExample() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Main Category</NavigationMenuTrigger>
<NavigationMenuContent>
{/* Use NavigationMenuSub for nested structure */}
<NavigationMenuSub>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Subcategory</NavigationMenuTrigger>
<NavigationMenuContent>Sub-content</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenuSub>
</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}// Preferred: Let NavigationMenu handle scoping automatically
function RecommendedNavigation() {
return (
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger>Item</NavigationMenuTrigger>
<NavigationMenuContent>Content</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
);
}
// Avoid: Manual scope management (unless specifically needed)
// Most applications should not need to use createNavigationMenuScope directlyInstall with Tessl CLI
npx tessl i tessl/npm-radix-ui--react-navigation-menu