@siberiacancode/reactuse 0.3.13 → 0.3.15

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 (90) hide show
  1. package/README.md +71 -71
  2. package/dist/cjs/helpers/createContext/createContext.cjs.map +1 -1
  3. package/dist/cjs/helpers/createContextHook/createContextHook.cjs +2 -0
  4. package/dist/cjs/helpers/createContextHook/createContextHook.cjs.map +1 -0
  5. package/dist/cjs/helpers/createSharedHook/createSharedHook.cjs +2 -0
  6. package/dist/cjs/helpers/createSharedHook/createSharedHook.cjs.map +1 -0
  7. package/dist/cjs/hooks/useBatchedCallback/useBatchedCallback.cjs +1 -1
  8. package/dist/cjs/hooks/useBatchedCallback/useBatchedCallback.cjs.map +1 -1
  9. package/dist/cjs/hooks/useDropZone/useDropZone.cjs +1 -1
  10. package/dist/cjs/hooks/useDropZone/useDropZone.cjs.map +1 -1
  11. package/dist/cjs/hooks/useField/useField.cjs +1 -1
  12. package/dist/cjs/hooks/useField/useField.cjs.map +1 -1
  13. package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs.map +1 -1
  14. package/dist/cjs/hooks/useImage/useImage.cjs.map +1 -1
  15. package/dist/cjs/hooks/useMediaQuery/useMediaQuery.cjs.map +1 -1
  16. package/dist/cjs/hooks/useMouse/useMouse.cjs +1 -1
  17. package/dist/cjs/hooks/useMouse/useMouse.cjs.map +1 -1
  18. package/dist/cjs/hooks/useMutation/useMutation.cjs +1 -1
  19. package/dist/cjs/hooks/useMutation/useMutation.cjs.map +1 -1
  20. package/dist/cjs/hooks/useNetwork/useNetwork.cjs.map +1 -1
  21. package/dist/cjs/hooks/useOptimistic/useOptimistic.cjs.map +1 -1
  22. package/dist/cjs/hooks/useOrientation/useOrientation.cjs.map +1 -1
  23. package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs.map +1 -1
  24. package/dist/cjs/hooks/useParallax/useParallax.cjs.map +1 -1
  25. package/dist/cjs/hooks/usePostMessage/usePostMessage.cjs.map +1 -1
  26. package/dist/cjs/hooks/useProgress/useProgress.cjs +1 -1
  27. package/dist/cjs/hooks/useProgress/useProgress.cjs.map +1 -1
  28. package/dist/cjs/hooks/useScroll/useScroll.cjs +1 -1
  29. package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
  30. package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
  31. package/dist/cjs/hooks/useStorage/useStorage.cjs.map +1 -1
  32. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs.map +1 -1
  33. package/dist/cjs/hooks/useTextareaAutosize/useTextareaAutosize.cjs.map +1 -1
  34. package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs.map +1 -1
  35. package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs.map +1 -1
  36. package/dist/cjs/hooks/useVirtualKeyboard/useVirtualKeyboard.cjs.map +1 -1
  37. package/dist/cjs/hooks/useVisibility/useVisibility.cjs.map +1 -1
  38. package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs.map +1 -1
  39. package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs.map +1 -1
  40. package/dist/cjs/index.cjs +1 -1
  41. package/dist/cjs/utils/helpers/isTarget.cjs.map +1 -1
  42. package/dist/esm/helpers/createContext/createContext.mjs.map +1 -1
  43. package/dist/esm/helpers/createContextHook/createContextHook.mjs +13 -0
  44. package/dist/esm/helpers/createContextHook/createContextHook.mjs.map +1 -0
  45. package/dist/esm/helpers/createSharedHook/createSharedHook.mjs +42 -0
  46. package/dist/esm/helpers/createSharedHook/createSharedHook.mjs.map +1 -0
  47. package/dist/esm/hooks/useBatchedCallback/useBatchedCallback.mjs.map +1 -1
  48. package/dist/esm/hooks/useDropZone/useDropZone.mjs +27 -27
  49. package/dist/esm/hooks/useDropZone/useDropZone.mjs.map +1 -1
  50. package/dist/esm/hooks/useField/useField.mjs +42 -42
  51. package/dist/esm/hooks/useField/useField.mjs.map +1 -1
  52. package/dist/esm/hooks/useHotkeys/useHotkeys.mjs.map +1 -1
  53. package/dist/esm/hooks/useImage/useImage.mjs.map +1 -1
  54. package/dist/esm/hooks/useMediaQuery/useMediaQuery.mjs.map +1 -1
  55. package/dist/esm/hooks/useMouse/useMouse.mjs +37 -32
  56. package/dist/esm/hooks/useMouse/useMouse.mjs.map +1 -1
  57. package/dist/esm/hooks/useMutation/useMutation.mjs +29 -28
  58. package/dist/esm/hooks/useMutation/useMutation.mjs.map +1 -1
  59. package/dist/esm/hooks/useNetwork/useNetwork.mjs.map +1 -1
  60. package/dist/esm/hooks/useOptimistic/useOptimistic.mjs.map +1 -1
  61. package/dist/esm/hooks/useOrientation/useOrientation.mjs.map +1 -1
  62. package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs.map +1 -1
  63. package/dist/esm/hooks/useParallax/useParallax.mjs.map +1 -1
  64. package/dist/esm/hooks/usePostMessage/usePostMessage.mjs.map +1 -1
  65. package/dist/esm/hooks/useProgress/useProgress.mjs +13 -13
  66. package/dist/esm/hooks/useProgress/useProgress.mjs.map +1 -1
  67. package/dist/esm/hooks/useScroll/useScroll.mjs +62 -44
  68. package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
  69. package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
  70. package/dist/esm/hooks/useStorage/useStorage.mjs.map +1 -1
  71. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs.map +1 -1
  72. package/dist/esm/hooks/useTextareaAutosize/useTextareaAutosize.mjs.map +1 -1
  73. package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs.map +1 -1
  74. package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs.map +1 -1
  75. package/dist/esm/hooks/useVirtualKeyboard/useVirtualKeyboard.mjs.map +1 -1
  76. package/dist/esm/hooks/useVisibility/useVisibility.mjs.map +1 -1
  77. package/dist/esm/hooks/useWakeLock/useWakeLock.mjs.map +1 -1
  78. package/dist/esm/hooks/useWebSocket/useWebSocket.mjs.map +1 -1
  79. package/dist/esm/index.mjs +389 -384
  80. package/dist/esm/index.mjs.map +1 -1
  81. package/dist/esm/utils/helpers/isTarget.mjs.map +1 -1
  82. package/dist/types/helpers/createContextHook/createContextHook.d.ts +26 -0
  83. package/dist/types/helpers/createSharedHook/createSharedHook.d.ts +21 -0
  84. package/dist/types/helpers/index.d.ts +2 -0
  85. package/dist/types/hooks/useField/useField.d.ts +7 -9
  86. package/dist/types/hooks/useMouse/useMouse.d.ts +17 -7
  87. package/dist/types/hooks/useProgress/useProgress.d.ts +4 -2
  88. package/dist/types/hooks/useScroll/useScroll.d.ts +13 -11
  89. package/dist/types/hooks/useUrlSearchParams/useUrlSearchParams.d.ts +0 -1
  90. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"isTarget.mjs","sources":["../../../../src/utils/helpers/isTarget.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\nexport const targetSymbol = Symbol('target');\n\nexport type Target = (() => Element) | string | Document | Element | Window;\ninterface BrowserTarget {\n type: symbol;\n value: Target;\n}\ninterface StateRef<Value> {\n (node: Value): void;\n current: Value;\n state: Value;\n}\n\nexport type HookTarget =\n | BrowserTarget\n | RefObject<Element | null | undefined>\n | StateRef<Element | null | undefined>;\n\nexport const target = (target: Target) => ({\n value: target,\n type: targetSymbol\n});\n\nexport const isRef = (target: HookTarget) => typeof target === 'object' && 'current' in target;\n\nexport const isRefState = (target: HookTarget) =>\n typeof target === 'function' && 'state' in target && 'current' in target;\n\nexport const isBrowserTarget = (target: HookTarget) =>\n typeof target === 'object' &&\n target &&\n 'type' in target &&\n target.type === targetSymbol &&\n 'value' in target;\n\nexport const isTarget = (target: HookTarget) =>\n isRef(target) || isRefState(target) || isBrowserTarget(target);\n\nconst getElement = (target: HookTarget) => {\n if ('current' in target) {\n return target.current;\n }\n\n if (typeof target.value === 'function') {\n return target.value();\n }\n\n if (typeof target.value === 'string') {\n return document.querySelector(target.value);\n }\n\n if (target.value instanceof Document) {\n return target.value;\n }\n\n if (target.value instanceof Window) {\n return target.value;\n }\n\n if (target.value instanceof Element) {\n return target.value;\n }\n\n return target.value;\n};\nexport const getRefState = (target?: HookTarget) => target && 'state' in target && target.state;\nexport const getRawElement = (target: HookTarget) => {\n if (isRefState(target)) return target.state;\n if (isBrowserTarget(target)) return (target as BrowserTarget).value;\n\n return target;\n};\n\nisTarget.wrap = target;\nisTarget.getElement = getElement;\nisTarget.getRefState = getRefState;\nisTarget.getRawElement = getRawElement;\n"],"names":["targetSymbol","target","isRef","isRefState","isBrowserTarget","isTarget","getElement","getRefState","getRawElement"],"mappings":"AAEO,MAAMA,2BAAsB,QAAQ,GAkB9BC,IAAS,CAACA,OAAoB;AAAA,EACzC,OAAOA;AAAAA,EACP,MAAMD;AACR,IAEaE,IAAQ,CAACD,MAAuB,OAAOA,KAAW,YAAY,aAAaA,GAE3EE,IAAa,CAACF,MACzB,OAAOA,KAAW,cAAc,WAAWA,KAAU,aAAaA,GAEvDG,IAAkB,CAACH,MAC9B,OAAOA,KAAW,YAClBA,KACA,UAAUA,KACVA,EAAO,SAASD,KAChB,WAAWC,GAEAI,IAAW,CAACJ,MACvBC,EAAMD,CAAM,KAAKE,EAAWF,CAAM,KAAKG,EAAgBH,CAAM,GAEzDK,IAAa,CAACL,MACd,aAAaA,IACRA,EAAO,UAGZ,OAAOA,EAAO,SAAU,aACnBA,EAAO,MAAA,IAGZ,OAAOA,EAAO,SAAU,WACnB,SAAS,cAAcA,EAAO,KAAK,KAGxCA,EAAO,iBAAiB,YAIxBA,EAAO,iBAAiB,UAIxBA,EAAO,iBAAiB,SACnBA,EAAO,QAKLM,IAAc,CAACN,MAAwBA,KAAU,WAAWA,KAAUA,EAAO,OAC7EO,IAAgB,CAACP,MACxBE,EAAWF,CAAM,IAAUA,EAAO,QAClCG,EAAgBH,CAAM,IAAWA,EAAyB,QAEvDA;AAGTI,EAAS,OAAOJ;AAChBI,EAAS,aAAaC;AACtBD,EAAS,cAAcE;AACvBF,EAAS,gBAAgBG;"}
