@koine/react 2.0.0-beta.80 → 2.0.0-beta.82

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 (63) hide show
  1. package/FaviconTags.cjs.js +1 -3
  2. package/FaviconTags.esm.js +1 -3
  3. package/Meta.cjs.js +1 -3
  4. package/Meta.esm.js +1 -3
  5. package/NoJs.cjs.js +1 -5
  6. package/NoJs.esm.js +1 -5
  7. package/calendar.cjs.js +8 -534
  8. package/calendar.esm.js +8 -534
  9. package/classed.cjs.js +1 -39
  10. package/classed.esm.js +1 -39
  11. package/createUseMediaQueryWidth.cjs.js +1 -34
  12. package/createUseMediaQueryWidth.d.ts +1 -1
  13. package/createUseMediaQueryWidth.esm.js +1 -34
  14. package/extendComponent.cjs.js +1 -7
  15. package/extendComponent.d.ts +1 -1
  16. package/extendComponent.esm.js +1 -7
  17. package/forms/antispam.d.ts +1 -1
  18. package/forms.cjs.js +1 -27
  19. package/forms.esm.js +1 -27
  20. package/mergeRefs.cjs.js +1 -12
  21. package/mergeRefs.d.ts +1 -1
  22. package/mergeRefs.esm.js +1 -12
  23. package/package.json +3 -3
  24. package/useAsyncFn.cjs.js +1 -23
  25. package/useAsyncFn.esm.js +1 -23
  26. package/useFirstMountState.cjs.js +1 -8
  27. package/useFirstMountState.esm.js +1 -8
  28. package/useFixedOffset.cjs.js +1 -37
  29. package/useFixedOffset.esm.js +2 -38
  30. package/useFocus.cjs.js +1 -7
  31. package/useFocus.esm.js +1 -7
  32. package/useInterval.cjs.js +1 -17
  33. package/useInterval.esm.js +1 -17
  34. package/useIsomorphicLayoutEffect.cjs.js +1 -1
  35. package/useIsomorphicLayoutEffect.esm.js +1 -1
  36. package/useKeyUp.cjs.js +1 -13
  37. package/useKeyUp.esm.js +1 -13
  38. package/useMeasure.cjs.js +1 -115
  39. package/useMeasure.esm.js +1 -115
  40. package/useMountedState.cjs.js +1 -11
  41. package/useMountedState.esm.js +1 -11
  42. package/useNavigateAway.cjs.js +1 -22
  43. package/useNavigateAway.esm.js +1 -22
  44. package/usePrevious.cjs.js +1 -7
  45. package/usePrevious.esm.js +1 -7
  46. package/usePreviousRef.cjs.js +1 -7
  47. package/usePreviousRef.esm.js +1 -7
  48. package/useScrollPosition.cjs.js +1 -53
  49. package/useScrollPosition.esm.js +1 -53
  50. package/useScrollThreshold.cjs.js +1 -22
  51. package/useScrollThreshold.esm.js +1 -22
  52. package/useScrollTo.cjs.js +1 -16
  53. package/useScrollTo.esm.js +1 -16
  54. package/useSmoothScroll.cjs.js +1 -27
  55. package/useSmoothScroll.esm.js +1 -27
  56. package/useSpinDelay.cjs.js +1 -34
  57. package/useSpinDelay.esm.js +1 -34
  58. package/useTraceUpdate.cjs.js +1 -15
  59. package/useTraceUpdate.esm.js +1 -15
  60. package/useUpdateEffect.cjs.js +1 -8
  61. package/useUpdateEffect.esm.js +1 -8
  62. package/useWindowSize.cjs.js +1 -17
  63. package/useWindowSize.esm.js +1 -17
package/useMeasure.cjs.js CHANGED
@@ -6,121 +6,7 @@ var react = require('react');
6
6
  var utils = require('@koine/utils');
7
7
  var dom = require('@koine/dom');
8
8
 
