@@ -2,7 +2,12 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js" ;
3
3
import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js" ;
4
4
import {
5
- isShow , isDown , isBackSpace , isSpace ,
5
+ isShow ,
6
+ isDown ,
7
+ isBackSpace ,
8
+ isSpace ,
9
+ isLeft ,
10
+ isRight ,
6
11
} from "@ui5/webcomponents-base/dist/Keys.js" ;
7
12
import "@ui5/webcomponents-icons/dist/icons/slim-arrow-down.js" ;
8
13
import { isIE , isPhone } from "@ui5/webcomponents-base/dist/Device.js" ;
@@ -444,13 +449,33 @@ class MultiComboBox extends UI5Element {
444
449
this . fireSelectionChange ( ) ;
445
450
}
446
451
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 ) {
448
472
const tokenizer = this . shadowRoot . querySelector ( "[ui5-tokenizer]" ) ;
449
473
const tokensCount = tokenizer . tokens . length - 1 ;
450
474
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
+ }
454
479
455
480
if ( tokensCount === 0 && this . _deleting ) {
456
481
setTimeout ( ( ) => {
@@ -468,6 +493,10 @@ class MultiComboBox extends UI5Element {
468
493
}
469
494
470
495
async _onkeydown ( event ) {
496
+ if ( isLeft ( event ) ) {
497
+ this . _handleLeft ( event ) ;
498
+ }
499
+
471
500
if ( isShow ( event ) && ! this . readonly && ! this . disabled ) {
472
501
event . preventDefault ( ) ;
473
502
this . _toggleRespPopover ( ) ;
@@ -483,17 +512,22 @@ class MultiComboBox extends UI5Element {
483
512
if ( isBackSpace ( event ) && event . target . value === "" ) {
484
513
event . preventDefault ( ) ;
485
514
515
+ this . _focusLastToken ( ) ;
516
+ }
517
+
518
+ this . _keyDown = true ;
519
+ }
520
+
521
+ _onTokenizerKeydown ( event ) {
522
+ if ( isRight ( event ) ) {
486
523
const lastTokenIndex = this . _tokenizer . tokens . length - 1 ;
487
524
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 ) ;
490
529
}
491
-
492
- this . _tokenizer . tokens [ lastTokenIndex ] . focus ( ) ;
493
- this . _tokenizer . _itemNav . currentIndex = lastTokenIndex ;
494
530
}
495
-
496
- this . _keyDown = true ;
497
531
}
498
532
499
533
_filterItems ( value ) {
0 commit comments