@siberiacancode/reactuse 0.0.113 → 0.0.115

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 (42) hide show
  1. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  2. package/dist/cjs/hooks/useDocumentEvent/useDocumentEvent.cjs +1 -1
  3. package/dist/cjs/hooks/useDocumentEvent/useDocumentEvent.cjs.map +1 -1
  4. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs +2 -0
  5. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -0
  6. package/dist/cjs/hooks/useEventListener/useEventListener.cjs +1 -1
  7. package/dist/cjs/hooks/useEventListener/useEventListener.cjs.map +1 -1
  8. package/dist/cjs/hooks/useLongPress/useLongPress.cjs +1 -1
  9. package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
  10. package/dist/cjs/hooks/useMouse/useMouse.cjs.map +1 -1
  11. package/dist/cjs/hooks/useParallax/useParallax.cjs +1 -1
  12. package/dist/cjs/hooks/useParallax/useParallax.cjs.map +1 -1
  13. package/dist/cjs/hooks/useSpeechRecognition/useSpeechRecognition.cjs +2 -0
  14. package/dist/cjs/hooks/useSpeechRecognition/useSpeechRecognition.cjs.map +1 -0
  15. package/dist/cjs/hooks/useWindowEvent/useWindowEvent.cjs +1 -1
  16. package/dist/cjs/hooks/useWindowEvent/useWindowEvent.cjs.map +1 -1
  17. package/dist/cjs/index.cjs +1 -1
  18. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
  19. package/dist/esm/hooks/useDocumentEvent/useDocumentEvent.mjs +4 -3
  20. package/dist/esm/hooks/useDocumentEvent/useDocumentEvent.mjs.map +1 -1
  21. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +29 -0
  22. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -0
  23. package/dist/esm/hooks/useEventListener/useEventListener.mjs +15 -15
  24. package/dist/esm/hooks/useEventListener/useEventListener.mjs.map +1 -1
  25. package/dist/esm/hooks/useLongPress/useLongPress.mjs +30 -17
  26. package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
  27. package/dist/esm/hooks/useMouse/useMouse.mjs.map +1 -1
  28. package/dist/esm/hooks/useParallax/useParallax.mjs +90 -85
  29. package/dist/esm/hooks/useParallax/useParallax.mjs.map +1 -1
  30. package/dist/esm/hooks/useSpeechRecognition/useSpeechRecognition.mjs +41 -0
  31. package/dist/esm/hooks/useSpeechRecognition/useSpeechRecognition.mjs.map +1 -0
  32. package/dist/esm/hooks/useWindowEvent/useWindowEvent.mjs +4 -3
  33. package/dist/esm/hooks/useWindowEvent/useWindowEvent.mjs.map +1 -1
  34. package/dist/esm/index.mjs +257 -252
  35. package/dist/esm/index.mjs.map +1 -1
  36. package/dist/types/hooks/index.d.ts +2 -0
  37. package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +2 -0
  38. package/dist/types/hooks/useDoubleClick/useDoubleClick.d.ts +38 -0
  39. package/dist/types/hooks/useEventListener/useEventListener.d.ts +5 -5
  40. package/dist/types/hooks/useLongPress/useLongPress.d.ts +27 -25
  41. package/dist/types/hooks/useSpeechRecognition/useSpeechRecognition.d.ts +69 -0
  42. package/package.json +2 -1
