base-menu-nested

PreviousNext
Docs
reuicomponent

Preview

Loading preview…
registry/default/components/base-menu/nested.tsx
import { Badge } from '@/registry/default/ui/base-badge';
import { Button } from '@/registry/default/ui/base-button';
import {
  Menu,
  MenuArrow,
  MenuContent,
  MenuGroup,
  MenuGroupLabel,
  MenuItem,
  MenuPopup,
  MenuPortal,
  MenuPositioner,
  MenuSeparator,
  MenuShortcut,
  MenuSubmenuRoot,
  MenuSubmenuTrigger,
  MenuTrigger,
} from '@/registry/default/ui/base-menu';
import {
  Bug,
  FileText,
  Globe,
  LogOut,
  Mail,
  Monitor,
  Package,
  Plus,
  Server,
  Settings,
  Shield,
  Trash,
  User,
  UserPlus,
  Users,
} from 'lucide-react';

export default function MenuDemo() {
  return (
    <Menu>
      <MenuTrigger render={<Button variant="outline" />}>Show Menu</MenuTrigger>
      <MenuContent sideOffset={4} className="w-64">
        {/* Account Section */}
        <MenuGroup>
          <MenuGroupLabel>My Account</MenuGroupLabel>
          <MenuSeparator />
          <MenuItem>
            <User />
            <span>Profile</span>
            <MenuShortcut>⇧⌘P</MenuShortcut>
          </MenuItem>
          <MenuItem>
            <Mail />
            <span>Inbox</span>
            <MenuShortcut>⌘I</MenuShortcut>
          </MenuItem>
          <MenuItem>
            <Settings />
            <span>Settings</span>
            <MenuShortcut>⌘S</MenuShortcut>
          </MenuItem>
        </MenuGroup>

        {/* Team Management Section */}
        <MenuSeparator />
        <MenuGroup>
          <MenuGroupLabel>Team Management</MenuGroupLabel>
          <MenuSubmenuRoot>
            <MenuSubmenuTrigger>
              <Users />
              <span>Team Settings</span>
            </MenuSubmenuTrigger>
            <MenuContent sideOffset={-4} alignOffset={-4} className="min-w-[8rem]">
              <MenuItem disabled>
                <Shield />
                <span>Permissions</span>
              </MenuItem>
              <MenuItem>
                <UserPlus />
                <span>Invite Members</span>
              </MenuItem>
              <MenuSeparator />
              <MenuItem>
                <Monitor />
                <span>Monitor Activity</span>
              </MenuItem>
              <MenuItem>
                <FileText />
                <span>Logs</span>
              </MenuItem>
              <MenuItem>
                <Server />
                <span>Server Status</span>
              </MenuItem>
              <MenuItem>
                <Globe />
                <span>Web Traffic</span>
              </MenuItem>
              <MenuSeparator />
              <MenuItem variant="destructive">
                <Bug />
                <span>System Errors</span>
              </MenuItem>
            </MenuContent>
          </MenuSubmenuRoot>

          {/* Roles Submenu */}
          <MenuSubmenuRoot>
            <MenuSubmenuTrigger>
              <Shield />
              <span>Roles</span>
            </MenuSubmenuTrigger>
            <MenuContent sideOffset={-4} alignOffset={-4} className="min-w-[8rem]">
              <MenuItem>
                <Plus />
                <span>Add Role</span>
              </MenuItem>
              <MenuItem>
                <Users />
                <span>Assign Roles</span>
              </MenuItem>
              <MenuSeparator />
              <MenuItem variant="destructive">
                <Trash />
                <span>Delete Role</span>
              </MenuItem>
            </MenuContent>
          </MenuSubmenuRoot>

          <MenuItem>
            <Package />
            <span>Integrations</span>
            <Badge variant="destructive" shape="circle" size="xs" className="ms-auto">
              5
            </Badge>
          </MenuItem>
        </MenuGroup>

        {/* Logout */}
        <MenuSeparator />
        <MenuGroup>
          <MenuItem>
            <LogOut />
            <span>Log Out</span>
            <MenuShortcut>⇧⌘Q</MenuShortcut>
          </MenuItem>
        </MenuGroup>
      </MenuContent>
    </Menu>
  );
}

Installation

npx shadcn@latest add @reui/base-menu-nested

Usage

import { BaseMenuNested } from "@/components/base-menu-nested"
<BaseMenuNested />