Button

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

<div class="flex flex-wrap items-center gap-2 md:flex-row">
    <twig:ui:Button>Solid</twig:ui:Button>
    <twig:ui:Button variant="soft">Soft</twig:ui:Button>
    <twig:ui:Button variant="outline">Outline</twig:ui:Button>
    <twig:ui:Button variant="ghost">Ghost</twig:ui:Button>
    <twig:ui:Button variant="link">Link</twig:ui:Button>
    <twig:ui:Button color="danger">Danger</twig:ui:Button>
</div>

Usage

<twig:ui:Button variant="outline">
    Button
</twig:ui:Button>

Examples

Solid

<div class="flex flex-wrap gap-2">
    <twig:ui:Button>Neutral</twig:ui:Button>
    <twig:ui:Button color="red">Red</twig:ui:Button>
    <twig:ui:Button color="orange">Orange</twig:ui:Button>
    <twig:ui:Button color="amber">Amber</twig:ui:Button>
    <twig:ui:Button color="yellow">Yellow</twig:ui:Button>
    <twig:ui:Button color="lime">Lime</twig:ui:Button>
    <twig:ui:Button color="green">Green</twig:ui:Button>
    <twig:ui:Button color="emerald">Emerald</twig:ui:Button>
    <twig:ui:Button color="teal">Teal</twig:ui:Button>
    <twig:ui:Button color="cyan">Cyan</twig:ui:Button>
    <twig:ui:Button color="sky">Sky</twig:ui:Button>
    <twig:ui:Button color="blue">Blue</twig:ui:Button>
    <twig:ui:Button color="indigo">Indigo</twig:ui:Button>
    <twig:ui:Button color="violet">Violet</twig:ui:Button>
    <twig:ui:Button color="purple">Purple</twig:ui:Button>
    <twig:ui:Button color="fuchsia">Fuchsia</twig:ui:Button>
    <twig:ui:Button color="pink">Pink</twig:ui:Button>
    <twig:ui:Button color="rose">Rose</twig:ui:Button>
</div>

Soft

<div class="flex flex-wrap gap-2">
    <twig:ui:Button variant="soft">Neutral</twig:ui:Button>
    <twig:ui:Button variant="soft" color="red">Red</twig:ui:Button>
    <twig:ui:Button variant="soft" color="orange">Orange</twig:ui:Button>
    <twig:ui:Button variant="soft" color="amber">Amber</twig:ui:Button>
    <twig:ui:Button variant="soft" color="yellow">Yellow</twig:ui:Button>
    <twig:ui:Button variant="soft" color="lime">Lime</twig:ui:Button>
    <twig:ui:Button variant="soft" color="green">Green</twig:ui:Button>
    <twig:ui:Button variant="soft" color="emerald">Emerald</twig:ui:Button>
    <twig:ui:Button variant="soft" color="teal">Teal</twig:ui:Button>
    <twig:ui:Button variant="soft" color="cyan">Cyan</twig:ui:Button>
    <twig:ui:Button variant="soft" color="sky">Sky</twig:ui:Button>
    <twig:ui:Button variant="soft" color="blue">Blue</twig:ui:Button>
    <twig:ui:Button variant="soft" color="indigo">Indigo</twig:ui:Button>
    <twig:ui:Button variant="soft" color="violet">Violet</twig:ui:Button>
    <twig:ui:Button variant="soft" color="purple">Purple</twig:ui:Button>
    <twig:ui:Button variant="soft" color="fuchsia">Fuchsia</twig:ui:Button>
    <twig:ui:Button variant="soft" color="pink">Pink</twig:ui:Button>
    <twig:ui:Button variant="soft" color="rose">Rose</twig:ui:Button>
</div>

Outline

<twig:ui:Button variant="outline">
    Outline
</twig:ui:Button>

Ghost

<twig:ui:Button variant="ghost">
    Ghost
</twig:ui:Button>
<twig:ui:Button variant="link">
    Link
</twig:ui:Button>

Danger

color="danger" is a shortcut for color="red".

<div class="flex flex-wrap items-center gap-2 md:flex-row">
    <twig:ui:Button color="danger">Danger</twig:ui:Button>
    <twig:ui:Button variant="soft" color="danger">Danger</twig:ui:Button>
</div>

Info

color="info" is a shortcut for color="blue".

<div class="flex flex-wrap items-center gap-2 md:flex-row">
    <twig:ui:Button color="info">Info</twig:ui:Button>
    <twig:ui:Button variant="soft" color="info">Info</twig:ui:Button>
</div>

Success

color="success" is a shortcut for color="green".

<div class="flex flex-wrap items-center gap-2 md:flex-row">
    <twig:ui:Button color="success">Success</twig:ui:Button>
    <twig:ui:Button variant="soft" color="success">Success</twig:ui:Button>
</div>

Warning

color="warning" is a shortcut for color="amber".

<div class="flex flex-wrap items-center gap-2 md:flex-row">
    <twig:ui:Button color="warning">Warning</twig:ui:Button>
    <twig:ui:Button variant="soft" color="warning">Warning</twig:ui:Button>
</div>

Size

Use the size prop to change the size of the button.

