Skip to content
Tungsten
← All recipes

Nested submenu

A submenu via MenuSub / MenuSubTrigger / MenuSubContent — ArrowRight opens it, ArrowLeft/Escape closes it. The pattern for grouping secondary actions like “Share”.

Preview

Source

apps/docs/app/recipes/menu-nested/recipe.tsx
'use client';

import {
  Menu,
  MenuTrigger,
  MenuContent,
  MenuItem,
  MenuSeparator,
  MenuSub,
  MenuSubTrigger,
  MenuSubContent,
} from '@hey-mike/tungsten';
import { Share2 } from 'lucide-react';

const triggerClass =
  'border-stroke bg-surface text-ink-1 hover:bg-surface-2 rounded-lg border px-4 py-2 text-sm font-medium transition-colors';

export default function MenuNestedRecipe() {
  return (
    <Menu defaultOpen>
      <MenuTrigger className={triggerClass}>File</MenuTrigger>
      <MenuContent>
        <MenuItem>New file</MenuItem>
        <MenuItem>Open…</MenuItem>
        <MenuSeparator />
        <MenuSub defaultOpen>
          <MenuSubTrigger icon={<Share2 className="size-4" />}>Share</MenuSubTrigger>
          <MenuSubContent>
            <MenuItem>Email</MenuItem>
            <MenuItem>Copy link</MenuItem>
          </MenuSubContent>
        </MenuSub>
      </MenuContent>
    </Menu>
  );
}
'use client';

import {
  Menu,
  MenuTrigger,
  MenuContent,
  MenuItem,
  MenuSeparator,
  MenuSub,
  MenuSubTrigger,
  MenuSubContent,
} from '@hey-mike/tungsten';
import { Share2 } from 'lucide-react';

const triggerClass =
  'border-stroke bg-surface text-ink-1 hover:bg-surface-2 rounded-lg border px-4 py-2 text-sm font-medium transition-colors';

export default function MenuNestedRecipe() {
  return (
    <Menu defaultOpen>
      <MenuTrigger className={triggerClass}>File</MenuTrigger>
      <MenuContent>
        <MenuItem>New file</MenuItem>
        <MenuItem>Open…</MenuItem>
        <MenuSeparator />
        <MenuSub defaultOpen>
          <MenuSubTrigger icon={<Share2 className="size-4" />}>Share</MenuSubTrigger>
          <MenuSubContent>
            <MenuItem>Email</MenuItem>
            <MenuItem>Copy link</MenuItem>
          </MenuSubContent>
        </MenuSub>
      </MenuContent>
    </Menu>
  );
}