{{-- ShiftBridge Toast/Alert Component Usage: Default alert message Success message Error message Warning message Info message With title Can be dismissed With icon With action Props: - variant: string (default, success, error, warning, info) - title: string (alert title) - closable: boolean (show close button) - icon: string (icon name override) - action: string (action button text) - actionUrl: string (action button URL) - solid: boolean (solid background instead of subtle) --}} @props([ 'variant' => 'default', 'title' => null, 'closable' => false, 'icon' => null, 'action' => null, 'actionUrl' => null, 'solid' => false, ]) @php // Icon mapping based on variant $variantIcon = match($variant) { 'success' => 'check-circle', 'error', 'danger' => 'alert-circle', 'warning' => 'alert-triangle', 'info' => 'info', default => 'bell', }; $displayIcon = $icon ?? $variantIcon; // Colors based on variant and solid option if ($solid) { $colors = match($variant) { 'success' => ['bg' => 'bg-[var(--sb-success)]', 'text' => 'text-white', 'icon' => 'text-white'], 'error', 'danger' => ['bg' => 'bg-[var(--sb-danger)]', 'text' => 'text-white', 'icon' => 'text-white'], 'warning' => ['bg' => 'bg-[var(--sb-warning)]', 'text' => 'text-white', 'icon' => 'text-white'], 'info' => ['bg' => 'bg-[var(--sb-info)]', 'text' => 'text-white', 'icon' => 'text-white'], default => ['bg' => 'bg-[var(--sb-navy)]', 'text' => 'text-white', 'icon' => 'text-white'], }; } else { $colors = match($variant) { 'success' => ['bg' => 'bg-[var(--sb-success-bg)]', 'text' => 'text-[var(--sb-success)]', 'icon' => 'text-[var(--sb-success)]', 'border' => 'border-[var(--sb-success)]/20'], 'error', 'danger' => ['bg' => 'bg-[var(--sb-danger-bg)]', 'text' => 'text-[var(--sb-danger)]', 'icon' => 'text-[var(--sb-danger)]', 'border' => 'border-[var(--sb-danger)]/20'], 'warning' => ['bg' => 'bg-[var(--sb-warning-bg)]', 'text' => 'text-[var(--sb-warning)]', 'icon' => 'text-[var(--sb-warning)]', 'border' => 'border-[var(--sb-warning)]/20'], 'info' => ['bg' => 'bg-[var(--sb-info-bg)]', 'text' => 'text-[var(--sb-info)]', 'icon' => 'text-[var(--sb-info)]', 'border' => 'border-[var(--sb-info)]/20'], default => ['bg' => 'bg-slate-100', 'text' => 'text-slate-700', 'icon' => 'text-slate-500', 'border' => 'border-slate-200'], }; } $borderClass = $solid ? '' : ($colors['border'] ?? 'border') . ' border'; // Icon SVG $iconSvg = match($displayIcon) { 'check-circle' => '', 'alert-circle' => '', 'alert-triangle' => '', 'info' => '', 'bell' => '', 'check' => '', 'x' => '', default => null, }; // Close icon $closeIcon = ''; @endphp