Components

Snippet

new

An install command with package-manager tabs and a copy button.

pnpm dlx shadcn@latest add @blank/snippet

Installation

npx shadcn@latest add @blank/snippet

Usage

import {
  Snippet,
  SnippetCopyButton,
  SnippetHeader,
  SnippetTabsContent,
  SnippetTabsList,
  SnippetTabsTrigger,
} from "@/components/ui/snippet"
<Snippet defaultValue="pnpm">
  <SnippetHeader>
    <SnippetTabsList>
      <SnippetTabsTrigger value="pnpm">pnpm</SnippetTabsTrigger>
      <SnippetTabsTrigger value="npm">npm</SnippetTabsTrigger>
    </SnippetTabsList>
    <SnippetCopyButton />
  </SnippetHeader>
  <SnippetTabsContent value="pnpm">pnpm add motion</SnippetTabsContent>
  <SnippetTabsContent value="npm">npm install motion</SnippetTabsContent>
</Snippet>

SnippetCopyButton copies the command in the active tab, so one button serves every tab and the command is written once. Pass value to copy something else.

Snippet is for one-line commands. For multi-line source with highlighting, use Code Block.

Examples

One choice for every snippet

Snippet is a Radix Tabs root. Control value to keep every snippet on a page on the reader's package manager.

pnpm dlx shadcn@latest init
pnpm dlx shadcn@latest add @blank/button @blank/field

API Reference

Snippet takes the Tabs root props: value, defaultValue, onValueChange. SnippetTabsTrigger and SnippetTabsContent take value.

SnippetCopyButton

PropTypeDefault
valuestringthe active command
timeoutnumber (ms)2000
onCopy(value: string) => void—
onError(error: unknown) => void—
labelstring"Copy command"

Everything else is a CopyButton prop, so the copy feedback matches every other copy control.