# FloatingWindow
A **built-in** tag for a draggable floating panel — a titled window that opens **over
the page** and floats above your content; grab its header to move it around the
viewport. It's a handy container for a help bubble, a mini-map, or any side panel the
reader can reposition. A **trigger button** opens it (set its text with `triggerLabel`),
then set the header text with `title`, size it with `width`, and toggle the close button
and border with `withCloseButton` and `withBorder`.
Use it as `{% floatingwindow %}` in Markdown, or call it from
Python logic (loops, snippets) via `component('aardvark', 'floatingwindow', …)`.
## Demonstrations
Click the trigger to open a titled window that floats over the page — grab its header and drag it around:
**Drag me** by the title bar to move this window around the page.
Source: Markdown
```aardvark
{% floatingwindow triggerLabel='Show tips' title='Tips' width=320 %}
**Drag me** by the title bar to move this window around the page.
{% endFloatingwindow %}
```
Source: Python
```python
component(
'aardvark', 'floatingwindow',
triggerLabel='Show tips',
title='Tips',
width=320,
children='**Drag me** by the title bar to move this window around the page.',
)
```
### A borderless window without a close button
`shadow` and `radius` restyle the card; `withCloseButton=false` and
`withBorder=false` strip the chrome for a lighter panel:
A lighter floating panel — no border, no close button.
Source: Markdown
```aardvark
{% floatingwindow triggerLabel='Open note' title='Note' width=280 shadow='md' radius='lg' withCloseButton=false withBorder=false %}
A lighter floating panel — no border, no close button.
{% endFloatingwindow %}
```
Source: Python
```python
component(
'aardvark', 'floatingwindow',
triggerLabel='Open note',
title='Note',
width=280,
shadow='md',
radius='lg',
withCloseButton=False,
withBorder=False,
children='A lighter floating panel — no border, no close button.',
)
```
## With other components
The body is ordinary Markdown, so a window can hold richer content — here a
[button](/components/buttons/button/) inside a draggable help panel:
Reach support without leaving the page.
Contact us
Source: Markdown
```aardvark
{% floatingwindow triggerLabel='Need help?' title='Need help?' width=300 shadow='xl' %}
Reach support without leaving the page.
{% button text='Contact us' variant='light' fullWidth=true %}
{% endFloatingwindow %}
```
Source: Python
```python
btn = component('aardvark', 'button', text='Contact us', variant='light', fullWidth=True)
component('aardvark', 'floatingwindow', triggerLabel='Need help?', title='Need help?',
width=300, shadow='xl',
children='Reach support without leaving the page.\n\n' + btn)
```
## Attributes
| Attribute | Values | Description |
| --- | --- | --- |
| `triggerLabel` | string, default `Open window` | Text of the button that opens the window. |
| `title` | string | Header text shown in the draggable title bar. |
| `width` | integer (px), default `320` | Window width. |
| `shadow` | `xs`–`xl` (default `xl`) | Drop shadow. |
| `radius` | `xs`–`xl` or a number (default `md`) | Corner radius. |
| `withCloseButton` | bool, default `true` | Show the close button in the header. |
| `withBorder` | bool, default `true` | Draw a border around the window. |
## CSS Selectors
Target the rendered element through its island marker, `[data-aardvark-island="FloatingWindow"]`, or through the Mantine Styles API classes. The window mounts on the client and exists only while it is open. The relevant classes:
```css
/* Every rendered FloatingWindow carries this island marker */
[data-aardvark-island="FloatingWindow"] { }
/* Mantine Styles API classes */
.mantine-FloatingWindow-root { }
/* The demo adds these to the title bar */
.aardvark-fw-bar { }
.aardvark-fw-close { }
```
## 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:
**Drag me** by the title bar to move this window around the page.
Source: Markdown
```aardvark
{% floatingwindow triggerLabel='Show tips' title='Tips' width=320 attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''} %}
**Drag me** by the title bar to move this window around the page.
{% endFloatingwindow %}
```
Source: Python
```python
component('aardvark', 'floatingwindow', triggerLabel='Show tips', title='Tips', width=320,
children='**Drag me** by the title bar to move this window around the page.',
attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''})
```