Community Wolf
Community
APIAboutContact
Book a demo

Community Wolf

Real-time safety intelligence for citizens and the teams who protect them.

Community Tools

  • Public map
  • Namola
  • WhatsApp

Business Tools

  • Access Control
  • Intelligence
  • Safety API
  • Group Agents
  • Patrol Management
  • Roster Management
  • Safety Survey
  • Pricing
  • Pricing calculator

Resources

  • Docs
  • Changelog
  • Design system

Company

  • Community
  • Business
  • API
  • About
  • Contact

Get pilot updates

New features, city launches, and integration partnerships - delivered monthly.

Subscribe to updates

(c) 2026 Community Wolf. All rights reserved.

Privacy PolicyTerms of Service
Wolf design system
Foundations
  • Brand
  • Voice and tone
  • Colour
  • Typography
  • Spacing and layout
  • Radius, elevation and borders
  • Motion
  • Iconography
  • Imagery and photography
  • Data visualisation
  • Accessibility
Patterns
  • App shell
  • Hero sections
  • Empty states
  • Error states
  • Skeletons and loading
  • Forms
  • Tables and data density
  • Confirmation and destructive actions
  • Authentication surfaces
Components
  • Button
  • Input
  • Card
  • Badge
  • Dialog
  • Label
  • Textarea
  • Select
  • Checkbox
  • Radio group
  • Switch
  • Form field
  • Tabs
  • Popover
  • Tooltip
  • Accordion
  • Alert dialog
  • Confirm dialog
  • Toast (Sonner)
  • Skeleton
  • Empty state

components

Toast (Sonner)

A toast is an acknowledgement — the system saying 'got it, here's what happened'. Anything the user must act on goes in a dialog or an inline banner, not a toast.

Read the full spec

Variants

Six everyday variants. Pick by what happened — success, error, warning, info — not by colour preference.

tsx
import { toast } from "@wolf/design-system";

toast("Area updated");
toast.success("Report submitted", { description: "We've notified your area." });
toast.error("Couldn't save", { description: "Check your connection and retry." });
toast.warning("Area approaching cap", { description: "3 of 5 slots used." });
toast.info("Escalation window paused");

Promise

`toast.promise` tracks a Promise — shows a loading toast while it's pending, then success or error on resolve/reject. Great for save/submit flows.

tsx
toast.promise(saveReport(), {
  loading: "Saving report…",
  success: "Report saved",
  error: "Couldn't save report",
});

With action

Attach a single action — typically Undo or Retry. Keep it to one affordance; anything more belongs in a banner or dialog.

tsx
toast.success("Report archived", {
  action: { label: "Undo", onClick: () => restore(id) },
});
Previous — ComponentsConfirm dialog
Next — ComponentsSkeleton