moduix

Menu

A dropdown list of actions with keyboard navigation and nested menu support.

API Reference

Original primitive API

Behavior, accessibility details, and low-level props are documented by Base UI.

Base UI API

Basic

MenuContent renders the portal and positioner internally, so the public composition only needs the trigger, content, optional arrow, and menu items.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuItem,  MenuSeparator,} from "moduix";export function MenuDemo() {  return (    <Menu>      <MenuTrigger render={<Button />}>        Song        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent>        <MenuItem closeOnClick>Add to Library</MenuItem>        <MenuItem closeOnClick>Add to Playlist</MenuItem>        <MenuSeparator />        <MenuItem closeOnClick>Play Next</MenuItem>        <MenuItem closeOnClick>Play Last</MenuItem>        <MenuSeparator />        <MenuItem closeOnClick disabled>          Share        </MenuItem>      </MenuContent>    </Menu>  );}

Full list of component variables available for project-level overrides.

PropertyDefaultDescription
--menu-arrow-height0.625remControls popup arrow height.
--menu-arrow-inline-offset0.8125remControls popup arrow inline offset.
--menu-arrow-size0.5remControls popup arrow size.
--menu-arrow-stroke-colorvar(--menu-popup-border-color)Controls arrow stroke color.
--menu-arrow-width1.25remControls popup arrow width.
--menu-backdrop-bgvar(--color-overlay)Controls backdrop background.
--menu-backdrop-blur2pxControls backdrop blur.
--menu-backdrop-transitionvar(--transition-default)Controls backdrop transition.
--menu-check-gap0.5remControls checkbox/radio indicator gap.
--menu-check-indicator-size0.75remControls checkbox/radio indicator size.
--menu-check-padding-x-start0.625remControls checkbox/radio start padding.
--menu-checkbox-indicator-bgtransparentControls checkbox indicator background.
--menu-checkbox-indicator-bg-checkedvar(--menu-checkbox-indicator-bg)Controls checked checkbox indicator background.
--menu-checkbox-indicator-border-colorcurrentColorControls checkbox indicator border color.
--menu-checkbox-indicator-border-color-checkedvar(--menu-checkbox-indicator-border-color)Controls checked checkbox indicator border color.
--menu-checkbox-indicator-border-width0Controls checkbox indicator border width.
--menu-checkbox-indicator-radiusvar(--radius-xs)Controls checkbox indicator radius.
--menu-disabled-opacityvar(--opacity-disabled)Controls disabled trigger opacity.
--menu-focus-ring-colorvar(--color-ring)Controls focus ring color.
--menu-focus-ring-widthvar(--menu-trigger-border-width)Controls focus ring width.
--menu-group-label-colorvar(--color-muted-foreground)Controls group label color.
--menu-group-label-font-sizevar(--text-xs)Controls group label font size.
--menu-group-label-line-heightvar(--line-height-text-xs)Controls group label line height.
--menu-group-label-padding-x-end0.75remControls group label end padding.
--menu-group-label-padding-x-start0.625remControls group label start padding.
--menu-group-label-padding-y0.35remControls group label vertical padding.
--menu-group-padding-y0Controls group vertical padding.
--menu-highlight-bgvar(--color-foreground)Controls highlighted item background.
--menu-highlight-colorvar(--color-background)Controls highlighted item color.
--menu-highlight-inset-xvar(--spacing-1)Controls highlight inline inset.
--menu-highlight-radiusvar(--radius-sm)Controls highlight radius.
--menu-item-bgtransparentControls item background.
--menu-item-bg-disabledvar(--menu-item-bg)Controls disabled item background.
--menu-item-disabled-colorvar(--color-muted-foreground)Controls disabled item color.
--menu-item-font-sizevar(--text-sm)Controls item font size.
--menu-item-gapvar(--spacing-2)Controls item content gap.
--menu-item-height2remControls item minimum height.
--menu-item-line-heightvar(--line-height-text-sm)Controls item line height.
--menu-item-padding-x-end1remControls item end padding.
--menu-item-padding-x-start1remControls item start padding.
--menu-item-padding-y0.5remControls item vertical padding.
--menu-item-shortcut-colorvar(--color-muted-foreground)Controls shortcut color.
--menu-item-shortcut-font-sizevar(--text-xs)Controls shortcut font size.
--menu-item-shortcut-line-heightvar(--line-height-text-xs)Controls shortcut line height.
--menu-item-shortcut-padding-x-startvar(--spacing-4)Controls shortcut start padding.
--menu-item-text-content-gapvar(--spacing-2)Controls item text content gap.
--menu-item-text-icon-colorcurrentColorControls item text icon color.
--menu-item-text-icon-size1remControls item text icon size.
--menu-popup-bgvar(--color-popover)Controls popup background.
--menu-popup-border-colorvar(--color-border)Controls popup border color.
--menu-popup-border-widthvar(--border-width-sm)Controls popup border width.
--menu-popup-colorvar(--color-popover-foreground)Controls popup text color.
--menu-popup-heightautoControls popup height.
--menu-popup-max-height24remControls popup maximum height.
--menu-popup-max-width20remControls popup maximum width.
--menu-popup-min-width12remControls popup minimum width.
--menu-popup-padding-y0.25remControls popup vertical padding.
--menu-popup-radiusvar(--radius-md)Controls popup radius.
--menu-popup-scalevar(--scale-popup)Controls popup enter/exit scale.
--menu-popup-shadowvar(--shadow-lg)Controls popup shadow.
--menu-popup-widthautoControls popup width.
--menu-separator-colorvar(--color-border)Controls separator color.
--menu-separator-heightvar(--border-width-sm)Controls separator thickness.
--menu-separator-margin-x-end1remControls separator end margin.
--menu-separator-margin-x-start1remControls separator start margin.
--menu-separator-margin-y0.375remControls separator vertical margin.
--menu-submenu-icon-size0.875remControls submenu icon size.
--menu-submenu-open-bgvar(--color-accent)Controls open submenu background.
--menu-submenu-trigger-gapvar(--spacing-3)Controls submenu trigger gap.
--menu-submenu-trigger-padding-x-end1remControls submenu trigger end padding.
--menu-transitionvar(--transition-default)Controls menu transition duration/timing.
--menu-trigger-bgvar(--color-background)Controls trigger background.
--menu-trigger-bg-activevar(--menu-trigger-bg-hover)Controls active trigger background.
--menu-trigger-bg-hovervar(--color-accent)Controls hover trigger background.
--menu-trigger-border-colorvar(--color-border)Controls trigger border color.
--menu-trigger-border-widthvar(--border-width-sm)Controls trigger border width.
--menu-trigger-colorvar(--color-foreground)Controls trigger color.
--menu-trigger-font-sizevar(--text-md)Controls trigger font size.
--menu-trigger-gap0.5remControls trigger content gap.
--menu-trigger-heightvar(--size-lg)Controls trigger minimum height.
--menu-trigger-icon-colorcurrentColorControls trigger icon color.
--menu-trigger-icon-size1remControls trigger icon size.
--menu-trigger-line-heightvar(--line-height-text-md)Controls trigger line height.
--menu-trigger-padding-x0.875remControls trigger horizontal padding.
--menu-trigger-padding-y0.5remControls trigger vertical padding.
--menu-trigger-radiusvar(--radius-md)Controls trigger radius.

