# Badge
A **built-in** tag for small labels — statuses, versions, counts, and tags. It ships with
aardvark, so a badge is a single tag with no setup. The label is the block body or a `text`
param. Use it as `{% badge %}` in Markdown, or call it from Python logic
(loops, snippets) via `component('aardvark', 'badge', …)`.
## Demonstrations
### Variants
Every Mantine badge variant — `filled` (the default), `light`, `outline`, `dot`,
`transparent`, `white`, and `default`:
filled light outline dot transparent white default
Source: Markdown
```aardvark
{% badge %}filled{% endBadge %}
{% badge variant='light' %}light{% endBadge %}
{% badge variant='outline' %}outline{% endBadge %}
{% badge variant='dot' %}dot{% endBadge %}
{% badge variant='transparent' %}transparent{% endBadge %}
{% badge variant='white' %}white{% endBadge %}
{% badge variant='default' %}default{% endBadge %}
```
Source: Python
```python
for v in ('filled', 'light', 'outline', 'dot', 'transparent', 'white', 'default'):
page.print(component('aardvark', 'badge', variant=v, children=v))
```
### Colors
`color` takes any theme color (`blue`, `green`, `grape`, …) or any CSS color:
green grape orange gray
Source: Markdown
```aardvark
{% badge color='green' %}green{% endBadge %}
{% badge color='grape' %}grape{% endBadge %}
{% badge color='orange' %}orange{% endBadge %}
{% badge color='gray' %}gray{% endBadge %}
```
Source: Python
```python
for c in ('green', 'grape', 'orange', 'gray'):
page.print(component('aardvark', 'badge', color=c, children=c))
```
### Sizes and radius
`size` and `radius` both take `xs`–`xl`:
xs sm md lg xl
Source: Markdown
```aardvark
{% badge size='xs' %}xs{% endBadge %}
{% badge size='sm' %}sm{% endBadge %}
{% badge size='md' %}md{% endBadge %}
{% badge size='lg' %}lg{% endBadge %}
{% badge size='xl' radius='xl' %}xl{% endBadge %}
```
Source: Python
```python
for s in ('xs', 'sm', 'md', 'lg', 'xl'):
page.print(component('aardvark', 'badge', size=s, children=s))
```
### Gradient
`variant='gradient'` paints the badge with a gradient; set any of `gradientFrom`,
`gradientTo`, and `gradientDeg` to control the endpoints and angle:
Pro
Source: Markdown
```aardvark
{% badge text='Pro' variant='gradient' gradientFrom='indigo' gradientTo='cyan' gradientDeg=90 %}
```
Source: Python
```python
component('aardvark', 'badge', text='Pro', variant='gradient',
gradientFrom='indigo', gradientTo='cyan', gradientDeg=90)
```
### Circle, sections, and full width
`circle` renders a round badge — good for a single character or count.
`leftSection`/`rightSection` take text shown before/after the label, and `fullWidth`
stretches the badge to its container:
9 Updates 2.0
full width
Source: Markdown
```aardvark
{% badge color='red' circle=true size='lg' %}9{% endBadge %}
{% badge variant='light' color='blue' rightSection='12' %}Updates{% endBadge %}
{% badge variant='light' color='teal' leftSection='v' %}2.0{% endBadge %}
{% badge fullWidth=true color='grape' %}full width{% endBadge %}
```
Source: Python
```python
component('aardvark', 'badge', color='red', circle=True, size='lg', children='9')
component('aardvark', 'badge', variant='light', color='blue', rightSection='12', children='Updates')
component('aardvark', 'badge', variant='light', color='teal', leftSection='v', children='2.0')
component('aardvark', 'badge', fullWidth=True, color='grape', children='full width')
```
## With other components
A badge sits naturally inside a heading, list, or another component — here it labels a
{% card %} title and rides alongside an {% icon %}:
Status: Stable
The latest build New ships today.
Source: Markdown
```aardvark
Status: {% icon "circle-check" color="green" %} {% badge color='green' variant='light' %}Stable{% endBadge %}
{% card title="Releases" %}
The latest build {% badge color='green' %}New{% endBadge %} ships today.
{% endCard %}
```
Source: Python
```python
body = "The latest build " + component('aardvark', 'badge', color='green', children='New') + " ships today."
page.print(component('aardvark', 'card', title='Releases', children=body))
```
## Attributes
| Attribute | Valid values | Description |
| --- | --- | --- |
| (body) / `text` | string | The label. Use the block body, or the `text` param when not using a body. |
| `variant` | `filled` (default), `light`, `outline`, `dot`, `transparent`, `white`, `default`, `gradient` | Visual style. |
| `color` | any theme color (`blue`, `green`, `grape`, …) or any CSS color | Badge color. |
| `size` | `xs`, `sm`, `md`, `lg`, `xl` | Badge size. |
| `radius` | `xs`, `sm`, `md`, `lg`, `xl` | Corner rounding. |
| `fullWidth` | bool flag (`true`/`false`) | Stretch to the container's width. Defaults to `false`. |
| `circle` | bool flag (`true`/`false`) | Render as a circle — good for a single character or count. Defaults to `false`. |
| `autoContrast` | bool flag (`true`/`false`) | Auto-pick a readable label color for the background. Defaults to `false`. |
| `leftSection` | string | Text shown before the label. |
| `rightSection` | string | Text shown after the label. |
| `gradientFrom` | any theme/CSS color | Gradient start color, used with `variant='gradient'`. |
| `gradientTo` | any theme/CSS color | Gradient end color, used with `variant='gradient'`. |
| `gradientDeg` | integer (degrees) | Gradient angle, used with `variant='gradient'`. |
## CSS Selectors
Target the rendered element through its island marker — `[data-aardvark-island="Badge"]` — or through the Mantine Styles API classes (`.mantine-Badge-root` and its inner parts):
```css
/* Every rendered Badge carries this island marker */
[data-aardvark-island="Badge"] { }
/* Mantine Styles API class on the root element */
.mantine-Badge-root { }
.mantine-Badge-label { }
.mantine-Badge-section { }
```
## Injecting Attributes
`attr={…}` forwards raw HTML attributes — including event handlers — straight onto the rendered element, so you can wire DOM behavior the tag does not expose. The handler can be a full multi-line script, not just one expression — this one logs the value to the console and shows it in an alert:
Stable
Source: Markdown
```aardvark
{% badge color='green' attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''} %}Stable{% endBadge %}
```
Source: Python
```python
component('aardvark', 'badge', color='green', children='Stable', attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''})
```