Button
Filled
fill
is default variant for button.
Use color
prop to change the button color.
<template>
<div class="flex flex-wrap gap-4">
<ABtn>
Primary
</ABtn>
<ABtn color="success">
Success
</ABtn>
<ABtn color="info">
Info
</ABtn>
<ABtn color="warning">
Warning
</ABtn>
<ABtn color="danger">
Danger
</ABtn>
</div>
</template>
Outlined
You can use variant="outline"
to create outlined button.
Customize border-style
of outlined buttons
To create outlined button with different border style just add relevant class.
e.g. To create outline button with dashed border, add border-dashed
class.
<template>
<div class="flex flex-wrap gap-4">
<ABtn variant="outline">
Primary
</ABtn>
<ABtn
color="success"
variant="outline"
>
Success
</ABtn>
<ABtn
color="info"
variant="outline"
>
Info
</ABtn>
<ABtn
color="warning"
variant="outline"
>
Warning
</ABtn>
<ABtn
color="danger"
variant="outline"
>
Danger
</ABtn>
</div>
</template>
Light
You can use variant="light"
to create button with light background (Background with opacity).
<template>
<div class="flex flex-wrap gap-4">
<ABtn variant="light">
Primary
</ABtn>
<ABtn
color="success"
variant="light"
>
Success
</ABtn>
<ABtn
color="info"
variant="light"
>
Info
</ABtn>
<ABtn
color="warning"
variant="light"
>
Warning
</ABtn>
<ABtn
color="danger"
variant="light"
>
Danger
</ABtn>
</div>
</template>
Text
Use variant="text"
to create a text button.
<template>
<div class="flex flex-wrap gap-4">
<ABtn variant="text">
Primary
</ABtn>
<ABtn
variant="text"
color="success"
>
Success
</ABtn>
<ABtn
variant="text"
color="info"
>
Info
</ABtn>
<ABtn
variant="text"
color="warning"
>
Warning
</ABtn>
<ABtn
variant="text"
color="danger"
>
Danger
</ABtn>
</div>
</template>
Icons
You can use icon
prop to render icon in button.
Use append-icon
prop to render icon after default slot.
You can also use default slot to render icon.
<template>
<ABtn>
<i class="i-bx-star" />
<span>Primary</span>
</ABtn>
</template>
<template>
<!-- 👉 Star -->
<div class="flex gap-x-4 flex-wrap gap-y-2">
<ABtn icon="i-bx-star">
<span>Primary</span>
</ABtn>
<ABtn
variant="outline"
icon="i-bx-star"
>
<span>Primary</span>
</ABtn>
<ABtn
variant="light"
icon="i-bx-star"
>
<span>Primary</span>
</ABtn>
<ABtn
variant="text"
icon="i-bx-star"
>
<span>Primary</span>
</ABtn>
</div>
<!-- 👉 Dollar Circle -->
<div class="mt-8 flex gap-x-4 flex-wrap gap-y-2">
<ABtn
color="success"
icon="i-bx-dollar-circle"
>
<span>Success</span>
</ABtn>
<ABtn
color="success"
variant="outline"
icon="i-bx-dollar-circle"
>
<span>Success</span>
</ABtn>
<ABtn
color="success"
variant="light"
icon="i-bx-dollar-circle"
>
<span>Success</span>
</ABtn>
<ABtn
color="success"
variant="text"
icon="i-bx-dollar-circle"
>
<span>Success</span>
</ABtn>
</div>
<!-- 👉 Heart -->
<div class="mt-8 flex gap-x-4 flex-wrap gap-y-2">
<ABtn
color="danger"
icon="i-bx-heart"
>
<span>Danger</span>
</ABtn>
<ABtn
color="danger"
variant="outline"
icon="i-bx-heart"
>
<span>Danger</span>
</ABtn>
<ABtn
color="danger"
variant="light"
icon="i-bx-heart"
>
<span>Danger</span>
</ABtn>
<ABtn
color="danger"
variant="text"
icon="i-bx-heart"
>
<span>Danger</span>
</ABtn>
</div>
</template>
Block
Add w-full
class to make block button.
<template>
<div class="grid-row grid-cols-2">
<ABtn class="w-full">
Primary
</ABtn>
<ABtn
class="w-full"
color="success"
>
Success
</ABtn>
</div>
</template>
Icon Only
Use icon-only
prop to render icon with icon only button.
<template>
<div class="flex flex-wrap gap-4">
<ABtn
icon-only
icon="i-bx-trophy"
/>
<ABtn
icon="i-bx-trophy"
icon-only
variant="outline"
/>
<ABtn
icon="i-bx-trophy"
icon-only
variant="light"
/>
<ABtn
icon="i-bx-trophy"
icon-only
variant="text"
/>
</div>
</template>
Sizing
You can use font-size utility to adjust the size of button.
TIP
If you have container with bigger font size and need default sized button use text-base
class.
<template>
<div class="flex flex-wrap gap-4">
<!-- 👉 xs -->
<ABtn class="text-xs">
text-xs
</ABtn>
<!-- 👉 Default -->
<ABtn>Default</ABtn>
<!-- 👉 xl -->
<ABtn class="text-xl">
text-xl
</ABtn>
<!-- 👉 2xl -->
<ABtn class="text-2xl">
text-2xl
</ABtn>
</div>
</template>
Roundness
You can adjust button roundness using border-radius utilities.
<template>
<div class="flex flex-wrap gap-4">
<ABtn class="rounded-0">
rounded-0
</ABtn>
<ABtn
color="success"
class="rounded"
>
rounded
</ABtn>
<ABtn
color="info"
class="rounded-lg"
>
rounded-lg
</ABtn>
<ABtn
color="warning"
class="rounded-xl"
>
rounded-xl
</ABtn>
<ABtn
color="danger"
class="rounded-2xl"
>
rounded-2xl
</ABtn>
</div>
</template>
Loading
You can use the loading
prop to inform about a background process or asynchronous operation. This property will display a ALoading
component (by default) instead of the icon and/or label of the button.
<script lang="ts" setup>
import { ref } from 'vue'
const loading = ref(false)
const loadingIcon = ref(false)
const iconOnlyLoading = ref(false)
</script>
<template>
<div class="flex gap-4">
<ABtn
:loading="loading"
@click="loading = !loading"
>
Click to load
</ABtn>
<ABtn @click="iconOnlyLoading = !iconOnlyLoading">
<ALoadingIcon
icon="i-bx-cloud-upload"
:loading="iconOnlyLoading"
/>
<span>Upload</span>
</ABtn>
<ABtn
:loading="loadingIcon"
icon-only
icon="i-bx-heart"
@click="loadingIcon = !loadingIcon"
/>
</div>
</template>
API
Set component in disabled state
Set button loading state.
Although, loading
prop accepts boolean value, we set default value to undefined
to indicate button won't ever use loading (show/hide) and won't render ASpinner
component.
However, if loading
prop is set to any boolean value (false
/true
) it will always render ASpinner
component.
Mark button as icon only button to apply square styling
Render icon before button text
Append icon after button text
Default slot for rendering button content