Interactive variables scoped for docs preview without changing size scale tokens.

PropertyValueDefaultDescription
--menu-arrow-stroke-colorvar(--menu-popup-border-color)Controls arrow stroke color.
--menu-checkbox-indicator-border-colorcurrentColorControls checkbox indicator border color.
--menu-highlight-bgvar(--color-foreground)Controls highlight background.
--menu-highlight-colorvar(--color-background)Controls highlight text color.
--menu-item-bgtransparentControls item background.
--menu-popup-bgvar(--color-popover)Controls popup background.
--menu-popup-border-colorvar(--color-border)Controls popup border color.
--menu-popup-border-widthvar(--border-width-sm)Controls popup border width.
--menu-popup-colorvar(--color-popover-foreground)Controls popup text color.
--menu-popup-radiusvar(--radius-md)Controls popup radius.
--menu-popup-shadowvar(--shadow-lg)Controls popup shadow.
--menu-trigger-bgvar(--color-background)Controls trigger background.
--menu-trigger-bg-hovervar(--color-accent)Controls trigger hover background.
--menu-trigger-border-widthvar(--border-width-sm)Controls trigger border width.
--menu-trigger-radiusvar(--radius-md)Controls trigger radius.

Anatomy

Menu is composed from a trigger and a popup content layer. Keep interactive items and nested branches inside MenuContent so roving focus, keyboard navigation, and close behavior stay managed by the root.