1
+ {"version":3,"file":"isTarget.mjs","sources":["../../../../src/utils/helpers/isTarget.ts"],"sourcesContent":["import type { RefObject } from 'react';\r\n\r\nexport const targetSymbol = Symbol('target');\r\n\r\nexport type Target = (() => Element) | string | Document | Element | Window;\r\ninterface BrowserTarget {\r\n type: symbol;\r\n value: Target;\r\n}\r\ninterface StateRef<Value> {\r\n (node: Value): void;\r\n current: Value;\r\n state: Value;\r\n}\r\n\r\nexport type HookTarget =\r\n | BrowserTarget\r\n | RefObject<Element | null | undefined>\r\n | StateRef<Element | null | undefined>;\r\n\r\nexport const target = (target: Target) => ({\r\n value: target,\r\n type: targetSymbol\r\n});\r\n\r\nexport const isRef = (target: HookTarget) => typeof target === 'object' && 'current' in target;\r\n\r\nexport const isRefState = (target: HookTarget) =>\r\n typeof target === 'function' && 'state' in target && 'current' in target;\r\n\r\nexport const isBrowserTarget = (target: HookTarget) =>\r\n typeof target === 'object' &&\r\n target &&\r\n 'type' in target &&\r\n target.type === targetSymbol &&\r\n 'value' in target;\r\n\r\nexport const isTarget = (target: HookTarget) =>\r\n isRef(target) || isRefState(target) || isBrowserTarget(target);\r\n\r\nconst getElement = (target: HookTarget) => {\r\n if ('current' in target) {\r\n return target.current;\r\n }\r\n\r\n if (typeof target.value === 'function') {\r\n return target.value();\r\n }\r\n\r\n if (typeof target.value === 'string') {\r\n return document.querySelector(target.value);\r\n }\r\n\r\n if (target.value instanceof Document) {\r\n return target.value;\r\n }\r\n\r\n if (target.value instanceof Window) {\r\n return target.value;\r\n }\r\n\r\n if (target.value instanceof Element) {\r\n return target.value;\r\n }\r\n\r\n return target.value;\r\n};\r\nexport const getRefState = (target?: HookTarget) => target && 'state' in target && target.state;\r\nexport const getRawElement = (target: HookTarget) => {\r\n if (isRefState(target)) return target.state;\r\n if (isBrowserTarget(target)) return (target as BrowserTarget).value;\r\n\r\n return target;\r\n};\r\n\r\nisTarget.wrap = target;\r\nisTarget.getElement = getElement;\r\nisTarget.getRefState = getRefState;\r\nisTarget.getRawElement = getRawElement;\r\n"],"names":["targetSymbol","target","isRef","isRefState","isBrowserTarget","isTarget","getElement","getRefState","getRawElement"],"mappings":"AAEO,MAAMA,2BAAsB,QAAQ,GAkB9BC,IAAS,CAACA,OAAoB;AAAA,EACzC,OAAOA;AAAAA,EACP,MAAMD;AACR,IAEaE,IAAQ,CAACD,MAAuB,OAAOA,KAAW,YAAY,aAAaA,GAE3EE,IAAa,CAACF,MACzB,OAAOA,KAAW,cAAc,WAAWA,KAAU,aAAaA,GAEvDG,IAAkB,CAACH,MAC9B,OAAOA,KAAW,YAClBA,KACA,UAAUA,KACVA,EAAO,SAASD,KAChB,WAAWC,GAEAI,IAAW,CAACJ,MACvBC,EAAMD,CAAM,KAAKE,EAAWF,CAAM,KAAKG,EAAgBH,CAAM,GAEzDK,IAAa,CAACL,MACd,aAAaA,IACRA,EAAO,UAGZ,OAAOA,EAAO,SAAU,aACnBA,EAAO,MAAA,IAGZ,OAAOA,EAAO,SAAU,WACnB,SAAS,cAAcA,EAAO,KAAK,KAGxCA,EAAO,iBAAiB,YAIxBA,EAAO,iBAAiB,UAIxBA,EAAO,iBAAiB,SACnBA,EAAO,QAKLM,IAAc,CAACN,MAAwBA,KAAU,WAAWA,KAAUA,EAAO,OAC7EO,IAAgB,CAACP,MACxBE,EAAWF,CAAM,IAAUA,EAAO,QAClCG,EAAgBH,CAAM,IAAWA,EAAyB,QAEvDA;AAGTI,EAAS,OAAOJ;AAChBI,EAAS,aAAaC;AACtBD,EAAS,cAAcE;AACvBF,EAAS,gBAAgBG;"}
@@ -0,0 +1,26 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * @name createContextHook
4
+ * @description - Hook that runs inside a Provider; Provider accepts params (the hook's arguments). Use when you need a scoped instance per subtree.
5
+ * @category Helpers
6
+ * @usage low
7
+ *
8
+ * @warning - For complex interfaces, we strongly recommend using state management solutions outside of React like createStore, reatom, effector, or zustand instead of context
9
+ *
10
+ * @param useHook - The hook to run in the Provider (e.g. useMediaQuery)
11
+ * @returns { Provider, use } — Provider takes params; use() returns the value and must be used inside Provider
12
+ *
13
+ * @example
14
+ * const { Provider, use } = createContextHook(useMediaQuery);
15
+ * <Provider params={["(max-width: 768px)"]}>
16
+ * <Component />
17
+ * </Provider>
18
+ * const matches = use();
19
+ */
20
+ export declare const createContextHook: <Hook extends (...args: any[]) => any>(useHook: Hook) => {
21
+ Provider: ({ children, params }: {
22
+ children: ReactNode;
23
+ params: Parameters<Hook>;
24
+ }) => import("react/jsx-runtime").JSX.Element;
25
+ use: () => ReturnType<Hook> | null;
26
+ };
@@ -0,0 +1,21 @@
1
+ export declare const mount: (component: React.ReactNode) => () => void;
2
+ /**
3
+ * @name createSharedHook
4
+ * @description - One shared instance of the hook globally. First subscriber's args are used; when subscribers hit zero, the runner unmounts.
5
+ * @category Helpers
6
+ * @usage low
7
+ *
8
+ * @warning - For complex interfaces, we strongly recommend using state management solutions outside of React like createStore, reatom, effector, or zustand instead of context
9
+ *
10
+ * @template Hook - The hook to create a shared instance of
11
+ * @param {Hook} useHook - The hook to create a shared instance of
12
+ * @returns {Hook & { useShared: typeof useShared }} - The shared hook
13
+ *
14
+ * @example
15
+ * const useSharedMediaQuery = createSharedHook(useMediaQuery);
16
+ * const matches = useSharedMediaQuery("(max-width: 768px)");
17
+ */
18
+ export declare const createSharedHook: <Hook extends (...args: any[]) => any>(useHook: Hook) => {
19
+ (...args: Parameters<Hook>): any;
20
+ useShared: /*elided*/ any;
21
+ } | ((...args: Parameters<Hook>) => ReturnType<Hook>);
@@ -1,4 +1,6 @@
1
1
  export * from './createContext/createContext';
2
+ export * from './createContextHook/createContextHook';
2
3
  export * from './createEventEmitter/createEventEmitter';
3
4
  export * from './createReactiveContext/createReactiveContext';
5
+ export * from './createSharedHook/createSharedHook';
4
6
  export * from './createStore/createStore';
@@ -1,12 +1,10 @@
1
1
  import { RefObject } from 'react';
2
2
  /** The use field params type */
3
- export interface UseFieldParams<Value> {
3
+ export interface UseFieldOptions {
4
4
  /** The auto focus */
5
5
  autoFocus?: boolean;
6
6
  /** The initial touched */
7
7
  initialTouched?: boolean;
8
- /** The initial value */
9
- initialValue?: Value;
10
8
  /** The validate on blur */
11
9
  validateOnBlur?: boolean;
12
10
  /** The validate on mount */
@@ -16,10 +14,6 @@ export interface UseFieldParams<Value> {
16
14
  }
17
15
  /** The use field register params type */
18
16
  export interface UseFieldRegisterParams {
19
- /** The required validation */
20
- required?: string;
21
- /** The custom validation */
22
- validate?: (value: string) => Promise<string | true>;
23
17
  /** The min value validation */
24
18
  max?: {
25
19
  value: number;
@@ -45,6 +39,10 @@ export interface UseFieldRegisterParams {
45
39
  value: RegExp;
46
40
  message: string;
47
41
  };
42
+ /** The required validation */
43
+ required?: string;
44
+ /** The custom validation */
45
+ validate?: (value: string) => Promise<string | true>;
48
46
  }
49
47
  /** The use field return type */
50
48
  export interface UseFieldReturn<Value> {
@@ -85,7 +83,7 @@ export interface UseFieldReturn<Value> {
85
83
  *
86
84
  * @template Value The input value
87
85
  * @template Type The input value type
88
- * @param {Value} [params.initialValue] Initial value
86
+ * @param {Value} [params.initialValue = ""] Initial value
89
87
  * @param {boolean} [params.initialTouched=false] Initial touched state
90
88
  * @param {boolean} [params.autoFocus=false] Auto focus
91
89
  * @param {boolean} [params.validateOnChange=false] Validate on change
@@ -96,4 +94,4 @@ export interface UseFieldReturn<Value> {
96
94
  * @example
97
95
  * const { register, getValue, setValue, reset, dirty, error, setError, clearError, touched, focus, watch } = useField();
98
96
  */
99
- export declare const useField: <Value extends boolean | number | string = string, Type = Value extends string ? string : Value extends boolean ? boolean : number>(params?: UseFieldParams<Value>) => UseFieldReturn<Type>;
97
+ export declare const useField: <Value extends boolean | number | string = string, Type = Value extends string ? string : Value extends boolean ? boolean : number>(initialValue?: Value, options?: UseFieldOptions) => UseFieldReturn<Type>;
@@ -2,6 +2,13 @@ import { HookTarget } from '../../utils/helpers';
2
2
  import { StateRef } from '../useRefState/useRefState';
3
3
  /** The use mouse return type */
4
4
  export interface UseMouseReturn {
5
+ /** The latest mouse value snapshot */
6
+ snapshot: UseMouseValue;
7
+ /** Function to enable subscriptions and rerender on next updates */
8
+ watch: () => UseMouseValue;
9
+ }
10
+ /** The use mouse value type */
11
+ export interface UseMouseValue {
5
12
  /** The current mouse client x position */
6
13
  clientX: number;
7
14
  /** The current mouse client y position */
@@ -19,12 +26,13 @@ export interface UseMouseReturn {
19
26
  /** The current mouse y position */
20
27
  y: number;
21
28
  }
29
+ export type UseMouseCallback = (value: UseMouseValue, event: Event) => void;
22
30
  export interface UseMouse {
23
- (target: HookTarget): UseMouseReturn;
24
- <Target extends Element>(target?: never): UseMouseReturn & {
31
+ (target: HookTarget, callback?: UseMouseCallback): UseMouseReturn;
32
+ <Target extends Element>(callback?: UseMouseCallback, target?: never): UseMouseReturn & {
25
33
  ref: StateRef<Target>;
26
34
  };
27
- (target?: Window): UseMouseReturn;
35
+ (target?: Window, callback?: UseMouseCallback): UseMouseReturn;
28
36
  }
29
37
  /**
30
38
  * @name useMouse
@@ -34,16 +42,18 @@ export interface UseMouse {
34
42
  *
35
43
  * @overload
36
44
  * @param {HookTarget} [target=window] The target element to manage the mouse position for
37
- * @returns {UseMouseReturn} An object with the current mouse position
45
+ * @param {(value: UseMouseValue, event: Event) => void} [callback] The callback to invoke on mouse updates
46
+ * @returns {UseMouseReturn} An object with mouse value controls
38
47
  *
39
48
  * @example
40
- * const { x, y, clientX, clientY, elementX, elementY, elementPositionX, elementPositionY } = useMouse(ref);
49
+ * const mouse = useMouse(ref);
41
50
  *
42
51
  * @overload
43
52
  * @template Target The target element
44
- * @returns {UseMouseReturn & { ref: StateRef<Target> }} An object with the current mouse position and a ref
53
+ * @param {(value: UseMouseValue, event: Event) => void} [callback] The callback to invoke on mouse updates
54
+ * @returns {UseMouseReturn & { ref: StateRef<Target> }} An object with mouse value controls and a ref
45
55
  *
46
56
  * @example
47
- * const { ref, x, y, clientX, clientY, elementX, elementY, elementPositionX, elementPositionY } = useMouse();
57
+ * const mouse = useMouse<HTMLDivElement>();
48
58
  */
49
59
  export declare const useMouse: UseMouse;
@@ -1,5 +1,7 @@
1
1
  /** The use progress options type */
2
2
  export interface UseProgressOptions {
3
+ /** Delay before reset to null after done */
4
+ delay?: number;
3
5
  /** Start progress immediately */
4
6
  immediately?: boolean;
5
7
  /** Maximum progress value */
@@ -26,7 +28,7 @@ export interface UseProgressReturn {
26
28
  }
27
29
  /**
28
30
  * @name useProgress
29
- * @description - Hook that creates a lightweight progress bar state with NProgress-like behavior
31
+ * @description - Hook that creates a lightweight progress bar
30
32
  * @category Time
31
33
  * @usage medium
32
34
  *
@@ -35,7 +37,7 @@ export interface UseProgressReturn {
35
37
  * @param {number} [options.maximum=0.95] Maximum value when progress starts
36
38
  * @param {number} [options.speed=250] Auto increment interval in milliseconds
37
39
  * @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
40
+ * @param {number} [options.delay=250] Delay before reset to null after done
39
41
  * @returns {UseProgressReturn} Current progress state and control methods
40
42
  *
41
43
  * @example
@@ -1,10 +1,6 @@
1
1
  import { HookTarget } from '../../utils/helpers';
2
2
  import { StateRef } from '../useRefState/useRefState';
3
3
  export interface UseScrollOptions {
4
- /** The on scroll callback */
5
- onScroll?: (params: UseScrollCallbackParams, event: Event) => void;
6
- /** The on end scroll callback */
7
- onStop?: (event: Event) => void;
8
4
  /** Offset arrived states by x pixels. */
9
5
  offset?: {
10
6
  left?: number;
@@ -12,12 +8,12 @@ export interface UseScrollOptions {
12
8
  top?: number;
13
9
  bottom?: number;
14
10
  };
11
+ /** The on scroll callback */
12
+ onScroll?: (params: UseScrollCallbackParams, event: Event) => void;
13
+ /** The on end scroll callback */
14
+ onStop?: (event: Event) => void;
15
15
  }
16
16
  export interface UseScrollCallbackParams {
17
- /** The element x position */
18
- x: number;
19
- /** The element y position */
20
- y: number;
21
17
  /** State of scroll arrived */
22
18
  arrived: {
23
19
  left: boolean;
@@ -32,6 +28,10 @@ export interface UseScrollCallbackParams {
32
28
  top: boolean;
33
29
  bottom: boolean;
34
30
  };
31
+ /** The element x position */
32
+ x: number;
33
+ /** The element y position */
34
+ y: number;
35
35
  }
36
36
  /** The scroll into view params type */
37
37
  export interface ScrollIntoViewParams {
@@ -47,16 +47,18 @@ export interface ScrollToParams {
47
47
  }
48
48
  /** The use scroll return type */
49
49
  export interface UseScrollReturn {
50
- /** The state of scrolling */
51
- scrolling: boolean;
50
+ /** The latest scroll value snapshot */
51
+ snapshot: UseScrollCallbackParams;
52
52
  /** Function to scroll element into view */
53
53
  scrollIntoView: (params?: ScrollIntoViewParams) => void;
54
54
  /** Function to scroll element to a specific position */
55
55
  scrollTo: (params?: ScrollToParams) => void;
56
+ /** Function to enable subscriptions and rerender on next updates */
57
+ watch: () => UseScrollCallbackParams;
56
58
  }
57
59
  export interface UseScroll {
58
60
  (target?: HookTarget, callback?: (params: UseScrollCallbackParams, event: Event) => void): UseScrollReturn;
59
- (target?: HookTarget, options?: UseScrollOptions): UseScrollReturn;
61
+ (target: HookTarget, options?: UseScrollOptions): UseScrollReturn;
60
62
  <Target extends Element>(callback?: (params: UseScrollCallbackParams, event: Event) => void, target?: never): UseScrollReturn & {
61
63
  ref: StateRef<Target>;
62
64
  };
@@ -11,7 +11,6 @@ export interface UseUrlSearchParamsSetOptions {
11
11
  export type UseUrlSearchParamsInitialValue<Value> = (() => Value) | Value;
12
12
  /** The use url search params options type */
13
13
  export interface UseUrlSearchParamsOptions<Value> {
14
- initialValue?: UseUrlSearchParamsInitialValue<string | URLSearchParams | Value>;
15
14
  /** The mode to use for writing to the URL */
16
15
  mode?: UrlSearchParamsMode;
17
16
  /** The mode to use for writing to the URL */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siberiacancode/reactuse",
3
- "version": "0.3.13",
3
+ "version": "0.3.15",
4
4
  "description": "The ultimate collection of react hooks",
5
5
  "author": {
6
6
  "name": "SIBERIA CAN CODE 🧊",
@@ -64,18 +64,19 @@
64
64
  "screenfull": "^6.0.2"
65
65
  },
66
66
  "devDependencies": {
67
- "@siberiacancode/vitest": "^2.3.0",
67
+ "@siberiacancode/vitest": "^2.4.1",
68
68
  "@testing-library/dom": "^10.4.1",
69
69
  "@testing-library/react": "^16.3.2",
70
70
  "@types/dom-speech-recognition": "^0.0.7",
71
- "@types/react": "^19.2.13",
71
+ "@types/react": "^19.2.14",
72
72
  "@types/react-dom": "^19.2.3",
73
73
  "@types/web-bluetooth": "^0.0.21",
74
- "@vitejs/plugin-react": "^5.1.3",
74
+ "@vitejs/plugin-react": "^5.1.4",
75
75
  "core-js": "^3.48.0",
76
76
  "react": "^19.2.4",
77
77
  "react-dom": "^19.2.4",
78
78
  "shx": "^0.4.0",
79
+ "tailwindcss": "4.2.1",
79
80
  "vite": "^7.3.1",
80
81
  "vite-plugin-dts": "^4.5.4",
81
82
  "vitest": "^4.0.18"