-
Notifications
You must be signed in to change notification settings - Fork 39
/
Copy pathToaster.svelte
51 lines (44 loc) · 1.31 KB
/
Toaster.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<script lang="ts">
import useToaster from '../core/use-toaster';
import type { DOMToast, ToastOptions, ToastPosition } from '../core/types';
import ToastWrapper from './ToastWrapper.svelte';
export let reverseOrder = false;
export let position: ToastPosition = 'top-center';
export let toastOptions: ToastOptions | undefined = undefined;
export let gutter = 8;
export let containerStyle: string | undefined = undefined;
export let containerClassName: string | undefined = undefined;
const { toasts, handlers } = useToaster(toastOptions);
let _toasts: DOMToast[];
$: _toasts = $toasts.map((toast) => ({
...toast,
position: toast.position || position,
offset: handlers.calculateOffset(toast, $toasts, {
reverseOrder,
gutter,
defaultPosition: position
})
}));
</script>
<div
class="toaster {containerClassName || ''}"
style={containerStyle}
on:mouseenter={handlers.startPause}
on:mouseleave={handlers.endPause}
>
{#each _toasts as toast (toast.id)}
<ToastWrapper {toast} setHeight={(height) => handlers.updateHeight(toast.id, height)} />
{/each}
</div>
<style>
.toaster {
--default-offset: 16px;
position: fixed;
z-index: 9999;
top: var(--default-offset);
left: var(--default-offset);
right: var(--default-offset);
bottom: var(--default-offset);
pointer-events: none;
}
</style>