AkurAI Build
Menu

popagent

public

Latest 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);
  };
}