component

TuxStatusToast

The transient-notification host + useTuxToast() bus. Mount the host once in the shell; fire from anywhere. Polite live-region semantics, error tones announce assertively and stick until dismissed, motion collapses under reduced-motion, and Tauri shells escalate to OS notifications when the window is unfocused.

setup

One host, one bus

This page mounts a live host — try the buttons below.

<!-- app.vue / the shell — mount the host ONCE -->
<TuxStatusToast />

<!-- anywhere else — fire toasts from the composable -->
<script setup>
const toast = useTuxToast();
toast.success("Saved", "Corpus settings updated.");
</script>

tones

Four tones, sticky errors

const toast = useTuxToast();

toast.info("Reindex queued", "12,400 documents in scope.");
toast.success("Saved", "Corpus settings updated.");
toast.warning("Nearing quota", "87% of the monthly token budget used.");
// error tone is sticky (no auto-dismiss) until the user dismisses it
toast.error("Export failed", "The report service returned 502.");

action

With an action

toast.show({
  title: "Policy archived",
  description: "\"Stale-data retention\" moved to the archive.",
  tone: "success",
  action: { label: "Undo", onClick: restorePolicy },
});

desktop

Tauri escalation

Contract in design/tauri-bindings.md — requires the notification:default capability.

<!-- Tauri shells: when the window is hidden/unfocused, the same
     call ALSO fires an OS notification (guarded dynamic import of
     @tauri-apps/plugin-notification + notification:default capability;
     silent no-op on plain web). The in-page toast always renders. -->
toast.info("Model download complete", "gemma-4-e2b is ready to use.");