@@ -0,0 +1,38 @@
1
+ import { HookTarget } from '../../utils/helpers';
2
+ import { StateRef } from '../useRefState/useRefState';
3
+ export type DoubleClickEvents = MouseEvent | TouchEvent;
4
+ export interface UseDoubleClickOptions {
5
+ threshold?: number;
6
+ onSingleClick?: (event: DoubleClickEvents) => void;
7
+ }
8
+ export interface UseDoubleClick {
9
+ (target: HookTarget, callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions): boolean;
10
+ <Target extends Element>(callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions, target?: never): {
11
+ ref: StateRef<Target>;
12
+ clicked: boolean;
13
+ };
14
+ }
15
+ /**
16
+ * @name useDoubleClick
17
+ * @description - Hook that defines the logic when double clicking an element
18
+ * @category Sensors
19
+ *
20
+ * @overload
21
+ * @param {HookTarget} target The target element to be double clicked
22
+ * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click
23
+ * @param {UseDoubleClickOptions} [options] The options for the double click
24
+ * @returns {boolean} The double clicking state
25
+ *
26
+ * @example
27
+ * useDoubleClick(ref, () => console.log('double clicked'));
28
+ *
29
+ * @overload
30
+ * @template Target The target element
31
+ * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click
32
+ * @param {UseDoubleClickOptions} [options] The options for the double click
33
+ * @returns {boolean} The double clicking state
34
+ *
35
+ * @example
36
+ * const ref = useDoubleClick(() => console.log('double clicked'));
37
+ */
38
+ export declare const useDoubleClick: UseDoubleClick;
@@ -5,11 +5,11 @@ export type UseEventListenerOptions = boolean | AddEventListenerOptions;
5
5
  /** The use event listener return type */
6
6
  export type UseEventListenerReturn<Target extends Element> = StateRef<Target>;
7
7
  export interface UseEventListener {
8
- <Event extends keyof WindowEventMap = keyof WindowEventMap>(target: Window, event: Event | Event[], listener: (this: Window, event: WindowEventMap[Event]) => void, options?: UseEventListenerOptions): void;
9
- <Event extends keyof DocumentEventMap = keyof DocumentEventMap>(target: Document, event: Event | Event[], listener: (this: Document, event: DocumentEventMap[Event]) => void, options?: UseEventListenerOptions): void;
10
- <Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(target: HookTarget, event: Event | Event[], listener: (this: Element, event: HTMLElementEventMap[Event]) => void, options?: UseEventListenerOptions): void;
11
- <Target extends Element, Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(event: Event | Event[], listener: (this: Target, event: HTMLElementEventMap[Event]) => void, options?: UseEventListenerOptions, target?: never): UseEventListenerReturn<Target>;
12
- <Target extends Element, Event extends keyof MediaQueryListEventMap = keyof MediaQueryListEventMap>(event: Event | Event[], listener: (this: Target, event: MediaQueryListEventMap[Event]) => void, options?: UseEventListenerOptions, target?: never): UseEventListenerReturn<Target>;
8
+ <Event extends keyof WindowEventMap = keyof WindowEventMap>(target: HookTarget, event: Event, listener: (this: Window, event: WindowEventMap[Event]) => void, options?: UseEventListenerOptions): void;
9
+ <Event extends keyof DocumentEventMap = keyof DocumentEventMap>(target: HookTarget, event: Event, listener: (this: Document, event: DocumentEventMap[Event]) => void, options?: UseEventListenerOptions): void;
10
+ <Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(target: HookTarget, event: Event, listener: (this: Element, event: HTMLElementEventMap[Event]) => void, options?: UseEventListenerOptions): void;
11
+ <Target extends Element, Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(event: Event, listener: (this: Target, event: HTMLElementEventMap[Event]) => void, options?: UseEventListenerOptions, target?: never): UseEventListenerReturn<Target>;
12
+ <Target extends Element, Event extends keyof MediaQueryListEventMap = keyof MediaQueryListEventMap>(event: Event, listener: (this: Target, event: MediaQueryListEventMap[Event]) => void, options?: UseEventListenerOptions, target?: never): UseEventListenerReturn<Target>;
13
13
  }
