Notifications & dialogues
Les notifications et les dialogues passent par le SDK — jamais par alert/confirm/prompt du navigateur, qui casseraient la cohérence du shell.
Pousser une notification #
import { useNotificationStore } from '@kubuno/sdk'
// pousser une notification dans le centre de notifications du host
useNotificationStore.getState().push({
title: 'Note partagée',
body: `« ${note.title} » a été partagée avec vous`,
moduleId: 'memo',
icon: 'StickyNote', // icône Lucide
link: '/memo', // navigation au clic
})La forme exacte : { title, body, moduleId, icon?, link? }. Les notifications sont persistées le temps de la session.
La matrice de notifications #
Déclarez vos types pour que l'utilisateur choisisse e-mail/push par activité :
// déclarer les types de notifications dans Réglages → Notifications
NotificationRegistry.register({
moduleId: 'memo', title: 'Memo', order: 30,
activities: [
{ id: 'note_shared', label: 'Une note est partagée', emailDefault: true, pushDefault: true },
{ id: 'note_reminder', label: "Rappel d'une note", pushDefault: true },
],
})Dialogues : confirm & prompt #
import { useConfirm, prompt } from '@kubuno/sdk'
const { confirm } = useConfirm()
// au lieu de window.confirm(...)
if (await confirm({ title: 'Supprimer la note ?', danger: true })) {
await deleteNote(id)
}
// au lieu de window.prompt(...)
const name = await prompt({ title: 'Nom de la note', defaultValue: note.title })
if (name !== null) rename(note.id, name)Règle UX
confirm() renvoie une Promise<boolean>, prompt() une Promise<string|null>. Pour les menus contextuels, utilisez MenuDropdown de @ui.