A React component to render accessible menus with comprehensive dropdown functionality and WAI-ARIA compliance
npx @tessl/cli install tessl/npm-chakra-ui--menu@2.2.0A comprehensive React component library for building accessible dropdown menus, context menus, and navigation systems that follow WAI-ARIA guidelines. Provides full keyboard navigation, focus management, positioning, and extensive customization options with built-in accessibility features.
npm install @chakra-ui/menuimport {
Menu,
MenuButton,
MenuList,
MenuItem,
MenuGroup,
MenuDivider,
MenuOptionGroup,
MenuItemOption,
} from "@chakra-ui/menu";For CommonJS:
const {
Menu,
MenuButton,
MenuList,
MenuItem,
MenuGroup,
MenuDivider,
MenuOptionGroup,
MenuItemOption,
} = require("@chakra-ui/menu");import {
Menu,
MenuButton,
MenuList,
MenuItem,
} from "@chakra-ui/menu";
function BasicMenu() {
return (
<Menu>
<MenuButton>Actions</MenuButton>
<MenuList>
<MenuItem>Download</MenuItem>
<MenuItem>Create a Copy</MenuItem>
<MenuItem>Mark as Draft</MenuItem>
<MenuItem>Delete</MenuItem>
</MenuList>
</Menu>
);
}
// With option groups
function AdvancedMenu() {
return (
<Menu closeOnSelect={false}>
<MenuButton>Options</MenuButton>
<MenuList>
<MenuOptionGroup defaultValue="asc" title="Sort Order" type="radio">
<MenuItemOption value="asc">Ascending</MenuItemOption>
<MenuItemOption value="desc">Descending</MenuItemOption>
</MenuOptionGroup>
<MenuDivider />
<MenuOptionGroup title="Filters" type="checkbox">
<MenuItemOption value="active">Show Active</MenuItemOption>
<MenuItemOption value="completed">Show Completed</MenuItemOption>
</MenuOptionGroup>
</MenuList>
</Menu>
);
}Chakra UI Menu is built around several key architectural patterns:
Essential components for building basic dropdown menus with proper structure and accessibility.
// Root menu context provider
const Menu: React.FC<MenuProps>;
// Menu trigger button
const MenuButton: React.ForwardRefExoticComponent<MenuButtonProps>;
// Menu container with positioning and animation
const MenuList: React.ForwardRefExoticComponent<MenuListProps>;
// Individual menu items
const MenuItem: React.ForwardRefExoticComponent<MenuItemProps>;Components for creating menus with radio and checkbox selection functionality.
// Container for selectable options
const MenuOptionGroup: React.FC<MenuOptionGroupProps>;
// Selectable menu item with check/radio states
const MenuItemOption: React.ForwardRefExoticComponent<MenuItemOptionProps>;Supporting components for menu structure, styling, and visual organization.
// Group related menu items
const MenuGroup: React.ForwardRefExoticComponent<MenuGroupProps>;
// Visual separator
const MenuDivider: React.FC<MenuDividerProps>;
// Command/shortcut text display
const MenuCommand: React.ForwardRefExoticComponent<MenuCommandProps>;
// Icon wrapper with proper styling
const MenuIcon: React.FC<HTMLChakraProps<"span">>;Low-level hooks for custom menu implementations and accessing menu state.
// Main menu state and logic hook
function useMenu(props?: UseMenuProps): UseMenuReturn;
// Menu button behavior hook
function useMenuButton(props?: UseMenuButtonProps, ref?: React.Ref<any>): ButtonProps;
// Menu list behavior hook
function useMenuList(props?: UseMenuListProps, ref?: React.Ref<any>): ListProps;
// Menu item behavior hook
function useMenuItem(props?: UseMenuItemProps, ref?: React.Ref<any>): ItemProps;
// Access menu context
function useMenuContext(): MenuContextValue;
// Access menu styles
function useMenuStyles(): Record<string, SystemStyleObject>;function ControlledMenu() {
const [isOpen, setIsOpen] = useState(false);
return (
<Menu isOpen={isOpen} onClose={() => setIsOpen(false)}>
<MenuButton onClick={() => setIsOpen(!isOpen)}>
Menu
</MenuButton>
<MenuList>
<MenuItem>Item 1</MenuItem>
<MenuItem>Item 2</MenuItem>
</MenuList>
</Menu>
);
}function RenderPropsMenu() {
return (
<Menu>
{({ isOpen, onClose }) => (
<>
<MenuButton>
{isOpen ? "Close Menu" : "Open Menu"}
</MenuButton>
<MenuList>
<MenuItem onClick={onClose}>Close and Do Action</MenuItem>
</MenuList>
</>
)}
</Menu>
);
}function CustomMenu() {
return (
<Menu>
<MenuButton>Custom Items</MenuButton>
<MenuList>
<MenuItem icon={<DownloadIcon />} command="⌘D">
Download
</MenuItem>
<MenuItem as="a" href="/profile">
Profile
</MenuItem>
<MenuItem isDisabled>
Disabled Item
</MenuItem>
</MenuList>
</Menu>
);
}