@siberiacancode/reactuse 0.3.10 → 0.3.13

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 (79) hide show
  1. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs +1 -1
  2. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs.map +1 -1
  3. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs +1 -1
  4. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs.map +1 -1
  5. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
  6. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  7. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs +1 -1
  8. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
  9. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs.map +1 -1
  10. package/dist/cjs/hooks/useHash/useHash.cjs +1 -1
  11. package/dist/cjs/hooks/useHash/useHash.cjs.map +1 -1
  12. package/dist/cjs/hooks/useHover/useHover.cjs +1 -1
  13. package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
  14. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs +1 -1
  15. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs.map +1 -1
  16. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs +1 -1
  17. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs.map +1 -1
  18. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs +1 -1
  19. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs.map +1 -1
  20. package/dist/cjs/hooks/useLongPress/useLongPress.cjs +1 -1
  21. package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
  22. package/dist/cjs/hooks/useMediaControls/useMediaControls.cjs.map +1 -1
  23. package/dist/cjs/hooks/usePostMessage/usePostMessage.cjs +1 -1
  24. package/dist/cjs/hooks/usePostMessage/usePostMessage.cjs.map +1 -1
  25. package/dist/cjs/hooks/useProgress/useProgress.cjs +2 -0
  26. package/dist/cjs/hooks/useProgress/useProgress.cjs.map +1 -0
  27. package/dist/cjs/hooks/useSticky/useSticky.cjs +1 -1
  28. package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
  29. package/dist/cjs/hooks/useWindowScroll/useWindowScroll.cjs +1 -1
  30. package/dist/cjs/hooks/useWindowScroll/useWindowScroll.cjs.map +1 -1
  31. package/dist/cjs/index.cjs +1 -1
  32. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs +1 -1
  33. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
  34. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs +11 -11
  35. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs.map +1 -1
  36. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs +9 -9
  37. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
  38. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +3 -1
  39. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
  40. package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs.map +1 -1
  41. package/dist/esm/hooks/useHash/useHash.mjs +6 -3
  42. package/dist/esm/hooks/useHash/useHash.mjs.map +1 -1
  43. package/dist/esm/hooks/useHover/useHover.mjs +4 -4
  44. package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
  45. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs +1 -1
  46. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs.map +1 -1
  47. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs +1 -1
  48. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs.map +1 -1
  49. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs +1 -1
  50. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs.map +1 -1
  51. package/dist/esm/hooks/useLongPress/useLongPress.mjs +1 -4
  52. package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
  53. package/dist/esm/hooks/useMediaControls/useMediaControls.mjs.map +1 -1
  54. package/dist/esm/hooks/usePostMessage/usePostMessage.mjs +18 -14
  55. package/dist/esm/hooks/usePostMessage/usePostMessage.mjs.map +1 -1
  56. package/dist/esm/hooks/useProgress/useProgress.mjs +25 -0
  57. package/dist/esm/hooks/useProgress/useProgress.mjs.map +1 -0
  58. package/dist/esm/hooks/useSticky/useSticky.mjs +1 -1
  59. package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
  60. package/dist/esm/hooks/useWindowScroll/useWindowScroll.mjs +1 -4
  61. package/dist/esm/hooks/useWindowScroll/useWindowScroll.mjs.map +1 -1
  62. package/dist/esm/index.mjs +74 -72
  63. package/dist/esm/index.mjs.map +1 -1
  64. package/dist/types/hooks/time.d.ts +1 -0
  65. package/dist/types/hooks/useActiveElement/useActiveElement.d.ts +4 -3
  66. package/dist/types/hooks/useAutoScroll/useAutoScroll.d.ts +5 -3
  67. package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +5 -3
  68. package/dist/types/hooks/useDoubleClick/useDoubleClick.d.ts +7 -5
  69. package/dist/types/hooks/useFocusTrap/useFocusTrap.d.ts +2 -2
  70. package/dist/types/hooks/useHash/useHash.d.ts +10 -5
  71. package/dist/types/hooks/useHover/useHover.d.ts +8 -6
  72. package/dist/types/hooks/useInfiniteScroll/useInfiniteScroll.d.ts +12 -6
  73. package/dist/types/hooks/useKeyPress/useKeyPress.d.ts +10 -4
  74. package/dist/types/hooks/useKeysPressed/useKeysPressed.d.ts +10 -10
  75. package/dist/types/hooks/useLongPress/useLongPress.d.ts +9 -3
  76. package/dist/types/hooks/usePostMessage/usePostMessage.d.ts +5 -2
  77. package/dist/types/hooks/useProgress/useProgress.d.ts +51 -0
  78. package/dist/types/hooks/useSticky/useSticky.d.ts +5 -5
  79. package/package.json +89 -89
