Skip to content

Toast

A notification toast component with auto-dismiss and Alpine.js integration.

Alpine.js Required

This component requires Alpine.js to be loaded in your layout for toast notifications. See the installation guide for setup instructions.

Basic Usage

blade
<x-basekit-ui::toast variant="success" title="Saved!" message="Your changes have been saved." />

Props

PropTypeDefaultDescription
variantstring'info'Toast style variant
durationint3000Auto-dismiss duration in ms (0 to disable)
is-dismissiblebooltrueShow the manual dismiss (×) button
titlestringnullToast title text
messagestringnullToast body text (alternative to default slot)
iconstringnullHeroicon name (defaults to variant icon)

Slots

SlotDescription
defaultToast body content (overrides message prop)
iconCustom icon SVG (overrides icon prop and default)
titleCustom title content (overrides title prop)
actionsAction buttons rendered below the message

Variants

Supported variants: primary, secondary, success, warning, danger, info, ghost.

blade
<x-basekit-ui::toast variant="primary" title="Primary update" message="A key announcement for all users." :duration="0" />
<x-basekit-ui::toast variant="secondary" title="Secondary notice" message="Background sync completed successfully." :duration="0" />
<x-basekit-ui::toast variant="info" title="Update available" message="Version 2.0 is ready." :duration="0" />
<x-basekit-ui::toast variant="success" title="Changes saved" message="Your settings have been updated." :duration="0" />
<x-basekit-ui::toast variant="warning" title="Storage almost full" message="You're using 95% of your storage." :duration="0" />
<x-basekit-ui::toast variant="danger" title="Connection failed" message="Unable to reach the server." :duration="0" />
<x-basekit-ui::toast variant="ghost" title="Ghost note" message="This is a lightweight, low-emphasis toast." :duration="0" />

With Icons

With Heroicon

Pass any Heroicon name via the icon prop:

blade
<x-basekit-ui::toast variant="info" icon="bell" title="New message" message="You have 3 notifications." />

Using Icon Slot

blade
<x-basekit-ui::toast variant="success" title="Milestone reached" message="You've completed 100 tasks!">
    <x-slot:icon>
        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
            <path stroke-linecap="round" stroke-linejoin="round"
                d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
        </svg>
    </x-slot:icon>
</x-basekit-ui::toast>

With Actions

blade
<x-basekit-ui::toast variant="warning" title="Connection lost" message="Reconnecting to server..." :duration="0">
    <x-slot:actions>
        <x-basekit-ui::button size="sm" variant="ghost">Retry</x-basekit-ui::button>
    </x-slot:actions>
</x-basekit-ui::toast>

Duration

blade
{{-- Auto-dismiss after 5 seconds --}}
<x-basekit-ui::toast variant="success" message="Saved!" :duration="5000" />

{{-- Never auto-dismiss --}}
<x-basekit-ui::toast variant="info" message="Please read this carefully." :duration="0" />

Toast Container

For positioning multiple toasts (e.g. flash messages):

blade
<div class="fixed top-4 right-4 z-50 space-y-2">
    @if(session('success'))
        <x-basekit-ui::toast variant="success" :message="session('success')" />
    @endif

    @if(session('error'))
        <x-basekit-ui::toast variant="danger" :message="session('error')" />
    @endif
</div>

Custom Classes

Override or extend styles with the class attribute:

blade
<x-basekit-ui::toast
    variant="success"
    message="Profile updated"
    class="mt-2"
/>

CSS Variables

Customize toast appearance via CSS variables:

css
:root {
  /* Toast - Base */
  --toast-radius: var(--radius-md);
  --toast-shadow:
    0 4px 12px -2px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04);

  /* Toast - Variants */
  --toast-bg-primary: var(--color-primary-50);
  --toast-text-primary: var(--color-primary-900);
  --toast-border-primary: var(--color-primary-500);

  --toast-bg-info: var(--color-info-50);
  --toast-text-info: var(--color-info-900);
  --toast-border-info: var(--color-info-500);

  --toast-bg-secondary: var(--color-slate-50);
  --toast-text-secondary: var(--color-slate-900);
  --toast-border-secondary: var(--color-slate-400);

  --toast-bg-success: var(--color-success-50);
  --toast-text-success: var(--color-success-900);
  --toast-border-success: var(--color-success-500);

  --toast-bg-warning: var(--color-warning-50);
  --toast-text-warning: var(--color-warning-900);
  --toast-border-warning: var(--color-warning-500);

  --toast-bg-danger: var(--color-danger-50);
  --toast-text-danger: var(--color-danger-900);
  --toast-border-danger: var(--color-danger-500);

  --toast-bg-ghost: transparent;
  --toast-text-ghost: var(--color-slate-700);
  --toast-border-ghost: transparent;
}

Configuration

Configure defaults in config/basekit-laravel-ui.php:

php
'toast' => [
    'enabled' => true,
    'variants' => ['primary', 'secondary', 'success', 'warning', 'danger', 'info', 'ghost'],
    'default_variant' => 'info',
],

Released under the MIT License.