Home

boring / v2

publicBoring-Software-Inc/v2
Overview Code History Branches Pull requestsIssuesInsights Campfire Docs
main
HomeOverview Code PRsIssues

feat(web): dedupe toast layer over sonner

3 months ago

9cdf680
Authored
grim7/22/2026, 1:30:16 AM
layer a dedupe controller on top of sonner; sonner stays the renderer.
identical fires re-highlight one card with a climbing count + bounce
instead of stacking. the controller owns the dismiss timer (sonner
duration: infinity), so a re-fire refreshes it; the live window holds
the registry through the exit animation so a mid-dismiss re-fire
re-highlights the fading toast.

- three variants (single, title+body, action), status icon, count badge
  from 2, action button in a bordered footer, close on every toast
- identity by explicit dedupeKey, else content hash
- aria-live region speaks re-fires (sonner won't re-announce an in-place
  update); first fire stays sonner's job to avoid double-speak
- migrate all toast imports to #/components/ui/toast; string callers keep
  their call shape
- run copy button now toasts "copied to clipboard"

Parent2d431a5

25 files changed
  • apps/web/src/components/activity/activity-stack.tsx+1−1
  • apps/web/src/components/admin/admin-orgs-page.tsx+1−1
  • apps/web/src/components/admin/admin-users-page.tsx+1−1
  • apps/web/src/components/arming/arm-callout.tsx+1−1
  • apps/web/src/components/auth/login-page.tsx+1−1
  • apps/web/src/components/customize/customize-page.tsx+1−1
  • apps/web/src/components/dev/persona-switcher.tsx+1−1
  • apps/web/src/components/layouts/command-palette.tsx+1−1
  • apps/web/src/components/moderation/moderation-queue.tsx+1−1
  • apps/web/src/components/organizations/install-setup-page.tsx+1−1
  • apps/web/src/components/organizations/invite-page.tsx+1−1
  • apps/web/src/components/organizations/org-general-settings-page.tsx+1−1
  • apps/web/src/components/organizations/org-members-page.tsx+1−1
  • apps/web/src/components/rules/rules-page.tsx+1−1
  • apps/web/src/components/runs/run-page.tsx+7−0
  • apps/web/src/components/ui/sonner.tsx+0−1
  • apps/web/src/components/ui/toast.tsx+191−0
  • apps/web/src/components/workflows/editor/editor-header.tsx+1−1
  • apps/web/src/components/workflows/editor/workflow-editor.tsx+1−1
  • apps/web/src/components/workflows/workflows-grid-page.tsx+1−1
  • apps/web/src/lib/toast-announcer.ts+40−0
  • apps/web/src/lib/toast-controller.test.ts+206−0
  • apps/web/src/lib/toast-controller.ts——
  • apps/web/src/routes/__root.tsx+1−1
  • apps/web/src/routes/queue.tsx+1−1