@@ -46,7 +46,7 @@ class DetailsMenuElement extends HTMLElement {
46
46
this . preload
47
47
? fromEvent ( details , 'mouseover' , ( ) => loadFragment ( details , this ) , { once : true } )
48
48
: NullSubscription ,
49
- focusOnOpen ( details )
49
+ ... focusOnOpen ( details )
50
50
]
51
51
52
52
states . set ( this , { subscriptions, loaded : false } )
@@ -63,14 +63,16 @@ class DetailsMenuElement extends HTMLElement {
63
63
}
64
64
65
65
const states = new WeakMap ( )
66
+
67
+ type Subscription = { unsubscribe ( ) : void }
66
68
const NullSubscription = { unsubscribe ( ) { } }
67
69
68
70
function fromEvent (
69
71
target : EventTarget ,
70
72
eventName : string ,
71
73
onNext : EventHandler ,
72
74
options : EventListenerOptionsOrUseCapture = false
73
- ) {
75
+ ) : Subscription {
74
76
target . addEventListener ( eventName , onNext , options )
75
77
return {
76
78
unsubscribe : ( ) => {
@@ -96,7 +98,7 @@ function loadFragment(details: Element, menu: DetailsMenuElement) {
96
98
}
97
99
}
98
100
99
- function focusOnOpen ( details : Element ) {
101
+ function focusOnOpen ( details : Element ) : Array < Subscription > {
100
102
let isMouse = false
101
103
const onmousedown = ( ) => ( isMouse = true )
102
104
const onkeydown = ( ) => ( isMouse = false )
@@ -106,17 +108,11 @@ function focusOnOpen(details: Element) {
106
108
if ( ! isMouse ) focusFirstItem ( details )
107
109
}
108
110
109
- details . addEventListener ( 'mousedown' , onmousedown )
110
- details . addEventListener ( 'keydown' , onkeydown )
111
- details . addEventListener ( 'toggle' , ontoggle )
112
-
113
- return {
114
- unsubscribe : ( ) => {
115
- details . removeEventListener ( 'mousedown' , onmousedown )
116
- details . removeEventListener ( 'keydown' , onkeydown )
117
- details . removeEventListener ( 'toggle' , ontoggle )
118
- }
119
- }
111
+ return [
112
+ fromEvent ( details , 'mousedown' , onmousedown ) ,
113
+ fromEvent ( details , 'keydown' , onkeydown ) ,
114
+ fromEvent ( details , 'toggle' , ontoggle )
115
+ ]
120
116
}
121
117
122
118
function closeCurrentMenu ( details : Element ) {
0 commit comments