Menu Item
A selectable row for menus and dropdowns. Built from two Figma components in sequence: the Menu Item (Default / Hover states, optional icon) and the Menu Dropdown (a bordered list container). All values pulled directly from the LUSTER Figma variables.
State: Default
Background: #FFFFFF
Text / Icon: #24242C
Padding: 12px 16px
Gap: 8px · Font: Inter 400 / 16px
Component · Menu Item
A single row with a label and an optional trailing icon. Two states: Default (white) and Hover (light purple #F2EDFF).
Component · Menu Dropdown
A bordered container stacking menu items with dividers. Hover any row to see the Hover state. Border: 2px #F2EDFF.
Design Tokens
Token names mirror the LUSTER Figma variable paths one-to-one. Values shown are the Diamond brand, Light mode defaults (the Figma file's default mode). Other brands (Amber, Opal) and Dark mode resolve to different values via the Color Theme & Component Brand collections.
| Token Name | Figma Variable | Default Value |
|---|---|---|
| --menuItemDefaultBgColor | menuItem/default/bg/color | #FFFFFF |
| --menuItemDefaultFontColor | menuItem/default/font/color | #24242C |
| --menuItemDefaultIconColor | menuItem/default/icon/color | #24242C |
| --menuItemHoverBgColor | menuItem/hover/bg/color | #F2EDFF |
| --menuItemHoverFontColor | menuItem/hover/font/color | #24242C |
| --menuItemHoverIconColor | menuItem/hover/icon/color | #24242C |
| --menuItemGap | menuItem/gap | 8px |
| --menuItemPaddingX | menuItem/padding/x | 16px |
| --menuItemPaddingY | menuItem/padding/y | 12px |
| --menuItemBorderRadius | menuItem/border/radius | 0px |
| --menuDropdownBgColor | menuDropdown/bg/color | #FFFFFF |
| --menuDropdownBorderColor | menuDropdown/border/color | #F2EDFF |
| --menuDropdownBorderWidth | menuDropdown/border/width | 2px |
| --menuDropdownBorderRadius | menuDropdown/border/radius | 0px |
| --bodyFontSize | typography/body/font/size | 16px |
| --bodyFontLineHeight | typography/body/font/lineHeight | 19px |
| --bodyFontWeight | typography/body/font/weight | 400 |
| --bodyFontFamily | body/font/family | Inter |
Usage Guidelines
✓ DO
Use the Hover state to give clear feedback on the focused row.
✓ DO
Keep menu labels short; add a trailing icon only when it adds meaning.
✗ DON'T
Don't mix wildly different row heights inside one dropdown.
✗ DON'T
Don't use menu items for primary page actions — use Buttons.
Implementation
Values shown are the Diamond brand, Light mode defaults (the Figma file's default mode). Other brands (Amber, Opal) and Dark mode resolve to different values via the Color Theme & Component Brand collections.
import './MenuItem.css';
export interface MenuItemProps {
label: string;
icon?: React.ReactNode;
onClick?: () => void;
}
export const MenuItem = ({ label, icon, onClick }: MenuItemProps) => (
<button type="button" className="menu-item" role="menuitem" onClick={onClick}>
<span className="menu-item__label">{label}</span>
{icon && <span className="menu-item__icon">{icon}</span>}
</button>
);
export const MenuDropdown = ({ children }) => (
<div className="menu-dropdown" role="menu">{children}</div>
);