Aller au contenu
Aubui · Dialogues & toasts
Composants

Dialogues & toastsNouveau

Une lightbox unique pour informer, confirmer ou demander une saisie, et des toasts pour dire « c’est fait ». Jamais de popup grise du navigateur : tout passe par AubuiDialog et AubuiToast.

Essayer

JS
AubuiDialog.alert('Ton export est prêt.', { title: 'Export' });

if (await AubuiDialog.confirm('Supprimer cette note ?', { title: 'Supprimer', ok: 'Supprimer', danger: true })) {
  // … suppression
}

const nom = await AubuiDialog.prompt('Nom de la liste ?', { value: 'Courses', placeholder: 'Ex. Vacances' });
if (nom !== null) { /* … */ }

Installer

Rien à ajouter : dialog.js est chargé par aubui.js, aubui.light.js (pages de connexion) et même par actions.js seul. aubui.js crée en plus une file d’attente dès son exécution : un appel fait avant que dialog.js soit arrivé est rejoué ensuite, sans popup native.

HTML
<script src="https://ui.aubota.xyz/js/aubui.js" defer></script>
<!-- ou, seul, sur une page qui n’utilise pas aubui.js : -->
<script src="https://ui.aubota.xyz/js/dialog.js" defer></script>

API AubuiDialog

AppelRenvoieOptions
AubuiDialog.alert(msg, opts)Promise<void>title (défaut « Info »), ok (« OK »), danger
AubuiDialog.confirm(msg, opts)Promise<boolean>title (« Confirmer »), ok (« Confirmer »), cancel (« Annuler »), danger
AubuiDialog.prompt(msg, opts)Promise<string|null>title (« Saisie »), value, placeholder, ok (« Valider »), cancel, type: "password", multiline, danger. Une chaîne en 2ᵉ argument = value.
AubuiDialog.toast(msg, opts){ close() }Alias de AubuiToast.show.
  • Le message est toujours affiché en texte (échappé, retours à la ligne conservés) : pas de HTML.
  • prompt renvoie null si on annule (Échap, clic à côté, « Annuler ») ; Entrée valide (Ctrl/⌘+Entrée en multiligne).
  • window.alert(…) est redirigé vers la lightbox. confirm()/prompt() natifs sont synchrones et ne peuvent pas l’être : réécris-les en await AubuiDialog.confirm(…) ou utilise data-aub-confirm.

Toasts

JS
AubuiToast.success('Enregistré');
AubuiToast.error('Connexion perdue, réessaie.');          // reste 5,2 s au lieu de 3,2 s
AubuiToast.show('Note archivée', {
  kind: 'info',
  duration: 6000,                                      // 0 = ne disparaît pas seul
  action: { label: 'Annuler', onClick: () => restore() }
});
OptionEffet
kindsuccess · error · warning · info (alias acceptés : ok, danger, err, warn). Couleur du liseré gauche.
durationMillisecondes avant disparition. Défaut 3200, 5200 pour une erreur, 0 = permanent.
action{ label, onClick } : un bouton texte dans le toast (idéal pour « Annuler » après une action optimiste).

Pile en bas au centre, 4 toasts au plus (les plus anciens partent), pause au survol et au focus, bouton × pour fermer.

Confirmation sans JavaScript : data-aub-confirm

Sur un lien, un bouton ou un formulaire : le clic (ou l’envoi) est retenu, la lightbox s’ouvre, puis l’action d’origine est rejouée telle quelle si on valide. Géré par actions.js.

Lien confirmé
HTML
<form method="post" action="/contacts/delete"
      data-aub-confirm="Supprimer définitivement ce contact ?"
      data-aub-confirm-title="Supprimer"
      data-aub-confirm-ok="Supprimer"
      data-aub-danger
      onsubmit="return window.__aubConfirmBound ? true : confirm(this.dataset.aubConfirm)">
  <input type="hidden" name="csrf" value="…">
  <button type="submit" aub-btn danger>Supprimer</button>
</form>
AttributRôle
data-aub-confirmMessage (défaut « Confirmer cette action ? »).
data-aub-confirm-titleTitre de la lightbox.
data-aub-confirm-okLibellé du bouton de validation.
data-aub-dangerBouton rouge et focus initial sur « Annuler ».

Le onsubmit de repli ne sert que si Aubui n’est pas encore chargé : dans ce cas une confirmation native vaut mieux qu’une suppression sans question.

Événements et file d’attente

ÉlémentDétail
aubui:dialog-readyÉmis sur document quand dialog.js a remplacé la file d’attente et rejoué les appels.
AubuiDialog.__stubPrésent (true) tant que seule la file d’attente d’aubui.js existe.
RepliSi dialog.js ne charge pas, la file repasse sur les popups natives : aucune Promise ne reste bloquée.
Accessibilité
  • role="dialog", aria-modal="true", titre et message reliés par aria-labelledby/aria-describedby.
  • Focus piégé dans la boîte (Tab / Maj+Tab), Échap annule, le focus revient sur l’élément d’origine à la fermeture.
  • Avec danger, le focus démarre sur « Annuler » : Entrée ne détruit rien par réflexe.
  • Toasts annoncés aux lecteurs d’écran : région role="status" (polie), role="alert" pour les erreurs.
  • Animations coupées si « réduire les animations » est actif.
Aubui · design system AUBOTA · version 2026-10-19-3 · API figée · README · Une nouveauté Aubui = une section ici.