@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
only('class')->merge(['class' => 'flex flex-col gap-1.5']) }}> {{-- Label --}} @if($label) @endif {{-- Input wrapper --}}
{{-- Left icon --}} @if($icon && $iconPosition === 'left')
@endif {{-- Prefix --}} @if($prefix)
{{ $prefix }}
@endif {{-- Input --}} except('class')->merge(['class' => $inputClasses]) }} > {{-- Right icon --}} @if($icon && $iconPosition === 'right')
@endif {{-- Suffix --}} @if($suffix)
{{ $suffix }}
@endif
{{-- Hint text --}} @if($hint && !$error)

{{ $hint }}

@endif {{-- Error message --}} @if($error)

{{ $error }}

@endif