9
- let observer;
10
- let findScrollContainers = (element) => {
11
- const result = [];
12
- if (!element || element === document.body)
13
- return result;
14
- const { overflow, overflowX, overflowY } = window.getComputedStyle(element);
15
- if ([overflow, overflowX, overflowY].some((prop) => prop === "auto" || prop === "scroll"))
16
- result.push(element);
17
- return [...result, ...findScrollContainers(element.parentElement)];
18
- };
19
- const keys = [
20
- "x",
21
- "y",
22
- "top",
23
- "bottom",
24
- "left",
25
- "right",
26
- "width",
27
- "height",
28
- ];
29
- const areBoundsEqual = (a, b) => keys.every((key) => a[key] === b[key]);
30
- let useMeasure = (options) => {
31
- const { scroll = false } = options || {};
32
- const [bounds, setBounds] = react.useState({
33
- left: 0,
34
- top: 0,
35
- width: 0,
36
- height: 0,
37
- bottom: 0,
38
- right: 0,
39
- x: 0,
40
- y: 0,
41
- });
42
- const state = react.useRef([
43
- null,
44
- null,
45
- null,
46
- bounds,
47
- ]);
48
- const mounted = react.useRef(false);
49
- react.useEffect(() => {
50
- mounted.current = true;
51
- return () => void (mounted.current = false);
52
- }, []);
53
- const [forceRefresh, , scrollChange] = react.useMemo(() => {
54
- const callback = (..._args) => {
55
- const [element, , , lastBounds] = state.current;
56
- if (!element)
57
- return;
58
- const size = element.getBoundingClientRect();
59
- Object.freeze(size);
60
- if (mounted.current && !areBoundsEqual(lastBounds, size)) {
61
- state.current[3] = size;
62
- setBounds(size);
63
- }
64
- };
65
- const debouncedCallback = utils.debounce(callback);
66
- return [callback, debouncedCallback, debouncedCallback];
67
- }, [setBounds]);
68
- function removeListeners() {
69
- const [, scrollContainers, resizeObserver] = state.current;
70
- if (scrollContainers) {
71
- scrollContainers.forEach((element) => dom.off(element, "scroll", scrollChange));
72
- state.current[1] = null;
73
- }
74
- if (resizeObserver) {
75
- resizeObserver.disconnect();
76
- state.current[2] = null;
77
- }
78
- }
79
- function addListeners() {
80
- const [element, scrollContainers] = state.current;
81
- if (!element)
82
- return;
83
- if (!observer && ResizeObserver) {
84
- observer = new ResizeObserver(scrollChange);
85
- state.current[2] = observer;
86
- observer.observe(element);
87
- if (scroll && scrollContainers) {
88
- scrollContainers.forEach((scrollContainer) => dom.on(scrollContainer, "scroll", scrollChange, {
89
- capture: true,
90
- passive: true,
91
- }));
92
- }
93
- }
94
- }
95
- const ref = (node) => {
96
- if (!node || node === state.current[0])
97
- return;
98
- removeListeners();
99
- state.current[0] = node;
100
- state.current[1] = findScrollContainers(node);
101
- addListeners();
102
- };
103
- react.useEffect(() => {
104
- if (scroll) {
105
- const listener = dom.listenScrollDebounced(0, forceRefresh, 100);
106
- return listener;
107
- }
108
- return utils.noop;
109
- }, [scroll, forceRefresh]);
110
- react.useEffect(() => {
111
- const listener = dom.listenResizeDebounced(0, forceRefresh, 100);
112
- return listener;
113
- }, [forceRefresh]);
114
- react.useEffect(() => {
115
- removeListeners();
116
- addListeners();
117
- }, [scroll]);
118
- react.useEffect(() => {
119
- forceRefresh();
120
- return removeListeners;
121
- }, []);
122
- return [ref, bounds, forceRefresh];
123
- };
9
+ let e;let m=e=>{let t=[];if(!e||e===document.body)return t;let{overflow:r,overflowX:n,overflowY:u}=window.getComputedStyle(e);return [r,n,u].some(e=>"auto"===e||"scroll"===e)&&t.push(e),[...t,...m(e.parentElement)]},p=["x","y","top","bottom","left","right","width","height"],d=(e,t)=>p.every(r=>e[r]===t[r]);let useMeasure=p=>{let{scroll:h=!1}=p||{},[a,b]=react.useState({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),g=react.useRef([null,null,null,a]),v=react.useRef(!1);react.useEffect(()=>(v.current=!0,()=>void(v.current=!1)),[]);let[w,,y]=react.useMemo(()=>{let e=(...e)=>{let[t,,,r]=g.current;if(!t)return;let n=t.getBoundingClientRect();Object.freeze(n),v.current&&!d(r,n)&&(g.current[3]=n,b(n));},t=utils.debounce(e);return [e,t,t]},[b]);function x(){let[,e,t]=g.current;e&&(e.forEach(e=>dom.off(e,"scroll",y)),g.current[1]=null),t&&(t.disconnect(),g.current[2]=null);}function z(){let[t,r]=g.current;t&&!e&&ResizeObserver&&(e=new ResizeObserver(y),g.current[2]=e,e.observe(t),h&&r&&r.forEach(e=>dom.on(e,"scroll",y,{capture:!0,passive:!0})));}return react.useEffect(()=>h?dom.listenScrollDebounced(0,w,100):utils.noop,[h,w]),react.useEffect(()=>dom.listenResizeDebounced(0,w,100),[w]),react.useEffect(()=>{x(),z();},[h]),react.useEffect(()=>(w(),x),[]),[e=>{e&&e!==g.current[0]&&(x(),g.current[0]=e,g.current[1]=m(e),z());},a,w]};
124
10
 
125
11
  exports["default"] = useMeasure;
126
12
  exports.useMeasure = useMeasure;
package/useMeasure.esm.js CHANGED
@@ -2,120 +2,6 @@ import { useState, useRef, useEffect, useMemo } from 'react';
2
2
  import { debounce, noop } from '@koine/utils';
3
3
  import { listenScrollDebounced, listenResizeDebounced, off, on } from '@koine/dom';
4
4
 
5
- let observer;
6
- let findScrollContainers = (element) => {
7
- const result = [];
8
- if (!element || element === document.body)
9
- return result;
10
- const { overflow, overflowX, overflowY } = window.getComputedStyle(element);
11
- if ([overflow, overflowX, overflowY].some((prop) => prop === "auto" || prop === "scroll"))
12
- result.push(element);
13
- return [...result, ...findScrollContainers(element.parentElement)];
14
- };
15
- const keys = [
16
- "x",
17
- "y",
18
- "top",
19
- "bottom",
20
- "left",
21
- "right",
22
- "width",
23
- "height",
24
- ];
25
- const areBoundsEqual = (a, b) => keys.every((key) => a[key] === b[key]);
26
- let useMeasure = (options) => {
27
- const { scroll = false } = options || {};
28
- const [bounds, setBounds] = useState({
29
- left: 0,
30
- top: 0,
31
- width: 0,
32
- height: 0,
33
- bottom: 0,
34
- right: 0,
35
- x: 0,
36
- y: 0,
37
- });
38
- const state = useRef([
39
- null,
40
- null,
41
- null,
42
- bounds,
43
- ]);
44
- const mounted = useRef(false);
45
- useEffect(() => {
46
- mounted.current = true;
47
- return () => void (mounted.current = false);
48
- }, []);
49
- const [forceRefresh, , scrollChange] = useMemo(() => {
50
- const callback = (..._args) => {
51
- const [element, , , lastBounds] = state.current;
52
- if (!element)
53
- return;
54
- const size = element.getBoundingClientRect();
55
- Object.freeze(size);
56
- if (mounted.current && !areBoundsEqual(lastBounds, size)) {
57
- state.current[3] = size;
58
- setBounds(size);
59
- }
60
- };
61
- const debouncedCallback = debounce(callback);
62
- return [callback, debouncedCallback, debouncedCallback];
63
- }, [setBounds]);
64
- function removeListeners() {
65
- const [, scrollContainers, resizeObserver] = state.current;
66
- if (scrollContainers) {
67
- scrollContainers.forEach((element) => off(element, "scroll", scrollChange));
68
- state.current[1] = null;
69
- }
70
- if (resizeObserver) {
71
- resizeObserver.disconnect();
72
- state.current[2] = null;
73
- }
74
- }
75
- function addListeners() {
76
- const [element, scrollContainers] = state.current;
77
- if (!element)
78
- return;
79
- if (!observer && ResizeObserver) {
80
- observer = new ResizeObserver(scrollChange);
81
- state.current[2] = observer;
82
- observer.observe(element);
83
- if (scroll && scrollContainers) {
84
- scrollContainers.forEach((scrollContainer) => on(scrollContainer, "scroll", scrollChange, {
85
- capture: true,
86
- passive: true,
87
- }));
88
- }
89
- }
90
- }
91
- const ref = (node) => {
92
- if (!node || node === state.current[0])
93
- return;
94
- removeListeners();
95
- state.current[0] = node;
96
- state.current[1] = findScrollContainers(node);
97
- addListeners();
98
- };
99
- useEffect(() => {
100
- if (scroll) {
101
- const listener = listenScrollDebounced(0, forceRefresh, 100);
102
- return listener;
103
- }
104
- return noop;
105
- }, [scroll, forceRefresh]);
106
- useEffect(() => {
107
- const listener = listenResizeDebounced(0, forceRefresh, 100);
108
- return listener;
109
- }, [forceRefresh]);
110
- useEffect(() => {
111
- removeListeners();
112
- addListeners();
113
- }, [scroll]);
114
- useEffect(() => {
115
- forceRefresh();
116
- return removeListeners;
117
- }, []);
118
- return [ref, bounds, forceRefresh];
119
- };
5
+ let e;let m=e=>{let t=[];if(!e||e===document.body)return t;let{overflow:r,overflowX:n,overflowY:u}=window.getComputedStyle(e);return [r,n,u].some(e=>"auto"===e||"scroll"===e)&&t.push(e),[...t,...m(e.parentElement)]},p=["x","y","top","bottom","left","right","width","height"],d=(e,t)=>p.every(r=>e[r]===t[r]);let useMeasure=p=>{let{scroll:h=!1}=p||{},[a,b]=useState({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),g=useRef([null,null,null,a]),v=useRef(!1);useEffect(()=>(v.current=!0,()=>void(v.current=!1)),[]);let[w,,y]=useMemo(()=>{let e=(...e)=>{let[t,,,r]=g.current;if(!t)return;let n=t.getBoundingClientRect();Object.freeze(n),v.current&&!d(r,n)&&(g.current[3]=n,b(n));},t=debounce(e);return [e,t,t]},[b]);function x(){let[,e,t]=g.current;e&&(e.forEach(e=>off(e,"scroll",y)),g.current[1]=null),t&&(t.disconnect(),g.current[2]=null);}function z(){let[t,r]=g.current;t&&!e&&ResizeObserver&&(e=new ResizeObserver(y),g.current[2]=e,e.observe(t),h&&r&&r.forEach(e=>on(e,"scroll",y,{capture:!0,passive:!0})));}return useEffect(()=>h?listenScrollDebounced(0,w,100):noop,[h,w]),useEffect(()=>listenResizeDebounced(0,w,100),[w]),useEffect(()=>{x(),z();},[h]),useEffect(()=>(w(),x),[]),[e=>{e&&e!==g.current[0]&&(x(),g.current[0]=e,g.current[1]=m(e),z());},a,w]};
120
6
 
121
7
  export { useMeasure as default, useMeasure };
@@ -4,17 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var react = require('react');
6
6
 
7
- let useMountedState = () => {
8
- const mountedRef = react.useRef(false);
9
- const get = react.useCallback(() => mountedRef.current, []);
10
- react.useEffect(() => {
11
- mountedRef.current = true;
12
- return () => {
13
- mountedRef.current = false;
14
- };
15
- }, []);
16
- return get;
17
- };
7
+ let useMountedState=()=>{let u=react.useRef(!1),n=react.useCallback(()=>u.current,[]);return react.useEffect(()=>(u.current=!0,()=>{u.current=!1;}),[]),n};
18
8
 
19
9
  exports["default"] = useMountedState;
20
10
  exports.useMountedState = useMountedState;
@@ -1,15 +1,5 @@
1
1
  import { useRef, useCallback, useEffect } from 'react';
2
2
 
3
- let useMountedState = () => {
4
- const mountedRef = useRef(false);
5
- const get = useCallback(() => mountedRef.current, []);
6
- useEffect(() => {
7
- mountedRef.current = true;
8
- return () => {
9
- mountedRef.current = false;
10
- };
11
- }, []);
12
- return get;
13
- };
3
+ let useMountedState=()=>{let u=useRef(!1),n=useCallback(()=>u.current,[]);return useEffect(()=>(u.current=!0,()=>{u.current=!1;}),[]),n};
14
4
 
15
5
  export { useMountedState as default, useMountedState };
@@ -5,28 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var react = require('react');
6
6
  var dom = require('@koine/dom');
7
7
 
8
- let useNavigateAway = (handler) => {
9
- const beforeUnloadHandlerRef = react.useRef();
10
- react.useEffect(() => {
11
- beforeUnloadHandlerRef.current = (event) => {
12
- const customMessageOrCondition = handler(event);
13
- if (customMessageOrCondition) {
14
- event.preventDefault();
15
- }
16
- if (typeof customMessageOrCondition === "string") {
17
- return (event.returnValue = customMessageOrCondition);
18
- }
19
- if (event.defaultPrevented) {
20
- return (event.returnValue = "");
21
- }
22
- return;
23
- };
24
- }, [handler]);
25
- react.useEffect(() => {
26
- const listenerBeforeunload = dom.on(window, "beforeunload", (event) => beforeUnloadHandlerRef.current?.(event));
27
- return listenerBeforeunload;
28
- }, []);
29
- };
8
+ let useNavigateAway=a=>{let o=react.useRef();react.useEffect(()=>{o.current=e=>{let t=a(e);return (t&&e.preventDefault(),"string"==typeof t)?e.returnValue=t:e.defaultPrevented?e.returnValue="":void 0};},[a]),react.useEffect(()=>dom.on(window,"beforeunload",e=>o.current?.(e)),[]);};
30
9
 
31
10
  exports["default"] = useNavigateAway;
32
11
  exports.useNavigateAway = useNavigateAway;
@@ -1,27 +1,6 @@
1
1
  import { useRef, useEffect } from 'react';
2
2
  import { on } from '@koine/dom';
3
3
 
4
- let useNavigateAway = (handler) => {
5
- const beforeUnloadHandlerRef = useRef();
6
- useEffect(() => {
7
- beforeUnloadHandlerRef.current = (event) => {
8
- const customMessageOrCondition = handler(event);
9
- if (customMessageOrCondition) {
10
- event.preventDefault();
11
- }
12
- if (typeof customMessageOrCondition === "string") {
13
- return (event.returnValue = customMessageOrCondition);
14
- }
15
- if (event.defaultPrevented) {
16
- return (event.returnValue = "");
17
- }
18
- return;
19
- };
20
- }, [handler]);
21
- useEffect(() => {
22
- const listenerBeforeunload = on(window, "beforeunload", (event) => beforeUnloadHandlerRef.current?.(event));
23
- return listenerBeforeunload;
24
- }, []);
25
- };
4
+ let useNavigateAway=a=>{let o=useRef();useEffect(()=>{o.current=e=>{let t=a(e);return (t&&e.preventDefault(),"string"==typeof t)?e.returnValue=t:e.defaultPrevented?e.returnValue="":void 0};},[a]),useEffect(()=>on(window,"beforeunload",e=>o.current?.(e)),[]);};
26
5
 
27
6
  export { useNavigateAway as default, useNavigateAway };
@@ -4,13 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var react = require('react');
6
6
 
7
- let usePrevious = (state, defaulValue) => {
8
- const [tuple, setTuple] = react.useState([state, defaulValue]);
9
- if (tuple[1] !== state) {
10
- setTuple([tuple[1], state]);
11
- }
12
- return tuple[0];
13
- };
7
+ let usePrevious=(r,t)=>{let[o,u]=react.useState([r,t]);return o[1]!==r&&u([o[1],r]),o[0]};
14
8
 
15
9
  exports["default"] = usePrevious;
16
10
  exports.usePrevious = usePrevious;
@@ -1,11 +1,5 @@
1
1
  import { useState } from 'react';
2
2
 
3
- let usePrevious = (state, defaulValue) => {
4
- const [tuple, setTuple] = useState([state, defaulValue]);
5
- if (tuple[1] !== state) {
6
- setTuple([tuple[1], state]);
7
- }
8
- return tuple[0];
9
- };
3
+ let usePrevious=(r,t)=>{let[o,u]=useState([r,t]);return o[1]!==r&&u([o[1],r]),o[0]};
10
4
 
11
5
  export { usePrevious as default, usePrevious };
@@ -4,13 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var react = require('react');
6
6
 
7
- let usePreviousRef = (value) => {
8
- const ref = react.useRef();
9
- react.useEffect(() => {
10
- ref.current = value;
11
- });
12
- return ref.current;
13
- };
7
+ let usePreviousRef=t=>{let u=react.useRef();return react.useEffect(()=>{u.current=t;}),u.current};
14
8
 
15
9
  exports["default"] = usePreviousRef;
16
10
  exports.usePreviousRef = usePreviousRef;
@@ -1,11 +1,5 @@
1
1
  import { useRef, useEffect } from 'react';
2
2
 
3
- let usePreviousRef = (value) => {
4
- const ref = useRef();
5
- useEffect(() => {
6
- ref.current = value;
7
- });
8
- return ref.current;
9
- };
3
+ let usePreviousRef=t=>{let u=useRef();return useEffect(()=>{u.current=t;}),u.current};
10
4
 
11
5
  export { usePreviousRef as default, usePreviousRef };
@@ -7,59 +7,7 @@ var utils = require('@koine/utils');
7
7
  var dom = require('@koine/dom');
8
8
  var useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.cjs.js');
9
9
 
10
- const zeroPosition = { x: 0, y: 0 };
11
- const getClientRect = (element) => element?.getBoundingClientRect();
12
- const getScrollPosition = (element, boundingElement) => {
13
- if (!utils.isBrowser) {
14
- return zeroPosition;
15
- }
16
- if (!boundingElement) {
17
- return { x: window.scrollX, y: window.scrollY };
18
- }
19
- const targetPosition = getClientRect(element?.current || document.body);
20
- const containerPosition = getClientRect(boundingElement.current);
21
- if (!targetPosition) {
22
- return zeroPosition;
23
- }
24
- return containerPosition
25
- ? {
26
- x: (containerPosition.x || 0) - (targetPosition.x || 0),
27
- y: (containerPosition.y || 0) - (targetPosition.y || 0),
28
- }
29
- : { x: targetPosition.left, y: targetPosition.top };
30
- };
31
- let useScrollPosition = (effect, deps = [], element, boundingElement, wait) => {
32
- const position = react.useRef(getScrollPosition(null, boundingElement));
33
- let throttleTimeout = null;
34
- const callBack = () => {
35
- const current = getScrollPosition(element, boundingElement);
36
- effect(current, position.current);
37
- position.current = current;
38
- throttleTimeout = null;
39
- };
40
- useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
41
- if (!utils.isBrowser) {
42
- return undefined;
43
- }
44
- const handleScroll = () => {
45
- if (wait) {
46
- if (throttleTimeout === null) {
47
- throttleTimeout = window.setTimeout(callBack, wait);
48
- }
49
- }
50
- else {
51
- callBack();
52
- }
53
- };
54
- const listener = dom.listenScroll(handleScroll, boundingElement?.current);
55
- return () => {
56
- listener();
57
- if (throttleTimeout) {
58
- clearTimeout(throttleTimeout);
59
- }
60
- };
61
- }, deps);
62
- };
10
+ let l={x:0,y:0},n=t=>t?.getBoundingClientRect(),u=(t,e)=>{if(!utils.isBrowser)return l;if(!e)return {x:window.scrollX,y:window.scrollY};let o=n(t?.current||document.body),u=n(e.current);return o?u?{x:(u.x||0)-(o.x||0),y:(u.y||0)-(o.y||0)}:{x:o.left,y:o.top}:l};let useScrollPosition=(l,n=[],i,c,m)=>{let f=react.useRef(u(null,c)),s=null,d=()=>{let t=u(i,c);l(t,f.current),f.current=t,s=null;};useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(()=>{if(!utils.isBrowser)return;let t=dom.listenScroll(()=>{m?null===s&&(s=window.setTimeout(d,m)):d();},c?.current);return ()=>{t(),s&&clearTimeout(s);}},n);};
63
11
 
