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.

Figma Properties
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).

Default
Hover

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 NameFigma VariableDefault Value
--menuItemDefaultBgColormenuItem/default/bg/color#FFFFFF
--menuItemDefaultFontColormenuItem/default/font/color#24242C
--menuItemDefaultIconColormenuItem/default/icon/color#24242C
--menuItemHoverBgColormenuItem/hover/bg/color#F2EDFF
--menuItemHoverFontColormenuItem/hover/font/color#24242C
--menuItemHoverIconColormenuItem/hover/icon/color#24242C
--menuItemGapmenuItem/gap8px
--menuItemPaddingXmenuItem/padding/x16px
--menuItemPaddingYmenuItem/padding/y12px
--menuItemBorderRadiusmenuItem/border/radius0px
--menuDropdownBgColormenuDropdown/bg/color#FFFFFF
--menuDropdownBorderColormenuDropdown/border/color#F2EDFF
--menuDropdownBorderWidthmenuDropdown/border/width2px
--menuDropdownBorderRadiusmenuDropdown/border/radius0px
--bodyFontSizetypography/body/font/size16px
--bodyFontLineHeighttypography/body/font/lineHeight19px
--bodyFontWeighttypography/body/font/weight400
--bodyFontFamilybody/font/familyInter

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>
);