Skip to content

Menu Component

A flexible floating menu foundation for dropdowns, tooltips, popovers, and any contextual overlay that needs smart positioning and trigger management.

Overview

The Menu component provides:

  • Click or hover trigger handling with optional propagation control
  • Smart positioning with collision detection and automatic flipping
  • Responsive updates on window resize and scroll events
  • Teleport-to-body rendering for predictable stacking order
  • Configurable offsets, placements, widths, and custom classes
  • Programmatic methods so parents can control the open state

When to Use

This is a base component primarily used to build higher-level primitives. Reach for it when you need bespoke overlays or advanced behavior beyond the bundled components:

Key Features

  • Trigger Types: Click or hover activation with optional propagation control.
  • Smart Positioning: Automatically flips or nudges when the menu would overflow the viewport.
  • Responsive: Updates position automatically on resize, scroll, or when trigger/offset props change.
  • Teleport + Styling: Content teleports to body and accepts extra classes via menuContentClass.
  • Sizing Options: Explicit width, trigger-width matching, REM-aware offsets, and fixed coordinates via fixedX/fixedY.
  • Programmatic Control: Exposes openMenu, closeMenu, toggleMenu, and isOpen for parent components.

Advanced Features

Collision Detection

The menu automatically detects when it would overflow the viewport and intelligently flips to the opposite side or adjusts its position to stay within bounds.

Hover Support

When configured for hover activation, the menu includes a small delay before closing to prevent accidental dismissal when moving between trigger and menu.

Responsive Positioning

The menu maintains proper positioning relative to its trigger element even when the window is resized or the page is scrolled.

API Reference →

View Code →