64
12
  exports["default"] = useScrollPosition;
65
13
  exports.useScrollPosition = useScrollPosition;
@@ -3,58 +3,6 @@ import { isBrowser } from '@koine/utils';
3
3
  import { listenScroll } from '@koine/dom';
4
4
  import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.esm.js';
5
5
 
6
- const zeroPosition = { x: 0, y: 0 };
7
- const getClientRect = (element) => element?.getBoundingClientRect();
8
- const getScrollPosition = (element, boundingElement) => {
9
- if (!isBrowser) {
10
- return zeroPosition;
11
- }
12
- if (!boundingElement) {
13
- return { x: window.scrollX, y: window.scrollY };
14
- }
15
- const targetPosition = getClientRect(element?.current || document.body);
16
- const containerPosition = getClientRect(boundingElement.current);
17
- if (!targetPosition) {
18
- return zeroPosition;
19
- }
20
- return containerPosition
21
- ? {
22
- x: (containerPosition.x || 0) - (targetPosition.x || 0),
23
- y: (containerPosition.y || 0) - (targetPosition.y || 0),
24
- }
25
- : { x: targetPosition.left, y: targetPosition.top };
26
- };
27
- let useScrollPosition = (effect, deps = [], element, boundingElement, wait) => {
28
- const position = useRef(getScrollPosition(null, boundingElement));
29
- let throttleTimeout = null;
30
- const callBack = () => {
31
- const current = getScrollPosition(element, boundingElement);
32
- effect(current, position.current);
33
- position.current = current;
34
- throttleTimeout = null;
35
- };
36
- useIsomorphicLayoutEffect(() => {
37
- if (!isBrowser) {
38
- return undefined;
39
- }
40
- const handleScroll = () => {
41
- if (wait) {
42
- if (throttleTimeout === null) {
43
- throttleTimeout = window.setTimeout(callBack, wait);
44
- }
45
- }
46
- else {
47
- callBack();
48
- }
49
- };
50
- const listener = listenScroll(handleScroll, boundingElement?.current);
51
- return () => {
52
- listener();
53
- if (throttleTimeout) {
54
- clearTimeout(throttleTimeout);
55
- }
56
- };
57
- }, deps);
58
- };
6
+ let l={x:0,y:0},n=t=>t?.getBoundingClientRect(),u=(t,e)=>{if(!isBrowser)return l;if(!e)return {x:window.scrollX,y:window.scrollY};let o=n(t?.current||document.body),u=n(e.current);return o?u?{x:(u.x||0)-(o.x||0),y:(u.y||0)-(o.y||0)}:{x:o.left,y:o.top}:l};let useScrollPosition=(l,n=[],i,c,m)=>{let f=useRef(u(null,c)),s=null,d=()=>{let t=u(i,c);l(t,f.current),f.current=t,s=null;};useIsomorphicLayoutEffect(()=>{if(!isBrowser)return;let t=listenScroll(()=>{m?null===s&&(s=window.setTimeout(d,m)):d();},c?.current);return ()=>{t(),s&&clearTimeout(s);}},n);};
59
7
 
