button-group-demo

PreviousNext
Docs
pureuiexample

Preview

Loading preview…
registry/pure-ui/examples/button-group/button-group-demo.tsx
"use client";

import { useState } from "react";
import {
  ArchiveIcon,
  ArrowLeftIcon,
  CalendarPlusIcon,
  ClockIcon,
  ListFilterPlusIcon,
  MailCheckIcon,
  MoreHorizontalIcon,
  TagIcon,
  Trash2Icon,
} from "lucide-react";

import {
  Menu,
  MenuGroup,
  MenuItem,
  MenuPopup,
  MenuRadioGroup,
  MenuRadioItem,
  MenuSeparator,
  MenuSub,
  MenuSubPopup,
  MenuSubTrigger,
  MenuTrigger,
} from "@/registry/pure-ui/ui/menu";

import { Button } from "@/registry/pure-ui/ui/button";
import { ButtonGroup } from "@/registry/pure-ui/ui/button-group";

export function ButtonGroupDemo() {
  const [label, setLabel] = useState("personal");

  return (
    <ButtonGroup>
      <ButtonGroup className="hidden sm:flex">
        <Button variant="outline" size="icon" aria-label="Go Back">
          <ArrowLeftIcon />
        </Button>
      </ButtonGroup>

      <ButtonGroup>
        <Button variant="outline">Archive</Button>
        <Button variant="outline">Report</Button>
      </ButtonGroup>

      <ButtonGroup>
        <Button variant="outline">Snooze</Button>

        <Menu>
          <MenuTrigger
            render={
              <Button variant="outline" size="icon" aria-label="More Options" />
            }
          >
            <MoreHorizontalIcon />
          </MenuTrigger>
          <MenuPopup align="end" className="w-52">
            <MenuGroup>
              <MenuItem>
                <MailCheckIcon />
                Mark as Read
              </MenuItem>
              <MenuItem>
                <ArchiveIcon />
                Archive
              </MenuItem>
            </MenuGroup>
            <MenuSeparator />
            <MenuGroup>
              <MenuItem>
                <ClockIcon />
                Snooze
              </MenuItem>
              <MenuItem>
                <CalendarPlusIcon />
                Add to Calendar
              </MenuItem>
              <MenuItem>
                <ListFilterPlusIcon />
                Add to List
              </MenuItem>
              <MenuSub>
                <MenuSubTrigger>
                  <TagIcon />
                  Label As...
                </MenuSubTrigger>
                <MenuSubPopup>
                  <MenuRadioGroup value={label} onValueChange={setLabel}>
                    <MenuRadioItem value="personal">Personal</MenuRadioItem>
                    <MenuRadioItem value="work">Work</MenuRadioItem>
                    <MenuRadioItem value="other">Other</MenuRadioItem>
                  </MenuRadioGroup>
                </MenuSubPopup>
              </MenuSub>
            </MenuGroup>
            <MenuSeparator />
            <MenuGroup>
              <MenuItem className="text-destructive hover:text-destructive">
                <Trash2Icon />
                Trash
              </MenuItem>
            </MenuGroup>
          </MenuPopup>
        </Menu>
      </ButtonGroup>
    </ButtonGroup>
  );
}

Installation

npx shadcn@latest add @pureui/button-group-demo

Usage

import { ButtonGroupDemo } from "@/components/button-group-demo"
<ButtonGroupDemo />