Menu
├─ MenuTrigger
│  └─ MenuTriggerIcon
└─ MenuContent
   ├─ MenuArrow
   ├─ MenuItem
   ├─ MenuSeparator
   └─ MenuSubmenu
      ├─ MenuSubmenuTrigger
      │  └─ MenuSubmenuTriggerIcon
      └─ MenuSubmenuContent
         └─ MenuItem
<Menu>
  <MenuTrigger>
    Song
    <MenuTriggerIcon />
  </MenuTrigger>
  <MenuContent>
    <MenuItem closeOnClick>Add to Library</MenuItem>
    <MenuSubmenu>
      <MenuSubmenuTrigger>
        Add to Playlist
        <MenuSubmenuTriggerIcon />
      </MenuSubmenuTrigger>
      <MenuSubmenuContent>
        <MenuItem closeOnClick>Get Up!</MenuItem>
      </MenuSubmenuContent>
    </MenuSubmenu>
  </MenuContent>
</Menu>
PartRole
MenuRoot state machine. Handles open state, focus management, and close interactions.
MenuTriggerControl that opens and closes the menu. Accepts trigger props like openOnHover, delay, and handle.
MenuTriggerIconOptional trigger indicator. Renders the default icon or your custom icon as children.
MenuContentPopup container for items. Accepts positioning props and renders service slots internally.
MenuArrowOptional visual pointer from popup to trigger.
MenuItemAction row. Supports disabled state and closeOnClick behavior.
MenuLinkItemItem variant for navigation links while preserving menu behavior.
MenuSeparatorVisual divider between related item groups.
MenuSubmenu*Nested branch for secondary actions (Trigger, TriggerIcon, and Content).
MenuGroup* / controlsOptional structured controls: labels, radio groups/items, checkbox items, and indicator slots.

MenuContent renders the Base UI portal, positioner, optional backdrop, optional viewport, and popup internally. In most cases, keep those service slots hidden and style visible parts such as trigger, items, separators, and arrow. Use classNames for service-slot classes and slotProps only when you need to pass non-class props to portal, backdrop, positioner, arrow, or viewport.

Composition

Use Menu for root state and behavior props such as open, defaultOpen, onOpenChange, and handle. Add withViewport only when you need Base UI content transitions for menus shared by multiple detached triggers.

className styles the visible popup. classNames styles the internal service slots hidden from the default composition. MenuContent forwards Base UI popup props and accepts positioner props such as side, sideOffset, align, alignOffset, arrowPadding, anchor, collisionAvoidance, collisionBoundary, collisionPadding, sticky, positionMethod, and disableAnchorTracking directly. Use container, withBackdrop, and withViewport for common service-slot behavior, and use slotProps for the rare cases that need lower-level Base UI portal, backdrop, positioner, arrow, or viewport props. Arrow is enabled by default; set withArrow={false} to disable it:

<MenuContent
  className={styles.popup}
  classNames={{
    portal: styles.portal,
    backdrop: styles.backdrop,
    positioner: styles.positioner,
    arrow: styles.arrow,
    viewport: styles.viewport,
  }}
  slotProps={{
    positioner: {
      collisionPadding: 8,
    },
  }}
  withBackdrop
  withViewport
/>

Examples

Without Arrow

Set withArrow={false} when the popup should appear without a pointer.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuItem,  MenuSeparator,} from "moduix";export function WithoutArrowMenu() {  return (    <Menu>      <MenuTrigger render={<Button />}>        Song        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent withArrow={false}>        <MenuItem closeOnClick>Add to Library</MenuItem>        <MenuItem closeOnClick>Add to Playlist</MenuItem>        <MenuSeparator />        <MenuItem closeOnClick>Play Next</MenuItem>      </MenuContent>    </Menu>  );}

