@@ -42,6 +42,7 @@ const Autocomplete = forwardRef<AutocompleteRef, AutocompleteProps & Omit<React.
4242 const [ active , setActive ] = useState < any | null > ( null )
4343 const [ take , setTake ] = useState ( viewCount )
4444 const [ filteredValues , setFilteredValues ] = useState < any [ ] > ( [ ] )
45+ const [ isFocused , setIsFocused ] = useState ( false )
4546 const txtInputRef = useRef < HTMLInputElement > ( null )
4647 const containerRef = useRef < HTMLDivElement > ( null )
4748
@@ -163,6 +164,14 @@ const Autocomplete = forwardRef<AutocompleteRef, AutocompleteProps & Omit<React.
163164 const keyDown = useCallback ( ( e : React . KeyboardEvent ) => {
164165 if ( e . shiftKey || e . ctrlKey || e . altKey ) return
165166
167+ // Handle backspace to remove last selected item in multiple mode
168+ if ( e . code === 'Backspace' && multiple && inputValue === '' && Array . isArray ( value ) && value . length > 0 ) {
169+ const newValues = value . slice ( 0 , - 1 )
170+ onChange ?.( newValues )
171+ e . preventDefault ( )
172+ return
173+ }
174+
166175 if ( ! expanded ) {
167176 if ( e . code === 'ArrowDown' ) {
168177 setExpanded ( true )
@@ -215,7 +224,7 @@ const Autocomplete = forwardRef<AutocompleteRef, AutocompleteProps & Omit<React.
215224 setExpanded ( false )
216225 }
217226 }
218- } , [ expanded , filteredValues , active , multiple , scrollActiveIntoView , onlyScrollActiveIntoViewIfNeeded ] )
227+ } , [ expanded , filteredValues , active , multiple , inputValue , value , onChange , scrollActiveIntoView , onlyScrollActiveIntoViewIfNeeded ] )
219228
220229 const toggle = useCallback ( ( expand : boolean ) => {
221230 setExpanded ( expand )
@@ -288,8 +297,9 @@ const Autocomplete = forwardRef<AutocompleteRef, AutocompleteProps & Omit<React.
288297 newValues . push ( option )
289298 }
290299 setActive ( null )
300+ setInputValue ( '' )
291301 onChange ?.( newValues )
292- // Don't clear input or close dropdown in multiple mode - keep it open for more selections
302+ // Don't close dropdown in multiple mode - keep it open for more selections
293303 } else {
294304 setInputValue ( '' )
295305 setExpanded ( false )
@@ -358,10 +368,15 @@ const Autocomplete = forwardRef<AutocompleteRef, AutocompleteProps & Omit<React.
358368 autoComplete = "off"
359369 spellCheck = "false"
360370 className = "p-0 dark:bg-transparent rounded-md border-none focus:!border-none focus:!outline-none"
361- style = { { boxShadow : 'none !important' , width : `${ inputValue . length + 1 } ch` } }
371+ style = { {
372+ boxShadow : 'none !important' ,
373+ width : ( isFocused || inputValue . length > 0 ) ? `${ inputValue . length + 1 } ch` : undefined
374+ } }
362375 value = { inputValue }
363376 onChange = { ( e ) => setInputValue ( e . target . value ) }
364- placeholder = { ! value || ( Array . isArray ( value ) && value . length === 0 ) ? placeholder : '' }
377+ placeholder = { ! isFocused && ( ! value || ( Array . isArray ( value ) && value . length === 0 ) ) ? placeholder : '' }
378+ onFocus = { ( ) => setIsFocused ( true ) }
379+ onBlur = { ( ) => setIsFocused ( false ) }
365380 onKeyDown = { keyDown }
366381 onKeyUp = { keyUp }
367382 onClick = { onInputClick }
0 commit comments