Overlay
Slideover
A slide-out panel similar to Drawer but built on bits-ui Dialog. Supports 4 sides, inset mode, close button, and header/body/footer sections.
Basic Usage
<script lang="ts">
import { Slideover, Button } from 'sv5ui';
let open = $state(false);
</script>
<Button label="Open Slideover" onclick={() => (open = true)} />
<Slideover
bind:open
title="Basic Slideover"
description="This is a simple slideover panel."
>
{#snippet body()}
<p>This is the body content of the slideover.</p>
{/snippet}
</Slideover>With Footer
<script lang="ts">
import { Slideover, Button } from 'sv5ui';
let open = $state(false);
</script>
<Button label="Open Slideover" onclick={() => (open = true)} />
<Slideover
bind:open
title="Edit Profile"
description="Make changes to your profile here."
>
{#snippet body()}
<p>Form fields go here...</p>
{/snippet}
{#snippet footer()}
<Button variant="outline" color="surface" label="Cancel" onclick={() => (open = false)} />
<Button label="Save Changes" onclick={() => (open = false)} />
{/snippet}
</Slideover>Sides
Slide from any edge.
<Slideover side="right" title="Right" bind:open>...</Slideover>
<Slideover side="left" title="Left" bind:open>...</Slideover>
<Slideover side="top" title="Top" bind:open>...</Slideover>
<Slideover side="bottom" title="Bottom" bind:open>...</Slideover>Inset
<script lang="ts">
import { Slideover, Button } from 'sv5ui';
let open = $state(false);
</script>
<Button label="Open Inset" onclick={() => (open = true)} />
<Slideover
bind:open
title="Inset Slideover"
description="Displayed with inset margins and rounded corners."
inset
>
{#snippet body()}
<p>This slideover has inset margins and rounded corners.</p>
{/snippet}
</Slideover>Non-Dismissible
<script lang="ts">
import { Slideover, Button } from 'sv5ui';
let open = $state(false);
</script>
<Button label="Open Non-dismissible" onclick={() => (open = true)} />
<Slideover
bind:open
title="Important"
dismissible={false}
>
{#snippet body()}
<p>This slideover cannot be closed by clicking outside or pressing Escape.</p>
{/snippet}
{#snippet footer()}
<Button label="I Understand" onclick={() => (open = false)} />
{/snippet}
</Slideover>UI Slots
| Slot | Description |
|---|---|
overlay | Backdrop overlay |
content | Main content container |
header | Header section |
wrapper | Title/description wrapper |
title | Title text |
description | Description text |
actions | Actions area in header |
body | Body content |
footer | Footer section |
close | Close button area |
Snippets
| Snippet | Description |
|---|---|
children | Trigger element |
content | Replace entire layout |
header | Custom header |
titleSlot | Custom title |
descriptionSlot | Custom description |
actions | Header actions |
body | Body content |
footer | Footer content |
closeSlot | Custom close button |
Props
| Prop | Type | Default |
|---|---|---|
open | boolean | false |
side | 'top'|'right'|'bottom'|'left' | 'right' |
title | string | - |
description | string | - |
inset | boolean | false |
overlay | boolean | true |
close | boolean | CloseProps | true |
dismissible | boolean | true |
transition | boolean | true |
portal | boolean | true |
class | string | - |
ui | Record<Slot, Class> | - |