@reactuses/core 2.0.0 → 2.0.2

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.
package/dist/index.cjs CHANGED
@@ -547,8 +547,8 @@ function useDeepCompareEffect(effect, deps) {
547
547
 
548
548
  function useEventListener(eventName, handler, element, options) {
549
549
  const savedHandler = useLatest(handler);
550
+ const targetElement = getTargetElement(element, defaultWindow);
550
551
  useDeepCompareEffect(() => {
551
- const targetElement = getTargetElement(element, window);
552
552
  if (!(targetElement && targetElement.addEventListener)) {
553
553
  return;
554
554
  }
@@ -557,7 +557,7 @@ function useEventListener(eventName, handler, element, options) {
557
557
  return () => {
558
558
  off(targetElement, eventName, eventListener);
559
559
  };
560
- }, [eventName, element, options, savedHandler]);
560
+ }, [eventName, targetElement, options, savedHandler]);
561
561
  }
562
562
 
563
563
  function useCounter(initialValue = 0, max = null, min = null) {
@@ -701,20 +701,20 @@ function useFavicon(href, baseUrl = "", rel = "icon") {
701
701
  function useMutationObserver(callback, target, options = {}) {
702
702
  const callbackRef = useLatest(callback);
703
703
  const observerRef = React.useRef();
704
+ const element = getTargetElement(target);
704
705
  const stop = React.useCallback(() => {
705
706
  if (observerRef.current) {
706
707
  observerRef.current.disconnect();
707
708
  }
708
709
  }, []);
709
710
  useDeepCompareEffect(() => {
710
- const element = getTargetElement(target);
711
711
  if (!element) {
712
712
  return;
713
713
  }
714
714
  observerRef.current = new MutationObserver(callbackRef.current);
715
715
  observerRef.current.observe(element, options);
716
716
  return stop;
717
- }, [options, target]);
717
+ }, [options, element]);
718
718
  return stop;
719
719
  }
720
720
 
@@ -1499,13 +1499,13 @@ function useOrientation(initialState = defaultState) {
1499
1499
  function useIntersectionObserver(target, callback, options = {}) {
1500
1500
  const savedCallback = useLatest(callback);
1501
1501
  const observerRef = React.useRef();
1502
+ const element = getTargetElement(target);
1502
1503
  const stop = React.useCallback(() => {
1503
1504
  if (observerRef.current) {
1504
1505
  observerRef.current.disconnect();
1505
1506
  }
1506
1507
  }, []);
1507
1508
  useDeepCompareEffect(() => {
1508
- const element = getTargetElement(target);
1509
1509
  if (!element) {
1510
1510
  return;
1511
1511
  }
@@ -1515,7 +1515,7 @@ function useIntersectionObserver(target, callback, options = {}) {
1515
1515
  );
1516
1516
  observerRef.current.observe(element);
1517
1517
  return stop;
1518
- }, [options, target]);
1518
+ }, [options, element]);
1519
1519
  return stop;
1520
1520
  }
1521
1521
 
@@ -1555,20 +1555,20 @@ function useDocumentVisibility() {
1555
1555
  function useResizeObserver(target, callback, options = {}) {
1556
1556
  const savedCallback = useLatest(callback);
1557
1557
  const observerRef = React.useRef();
1558
+ const element = getTargetElement(target);
1558
1559
  const stop = React.useCallback(() => {
1559
1560
  if (observerRef.current) {
1560
1561
  observerRef.current.disconnect();
1561
1562
  }
1562
1563
  }, []);
1563
1564
  useDeepCompareEffect(() => {
1564
- const element = getTargetElement(target);
1565
1565
  if (!element) {
1566
1566
  return;
1567
1567
  }
1568
1568
  observerRef.current = new ResizeObserver(savedCallback.current);
1569
1569
  observerRef.current.observe(element, options);
1570
1570
  return stop;
1571
- }, [options, target]);
1571
+ }, [options, element]);
1572
1572
  return stop;
1573
1573
  }
1574
1574
 
@@ -1764,7 +1764,7 @@ var __spreadValues = (a, b) => {
1764
1764
  return a;
1765
1765
  };
