Examples
More complex examples
Examples for some of the common use-cases that you might need. Because of thebare-bones take this library takes, you can obviously come up with better solutions.
Information dialog
A simple information dialog. You can style the component however you like. This example uses some default PicoCSS styles.
<script lang="ts">
import type { Dialog } from 'svelte-component-dialogs';
export let dialogRef: Dialog;
</script>
<article>
<header>
<button
type="button"
class="close"
aria-label="Close"
title="Close"
on:click={() => dialogRef.close()}
/>
<h4>Very important information!</h4>
</header>
<p>You should really know about this.</p>
<footer>
<button
type="button"
class="secondary"
style="margin-left: auto;"
on:click={() => dialogRef.close()}>OK</button
>
</footer>
</article>
Confirmation dialog
A confirmation dialog. You can set onClose either inside the component by
using dialogRef or outside with the reference returned by
openDialog. This example uses the second method. You should also set
closeOnEsc
and closeOnBackdropClick to false for the best results.
<script lang="ts">
import type { Dialog } from 'svelte-component-dialogs';
export let dialogRef: Dialog;
const confirm = () => dialogRef.close(true);
const cancel = () => dialogRef.close(false);
</script>
<article>
<header>
<h4>Are you sure?</h4>
</header>
<p>This cannot be changed later.</p>
<footer>
<button type="button" class="secondary" on:click={cancel}>No</button>
<button type="button" on:click={confirm}>Yes</button>
</footer>
</article>
Scrolled content
Since you are in control of the dialog content, you just have to set your wrapper to have a max
height. Set disableScroll to true in order to disable the background
scrolling by accident.
<script lang="ts">
import type { Dialog } from 'svelte-component-dialogs';
export let dialogRef: Dialog;
</script>
<article>
<header>
<button
type="button"
class="close"
aria-label="Close"
title="Close"
on:click={() => dialogRef.close()}
/>
<h4>Scrolled content</h4>
</header>
<p>
Long content
</p>
</article>
<style>
article {
max-height: 600px;
overflow: hidden;
display: flex;
flex-direction: column;
}
p {
max-height: 100%;
overflow: auto;
}
</style>
Form content
You can return anything as a result when closing a dialog, for example the result of a form.
<script lang="ts">
import type { Dialog } from 'svelte-component-dialogs';
export let dialogRef: Dialog;
export let form: HTMLFormElement;
const saveEntity = (event: SubmitEvent) => {
event.preventDefault();
const formData = new FormData(form);
dialogRef.close({ data: Object.fromEntries(formData.entries()) });
};
</script>
<article>
<header>
<button
type="button"
class="close"
aria-label="Close"
title="Close"
on:click={() => dialogRef.close()}
/>
<h4>Create Entity</h4>
</header>
<form id="form" bind:this={form} on:submit={(event) => saveEntity(event)}>
<label for="name">
Name
<input type="text" id="name" name="name" placeholder="Name" required />
</label>
<label for="email">
Email
<input type="email" id="email" name="email" placeholder="Email" required />
</label>
</form>
<footer>
<button type="button" class="secondary" on:click={() => dialogRef.close()}>Cancel</button>
<button type="submit" form="form">Save</button>
</footer>
</article>