# V toolbar 7

> Basic toolbar

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

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

## Install

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

## Files

### `registry/default/variants/v-toolbar-7.tsx`

```tsx
"use client";

import {
  LayoutGridIcon,
  LayoutListIcon,
  SearchIcon,
  SlidersHorizontalIcon,
  SortAscIcon,
} from "lucide-react";
import { useState } from "react";
import { Button } from "@/registry/default/ui/button";
import {
  Select,
  SelectItem,
  SelectPopup,
  SelectTrigger,
  SelectValue,
} from "@/registry/default/ui/select";
import {
  ToggleGroup,
  ToggleGroupItem,
} from "@/registry/default/ui/toggle-group";
import {
  Toolbar,
  ToolbarButton,
  ToolbarGroup,
  ToolbarSeparator,
} from "@/registry/default/ui/toolbar";
import {
  Tooltip,
  TooltipContent,
  TooltipProvider,
  TooltipTrigger,
} from "@/registry/default/ui/tooltip";

const sortOptions = [
  { label: "Name A–Z", value: "name-asc" },
  { label: "Name Z–A", value: "name-desc" },
  { label: "Newest first", value: "date-desc" },
  { label: "Oldest first", value: "date-asc" },
];

export function Pattern() {
  const [view, setView] = useState("grid");

  return (
    <TooltipProvider>
      <Toolbar className="w-full max-w-lg flex-wrap gap-y-1">
        <ToolbarGroup>
          <div className="relative flex items-center">
            <SearchIcon className="absolute left-2 size-3.5 text-muted-foreground" />
            <input
              aria-label="Search files"
              className="h-7 w-40 rounded-md border bg-background pr-2 pl-7 text-xs outline-none placeholder:text-muted-foreground focus:ring-1 focus:ring-ring"
              placeholder="Search…"
            />
          </div>
        </ToolbarGroup>

        <ToolbarSeparator />

        <ToolbarGroup>
          <Select defaultValue="name-asc" items={sortOptions}>
            <ToolbarButton
              render={
                <SelectTrigger className="h-7 w-32 gap-1 text-xs">
                  <SortAscIcon className="size-3 shrink-0" />
                  <SelectValue />
                </SelectTrigger>
              }
            />
            <SelectPopup>
              {sortOptions.map(({ label, value }) => (
                <SelectItem key={value} value={value}>
                  {label}
                </SelectItem>
              ))}
            </SelectPopup>
          </Select>
        </ToolbarGroup>

        <ToolbarSeparator />

        <ToolbarGroup>
          <Tooltip>
            <TooltipTrigger
              render={
                <ToolbarButton
                  aria-label="Filter"
                  render={<Button size="icon" variant="ghost" />}
                >
                  <SlidersHorizontalIcon />
                </ToolbarButton>
              }
            />
            <TooltipContent>Filter</TooltipContent>
          </Tooltip>
        </ToolbarGroup>

        <ToolbarSeparator />

        <ToggleGroup
          className="border-none p-0"
          onValueChange={([v]) => v && setView(v)}
          value={[view]}
        >
          <Tooltip>
            <TooltipTrigger
              render={
                <ToolbarButton
                  aria-label="Grid view"
                  render={<ToggleGroupItem value="grid" />}
                >
                  <LayoutGridIcon />
                </ToolbarButton>
              }
            />
            <TooltipContent>Grid view</TooltipContent>
          </Tooltip>
          <Tooltip>
            <TooltipTrigger
              render={
                <ToolbarButton
                  aria-label="List view"
                  render={<ToggleGroupItem value="list" />}
                >
                  <LayoutListIcon />
                </ToolbarButton>
              }
            />
            <TooltipContent>List view</TooltipContent>
          </Tooltip>
        </ToggleGroup>
      </Toolbar>
    </TooltipProvider>
  );
}
```