Groups And Controls

Use groups, radio items, and checkbox items when the menu changes application state.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuGroup,  MenuGroupLabel,  MenuRadioGroup,  MenuRadioItem,  MenuRadioItemIndicator,  MenuItemText,  MenuSeparator,  MenuCheckboxItem,  MenuCheckboxItemIndicator,} from "moduix";import { useState } from "react";export function GroupsAndControlsMenu() {  const [sortBy, setSortBy] = useState("date");  const [showMinimap, setShowMinimap] = useState(true);  return (    <Menu>      <MenuTrigger render={<Button />}>        View        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent>        <MenuGroup>          <MenuGroupLabel>Sort</MenuGroupLabel>          <MenuRadioGroup value={sortBy} onValueChange={setSortBy}>            <MenuRadioItem value="date">              <MenuRadioItemIndicator />              <MenuItemText>Date</MenuItemText>            </MenuRadioItem>            <MenuRadioItem value="name">              <MenuRadioItemIndicator />              <MenuItemText>Name</MenuItemText>            </MenuRadioItem>          </MenuRadioGroup>        </MenuGroup>        <MenuSeparator />        <MenuGroup>          <MenuGroupLabel>Workspace</MenuGroupLabel>          <MenuCheckboxItem checked={showMinimap} onCheckedChange={setShowMinimap}>            <MenuCheckboxItemIndicator />            <MenuItemText>Minimap</MenuItemText>          </MenuCheckboxItem>        </MenuGroup>      </MenuContent>    </Menu>  );}

Shortcuts

Use MenuItemShortcut for shortcut text that aligns to the end of each item.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuItem,  MenuItemShortcut,  MenuSeparator,} from "moduix";export function ShortcutsMenu() {  return (    <Menu>      <MenuTrigger render={<Button />}>        Edit        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent>        <MenuItem closeOnClick>          Copy          <MenuItemShortcut>Ctrl+C</MenuItemShortcut>        </MenuItem>        <MenuItem closeOnClick>          Paste          <MenuItemShortcut>Ctrl+V</MenuItemShortcut>        </MenuItem>        <MenuSeparator />        <MenuItem closeOnClick>          Rename          <MenuItemShortcut>F2</MenuItemShortcut>        </MenuItem>      </MenuContent>    </Menu>  );}

Indicator Right With Icon

Use indicator="end" to align checkbox and radio indicators to the end. Text and icon slots accept custom content and className.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuCheckboxItem,  MenuItemText,  MenuItemTextContent,  MenuItemTextIcon,  InfoIcon,  MenuItemTextLabel,  MenuCheckboxItemIndicator,} from "moduix";import { useState } from "react";export function IndicatorRightMenu() {  const [showMinimap, setShowMinimap] = useState(true);  return (    <Menu>      <MenuTrigger render={<Button />}>        View        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent>        <MenuCheckboxItem checked={showMinimap} onCheckedChange={setShowMinimap} indicator="end">          <MenuItemText>            <MenuItemTextContent>              <MenuItemTextIcon>                <InfoIcon />              </MenuItemTextIcon>              <MenuItemTextLabel>Minimap</MenuItemTextLabel>            </MenuItemTextContent>          </MenuItemText>          <MenuCheckboxItemIndicator />        </MenuCheckboxItem>      </MenuContent>    </Menu>  );}

Nested

Use MenuSubmenu with MenuSubmenuTrigger and MenuSubmenuContent for nested actions.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuItem,  MenuSubmenu,  MenuSubmenuTrigger,  MenuSubmenuTriggerIcon,  MenuSubmenuContent,  MenuSeparator,} from "moduix";export function NestedMenu() {  return (    <Menu>      <MenuTrigger render={<Button />}>        Song        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent>        <MenuItem closeOnClick>Add to Library</MenuItem>        <MenuSubmenu>          <MenuSubmenuTrigger>            Add to Playlist            <MenuSubmenuTriggerIcon />          </MenuSubmenuTrigger>          <MenuSubmenuContent>            <MenuItem closeOnClick>Get Up!</MenuItem>            <MenuItem closeOnClick>Inside Out</MenuItem>            <MenuItem closeOnClick>Night Beats</MenuItem>            <MenuSeparator />            <MenuItem closeOnClick>New Playlist...</MenuItem>          </MenuSubmenuContent>        </MenuSubmenu>      </MenuContent>    </Menu>  );}

