# V frame 10

> Basic frame

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

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

## Install

```bash
npx shadcn@latest add https://ui.cnippet.dev/r/v-frame-10.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/frame`

## Files

### `registry/default/variants/v-frame-10.tsx`

```tsx
"use client";

import { useState } from "react";
import { Button } from "@/registry/default/ui/button";
import {
  Frame,
  FrameDescription,
  FrameFooter,
  FrameHeader,
  FramePanel,
  FrameTitle,
} from "@/registry/default/ui/frame";

export function Pattern() {
  const [confirmed, setConfirmed] = useState(false);

  if (confirmed) {
    return (
      <Frame className="w-full max-w-sm">
        <FramePanel className="flex flex-col items-center gap-2 py-6 text-center">
          <span className="text-2xl">✓</span>
          <p className="font-medium text-sm">Account deleted</p>
          <p className="text-muted-foreground text-xs">
            Your data has been permanently removed.
          </p>
        </FramePanel>
      </Frame>
    );
  }

  return (
    <Frame className="w-full max-w-sm border-destructive/40">
      <FrameHeader>
        <FrameTitle className="text-destructive">Delete account</FrameTitle>
        <FrameDescription>
          This action is permanent and cannot be undone. All your data will be
          removed immediately.
        </FrameDescription>
      </FrameHeader>
      <FramePanel>
        <p className="text-muted-foreground text-sm">
          Type <span className="font-semibold text-foreground">DELETE</span> in
          the field below to confirm.
        </p>
        <input
          className="mt-3 w-full rounded-md border bg-background px-3 py-2 text-sm outline-none placeholder:text-muted-foreground focus:ring-1 focus:ring-destructive"
          placeholder="DELETE"
          type="text"
        />
      </FramePanel>
      <FrameFooter className="flex justify-end gap-2">
        <Button type="button" variant="outline">
          Cancel
        </Button>
        <Button
          onClick={() => setConfirmed(true)}
          type="button"
          variant="destructive"
        >
          Delete account
        </Button>
      </FrameFooter>
    </Frame>
  );
}
```
