@@ -524,7 +524,14 @@ class Tokenizer extends UI5Element implements IFormInputElement {
524524 }
525525
526526 this . _scrollToEndIfNeeded ( ) ;
527- this . _tokenDeleting = false ;
527+
528+ // Only reset _tokenDeleting if no token is currently marked for deletion
529+ // This prevents resetting the flag before the actual deletion logic executes
530+ const hasTokenToBeDeleted = this . _tokens . some ( token => token . toBeDeleted ) ;
531+
532+ if ( ! hasTokenToBeDeleted ) {
533+ this . _tokenDeleting = false ;
534+ }
528535
529536 // Update lastVisibleToken after rendering is complete to avoid render loops
530537 renderFinished ( ) . then ( ( ) => {
@@ -578,7 +585,7 @@ class Tokenizer extends UI5Element implements IFormInputElement {
578585 }
579586
580587 _tokenClickDelete ( e : CustomEvent < TokenDeleteEventDetail > , token : Token ) {
581- const tokens = this . _getVisibleTokens ( ) ;
588+ const tokens = this . _tokens ;
582589 const target = e . target as Token ;
583590 const deletedTokenIndex = token ? tokens . indexOf ( token ) : tokens . indexOf ( target ) ; // The index of the token that just got deleted
584591 const nextTokenIndex = deletedTokenIndex === tokens . length - 1 ? deletedTokenIndex - 1 : deletedTokenIndex + 1 ; // The index of the next token that needs to be focused next due to the deletion
@@ -607,7 +614,7 @@ class Tokenizer extends UI5Element implements IFormInputElement {
607614 * @param forwardFocusToPrevious Indicates whether the focus will be forwarded to previous or next token after deletion.
608615 */
609616 deleteToken ( token : Token , forwardFocusToPrevious ?: boolean ) {
610- const tokens = this . _getVisibleTokens ( ) ;
617+ const tokens = this . _tokens ;
611618 const deletedTokenIndex = tokens . indexOf ( token ) ;
612619 let nextTokenIndex = ( deletedTokenIndex === tokens . length - 1 ) ? deletedTokenIndex - 1 : deletedTokenIndex + 1 ;
613620 const notSelectedTokens = tokens . filter ( t => ! t . selected ) ;
@@ -698,7 +705,10 @@ class Tokenizer extends UI5Element implements IFormInputElement {
698705
699706 handleAfterClose ( ) {
700707 this . open = false ;
701- this . _preventCollapse = false ;
708+ // Don't reset _preventCollapse if we're in the middle of deleting a token
709+ if ( ! this . _tokenDeleting ) {
710+ this . _preventCollapse = false ;
711+ }
702712 this . _focusedElementBeforeOpen = null ;
703713 }
704714
@@ -1007,6 +1017,12 @@ class Tokenizer extends UI5Element implements IFormInputElement {
10071017
10081018 _onfocusout ( e : FocusEvent ) {
10091019 const relatedTarget = e . relatedTarget as HTMLElement ;
1020+ const tokenLosingFocus = e . target as Token ;
1021+
1022+ // If the token losing focus is being deleted, prevent collapse
1023+ if ( tokenLosingFocus ?. toBeDeleted ) {
1024+ this . _preventCollapse = true ;
1025+ }
10101026
10111027 this . _tokens . forEach ( token => {
10121028 token . forcedTabIndex = "-1" ;
@@ -1021,7 +1037,9 @@ class Tokenizer extends UI5Element implements IFormInputElement {
10211037 this . _skipTabIndex = false ;
10221038 }
10231039
1024- if ( ! this . _tokenDeleting && ! this . _preventCollapse ) {
1040+ const hasTokenToBeDeleted = this . _tokens . some ( token => token . toBeDeleted ) ;
1041+
1042+ if ( ! this . _tokenDeleting && ! this . _preventCollapse && ! hasTokenToBeDeleted ) {
10251043 this . _preventCollapse = false ;
10261044 this . expanded = false ;
10271045 }
0 commit comments