diff --git a/packages/core/src/browser/style/select-component.css b/packages/core/src/browser/style/select-component.css index c4c2883e7b8ef..7fc353e6dc8d2 100644 --- a/packages/core/src/browser/style/select-component.css +++ b/packages/core/src/browser/style/select-component.css @@ -47,6 +47,7 @@ outline: var(--theia-focusBorder) solid 1px; outline-offset: -1px; user-select: none; + overflow: auto; } .theia-select-component-dropdown .theia-select-component-option { diff --git a/packages/core/src/browser/widgets/select-component.tsx b/packages/core/src/browser/widgets/select-component.tsx index 821413ba4900d..576f78abb99e8 100644 --- a/packages/core/src/browser/widgets/select-component.tsx +++ b/packages/core/src/browser/widgets/select-component.tsx @@ -53,6 +53,7 @@ export const SELECT_COMPONENT_CONTAINER = 'select-component-container'; export class SelectComponent extends React.Component { protected dropdownElement: HTMLElement; protected fieldRef = React.createRef(); + protected dropdownRef = React.createRef(); protected mountedListeners: Map = new Map(); protected optimalWidth = 0; protected optimalHeight = 0; @@ -124,8 +125,10 @@ export class SelectComponent extends React.Component { - this.hide(); + const hide = (event: MouseEvent) => { + if (!this.dropdownRef.current?.contains(event.target as Node)) { + this.hide(); + } }; this.mountedListeners.set('scroll', hide); this.mountedListeners.set('wheel', hide); @@ -317,8 +320,9 @@ export class SelectComponent extends React.Component + }} ref={this.dropdownRef}> {items} ; }