@@ -38,6 +38,8 @@ class DetailsMenuElement extends HTMLElement {
38
38
}
39
39
40
40
const subscriptions = [
41
+ fromEvent ( details , 'compositionstart' , e => trackComposition ( this , e ) ) ,
42
+ fromEvent ( details , 'compositionend' , e => trackComposition ( this , e ) ) ,
41
43
fromEvent ( details , 'click' , e => shouldCommit ( details , this , e ) ) ,
42
44
fromEvent ( details , 'change' , e => shouldCommit ( details , this , e ) ) ,
43
45
fromEvent ( details , 'keydown' , e => keydown ( details , this , e ) ) ,
@@ -49,7 +51,7 @@ class DetailsMenuElement extends HTMLElement {
49
51
...focusOnOpen ( details )
50
52
]
51
53
52
- states . set ( this , { subscriptions, loaded : false } )
54
+ states . set ( this , { subscriptions, loaded : false , isComposing : false } )
53
55
}
54
56
55
57
disconnectedCallback ( ) {
@@ -214,10 +216,12 @@ function commit(selected: Element, details: Element) {
214
216
215
217
function keydown ( details : Element , menu : DetailsMenuElement , event : Event ) {
216
218
if ( ! ( event instanceof KeyboardEvent ) ) return
217
- const isSummaryFocused = event . target instanceof Element && event . target . tagName === 'SUMMARY'
218
-
219
219
// Ignore key presses from nested details.
220
220
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'
221
225
222
226
switch ( event . key ) {
223
227
case 'Escape' :
@@ -318,6 +322,12 @@ function labelHTML(el: ?Element): ?string {
318
322
return contentsEl ? contentsEl . innerHTML : null
319
323
}
320
324
325
+ function trackComposition ( menu , event : Event ) {
326
+ const state = states . get ( menu )
327
+ if ( ! state ) return
328
+ state . isComposing = event . type === 'compositionstart'
329
+ }
330
+
321
331
export default DetailsMenuElement
322
332
323
333
if ( ! window . customElements . get ( 'details-menu' ) ) {
0 commit comments