@aiszlab/relax 1.2.57 → 1.2.59

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 (133) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +138 -0
  2. package/dist/dom/contains.d.ts +1 -0
  3. package/dist/dom/contains.js +20 -0
  4. package/dist/dom/index.d.ts +3 -0
  5. package/dist/dom/index.js +2 -0
  6. package/dist/dom/scroll-to.d.ts +19 -0
  7. package/dist/dom/scroll-to.js +69 -0
  8. package/dist/hooks/use-boolean.d.ts +19 -0
  9. package/dist/hooks/use-boolean.js +34 -0
  10. package/dist/hooks/use-controlled-state.d.ts +17 -0
  11. package/dist/hooks/use-controlled-state.js +40 -0
  12. package/dist/hooks/use-counter.d.ts +33 -0
  13. package/dist/hooks/use-counter.js +59 -0
  14. package/dist/hooks/use-debounce-callback.d.ts +18 -0
  15. package/dist/hooks/use-debounce-callback.js +81 -0
  16. package/dist/hooks/use-default.d.ts +8 -0
  17. package/dist/hooks/use-default.js +14 -0
  18. package/dist/hooks/use-device-pixel-ratio.d.ts +6 -0
  19. package/dist/hooks/use-device-pixel-ratio.js +20 -0
  20. package/dist/hooks/use-event.d.ts +2 -0
  21. package/dist/hooks/use-event.js +12 -0
  22. package/dist/hooks/use-focus.d.ts +15 -0
  23. package/dist/hooks/use-focus.js +31 -0
  24. package/dist/hooks/use-force-update.d.ts +7 -0
  25. package/dist/hooks/use-force-update.js +21 -0
  26. package/dist/hooks/use-hover.d.ts +8 -0
  27. package/dist/hooks/use-hover.js +25 -0
  28. package/dist/hooks/use-identity.d.ts +5 -0
  29. package/dist/hooks/use-identity.js +20 -0
  30. package/dist/hooks/use-image-loader.d.ts +12 -0
  31. package/dist/hooks/use-image-loader.js +54 -0
  32. package/dist/hooks/use-media-query.d.ts +7 -0
  33. package/dist/hooks/use-memorable.d.ts +1 -0
  34. package/dist/hooks/use-memorable.js +14 -0
  35. package/dist/hooks/use-mount.d.ts +8 -0
  36. package/dist/hooks/use-mount.js +16 -0
  37. package/dist/hooks/use-mounted.d.ts +8 -0
  38. package/dist/hooks/use-mounted.js +16 -0
  39. package/dist/hooks/use-mutate-observer.d.ts +1 -0
  40. package/dist/hooks/use-mutate-observer.js +28 -0
  41. package/dist/hooks/use-raf.d.ts +7 -0
  42. package/dist/hooks/use-raf.js +26 -0
  43. package/dist/hooks/use-reactive.d.ts +6 -0
  44. package/dist/hooks/use-refs.d.ts +5 -0
  45. package/dist/hooks/use-refs.js +31 -0
  46. package/dist/hooks/use-scroll-locker.d.ts +5 -0
  47. package/dist/hooks/use-scroll-locker.js +92 -0
  48. package/dist/hooks/use-scrollable.d.ts +17 -0
  49. package/dist/hooks/use-scrollable.js +43 -0
  50. package/dist/hooks/use-throttle-callback.d.ts +18 -0
  51. package/dist/hooks/use-throttle-callback.js +83 -0
  52. package/dist/hooks/use-timeout.d.ts +10 -0
  53. package/dist/hooks/use-timeout.js +68 -0
  54. package/dist/hooks/use-togglable.d.ts +48 -0
  55. package/dist/hooks/use-togglable.js +177 -0
  56. package/dist/hooks/use-update-effect.d.ts +3 -0
  57. package/dist/hooks/use-update-effect.js +19 -0
  58. package/dist/index.d.ts +64 -0
  59. package/dist/index.js +52 -0
  60. package/dist/is/is-array.d.ts +5 -0
  61. package/dist/is/is-array.js +9 -0
  62. package/dist/is/is-complex.d.ts +5 -0
  63. package/dist/is/is-complex.js +11 -0
  64. package/dist/is/is-dom-usable.d.ts +5 -0
  65. package/dist/is/is-dom-usable.js +9 -0
  66. package/dist/is/is-empty.d.ts +7 -0
  67. package/dist/is/is-empty.js +25 -0
  68. package/dist/is/is-function.d.ts +5 -0
  69. package/dist/is/is-function.js +9 -0
  70. package/dist/is/is-map.d.ts +5 -0
  71. package/dist/is/is-mobile.d.ts +5 -0
  72. package/dist/is/is-mobile.js +13 -0
  73. package/dist/is/is-null.d.ts +5 -0
  74. package/dist/is/is-null.js +9 -0
  75. package/dist/is/is-overflow.d.ts +5 -0
  76. package/dist/is/is-overflow.js +14 -0
  77. package/dist/is/is-pointer-usable.d.ts +5 -0
  78. package/dist/is/is-primitive.d.ts +5 -0
  79. package/dist/is/is-primitive.js +9 -0
  80. package/dist/is/is-refable.d.ts +5 -0
  81. package/dist/is/is-refable.js +34 -0
  82. package/dist/is/is-set.d.ts +5 -0
  83. package/dist/is/is-set.js +9 -0
  84. package/dist/is/is-state-getter.d.ts +6 -0
  85. package/dist/is/is-state-getter.js +9 -0
  86. package/dist/is/is-style-element.d.ts +5 -0
  87. package/dist/is/is-style-element.js +9 -0
  88. package/dist/is/is-thenable.d.ts +5 -0
  89. package/dist/is/is-thenable.js +9 -0
  90. package/dist/is/is-undefined.d.ts +5 -0
  91. package/dist/is/is-undefined.js +9 -0
  92. package/dist/is/is-void.d.ts +5 -0
  93. package/dist/is/is-void.js +12 -0
  94. package/dist/types/first.d.ts +1 -0
  95. package/dist/types/index.d.ts +8 -0
  96. package/dist/types/last.d.ts +1 -0
  97. package/dist/types/nullable.d.ts +5 -0
  98. package/dist/types/partialable.d.ts +5 -0
  99. package/dist/types/required-in.d.ts +5 -0
  100. package/dist/types/state.d.ts +10 -0
  101. package/dist/types/thenable-effect-callback.d.ts +6 -0
  102. package/dist/types/voidable.d.ts +7 -0
  103. package/dist/utils/chain.d.ts +2 -0
  104. package/dist/utils/chain.js +15 -0
  105. package/dist/utils/clamp.d.ts +9 -0
  106. package/dist/utils/clamp.js +13 -0
  107. package/dist/utils/clone.d.ts +6 -0
  108. package/dist/utils/clone.js +17 -0
  109. package/dist/utils/debounce.d.ts +23 -0
  110. package/dist/utils/debounce.js +32 -0
  111. package/dist/utils/effect.d.ts +7 -0
  112. package/dist/utils/effect.js +16 -0
  113. package/dist/utils/exclude.d.ts +10 -0
  114. package/dist/utils/exclude.js +18 -0
  115. package/dist/utils/range.d.ts +7 -0
  116. package/dist/utils/range.js +16 -0
  117. package/dist/utils/set-style.d.ts +6 -0
  118. package/dist/utils/set-style.js +21 -0
  119. package/dist/utils/throttle.d.ts +5 -0
  120. package/dist/utils/throttle.js +32 -0
  121. package/dist/utils/to-array.d.ts +18 -0
  122. package/dist/utils/to-array.js +25 -0
  123. package/dist/utils/to-form-data.d.ts +5 -0
  124. package/dist/utils/to-form-data.js +27 -0
  125. package/dist/utils/to-function.d.ts +1 -0
  126. package/dist/utils/to-function.js +13 -0
  127. package/dist/utils/toggle.d.ts +8 -0
  128. package/dist/utils/toggle.js +30 -0
  129. package/dist/utils/unique.d.ts +10 -0
  130. package/dist/utils/unique.js +16 -0
  131. package/dist/utils/waitable.d.ts +36 -0
  132. package/dist/utils/waitable.js +90 -0
  133. package/package.json +2 -2
