Snippet

Snippet displays code with a header toolbar and copy action.

Source
Theme Source
pnpm dlx dreamy add snippet
pnpm dlx dreamy add --all
<Snippet.Root>
	<Snippet.Header />
	<Snippet.Body>pnpm dlx dreamy add --all</Snippet.Body>
</Snippet.Root>

Place any controls between the icon and copy button via Snippet.Header children. Package manager tabs, labels, or custom actions are entirely up to you.

import { Button, Snippet } from "@dreamy-ui/react";
import { useState } from "react";
 
const commands = {
	npm: "npx dreamy init",
	pnpm: "pnpm dlx dreamy init",
	yarn: "yarn dlx dreamy init",
	bun: "bunx dreamy init",
} as const;
 
function InstallSnippet() {
	const [pm, setPm] = useState<keyof typeof commands>("pnpm");
	const command = commands[pm];
 
	return (
		<Snippet.Root>
			<Snippet.Header>
				{(Object.keys(commands) as Array<keyof typeof commands>).map((name) => (
					<Button
						key={name}
						variant="link"
						size="sm"
						color={pm === name ? "fg" : "fg.medium"}
						onClick={() => setPm(name)}
					>
						{name}
					</Button>
				))}
			</Snippet.Header>
			<Snippet.Body codeString={command}>{command}</Snippet.Body>
		</Snippet.Root>
	);
}

Use the icon prop on Snippet.Header to change the leading icon.

import { LuLink } from "react-icons/lu";
 
<Snippet.Root>
	<Snippet.Header icon={LuLink} />
	<Snippet.Body>pnpm dlx dreamy add --all</Snippet.Body>
</Snippet.Root>

Hide the default copy button with hideCopyButton and use useSnippetContext to wire your own control.

import { Icon, IconButton, Snippet } from "@dreamy-ui/react";
import { useSnippetContext } from "@dreamy-ui/react";
import { LuCheck, LuCopy } from "react-icons/lu";
 
function CustomCopyButton() {
	const { copy, copied } = useSnippetContext();
 
	return (
		<IconButton
			aria-label="Copy"
			icon={<Icon as={copied ? LuCheck : LuCopy} boxSize="4" />}
			onClick={() => copy()}
			variant="link"
		/>
	);
}
 
<Snippet.Root>
	<Snippet.Header hideCopyButton>
		<CustomCopyButton />
	</Snippet.Header>
	<Snippet.Body>pnpm dlx dreamy add --all</Snippet.Body>
</Snippet.Root>
pnpm dlx dreamy add --all
pnpm dlx dreamy add --all
pnpm dlx dreamy add --all
<Snippet.Root size="sm">
	<Snippet.Header />
	<Snippet.Body>pnpm dlx dreamy add --all</Snippet.Body>
</Snippet.Root>