1766
1766
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
1767
- var __async$1 = (__this, __arguments, generator) => {
1767
+ var __async$2 = (__this, __arguments, generator) => {
1768
1768
  return new Promise((resolve, reject) => {
1769
1769
  var fulfilled = (value) => {
1770
1770
  try {
@@ -1793,11 +1793,11 @@ function useInfiniteScroll(target, onLoadMore, options = {}) {
1793
1793
  [direction]: (_b = options.distance) != null ? _b : 0
1794
1794
  }, options.offset)
1795
1795
  }));
1796
+ const element = getTargetElement(target);
1796
1797
  const di = state[3][direction];
1797
1798
  useUpdateEffect(() => {
1798
- const fn = () => __async$1(this, null, function* () {
1799
+ const fn = () => __async$2(this, null, function* () {
1799
1800
  var _a2, _b2;
1800
- const element = getTargetElement(target);
1801
1801
  const previous = {
1802
1802
  height: (_a2 = element == null ? void 0 : element.scrollHeight) != null ? _a2 : 0,
1803
1803
  width: (_b2 = element == null ? void 0 : element.scrollWidth) != null ? _b2 : 0
@@ -1811,7 +1811,7 @@ function useInfiniteScroll(target, onLoadMore, options = {}) {
1811
1811
  }
1812
1812
  });
1813
1813
  fn();
1814
- }, [di, options.preserveScrollPosition, target]);
1814
+ }, [di, options.preserveScrollPosition, element]);
1815
1815
  }
1816
1816
 
1817
1817
  const defaultEvents = [
@@ -1848,6 +1848,7 @@ function useMousePressed(target, options = {}) {
1848
1848
  const { touch = true, drag = true, initialValue = false } = options;
1849
1849
  const [pressed, setPressed] = React.useState(initialValue);
1850
1850
  const [sourceType, setSourceType] = React.useState(null);
1851
+ const element = getTargetElement(target);
1851
1852
  const onPressed = React.useCallback(
1852
1853
  (srcType) => () => {
1853
1854
  setPressed(true);
@@ -1863,7 +1864,6 @@ function useMousePressed(target, options = {}) {
1863
1864
  useEventListener("mouseleave", onReleased, () => window, { passive: true });
1864
1865
  useEventListener("mouseup", onReleased, () => window, { passive: true });
1865
1866
  React.useEffect(() => {
1866
- const element = getTargetElement(target);
1867
1867
  if (drag) {
1868
1868
  element == null ? void 0 : element.addEventListener("dragstart", onPressed("mouse"), {
1869
1869
  passive: true
@@ -1898,7 +1898,7 @@ function useMousePressed(target, options = {}) {
1898
1898
  element == null ? void 0 : element.removeEventListener("touchcancel", onReleased);
1899
1899
  }
1900
1900
  };
1901
- }, [drag, onPressed, onReleased, target, touch]);
1901
+ }, [drag, onPressed, onReleased, element, touch]);
1902
1902
  return [pressed, sourceType];
1903
1903
  }
1904
1904
 
@@ -1915,17 +1915,16 @@ function preventDefault(rawEvent) {
1915
1915
  function useScrollLock(target, initialState = false) {
1916
1916
  const [locked, setLocked] = React.useState(initialState);
1917
1917
  const initialOverflowRef = React.useRef("scroll");
1918
+ const element = getTargetElement(target);
1918
1919
  React.useEffect(() => {
1919
- const element = getTargetElement(target);
1920
1920
  if (element) {
1921
1921
  initialOverflowRef.current = element.style.overflow;
1922
1922
  if (locked) {
1923
1923
  element.style.overflow = "hidden";
1924
1924
  }
1925
1925
  }
1926
- }, [locked, target]);
1926
+ }, [locked, element]);
1927
1927
  const lock = useEvent(() => {
1928
- const element = getTargetElement(target);
1929
1928
  if (!element || locked) {
1930
1929
  return;
1931
1930
  }
@@ -1935,7 +1934,6 @@ function useScrollLock(target, initialState = false) {
1935
1934
  setLocked(true);
1936
1935
  });
1937
1936
  const unlock = useEvent(() => {
1938
- const element = getTargetElement(target);
1939
1937
  if (!element || !locked) {
1940
1938
  return;
1941
1939
  }
@@ -2341,7 +2339,7 @@ function useWindowScroll() {
2341
2339
  return state;
2342
2340
  }
2343
2341
 
2344
- var __async = (__this, __arguments, generator) => {
2342
+ var __async$1 = (__this, __arguments, generator) => {
2345
2343
  return new Promise((resolve, reject) => {
2346
2344
  var fulfilled = (value) => {
2347
2345
  try {
@@ -2370,7 +2368,7 @@ function useClipBorad() {
2370
2368
  }, []);
2371
2369
  useEventListener("copy", updateText);
2372
2370
  useEventListener("cut", updateText);
2373
- const copy = React.useCallback((txt) => __async(this, null, function* () {
2371
+ const copy = React.useCallback((txt) => __async$1(this, null, function* () {
2374
2372
  setText(txt);
2375
2373
  yield window.navigator.clipboard.writeText(txt);
2376
2374
  }), []);
@@ -2689,8 +2687,9 @@ const useSticky = ({
2689
2687
  nav = 0
2690
2688
  }) => {
2691
2689
  const [isSticky, setSticky] = React.useState(false);
2690
+ const element = getTargetElement(targetElement);
2691
+ const scrollParent = getTargetElement(scrollElement) || getScrollParent(axis, element);
2692
2692
  const { run: scrollHandler } = useThrottleFn(() => {
2693
- const element = getTargetElement(targetElement);
2694
2693
  if (!element) {
2695
2694
  return;
2696
2695
  }
@@ -2702,12 +2701,7 @@ const useSticky = ({
2702
2701
  }
2703
2702
  }, 50);
2704
2703
  React.useEffect(() => {
2705
- const element = getTargetElement(targetElement);
2706
- if (!element) {
2707
- return;
2708
- }
2709
- const scrollParent = getTargetElement(scrollElement) || getScrollParent(axis, element);
2710
- if (!scrollParent) {
2704
+ if (!element || !scrollParent) {
2711
2705
  return;
2712
2706
  }
2713
2707
  scrollParent.addEventListener("scroll", scrollHandler);
@@ -2715,11 +2709,48 @@ const useSticky = ({
2715
2709
  return () => {
2716
2710
  scrollParent.removeEventListener("scroll", scrollHandler);
2717
2711
  };
2718
- }, [axis, scrollElement, scrollHandler, targetElement]);
2712
+ }, [axis, element, scrollHandler, scrollParent]);
2719
2713
  return [isSticky, setSticky];
2720
2714
  };
2721
2715
 
2716
+ var __async = (__this, __arguments, generator) => {
2717
+ return new Promise((resolve, reject) => {
2718
+ var fulfilled = (value) => {
2719
+ try {
2720
+ step(generator.next(value));
2721
+ } catch (e) {
2722
+ reject(e);
2723
+ }
2724
+ };
2725
+ var rejected = (value) => {
2726
+ try {
2727
+ step(generator.throw(value));
2728
+ } catch (e) {
2729
+ reject(e);
2730
+ }
2731
+ };
2732
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
2733
+ step((generator = generator.apply(__this, __arguments)).next());
2734
+ });
2735
+ };
2736
+ function useAsyncEffect(effect, cleanup = noop, deps) {
2737
+ const mounted = useMountedState();
2738
+ React.useEffect(() => {
2739
+ const execute = () => __async(this, null, function* () {
2740
+ if (!mounted()) {
2741
+ return;
2742
+ }
2743
+ yield effect();
2744
+ });
2745
+ execute();
2746
+ return () => {
2747
+ cleanup();
2748
+ };
2749
+ }, deps);
2750
+ }
2751
+
2722
2752
  exports.useActiveElement = useActiveElement;
2753
+ exports.useAsyncEffect = useAsyncEffect;
2723
2754
  exports.useClickOutside = useClickOutSide;
2724
2755
  exports.useClipboard = useClipBorad;
2725
2756
  exports.useControlled = useControlled;
package/dist/index.d.ts CHANGED
@@ -792,4 +792,6 @@ declare const useSticky: ({ targetElement, scrollElement, axis, nav, }: UseStick
792
792
  react__default.Dispatch<react__default.SetStateAction<boolean>>
793
793
  ];
794
794
 
795
- export { ColorScheme, Contrast, CursorState, GeneralPermissionDescriptor, IDisposable, IEvent, IEventOnce, IListener, INetworkInformation, IState, IUseNetworkState, KeyModifier, MousePressedOptions, MouseSourceType, OrientationState, RafLoopReturns, ScrollIntoViewAnimation, ScrollIntoViewParams, State, Status, Target, UseDarkOptions, UseDraggableOptions, UseElementBoundingOptions, UseEventEmitterReturn, UseFileDialogOptions, UseFpsOptions, UseFullScreenOptions, UseInfiniteScrollOptions, UseLongPressOptions, UseModifierOptions, UseScriptTagOptions, UseScrollOptions, UseStickyParams, UseTextDirectionOptions, UseTextDirectionValue, UseTimeoutFnOptions, UseVirtualListItem, UseVirtualListOptions, UseVirtualListReturn, WindowSize, useActiveElement, useClickOutSide as useClickOutside, useClipBorad as useClipboard, useControlled, useCounter, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useFavicon, useFileDialog, useFirstMountState, useFocus, _default$2 as useFps, useFullscreen, useGeolocation, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, _default$3 as useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, _default$1 as useOnceEffect, _default as useOnceLayoutEffect, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useReducedMotion, useResizeObserver, useScriptTag, useScroll, useScrollIntoView, useScrollLock, useSessionStorage, useSticky, useTextDirection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, _default$5 as useUpdateEffect, _default$4 as useUpdateLayoutEffect, useVirtualList, useWindowScroll, useWindowSize, useWindowsFocus };
795
+ declare function useAsyncEffect<T extends void>(effect: () => Promise<T> | T, cleanup?: typeof effect, deps?: DependencyList): void;
796
+
797
+ export { ColorScheme, Contrast, CursorState, GeneralPermissionDescriptor, IDisposable, IEvent, IEventOnce, IListener, INetworkInformation, IState, IUseNetworkState, KeyModifier, MousePressedOptions, MouseSourceType, OrientationState, RafLoopReturns, ScrollIntoViewAnimation, ScrollIntoViewParams, State, Status, Target, UseDarkOptions, UseDraggableOptions, UseElementBoundingOptions, UseEventEmitterReturn, UseFileDialogOptions, UseFpsOptions, UseFullScreenOptions, UseInfiniteScrollOptions, UseLongPressOptions, UseModifierOptions, UseScriptTagOptions, UseScrollOptions, UseStickyParams, UseTextDirectionOptions, UseTextDirectionValue, UseTimeoutFnOptions, UseVirtualListItem, UseVirtualListOptions, UseVirtualListReturn, WindowSize, useActiveElement, useAsyncEffect, useClickOutSide as useClickOutside, useClipBorad as useClipboard, useControlled, useCounter, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useFavicon, useFileDialog, useFirstMountState, useFocus, _default$2 as useFps, useFullscreen, useGeolocation, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, _default$3 as useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, _default$1 as useOnceEffect, _default as useOnceLayoutEffect, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useReducedMotion, useResizeObserver, useScriptTag, useScroll, useScrollIntoView, useScrollLock, useSessionStorage, useSticky, useTextDirection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, _default$5 as useUpdateEffect, _default$4 as useUpdateLayoutEffect, useVirtualList, useWindowScroll, useWindowSize, useWindowsFocus };
package/dist/index.mjs CHANGED
@@ -539,8 +539,8 @@ function useDeepCompareEffect(effect, deps) {
539
539
 
540
540
  function useEventListener(eventName, handler, element, options) {
541
541
  const savedHandler = useLatest(handler);
542
+ const targetElement = getTargetElement(element, defaultWindow);
542
543
  useDeepCompareEffect(() => {
543
- const targetElement = getTargetElement(element, window);
544
544
  if (!(targetElement && targetElement.addEventListener)) {
545
545
  return;
546
546
  }
@@ -549,7 +549,7 @@ function useEventListener(eventName, handler, element, options) {
549
549
  return () => {
550
550
  off(targetElement, eventName, eventListener);
551
551
  };
552
- }, [eventName, element, options, savedHandler]);
552
+ }, [eventName, targetElement, options, savedHandler]);
553
553
  }
554
554
 
555
555
  function useCounter(initialValue = 0, max = null, min = null) {
@@ -693,20 +693,20 @@ function useFavicon(href, baseUrl = "", rel = "icon") {
693
693
  function useMutationObserver(callback, target, options = {}) {
694
694
  const callbackRef = useLatest(callback);
695
695
  const observerRef = useRef();
696
+ const element = getTargetElement(target);
696
697
  const stop = useCallback(() => {
697
698
  if (observerRef.current) {
698
699
  observerRef.current.disconnect();
699
700
  }
700
701
  }, []);
701
702
  useDeepCompareEffect(() => {
702
- const element = getTargetElement(target);
703
703
  if (!element) {
704
704
  return;
705
705
  }
706
706
  observerRef.current = new MutationObserver(callbackRef.current);
707
707
  observerRef.current.observe(element, options);
708
708
  return stop;
709
- }, [options, target]);
709
+ }, [options, element]);
710
710
  return stop;
711
711
  }
712
712
 
@@ -1491,13 +1491,13 @@ function useOrientation(initialState = defaultState) {
1491
1491
  function useIntersectionObserver(target, callback, options = {}) {
1492
1492
  const savedCallback = useLatest(callback);
1493
1493
  const observerRef = useRef();
1494
+ const element = getTargetElement(target);
1494
1495
  const stop = useCallback(() => {
1495
1496
  if (observerRef.current) {
1496
1497
  observerRef.current.disconnect();
1497
1498
  }
1498
1499
  }, []);
1499
1500
  useDeepCompareEffect(() => {
1500
- const element = getTargetElement(target);
1501
1501
  if (!element) {
1502
1502
  return;
1503
1503
  }
@@ -1507,7 +1507,7 @@ function useIntersectionObserver(target, callback, options = {}) {
1507
1507
  );
1508
1508
  observerRef.current.observe(element);
1509
1509
  return stop;
1510
- }, [options, target]);
1510
+ }, [options, element]);
1511
1511
  return stop;
1512
1512
  }
1513
1513
 
@@ -1547,20 +1547,20 @@ function useDocumentVisibility() {
1547
1547
  function useResizeObserver(target, callback, options = {}) {
1548
1548
  const savedCallback = useLatest(callback);
1549
1549
  const observerRef = useRef();
1550
+ const element = getTargetElement(target);
1550
1551
  const stop = useCallback(() => {
1551
1552
  if (observerRef.current) {
1552
1553
  observerRef.current.disconnect();
1553
1554
  }
1554
1555
  }, []);
1555
1556
  useDeepCompareEffect(() => {
1556
- const element = getTargetElement(target);
1557
1557
  if (!element) {
1558
1558
  return;
1559
1559
  }
1560
1560
  observerRef.current = new ResizeObserver(savedCallback.current);
1561
1561
  observerRef.current.observe(element, options);
1562
1562
  return stop;
1563
- }, [options, target]);
1563
+ }, [options, element]);
1564
1564
  return stop;
1565
1565
  }
1566
1566
 
@@ -1756,7 +1756,7 @@ var __spreadValues = (a, b) => {
1756
1756
  return a;
1757
1757
  };
1758
1758
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
1759
- var __async$1 = (__this, __arguments, generator) => {
1759
+ var __async$2 = (__this, __arguments, generator) => {
1760
1760
  return new Promise((resolve, reject) => {
1761
1761
  var fulfilled = (value) => {
1762
1762
  try {
@@ -1785,11 +1785,11 @@ function useInfiniteScroll(target, onLoadMore, options = {}) {
1785
1785
  [direction]: (_b = options.distance) != null ? _b : 0
1786
1786
  }, options.offset)
1787
1787
  }));
1788
+ const element = getTargetElement(target);
1788
1789
  const di = state[3][direction];
1789
1790
  useUpdateEffect(() => {
1790
- const fn = () => __async$1(this, null, function* () {
1791
+ const fn = () => __async$2(this, null, function* () {
1791
1792
  var _a2, _b2;
1792
- const element = getTargetElement(target);
1793
1793
  const previous = {
1794
1794
  height: (_a2 = element == null ? void 0 : element.scrollHeight) != null ? _a2 : 0,
1795
1795
  width: (_b2 = element == null ? void 0 : element.scrollWidth) != null ? _b2 : 0
@@ -1803,7 +1803,7 @@ function useInfiniteScroll(target, onLoadMore, options = {}) {
1803
1803
  }
1804
1804
  });
1805
1805
  fn();
1806
- }, [di, options.preserveScrollPosition, target]);
1806
+ }, [di, options.preserveScrollPosition, element]);
1807
1807
  }
1808
1808
 
1809
1809
  const defaultEvents = [
@@ -1840,6 +1840,7 @@ function useMousePressed(target, options = {}) {
1840
1840
  const { touch = true, drag = true, initialValue = false } = options;
1841
1841
  const [pressed, setPressed] = useState(initialValue);
1842
1842
  const [sourceType, setSourceType] = useState(null);
1843
+ const element = getTargetElement(target);
1843
1844
  const onPressed = useCallback(
1844
1845
  (srcType) => () => {
1845
1846
  setPressed(true);
@@ -1855,7 +1856,6 @@ function useMousePressed(target, options = {}) {
1855
1856
  useEventListener("mouseleave", onReleased, () => window, { passive: true });
1856
1857
  useEventListener("mouseup", onReleased, () => window, { passive: true });
1857
1858
  useEffect(() => {
1858
- const element = getTargetElement(target);
1859
1859
  if (drag) {
1860
1860
  element == null ? void 0 : element.addEventListener("dragstart", onPressed("mouse"), {
1861
1861
  passive: true
@@ -1890,7 +1890,7 @@ function useMousePressed(target, options = {}) {
1890
1890
  element == null ? void 0 : element.removeEventListener("touchcancel", onReleased);
1891
1891
  }
1892
1892
  };
1893
- }, [drag, onPressed, onReleased, target, touch]);
1893
+ }, [drag, onPressed, onReleased, element, touch]);
1894
1894
  return [pressed, sourceType];
1895
1895
  }
1896
1896
 
@@ -1907,17 +1907,16 @@ function preventDefault(rawEvent) {
1907
1907
  function useScrollLock(target, initialState = false) {
1908
1908
  const [locked, setLocked] = useState(initialState);
1909
1909
  const initialOverflowRef = useRef("scroll");
1910
+ const element = getTargetElement(target);
1910
1911
  useEffect(() => {
1911
- const element = getTargetElement(target);
1912
1912
  if (element) {
1913
1913
  initialOverflowRef.current = element.style.overflow;
1914
1914
  if (locked) {
1915
1915
  element.style.overflow = "hidden";
1916
1916
  }
1917
1917
  }
1918
- }, [locked, target]);
1918
+ }, [locked, element]);
1919
1919
  const lock = useEvent(() => {
1920
- const element = getTargetElement(target);
1921
1920
  if (!element || locked) {
1922
1921
  return;
1923
1922
  }
@@ -1927,7 +1926,6 @@ function useScrollLock(target, initialState = false) {
1927
1926
  setLocked(true);
1928
1927
  });
1929
1928
  const unlock = useEvent(() => {
1930
- const element = getTargetElement(target);
1931
1929
  if (!element || !locked) {
1932
1930
  return;
1933
1931
  }
@@ -2333,7 +2331,7 @@ function useWindowScroll() {
2333
2331
  return state;
2334
2332
  }
2335
2333
 
2336
- var __async = (__this, __arguments, generator) => {
2334
+ var __async$1 = (__this, __arguments, generator) => {
2337
2335
  return new Promise((resolve, reject) => {
2338
2336
  var fulfilled = (value) => {
2339
2337
  try {
@@ -2362,7 +2360,7 @@ function useClipBorad() {
2362
2360
  }, []);
2363
2361
  useEventListener("copy", updateText);
2364
2362
  useEventListener("cut", updateText);
2365
- const copy = useCallback((txt) => __async(this, null, function* () {
2363
+ const copy = useCallback((txt) => __async$1(this, null, function* () {
2366
2364
  setText(txt);
2367
2365
  yield window.navigator.clipboard.writeText(txt);
2368
2366
  }), []);
@@ -2681,8 +2679,9 @@ const useSticky = ({
2681
2679
  nav = 0
2682
2680
  }) => {
2683
2681
  const [isSticky, setSticky] = useState(false);
2682
+ const element = getTargetElement(targetElement);
2683
+ const scrollParent = getTargetElement(scrollElement) || getScrollParent(axis, element);
2684
2684
  const { run: scrollHandler } = useThrottleFn(() => {
2685
- const element = getTargetElement(targetElement);
2686
2685
  if (!element) {
2687
2686
  return;
2688
2687
  }
@@ -2694,12 +2693,7 @@ const useSticky = ({
2694
2693
  }
2695
2694
  }, 50);
2696
2695
  useEffect(() => {
2697
- const element = getTargetElement(targetElement);
2698
- if (!element) {
2699
- return;
2700
- }
2701
- const scrollParent = getTargetElement(scrollElement) || getScrollParent(axis, element);
2702
- if (!scrollParent) {
2696
+ if (!element || !scrollParent) {
2703
2697
  return;
2704
2698
  }
2705
2699
  scrollParent.addEventListener("scroll", scrollHandler);
@@ -2707,8 +2701,44 @@ const useSticky = ({
2707
2701
  return () => {
2708
2702
  scrollParent.removeEventListener("scroll", scrollHandler);
2709
2703
  };
2710
- }, [axis, scrollElement, scrollHandler, targetElement]);
2704
+ }, [axis, element, scrollHandler, scrollParent]);
2711
2705
  return [isSticky, setSticky];
2712
2706
  };
2713
2707
 
2714
- export { useActiveElement, useClickOutSide as useClickOutside, useClipBorad as useClipboard, useControlled, useCounter, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useFavicon, useFileDialog, useFirstMountState, useFocus, useFps$1 as useFps, useFullscreen, useGeolocation, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, useMediaDevices$1 as useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, useOnceEffect, useOnceLayoutEffect, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useReducedMotion, useResizeObserver, useScriptTag, useScroll, useScrollIntoView, useScrollLock, useSessionStorage, useSticky, useTextDirection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, useUpdateEffect, useUpdateLayoutEffect, useVirtualList, useWindowScroll, useWindowSize, useWindowsFocus };
2708
+ var __async = (__this, __arguments, generator) => {
2709
+ return new Promise((resolve, reject) => {
2710
+ var fulfilled = (value) => {
2711
+ try {
2712
+ step(generator.next(value));
2713
+ } catch (e) {
2714
+ reject(e);
2715
+ }
2716
+ };
2717
+ var rejected = (value) => {
2718
+ try {
2719
+ step(generator.throw(value));
2720
+ } catch (e) {
2721
+ reject(e);
2722
+ }
2723
+ };
2724
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
2725
+ step((generator = generator.apply(__this, __arguments)).next());
2726
+ });
2727
+ };
2728
+ function useAsyncEffect(effect, cleanup = noop, deps) {
2729
+ const mounted = useMountedState();
2730
+ useEffect(() => {
2731
+ const execute = () => __async(this, null, function* () {
2732
+ if (!mounted()) {
2733
+ return;
2734
+ }
2735
+ yield effect();
2736
+ });
2737
+ execute();
2738
+ return () => {
2739
+ cleanup();
2740
+ };
2741
+ }, deps);
2742
+ }
2743
+
2744
+ export { useActiveElement, useAsyncEffect, useClickOutSide as useClickOutside, useClipBorad as useClipboard, useControlled, useCounter, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useFavicon, useFileDialog, useFirstMountState, useFocus, useFps$1 as useFps, useFullscreen, useGeolocation, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, useMediaDevices$1 as useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, useOnceEffect, useOnceLayoutEffect, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useReducedMotion, useResizeObserver, useScriptTag, useScroll, useScrollIntoView, useScrollLock, useSessionStorage, useSticky, useTextDirection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, useUpdateEffect, useUpdateLayoutEffect, useVirtualList, useWindowScroll, useWindowSize, useWindowsFocus };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reactuses/core",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",