60
8
  export { useScrollPosition as default, useScrollPosition };
@@ -6,28 +6,7 @@ var react = require('react');
6
6
  var utils = require('@koine/utils');
7
7
  var dom = require('@koine/dom');
8
8
 
9
- let useScrollThreshold = (threshold, callback) => {
10
- const [isBelow, setIsBelow] = react.useState(false);
11
- const handler = react.useCallback(() => {
12
- if (threshold) {
13
- const posY = window.scrollY;
14
- const isAbove = posY < threshold;
15
- const isBelow = posY > threshold;
16
- setIsBelow(isBelow);
17
- if (callback)
18
- callback(isAbove, isBelow);
19
- }
20
- }, [threshold, callback]);
21
- react.useEffect(() => {
22
- if (threshold) {
23
- const listener = dom.listenScroll(handler);
24
- handler();
25
- return listener;
26
- }
27
- return utils.noop;
28
- }, [threshold, handler]);
29
- return isBelow;
30
- };
9
+ let useScrollThreshold=(i,m)=>{let[u,f]=react.useState(!1),n=react.useCallback(()=>{if(i){let r=window.scrollY,e=r<i,o=r>i;f(o),m&&m(e,o);}},[i,m]);return react.useEffect(()=>{if(i){let r=dom.listenScroll(n);return n(),r}return utils.noop},[i,n]),u};
31
10
 