@@ -1,4 +1,5 @@
1
1
  export * from './useInterval/useInterval';
2
+ export * from './useProgress/useProgress';
2
3
  export * from './useStopwatch/useStopwatch';
3
4
  export * from './useTime/useTime';
4
5
  export * from './useTimeout/useTimeout';
@@ -1,13 +1,14 @@
1
1
  import { HookTarget } from '../../utils/helpers';
2
2
  import { StateRef } from '../useRefState/useRefState';
3
3
  /** The use active element return type */
4
- export type UseActiveElementReturn<ActiveElement extends HTMLElement = HTMLElement> = ActiveElement | null;
4
+ export interface UseActiveElementReturn<ActiveElement extends HTMLElement = HTMLElement> {
5
+ value: ActiveElement | null;
6
+ }
5
7
  export interface UseActiveElement {
6
8
  (): UseActiveElementReturn;
7
9
  <Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(target?: never): {
8
10
  ref: StateRef<Target>;
9
- value: UseActiveElementReturn<ActiveElement>;
10
- };
11
+ } & UseActiveElementReturn<ActiveElement>;
11
12
  <ActiveElement extends HTMLElement = HTMLElement>(target: HookTarget): UseActiveElementReturn<ActiveElement>;
12
13
  }
13
14
  /**
@@ -9,7 +9,9 @@ export interface UseAutoScrollOptions {
9
9
  }
10
10
  export interface UseAutoScroll {
11
11
  (target: HookTarget, options?: UseAutoScrollOptions): void;
12
- <Target extends HTMLElement>(options?: UseAutoScrollOptions): StateRef<Target>;
12
+ <Target extends HTMLElement>(options?: UseAutoScrollOptions): {
13
+ ref: StateRef<Target>;
14
+ };
13
15
  }
14
16
  /**
15
17
  * @name useAutoScroll
@@ -28,9 +30,9 @@ export interface UseAutoScroll {
28
30
  * @overload
29
31
  * @template Target
30
32
  * @param {boolean} [options.enabled] Whether auto-scrolling is enabled
31
- * @returns {StateRef<Target>} A React ref to attach to the list element
33
+ * @returns {{ ref: StateRef<Target> }} A React ref to attach to the list element
32
34
  *
33
35
  * @example
34
- * const ref = useAutoScroll();
36
+ * const { ref } = useAutoScroll();
35
37
  */
36
38
  export declare const useAutoScroll: UseAutoScroll;
@@ -2,7 +2,9 @@ import { HookTarget } from '../../utils/helpers';
2
2
  import { StateRef } from '../useRefState/useRefState';
3
3
  export interface UseClickOutside {
4
4
  (target: HookTarget, callback: (event: Event) => void): void;
5
- <Target extends Element>(callback: (event: Event) => void, target?: never): StateRef<Target>;
5
+ <Target extends Element>(callback: (event: Event) => void, target?: never): {
6
+ ref: StateRef<Target>;
7
+ };
6
8
  }
7
9
  /**
8
10
  * @name useClickOutside
@@ -21,10 +23,10 @@ export interface UseClickOutside {
21
23
  * @overload
22
24
  * @template Target The target element(s)
23
25
  * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected
24
- * @returns {StateRef<Target>} A ref to attach to the target element
26
+ * @returns {{ ref: StateRef<Target> }} A ref to attach to the target element
25
27
  *
26
28
  * @example
27
- * const ref = useClickOutside<HTMLDivElement>(() => console.log('click outside'));
29
+ * const { ref } = useClickOutside<HTMLDivElement>(() => console.log('click outside'));
28
30
  *
29
31
  * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useClickOutside.html}
30
32
  */
@@ -9,8 +9,10 @@ export interface UseDoubleClickOptions {
9
9
  onSingleClick?: (event: DoubleClickEvents) => void;
10
10
  }
