- Move studio from root to frontends/studio/ - Add owner-tools frontend for live blog admin UI - Add shared ui component library - Set up npm workspaces for frontends - Add enhanced code block extension for editor Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
19 lines
502 B
TypeScript
19 lines
502 B
TypeScript
import { atom } from 'nanostores'
|
|
|
|
export interface Toast {
|
|
id: string
|
|
message: string
|
|
type: 'success' | 'error'
|
|
}
|
|
|
|
export const $toasts = atom<Toast[]>([])
|
|
|
|
export const addToast = (message: string, type: 'success' | 'error' = 'success') => {
|
|
const id = Math.random().toString(36).slice(2)
|
|
$toasts.set([...$toasts.get(), { id, message, type }])
|
|
setTimeout(() => removeToast(id), 4000)
|
|
}
|
|
|
|
export const removeToast = (id: string) => {
|
|
$toasts.set($toasts.get().filter(t => t.id !== id))
|
|
}
|