use-scroller 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +406 -72
  2. package/dist/chunk-BDIJT5M4.js +1188 -0
  3. package/dist/core.d.ts +121 -0
  4. package/dist/core.js +36 -0
  5. package/dist/index.d.ts +51 -0
  6. package/dist/index.js +346 -0
  7. package/package.json +39 -26
  8. package/dist/cjs/hooks/use-iso-morphic-effect.d.ts +0 -2
  9. package/dist/cjs/hooks/use-iso-morphic-effect.js +0 -6
  10. package/dist/cjs/hooks/use-scroll.d.ts +0 -20
  11. package/dist/cjs/hooks/use-scroll.js +0 -90
  12. package/dist/cjs/hooks/use-window-scroll.d.ts +0 -13
  13. package/dist/cjs/hooks/use-window-scroll.js +0 -60
  14. package/dist/cjs/index.d.ts +0 -3
  15. package/dist/cjs/index.js +0 -19
  16. package/dist/cjs/scroller.d.ts +0 -10
  17. package/dist/cjs/scroller.js +0 -97
  18. package/dist/cjs/types.d.ts +0 -17
  19. package/dist/cjs/types.js +0 -2
  20. package/dist/cjs/utils.d.ts +0 -24
  21. package/dist/cjs/utils.js +0 -79
  22. package/dist/esm/hooks/use-iso-morphic-effect.d.ts +0 -2
  23. package/dist/esm/hooks/use-iso-morphic-effect.js +0 -3
  24. package/dist/esm/hooks/use-scroll.d.ts +0 -20
  25. package/dist/esm/hooks/use-scroll.js +0 -86
  26. package/dist/esm/hooks/use-window-scroll.d.ts +0 -13
  27. package/dist/esm/hooks/use-window-scroll.js +0 -56
  28. package/dist/esm/index.d.ts +0 -3
  29. package/dist/esm/index.js +0 -3
  30. package/dist/esm/scroller.d.ts +0 -10
  31. package/dist/esm/scroller.js +0 -93
  32. package/dist/esm/types.d.ts +0 -17
  33. package/dist/esm/types.js +0 -1
  34. package/dist/esm/utils.d.ts +0 -24
  35. package/dist/esm/utils.js +0 -72
  36. package/src/hooks/use-iso-morphic-effect.ts +0 -4
  37. package/src/hooks/use-scroll.ts +0 -95
  38. package/src/hooks/use-window-scroll.ts +0 -60
  39. package/src/index.ts +0 -3
  40. package/src/scroller.ts +0 -110
  41. package/src/types.ts +0 -21
  42. package/src/utils.ts +0 -90