14
14
  /**
15
15
  * @name useEventListener
@@ -1,38 +1,40 @@
1
- import { MouseEventHandler, RefObject, TouchEventHandler } from 'react';
2
- export type UseLongPressTarget = (() => Element) | Element | RefObject<Element | null | undefined>;
3
- export type LongPressReactEvents<Target extends Element = Element> = MouseEventHandler<Target> | TouchEventHandler<Target>;
1
+ import { HookTarget } from '../../utils/helpers';
2
+ import { StateRef } from '../useRefState/useRefState';
3
+ export type LongPressEvents = MouseEvent | TouchEvent;
4
4
  export interface UseLongPressOptions {
5
5
  threshold?: number;
6
- onCancel?: (event: LongPressReactEvents) => void;
7
- onFinish?: (event: LongPressReactEvents) => void;
8
- onStart?: (event: LongPressReactEvents) => void;
6
+ onCancel?: (event: LongPressEvents) => void;
7
+ onFinish?: (event: LongPressEvents) => void;
8
+ onStart?: (event: LongPressEvents) => void;
9
9
  }
10
- export interface UseLongPressBind {
11
- /** The callback function to be invoked on mouse down */
12
- onMouseDown: MouseEventHandler<Element>;
13
- /** The callback function to be invoked on mouse up */
14
- onMouseUp: MouseEventHandler<Element>;
15
- /** The callback function to be invoked on touch end */
16
- onTouchEnd: TouchEventHandler<Element>;
17
- /** The callback function to be invoked on touch start */
18
- onTouchStart: TouchEventHandler<Element>;
10
+ export interface UseLongPress {
11
+ (target: HookTarget, callback: (event: LongPressEvents) => void, options?: UseLongPressOptions): boolean;
12
+ <Target extends Element>(callback: (event: LongPressEvents) => void, options?: UseLongPressOptions, target?: never): {
13
+ ref: StateRef<Target>;
14
+ pressed: boolean;
15
+ };
19
16
  }
20
- export type UseLongPressReturn = [UseLongPressBind, boolean];
21
17
  /**
22
18
  * @name useLongPress
23
19
  * @description - Hook that defines the logic when long pressing an element
24
20
  * @category Sensors
25
21
  *
22
+ * @overload
23
+ * @param {HookTarget} target The target element to be long pressed
24
+ * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press
25
+ * @param {UseLongPressOptions} [options] The options for the long press
26
+ * @returns {boolean} The long pressing state
27
+ *
28
+ * @example
29
+ * const pressed = useLongPress(ref, () => console.log('callback'));
30
+ *
31
+ * @overload
26
32
  * @template Target The target element
27
- * @param {Target} target The target element to be long pressed
28
- * @param {(event: Event) => void} callback The callback function to be invoked on long press
29
- * @param {number} [options.threshold=400] The threshold time in milliseconds
30
- * @param {(event: Event) => void} [options.onStart] The callback function to be invoked on long press start
31
- * @param {(event: Event) => void} [options.onFinish] The callback function to be invoked on long press finish
32
- * @param {(event: Event) => void} [options.onCancel] The callback function to be invoked on long press cancel
33
- * @returns {UseLongPressReturn<Target>} The ref of the target element
33
+ * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press
34
+ * @param {UseLongPressOptions} [options] The options for the long press
35
+ * @returns {boolean} The long pressing state
34
36
  *
35
37
  * @example
36
- * const [bind, longPressing] = useLongPress(() => console.log('callback'));
38
+ * const { ref, pressed } = useLongPress(() => console.log('callback'));
37
39
  */
