@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); // LucentUI size classes $sizeClasses = match($size) { 'sm' => 'px-2.5 py-1.5 text-sm', 'md' => 'px-3 py-2 text-sm', 'lg' => 'px-4 py-2.5 text-base', default => 'px-3 py-2 text-sm', }; $iconSizeClasses = match($size) { 'sm' => 'size-4', 'md' => 'size-4', 'lg' => 'size-5', default => 'size-4', }; // LucentUI input classes $inputClasses = "w-full bg-background border border-neutral rounded-lg text-base placeholder:text-base/50 focus:outline-none focus:ring-2 focus:ring-primary/50 focus:border-primary transition-all duration-200 $sizeClasses"; if ($error) { $inputClasses .= ' border-error focus:ring-error/50 focus:border-error'; } if ($disabled) { $inputClasses .= ' opacity-50 cursor-not-allowed'; } @endphp
only('class')->merge(['class' => 'mb-3']) }}> {{-- Label --}} @if($label) @endif {{-- Input wrapper --}} @if($icon || $prefix || $suffix)
{{-- Left icon/prefix --}} @if($icon && $iconPosition === 'left') @endif @if($prefix) {{ $prefix }} @endif {{-- Input --}} except('class')->merge(['class' => $inputClasses . ' rounded-none ' . ((!$icon || $iconPosition !== 'left') && !$prefix ? 'rounded-l-lg' : '') . ' ' . ((!$icon || $iconPosition !== 'right') && !$suffix ? 'rounded-r-lg' : '')]) }} > {{-- Right icon/suffix --}} @if($icon && $iconPosition === 'right') @endif @if($suffix) {{ $suffix }} @endif
@else {{-- Simple input without addon --}} except('class')->merge(['class' => $inputClasses]) }} > @endif {{-- Hint text --}} @if($hint && !$error) {{ $hint }} @endif {{-- Error message --}} @if($error)
{{ $error }}
@endif