@props([ 'uid' => uniqid(), 'model' => '', 'label' => '', 'labelClass' => '', 'class' => '', 'align' => 'start', 'size' => '', 'mb-0' => false, 'parentClass' => '', 'prefix' => null, 'suffix' => null, 'icon' => null, 'clickableIcon' => null, 'inline' => false, 'labelCol' => 4, 'inputCol' => 8, 'floatLabel' => false, 'helperText' => '', 'attributes' => new \Illuminate\View\ComponentAttributeBag([]), // Atributos adicionales ]) @php // Configuración dinámica de atributos y clases CSS $livewireModel = $attributes->get('wire:model', $model); // Permitir uso directo de wire:model en el atributo $name = $name ?: $livewireModel; // Si no se proporciona el nombre, toma el nombre del modelo $inputId = $id ?: ($uid ? $name . '_' . $uid : $name); // ID generado si no se proporciona uno // Obtener los atributos actuales en un array $attributesArray = array_merge([ 'type' => $type, 'id' => $inputId, 'name' => $name, ]); // Agregar wire:model solo si existe if ($livewireModel) { $attributesArray['wire:model'] = $livewireModel; } $attributesArray = array_merge($attributesArray, $attributes->getAttributes()); // Reconstruir el ComponentAttributeBag con los atributos modificados $inputAttributes = new \Illuminate\View\ComponentAttributeBag($attributesArray); dump($inputAttributes); // Manejo de errores de validación $errorKey = $livewireModel ?: $name; $errorClass = $errors->has($errorKey) ? 'is-invalid' : ''; // Definir el tamaño del input basado en la clase seleccionada $sizeClass = $size === 'small' ? 'form-control-sm' : ($size === 'large' ? 'form-control-lg' : ''); // Alineación del texto $alignClass = match ($align) { 'center' => 'text-center', 'end' => 'text-end', default => '' }; // Clases combinadas para el input $fullClass = trim("form-control $sizeClass $alignClass $errorClass $class"); // Detectar si se necesita usar input-group $requiresInputGroup = $prefix || $suffix || $icon || $clickableIcon; @endphp {{-- Input oculto sin estilos --}} @if($type === 'hidden') @elseif($floatLabel) {{-- Input con etiqueta flotante --}}