svelte-toast
Simple elegant toast notifications.
Because a demo helps better than a thousand API docs: https://zerodevx.github.io/svelte-toast/
Usage
Install the package:
$ npm i -D @zerodevx/svelte-toast
The following are exported:
SvelteToast
as the toast container;toast
as the toast emitter.
Svelte
If you're using this in a Svelte app, import the toast container and place it in your app shell.
App.svelte
:
<script>
import { SvelteToast } from '@zerodevx/svelte-toast'
const options = {
...
}
</script>
...
<SvelteToast {options} />
Use anywhere in your app - just import the toast emitter.
MyComponent.svelte
:
<script>
import { toast } from '@zerodevx/svelte-toast'
</script>
<button on:click={() => toast.push('Hello world!')}>EMIT TOAST</button>
Vanilla JS
For any other application with a bundler, something like this should work:
import { SvelteToast, toast } from '@zerodevx/svelte-toast'
const app = new SvelteToast({
target: document.body,
props: {
options: {
...
}
}
})
toast.push('Hello world!')
CDN
Or if you prefer to go old-school javascript and a CDN:
<head>
...
<script>
function registerToast() {
window.toastApp = new SvelteToastUMD.SvelteToast({
target: document.body
});
window.toast = SvelteToastUMD.toast;
toast.push('Hello world!');
}
</script>
<script defer src="https://cdn.jsdelivr.net/npm/@zerodevx/svelte-toast@0" onload="registerToast()"></script>
</head>
Theming
In general, use CSS variables - the following (self-explanatory) vars are exposed:
._toastContainer {
top: var(--toastContainerTop, 1.5rem);
right: var(--toastContainerRight, 2rem);
bottom: var(--toastContainerBottom, auto);
left: var(--toastContainerLeft, auto);
}
._toastItem {
width: var(--toastWidth, 16rem);
height: var(--toastHeight, auto);
min-height: var(--toastMinHeight, 3.5rem);
margin: var(--toastMargin, 0 0 0.5rem 0);
background: var(--toastBackground, rgba(66,66,66,0.9));
color: var(--toastColor, #FFF);
}
._toastMsg {
padding: var(--toastMsgPadding, 0.75rem 0.5rem);
}
._toastProgressBar {
background: var(--toastProgressBackground, rgba(33,150,243,0.75));
}
So to apply your custom theme globally, do something like:
<style>
:root {
--toastBackground: #ABCDEF;
--toastColor: #123456;
--toastHeight: 300px;
...
}
</style>
To apply CSS overrides to a particular Toast Item (on a per-toast basis), emit the toast with options:
toast.push('Yo!', {
theme: {
'--toastBackground': 'cyan',
'--toastColor': 'black',
...
}
})
where theme
is an object containing one or more CSS var key/value pairs.
Rich HTML
Toast messages can be in rich HTML too - for example:
toast.push(`<strong>You won the jackpot!</strong><br>
Click <a href="#" target="_blank">here</a> for details! 😛`)
Custom Fonts
In a Svelte app, the easiest way to apply custom font styles is to wrap the toast container
then apply styles on the wrapper:
<style>
.wrap {
font-family: Roboto, sans-serif;
font-size: 0.875rem;
...
}
.wrap :global(strong) {
font-weight: 600;
}
</style>
<div class="wrap">
<SvelteToast />
</div>
In Vanilla JS, simply apply your styles to the ._toastMsg
class:
._toastMsg {
font-family: Roboto, sans-serif;
...
}
Options
const options = {
duration: 4000,
dismissable: true,
initial: 1,
progress: 0,
reversed: false,
intro: { x: 256 },
theme: {}
}
Toast API
const id = toast.push(message, { options })
toast.pop(id)
toast.set(id, { options })
License
ISC
To-do