Icon Button

About this component

Icon Button

An accessible icon button with a required label, three sizes, and circle or square shape.

Usage

The import and the props worth knowing about, in one place.

import { Button4 } from "@/components/beste/component/button4";
import { Play } from "lucide-react";
import Link from "next/link";

// Icon-only: label is required and becomes the accessible name.
<Button4 label="Play showreel" icon={Play} onClick={() => console.log("play showreel")} />

// Compose the link with the render prop: your Link becomes the rendered
// element and the button content stays as its children.
<Button4
  label="Open on GitHub"
  tone="dark"    // "neutral" (default) | "dark" | "primary"
  size="lg"      // "sm" | "md" (default) | "lg"
  rounded="md"   // "full" (default) | "md"
  render={<Link href="https://github.com/beste" />}
/>

Props

Read from the component's own type, so this cannot drift from what it accepts.

PropTypeDefaultDescription
label*string—Accessible name, required, since the button shows only an icon
asChildboolean—Compose the rendered element shadcn-style (radix asChild): your element (e.g. a router Link) becomes the root and the button content is injected as its children. Pass the element without children of its own.
childrenReact.ReactElement—The element to render when `asChild` is set (e.g. your framework's Link)
iconLucideIcon—The icon (defaults to ArrowUpRight)
hrefstring—Fallback link: renders a plain `<a>`. Prefer `asChild` with your framework's Link component for client-side navigation.
tone"neutral" | "dark" | "primary"—Surface tone: bordered background (default), solid dark, or primary
size"sm" | "md" | "lg"—Button size
rounded"full" | "md"—Circle (default) or rounded square
onClickReact.MouseEventHandler<HTMLButtonElement>—Click handler (used when there is no href and no asChild)
classNamestring—Additional classes merged onto the button

More Button components

View all Button