@@ -11,7 +11,6 @@ type SelectedItem = {
11
11
label : string | null | undefined
12
12
value : string | null | undefined
13
13
inputName : string | null | undefined
14
- element : SelectPanelItem
15
14
}
16
15
17
16
const validSelectors = [ '[role="option"]' ]
@@ -382,6 +381,7 @@ export class SelectPanelElement extends HTMLElement {
382
381
}
383
382
}
384
383
}
384
+
385
385
this . #updateInput( )
386
386
}
387
387
@@ -396,7 +396,6 @@ export class SelectPanelElement extends HTMLElement {
396
396
value,
397
397
label : itemContent . querySelector ( '.ActionListItem-label' ) ?. textContent ?. trim ( ) ,
398
398
inputName : itemContent . getAttribute ( 'data-input-name' ) ,
399
- element : item ,
400
399
} )
401
400
}
402
401
}
@@ -632,7 +631,8 @@ export class SelectPanelElement extends HTMLElement {
632
631
const item = this . visibleItems [ 0 ] as HTMLLIElement | null
633
632
634
633
if ( item ) {
635
- this . #handleItemActivated( item , false )
634
+ const itemContent = this . #getItemContent( item )
635
+ if ( itemContent ) itemContent . click ( )
636
636
}
637
637
} else if ( key === 'ArrowDown' ) {
638
638
const item = ( this . focusableItem || this . #getItemContent( this . visibleItems [ 0 ] ) ) as HTMLLIElement
@@ -645,13 +645,15 @@ export class SelectPanelElement extends HTMLElement {
645
645
const item = this . visibleItems [ 0 ] as HTMLLIElement | null
646
646
647
647
if ( item ) {
648
- this . #getItemContent( item ) ! . focus ( )
648
+ const itemContent = this . #getItemContent( item )
649
+ if ( itemContent ) itemContent . focus ( )
649
650
event . preventDefault ( )
650
651
}
651
652
} else if ( key === 'End' ) {
652
653
if ( this . visibleItems . length > 0 ) {
653
654
const item = this . visibleItems [ this . visibleItems . length - 1 ] as HTMLLIElement
654
- this . #getItemContent( item ) ! . focus ( )
655
+ const itemContent = this . #getItemContent( item )
656
+ if ( itemContent ) itemContent . focus ( )
655
657
event . preventDefault ( )
656
658
}
657
659
}
@@ -838,7 +840,7 @@ export class SelectPanelElement extends HTMLElement {
838
840
dialog . addEventListener ( 'cancel' , handleDialogClose , { signal} )
839
841
}
840
842
841
- #handleItemActivated( item : SelectPanelItem , shouldClose : boolean = true ) {
843
+ #handleItemActivated( item : SelectPanelItem ) {
842
844
// Hide popover after current event loop to prevent changes in focus from
843
845
// altering the target of the event. Not doing this specifically affects
844
846
// <a> tags. It causes the event to be sent to the currently focused element
@@ -847,7 +849,7 @@ export class SelectPanelElement extends HTMLElement {
847
849
// works fine.
848
850
if ( this . selectVariant !== 'multiple' ) {
849
851
setTimeout ( ( ) => {
850
- if ( this . open && shouldClose ) {
852
+ if ( this . open ) {
851
853
this . hide ( )
852
854
}
853
855
} )
@@ -872,10 +874,13 @@ export class SelectPanelElement extends HTMLElement {
872
874
const itemContent = this . #getItemContent( item )
873
875
874
876
if ( this . selectVariant === 'single' ) {
875
- const element = this . selectedItems [ 0 ] ?. element
877
+ const value = this . selectedItems [ 0 ] ?. value
878
+ const element = this . visibleItems . find ( el => this . #getItemContent( el ) ?. getAttribute ( 'data-value' ) === value )
879
+
876
880
if ( element ) {
877
881
this . #getItemContent( element ) ?. setAttribute ( this . ariaSelectionType , 'false' )
878
882
}
883
+
879
884
this . #selectedItems. clear ( )
880
885
881
886
// Only check, never uncheck here. Single-select mode does not allow unchecking a checked item.
0 commit comments