@props([ 'id' => '', // unique ID 'class' => '', // extra CSS classes 'name' => '', // select name 'options' => [], // array of options, optgroups, or rich option defs 'selected' => null, // selected value (falls back to old()) 'placeholder' => '', // optional placeholder option (disabled) 'style' => '', // raw style string 'required' => false, // true/false or truthy value 'autocomplete' => '', ]) @php // prefer old() value if present, otherwise selected prop $current = old($name, $selected); $isSelected = function ($value) use ($current) { // cast to string so '1' and 1 match return (string) $value === (string) $current; }; $renderOption = function ($value, $label, $attrs = []) use ($isSelected) { $attrString = collect($attrs)->map(function ($v, $k) { if (is_bool($v)) return $v ? $k : ''; return $k.'="'.e($v).'"'; })->filter()->implode(' '); $selectedAttr = $isSelected($value) ? ' selected' : ''; return ''; }; @endphp