IndiaCN UI

Button

Trigger actions with flexible styles, themes, sizes, and icon support.

Introduction

Buttons help users perform actions such as submitting forms, confirming choices, or navigating flows. The component supports multiple variants, semantic themes, icon placement, loading states, and icon-only buttons.

Installation

import { Button } from '@/components/ui/button';

Usage

<Button>Primary Action</Button>

Examples

Default

ButtonDefault
import { Button } from '@/components/ui/button';

export default function Component() {
  return <Button>Primary Action</Button>;
}

Variants

ButtonVariants
import { Button } from '@/components/ui/button';

export default function Component() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button>Filled</Button>
      <Button variant="outlined">Outlined</Button>
      <Button variant="tonal">Tonal</Button>
      <Button variant="text">Text</Button>
    </div>
  );
}

Themes

ButtonThemes
import { Button } from '@/components/ui/button';

export default function Component() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button theme="primary">Primary</Button>
      <Button theme="success">Success</Button>
      <Button theme="destructive">Destructive</Button>
    </div>
  );
}

Sizes

ButtonSizes
import { Button } from '@/components/ui/button';

export default function Component() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button size="sm">Small</Button>
      <Button size="md">Medium</Button>
      <Button size="lg">Large</Button>
    </div>
  );
}

With Icons

ButtonWithIcons
import { ArrowRight, Download, Search } from 'lucide-react';

import { Button } from '@/components/ui/button';

export default function Component() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button prefixIcon={<Search className="size-4" />}>Search</Button>
      <Button variant="outlined" suffixIcon={<ArrowRight className="size-4" />}>
        Continue
      </Button>
      <Button iconButton aria-label="Download">
        <Download className="size-4" />
      </Button>
    </div>
  );
}

Loading

ButtonLoading
import { Button } from '@/components/ui/button';

export default function Component() {
  return (
    <div className="flex flex-wrap items-center gap-3">
      <Button loading>Submitting</Button>
      <Button variant="outlined" disabled>
        Disabled
      </Button>
    </div>
  );
}

API Reference

Button

PropTypeDefaultDescription
variantfilled | outlined | tonal | textfilledVisual style of the button
themeprimary | success | destructiveprimaryColor theme
sizesm | md | lgmdButton size
loadingbooleanfalseShows a spinner and disables interaction
disabledbooleanfalseDisables the button
prefixIconReactNodeLeading icon
suffixIconReactNodeTrailing icon
iconButtonbooleanfalseRenders as icon-only button
asChildbooleanfalseRenders the button styles onto a child element
contentContainerClassNamestringExtra classes for the label wrapper

On this page