mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-03 21:02:40 +02:00
24 lines
808 B
TypeScript
24 lines
808 B
TypeScript
"use client";
|
|
|
|
import { forwardRef, type ComponentPropsWithoutRef, type WheelEvent } from "react";
|
|
|
|
export type NestedScrollProps = ComponentPropsWithoutRef<"div">;
|
|
|
|
export const NestedScroll = forwardRef<HTMLDivElement, NestedScrollProps>(
|
|
({ onWheel, ...props }, ref) => {
|
|
const handleWheel = (event: WheelEvent<HTMLDivElement>) => {
|
|
const el = event.currentTarget;
|
|
const canScrollUp = el.scrollTop > 0;
|
|
const canScrollDown = el.scrollTop < el.scrollHeight - el.clientHeight - 1;
|
|
const goingUp = event.deltaY < 0;
|
|
const goingDown = event.deltaY > 0;
|
|
if ((goingUp && canScrollUp) || (goingDown && canScrollDown)) {
|
|
event.stopPropagation();
|
|
}
|
|
onWheel?.(event);
|
|
};
|
|
return <div ref={ref} onWheel={handleWheel} {...props} />;
|
|
}
|
|
);
|
|
|
|
NestedScroll.displayName = "NestedScroll";
|