@props([ // Identificador único 'uid' => uniqid(), // Modelo de Livewire (si aplica) 'model' => '', // Etiqueta y clases de la etiqueta 'label' => '', 'labelClass' => '', // Clases generales 'align' => 'start', 'size' => '', // Tamaño del select (small, large) 'mb0' => false, // Remover margen inferior 'parentClass' => '', // Activar Select2 automáticamente 'select2' => false, // Prefijos y sufijos en input-group 'prefixLabel' => null, 'suffixLabel' => null, 'buttonBefore' => null, 'buttonAfter' => null, // Diseño de disposición (columnas) 'inline' => false, 'labelCol' => 4, 'inputCol' => 8, // Texto de ayuda 'helperText' => '', // Opciones del select 'options' => [], // Atributos adicionales 'attributes' => new \Illuminate\View\ComponentAttributeBag([]), ]) @php // **Configuración de valores base** $livewireModel = $attributes->get('wire:model', $model); $name = $attributes->get('name', $livewireModel); $inputId = $attributes->get('id', $name . '_' . $uid); $placeholder = $attributes->get('placeholder', 'Seleccione ' . strtolower($label)); $selected = $attributes->get('selected', null); // **Manejo de errores** $errorKey = $livewireModel ?: $name; $hasError = $errors->has($errorKey); $errorClass = $hasError ? 'is-invalid' : ''; // **Clases dinámicas** $select2Class = $select2 ? 'select2' : ''; // Agrega la clase `select2` si está habilitado $sizeClass = match ($size) { 'sm' => 'form-select-sm', 'lg' => 'form-select-lg', default => '', }; $alignClass = match ($align) { 'center' => 'text-center', 'end' => 'text-end', default => '', }; // **Construcción de clases dinámicas** $fullClass = trim("form-select $select2Class $sizeClass $alignClass $errorClass"); $fullLabelClass = trim(($inline ? 'col-form-label col-md-' . $labelCol : 'form-label') . ' ' . $labelClass); $containerClass = trim(($inline ? 'row' : '') . ' fv-row ' . ($mb0 ? '' : 'mb-4') . " $alignClass $parentClass"); // **Fusionar atributos con clases dinámicas** $selectAttributes = $attributes->merge([ 'id' => $inputId, 'name' => $name, ])->class($fullClass); // **Detectar si se necesita input-group** $requiresInputGroup = $prefixLabel || $suffixLabel || $buttonBefore || $buttonAfter; @endphp
{{-- Etiqueta del select --}} @if($label) @endif @if($inline)
@endif {{-- Input Group (Si tiene prefijo/sufijo) --}} @if ($requiresInputGroup)
@isset($buttonBefore) @endisset @if($prefixLabel) @endif {{-- Select --}} @if($suffixLabel) @endif @isset($buttonAfter) @endisset
@else {{-- Select sin prefijo/sufijo --}} @endif {{-- Texto de ayuda --}} @isset($helperText)
{{ $helperText }}
@endisset {{-- Errores de validación --}} @if ($hasError) {{ $errors->first($errorKey) }} @endif @if($inline)
@endif