This PR fixes a problem where a popover would close when selecting a listbox item from a nested listbox.
When selecting an item from a nested listbox, the click event's target property differs depending on the OS the browser is running on. While the browser on MacOS sets the target to the actual element I clicked on, on Windows it sets the target to another element (in my case this was the portal root element).
This behavior seems to be browser-independent, but I only tested this for Edge and Safari on MacOS and Edge and Chrome on Windows.
This PR avoids this problem altogether by changing the event the listbox item listens to from mousedown to click. This way, the event listener registered by the closeOnDismiss() method does not run, because the event gets correctly cancelled by the listbox item. Before, the listbox item only cancelled the mousedown event triggered by the click, but not the click event.
The tests are passing on both MacOS and Windows.
This PR also adds an event listener to elements using OpenClose functionality, so that non-HTMLButtonElements behave identical to actual HTMLButtonElements.
MDN says that click is triggerd by touch devices. Also, the spec says that using click is encouraged over other mouse events such as mousedown for implementing custom ui elements so I think we are safe here.
This PR fixes a problem where a popover would close when selecting a listbox item from a nested listbox.
When selecting an item from a nested listbox, the click event's
target
property differs depending on the OS the browser is running on. While the browser on MacOS sets thetarget
to the actual element I clicked on, on Windows it sets thetarget
to another element (in my case this was the portal root element). This behavior seems to be browser-independent, but I only tested this for Edge and Safari on MacOS and Edge and Chrome on Windows. This PR avoids this problem altogether by changing the event the listbox item listens to frommousedown
toclick
. This way, the event listener registered by thecloseOnDismiss()
method does not run, because the event gets correctly cancelled by the listbox item. Before, the listbox item only cancelled themousedown
event triggered by the click, but not theclick
event.The tests are passing on both MacOS and Windows.
This PR also adds an event listener to elements using
OpenClose
functionality, so that non-HTMLButtonElement
s behave identical to actualHTMLButtonElement
s.