Skip to content

Commit

Permalink
[@mantine/core] ScrollArea: Fix click events being triggered when scr…
Browse files Browse the repository at this point in the history
…ollbar drag is released over an interactive element in Firefox (#6354)

* Disable mouse events default behaviour:

- this prevents popovers to close when trying to drag scrollbar

* Disable pointer events when scrollbar drag

* Remove zIndex leftover
  • Loading branch information
stefanzmf authored Jun 13, 2024
1 parent a00babc commit bd6fad3
Showing 1 changed file with 6 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -85,23 +85,29 @@ export const Scrollbar = forwardRef<HTMLDivElement, ScrollbarProps>((props, forw
ref={composeRefs}
style={{ position: 'absolute', ...scrollbarProps.style }}
onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {
event.preventDefault();

const mainPointer = 0;
if (event.button === mainPointer) {
const element = event.target as HTMLElement;
element.setPointerCapture(event.pointerId);
rectRef.current = scrollbar!.getBoundingClientRect();
prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;
document.body.style.webkitUserSelect = 'none';
document.body.style.pointerEvents = 'none';
handleDragScroll(event);
}
})}
onPointerMove={composeEventHandlers(props.onPointerMove, handleDragScroll)}
onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {
event.preventDefault();

const element = event.target as HTMLElement;
if (element.hasPointerCapture(event.pointerId)) {
element.releasePointerCapture(event.pointerId);
}
document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;
document.body.style.pointerEvents = 'auto';
rectRef.current = null;
})}
/>
Expand Down

0 comments on commit bd6fad3

Please sign in to comment.