# Leptoaster
Leptoaster is a minimal toast library for Leptos. It provides a simple interface to show toast messages to the user.
[![Crates.io](https://img.shields.io/crates/v/leptoaster)](https://crates.io/crates/leptoaster)
[![Documentation](https://docs.rs/leptoaster/badge.svg)](https://docs.rs/leptoaster)
## Demo
Take a look at the demo [here](https://kiashakiba.github.io/leptoaster-demo).
## Getting started
Assuming you already have Leptos installed, install Leptoaster
```
cargo add leptoaster
```
Once, installed, provide the toaster in the root component of your application and add the `Toaster` component.
```rust
use leptos::*;
use leptoaster::*;
#[component]
fn App() -> IntoView {
provide_toaster();
view! {
// your other components
}
}
```
The `Toaster` component takes an optional `bool` property, `stacked` which defines whether or not the toasts should be stacked.
```rust
use leptos::*;
use leptoaster::*;
#[component]
fn App() -> IntoView {
provide_toaster();
view! {
// your other components
}
}
```
To create a toast message in any component, simple use `expect_toaster()`.
```rust
use lepto::*;
use leptoaster::*;
#[component]
fn MyComponent() -> IntoView {
let toaster = expect_toaster();
toaster.success("A toast message should appear!");
}
```
That's it! You can now show toast messages in your UI!
The `toaster` exposes a number of different kinds of toasts:
* `info`
* `success`
* `warn`
* `error`
For more customization, use the `toast` function along with the `ToastBuilder`:
```rust
toaster.toast(
ToastBuilder::new("My toast message goes here.")
.with_level(ToastLevel::Success) // set the toast level (default is `ToastLevel::Info`)
.with_dismissable(false) // allow or disallow the toast from being dismissable (default is `true`)
.with_expiry(Some(3_000)) // expiry in milliseconds (default is `2500`)
.with_progress(false) // enable or disable the progress bar (default is `true`)
.with_position(ToastPosition::TopRight) // set the toast position (default is 'ToastPosition::BottomLeft`)
);
```
The `toaster` also allows you to clear all toasts currently visible on the screen, including non-expiring toasts:
```rust
#[component]
fn MyComponent() -> IntoView {
let toaster = expect_toaster();
toaster.clear();
}
```
## Styling
To customize styling, override any of the following CSS variables:
```css
--leptoaster-width
--leptoaster-max-width
--leptoaster-z-index
--leptoaster-font-family
--leptoaster-font-size
--leptoaster-line-height
--leptoaster-font-weight
--leptoaster-progress-height
--leptoaster-info-background-color
--leptoaster-info-border-color
--leptoaster-info-text-color
--leptoaster-success-background-color
--leptoaster-success-border-color
--leptoaster-success-text-color
--leptoaster-warn-background-color
--leptoaster-warn-border-color
--leptoaster-warn-text-color
--leptoaster-error-background-color
--leptoaster-error-border-color
--leptoaster-error-text-color
```