BjToast

Conteneur de toasts Vue. La prop position fixe le coin d’affichage ; la ref du composant expose add, remove et toasts. Le composable useToast() expose la même API pour une logique sans conteneur DSBJ.

Utilisation

<script setup>
import { ref } from 'vue'
import { BjButton, BjToast } from '@flrxnt/dsbj/vue'

const toastRef = ref<InstanceType<typeof BjToast> | null>(null)

function notify() {
  toastRef.value?.add({
    title: 'Succès',
    text: 'Le document a été validé.',
    type: 'success',
    duration: 5000,
  })
}
</script>

<template>
  <BjButton @click="notify">Notifier</BjButton>
  <BjToast ref="toastRef" />
</template>

Aperçu (déclaratif)

position : les quatre valeurs

<!-- Valeurs possibles (une par instance montée typiquement) -->
<BjToast position="top-right" />
<BjToast position="top-left" />
<BjToast position="bottom-right" />
<BjToast position="bottom-left" />

Options de add()

toastRef.value?.add({ text: 'Info', type: 'info' })
toastRef.value?.add({ text: 'OK', type: 'success', title: 'Titre' })
toastRef.value?.add({ text: 'Attention', type: 'warning' })
toastRef.value?.add({ text: 'Erreur', type: 'error', duration: 0 })

Combinaisons position × type de toast

Montez un BjToast par coin si besoin ; dans chaque instance, add() choisit le type (couleur + icône) indépendamment de position.

<!-- Coin bas-gauche + succès -->
<BjToast ref="toastBL" position="bottom-left" />
<!-- puis toastBL.add({ text: '…', type: 'success' }) -->

<!-- Coin haut-droit + erreur persistante -->
<BjToast ref="toastTR" position="top-right" />
<!-- toastTR.add({ text: '…', type: 'error', duration: 0 }) -->

Aperçu HTML (conteneur + types)

success

v-model

Pas de v-model : la pile est gérée par add() / remove() sur la ref.

Slots

Pas de slots : le rendu est entièrement piloté par la liste interne toasts.

Expose (ref)

MembreDescription
addadd(options) : ajoute un toast ; options avec text obligatoire, type, title et duration optionnels ; retourne l’id.
removeremove(id) : retire un toast (animation de sortie puis suppression).
toaststoasts : ref réactive sur la liste affichée par ce BjToast.
<script setup>
import { ref, watch } from 'vue'
import { BjToast } from '@flrxnt/dsbj/vue'

const tref = ref<InstanceType<typeof BjToast> | null>(null)

watch(
  () => tref.value?.toasts,
  (list) => console.log('Nombre de toasts', list?.length),
  { deep: true }
)
</script>

<template>
  <BjToast ref="tref" />
</template>

Composable useToast()

Import depuis @flrxnt/dsbj/vue. Instance distincte de celle interne à chaque BjToast : utilisez soit la ref du BjToast pour afficher dans le DSBJ, soit useToast() seul pour brancher votre propre rendu.

<script setup>
import { BjButton, useToast } from '@flrxnt/dsbj/vue'

const { add, remove, toasts } = useToast()

function ping() {
  const id = add({ text: 'Sans BjToast', type: 'info', duration: 3000 })
  setTimeout(() => remove(id), 1000)
}
</script>

<template>
  <BjButton @click="ping">Tester useToast</BjButton>
  <!-- À vous de rendre toasts.value si vous n’utilisez pas BjToast -->
</template>

Props

PropDescription
positionPosition du conteneur : top-right (défaut), top-left, bottom-right, bottom-left (classe bj-toast-container--…).