Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Snackbar

Snackbar preview

Snackbar — a transient, button-triggered floating notification surface.

A Snackbar pairs a trigger (a Button by default, or any custom widget via .trigger(...)) with a dormant content surface. Activating the trigger presents the surface as an OverlayPlacement::BottomCenter overlay and dismisses it automatically after a configurable timeout (default: 4 s). The surface stays until dismissed when .persistent() is set. Only one snackbar can be shown at a time — presenting a second one dismisses the first.

For richer, stackable, severity-aware notifications see the Toast system, which also maintains a persistent NotificationArchiveModel.

Accessibility

The content surface exposes Role::Alert with Live::Polite so screen readers announce the notification without interrupting the user. Supply .announcement(...) to give the alert a descriptive name instead of the generic "notification" fallback.

use teksilo_widgets::{Snackbar};
use teksilo_i18n::lit;
use teksilo_widgets::primitives::TextWidget;
use teksilo_tokens::TextRole;

// In build():
ctx.add(
    Snackbar::new(lit!("Undo"))
        .content(TextWidget::new(lit!("File deleted.")).color(TextRole::TooltipText))
        .announcement(lit!("File deleted."))
        .auto_dismiss_after(std::time::Duration::from_secs(5)),
);

Builder methods at a glance

style, content, content_id, variant, enabled, dismiss_behavior, auto_dismiss_after, persistent, trigger, trigger_id, announcement

API reference

📖 Full rustdoc API for this module

pub struct Snackbar

A button-triggered transient notification surface.

Call .content(...) to supply the notification body, then add the widget to the tree. The trigger label is shown as a Button (or a custom widget via .trigger(...)); activating it presents the content surface at the bottom center of the window.

#![allow(unused)]
fn main() {
pub struct Snackbar { /* fields */ }
}

Methods

pub fn new(label: impl Into<LocalizedString>) -> Self

Create a snackbar whose default trigger button shows label.

pub fn style(mut self, style: impl teksilo_core::styles::SnackbarStyle) -> Self

Per-call style override for the snackbar surface chrome. Replaces the theme-wide default SnackbarStyle for just this instance.

pub fn content(mut self, content: impl Widget + 'static) -> Self

The snackbar body — the message (and optional inline action) shown on the floating surface.

The default surface is the high-contrast (dark) tooltip_bg, the same one tooltips use, and it stays dark in light theme. So any TextWidget you pass here must set .color(TextRole::TooltipText) (and actions can use TooltipText / TooltipShortcut) — the default TextRole::Primary is dark and renders nearly invisible on the dark surface in light theme. If you install a light-surface SnackbarStyle, color the content to match that instead.

pub fn content_id(mut self, id: WidgetId) -> Self

Supply the notification body by WidgetId (already added to the tree). Mutually exclusive with .content(...).

pub fn variant(mut self, variant: ButtonVariant) -> Self

Override the default trigger ButtonVariant (default: Plain).

pub fn enabled(mut self, enabled: impl Into<Prop<bool>>) -> Self

Set the enabled state of the trigger, statically or reactively.

pub fn dismiss_behavior(mut self, dismiss: DismissBehavior) -> Self

Override the overlay dismiss behavior (default: ClickOutside).

pub fn auto_dismiss_after(mut self, duration: Duration) -> Self

Set the auto-dismiss timeout. The overlay is removed after this duration without user interaction (default: 4 s).

pub fn persistent(mut self) -> Self

Keep the snackbar visible until explicitly dismissed; disables the auto-dismiss timeout.

pub fn trigger(mut self, trigger: impl Widget + 'static) -> Self

Replace the default Button trigger with a custom widget. The widget is wired for tap, keyboard (Enter/Space), and AT Click activation automatically.

pub fn trigger_id(mut self, id: WidgetId) -> Self

Supply the custom trigger by WidgetId (already added to the tree).

pub fn announcement(mut self, text: impl Into<LocalizedString>) -> Self

Screen-reader announcement string — used as the Alert's accessible name when the snackbar appears. Without this the surface falls back to the generic a11y_snackbar_name i18n string, which says "notification" but can't describe the specific message. Set this whenever the snackbar conveys information the user needs to hear (errors, confirmations, status changes).