@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
32 lines (29 loc) • 968 B
JavaScript
'use client';
import { useState, useEffect } from 'react';
import { useWindowEvent } from '../use-window-event/use-window-event.mjs';
function getScrollPosition() {
return typeof window !== "undefined" ? { x: window.scrollX, y: window.scrollY } : { x: 0, y: 0 };
}
function scrollTo({ x, y }) {
if (typeof window !== "undefined") {
const scrollOptions = { behavior: "smooth" };
if (typeof x === "number") {
scrollOptions.left = x;
}
if (typeof y === "number") {
scrollOptions.top = y;
}
window.scrollTo(scrollOptions);
}
}
function useWindowScroll() {
const [position, setPosition] = useState({ x: 0, y: 0 });
useWindowEvent("scroll", () => setPosition(getScrollPosition()));
useWindowEvent("resize", () => setPosition(getScrollPosition()));
useEffect(() => {
setPosition(getScrollPosition());
}, []);
return [position, scrollTo];
}
export { useWindowScroll };
//# sourceMappingURL=use-window-scroll.mjs.map