@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