# V sheet 12

> User Profile Viewer

A shadcn/ui block from the [@cnippet](https://ui.cnippet.dev/) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/cnippet/v-sheet-12).

- Page, with a live preview: https://shadcn.exchange/r/cnippet/v-sheet-12
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/cnippet/v-sheet-12-light-8d8c36357cd6d3ef.png
- Registry item: https://ui.cnippet.dev/r/v-sheet-12.json
- Categories: sheet
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://ui.cnippet.dev/r/v-sheet-12.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- Registry items: `@cnippet/sheet`

## Files

### `registry/default/variants/v-sheet-12.tsx`

```tsx
import { BoxIcon, CircuitBoardIcon, GlobeIcon, LinkIcon } from "lucide-react";
import {
  Avatar,
  AvatarFallback,
  AvatarImage,
} from "@/registry/default/ui/avatar";
import { Badge } from "@/registry/default/ui/badge";
import { Button } from "@/registry/default/ui/button";
import { Separator } from "@/registry/default/ui/separator";
import {
  Sheet,
  SheetClose,
  SheetPanel,
  SheetPopup,
  SheetTrigger,
} from "@/registry/default/ui/sheet";

const stats = [
  { label: "Repos", value: "42" },
  { label: "Followers", value: "1.2k" },
  { label: "Stars", value: "8.4k" },
];

const links = [
  { Icon: GlobeIcon, label: "example.com" },
  { Icon: BoxIcon, label: "@margaret_dev" },
  { Icon: CircuitBoardIcon, label: "margaret-welsh" },
];

export default function Particle() {
  return (
    <Sheet>
      <SheetTrigger render={<Button variant="outline" />}>
        <LinkIcon aria-hidden="true" />
        View Profile
      </SheetTrigger>
      <SheetPopup>
        <SheetPanel className="space-y-5">
          <div className="flex items-start gap-4 pt-2">
            <Avatar className="size-16">
              <AvatarImage
                alt="Margaret Welsh"
                src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=128&h=128&dpr=2&q=80"
              />
              <AvatarFallback>MW</AvatarFallback>
            </Avatar>
            <div className="flex-1">
              <p className="font-semibold">Margaret Welsh</p>
              <p className="text-muted-foreground text-sm">@margaret-welsh</p>
              <div className="mt-2 flex flex-wrap gap-1.5">
                <Badge variant="secondary">Design Engineer</Badge>
                <Badge variant="outline">Open Source</Badge>
              </div>
            </div>
          </div>

          <p className="text-muted-foreground text-sm leading-relaxed">
            Building design systems and component libraries. Passionate about
            accessibility and developer experience. Previously at Vercel.
          </p>

          <Separator />

          <div className="flex items-center justify-around text-center">
            {stats.map(({ label, value }) => (
              <div key={label}>
                <p className="font-semibold">{value}</p>
                <p className="text-muted-foreground text-xs">{label}</p>
              </div>
            ))}
          </div>

          <Separator />

          <div className="space-y-2">
            {links.map(({ Icon, label }) => (
              <div
                className="flex items-center gap-2 text-muted-foreground text-sm"
                key={label}
              >
                <Icon aria-hidden="true" className="size-3.5 shrink-0" />
                <span>{label}</span>
              </div>
            ))}
          </div>
        </SheetPanel>
        <div className="border-t p-4">
          <div className="flex gap-2">
            <Button className="flex-1">Follow</Button>
            <SheetClose
              render={<Button className="flex-1" variant="outline" />}
            >
              Close
            </SheetClose>
          </div>
        </div>
      </SheetPopup>
    </Sheet>
  );
}
```
