@@ -2,7 +2,12 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
22import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js" ;
33import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js" ;
44import {
5- isShow , isDown , isBackSpace , isSpace ,
5+ isShow ,
6+ isDown ,
7+ isBackSpace ,
8+ isSpace ,
9+ isLeft ,
10+ isRight ,
611} from "@ui5/webcomponents-base/dist/Keys.js" ;
712import "@ui5/webcomponents-icons/dist/icons/slim-arrow-down.js" ;
813import { isIE , isPhone } from "@ui5/webcomponents-base/dist/Device.js" ;
@@ -444,13 +449,33 @@ class MultiComboBox extends UI5Element {
444449 this . fireSelectionChange ( ) ;
445450 }
446451
447- _tokenizerFocusOut ( ) {
452+ _handleLeft ( ) {
453+ const cursorPosition = this . getDomRef ( ) . querySelector ( `input` ) . selectionStart ;
454+
455+ if ( cursorPosition === 0 ) {
456+ this . _focusLastToken ( ) ;
457+ }
458+ }
459+
460+ _focusLastToken ( ) {
461+ const lastTokenIndex = this . _tokenizer . tokens . length - 1 ;
462+
463+ if ( lastTokenIndex < 0 ) {
464+ return ;
465+ }
466+
467+ this . _tokenizer . tokens [ lastTokenIndex ] . focus ( ) ;
468+ this . _tokenizer . _itemNav . currentIndex = lastTokenIndex ;
469+ }
470+
471+ _tokenizerFocusOut ( event ) {
448472 const tokenizer = this . shadowRoot . querySelector ( "[ui5-tokenizer]" ) ;
449473 const tokensCount = tokenizer . tokens . length - 1 ;
450474
451- tokenizer . tokens . forEach ( token => { token . selected = false ; } ) ;
452-
453- this . _tokenizer . scrollToStart ( ) ;
475+ if ( ! event . relatedTarget || event . relatedTarget . localName !== "ui5-token" ) {
476+ this . _tokenizer . tokens . forEach ( token => { token . selected = false ; } ) ;
477+ this . _tokenizer . scrollToStart ( ) ;
478+ }
454479
455480 if ( tokensCount === 0 && this . _deleting ) {
456481 setTimeout ( ( ) => {
@@ -468,6 +493,10 @@ class MultiComboBox extends UI5Element {
468493 }
469494
470495 async _onkeydown ( event ) {
496+ if ( isLeft ( event ) ) {
497+ this . _handleLeft ( event ) ;
498+ }
499+
471500 if ( isShow ( event ) && ! this . readonly && ! this . disabled ) {
472501 event . preventDefault ( ) ;
473502 this . _toggleRespPopover ( ) ;
@@ -483,17 +512,22 @@ class MultiComboBox extends UI5Element {
483512 if ( isBackSpace ( event ) && event . target . value === "" ) {
484513 event . preventDefault ( ) ;
485514
515+ this . _focusLastToken ( ) ;
516+ }
517+
518+ this . _keyDown = true ;
519+ }
520+
521+ _onTokenizerKeydown ( event ) {
522+ if ( isRight ( event ) ) {
486523 const lastTokenIndex = this . _tokenizer . tokens . length - 1 ;
487524
488- if ( lastTokenIndex < 0 ) {
489- return ;
525+ if ( this . _tokenizer . tokens [ lastTokenIndex ] === document . activeElement . shadowRoot . activeElement ) {
526+ setTimeout ( ( ) => {
527+ this . shadowRoot . querySelector ( "input" ) . focus ( ) ;
528+ } , 0 ) ;
490529 }
491-
492- this . _tokenizer . tokens [ lastTokenIndex ] . focus ( ) ;
493- this . _tokenizer . _itemNav . currentIndex = lastTokenIndex ;
494530 }
495-
496- this . _keyDown = true ;
497531 }
498532
499533 _filterItems ( value ) {
0 commit comments