<div class="flex flex-col items-start gap-8 sm:flex-row">
    <div class="flex items-start gap-2">
        <twig:ui:Button size="xs" variant="outline">Extra Small</twig:ui:Button>
        <twig:ui:Button size="icon-xs" variant="outline" aria-label="Submit">
            <twig:ux:icon name="lucide:arrow-up-right" />
        </twig:ui:Button>
    </div>
    <div class="flex items-start gap-2">
        <twig:ui:Button size="sm" variant="outline">Small</twig:ui:Button>
        <twig:ui:Button size="icon-sm" variant="outline" aria-label="Submit">
            <twig:ux:icon name="lucide:arrow-up-right" />
        </twig:ui:Button>
    </div>
    <div class="flex items-start gap-2">
        <twig:ui:Button variant="outline">Default</twig:ui:Button>
        <twig:ui:Button size="icon" variant="outline" aria-label="Submit">
            <twig:ux:icon name="lucide:arrow-up-right" />
        </twig:ui:Button>
    </div>
    <div class="flex items-start gap-2">
        <twig:ui:Button size="lg" variant="outline">Large</twig:ui:Button>
        <twig:ui:Button size="icon-lg" variant="outline" aria-label="Submit">
            <twig:ux:icon name="lucide:arrow-up-right" />
        </twig:ui:Button>
    </div>
</div>

Icon

<twig:ui:Button variant="outline" size="icon">
    <twig:ux:icon name="lucide:circle-fading-arrow-up" />
</twig:ui:Button>

With Icon

Remember to add the data-icon="inline-start" or data-icon="inline-end" attribute to the icon for the correct spacing.

<div class="flex items-start gap-2">
    <twig:ui:Button variant="outline" size="sm">
        <twig:ux:icon name="lucide:git-branch" data-icon="inline-start" />
        New Branch
    </twig:ui:Button>
    <twig:ui:Button variant="outline" size="sm">
        New Branch
        <twig:ux:icon name="lucide:git-branch" data-icon="inline-end" />
    </twig:ui:Button>
</div>

Rounded

Use the rounded-full class to make the button rounded.

<twig:ui:Button variant="outline" size="icon" class="rounded-full">
    <twig:ux:icon name="lucide:arrow-up"/>
</twig:ui:Button>

Loading

Render a spinning icon inside the button to show a loading state. Remember to add the data-icon="inline-start" or data-icon="inline-end" attribute to the spinner for the correct spacing.

<div class="flex gap-2">
    <twig:ui:Button variant="outline" disabled>
        <twig:ux:icon name="lucide:loader-circle" class="animate-spin" data-icon="inline-start" />
        Generating
    </twig:ui:Button>
    <twig:ui:Button variant="soft" disabled>
        Downloading
        <twig:ux:icon name="lucide:loader-circle" class="animate-spin" data-icon="inline-end" />
    </twig:ui:Button>
</div>

You can use the as prop on Button to make another element look like a button. Here's an example of a link that looks like a button.

<twig:ui:Button as="a" href="#">
    Login
</twig:ui:Button>

RTL

To enable RTL support, set the dir="rtl" attribute on the root element.

<div class="flex flex-col gap-8">
    <div class="flex flex-wrap items-center gap-2 md:flex-row" dir="rtl">
        <twig:ui:Button variant="outline">زر</twig:ui:Button>
        <twig:ui:Button color="danger">حذف</twig:ui:Button>
        <twig:ui:Button variant="outline">
            إرسال
            <twig:ux:icon name="lucide:arrow-right" class="rtl:rotate-180" data-icon="inline-end" />
        </twig:ui:Button>
        <twig:ui:Button variant="outline" size="icon" aria-label="Add">
            <twig:ux:icon name="lucide:plus" />
        </twig:ui:Button>
        <twig:ui:Button variant="soft" disabled>
            <twig:ux:icon name="lucide:loader-circle" class="animate-spin" data-icon="inline-start" />
            جاري التحميل
        </twig:ui:Button>
    </div>
    <div class="flex flex-wrap items-center gap-2 md:flex-row" dir="rtl">
        <twig:ui:Button variant="outline">לחצן</twig:ui:Button>
        <twig:ui:Button color="danger">מחק</twig:ui:Button>
        <twig:ui:Button variant="outline">
            שלח
            <twig:ux:icon name="lucide:arrow-right" class="rtl:rotate-180" data-icon="inline-end" />
        </twig:ui:Button>
        <twig:ui:Button variant="outline" size="icon" aria-label="Add">
            <twig:ux:icon name="lucide:plus" />
        </twig:ui:Button>
        <twig:ui:Button variant="soft" disabled>
            <twig:ux:icon name="lucide:loader-circle" class="animate-spin" data-icon="inline-start" />
            טוען
        </twig:ui:Button>
    </div>
</div>

API Reference

<twig:ui:Button>

Prop Type Description
variant 'solid' | 'soft' | 'outline' | 'ghost' | 'link' The visual style variant. Defaults to solid
color string Any Tailwind color name, such as 'purple' or 'cyan', or a preset shortcut: 'danger', 'info', 'success', 'warning'. Only affects the solid and soft variants. Defaults to 'neutral'
size 'md' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg' The button size. Defaults to md
as string The HTML tag to render. Defaults to button
Block Description
content The button label and/or icon