# Checkbox A single checkbox with a label. The label is the `label` attribute or the block body, and the box is interactive — readers can toggle it. Add `defaultChecked` to start it ticked, or `indeterminate` for the mixed state. Use it as `{% checkbox %}` in Markdown, or call it from Python logic (loops, snippets) via `component('aardvark', 'checkbox', …)`. ## Label and default state The label comes from the `label` attribute or the block body. Add `defaultChecked` to start the box ticked.
Source: Markdown ```aardvark {% checkbox label='Accept the terms' %} {% checkbox defaultChecked=true color='green' %}Subscribe to updates{% endCheckbox %} ``` Source: Python ```python component('aardvark', 'checkbox', label='Accept the terms') component('aardvark', 'checkbox', defaultChecked=True, color='green', children='Subscribe to updates') ``` ## Colors and sizes `color` is any theme color for the checked fill; `size` is `xs`–`xl`.
Source: Markdown ```aardvark {% checkbox label='blue' defaultChecked=true %} {% checkbox label='grape' color='grape' defaultChecked=true %} {% checkbox label='large' size='lg' defaultChecked=true %} ``` Source: Python ```python component('aardvark', 'checkbox', label='blue', defaultChecked=True) component('aardvark', 'checkbox', label='grape', color='grape', defaultChecked=True) component('aardvark', 'checkbox', label='large', size='lg', defaultChecked=True) ``` ## Label position, indeterminate, and disabled `labelPosition='left'` puts the label before the box; `indeterminate` shows the mixed/partial state; `disabled` makes it non-interactive.
Source: Markdown ```aardvark {% checkbox label='Label on the left' labelPosition='left' defaultChecked=true %} {% checkbox label='Indeterminate' indeterminate=true %} {% checkbox label='Disabled' disabled=true defaultChecked=true %} ``` Source: Python ```python component('aardvark', 'checkbox', label='Label on the left', labelPosition='left', defaultChecked=True) component('aardvark', 'checkbox', label='Indeterminate', indeterminate=True) component('aardvark', 'checkbox', label='Disabled', disabled=True, defaultChecked=True) ``` ## Radius, icon color, and helper text `radius` rounds the corners; `iconColor` colors the check mark itself; `description` and `error` add helper text below the label.
Source: Markdown ```aardvark {% checkbox label='Rounded' radius='xl' defaultChecked=true %} {% checkbox label='Custom check color' iconColor='yellow' color='dark' defaultChecked=true %} {% checkbox label='With a description' description='We only email about outages.' defaultChecked=true %} {% checkbox label='With an error' error='You must accept to continue.' %} ``` Source: Python ```python component('aardvark', 'checkbox', label='Rounded', radius='xl', defaultChecked=True) component('aardvark', 'checkbox', label='Custom check color', iconColor='yellow', color='dark', defaultChecked=True) component('aardvark', 'checkbox', label='With a description', description='We only email about outages.', defaultChecked=True) component('aardvark', 'checkbox', label='With an error', error='You must accept to continue.') ``` ## With other components Pair a checkbox with surrounding text and a [button](/components/buttons/button/) to build a small consent row. Please review and confirm before continuing. Continue
Source: Markdown ```aardvark Please review and confirm before continuing. {% checkbox label='I have read the privacy policy' defaultChecked=true %} {% button %}Continue{% endButton %} ``` Source: Python ```python component('aardvark', 'checkbox', label='I have read the privacy policy', defaultChecked=True) component('aardvark', 'button', children='Continue') ``` ## Attributes Omit any attribute to take its Mantine default. | Attribute | Valid values | Description | | --- | --- | --- | | `label` | string | The label, when not using the block body. Plain text — Markdown (e.g. `**bold**`) is not rendered. | | `defaultChecked` | bare flag (`true`) | Start the box ticked. It stays interactive — the reader can toggle it. | | `indeterminate` | bare flag (`true`) | Show the mixed/partial state (a dash instead of a check). | | `disabled` | bare flag (`true`) | Render non-interactive. | | `color` | theme color name (`blue`, `green`, `grape`, …) | Fill color when checked. | | `size` | `xs`, `sm`, `md`, `lg`, `xl` | Overall size. | | `radius` | `xs`, `sm`, `md`, `lg`, `xl` | Corner rounding of the box. | | `labelPosition` | `right` (default), `left` | Which side of the box the label sits on. | | `iconColor` | theme color name | Color of the check mark itself. | | `description` | string | Helper text shown below the label. | | `error` | string | Error text shown below the label (also marks the box invalid). | | `autoContrast` | bare flag (`true`) | Auto-pick a readable check-mark color against `color`. | | `attr` | dict (`attr={…}`) | Raw HTML attributes (e.g. `onchange`) applied to the rendered root. | ## CSS Selectors Target a `{% checkbox %}` from your own CSS with the island data attribute or the Mantine Styles API part classes: ```css /* Every Checkbox instance on the page */ [data-aardvark-island="Checkbox"] { } /* Mantine Styles API parts */ .mantine-Checkbox-root { } .mantine-Checkbox-input { } .mantine-Checkbox-label { } ``` ## Injecting Attributes Pass `attr={…}` to forward raw HTML attributes — including inline event handlers — straight onto the rendered element. Here it is wired to `onchange`, so toggling it logs its checked state to the console and alerts it:
Source: Markdown ```aardvark {% checkbox label='Accept the terms' attr={'onchange': ''' const value = this.checked; console.log('attr demo value:', value); alert(value); '''} %} ``` Source: Python ```python component('aardvark', 'checkbox', label='Accept the terms', attr={'onchange': ''' const value = this.checked; console.log('attr demo value:', value); alert(value); '''}) ```