# Group `{% group %}` lays its children out in a **horizontal row** with a consistent gap — the everyday way to put buttons, badges, or chips side by side. It is a flex row: control where children sit on the main axis (`justify`), how they line up on the cross axis (`align`), the space between them (`gap`), whether they wrap (`wrap`), and whether they share the row width equally (`grow`). The block body is the content. Use it as `{% group %}` in Markdown, or call it from Python logic (loops, snippets) via `component('aardvark', 'group', …)`. ## Basic row With no options, children sit at the start of the row with the default `md` gap. One Two Three
Source: Markdown ```aardvark {% group %} {% badge %}One{% endBadge %} {% badge %}Two{% endBadge %} {% badge %}Three{% endBadge %} {% endGroup %} ``` Source: Python ```python component('aardvark', 'group', children=( component('aardvark', 'badge', children='One') + component('aardvark', 'badge', children='Two') + component('aardvark', 'badge', children='Three') )) ``` ## Justify (main axis) `justify` sets `justify-content` — where the children sit along the row. Common values are `flex-start` (default), `center`, `flex-end`, `space-between`, and `space-around`. One Two Three
Source: Markdown ```aardvark {% group justify='center' %} {% badge %}One{% endBadge %} {% badge %}Two{% endBadge %} {% badge %}Three{% endBadge %} {% endGroup %} ``` Source: Python ```python component('aardvark', 'group', justify='center', children=( component('aardvark', 'badge', children='One') + component('aardvark', 'badge', children='Two') + component('aardvark', 'badge', children='Three') )) ``` ## Align (cross axis) `align` sets `align-items` — how children line up across the row when they differ in height. Values include `center` (default), `flex-start`, `flex-end`, and `stretch`. xs lg xl
Source: Markdown ```aardvark {% group align='flex-end' %} {% badge size='xs' %}xs{% endBadge %} {% badge size='lg' %}lg{% endBadge %} {% badge size='xl' %}xl{% endBadge %} {% endGroup %} ``` Source: Python ```python component('aardvark', 'group', align='flex-end', children=( component('aardvark', 'badge', size='xs', children='xs') + component('aardvark', 'badge', size='lg', children='lg') + component('aardvark', 'badge', size='xl', children='xl') )) ``` ## Gap `gap` is the space between children — a Mantine size token (`xs`–`xl`) or any CSS value (`8px`, `2rem`). The default is `md`. One Two Three
Source: Markdown ```aardvark {% group gap='xl' %} {% badge %}One{% endBadge %} {% badge %}Two{% endBadge %} {% badge %}Three{% endBadge %} {% endGroup %} ``` Source: Python ```python component('aardvark', 'group', gap='xl', children=( component('aardvark', 'badge', children='One') + component('aardvark', 'badge', children='Two') + component('aardvark', 'badge', children='Three') )) ``` ## Wrap `wrap` sets `flex-wrap`. The default is `wrap` (children flow onto the next line when they run out of room); set `wrap='nowrap'` to force everything onto a single line. One Two Three Four
Source: Markdown ```aardvark {% group wrap='nowrap' %} {% badge %}One{% endBadge %} {% badge %}Two{% endBadge %} {% badge %}Three{% endBadge %} {% badge %}Four{% endBadge %} {% endGroup %} ``` Source: Python ```python component('aardvark', 'group', wrap='nowrap', children=( component('aardvark', 'badge', children='One') + component('aardvark', 'badge', children='Two') + component('aardvark', 'badge', children='Three') + component('aardvark', 'badge', children='Four') )) ``` ## Grow `grow` (a bare flag) makes each child share the row width equally. By default `preventGrowOverflow` is on, so each child reserves an equal slice and a wide child can't push the others around; set `preventGrowOverflow='false'` to let children size to their content. Left Middle Right
Source: Markdown ```aardvark {% group grow %} {% button text='Left' %} {% button text='Middle' %} {% button text='Right' %} {% endGroup %} ``` Source: Python ```python component('aardvark', 'group', grow=True, children=( component('aardvark', 'button', text='Left') + component('aardvark', 'button', text='Middle') + component('aardvark', 'button', text='Right') )) ``` ## With other components `group` composes with any other tag. Here it puts a [`button`](/components/buttons/button/) and two [`badge`](/components/data-display/badge/)s on one line, pushed apart with `justify='space-between'`. Deploy Ready v2
Source: Markdown ```aardvark {% group justify='space-between' align='center' %} {% button text='Deploy' %} {% group gap='xs' %} {% badge color='green' %}Ready{% endBadge %} {% badge color='blue' variant='light' %}v2{% endBadge %} {% endGroup %} {% endGroup %} ``` Source: Python ```python component('aardvark', 'group', justify='space-between', align='center', children=( component('aardvark', 'button', text='Deploy') + component('aardvark', 'group', gap='xs', children=( component('aardvark', 'badge', color='green', children='Ready') + component('aardvark', 'badge', color='blue', variant='light', children='v2') )) )) ``` ## Attributes | Attribute | Valid values | Description | | --- | --- | --- | | `justify` | `flex-start` (default), `center`, `flex-end`, `space-between`, `space-around`, `space-evenly` | `justify-content` for the row — where children sit on the main axis. | | `align` | `center` (default), `flex-start`, `flex-end`, `stretch`, `baseline` | `align-items` — how children line up on the cross axis. | | `gap` | `xs`, `sm`, `md` (default), `lg`, `xl`, or any CSS value | Space between children. | | `wrap` | `wrap` (default), `nowrap`, `wrap-reverse` | `flex-wrap` for the row. | | `grow` | bare flag (off by default) | Make children share the row width equally. | | `preventGrowOverflow` | `true` (default), `false` | With `grow`, reserve equal width so a wide child can't push others; set `false` to let children size to content. | | `m`, `mt`, `mb`, `ml`, `mr`, `mx`, `my` | Mantine size token or any CSS value | Margin (all sides / top / bottom / left / right / horizontal / vertical). | | `p`, `pt`, `pb`, `pl`, `pr`, `px`, `py` | Mantine size token or any CSS value | Padding (all sides / top / bottom / left / right / horizontal / vertical). | | `bg` | color name or CSS color | Background color. | | `c` | color name or CSS color | Text color. | | `w`, `h` | Mantine size token or any CSS value | Width / height. | | `miw`, `mih`, `maw`, `mah` | any CSS value | Min/max width and min/max height. | ## CSS Selectors Each `group` carries `data-aardvark-island="Group"` on its wrapper, and Mantine exposes its parts as `mantine-Group-*` classes — target either to style it from your theme CSS. ```css [data-aardvark-island="Group"] { /* style every group on the page */ } .mantine-Group-root { /* the root part */ } ``` ## Injecting Attributes `attr={…}` forwards raw HTML attributes (including event handlers) straight onto the rendered element. one two
Source: Markdown ```aardvark {% group attr={'onclick': ''' const value = this.innerText; console.log('attr demo value:', value); alert(value); '''} %} {% badge %}one{% endBadge %} {% badge %}two{% endBadge %} {% endGroup %} ``` Source: Python ```python inner = (component('aardvark', 'badge', children='one') + ' ' + component('aardvark', 'badge', children='two')) print(component('aardvark', 'group', children=inner, attr={'onclick': ''' const value = this.innerText; console.log('attr demo value:', value); alert(value); '''})) ```