@props([ 'variant' => 'info', 'title' => null, 'icon' => null, 'dismissible' => false, 'collapsible' => false, 'collapsed' => false, 'storageKey' => null, 'border' => true, 'callout' => false, ]) @php // AdminLTE variant classes $variantClasses = match($variant) { 'success' => $callout ? 'lte-callout lte-callout-success' : 'lte-alert lte-alert-success', 'danger', 'error' => $callout ? 'lte-callout lte-callout-danger' : 'lte-alert lte-alert-danger', 'warning' => $callout ? 'lte-callout lte-callout-warning' : 'lte-alert lte-alert-warning', 'info' => $callout ? 'lte-callout lte-callout-info' : 'lte-alert lte-alert-info', 'primary' => $callout ? 'lte-callout lte-callout-primary' : 'lte-alert lte-alert-primary', 'neutral' => $callout ? 'lte-callout' : 'lte-alert', default => $callout ? 'lte-callout lte-callout-info' : 'lte-alert lte-alert-info', }; // Default icons per variant $defaultIcon = match($variant) { 'success' => 'ri-checkbox-circle-fill', 'danger', 'error' => 'ri-error-warning-fill', 'warning' => 'ri-alert-fill', 'info' => 'ri-information-line', 'primary' => 'ri-information-line', 'neutral' => 'ri-information-line', default => 'ri-information-line', }; $alertIcon = $icon ?? $defaultIcon; $baseClasses = "$variantClasses lte-fade-in"; @endphp
merge(['class' => $baseClasses]) }} @if($dismissible || $collapsible) x-data="{ show: true, isCollapsed: {{ $collapsed ? 'true' : 'false' }}, init() { @if($storageKey) @if($dismissible) this.show = localStorage.getItem('{{ $storageKey }}-dismissed') !== 'true'; @endif @if($collapsible) this.isCollapsed = localStorage.getItem('{{ $storageKey }}-collapsed') === 'true'; @endif @endif }, dismiss() { this.show = false; @if($storageKey) localStorage.setItem('{{ $storageKey }}-dismissed', 'true'); @endif }, toggle() { this.isCollapsed = !this.isCollapsed; @if($storageKey) localStorage.setItem('{{ $storageKey }}-collapsed', this.isCollapsed); @endif } }" x-show="show" x-transition:enter="transition ease-out duration-300" x-transition:enter-start="opacity-0 transform -translate-y-2" x-transition:enter-end="opacity-100 transform translate-y-0" x-transition:leave="transition ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" @endif >
{{-- Icon --}} @if($alertIcon) @endif {{-- Content --}}
{{-- Header with title and controls --}} @if($title || $dismissible || $collapsible)
@if($title)

{{ $title }}

@endif
@if($collapsible) @endif @if($dismissible) @endif
@endif {{-- Body --}} @if($collapsible)
{{ $slot }}
@else
{{ $slot }}
@endif
{{-- Actions slot --}} @if(isset($actions))
{{ $actions }}
@endif