| import { writable, derived } from 'svelte/store'; | |
| const TOAST_TIMEOUT = 4000; | |
| let toastId = 0; | |
| function createNotificationStore() { | |
| const { subscribe, update } = writable([]); | |
| function add(message, type = 'info', duration = TOAST_TIMEOUT) { | |
| const id = ++toastId; | |
| update((toasts) => [...toasts, { id, message, type, duration }]); | |
| if (duration > 0) { | |
| setTimeout(() => remove(id), duration); | |
| } | |
| return id; | |
| } | |
| function remove(id) { | |
| update((toasts) => toasts.filter((t) => t.id !== id)); | |
| } | |
| return { | |
| subscribe, | |
| success: (msg, dur) => add(msg, 'success', dur), | |
| error: (msg, dur) => add(msg, 'error', dur ?? 6000), | |
| warning: (msg, dur) => add(msg, 'warning', dur), | |
| info: (msg, dur) => add(msg, 'info', dur), | |
| remove | |
| }; | |
| } | |
| export const toasts = createNotificationStore(); | |