@akbeniwal/react-native-hooks 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,8 @@ A high-performance, lightweight, and type-safe collection of **16 custom React N
6
6
 
7
7
  ## Key Features 🌟
8
8
 
9
- * **Zero-Dependency `useNetworkStatus`**: Monitor internet reachability, ping latency, connection quality, and measure download speed in Mbps without bloating your bundle size.
9
+ * **100% Dependency-Free & Lightweight**: No external peer dependencies like `@react-native-clipboard/clipboard` or `@react-native-community/netinfo` required.
10
+ * **Speed & Latency Testing**: Monitor internet connection status, round-trip ping latency, quality classification, and measure download speed in Mbps on-demand.
10
11
  * **Android-Specific Back Button Hooks**: Custom hooks for back-press events and standard "Double-Tap to Exit" Toast notifications.
11
12
  * **Optimized Performance**: Internal callbacks are isolated inside `useRef` to prevent system listeners (keyboard, dimensions, back-handlers, app-states) from registering and tearing down repeatedly.
12
13
  * **TypeScript Ready**: Fully typed out-of-the-box with auto-generated declaration maps.
@@ -4,6 +4,7 @@ export interface UseClipboardOptions {
4
4
  }
5
5
  /**
6
6
  * A custom React Native hook to interact with the system clipboard.
7
+ * Fully dependency-free; uses NativeModules.Clipboard for iOS/Android and navigator.clipboard for Web.
7
8
  *
8
9
  * @param options Configurable options, including an onCopy callback
9
10
  * @returns A read-only tuple containing:
@@ -1 +1 @@
1
- {"version":3,"file":"useClipboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useClipboard.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS;IACpE,MAAM;IACN,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IACtB,MAAM,OAAO,CAAC,MAAM,CAAC;CACtB,CAkCA"}
1
+ {"version":3,"file":"useClipboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useClipboard.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS;IACpE,MAAM;IACN,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IACtB,MAAM,OAAO,CAAC,MAAM,CAAC;CACtB,CAqDA"}
@@ -1,7 +1,8 @@
1
1
  import { useState, useCallback, useEffect, useRef } from 'react';
2
- import Clipboard from '@react-native-clipboard/clipboard';
2
+ import { NativeModules, Platform } from 'react-native';
3
3
  /**
4
4
  * A custom React Native hook to interact with the system clipboard.
5
+ * Fully dependency-free; uses NativeModules.Clipboard for iOS/Android and navigator.clipboard for Web.
5
6
  *
6
7
  * @param options Configurable options, including an onCopy callback
7
8
  * @returns A read-only tuple containing:
@@ -15,7 +16,18 @@ export function useClipboard(options) {
15
16
  optionsRef.current = options;
16
17
  const getString = useCallback(async () => {
17
18
  try {
18
- const text = await Clipboard.getString();
19
+ let text = '';
20
+ if (Platform.OS === 'web') {
21
+ if (typeof navigator !== 'undefined' && navigator.clipboard) {
22
+ text = await navigator.clipboard.readText();
23
+ }
24
+ }
25
+ else {
26
+ const ClipboardModule = NativeModules.Clipboard;
27
+ if (ClipboardModule && typeof ClipboardModule.getString === 'function') {
28
+ text = await ClipboardModule.getString();
29
+ }
30
+ }
19
31
  setClipboardData(text);
20
32
  return text;
21
33
  }
@@ -26,7 +38,17 @@ export function useClipboard(options) {
26
38
  }, []);
27
39
  const setString = useCallback((text) => {
28
40
  try {
29
- Clipboard.setString(text);
41
+ if (Platform.OS === 'web') {
42
+ if (typeof navigator !== 'undefined' && navigator.clipboard) {
43
+ navigator.clipboard.writeText(text);
44
+ }
45
+ }
46
+ else {
47
+ const ClipboardModule = NativeModules.Clipboard;
48
+ if (ClipboardModule && typeof ClipboardModule.setString === 'function') {
49
+ ClipboardModule.setString(text);
50
+ }
51
+ }
30
52
  setClipboardData(text);
31
53
  if (optionsRef.current?.onCopy) {
32
54
  optionsRef.current.onCopy(text);
@@ -1 +1 @@
1
- {"version":3,"file":"useClipboard.js","sourceRoot":"","sources":["../../src/hooks/useClipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,SAAS,MAAM,mCAAmC,CAAC;AAO1D;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAA6B;IAKxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAE/D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAqB,EAAE;QACxD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;YACzC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,IAAY,EAAQ,EAAE;QACnD,IAAI,CAAC;YACH,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1B,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC/B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"useClipboard.js","sourceRoot":"","sources":["../../src/hooks/useClipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOvD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAA6B;IAKxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAE/D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAqB,EAAE;QACxD,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC1B,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oBAC5D,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC9C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC;gBAChD,IAAI,eAAe,IAAI,OAAO,eAAe,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;oBACvE,IAAI,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,IAAY,EAAQ,EAAE;QACnD,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC1B,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oBAC5D,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC;gBAChD,IAAI,eAAe,IAAI,OAAO,eAAe,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;oBACvE,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC/B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AACxD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akbeniwal/react-native-hooks",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "A high-performance collection of React Native hooks optimized for performance, memory safety and developer experience.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,11 +39,7 @@
39
39
  "react": ">=18.0.0",
40
40
  "react-native": ">=0.72.0"
41
41
  },
42
- "optionalDependencies": {
43
- "@react-native-clipboard/clipboard": "^1.16.3"
44
- },
45
42
  "devDependencies": {
46
- "@react-native-clipboard/clipboard": "^1.16.3",
47
43
  "@types/react": "^19.2.16",
48
44
  "react": "^19.2.7",
49
45
  "react-native": "^0.85.3",