@@ -27,6 +27,11 @@ export default function SearchableModelSelect({ value, onChange, capability, pla
2727 m . id . toLowerCase ( ) . includes ( query . toLowerCase ( ) )
2828 )
2929
30+ // Which item Enter will select — matches SearchableSelect behavior
31+ const enterTargetIndex = focusIndex >= 0 ? focusIndex
32+ : filtered . length > 0 ? 0
33+ : - 1
34+
3035 const commit = useCallback ( ( val ) => {
3136 setQuery ( val )
3237 onChange ( val )
@@ -39,6 +44,11 @@ export default function SearchableModelSelect({ value, onChange, capability, pla
3944 setOpen ( true )
4045 return
4146 }
47+ if ( ! open && e . key === 'Enter' ) {
48+ e . preventDefault ( )
49+ commit ( query )
50+ return
51+ }
4252 if ( ! open ) return
4353
4454 if ( e . key === 'ArrowDown' ) {
@@ -49,8 +59,8 @@ export default function SearchableModelSelect({ value, onChange, capability, pla
4959 setFocusIndex ( i => Math . max ( i - 1 , 0 ) )
5060 } else if ( e . key === 'Enter' ) {
5161 e . preventDefault ( )
52- if ( focusIndex >= 0 && focusIndex < filtered . length ) {
53- commit ( filtered [ focusIndex ] . id )
62+ if ( enterTargetIndex >= 0 ) {
63+ commit ( filtered [ enterTargetIndex ] . id )
5464 } else {
5565 commit ( query )
5666 }
@@ -96,9 +106,9 @@ export default function SearchableModelSelect({ value, onChange, capability, pla
96106 padding: 6px 10px;
97107 font-size: 0.8125rem;
98108 cursor: pointer;
99- white-space: nowrap ;
100- overflow: hidden ;
101- text-overflow: ellipsis ;
109+ display: flex ;
110+ align-items: center ;
111+ gap: 6px ;
102112 }
103113 .sms-item:hover, .sms-item.sms-focused {
104114 background: var(--color-bg-tertiary);
@@ -134,19 +144,25 @@ export default function SearchableModelSelect({ value, onChange, capability, pla
134144 { query ? 'No matching models — value will be used as-is' : 'No models available' }
135145 </ div >
136146 ) : (
137- filtered . map ( ( m , i ) => (
138- < div
139- key = { m . id }
140- className = { `sms-item${ i === focusIndex ? ' sms-focused' : '' } ${ m . id === value ? ' sms-active' : '' } ` }
141- onMouseEnter = { ( ) => setFocusIndex ( i ) }
142- onMouseDown = { ( e ) => {
143- e . preventDefault ( )
144- commit ( m . id )
145- } }
146- >
147- { m . id }
148- </ div >
149- ) )
147+ filtered . map ( ( m , i ) => {
148+ const isEnterTarget = i === enterTargetIndex
149+ return (
150+ < div
151+ key = { m . id }
152+ className = { `sms-item${ i === focusIndex || isEnterTarget ? ' sms-focused' : '' } ${ m . id === value ? ' sms-active' : '' } ` }
153+ onMouseEnter = { ( ) => setFocusIndex ( i ) }
154+ onMouseDown = { ( e ) => {
155+ e . preventDefault ( )
156+ commit ( m . id )
157+ } }
158+ >
159+ < span style = { { flex : 1 , overflow : 'hidden' , textOverflow : 'ellipsis' , whiteSpace : 'nowrap' } } > { m . id } </ span >
160+ { isEnterTarget && (
161+ < span style = { { color : 'var(--color-text-muted)' , fontSize : '0.75rem' , flexShrink : 0 } } > ↵</ span >
162+ ) }
163+ </ div >
164+ )
165+ } )
150166 ) }
151167 </ div >
152168 ) }
0 commit comments