@@ -1,90 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.useScroll = void 0;
15
- var react_1 = require("react");
16
- var scroller_1 = require("../scroller");
17
- var utils_1 = require("../utils");
18
- var use_iso_morphic_effect_1 = require("./use-iso-morphic-effect");
19
- function useScroll(props) {
20
- var ref = (0, react_1.useRef)(null);
21
- var _a = (0, react_1.useState)(function () { return ({
22
- left: 0,
23
- top: 0,
24
- isScrollable: false,
25
- isScrolledLeft: false,
26
- isScrolledRight: false,
27
- isScrolledTop: false,
28
- isScrolledBottom: false,
29
- }); }), state = _a[0], setState = _a[1];
30
- var scrollOpt = __assign(__assign({}, utils_1.defaultScrollOptions), props);
31
- var scroll = (0, react_1.useCallback)(function (from, to) {
32
- var container = (0, utils_1.getElement)(ref);
33
- var scrollContainer = (0, scroller_1.scroller)({ container: container, options: scrollOpt });
34
- scrollContainer.scrollTo(from, to);
35
- }, []);
36
- var scrollCenter = (0, react_1.useCallback)(function () {
37
- var container = (0, utils_1.getElement)(ref);
38
- var scrollContainer = (0, scroller_1.scroller)({ container: container, options: scrollOpt });
39
- scrollContainer.scrollToCenter();
40
- }, []);
41
- var scrollTop = (0, react_1.useCallback)(function (offset) {
42
- var container = (0, utils_1.getElement)(ref);
43
- var scrollContainer = (0, scroller_1.scroller)({ container: container, options: scrollOpt });
44
- scrollContainer.scrollToTop(offset);
45
- }, []);
46
- var scrollBottom = (0, react_1.useCallback)(function (offset) {
47
- var container = (0, utils_1.getElement)(ref);
48
- var scrollContainer = (0, scroller_1.scroller)({ container: container, options: scrollOpt });
49
- scrollContainer.scrollToBottom(offset);
50
- }, []);
51
- var scrollRight = (0, react_1.useCallback)(function (offset) {
52
- var container = (0, utils_1.getElement)(ref);
53
- var scrollContainer = (0, scroller_1.scroller)({ container: container, options: scrollOpt });
54
- scrollContainer.scrollToRight(offset);
55
- }, []);
56
- var scrollLeft = (0, react_1.useCallback)(function (offset) {
57
- var container = (0, utils_1.getElement)(ref);
58
- var scrollContainer = (0, scroller_1.scroller)({ container: container, options: scrollOpt });
59
- scrollContainer.scrollToLeft(offset);
60
- }, []);
61
- (0, use_iso_morphic_effect_1.useIsoMorphicEffect)(function () {
62
- var scrollContainer = ref.current;
63
- if (!scrollContainer)
64
- return;
65
- var scrollWidth = scrollContainer.scrollWidth, clientWidth = scrollContainer.clientWidth, clientHeight = scrollContainer.clientHeight, scrollHeight = scrollContainer.scrollHeight;
66
- var isScrollable = clientWidth !== scrollWidth || clientHeight !== scrollHeight;
67
- setState(function (prev) { return (__assign(__assign({}, prev), { isScrollable: isScrollable })); });
68
- var handleScroll = function () {
69
- if (scrollContainer) {
70
- var scrollLeft_1 = scrollContainer.scrollLeft, scrollTop_1 = scrollContainer.scrollTop;
71
- var scrollState = __assign(__assign({}, state), { isScrolledLeft: scrollLeft_1 === 0, isScrolledRight: scrollLeft_1 >= scrollWidth - clientWidth, isScrolledTop: scrollTop_1 === 0, isScrolledBottom: scrollTop_1 >= scrollHeight - clientHeight, left: scrollLeft_1, top: scrollTop_1 });
72
- setState(scrollState);
73
- }
74
- };
75
- handleScroll();
76
- scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.addEventListener('scroll', handleScroll);
77
- return function () { return scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.removeEventListener('scroll', handleScroll); };
78
- }, []);
79
- return {
80
- ref: ref,
81
- state: state,
82
- scrollLeft: scrollLeft,
83
- scrollRight: scrollRight,
84
- scrollBottom: scrollBottom,
85
- scrollTop: scrollTop,
86
- scrollCenter: scrollCenter,
87
- scroll: scroll,
88
- };
89
- }
90
- exports.useScroll = useScroll;
@@ -1,13 +0,0 @@
1
- import { ScrollOptions } from '../types';
2
- export declare function useWindowScroll(props?: Partial<Omit<ScrollOptions, 'direction'>>): {
3
- state: {
4
- left: number;
5
- top: number;
6
- isScrolledTop: boolean;
7
- isScrolledBottom: boolean;
8
- };
9
- scrollTop: (offset?: number | undefined) => void;
10
- scrollBottom: (offset?: number | undefined) => void;
11
- scrollToTarget: (currentTarget: HTMLElement) => void;
12
- scroll: (from: number, to: number) => void;
13
- };
@@ -1,60 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.useWindowScroll = void 0;
15
- var react_1 = require("react");
16
- var scroller_1 = require("../scroller");
17
- var use_iso_morphic_effect_1 = require("./use-iso-morphic-effect");
18
- var utils_1 = require("../utils");
19
- function useWindowScroll(props) {
20
- var _a = (0, react_1.useState)(function () { return ({
21
- left: 0,
22
- top: 0,
23
- isScrolledTop: false,
24
- isScrolledBottom: false,
25
- }); }), state = _a[0], setState = _a[1];
26
- var scrollArgs = {
27
- container: window,
28
- options: __assign(__assign({}, utils_1.defaultScrollOptions), props),
29
- };
30
- var scroll = (0, react_1.useCallback)(function (from, to) {
31
- var scrollContainer = (0, scroller_1.scroller)(scrollArgs);
32
- scrollContainer.scrollTo(from, to);
33
- }, []);
34
- var scrollToTarget = (0, react_1.useCallback)(function (currentTarget) {
35
- var scrollContainer = (0, scroller_1.scroller)(scrollArgs);
36
- scrollContainer.scrollToTarget(currentTarget);
37
- }, []);
38
- var scrollTop = (0, react_1.useCallback)(function (offset) {
39
- var scrollContainer = (0, scroller_1.scroller)(scrollArgs);
40
- scrollContainer.scrollToTop(offset);
41
- }, []);
42
- var scrollBottom = (0, react_1.useCallback)(function (offset) {
43
- var scrollContainer = (0, scroller_1.scroller)(scrollArgs);
44
- scrollContainer.scrollToBottom(offset);
45
- }, []);
46
- (0, use_iso_morphic_effect_1.useIsoMorphicEffect)(function () {
47
- var handleScroll = function () {
48
- if (window) {
49
- var _a = (0, utils_1.resolveScrollValues)(window), scrollLeft = _a.scrollLeft, scrollTop_1 = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
50
- var scrollState = __assign(__assign({}, state), { isScrolledTop: scrollTop_1 === 0, isScrolledBottom: scrollTop_1 >= scrollHeight - clientHeight, left: scrollLeft, top: scrollTop_1 });
51
- setState(scrollState);
52
- }
53
- };
54
- handleScroll();
55
- window === null || window === void 0 ? void 0 : window.addEventListener('scroll', handleScroll);
56
- return function () { return window === null || window === void 0 ? void 0 : window.removeEventListener('scroll', handleScroll); };
57
- }, []);
58
- return { state: state, scrollTop: scrollTop, scrollBottom: scrollBottom, scrollToTarget: scrollToTarget, scroll: scroll };
59
- }
60
- exports.useWindowScroll = useWindowScroll;
@@ -1,3 +0,0 @@
1
- export * from './types';
2
- export * from './hooks/use-scroll';
3
- export * from './hooks/use-window-scroll';
package/dist/cjs/index.js DELETED
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./types"), exports);
18
- __exportStar(require("./hooks/use-scroll"), exports);
19
- __exportStar(require("./hooks/use-window-scroll"), exports);
@@ -1,10 +0,0 @@
1
- import { ScrollerProps } from './types';
2
- export declare function scroller({ container, options }: ScrollerProps): {
3
- scrollToLeft: (offset?: number) => void;
4
- scrollToRight: (offset?: number) => void;
5
- scrollToTop: (offset?: number) => void;
6
- scrollToBottom: (offset?: number) => void;
7
- scrollToTarget: (target: HTMLElement) => void;
8
- scrollToCenter: () => void;
9
- scrollTo: (from: number, to: number, layout?: 'horizontal' | 'vertical') => void;
10
- };
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scroller = void 0;
4
- var utils_1 = require("./utils");
5
- function scroller(_a) {
6
- var container = _a.container, _b = _a.options, options = _b === void 0 ? utils_1.defaultScrollOptions : _b;
7
- (0, utils_1.validateElement)(container);
8
- var duration = options.duration, easingOption = options.easingOption, direction = options.direction;
9
- var _c = (0, utils_1.resolveScrollValues)(container), scrollLeft = _c.scrollLeft, scrollTop = _c.scrollTop, clientWidth = _c.clientWidth, clientHeight = _c.clientHeight, scrollWidth = _c.scrollWidth, scrollHeight = _c.scrollHeight;
10
- /**
11
- * Scroll the Element or Window to the given
12
- * position.
13
- *
14
- * @param {number} from the current scroll position.
15
- * @param {number} to the new position to scroll.
16
- * @param {string} layout the scroll direction.
17
- */
18
- function scrollTo(from, to, layout) {
19
- if (layout === void 0) { layout = direction; }
20
- var startTime = null;
21
- var requestId = 0;
22
- function loop(currentTime) {
23
- if (!startTime)
24
- startTime = currentTime;
25
- var time = Math.min((currentTime - startTime) / duration, 1);
26
- var easingFunc = (0, utils_1.getEasing)(easingOption);
27
- var currentPositionInTime = easingFunc(time) * (to - from) + from;
28
- container.scrollTo({
29
- left: layout === 'horizontal' ? currentPositionInTime : undefined,
30
- top: layout === 'vertical' ? currentPositionInTime : undefined,
31
- });
32
- if (time < 1) {
33
- requestId = requestAnimationFrame(loop);
34
- }
35
- else {
36
- cancelAnimationFrame(requestId);
37
- }
38
- }
39
- requestId = requestAnimationFrame(loop);
40
- }
41
- function scrollToCenter() {
42
- var from = 0;
43
- var to = 0;
44
- if (direction === 'vertical') {
45
- var scrollYCenterPosition = (scrollHeight - clientHeight) / 2;
46
- from = scrollTop;
47
- to = scrollYCenterPosition;
48
- }
49
- if (direction === 'horizontal') {
50
- var scrollXCenterPosition = (scrollWidth - clientWidth) / 2;
51
- from = scrollLeft;
52
- to = scrollXCenterPosition;
53
- }
54
- scrollTo(from, to, direction);
55
- }
56
- function scrollToTarget(target) {
57
- (0, utils_1.validateElement)(target);
58
- var offsetTop = target.offsetTop, offsetLeft = target.offsetLeft;
59
- var from = 0;
60
- var to = 0;
61
- if (direction === 'vertical') {
62
- from = scrollTop;
63
- to = offsetTop;
64
- }
65
- if (direction === 'horizontal') {
66
- from = scrollLeft;
67
- to = offsetLeft;
68
- }
69
- scrollTo(from, to, direction);
70
- }
71
- var scrollToLeft = function (offset) {
72
- var scrollPosition = offset || scrollLeft - clientWidth;
73
- scrollTo(scrollLeft, scrollPosition, 'horizontal');
74
- };
75
- var scrollToRight = function (offset) {
76
- var scrollPosition = offset || scrollLeft + clientWidth;
77
- scrollTo(scrollLeft, scrollPosition, 'horizontal');
78
- };
79
- var scrollToTop = function (offset) {
80
- var scrollPosition = offset || scrollTop - clientHeight;
81
- scrollTo(scrollTop, scrollPosition, 'vertical');
82
- };
83
- var scrollToBottom = function (offset) {
84
- var scrollPosition = offset || scrollTop + clientHeight;
85
- scrollTo(scrollTop, scrollPosition, 'vertical');
86
- };
87
- return {
88
- scrollToLeft: scrollToLeft,
89
- scrollToRight: scrollToRight,
90
- scrollToTop: scrollToTop,
91
- scrollToBottom: scrollToBottom,
92
- scrollToTarget: scrollToTarget,
93
- scrollToCenter: scrollToCenter,
94
- scrollTo: scrollTo,
95
- };
96
- }
97
- exports.scroller = scroller;
@@ -1,17 +0,0 @@
1
- export type ScrollOptions = {
2
- direction: 'horizontal' | 'vertical';
3
- duration: number;
4
- easingOption: EasingOptions;
5
- };
6
- export type ScrollerProps = {
7
- container: HTMLElement | Window;
8
- options: ScrollOptions;
9
- };
10
- export type EasingOptions = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out';
11
- export type EasingFunction = (t: number) => number;
12
- export interface EasingFunctions {
13
- linear: EasingFunction;
14
- 'ease-in': EasingFunction;
15
- 'ease-out': EasingFunction;
16
- 'ease-in-out': EasingFunction;
17
- }
package/dist/cjs/types.js DELETED
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,24 +0,0 @@
1
- import { RefObject } from 'react';
2
- import { EasingFunction, EasingFunctions, EasingOptions, ScrollOptions } from './types';
3
- export declare const isServer: boolean;
4
- export declare const defaultScrollOptions: ScrollOptions;
5
- /**
6
- * Resolves scroll values based on the type of param.
7
- * @param {HTMLElement | Window} element
8
- */
9
- export declare const resolveScrollValues: (element: HTMLElement | Window) => {
10
- scrollLeft: number;
11
- scrollTop: number;
12
- scrollWidth: number;
13
- clientWidth: number;
14
- clientHeight: number;
15
- scrollHeight: number;
16
- };
17
- /**
18
- * Validate if element passed to the function is valid.
19
- * @param {HTMLElement | Window} element
20
- */
21
- export declare function validateElement(element?: HTMLElement | Window): void;
22
- export declare const getElement: (ref: RefObject<HTMLElement>) => HTMLElement;
23
- export declare const easingMap: EasingFunctions;
24
- export declare const getEasing: (easing?: EasingOptions) => EasingFunction;
package/dist/cjs/utils.js DELETED
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEasing = exports.easingMap = exports.getElement = exports.validateElement = exports.resolveScrollValues = exports.defaultScrollOptions = exports.isServer = void 0;
4
- exports.isServer = typeof window === 'undefined' || typeof document === 'undefined';
5
- exports.defaultScrollOptions = {
6
- direction: 'vertical',
7
- duration: 300,
8
- easingOption: 'ease-in-out',
9
- };
10
- /**
11
- * Resolves scroll values based on the type of param.
12
- * @param {HTMLElement | Window} element
13
- */
14
- var resolveScrollValues = function (element) {
15
- if (element === document.body ||
16
- element === document.documentElement ||
17
- element instanceof Window) {
18
- return {
19
- scrollLeft: document.body.scrollLeft || document.documentElement.scrollLeft,
20
- scrollTop: document.body.scrollTop || document.documentElement.scrollTop,
21
- scrollWidth: document.body.scrollWidth || document.documentElement.scrollWidth,
22
- clientWidth: document.body.clientWidth || document.documentElement.clientWidth,
23
- clientHeight: document.body.clientHeight || document.documentElement.clientHeight,
24
- scrollHeight: document.body.scrollHeight || document.documentElement.scrollHeight,
25
- };
26
- }
27
- return {
28
- scrollLeft: element.scrollLeft,
29
- scrollTop: element.scrollTop,
30
- scrollWidth: element.scrollWidth,
31
- clientWidth: element.clientWidth,
32
- clientHeight: element.clientHeight,
33
- scrollHeight: element.scrollHeight,
34
- };
35
- };
36
- exports.resolveScrollValues = resolveScrollValues;
37
- /**
38
- * Validate if element passed to the function is valid.
39
- * @param {HTMLElement | Window} element
40
- */
41
- function validateElement(element) {
42
- if (element === undefined) {
43
- throw new Error("The element passed to scroller() was undefined");
44
- }
45
- if (!(element instanceof HTMLElement || Window)) {
46
- throw new TypeError("\n The element passed to scroller() must be a valid element. \n You passed ".concat(element, ".\n "));
47
- }
48
- }
49
- exports.validateElement = validateElement;
50
- var getElement = function (ref) {
51
- if (!ref.current) {
52
- throw new Error("Could not resolve ref object: ".concat(ref.current));
53
- }
54
- return ref.current;
55
- };
56
- exports.getElement = getElement;
57
- exports.easingMap = {
58
- linear: function (t) {
59
- return t;
60
- },
61
- 'ease-in': function (t) {
62
- return t * t;
63
- },
64
- 'ease-out': function (t) {
65
- return t * (2 - t);
66
- },
67
- 'ease-in-out': function (t) {
68
- return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
69
- },
70
- };
71
- var getEasing = function (easing) {
72
- var easeFunc = exports.easingMap[easing || exports.defaultScrollOptions.easingOption];
73
- if (!easeFunc) {
74
- var options = Object.keys(exports.easingMap).join(',');
75
- throw new Error("Scroll error: scroller does not support an easing option of \"".concat(easing, "\". Supported options are ").concat(options));
76
- }
77
- return easeFunc;
78
- };
79
- exports.getEasing = getEasing;
@@ -1,2 +0,0 @@
1
- import { useEffect } from 'react';
2
- export declare const useIsoMorphicEffect: typeof useEffect;
@@ -1,3 +0,0 @@
1
- import { useLayoutEffect, useEffect } from 'react';
2
- import { isServer } from '../utils';
3
- export var useIsoMorphicEffect = isServer ? useEffect : useLayoutEffect;
@@ -1,20 +0,0 @@
1
- /// <reference types="react" />
2
- import { ScrollOptions } from '../types';
3
- export declare function useScroll<T extends HTMLElement>(props?: Partial<ScrollOptions>): {
4
- ref: import("react").RefObject<T>;
5
- state: {
6
- left: number;
7
- top: number;
8
- isScrollable: boolean;
9
- isScrolledLeft: boolean;
10
- isScrolledRight: boolean;
11
- isScrolledTop: boolean;
12
- isScrolledBottom: boolean;
13
- };
14
- scrollLeft: (offset?: number) => void;
15
- scrollRight: (offset?: number) => void;
16
- scrollBottom: (offset?: number) => void;
17
- scrollTop: (offset?: number) => void;
18
- scrollCenter: () => void;
19
- scroll: (from: number, to: number) => void;
20
- };
@@ -1,86 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import { useCallback, useRef, useState } from 'react';
13
- import { scroller } from '../scroller';
14
- import { defaultScrollOptions, getElement } from '../utils';
15
- import { useIsoMorphicEffect } from './use-iso-morphic-effect';
16
- export function useScroll(props) {
17
- var ref = useRef(null);
18
- var _a = useState(function () { return ({
19
- left: 0,
20
- top: 0,
21
- isScrollable: false,
22
- isScrolledLeft: false,
23
- isScrolledRight: false,
24
- isScrolledTop: false,
25
- isScrolledBottom: false,
26
- }); }), state = _a[0], setState = _a[1];
27
- var scrollOpt = __assign(__assign({}, defaultScrollOptions), props);
28
- var scroll = useCallback(function (from, to) {
29
- var container = getElement(ref);
30
- var scrollContainer = scroller({ container: container, options: scrollOpt });
31
- scrollContainer.scrollTo(from, to);
32
- }, []);
33
- var scrollCenter = useCallback(function () {
34
- var container = getElement(ref);
35
- var scrollContainer = scroller({ container: container, options: scrollOpt });
36
- scrollContainer.scrollToCenter();
37
- }, []);
38
- var scrollTop = useCallback(function (offset) {
39
- var container = getElement(ref);
40
- var scrollContainer = scroller({ container: container, options: scrollOpt });
41
- scrollContainer.scrollToTop(offset);
42
- }, []);
43
- var scrollBottom = useCallback(function (offset) {
44
- var container = getElement(ref);
45
- var scrollContainer = scroller({ container: container, options: scrollOpt });
46
- scrollContainer.scrollToBottom(offset);
47
- }, []);
48
- var scrollRight = useCallback(function (offset) {
49
- var container = getElement(ref);
50
- var scrollContainer = scroller({ container: container, options: scrollOpt });
51
- scrollContainer.scrollToRight(offset);
52
- }, []);
53
- var scrollLeft = useCallback(function (offset) {
54
- var container = getElement(ref);
55
- var scrollContainer = scroller({ container: container, options: scrollOpt });
56
- scrollContainer.scrollToLeft(offset);
57
- }, []);
58
- useIsoMorphicEffect(function () {
59
- var scrollContainer = ref.current;
60
- if (!scrollContainer)
61
- return;
62
- var scrollWidth = scrollContainer.scrollWidth, clientWidth = scrollContainer.clientWidth, clientHeight = scrollContainer.clientHeight, scrollHeight = scrollContainer.scrollHeight;
63
- var isScrollable = clientWidth !== scrollWidth || clientHeight !== scrollHeight;
64
- setState(function (prev) { return (__assign(__assign({}, prev), { isScrollable: isScrollable })); });
65
- var handleScroll = function () {
66
- if (scrollContainer) {
67
- var scrollLeft_1 = scrollContainer.scrollLeft, scrollTop_1 = scrollContainer.scrollTop;
68
- var scrollState = __assign(__assign({}, state), { isScrolledLeft: scrollLeft_1 === 0, isScrolledRight: scrollLeft_1 >= scrollWidth - clientWidth, isScrolledTop: scrollTop_1 === 0, isScrolledBottom: scrollTop_1 >= scrollHeight - clientHeight, left: scrollLeft_1, top: scrollTop_1 });
69
- setState(scrollState);
70
- }
71
- };
72
- handleScroll();
73
- scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.addEventListener('scroll', handleScroll);
74
- return function () { return scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.removeEventListener('scroll', handleScroll); };
75
- }, []);
76
- return {
77
- ref: ref,
78
- state: state,
79
- scrollLeft: scrollLeft,
80
- scrollRight: scrollRight,
81
- scrollBottom: scrollBottom,
82
- scrollTop: scrollTop,
83
- scrollCenter: scrollCenter,
84
- scroll: scroll,
85
- };
86
- }
@@ -1,13 +0,0 @@
1
- import { ScrollOptions } from '../types';
2
- export declare function useWindowScroll(props?: Partial<Omit<ScrollOptions, 'direction'>>): {
3
- state: {
4
- left: number;
5
- top: number;
6
- isScrolledTop: boolean;
7
- isScrolledBottom: boolean;
8
- };
9
- scrollTop: (offset?: number | undefined) => void;
10
- scrollBottom: (offset?: number | undefined) => void;
11
- scrollToTarget: (currentTarget: HTMLElement) => void;
12
- scroll: (from: number, to: number) => void;
13
- };
@@ -1,56 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- import { useCallback, useState } from 'react';
13
- import { scroller } from '../scroller';
14
- import { useIsoMorphicEffect } from './use-iso-morphic-effect';
15
- import { defaultScrollOptions, resolveScrollValues } from '../utils';
16
- export function useWindowScroll(props) {
17
- var _a = useState(function () { return ({
18
- left: 0,
19
- top: 0,
20
- isScrolledTop: false,
21
- isScrolledBottom: false,
22
- }); }), state = _a[0], setState = _a[1];
23
- var scrollArgs = {
24
- container: window,
25
- options: __assign(__assign({}, defaultScrollOptions), props),
26
- };
27
- var scroll = useCallback(function (from, to) {
28
- var scrollContainer = scroller(scrollArgs);
29
- scrollContainer.scrollTo(from, to);
30
- }, []);
31
- var scrollToTarget = useCallback(function (currentTarget) {
32
- var scrollContainer = scroller(scrollArgs);
33
- scrollContainer.scrollToTarget(currentTarget);
34
- }, []);
35
- var scrollTop = useCallback(function (offset) {
36
- var scrollContainer = scroller(scrollArgs);
37
- scrollContainer.scrollToTop(offset);
38
- }, []);
39
- var scrollBottom = useCallback(function (offset) {
40
- var scrollContainer = scroller(scrollArgs);
41
- scrollContainer.scrollToBottom(offset);
42
- }, []);
43
- useIsoMorphicEffect(function () {
44
- var handleScroll = function () {
45
- if (window) {
46
- var _a = resolveScrollValues(window), scrollLeft = _a.scrollLeft, scrollTop_1 = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
47
- var scrollState = __assign(__assign({}, state), { isScrolledTop: scrollTop_1 === 0, isScrolledBottom: scrollTop_1 >= scrollHeight - clientHeight, left: scrollLeft, top: scrollTop_1 });
48
- setState(scrollState);
49
- }
50
- };
51
- handleScroll();
52
- window === null || window === void 0 ? void 0 : window.addEventListener('scroll', handleScroll);
53
- return function () { return window === null || window === void 0 ? void 0 : window.removeEventListener('scroll', handleScroll); };
54
- }, []);
55
- return { state: state, scrollTop: scrollTop, scrollBottom: scrollBottom, scrollToTarget: scrollToTarget, scroll: scroll };
56
- }
@@ -1,3 +0,0 @@
1
- export * from './types';
2
- export * from './hooks/use-scroll';
3
- export * from './hooks/use-window-scroll';
package/dist/esm/index.js DELETED
@@ -1,3 +0,0 @@
1
- export * from './types';
2
- export * from './hooks/use-scroll';
3
- export * from './hooks/use-window-scroll';
@@ -1,10 +0,0 @@
1
- import { ScrollerProps } from './types';
2
- export declare function scroller({ container, options }: ScrollerProps): {
3
- scrollToLeft: (offset?: number) => void;
4
- scrollToRight: (offset?: number) => void;
5
- scrollToTop: (offset?: number) => void;
6
- scrollToBottom: (offset?: number) => void;
7
- scrollToTarget: (target: HTMLElement) => void;
8
- scrollToCenter: () => void;
9
- scrollTo: (from: number, to: number, layout?: 'horizontal' | 'vertical') => void;
10
- };