@@ -0,0 +1,31 @@
1
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useCallback } from 'react';
3
+ import { useBoolean } from './use-boolean.js';
4
+ import { chain } from '../utils/chain.js';
5
+
6
+ var useFocus = function useFocus(props) {
7
+ var _useBoolean = useBoolean(false),
8
+ _useBoolean2 = _slicedToArray(_useBoolean, 2),
9
+ isFocused = _useBoolean2[0],
10
+ _useBoolean2$ = _useBoolean2[1],
11
+ turnOn = _useBoolean2$.turnOn,
12
+ turnOff = _useBoolean2$.turnOff;
13
+ var onFocus = useCallback(function (e) {
14
+ chain(props === null || props === void 0 ? void 0 : props.onFocus, turnOn, function () {
15
+ var _props$onFocusChange;
16
+ return props === null || props === void 0 || (_props$onFocusChange = props.onFocusChange) === null || _props$onFocusChange === void 0 ? void 0 : _props$onFocusChange.call(props, true);
17
+ })(e);
18
+ }, [props === null || props === void 0 ? void 0 : props.onFocus, props === null || props === void 0 ? void 0 : props.onFocusChange]);
19
+ var onBlur = useCallback(function (e) {
20
+ chain(props === null || props === void 0 ? void 0 : props.onBlur, turnOff, function () {
21
+ var _props$onFocusChange2;
22
+ return props === null || props === void 0 || (_props$onFocusChange2 = props.onFocusChange) === null || _props$onFocusChange2 === void 0 ? void 0 : _props$onFocusChange2.call(props, false);
23
+ })(e);
24
+ }, [props === null || props === void 0 ? void 0 : props.onBlur, props === null || props === void 0 ? void 0 : props.onFocusChange]);
25
+ return [isFocused, {
26
+ onFocus: onFocus,
27
+ onBlur: onBlur
28
+ }];
29
+ };
30
+
31
+ export { useFocus };
@@ -0,0 +1,7 @@
1
+ type UsedForceUpdate = [number, () => void];
2
+ /**
3
+ * @description
4
+ * force update
5
+ */
6
+ export declare const useForceUpdate: () => UsedForceUpdate;
7
+ export {};
@@ -0,0 +1,21 @@
1
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useState, useCallback } from 'react';
3
+
4
+ /**
5
+ * @description
6
+ * force update
7
+ */
8
+ var useForceUpdate = function useForceUpdate() {
9
+ var _useState = useState(1),
10
+ _useState2 = _slicedToArray(_useState, 2),
11
+ times = _useState2[0],
12
+ setTimes = _useState2[1];
13
+ var forceUpdate = useCallback(function () {
14
+ setTimes(function (prev) {
15
+ return prev + 1;
16
+ });
17
+ }, []);
18
+ return [times, forceUpdate];
19
+ };
20
+
21
+ export { useForceUpdate };
@@ -0,0 +1,8 @@
1
+ import { type DOMAttributes } from "react";
2
+ type UseHoverBy<T> = {
3
+ onEnter?: DOMAttributes<T>["onPointerEnter"];
4
+ onLeave?: DOMAttributes<T>["onPointerLeave"];
5
+ };
6
+ type UsedHover<T> = [boolean, Required<Pick<DOMAttributes<T>, "onPointerEnter" | "onPointerLeave">>];
7
+ export declare const useHover: <T extends Element = Element>(props?: UseHoverBy<T>) => UsedHover<T>;
8
+ export {};
@@ -0,0 +1,25 @@
1
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useCallback } from 'react';
3
+ import { useBoolean } from './use-boolean.js';
4
+ import { chain } from '../utils/chain.js';
5
+
6
+ var useHover = function useHover(props) {
7
+ var _useBoolean = useBoolean(false),
8
+ _useBoolean2 = _slicedToArray(_useBoolean, 2),
9
+ isHovered = _useBoolean2[0],
10
+ _useBoolean2$ = _useBoolean2[1],
11
+ turnOn = _useBoolean2$.turnOn,
12
+ turnOff = _useBoolean2$.turnOff;
13
+ var onPointerEnter = useCallback(function (e) {
14
+ chain(props === null || props === void 0 ? void 0 : props.onEnter, turnOn)(e);
15
+ }, [props === null || props === void 0 ? void 0 : props.onEnter]);
16
+ var onPointerLeave = useCallback(function (e) {
17
+ chain(props === null || props === void 0 ? void 0 : props.onLeave, turnOff)(e);
18
+ }, [props === null || props === void 0 ? void 0 : props.onLeave]);
19
+ return [isHovered, {
20
+ onPointerEnter: onPointerEnter,
21
+ onPointerLeave: onPointerLeave
22
+ }];
23
+ };
24
+
25
+ export { useHover };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @description
3
+ * extends from react `useId`
4
+ */
5
+ export declare const useIdentity: (signal?: string) => [string, () => string];
@@ -0,0 +1,20 @@
1
+ import { useId, useRef, useCallback } from 'react';
2
+
3
+ /**
4
+ * @description
5
+ * extends from react `useId`
6
+ */
7
+ var useIdentity = function useIdentity() {
8
+ var signal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
9
+ var id = useId();
10
+ var count = useRef(0);
11
+ var unique = useCallback(function () {
12
+ if (!signal) {
13
+ return "".concat(id).concat(count.current++);
14
+ }
15
+ return "".concat(id).concat(signal, ":").concat(count.current++);
16
+ }, []);
17
+ return [id, unique];
18
+ };
19
+
20
+ export { useIdentity };
@@ -0,0 +1,12 @@
1
+ type Status = "none" | "loading" | "error" | "loaded";
2
+ interface Props {
3
+ src: string;
4
+ }
5
+ /**
6
+ * @author murukal
7
+ *
8
+ * @description
9
+ * image loader
10
+ */
11
+ export declare const useImageLoader: ({ src }: Props) => Status;
12
+ export {};
@@ -0,0 +1,54 @@
1
+ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useRef, useState, useEffect } from 'react';
3
+ import { Observable } from 'rxjs';
4
+
5
+ /**
6
+ * @author murukal
7
+ *
8
+ * @description
9
+ * image loader
10
+ */
11
+ var useImageLoader = function useImageLoader(_ref) {
12
+ var src = _ref.src;
13
+ var loader = useRef();
14
+ var _useState = useState("none"),
15
+ _useState2 = _slicedToArray(_useState, 2),
16
+ status = _useState2[0],
17
+ setStatus = _useState2[1];
18
+ useEffect(function () {
19
+ if (!src) {
20
+ return setStatus("none");
21
+ }
22
+ // create observable to listen img status
23
+ new Observable(function (subscriber) {
24
+ loader.current = subscriber;
25
+ subscriber.next();
26
+ }).subscribe({
27
+ next: function next() {
28
+ return setStatus("loading");
29
+ },
30
+ complete: function complete() {
31
+ return setStatus("loaded");
32
+ },
33
+ error: function error() {
34
+ return setStatus("error");
35
+ }
36
+ });
37
+ var image = new Image();
38
+ image.addEventListener("load", function () {
39
+ var _loader$current;
40
+ (_loader$current = loader.current) === null || _loader$current === void 0 || _loader$current.complete();
41
+ });
42
+ image.addEventListener("error", function () {
43
+ var _loader$current2;
44
+ (_loader$current2 = loader.current) === null || _loader$current2 === void 0 || _loader$current2.error(null);
45
+ });
46
+ image.src = src;
47
+ return function () {
48
+ image.remove();
49
+ };
50
+ }, [src]);
51
+ return status;
52
+ };
53
+
54
+ export { useImageLoader };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @author murukal
3
+ * @description 监听浏览器 media 变化,控制状态
4
+ *
5
+ * media 规则 @media not|only mediatype and (mediafeature and|or|not mediafeature)
6
+ */
7
+ export declare const useMediaQuery: () => void;
@@ -0,0 +1 @@
1
+ export declare const useMemorable: <Value, Condition = unknown[]>(getter: () => Value, condition: Condition, shouldUpdate: (prev: Condition, next: Condition) => boolean) => Value;
@@ -0,0 +1,14 @@
1
+ import { useRef } from 'react';
2
+
3
+ var useMemorable = function useMemorable(getter, condition, shouldUpdate) {
4
+ var cacheRef = useRef(null);
5
+ if (cacheRef.current === null || shouldUpdate(cacheRef.current.condition, condition)) {
6
+ cacheRef.current = {
7
+ value: getter(),
8
+ condition: condition
9
+ };
10
+ }
11
+ return cacheRef.current.value;
12
+ };
13
+
14
+ export { useMemorable };
@@ -0,0 +1,8 @@
1
+ import type { ThenableEffectCallback } from "../types";
2
+ /**
3
+ * @author murukal
4
+ *
5
+ * @description
6
+ * when components will mount
7
+ */
8
+ export declare const useMount: (callback: ThenableEffectCallback) => void;
@@ -0,0 +1,16 @@
1
+ import { useLayoutEffect } from 'react';
2
+ import { effect } from '../utils/effect.js';
3
+
4
+ /**
5
+ * @author murukal
6
+ *
7
+ * @description
8
+ * when components will mount
9
+ */
10
+ var useMount = function useMount(callback) {
11
+ useLayoutEffect(function () {
12
+ return effect(callback);
13
+ }, []);
14
+ };
15
+
16
+ export { useMount };
@@ -0,0 +1,8 @@
1
+ import type { ThenableEffectCallback } from "../types";
2
+ /**
3
+ * @author murukal
4
+ *
5
+ * @description
6
+ * when components mounted
7
+ */
8
+ export declare const useMounted: (callback: ThenableEffectCallback) => void;
@@ -0,0 +1,16 @@
1
+ import { useEffect } from 'react';
2
+ import { effect } from '../utils/effect.js';
3
+
4
+ /**
5
+ * @author murukal
6
+ *
7
+ * @description
8
+ * when components mounted
9
+ */
10
+ var useMounted = function useMounted(callback) {
11
+ useEffect(function () {
12
+ return effect(callback);
13
+ }, []);
14
+ };
15
+
16
+ export { useMounted };
@@ -0,0 +1 @@
1
+ export declare const useMutateObserver: (_elements: HTMLElement | HTMLElement[] | null, _callback: MutationCallback) => void;
@@ -0,0 +1,28 @@
1
+ import { useEffect } from 'react';
2
+ import { useEvent } from './use-event.js';
3
+ import { isDomUsable } from '../is/is-dom-usable.js';
4
+ import { toArray } from '../utils/to-array.js';
5
+
6
+ var useMutateObserver = function useMutateObserver(_elements, _callback) {
7
+ var callback = useEvent(_callback);
8
+ useEffect(function () {
9
+ if (!isDomUsable() || !_elements) {
10
+ return;
11
+ }
12
+ var elements = toArray(_elements);
13
+ var listener = new MutationObserver(callback);
14
+ elements.forEach(function (element) {
15
+ listener.observe(element, {
16
+ subtree: true,
17
+ childList: true,
18
+ attributeFilter: ["style", "class"]
19
+ });
20
+ });
21
+ return function () {
22
+ listener.takeRecords();
23
+ listener.disconnect();
24
+ };
25
+ }, [_elements, callback]);
26
+ };
27
+
28
+ export { useMutateObserver };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @description
3
+ * raf
4
+ */
5
+ export declare const useRaf: (_callback: Function, { timely, }?: {
6
+ timely?: boolean;
7
+ }) => () => void;
@@ -0,0 +1,26 @@
1
+ import { useRef } from 'react';
2
+ import { useEvent } from './use-event.js';
3
+
4
+ /**
5
+ * @description
6
+ * raf
7
+ */
8
+ var useRaf = function useRaf(_callback) {
9
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
10
+ _ref$timely = _ref.timely,
11
+ timely = _ref$timely === void 0 ? false : _ref$timely;
12
+ var callback = useEvent(_callback);
13
+ var timed = useRef(null);
14
+ var isTimed = useRef(false);
15
+ return function () {
16
+ if (isTimed.current) return;
17
+ isTimed.current = true;
18
+ timely && callback();
19
+ timed.current = requestAnimationFrame(function () {
20
+ isTimed.current = false;
21
+ !timely && callback();
22
+ });
23
+ };
24
+ };
25
+
26
+ export { useRaf };
@@ -0,0 +1,6 @@
1
+ import type { State } from "../types";
2
+ /**
3
+ * @description
4
+ * use reactive
5
+ */
6
+ export declare const useReactive: <T>(initialState: State<T>) => void;
@@ -0,0 +1,5 @@
1
+ import { type MutableRefObject, type RefCallback } from "react";
2
+ import type { Nullable, Voidable } from "../types";
3
+ type Refable<T> = RefCallback<T> | MutableRefObject<T> | string;
4
+ export declare const useRefs: <T>(...refs: Voidable<Refable<Nullable<T>>>[]) => (trigger: T) => void;
5
+ export {};
@@ -0,0 +1,31 @@
1
+ import { useMemo } from 'react';
2
+ import { isFunction } from '../is/is-function.js';
3
+
4
+ var mount = function mount(ref, trigger) {
5
+ if (isFunction(ref)) {
6
+ ref(trigger);
7
+ return;
8
+ }
9
+ // in deprecated react, class component can use string ref
10
+ // but there are many problems, in relax, we just make it not work
11
+ // issue for react: https://github.com/facebook/react/pull/8333#issuecomment-271648615
12
+ if (typeof ref === "string") {
13
+ return;
14
+ }
15
+ ref.current = trigger;
16
+ };
17
+ var useRefs = function useRefs() {
18
+ for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
19
+ refs[_key] = arguments[_key];
20
+ }
21
+ return useMemo(function () {
22
+ return function (trigger) {
23
+ refs.forEach(function (ref) {
24
+ if (!ref) return;
25
+ mount(ref, trigger);
26
+ });
27
+ };
28
+ }, refs);
29
+ };
30
+
31
+ export { useRefs };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @description
3
+ * hooks
4
+ */
5
+ export declare const useScrollLocker: (isLock?: boolean) => void;
@@ -0,0 +1,92 @@
1
+ import { createClass as _createClass, classPrivateFieldGet2 as _classPrivateFieldGet2, classPrivateFieldSet2 as _classPrivateFieldSet2, classCallCheck as _classCallCheck, classPrivateFieldInitSpec as _classPrivateFieldInitSpec } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useLayoutEffect } from 'react';
3
+ import { isOverflow } from '../is/is-overflow.js';
4
+ import { setStyle } from '../utils/set-style.js';
5
+
6
+ var _barSize = /*#__PURE__*/new WeakMap();
7
+ var _locked = /*#__PURE__*/new WeakMap();
8
+ var ScrollLocker = /*#__PURE__*/function () {
9
+ function ScrollLocker() {
10
+ var _scrollLocker$_;
11
+ _classCallCheck(this, ScrollLocker);
12
+ // bar size
13
+ _classPrivateFieldInitSpec(this, _barSize, null);
14
+ // locked elements, with previous styles
15
+ _classPrivateFieldInitSpec(this, _locked, new Map());
16
+ return (_scrollLocker$_ = _scrollLocker._) !== null && _scrollLocker$_ !== void 0 ? _scrollLocker$_ : _scrollLocker._ = this;
17
+ }
18
+ return _createClass(ScrollLocker, [{
19
+ key: "barSize",
20
+ get: function get() {
21
+ if (_classPrivateFieldGet2(_barSize, this)) return _classPrivateFieldGet2(_barSize, this);
22
+ // how to calculate dom scroll bar size
23
+ // create a backend dom element, set force scrollable
24
+ var _target = document.createElement("div");
25
+ _target.attributeStyleMap.set("position", "absolute");
26
+ _target.attributeStyleMap.set("left", "0");
27
+ _target.attributeStyleMap.set("top", "0");
28
+ _target.attributeStyleMap.set("width", "100vw");
29
+ _target.attributeStyleMap.set("height", "100vh");
30
+ _target.attributeStyleMap.set("overflow", "scroll");
31
+ // calculate, then clear
32
+ document.body.appendChild(_target);
33
+ _classPrivateFieldSet2(_barSize, this, {
34
+ width: _target.offsetWidth - _target.clientWidth,
35
+ height: _target.offsetHeight - _target.clientHeight
36
+ });
37
+ document.body.removeChild(_target);
38
+ return _classPrivateFieldGet2(_barSize, this);
39
+ }
40
+ }, {
41
+ key: "isOverflow",
42
+ get: function get() {
43
+ return isOverflow();
44
+ }
45
+ }, {
46
+ key: "lock",
47
+ value: function lock() {
48
+ var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body;
49
+ // if locked, do not lock again
50
+ if (_classPrivateFieldGet2(_locked, this).has(element)) return;
51
+ // if target is not scrollable, do not lock
52
+ if (!isOverflow(element)) return;
53
+ _classPrivateFieldGet2(_locked, this).set(element, setStyle(element, {
54
+ overflow: "hidden",
55
+ width: "calc(100% - ".concat(this.barSize.width, "px)")
56
+ }));
57
+ }
58
+ }, {
59
+ key: "unlock",
60
+ value: function unlock() {
61
+ var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body;
62
+ // not locked, no need to unlock
63
+ if (!_classPrivateFieldGet2(_locked, this).has(element)) return;
64
+ // reset style, in lock, some styled are setted
65
+ setStyle(element, _classPrivateFieldGet2(_locked, this).get(element));
66
+ _classPrivateFieldGet2(_locked, this)["delete"](element);
67
+ }
68
+ }]);
69
+ }();
70
+ /**
71
+ * @description
72
+ * hooks
73
+ */
74
+ // singleton mode
75
+ var _scrollLocker = {
76
+ _: null
77
+ };
78
+ var useScrollLocker = function useScrollLocker(isLock) {
79
+ useLayoutEffect(function () {
80
+ var scrollLocker = new ScrollLocker();
81
+ if (!!isLock) {
82
+ scrollLocker.lock(document.body);
83
+ } else {
84
+ scrollLocker.unlock(document.body);
85
+ }
86
+ return function () {
87
+ scrollLocker.unlock(document.body);
88
+ };
89
+ }, [!!isLock]);
90
+ };
91
+
92
+ export { useScrollLocker };
@@ -0,0 +1,17 @@
1
+ import { type Key } from "react";
2
+ import { type Direction } from "../dom/scroll-to";
3
+ interface Dependencies {
4
+ direction?: Direction;
5
+ }
6
+ /**
7
+ * @description
8
+ * scrollable hook
9
+ */
10
+ export declare const useScrollable: <P extends HTMLElement, C extends HTMLElement>({ direction, }?: Dependencies) => {
11
+ targetRef: import("react").RefObject<P>;
12
+ triggerRefs: import("react").MutableRefObject<Map<Key, C | null>>;
13
+ scrollTo: (to: number, duration?: number) => void;
14
+ to: (key: Key) => number;
15
+ setTrigger: (key: Key, trigger: C) => void;
16
+ };
17
+ export {};
@@ -0,0 +1,43 @@
1
+ import { useRef, useCallback } from 'react';
2
+ import { scrollTo } from '../dom/scroll-to.js';
3
+
4
+ /**
5
+ * @description
6
+ * scrollable hook
7
+ */
8
+ var useScrollable = function useScrollable() {
9
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
10
+ _ref$direction = _ref.direction,
11
+ direction = _ref$direction === void 0 ? "vertical" : _ref$direction;
12
+ var targetRef = useRef(null);
13
+ var triggerRefs = useRef(new Map());
14
+ var scrollTo$1 = useCallback(function (to) {
15
+ var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
16
+ var target = targetRef.current;
17
+ if (!target) return;
18
+ // use animated scroll
19
+ scrollTo(target, to, {
20
+ duration: duration,
21
+ direction: direction
22
+ });
23
+ }, [direction]);
24
+ var to = useCallback(function (key) {
25
+ var trigger = triggerRefs.current.get(key);
26
+ if (!trigger) return 0;
27
+ // different direction, use different property
28
+ return direction === "vertical" ? trigger.offsetTop : trigger.offsetLeft;
29
+ }, [direction]);
30
+ /// set trigger
31
+ var setTrigger = useCallback(function (key, trigger) {
32
+ triggerRefs.current.set(key, trigger);
33
+ }, []);
34
+ return {
35
+ targetRef: targetRef,
36
+ triggerRefs: triggerRefs,
37
+ scrollTo: scrollTo$1,
38
+ to: to,
39
+ setTrigger: setTrigger
40
+ };
41
+ };
42
+
43
+ export { useScrollable };
@@ -0,0 +1,18 @@
1
+ import { type Throttler, type Throttled } from "../utils/throttle";
2
+ import { type Callable } from "./use-event";
3
+ /**
4
+ * @author murukal
5
+ *
6
+ * @description
7
+ * throttle callback
8
+ *
9
+ * @param callback
10
+ * @param wait number
11
+ * @description
12
+ * The wait time (in milliseconds) until the throttle function is called.
13
+ * default 1000
14
+ *
15
+ * @example
16
+ * 1000
17
+ */
18
+ export declare const useThrottleCallback: <T extends Callable, R extends Array<unknown> = Parameters<T>>(throttler: T | Throttler<T, R>, wait?: number) => Throttled<T>;
@@ -0,0 +1,83 @@
1
+ import { useRef, useEffect, useMemo } from 'react';
2
+ import { throttle } from '../utils/throttle.js';
3
+ import { useEvent } from './use-event.js';
4
+ import { isFunction } from '../is/is-function.js';
5
+ import { useDefault } from './use-default.js';
6
+
7
+ var useThrottler = function useThrottler(throttler) {
8
+ var _useMemo = useMemo(function () {
9
+ return isFunction(throttler) ? {
10
+ callback: throttler,
11
+ pipe: null
12
+ } : throttler;
13
+ }, [throttler]),
14
+ callback = _useMemo.callback,
15
+ pipe = _useMemo.pipe;
16
+ return {
17
+ callback: useEvent(function () {
18
+ return callback.apply(void 0, arguments);
19
+ }),
20
+ pipe: useEvent(function () {
21
+ var _pipe;
22
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
23
+ args[_key] = arguments[_key];
24
+ }
25
+ return (_pipe = pipe === null || pipe === void 0 ? void 0 : pipe.apply(void 0, args)) !== null && _pipe !== void 0 ? _pipe : args;
26
+ })
27
+ };
28
+ };
29
+ /**
30
+ * @author murukal
31
+ *
32
+ * @description
33
+ * throttle callback
34
+ *
35
+ * @param callback
36
+ * @param wait number
37
+ * @description
38
+ * The wait time (in milliseconds) until the throttle function is called.
39
+ * default 1000
40
+ *
41
+ * @example
42
+ * 1000
43
+ */
44
+ var useThrottleCallback = function useThrottleCallback(throttler) {
45
+ var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
46
+ var throttled = useRef(null);
47
+ var _useThrottler = useThrottler(throttler),
48
+ callback = _useThrottler.callback,
49
+ pipe = _useThrottler.pipe;
50
+ useEffect(function () {
51
+ var _throttled = throttle({
52
+ callback: callback,
53
+ pipe: pipe
54
+ }, wait);
55
+ throttled.current = _throttled;
56
+ // dispose
57
+ return function () {
58
+ _throttled.abort();
59
+ throttled.current = null;
60
+ };
61
+ }, [wait]);
62
+ return useDefault(function () {
63
+ return {
64
+ next: function next() {
65
+ var _throttled$current;
66
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
67
+ args[_key2] = arguments[_key2];
68
+ }
69
+ return (_throttled$current = throttled.current) === null || _throttled$current === void 0 ? void 0 : _throttled$current.next.apply(_throttled$current, args);
70
+ },
71
+ flush: function flush() {
72
+ var _throttled$current2;
73
+ return (_throttled$current2 = throttled.current) === null || _throttled$current2 === void 0 ? void 0 : _throttled$current2.flush();
74
+ },
75
+ abort: function abort() {
76
+ var _throttled$current3;
77
+ return (_throttled$current3 = throttled.current) === null || _throttled$current3 === void 0 ? void 0 : _throttled$current3.abort();
78
+ }
79
+ };
80
+ });
81
+ };
82
+
83
+ export { useThrottleCallback };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @author murukal
3
+ *
4
+ * @description
5
+ * timeout effect
6
+ */
7
+ export declare const useTimeout: (callback: Function, wait: number) => {
8
+ flush: () => void;
9
+ cancel: () => void;
10
+ };