38
- export declare const useLongPress: (callback: (event: LongPressReactEvents) => void, options?: UseLongPressOptions) => UseLongPressReturn;
40
+ export declare const useLongPress: UseLongPress;
@@ -0,0 +1,69 @@
1
+ /** The use speech recognition hook options type */
2
+ interface UseSpeechRecognitionOptions {
3
+ /** If true, recognition continues even after pauses in speech. Default is false */
4
+ continuous?: SpeechRecognition['continuous'];
5
+ /** A list of grammar rules */
6
+ grammars?: SpeechRecognition['grammars'];
7
+ /** If true, interim (non-final) results are provided as the user speaks */
8
+ interimResults?: SpeechRecognition['interimResults'];
9
+ /** The language in which recognition should occur. Must be a valid BCP 47 language tag (e.g., "en-US", "ru-RU") */
10
+ language?: SpeechRecognition['lang'];
11
+ /** The maximum number of alternative transcripts returned for a given recognition result. Must be a positive integer */
12
+ maxAlternatives?: SpeechRecognition['maxAlternatives'];
13
+ /** Callback invoked when speech recognition ends */
14
+ onEnd?: () => void;
15
+ /** Callback invoked when an error occurs during recognition */
16
+ onError?: (error: SpeechRecognitionErrorEvent) => void;
17
+ /** Callback invoked when recognition produces a result */
18
+ onResult?: (event: SpeechRecognitionEvent) => void;
19
+ /** Callback invoked when speech recognition starts */
20
+ onStart?: () => void;
21
+ }
22
+ /** The return type of the useSpeechRecognition hook. */
23
+ interface UseSpeechRecognitionReturn {
24
+ /** The error state */
25
+ error: SpeechRecognitionErrorEvent | null;
26
+ /** The final transcript */
27
+ final: boolean;
28
+ /** Whether the hook is currently listening for speech */
29
+ listening: boolean;
30
+ /** The speech recognition instance */
31
+ recognition: SpeechRecognition;
32
+ /** Whether the current browser supports the Web Speech API */
33
+ supported: boolean;
34
+ /** The current transcript */
35
+ transcript: string;
36
+ /** Begins speech recognition */
37
+ start: () => void;
38
+ /** Ends speech recognition, finalizing results */
39
+ stop: () => void;
40
+ /** Toggles the listening state */
41
+ toggle: (value?: boolean) => void;
42
+ }
43
+ export declare const getSpeechRecognition: () => {
44
+ new (): SpeechRecognition;
45
+ prototype: SpeechRecognition;
46
+ };
47
+ /**
48
+ * @name useSpeechRecognition
49
+ * @description - Hook that provides a streamlined interface for incorporating speech-to-text functionality
50
+ * @category Sensors
51
+ *
52
+ * @browserapi window.SpeechRecognition https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition
53
+ *
54
+ * @param {boolean} [options.continuous=false] Whether recognition should continue after pauses
55
+ * @param {boolean} [options.interimResults=false] Whether interim results should be provided
56
+ * @param {string} [options.language="en-US"] The language for recognition, as a valid BCP 47 tag
57
+ * @param {number} [options.maxAlternatives=1] The maximum number of alternative transcripts to return
58
+ * @param {SpeechGrammarList} [options.grammars] A list of grammar rules
59
+ * @param {() => void} [options.onStart] Callback invoked when speech recognition starts
60
+ * @param {() => void} [options.onEnd] Callback invoked when speech recognition ends
61
+ * @param {(error: SpeechRecognitionErrorEvent) => void} [options.onError] Callback invoked when an error occurs during recognition
62
+ * @param {(event: SpeechRecognitionEvent) => void} [options.onResult] Callback invoked when recognition produces a result
63
+ * @returns {UseSpeechRecognitionReturn} An object containing the speech recognition functionality
64
+ *
65
+ * @example
66
+ * const { supported, value, recognition, listening, error, start, stop, toggle } = useSpeechRecognition();
67
+ */
68
+ export declare const useSpeechRecognition: (options?: UseSpeechRecognitionOptions) => UseSpeechRecognitionReturn;
69
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siberiacancode/reactuse",
3
- "version": "0.0.113",
3
+ "version": "0.0.115",
4
4
  "description": "The ultimate collection of react hooks",
5
5
  "author": {
6
6
  "name": "SIBERIA CAN CODE 🧊",
@@ -67,6 +67,7 @@
67
67
  "@siberiacancode/vitest": "^2.1.0",
68
68
  "@testing-library/dom": "^10.4.0",
69
69
  "@testing-library/react": "^16.2.0",
70
+ "@types/dom-speech-recognition": "^0.0.4",
70
71
  "@types/react": "^18.3.18",
71
72
  "@types/react-dom": "^18.3.5",
72
73
  "@types/web-bluetooth": "^0.0.21",