Open On Hover

Use openOnHover when the trigger should behave like a hover menu while keeping keyboard support.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuItem,  MenuSeparator,} from "moduix";export function OpenOnHoverMenu() {  return (    <Menu>      <MenuTrigger render={<Button />} openOnHover delay={120}>        Add to playlist        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent>        <MenuItem closeOnClick>Get Up!</MenuItem>        <MenuItem closeOnClick>Inside Out</MenuItem>        <MenuItem closeOnClick>Night Beats</MenuItem>        <MenuSeparator />        <MenuItem closeOnClick>New Playlist...</MenuItem>      </MenuContent>    </Menu>  );}

Positioned With Backdrop

Use side, align, and offset props on MenuContent to position the popup. Add withBackdrop when the menu should render an internal backdrop; style internal service slots through classNames.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuItem,  MenuSeparator,} from "moduix";export function PositionedWithBackdropMenu() {  return (    <Menu>      <MenuTrigger render={<Button />}>        Export        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent side="right" align="start" sideOffset={12} withBackdrop>        <MenuItem closeOnClick>Export PNG</MenuItem>        <MenuItem closeOnClick>Export PDF</MenuItem>        <MenuSeparator />        <MenuItem closeOnClick>Copy share link</MenuItem>      </MenuContent>    </Menu>  );}

Open Alert Dialog

Open a dialog from a menu item by closing the menu on click and updating dialog state in the item handler.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuItem,  MenuSeparator,  AlertDialog,  AlertDialogAction,  AlertDialogCancel,  AlertDialogContent,  AlertDialogDescription,  AlertDialogFooter,  AlertDialogHeader,  AlertDialogTitle,} from "moduix";import { useState, Fragment } from "react";export function OpenAlertDialogMenu() {  const [dialogOpen, setDialogOpen] = useState(false);  return (    <Fragment>      <Menu>        <MenuTrigger render={<Button />}>          Project          <MenuTriggerIcon />        </MenuTrigger>        <MenuContent>          <MenuItem closeOnClick>Rename</MenuItem>          <MenuItem closeOnClick>Duplicate</MenuItem>          <MenuSeparator />          <MenuItem            closeOnClick            onClick={() => {              setDialogOpen(true);            }}          >            Delete...          </MenuItem>        </MenuContent>      </Menu>      <AlertDialog open={dialogOpen} onOpenChange={setDialogOpen}>        <AlertDialogContent>          <AlertDialogHeader>            <AlertDialogTitle>Delete project?</AlertDialogTitle>            <AlertDialogDescription>              This action cannot be undone and will permanently remove all environments.            </AlertDialogDescription>          </AlertDialogHeader>          <AlertDialogFooter>            <AlertDialogCancel>Cancel</AlertDialogCancel>            <AlertDialogAction>Delete</AlertDialogAction>          </AlertDialogFooter>        </AlertDialogContent>      </AlertDialog>    </Fragment>  );}

Use MenuLinkItem for navigation items that should render as links.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  MenuContent,  MenuLinkItem,  MenuSeparator,  MenuItem,} from "moduix";export function LinkItemsMenu() {  return (    <Menu>      <MenuTrigger render={<Button />}>        Navigate        <MenuTriggerIcon />      </MenuTrigger>      <MenuContent>        <MenuLinkItem href="#projects">Projects</MenuLinkItem>        <MenuLinkItem href="#teams">Teams</MenuLinkItem>        <MenuLinkItem href="#billing">Billing</MenuLinkItem>        <MenuSeparator />        <MenuItem closeOnClick>Copy Link</MenuItem>      </MenuContent>    </Menu>  );}

Detached Trigger

Use createMenuHandle when the trigger and root need to be rendered in different places.

