oui-menu-demo-checkboxes

PreviousNext
Docs
ouicomponent

Preview

Loading preview…
registry/default/components/oui-menu-demo-checkboxes.tsx
"use client";

import type { Selection } from "react-aria-components";
import * as React from "react";
import { Button } from "@/registry/default/ui/oui-button";
import {
  Menu,
  MenuHeader,
  MenuItem,
  MenuSeparator,
} from "@/registry/default/ui/oui-menu";
import { Popover } from "@/registry/default/ui/oui-popover";
import {
  CreditCardIcon,
  LogOutIcon,
  Settings2Icon,
  UserIcon,
} from "lucide-react";
import * as Rac from "react-aria-components";

export default function Component() {
  const [appearanceSelectedKeys, setAppearanceSelectedKeys] =
    React.useState<Selection>(new Set(["statusBar"]));

  return (
    <Rac.MenuTrigger>
      <Button variant="outline">Menu Checkboxes</Button>
      <Popover>
        <Menu className="w-56">
          <Rac.MenuSection>
            <MenuHeader>Account</MenuHeader>
            <MenuItem id="profile" textValue="Profile">
              <UserIcon className="mr-2 size-4" /> Profile
            </MenuItem>
            <MenuItem id="billing" textValue="Billing">
              <CreditCardIcon className="mr-2 size-4" /> Billing
            </MenuItem>
            <MenuItem id="settings" textValue="Settings">
              <Settings2Icon className="mr-2 size-4" /> Settings
            </MenuItem>
          </Rac.MenuSection>
          <MenuSeparator />
          <Rac.MenuSection
            selectionMode="multiple"
            selectedKeys={appearanceSelectedKeys}
            onSelectionChange={setAppearanceSelectedKeys}
          >
            <MenuHeader>Appearance</MenuHeader>
            <MenuItem id="statusBar">Status Bar</MenuItem>
            <MenuItem id="activityBar" isDisabled>
              Activity Bar
            </MenuItem>
            <MenuItem id="panel">Panel</MenuItem>
          </Rac.MenuSection>
          <MenuSeparator />
          <Rac.MenuSection>
            <MenuItem id="signOut" textValue="Sign Out">
              <LogOutIcon className="mr-2 size-4" /> Sign Out
            </MenuItem>
          </Rac.MenuSection>
        </Menu>
      </Popover>
    </Rac.MenuTrigger>
  );
}

Installation

npx shadcn@latest add @oui/oui-menu-demo-checkboxes

Usage

import { OuiMenuDemoCheckboxes } from "@/components/oui-menu-demo-checkboxes"
<OuiMenuDemoCheckboxes />