32
11
  exports["default"] = useScrollThreshold;
33
12
  exports.useScrollThreshold = useScrollThreshold;
@@ -2,27 +2,6 @@ import { useState, useCallback, useEffect } from 'react';
2
2
  import { noop } from '@koine/utils';
3
3
  import { listenScroll } from '@koine/dom';
4
4
 
5
- let useScrollThreshold = (threshold, callback) => {
6
- const [isBelow, setIsBelow] = useState(false);
7
- const handler = useCallback(() => {
8
- if (threshold) {
9
- const posY = window.scrollY;
10
- const isAbove = posY < threshold;
11
- const isBelow = posY > threshold;
12
- setIsBelow(isBelow);
13
- if (callback)
14
- callback(isAbove, isBelow);
15
- }
16
- }, [threshold, callback]);
17
- useEffect(() => {
18
- if (threshold) {
19
- const listener = listenScroll(handler);
20
- handler();
21
- return listener;
22
- }
23
- return noop;
24
- }, [threshold, handler]);
25
- return isBelow;
26
- };
5
+ let useScrollThreshold=(i,m)=>{let[u,f]=useState(!1),n=useCallback(()=>{if(i){let r=window.scrollY,e=r<i,o=r>i;f(o),m&&m(e,o);}},[i,m]);return useEffect(()=>{if(i){let r=listenScroll(n);return n(),r}return noop},[i,n]),u};
27
6
 