11
11
  export interface UseDoubleClick {
12
- (target: HookTarget, callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions): boolean;
13
- <Target extends Element>(callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions, target?: never): StateRef<Target>;
12
+ (target: HookTarget, callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions): void;
13
+ <Target extends Element>(callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions, target?: never): {
14
+ ref: StateRef<Target>;
15
+ };
14
16
  }
15
17
  export declare const DEFAULT_THRESHOLD_TIME = 300;
16
18
  /**
@@ -23,7 +25,7 @@ export declare const DEFAULT_THRESHOLD_TIME = 300;
23
25
  * @param {HookTarget} target The target element to be double clicked
24
26
  * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click
25
27
  * @param {UseDoubleClickOptions} [options] The options for the double click
26
- * @returns {boolean} The double clicking state
28
+ * @returns {void} The double clicking state
27
29
  *
28
30
  * @example
29
31
  * useDoubleClick(ref, () => console.log('double clicked'));
@@ -32,10 +34,10 @@ export declare const DEFAULT_THRESHOLD_TIME = 300;
32
34
  * @template Target The target element
33
35
  * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click
34
36
  * @param {UseDoubleClickOptions} [options] The options for the double click
35
- * @returns {boolean} The double clicking state
37
+ * @returns {{ ref: StateRef<Target> }} The double clicking state
36
38
  *
37
39
  * @example
38
- * const ref = useDoubleClick(() => console.log('double clicked'));
40
+ * const { ref } = useDoubleClick(() => console.log('double clicked'));
39
41
  *
40
42
  * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}
41
43
  */
