|
73 | 73 | // This ensures that the floating element does not hide immediately when the mouse
|
74 | 74 | // moves from the reference element to the floating element.
|
75 | 75 | setTimeout(() => {
|
76 |
| - if (ev.type === 'mouseleave' && !elements.some(hasHover)) { |
| 76 | + if ((ev.type === 'mouseleave' || ev.type === 'pointerleave') && !elements.some(hasHover)) { |
77 | 77 | open = false;
|
78 | 78 | }
|
79 | 79 | }, 100);
|
|
128 | 128 | ['focusin', showHandler, focusable],
|
129 | 129 | ['focusout', hideHandler, focusable],
|
130 | 130 | ['click', showHandler, clickable],
|
131 |
| - ['mouseenter', showHandler, hoverable], |
132 |
| - ['mouseleave', hideHandler, hoverable] |
| 131 | + ['pointerenter', showHandler, hoverable], |
| 132 | + ['pointerleave', hideHandler, hoverable] |
133 | 133 | ];
|
134 | 134 |
|
135 | 135 | if (triggeredBy) triggerEls = [...document.querySelectorAll<HTMLElement>(triggeredBy)];
|
|
150 | 150 | console.error(`Popup reference not found: '${reference}'`);
|
151 | 151 | } else {
|
152 | 152 | if (focusable) referenceEl.addEventListener('focusout', hideHandler);
|
153 |
| - if (hoverable) referenceEl.addEventListener('mouseleave', hideHandler); |
| 153 | + if (hoverable) referenceEl.addEventListener('pointerleave', hideHandler); |
154 | 154 | }
|
155 | 155 | } else {
|
156 | 156 | referenceEl = triggerEls[0];
|
|
168 | 168 |
|
169 | 169 | if (referenceEl) {
|
170 | 170 | referenceEl.removeEventListener('focusout', hideHandler);
|
171 |
| - referenceEl.removeEventListener('mouseleave', hideHandler); |
| 171 | + referenceEl.removeEventListener('pointerleave', hideHandler); |
172 | 172 | }
|
173 | 173 |
|
174 | 174 | document.removeEventListener('click', closeOnClickOutside);
|
|
0 commit comments