28
7
  export { useScrollThreshold as default, useScrollThreshold };
@@ -4,22 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var utils = require('@koine/utils');
6
6
 
7
- let useScrollTo = (id = "", offset = 0) => {
8
- if (!utils.isBrowser) {
9
- return;
10
- }
11
- const headerOffset = 0;
12
- let element = document.getElementById(id);
13
- let top = 0;
14
- if (element && element.offsetParent) {
15
- do {
16
- top += element.offsetTop;
17
- } while ((element = element.offsetParent));
18
- }
19
- top -= offset;
20
- top -= headerOffset;
21
- window.scroll(0, top);
22
- };
7
+ let useScrollTo=(o="",t=0)=>{if(!utils.isBrowser)return;let l=document.getElementById(o),r=0;if(l&&l.offsetParent)do r+=l.offsetTop;while(l=l.offsetParent)r-=t,r-=0,window.scroll(0,r);};
23
8
 
24
9
  exports["default"] = useScrollTo;
25
10
  exports.useScrollTo = useScrollTo;
@@ -1,20 +1,5 @@
1
1
  import { isBrowser } from '@koine/utils';
2
2
 
3
- let useScrollTo = (id = "", offset = 0) => {
4
- if (!isBrowser) {
5
- return;
6
- }
7
- const headerOffset = 0;
8
- let element = document.getElementById(id);
9
- let top = 0;
10
- if (element && element.offsetParent) {
11
- do {
12
- top += element.offsetTop;
13
- } while ((element = element.offsetParent));
14
- }
15
- top -= offset;
16
- top -= headerOffset;
17
- window.scroll(0, top);
18
- };
3
+ let useScrollTo=(o="",t=0)=>{if(!isBrowser)return;let l=document.getElementById(o),r=0;if(l&&l.offsetParent)do r+=l.offsetTop;while(l=l.offsetParent)r-=t,r-=0,window.scroll(0,r);};
19
4
 
