LoadingOverlay
The built-in loadingoverlay tag — a spinner veil over an area that's loading. Usage, options, and live examples.
A built-in tag for a loading veil — a dimming layer with a centered spinner over
a box of content, for an area that’s fetching or processing. The tag wraps the block
body in a positioned box and lays the veil over it, so it renders right here on the
page. Toggle the veil with visible, tune it with the overlay* props, and style
the spinner with the loader* props.
Use it as {% loadingoverlay %} in Markdown, or call it from
Python logic (loops, snippets) via component('aardvark', 'loadingoverlay', …).
Demonstrations
The covered content is the block body; the veil is on by default (visible=true):
This content sits under the loading veil while it’s visible.
This content sits under the loading veil while it’s visible.
{% loadingoverlay %}
This content sits under the loading veil while it's `visible`.
{% endLoadingoverlay %}
component(
'aardvark', 'loadingoverlay',
children='This content sits under the loading veil while it is visible.',
)
A blurred veil with a custom spinner
overlayBlur frosts the content behind the veil; loaderType, loaderColor, and
loaderSize restyle the spinner:
The veil blurs the content behind it, with a grape “bars” spinner.
The veil blurs the content behind it, with a grape “bars” spinner.
{% loadingoverlay overlayBlur=2 overlayBackgroundOpacity=0.55 loaderType='bars' loaderColor='grape' loaderSize='lg' %}
The veil blurs the content behind it, with a grape "bars" spinner.
{% endLoadingoverlay %}
component(
'aardvark', 'loadingoverlay',
overlayBlur=2,
overlayBackgroundOpacity=0.55,
loaderType='bars',
loaderColor='grape',
loaderSize='lg',
children='The veil blurs the content behind it, with a grape bars spinner.',
)
Content revealed (veil hidden)
Set visible=false to lift the veil and show the content underneath. Combined with
the overlayRadius and zIndex props, this is how you’d drive the overlay from
loading to ready in a real app:
The veil is hidden, so this content reads normally.
The veil is hidden, so this content reads normally.
{% loadingoverlay visible=false overlayRadius='md' %}
The veil is hidden, so this content reads normally.
{% endLoadingoverlay %}
component(
'aardvark', 'loadingoverlay',
visible=False,
overlayRadius='md',
children='The veil is hidden, so this content reads normally.',
)
With other components
The body is ordinary Markdown, so the veil can sit over richer content — here a card being “loaded”:
{% loadingoverlay overlayBlur=1 loaderType='dots' %}
{% card shadow='sm' padding='lg' radius='md' withBorder=true %}
### Account summary
Numbers refresh while the veil is up.
{% endCard %}
{% endLoadingoverlay %}
body = component('aardvark', 'card', shadow='sm', padding='lg', radius='md', withBorder=True,
children='### Account summary\n\nNumbers refresh while the veil is up.')
component('aardvark', 'loadingoverlay', overlayBlur=1, loaderType='dots', children=body)
Attributes
| Attribute | Values | Description |
|---|---|---|
visible |
bool, default true |
Show the veil + spinner. Set false to reveal the covered content. |
overlayBackgroundOpacity |
float 0–1 |
Veil opacity. |
overlayBlur |
float (px) | Backdrop blur behind the veil. |
overlayRadius |
xs–xl or a number |
Veil corner radius. |
loaderType |
oval (default), bars, dots |
Spinner style. |
loaderSize |
xs–xl or a number |
Spinner size. |
loaderColor |
any theme color | Spinner color. |
zIndex |
integer | Stacking order of the veil. |
CSS Selectors
Target the rendered element through its island marker, [data-aardvark-island="LoadingOverlay"], or through the Mantine Styles API classes:
/* Every rendered LoadingOverlay carries this island marker */
[data-aardvark-island="LoadingOverlay"] { }
/* Mantine Styles API classes */
.mantine-LoadingOverlay-root { }
.mantine-LoadingOverlay-overlay { }
.mantine-LoadingOverlay-loader { }
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:
This content sits under the loading veil while it’s visible.
This content sits under the loading veil while it’s visible.
{% loadingoverlay attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''} %}
This content sits under the loading veil while it's `visible`.
{% endLoadingoverlay %}
component(
'aardvark', 'loadingoverlay',
children='This content sits under the loading veil while it is `visible`.',
attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''},
)