# V scroll area 14

> Activity Log

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

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

## Install

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

## Files

### `registry/default/variants/v-scroll-area-14.tsx`

```tsx
import { ScrollArea } from "@/registry/default/ui/scroll-area";

const logs = [
  {
    id: 1,
    level: "info",
    message: "Server started on port 3000",
    time: "10:00:01",
  },
  {
    id: 2,
    level: "info",
    message: "Connected to database successfully",
    time: "10:00:02",
  },
  {
    id: 3,
    level: "warn",
    message: "Deprecated API endpoint accessed: /api/v1/users",
    time: "10:00:15",
  },
  {
    id: 4,
    level: "info",
    message: "GET /api/health → 200 (12ms)",
    time: "10:00:23",
  },
  {
    id: 5,
    level: "error",
    message: "Failed to send email: SMTP connection refused",
    time: "10:00:31",
  },
  {
    id: 6,
    level: "info",
    message: "Cache cleared for key: user:sessions",
    time: "10:00:44",
  },
  {
    id: 7,
    level: "warn",
    message: "Rate limit threshold reached for IP 192.168.1.42",
    time: "10:01:02",
  },
  {
    id: 8,
    level: "info",
    message: "POST /api/auth/login → 200 (38ms)",
    time: "10:01:09",
  },
  {
    id: 9,
    level: "error",
    message: "Unhandled promise rejection in worker thread",
    time: "10:01:22",
  },
  {
    id: 10,
    level: "info",
    message: "Scheduled job 'cleanup' completed in 142ms",
    time: "10:01:30",
  },
];

const levelClass: Record<string, string> = {
  error: "text-red-500",
  info: "text-muted-foreground",
  warn: "text-yellow-500",
};

export default function Particle() {
  return (
    <ScrollArea className="h-64 w-full max-w-xl rounded-lg border bg-muted/30">
      <div className="flex flex-col gap-0.5 p-3 font-mono text-xs">
        {logs.map(({ id, level, message, time }) => (
          <div className="flex items-start gap-3" key={id}>
            <span className="shrink-0 text-muted-foreground">{time}</span>
            <span
              className={`w-10 shrink-0 font-semibold uppercase ${levelClass[level]}`}
            >
              {level}
            </span>
            <span
              className={
                levelClass[level] !== "text-muted-foreground"
                  ? levelClass[level]
                  : ""
              }
            >
              {message}
            </span>
          </div>
        ))}
      </div>
    </ScrollArea>
  );
}
```
