Icon button
Compact icon actions. 6 variants × 3 sizes × 5 states.
import { IconButton } from "@/components/ui/icon-button";
import { Search } from "@/components/ui/icons";
export default function Example() {
return <IconButton aria-label="Search the menu" variant="outline"><Search /></IconButton>;
}
Installation
$ npx uix-ui@latest add icon-buttonThis copies the file into components/ui/icon-button.tsx in your project. npx shadcn@latest add @uix/icon-button works too.
Usage
import { IconButton } from "@/components/ui/icon-button";
<IconButton aria-label="Search the menu" variant="outline"><Search /></IconButton>
Examples
Variants
import { IconButton } from "@/components/ui/icon-button";
import { Plus, Star, User, Zap } from "@/components/ui/icons";
export default function Example() {
return (
<div className="flex flex-wrap items-center gap-3">
<IconButton aria-label="Add" variant="primary"><Plus /></IconButton>
<IconButton aria-label="Favourite" variant="soft"><Star /></IconButton>
<IconButton aria-label="Account" variant="ghost"><User /></IconButton>
<IconButton aria-label="Notifications, new" variant="outline" badgeDot><Zap /></IconButton>
</div>
);
}
Props
| Prop | Type | Default | Description |
|---|---|---|---|
variant | primary | secondary | soft | outline | ghost | destructive | "primary" | |
size | sm | md | lg | "md" | |
"aria-label" | string | – | Icon-only buttons need an accessible name. |
badgeDot | boolean | false | Notification dot on the corner. |
Everything else is passed to the root element, so className, aria-* and event handlers work as usual.
Dependencies
Installed for you by the CLI.
class-variance-authorityclsxtailwind-merge
lib/utils.ts