import {  Button,  createMenuHandle,  MenuTrigger,  MenuTriggerIcon,  Menu,  MenuContent,  MenuItem,  MenuSeparator,} from "moduix";import { useMemo, Fragment } from "react";export function DetachedTriggerMenu() {  const menuHandle = useMemo(() => createMenuHandle(), []);  return (    <Fragment>      <div className={styles.detachedTrigger}>        <MenuTrigger render={<Button />} handle={menuHandle}>          Actions          <MenuTriggerIcon />        </MenuTrigger>      </div>      <Menu handle={menuHandle}>        <MenuContent>          <MenuItem closeOnClick>Edit</MenuItem>          <MenuItem closeOnClick>Share</MenuItem>          <MenuSeparator />          <MenuItem closeOnClick>Archive</MenuItem>        </MenuContent>      </Menu>    </Fragment>  );}
.detachedTrigger {  display: flex;  justify-content: center;  margin-bottom: var(--spacing-4);}

Custom Styles

Use className for visible slots and classNames for internal service slots. Icon slots accept children from your application or an external icon library.

import {  Button,  Menu,  MenuTrigger,  MenuTriggerIcon,  ChevronDownIcon,  MenuContent,  MenuItem,  MenuItemTextContent,  MenuItemTextIcon,  MapIcon,  MenuItemTextLabel,  MenuSubmenu,  MenuSubmenuTrigger,  InfoIcon,  MenuSubmenuTriggerIcon,  MenuSubmenuContent,} from "moduix";export function CustomStylesMenu() {  return (    <Menu>      <MenuTrigger render={<Button />} className={styles.customTrigger}>        Places        <MenuTriggerIcon className={styles.customTriggerIcon}>          <ChevronDownIcon />        </MenuTriggerIcon>      </MenuTrigger>      <MenuContent        className={styles.customPopup}        classNames={{          portal: styles.customPortal,          backdrop: styles.customBackdrop,          positioner: styles.customPositioner,        }}        withBackdrop      >        <MenuItem closeOnClick className={styles.customItem}>          <MenuItemTextContent>            <MenuItemTextIcon>              <MapIcon />            </MenuItemTextIcon>            <MenuItemTextLabel>Open map</MenuItemTextLabel>          </MenuItemTextContent>        </MenuItem>        <MenuSubmenu>          <MenuSubmenuTrigger className={styles.customItem}>            <MenuItemTextContent>              <MenuItemTextIcon>                <InfoIcon />              </MenuItemTextIcon>              <MenuItemTextLabel>More</MenuItemTextLabel>            </MenuItemTextContent>            <MenuSubmenuTriggerIcon>              <ChevronDownIcon />            </MenuSubmenuTriggerIcon>          </MenuSubmenuTrigger>          <MenuSubmenuContent>            <MenuItem closeOnClick className={styles.customItem}>              Nearby            </MenuItem>            <MenuItem closeOnClick className={styles.customItem}>              Routes            </MenuItem>          </MenuSubmenuContent>        </MenuSubmenu>      </MenuContent>    </Menu>  );}
.customTrigger {  border-color: var(--color-primary);  background:    linear-gradient(var(--color-background), var(--color-background)) padding-box,    linear-gradient(135deg, var(--color-primary), var(--color-ring)) border-box;  color: var(--color-primary);}.customTriggerIcon {  --menu-trigger-icon-size: 0.875rem;}.customPortal {  position: relative;}.customBackdrop {  background-color: rgb(0 0 0 / 0.08);  backdrop-filter: blur(0.125rem);}.customPositioner {  z-index: var(--z-popup);}.customPopup {  --menu-popup-min-width: 13rem;  --menu-popup-bg: var(--color-background);  --menu-popup-border-color: var(--color-primary);  --menu-popup-shadow: var(--shadow-lg);  --menu-highlight-bg: var(--color-primary);  --menu-highlight-color: var(--color-primary-foreground);  --menu-separator-color: var(--color-primary);}.customItem {  --menu-item-padding-x-start: var(--spacing-3);  --menu-item-padding-x-end: var(--spacing-3);  --menu-item-text-icon-color: var(--color-primary);}

On this page