export const AUTO_SCROLL_BOTTOM_EPSILON_PX = 2; interface ScrollPosition { scrollTop: number; clientHeight: number; scrollHeight: number;} export function isScrollContainerAtBottom( position: ScrollPosition, epsilonPx = AUTO_SCROLL_BOTTOM_EPSILON_PX,): boolean { const epsilon = Number.isFinite(epsilonPx) ? Math.max(0, epsilonPx) : AUTO_SCROLL_BOTTOM_EPSILON_PX; const { scrollTop, clientHeight, scrollHeight } = position; if (![scrollTop, clientHeight, scrollHeight].every(Number.isFinite)) { return true; } const distanceFromBottom = Math.max(0, scrollHeight - clientHeight - scrollTop); return distanceFromBottom <= epsilon;}
export const AUTO_SCROLL_BOTTOM_EPSILON_PX = 2;
interface ScrollPosition {
scrollTop: number;
clientHeight: number;
scrollHeight: number;
}
export function isScrollContainerAtBottom(
position: ScrollPosition,
epsilonPx = AUTO_SCROLL_BOTTOM_EPSILON_PX,
): boolean {
const epsilon = Number.isFinite(epsilonPx)
? Math.max(0, epsilonPx)
: AUTO_SCROLL_BOTTOM_EPSILON_PX;
const { scrollTop, clientHeight, scrollHeight } = position;
if (![scrollTop, clientHeight, scrollHeight].every(Number.isFinite)) {
return true;
}
const distanceFromBottom = Math.max(0, scrollHeight - clientHeight - scrollTop);
return distanceFromBottom <= epsilon;
}