Yet another Svelte dialog component.
While there are plenty of packages out there that provide modals or dialogs in Svelte, most fall short in at least one these aspects:
This project aims to fill these gaps. svelte-aria-dialog
is a tiny svelte component that provides a mostly unstyled, WAI-ARIA accessible modal dialog with a few simple options.
Focus trapping is provided by the lightweight focus-trap module.
npm install svelte-aria-dialog
pnpm install svelte-aria-dialog
yarn add svelte-aria-dialog
To open a dialog, bind the open
prop to a boolean value.
<script>
import { Dialog } from "svelte-aria-dialog";
let open = false;
function save() {
alert("Saved");
open = false;
}
</script>
<button on:click={() => open = true}>Open Dialog</button>
<Dialog bind:open title="Title">
This is a simple Dialog.
<svelte:fragment slot="footer">
<button on:click={save}>Save</button>
<button on:click={() => open = false}>Close</button>
</svelte:fragment>
</Dialog>
<script>
import { Dialog } from "svelte-aria-dialog";
let open = false;
</script>
<button on:click={() => open = true}>Open Dialog</button>
<Dialog bind:open closable={false} title="Title">
I can't be closed!
</Dialog>
<script>
import { Dialog } from "svelte-aria-dialog";
let open = false;
</script>
<button on:click={() => open = true}>Open Dialog</button>
<Dialog bind:open title="Title" append={document.body}>
This dialog will be appended to <body>.
</Dialog>
on:open
and on:close
<script>
import { Dialog } from "svelte-aria-dialog";
let open = false;
function handleOpen() {
alert("Opened!");
}
function handleClose() {
alert("Closed!");
}
</script>
<button on:click={() => open = true}>Open Dialog</button>
<Dialog bind:open title="Title" on:open={handleOpen} on:close={handleClose}>
This dialog will emit events when opened and closed.
<button slot="footer" on:click={() => open = false}>Close</button>
</Dialog>
All unused props are passed to the inner dialog element through $$restProps.
Property | Type | Default | Description |
---|---|---|---|
open |
boolean |
false |
Determines whether the dialog is open or not |
title |
string |
"" |
Title text displayed as the dialog header |
closable |
boolean |
true |
Determines whether the dialog can be conventially closed using the escape key or backdrop click. |
append |
HTMLElement |
undefined |
Determines the node the dialog should be appended to |
class |
string |
"" |
Specifies a custom class name for the dialog |
Name | Description |
---|---|
default |
Content of the dialog. |
footer |
Elements inserted at the bottom of the dialog in the footer. |
outer |
Elements inserted outside of the inner dialog. |
Name | Description |
---|---|
open |
Dispatched when the dialog is mounted into the DOM. |
close |
Dispatched when the dialog is removed from the DOM. |