@@ -27,7 +27,7 @@ export interface UseFocusTrap {
27
27
  * @overload
28
28
  * @param {HookTarget} target The target element for focus trap
29
29
  * @param {boolean} [active=true] Whether focus trap is active
30
- * @returns {UseFocusTrapReturn} Object with control methods and state
30
+ * @returns {UseFocusTrapReturn} Object with the focus trap state and methods
31
31
  *
32
32
  * @example
33
33
  * const { active, disable, toggle, enable } = useFocusTrap(ref, true);
@@ -35,7 +35,7 @@ export interface UseFocusTrap {
35
35
  * @overload
36
36
  * @template Target The target element type
37
37
  * @param {boolean} [active=true] Whether focus trap is active
38
- * @returns {UseFocusTrapReturn & { ref: StateRef<Target> }} Object with ref and controls
38
+ * @returns {UseFocusTrapReturn & { ref: StateRef<Target> }} Object with the focus trap state and methods
39
39
  *
40
40
  * @example
41
41
  * const { ref, active, disable, toggle, enable } = useFocusTrap(true);
@@ -9,7 +9,12 @@ export interface UseHashOptions {
9
9
  onChange?: (hash: string) => void;
10
10
  }
11
11
  /** The use hash return type */
12
- type UseHashReturn = [string, (value: string) => void];
12
+ interface UseHashReturn {
13
+ /** The hash value */
14
+ value: string;
15
+ /** The function to set the hash value */
16
+ set: (value: string) => void;
17
+ }
13
18
  export interface UseHash {
14
19
  (initialValue?: string, options?: UseHashOptions): UseHashReturn;
15
20
  (options?: UseHashOptions): UseHashReturn;
@@ -31,7 +36,7 @@ export interface UseHash {
31
36
  * @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
32
37
  *
33
38
  * @example
34
- * const [hash, setHash] = useHash("initial");
39
+ * const { value, set } = useHash("initial");
35
40
  *
36
41
  * @overload
37
42
  * @param {string} [initialValue] The initial hash value if no hash exists
@@ -39,7 +44,7 @@ export interface UseHash {
39
44
  * @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
40
45
  *
41
46
  * @example
42
- * const [hash, setHash] = useHash("initial", (newHash) => console.log('callback'));
47
+ * const { value, set } = useHash("initial", (newHash) => console.log('callback'));
43
48
  *
44
49
  * @overload
45
50
  * @param {UseHashOptions} [options] Configuration options
@@ -49,14 +54,14 @@ export interface UseHash {
49
54
  * @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
50
55
  *
51
56
  * @example
52
- * const [hash, setHash] = useHash();
57
+ * const { value, set } = useHash();
53
58
  *
54
59
  * @overload
55
60
  * @param {(hash: string) => void} [callback] Callback function called when hash changes
56
61
  * @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
57
62
  *
58
63
  * @example
59
- * const [hash, setHash] = useHash((newHash) => console.log('callback'));
64
+ * const { value, set } = useHash((newHash) => console.log('callback'));
60
65
  */
61
66
  export declare const useHash: UseHash;
62
67
  export {};
@@ -9,18 +9,20 @@ export interface UseHoverOptions {
9
9
  /** The on leave callback */
10
10
  onLeave?: (event: Event) => void;
11
11
  }
12
+ /** The use hover return type */
12
13
  export interface UseHoverReturn {
14
+ /** The value of the hover */
13
15
  value: boolean;
14
16
  }
15
17
  export interface UseHover {
16
- (target: HookTarget, callback?: (event: Event) => void): boolean;
17
- (target: HookTarget, options?: UseHoverOptions): boolean;
18
- <Target extends Element>(callback?: (event: Event) => void, target?: never): {
18
+ (target: HookTarget, callback?: (event: Event) => void): UseHoverReturn;
19
+ (target: HookTarget, options?: UseHoverOptions): UseHoverReturn;
20
+ <Target extends Element>(callback?: (event: Event) => void, target?: never): UseHoverReturn & {
19
21
  ref: StateRef<Target>;
20
- } & UseHoverReturn;
21
- <Target extends Element>(options?: UseHoverOptions, target?: never): {
22
+ };
23
+ <Target extends Element>(options?: UseHoverOptions, target?: never): UseHoverReturn & {
22
24
  ref: StateRef<Target>;
23
- } & UseHoverReturn;
25
+ };
24
26
  }
25
27
  /**
26
28
  * @name useHover
@@ -7,11 +7,17 @@ export interface UseInfiniteScrollOptions {
7
7
  /** The distance in pixels to trigger the callback */
8
8
  distance?: number;
9
9
  }
10
+ /** The use infinite scroll return type */
11
+ export interface UseInfiniteScrollReturn {
12
+ /** The loading state of the infinite scroll */
13
+ loading: boolean;
14
+ /** The ref to attach to the element */
15
+ ref: StateRef<Element>;
16
+ }
10
17
  export interface UseInfiniteScroll {
11
- (target: HookTarget, callback: (event: Event) => void, options?: UseInfiniteScrollOptions): boolean;
12
- <Target extends Element>(callback: (event: Event) => void, options?: UseInfiniteScrollOptions, target?: never): {
18
+ (target: HookTarget, callback: (event: Event) => void, options?: UseInfiniteScrollOptions): UseInfiniteScrollReturn;
19
+ <Target extends Element>(callback: (event: Event) => void, options?: UseInfiniteScrollOptions, target?: never): UseInfiniteScrollReturn & {
13
20
  ref: StateRef<Target>;
14
- loading: boolean;
15
21
  };
16
22
  }
17
23
  /**
@@ -25,7 +31,7 @@ export interface UseInfiniteScroll {
25
31
  * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected
26
32
  * @param {number} [options.distance=10] The distance in pixels to trigger the callback
27
33
  * @param {string} [options.direction='bottom'] The direction to trigger the callback
28
- * @returns {{ ref: StateRef<Target>, loading: boolean }} An object containing the ref and loading
34
+ * @returns {UseInfiniteScrollReturn & { ref: StateRef<Target> }} An object containing the ref and loading
29
35
  *
30
36
  * @example
31
37
  * const { ref, loading } = useInfiniteScroll(() => console.log('infinite scroll'));
@@ -35,9 +41,9 @@ export interface UseInfiniteScroll {
35
41
  * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected
36
42
  * @param {number} [options.distance=10] The distance in pixels to trigger the callback
37
43
  * @param {string} [options.direction='bottom'] The direction to trigger the callback
38
- * @returns {boolean} A loading indicator of the infinite scroll
44
+ * @returns {UseInfiniteScrollReturn} An object containing the ref and loading
39
45
  *
40
46
  * @example
41
- * const loading = useInfiniteScroll(ref, () => console.log('infinite scroll'));
47
+ * const { loading } = useInfiniteScroll(ref, () => console.log('infinite scroll'));
42
48
  */
43
49
  export declare const useInfiniteScroll: UseInfiniteScroll;
@@ -4,10 +4,16 @@ import { StateRef } from '../useRefState/useRefState';
4
4
  export type UseKeyPressKey = string | string[];
5
5
  /** The callback function to be invoked when key is pressed */
6
6
  export type UseKeyPressCallback = (pressed: boolean, event: KeyboardEvent) => void;
7
+ /** The use key press return type */
8
+ export interface UseKeyPressReturn {
9
+ /** The pressed state of the key */
10
+ pressed: boolean;
11
+ /** The ref to attach to the element */
12
+ ref: StateRef<Element>;
13
+ }
7
14
  export interface UseKeyPress {
8
- (target: HookTarget | Window, key: UseKeyPressKey, callback?: UseKeyPressCallback): boolean;
9
- <Target extends Element>(key: UseKeyPressKey, callback?: UseKeyPressCallback, target?: never): {
10
- pressed: boolean;
15
+ (target: HookTarget | Window, key: UseKeyPressKey, callback?: UseKeyPressCallback): UseKeyPressReturn;
16
+ <Target extends Element>(key: UseKeyPressKey, callback?: UseKeyPressCallback, target?: never): UseKeyPressReturn & {
11
17
  ref: StateRef<Target>;
12
18
  };
13
19
  }
@@ -21,7 +27,7 @@ export interface UseKeyPress {
21
27
  * @param {HookTarget} [target=window] The target to attach the event listeners to
22
28
  * @param {UseKeyPressKey} key The key or keys to listen for
23
29
  * @param {(pressed: boolean, event: KeyboardEvent) => void} [callback] Callback function invoked when key is pressed
24
- * @returns {boolean} The pressed state of the key
30
+ * @returns {UseKeyPressReturn} An object containing the pressed state and ref
25
31
  *
26
32
  * @example
27
33
  * const isKeyPressed = useKeyPress(ref, 'a');
@@ -5,16 +5,16 @@ export interface UseKeysPressedOptions {
5
5
  /** Enable or disable the event listeners */
6
6
  enabled?: boolean;
7
7
  }
8
- export interface UseKeysPressed {
9
- (target: HookTarget | Window, options?: UseKeysPressedOptions): Array<{
8
+ export interface UseKeysPressedReturn {
9
+ /** The array of currently pressed keys */
10
+ value: Array<{
10
11
  key: string;
11
12
  code: string;
12
13
  }>;
13
- <Target extends Element>(options?: UseKeysPressedOptions): {
14
- value: Array<{
15
- key: string;
16
- code: string;
17
- }>;
14
+ }
15
+ export interface UseKeysPressed {
16
+ (target: HookTarget | Window, options?: UseKeysPressedOptions): UseKeysPressedReturn;
17
+ <Target extends Element>(options?: UseKeysPressedOptions): UseKeysPressedReturn & {
18
18
  ref: StateRef<Target>;
19
19
  };
20
20
  }
@@ -27,15 +27,15 @@ export interface UseKeysPressed {
27
27
  * @overload
28
28
  * @param {HookTarget | Window} target DOM element or ref to attach keyboard listeners to
29
29
  * @param {UseKeysPressedOptions} [options.enabled=true] Enable or disable the event listeners
30
- * @returns {Array<{ key: string; code: string }>} Array of currently pressed keys with their key and code values
30
+ * @returns {UseKeysPressedReturn} Object containing the array of currently pressed keys
31
31
  *
32
32
  * @example
33
- * const pressedKeys = useKeysPressed(ref);
33
+ * const { value } = useKeysPressed(ref);
34
34
  *
35
35
  * @overload
36
36
  * @template Target - Type of the target DOM element
37
37
  * @param {UseKeysPressedOptions} [options] - Optional configuration options
38
- * @returns {{ keys: Array<{ key: string; code: string }>; ref: StateRef<Target> }} Object containing pressed keys array and ref to attach to a DOM element
38
+ * @returns {UseKeysPressedReturn & { ref: StateRef<Target> }} Object containing the array of currently pressed keys and ref to attach to the element
39
39
  *
40
40
  * @example
41
41
  * const { value, ref } = useKeysPressed();
@@ -7,12 +7,18 @@ export interface UseLongPressOptions {
7
7
  onFinish?: (event: LongPressEvents) => void;
8
8
  onStart?: (event: LongPressEvents) => void;
9
9
  }
10
+ /** The use long press return type */
11
+ export interface UseLongPressReturn {
12
+ /** The long pressing state */
13
+ pressed: boolean;
14
+ /** The ref to attach to the element */
15
+ ref: StateRef<Element>;
16
+ }
10
17
  export interface UseLongPress {
11
- (target: HookTarget, callback: (event: LongPressEvents) => void, options?: UseLongPressOptions): boolean;
18
+ (target: HookTarget, callback: (event: LongPressEvents) => void, options?: UseLongPressOptions): UseLongPressReturn;
12
19
  <Target extends Element>(callback: (event: LongPressEvents) => void, options?: UseLongPressOptions, target?: never): {
13
20
  ref: StateRef<Target>;
14
- pressed: boolean;
15
- };
21
+ } & UseLongPressReturn;
16
22
  }
17
23
  /**
18
24
  * @name useLongPress
@@ -1,3 +1,6 @@
1
+ /** The origin of the message */
2
+ export type UsePostMessageOrigin = string | '*' | string[];
3
+ /** The return type of the usePostMessage hook */
1
4
  export type UsePostMessageReturn<Message> = (message: Message) => void;
2
5
  /**
3
6
  * @name usePostMessage
@@ -7,11 +10,11 @@ export type UsePostMessageReturn<Message> = (message: Message) => void;
7
10
  *
8
11
  * @overload
9
12
  * @template Message The message data type
10
- * @param {string | string[]} origin The origin of the message
13
+ * @param {UsePostMessageOrigin} origin The origin of the message
11
14
  * @param {(message: Message) => Message} callback callback to get received message
12
15
  * @returns {(message: Message) => void} An object containing the current message
13
16
  *
14
17
  * @example
15
18
  * const postMessage = usePostMessage();
16
19
  */
17
- export declare const usePostMessage: <Message>(origin: string | "*" | string[], callback: (message: Message, event: MessageEvent<Message>) => void) => UsePostMessageReturn<Message>;
20
+ export declare const usePostMessage: <Message>(origin: UsePostMessageOrigin, callback: (message: Message, event: MessageEvent<Message>) => void) => UsePostMessageReturn<Message>;
@@ -0,0 +1,51 @@
1
+ /** The use progress options type */
2
+ export interface UseProgressOptions {
3
+ /** Start progress immediately */
4
+ immediately?: boolean;
5
+ /** Maximum progress value */
6
+ maximum?: number;
7
+ /** Additional random amount for each auto increment */
8
+ rate?: number;
9
+ /** Auto-increment frequency in milliseconds */
10
+ speed?: number;
11
+ }
12
+ /** The use progress return type */
13
+ export interface UseProgressReturn {
14
+ /** Whether progress is currently active */
15
+ active: boolean;
16
+ /** Current progress value in range 0..1, null means hidden */
17
+ value: number;
18
+ /** Complete progress to 100% */
19
+ done: (force?: boolean) => number | null;
20
+ /** Increment progress with easing behavior */
21
+ inc: (amount?: number) => number | null;
22
+ /** Remove progress and stop timers */
23
+ remove: () => void;
24
+ /** Start progress and auto incrementing */
25
+ start: (from?: number | null) => number;
26
+ }
27
+ /**
28
+ * @name useProgress
29
+ * @description - Hook that creates a lightweight progress bar state with NProgress-like behavior
30
+ * @category Time
31
+ * @usage medium
32
+ *
33
+ * @param {number} [initialProgress] Initial progress value in range 0..1
34
+ * @param {boolean} [options.active] Controls progress externally (true -> start, false -> done)
35
+ * @param {number} [options.maximum=0.95] Maximum value when progress starts
36
+ * @param {number} [options.speed=250] Auto increment interval in milliseconds
37
+ * @param {number} [options.rate=0.02] Additional random increment amount on each tick
38
+ * @param {number} [options.doneResetDelay=250] Delay before reset to null after done
39
+ * @returns {UseProgressReturn} Current progress state and control methods
40
+ *
41
+ * @example
42
+ * const { value, active, start, done, inc, set, remove } = useProgress(0.2);
43
+ */
44
+ export declare const useProgress: (initialValue?: number, options?: UseProgressOptions) => {
45
+ value: number;
46
+ active: boolean;
47
+ start: (from?: number) => void;
48
+ done: () => void;
49
+ inc: (amount?: number) => void;
50
+ remove: () => void;
51
+ };
@@ -12,10 +12,10 @@ export interface UseStickyOptions {
12
12
  root?: HookTarget;
13
13
  }
14
14
  export interface UseSticky {
15
- (target: HookTarget, options?: UseStickyOptions): boolean;
16
- <Target extends Element>(options?: UseStickyOptions, target?: never): {
15
+ (target: HookTarget, options?: UseStickyOptions): UseStickyReturn;
16
+ <Target extends Element>(options?: UseStickyOptions, target?: never): UseStickyReturn & {
17
17
  ref: StateRef<Target>;
18
- } & UseStickyReturn;
18
+ };
19
19
  }
20
20
  /**
21
21
  * @name UseSticky
@@ -30,12 +30,12 @@ export interface UseSticky {
30
30
  * @returns {UseStickyReturn} The state of the sticky
31
31
  *
32
32
  * @example
33
- * const stuck = useSticky(ref);
33
+ * const { stuck } = useSticky(ref);
34
34
  *
35
35
  * @overload
36
36
  * @param {UseStickyAxis} [options.axis='vertical'] The axis of motion of the sticky component
37
37
  * @param {UseStickyRoot} [options.root=document] The element that contains your sticky component
38
- * @returns {{ stickyRef: StateRef<Target> } & UseStickyReturn} The state of the sticky
38
+ * @returns {{ ref: StateRef<Target> } & UseStickyReturn} The state of the sticky
39
39
  *
40
40
  * @example
41
41
  * const { stuck, ref } = useSticky();
package/package.json CHANGED
@@ -1,89 +1,89 @@
1
- {
2
- "name": "@siberiacancode/reactuse",
3
- "version": "0.3.10",
4
- "description": "The ultimate collection of react hooks",
5
- "author": {
6
- "name": "SIBERIA CAN CODE 🧊",
7
- "url": "https://github.com/siberiacancode"
8
- },
9
- "license": "MIT",
10
- "homepage": "https://siberiacancode.github.io/reactuse/",
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/siberiacancode/reactuse.git",
14
- "directory": "packages/core"
15
- },
16
- "bugs": "https://github.com/siberiacancode/reactuse/issues",
17
- "keywords": [
18
- "react",
19
- "react hooks",
20
- "react use",
21
- "use",
22
- "hooks"
23
- ],
24
- "sideEffects": false,
25
- "exports": {
26
- "types": "./dist/types/index.d.ts",
27
- "import": "./dist/esm/index.mjs",
28
- "require": "./dist/cjs/index.cjs"
29
- },
30
- "main": "dist/cjs/index.cjs",
31
- "module": "dist/esm/index.mjs",
32
- "types": "dist/types/index.d.ts",
33
- "files": [
34
- "dist"
35
- ],
36
- "engines": {
37
- "node": ">=14"
38
- },
39
- "publishConfig": {
40
- "access": "public"
41
- },
42
- "scripts": {
43
- "prepublishOnly": "pnpm unit-test run && pnpm build",
44
- "build": "shx rm -rf dist && vite build",
45
- "build:js": "tsc --project tsconfig.build.json && prettier --write src/bundle",
46
- "lint": "eslint . --fix",
47
- "lint-inspector": "npx @eslint/config-inspector@latest",
48
- "format": "prettier --write .",
49
- "pretty": "pnpm lint && pnpm format",
50
- "unit-test": "vitest",
51
- "lint-staged": "lint-staged"
52
- },
53
- "peerDependencies": {
54
- "@types/react": "^18 || ^19",
55
- "react": "^18 || ^19",
56
- "react-dom": "^18 || ^19"
57
- },
58
- "peerDependenciesMeta": {
59
- "@types/react": {
60
- "optional": true
61
- }
62
- },
63
- "dependencies": {
64
- "screenfull": "^6.0.2"
65
- },
66
- "devDependencies": {
67
- "@siberiacancode/vitest": "^2.3.0",
68
- "@testing-library/dom": "^10.4.1",
69
- "@testing-library/react": "^16.3.1",
70
- "@types/dom-speech-recognition": "^0.0.7",
71
- "@types/react": "^19.2.7",
72
- "@types/react-dom": "^19.2.3",
73
- "@types/web-bluetooth": "^0.0.21",
74
- "@vitejs/plugin-react": "^5.1.2",
75
- "core-js": "^3.47.0",
76
- "react": "^19.2.3",
77
- "react-dom": "^19.2.3",
78
- "shx": "^0.4.0",
79
- "vite": "^7.3.0",
80
- "vite-plugin-dts": "^4.5.4",
81
- "vitest": "^4.0.16"
82
- },
83
- "lint-staged": {
84
- "*.{js,ts,tsx}": [
85
- "eslint --fix",
86
- "prettier --write"
87
- ]
88
- }
89
- }
1
+ {
2
+ "name": "@siberiacancode/reactuse",
3
+ "version": "0.3.13",
4
+ "description": "The ultimate collection of react hooks",
5
+ "author": {
6
+ "name": "SIBERIA CAN CODE 🧊",
7
+ "url": "https://github.com/siberiacancode"
8
+ },
9
+ "license": "MIT",
10
+ "homepage": "https://siberiacancode.github.io/reactuse/",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/siberiacancode/reactuse.git",
14
+ "directory": "packages/core"
15
+ },
16
+ "bugs": "https://github.com/siberiacancode/reactuse/issues",
17
+ "keywords": [
18
+ "react",
19
+ "react hooks",
20
+ "react use",
21
+ "use",
22
+ "hooks"
23
+ ],
24
+ "sideEffects": false,
25
+ "exports": {
26
+ "types": "./dist/types/index.d.ts",
27
+ "import": "./dist/esm/index.mjs",
28
+ "require": "./dist/cjs/index.cjs"
29
+ },
30
+ "main": "dist/cjs/index.cjs",
31
+ "module": "dist/esm/index.mjs",
32
+ "types": "dist/types/index.d.ts",
33
+ "files": [
34
+ "dist"
35
+ ],
36
+ "engines": {
37
+ "node": ">=14"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "scripts": {
43
+ "prepublishOnly": "pnpm unit-test run && pnpm build",
44
+ "build": "shx rm -rf dist && vite build",
45
+ "build:js": "tsc --project tsconfig.build.json && prettier --write src/bundle",
46
+ "lint": "eslint . --fix",
47
+ "lint-inspector": "npx @eslint/config-inspector@latest",
48
+ "format": "prettier --write .",
49
+ "pretty": "pnpm lint && pnpm format",
50
+ "unit-test": "vitest",
51
+ "lint-staged": "lint-staged"
52
+ },
53
+ "peerDependencies": {
54
+ "@types/react": "^18 || ^19",
55
+ "react": "^18 || ^19",
56
+ "react-dom": "^18 || ^19"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "@types/react": {
60
+ "optional": true
61
+ }
62
+ },
63
+ "dependencies": {
64
+ "screenfull": "^6.0.2"
65
+ },
66
+ "devDependencies": {
67
+ "@siberiacancode/vitest": "^2.3.0",
68
+ "@testing-library/dom": "^10.4.1",
69
+ "@testing-library/react": "^16.3.2",
70
+ "@types/dom-speech-recognition": "^0.0.7",
71
+ "@types/react": "^19.2.13",
72
+ "@types/react-dom": "^19.2.3",
73
+ "@types/web-bluetooth": "^0.0.21",
74
+ "@vitejs/plugin-react": "^5.1.3",
75
+ "core-js": "^3.48.0",
76
+ "react": "^19.2.4",
77
+ "react-dom": "^19.2.4",
78
+ "shx": "^0.4.0",
79
+ "vite": "^7.3.1",
80
+ "vite-plugin-dts": "^4.5.4",
81
+ "vitest": "^4.0.18"
82
+ },
83
+ "lint-staged": {
84
+ "*.{js,ts,tsx}": [
85
+ "eslint --fix",
86
+ "prettier --write"
87
+ ]
88
+ }
89
+ }