@@ -38,6 +38,8 @@ class DetailsMenuElement extends HTMLElement {
3838 }
3939
4040 const subscriptions = [
41+ fromEvent ( details , 'compositionstart' , e => trackComposition ( this , e ) ) ,
42+ fromEvent ( details , 'compositionend' , e => trackComposition ( this , e ) ) ,
4143 fromEvent ( details , 'click' , e => shouldCommit ( details , this , e ) ) ,
4244 fromEvent ( details , 'change' , e => shouldCommit ( details , this , e ) ) ,
4345 fromEvent ( details , 'keydown' , e => keydown ( details , this , e ) ) ,
@@ -49,7 +51,7 @@ class DetailsMenuElement extends HTMLElement {
4951 ...focusOnOpen ( details )
5052 ]
5153
52- states . set ( this , { subscriptions, loaded : false } )
54+ states . set ( this , { subscriptions, loaded : false , isComposing : false } )
5355 }
5456
5557 disconnectedCallback ( ) {
@@ -214,10 +216,12 @@ function commit(selected: Element, details: Element) {
214216
215217function keydown ( details : Element , menu : DetailsMenuElement , event : Event ) {
216218 if ( ! ( event instanceof KeyboardEvent ) ) return
217- const isSummaryFocused = event . target instanceof Element && event . target . tagName === 'SUMMARY'
218-
219219 // Ignore key presses from nested details.
220220 if ( details . querySelector ( 'details[open]' ) ) return
221+ const state = states . get ( menu )
222+ if ( ! state || state . isComposing ) return
223+
224+ const isSummaryFocused = event . target instanceof Element && event . target . tagName === 'SUMMARY'
221225
222226 switch ( event . key ) {
223227 case 'Escape' :
@@ -318,6 +322,12 @@ function labelHTML(el: ?Element): ?string {
318322 return contentsEl ? contentsEl . innerHTML : null
319323}
320324
325+ function trackComposition ( menu , event : Event ) {
326+ const state = states . get ( menu )
327+ if ( ! state ) return
328+ state . isComposing = event . type === 'compositionstart'
329+ }
330+
321331export default DetailsMenuElement
322332
323333if ( ! window . customElements . get ( 'details-menu' ) ) {
0 commit comments