Skip to content
Snippets Groups Projects
Alert.php 1.31 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    declare(strict_types=1);
    
    namespace App\Views\Components;
    
    use ViewComponents\Component;
    
    class Alert extends Component
    {
        protected ?string $glyph = null;
    
        protected ?string $title = null;
    
        /**
         * @var 'default'|'success'|'danger'|'warning'
         */
        protected string $variant = 'default';
    
        public function render(): string
        {
            $variantClasses = [
                'default' => 'text-gray-800 bg-gray-100 border-gray-300',
    
                'success' => 'text-pine-900 bg-pine-100 border-pine-300',
    
                'danger' => 'text-red-900 bg-red-100 border-red-300',
                'warning' => 'text-yellow-900 bg-yellow-100 border-yellow-300',
            ];
    
            $glyph = $this->glyph === null ? '' : '<Icon glyph="' . $this->glyph . '" class="flex-shrink-0 mr-2 text-lg" />';
            $title = $this->title === null ? '' : '<div class="font-semibold">' . $this->title . '</div>';
            $class = 'inline-flex w-full p-2 text-sm border rounded ' . $variantClasses[$this->variant] . ' ' . $this->class;
    
    
            unset($this->attributes['slot']);
            unset($this->attributes['variant']);
    
            $attributes = stringify_attributes($this->attributes);
    
            return <<<HTML
    
                <div class="{$class}" role="alert" {$attributes}>{$glyph}<div>{$title}<p>{$this->slot}</p></div></div>