@props([ 'label' => null, 'id' => null, 'name' => null, 'type' => 'text', 'placeholder' => null, 'hint' => null, 'error' => null, 'required' => false, 'disabled' => false, 'readonly' => false, 'prefix' => null, 'suffix' => null, 'icon' => null, 'iconPosition' => 'left', 'size' => 'md', ]) @php $inputId = $id ?? $name ?? Str::random(8); // Size classes $sizeClasses = match($size) { 'sm' => 'px-3 py-1.5 text-sm', 'md' => 'px-4 py-2 text-sm', 'lg' => 'px-4 py-2.5 text-base', default => 'px-4 py-2 text-sm', }; $iconSizeClasses = match($size) { 'sm' => 'size-4', 'md' => 'size-4', 'lg' => 'size-5', default => 'size-4', }; // Input base classes $baseClasses = 'w-full bg-background border rounded-lg transition-all duration-200 outline-none'; $focusClasses = 'focus:ring-2 focus:ring-primary/20 focus:border-primary'; $disabledClasses = $disabled ? 'opacity-50 cursor-not-allowed bg-neutral/5' : ''; $errorClasses = $error ? 'border-danger focus:ring-danger/20 focus:border-danger' : 'border-neutral/30'; // Padding adjustments for icons/affixes $paddingLeft = ($icon && $iconPosition === 'left') || $prefix ? 'pl-10' : ''; $paddingRight = ($icon && $iconPosition === 'right') || $suffix ? 'pr-10' : ''; $inputClasses = "$baseClasses $sizeClasses $focusClasses $disabledClasses $errorClasses $paddingLeft $paddingRight"; @endphp
{{ $hint }}
@endif {{-- Error message --}} @if($error)