Skip to content
WolfWave
Components

Component Catalog

The reusable SwiftUI components in the WolfWave macOS app, like status chips, callouts, and buttons. Each has API, tokens, accessibility notes, and do/don'ts.

TL;DR: before building a new SwiftUI view, check the catalog. A shared component probably exists, and each one documents its API, tokens, and accessibility.

WolfWave's native macOS app ships a library of reusable SwiftUI components under apps/native/WolfWave/Views/Shared/, Views/Onboarding/Components/, and Views/HistoryStats/. Every component has a markdown catalog entry in design-system/components/ covering its API, the tokens it uses, an anatomy diagram, accessibility notes, and a do/don't list.

The catalog's README is the live index — it tracks every entry and its status, so it never drifts from the source tree the way a copied table here would.

A few representative entries:

ComponentWhat it doesCatalog
StatusChipCapsule indicator (dot + label) for connection state.entry
CalloutBannerTinted info/success/warning/error callout used across settings.entry
NowPlayingHeroCardLarge now-playing card (art + track + artist).entry
DSIconButtonSingle-glyph bordered button sized to match text-label neighbors.entry
SettingsNavRailReusable two-column jump-nav rail with scroll sync; not used by current Settings panes.entry
AsyncActionButtonOne button, one async action: spinner replaces the label, disabled in flight, brief success check, width pinned so nothing resizes.entry

How to add a component

  1. Build the SwiftUI view under Views/Shared/, Views/Onboarding/Components/, or Views/HistoryStats/.
  2. Reference DSColor / DSFont / DSSpace / DSRadius / DSMotion tokens. No hardcoded numbers, and no raw system colors as a status tint (DSColor.success / .warning / .error / .info / .neutral only). bun run ds:lint enforces both.
  3. Add a markdown entry in design-system/components/<name>.md following the template.
  4. Add the entry to the catalog README index.
  5. Add a #Preview for each state. A Views/Shared/ view also goes in the Debug tab's component gallery (Views/Debug/DesignSystem/).
  6. Run make lint-sync; it blocks missing source/catalog pairs and incomplete templates.

Changing an existing component? Update its catalog entry in the same PR.

On this page