speed-dial-side-demo

PreviousNext
Docs
diceuiexample

Preview

Loading preview…
examples/speed-dial-side-demo.tsx
"use client";

import { Copy, Heart, Plus, Share2 } from "lucide-react";
import { toast } from "sonner";
import {
  SpeedDial,
  SpeedDialAction,
  SpeedDialContent,
  SpeedDialItem,
  SpeedDialLabel,
  SpeedDialTrigger,
} from "@/registry/default/ui/speed-dial";

const sides = ["top", "right", "bottom", "left"] as const;

export default function SpeedDialSideDemo() {
  return (
    <div className="grid grid-cols-2 gap-24">
      {sides.map((side) => (
        <div key={side} className="flex flex-col items-center gap-2">
          <span className="text-muted-foreground text-sm capitalize">
            {side}
          </span>
          <SpeedDial side={side}>
            <SpeedDialTrigger className="transition-transform duration-200 ease-out data-[state=closed]:rotate-0 data-[state=open]:rotate-135">
              <Plus />
            </SpeedDialTrigger>
            <SpeedDialContent className="bg-background">
              <SpeedDialItem>
                <SpeedDialLabel className="sr-only">Share</SpeedDialLabel>
                <SpeedDialAction onSelect={() => toast.success("Shared")}>
                  <Share2 />
                </SpeedDialAction>
              </SpeedDialItem>
              <SpeedDialItem>
                <SpeedDialLabel className="sr-only">Copy</SpeedDialLabel>
                <SpeedDialAction onSelect={() => toast.success("Copied")}>
                  <Copy />
                </SpeedDialAction>
              </SpeedDialItem>
              <SpeedDialItem>
                <SpeedDialLabel className="sr-only">Like</SpeedDialLabel>
                <SpeedDialAction onSelect={() => toast.success("Liked")}>
                  <Heart />
                </SpeedDialAction>
              </SpeedDialItem>
            </SpeedDialContent>
          </SpeedDial>
        </div>
      ))}
    </div>
  );
}

Installation

npx shadcn@latest add @diceui/speed-dial-side-demo

Usage

import { SpeedDialSideDemo } from "@/components/speed-dial-side-demo"
<SpeedDialSideDemo />