20
5
  export { useScrollTo as default, useScrollTo };
@@ -8,33 +8,7 @@ var dom = require('@koine/dom');
8
8
  var useFixedOffset = require('./useFixedOffset.cjs.js');
9
9
  require('./useIsomorphicLayoutEffect.cjs.js');
10
10
 
11
- let useSmoothScroll = (disregardAutomaticFixedOffset) => {
12
- const fixedOffset = useFixedOffset.useFixedOffset();
13
- const scroll = react.useCallback((to, customOffset, callback, fallbackTimeout, behavior) => {
14
- let top = undefined;
15
- let toIsElement = false;
16
- if (utils.isNumber(to)) {
17
- top = to;
18
- }
19
- else if (to) {
20
- const el = document.getElementById(to);
21
- if (el) {
22
- top = dom.getOffsetTopSlim(el) - fixedOffset.current;
23
- toIsElement = true;
24
- }
25
- }
26
- if (utils.isNumber(top)) {
27
- top =
28
- top +
29
- (customOffset || 0) +
30
- (disregardAutomaticFixedOffset || toIsElement
31
- ? 0
32
- : fixedOffset.current);
33
- dom.scrollTo(top, callback, fallbackTimeout, behavior);
34
- }
35
- }, [disregardAutomaticFixedOffset, fixedOffset]);
36
- return scroll;
37
- };
11
+ let useSmoothScroll=m=>{let i=useFixedOffset.useFixedOffset();return react.useCallback((e,l,f,u,n)=>{let c;let p=!1;if(utils.isNumber(e))c=e;else if(e){let t=document.getElementById(e);t&&(c=dom.getOffsetTopSlim(t)-i.current,p=!0);}utils.isNumber(c)&&dom.scrollTo(c=c+(l||0)+(m||p?0:i.current),f,u,n);},[m,i])};
38
12
 
39
13
  exports["default"] = useSmoothScroll;
40
14
  exports.useSmoothScroll = useSmoothScroll;