{
  "name": "Menu",
  "type": "component",
  "description": "A menu of actions, or of one-of-a-set selections. Portalled and theme-aware.",
  "export": "Menu",
  "path": "@gtmi/strix-react/atoms/menu",
  "figma": null,
  "figmaAbsent": "Base UI primitive (dropdown-menu). Figma draws no menu.",
  "props": [
    {
      "name": "value",
      "type": "TSelection",
      "description": "On Menu.Root: the selected item value, when the menu picks one of a set."
    },
    {
      "name": "onValueChange",
      "type": "(value: TSelection) => void",
      "description": "Fires when a valued item is chosen."
    }
  ],
  "parts": [
    {
      "name": "Menu.Root",
      "description": "Owns open state and, optionally, the selected value."
    },
    {
      "name": "Menu.Trigger",
      "description": "Merges Base UI's trigger behavior into the caller's element, and appends a chevron that rotates while open. Props: showChevron (default true), chevronIcon."
    },
    {
      "name": "Menu.Portal / Menu.Positioner / Menu.Popup",
      "description": "Explicit rather than folded together, because a menu is the overlay whose placement callers most often need to control."
    },
    {
      "name": "Menu.Item",
      "description": "An action, or with a `value` a selection: check glyph, checked state and menuitemradio semantics. Props: value, icon, disabled."
    },
    {
      "name": "Menu.Separator / Menu.Group / Menu.GroupLabel",
      "description": "Structure inside the popup. Wrap valued items in a Group: WAI-ARIA APG expects menuitemradio inside a role=\"group\"."
    }
  ],
  "ai_tags": ["menu", "dropdown", "actions", "portal", "compound", "primitive"],
  "since": "0.2.0",
  "tokens_used": [
    "--color-surface-base",
    "--color-surface-neutral-semi-medium",
    "--color-surface-neutral-semi-medium-strong",
    "--color-text-primary",
    "--color-text-secondary",
    "--color-text-accent-hover",
    "--color-text-accent-focused",
    "--color-text-accent-pressed",
    "--color-text-disabled-on-surface",
    "--color-icon-accent",
    "--color-border-neutral-soft",
    "--color-border-focus",
    "--shadow-xs",
    "--radius-md",
    "--spacing-padding-horizontal-md",
    "--spacing-padding-vertical-md",
    "--spacing-padding-vertical-sm",
    "--spacing-padding-vertical-xs",
    "--z-index-popover",
    "--animate-popup-in",
    "--animate-popup-out"
  ],
  "notes": "PORTALLED: stamps the active theme on the popup, with a test asserting the popup is not inside the provider element. Upstream's positioner wrote `z-popover`, which is neither a Tailwind utility nor a token reference, so every menu's stacking was accidental; it is z-(--z-index-popover) here. The popup grows to --available-height, published by Base UI's positioner, then scrolls. Selection context has a default rather than throwing, so a menu of plain actions needs no root state. TESTING NOTE: navigation is asserted on data-highlighted, not document.activeElement - Base UI moves DOM focus into the menu only for keyboard-initiated opens and tracks input modality in module state shared across a test file, so a focus assertion after a pointer-initiated open is order-dependent. Focus return to the trigger on Escape is asserted separately, where it is unambiguous."
}
