Toast

Push notifications to your visitors with BToast and BToastOrchestrator. These are components that are easily customizable for generating alert messages

Toasts are lightweight notifications designed to mimic the push notifications that have been popularized by mobile and desktop operating systems. Toasts are intended to be small interruptions to your visitors or users and therefore should contain minimal, to-the-point, non-interactive content. Please refer to the Accessibility Tips section below for important usage information

Overview

This section only refers to using the raw component variation. Often times, Toasts are generated in a global context programatically, like showing a success message after saving a form. That functionality is covered under the composable docs here

The component variation is shown by using the v-model like so

HTML
vue
<template>
  <BToast v-model="active" variant="info">
    <template #title> Title </template>
    Body
  </BToast>
</template>

<script setup lang="ts">
const isActive = ref(false)
</script>

By default Toasts are rendered in place. You can use Vue's Teleport to change the location, commonly to body

Positioning

In combination with Teleport, you can render Toasts above the page, and in specific locations. You will need to create a wrapper component around said Toast to declare its location

HTML
vue
<template>
  <template v-for="(pos, index) in values" :key="index">
    <BButton @click="values[index] = !values[index]">
      {{ locations[index] }}
    </BButton>
    <Teleport to="body">
      <div :class="locations[index]" class="toast-container position-fixed p-3">
        <BToast v-model="values[index]">
          <template #title> Title </template>
          {{ locations[index] }}
        </BToast>
      </div>
    </Teleport>
  </template>
</template>

<script setup lang="ts">
const locations = [
  'top-0 start-0',
  'top-0 start-50 translate-middle-x',
  'top-0 end-0',
  'top-50 start-0 translate-middle-y',
  'top-50 start-50 translate-middle',
  'top-50 end-0 translate-middle-y',
  'bottom-0 start-0',
  'bottom-0 start-50 translate-middle-x',
  'bottom-0 end-0',
]

const values = ref(Array.from({length: locations.length}, () => false))
</script>

Static placement

You can place toasts in static placements, and with more control by using them directly. Although, it is more uncommon

HTML
template
<BToast v-model="active" variant="info">
  <template #title>
    Title
  </template>
    Body
</BToast>
<BButton @click="active = !active">Toggle</BButton>
HTML
vue
<template>
  <BButton
    @click="
      show?.({
        props: {
          title: 'Counting down!',
          variant: 'info',
          pos: 'middle-center',
          value: 10000,
          progressProps: {
            variant: 'danger',
          },
          body: 'Watch me!',
        },
      })
    "
  >
    Show
  </BButton>
</template>
HTML
vue
<template>
  <BButton
    @click="
      show?.({props: {href: 'https://getbootstrap.com/', target: '_blank', body: 'I am a BLink'}})
    "
  >
    Show
  </BButton>
</template>

<script setup lang="ts">
const {show} = useToastController()
</script>

Component Reference

PropTypeDefaultDescription
bg-variantColorVariant | nullnull
bodystringundefined The text content of the body
body-classClassValueundefined CSS class (or classes) to add to the toast body element
close-classClassValueundefined Applies one or more custom classes to the close button
close-contentstringundefined Sets the text of the close button. The `close` slot takes precedence
close-labelstring'Close' Sets the aria-label attribute on the close button
close-variantstring | nullnull Color variant for the close button
header-classClassValueundefined CSS class (or classes) to add to the toast header element
header-tagstring'div' Specify the HTML tag to render instead of the default tag for the footer
idstringundefined Used to set the `id` attribute on the rendered content, and used as the base to generate any additional element IDs as needed
initial-animationbooleanfalse When set, enables the initial animation on mount
intervalnumber | requestAnimationFrame'requestAnimationFrame' The interval of which the countdown timer will refresh itself
is-statusbooleanfalse When set to 'true', makes the toast have attributes aria-live=polite and role=status. When 'false' aria-live will be 'assertive' and role will be 'alert'
lazybooleanfalse When set, the content will not be mounted until opened
model-valueboolean | numberfalse Sets if the toast is visible or the number of milliseconds that the toast will be dismissed
no-animationbooleanfalse When set, disables the animation
no-close-buttonbooleanfalse When set, hides the close button in the toast header
no-fadebooleanfalse Alias for `noAnimation`
no-hover-pausebooleanfalse When set to true, disables pausing the timer on hover behavior
no-resume-on-hover-leavebooleanfalse When set to true, the timer will not resume when the mouse leaves the element. It will need to be manually resumed
progress-propsOmit<BProgressBarProps, 'label' | 'max' | 'value'>undefined The properties to define the progress bar in the toast. No progress will be shown if left undefined
showbooleanfalse When set, and prop 'visible' is false on mount, will animate from closed to open on initial mount. Mainly to help with template show. Use model-value for reactive show/hide
show-on-pausebooleantrue When set, keeps the toast visible when it's paused
solidbooleanfalse When set, renders the toast with a solid background rather than translucent
text-variantTextColorVariant | nullnull
titlestringundefined The toast's title text
toast-classClassValueundefined CSS class (or classes) to add to the toast wrapper element
trans-propsTransitionPropsundefined Transition properties
unmount-lazybooleanfalse When set and `lazy` is true, the content will be unmounted when closed
variantColorVariant | nullnull Applies one of the Bootstrap theme color variants to the component. When implemented `bg-variant` and `text-variant` will take precedence
visiblebooleanfalse When 'true', open without animation
Extensions:
EventArgsDescription
close
value: BvTriggerableEvent
close-countdown
value: number
destroyed
destroyed: string
hidden
value: BvTriggerableEvent
hide
value: BvTriggerableEvent
hide-prevented
show
value: BvTriggerableEvent
show-prevented
shown
value: BvTriggerableEvent
update:model-value
value: Boolean - The resulting value that was changed
Emitted when toast visibility changes

<BToastOrchestrator>

PropTypeDefaultDescription
append-toastundefined
teleport-disabledbooleanfalse Renders the Toaster in the exact place it was defined
teleport-tostring | RendererElement | null | undefined'body' Overrides the default teleport location