feat(ui): add a Base UI toast component

Adds the toast primitive that replaces sonner, along with its design-sync card
mapping. Nothing consumes it yet; the call sites move over next.
This commit is contained in:
Amruth Pillai
2026-08-17 22:32:31 +02:00
parent ac062bbcbd
commit 170550ed59
4 changed files with 223 additions and 6 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ Syncs to Claude Design project **Reactive Resume** (`3c0f6556-050a-41e5-9886-c3f
## Card scope
- The package exports **202 symbols** (39 primary components + 163 compound sub-parts). User chose **~40 primary cards**: `cfg.componentSrcMap` nulls the 163 sub-parts. All 202 stay importable from `window.RRUI` (the bundle exports everything regardless of the card list), so previews compose sub-parts (`RRUI.DialogContent`, etc.) freely.
- Multi-primary files represented by one card: `combobox.tsx`→ComboboxRoot, `form.tsx`→FormItem, `resizable.tsx`→ResizableGroup, `sonner.tsx`→Toaster.
- Multi-primary files represented by one card: `combobox.tsx`→ComboboxRoot, `form.tsx`→FormItem, `resizable.tsx`→ResizableGroup, `toast.tsx`→Toaster.
## Preview authoring conventions (calibrated on Button / Alert / Dialog)
+6 -5
View File
@@ -1,19 +1,20 @@
import { useEffect } from "react";
import { toast } from "sonner";
import { Toaster } from "@reactive-resume/ui/components/sonner";
import { Toaster, toast } from "@reactive-resume/ui/components/toast";
// Toaster is the toast host. Fire a persistent toast on mount so the card
// shows a real notification instead of an empty portal.
export const Notification = () => {
useEffect(() => {
toast.success("Resume published", {
toast.add({
type: "success",
title: "Resume published",
description: "“Software Engineer” is now live at rxresume.me/jane-doe.",
duration: Number.POSITIVE_INFINITY,
timeout: 0,
});
}, []);
return (
<div style={{ minHeight: 140 }}>
<Toaster position="top-center" />
<Toaster />
</div>
);
};