1. Base ComponentsRight caret
  2. Button

Base Components

Button

Displays a button or a component that looks like a button.

"use client";
 
import { Button } from "@/registry/default/buttons/base";
import { PlusIcon } from "lucide-react";
import { useState } from "react";
 
export function BaseButtonDemo() {
	const [count, setCount] = useState(0);
 
	return (
		<Button.Root onClick={() => setCount(count + 1)}>
			<Button.Icon render={<PlusIcon />} />
			Count: {count}
		</Button.Root>
	);
}

Installation

npm install @base-ui-components/react

Usage

import { Button } from "@base-ui-components/react";
import { PlusIcon } from "lucide-react";
<Button.Root>
  <Button.Icon render={<PlusIcon />} />
  Click me
</Button.Root>

Examples

Variants

import { Button } from "@/registry/default/buttons/base";
 
export function BaseButtonVariants() {
	return (
		<div className="flex gap-4">
			<Button.Root variant="filled">Filled</Button.Root>
			<Button.Root variant="stroke">Stroke</Button.Root>
			<Button.Root variant="lighter">Lighter</Button.Root>
			<Button.Root variant="ghost">Ghost</Button.Root>
		</div>
	);
}

Colors

import { Button } from "@/registry/default/buttons/base";
 
export function BaseButtonColors() {
	return (
		<div className="flex gap-4">
			<Button.Root color="primary">Primary</Button.Root>
			<Button.Root color="default">Default</Button.Root>
			<Button.Root color="success">Success</Button.Root>
			<Button.Root color="warning">Warning</Button.Root>
			<Button.Root color="error">Error</Button.Root>
		</div>
	);
}

Sizes

import { Button } from "@/registry/default/buttons/base";
 
export function BaseButtonSizes() {
	return (
		<div className="flex gap-4">
			<Button.Root size="sm">Small</Button.Root>
			<Button.Root size="md">Medium</Button.Root>
			<Button.Root size="lg">Large</Button.Root>
		</div>
	);
}

Icons

import { Button } from "@/registry/default/buttons/base";
import { PlusIcon } from "lucide-react";
 
export function BaseButtonIcons() {
	return (
		<Button.Root>
			<Button.Icon render={<PlusIcon />} />
			Primary
			<Button.Icon render={<PlusIcon />} />
		</Button.Root>
	);
}

Composition

import { Button } from "@/registry/default/buttons/base";
import Link from "next/link";
 
export function BaseButtonComposition() {
	return <Button.Root render={<Link href="/" />}>I'm a Link</Button.Root>;
}
Copyright © 2025 Tailwind Labs Inc.·Trademark Policy