Menu
popagent
publicLatest change 6edc7e928c57dab23c0973ed3f7ee70b3ebb72d5 - Initial popagent baseline by AkurAI Build
export type Toast = { id: number; message: string };
type Listener = (toasts: Toast[]) => void;
let toasts: Toast[] = [];
let nextId = 1;
const listeners = new Set<Listener>();
function emit() {
for (const listener of listeners) listener(toasts);
}
/** Show a transient error/info message in the toast host. */
export function toast(message: string, durationMs = 5000): void {
const entry = { id: nextId++, message };
toasts = [...toasts, entry];
emit();
setTimeout(() => {
toasts = toasts.filter((item) => item.id !== entry.id);
emit();
}, durationMs);
}
export function subscribeToasts(listener: Listener): () => void {
listeners.add(listener);
listener(toasts);
return () => {
listeners.delete(listener);
};
}