DrylToast
Service-driven glass notifications that arrive from where they belong: a
toast that answers a click grows out of the button that was clicked
(ToastOptions.Origin); a toast nobody clicked for comes out of
the notification bell, and returns into the inbox if it expires unread.
Each toast keeps its own hover-pausable countdown, neighbours glide into
the space a leaving toast frees, and AI mode dominates the visual when the
toast is communicating model activity in the background.
Variants
Four semantic flavors plus a neutral default — each keeps the dark glass surface with a colored left rail, icon chip and soft glow. Every toast here passes its button as ToastOptions.Origin (DrylButton.Element), so it grows out of that button's shape and morphs into the stack.
From the bell — when nobody clicked
A toast without an Origin — a finished background job, a server push — comes out of the bell of a service-driven DrylNotifications as a capsule that flies to its place and unfolds. If it expires unread it folds back, flies into the bell and becomes an unread inbox entry. KeepInInbox = false lets an announcement leave without filing it. With no bell on screen, the toast unfolds in place.
Title + message
Pass a title for emphasis; the body sits below in a quieter weight.
Custom content — buttons inside the toast
Use Show<TComponent> to drop any component into the body. It receives IDrylToastInstance to close its own toast — perfect for an Undo.
AI-aware toasts
Set ToastOptions.Ai and the AI aura takes over the visual; the variant accent survives only on the icon chip.
Duration & persistence
Default duration is 5 s. Duration = 0 keeps the toast open until dismissed. Hovering pauses the timer.
Stack — fire a bunch at once
Toasts stack vertically at the chosen anchor. Each keeps its own countdown, and when one leaves the others glide into its place.