@akbeniwal/react-native-hooks 1.0.1 → 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
|
-
* **
|
|
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.
|
|
@@ -214,15 +215,6 @@ useTimeout(() => {
|
|
|
214
215
|
}, 5000);
|
|
215
216
|
```
|
|
216
217
|
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## Development & Building 🛠️
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
# Build the typescript files into JavaScript and TypeScript Definitions (under /dist)
|
|
223
|
-
yarn build
|
|
224
|
-
```
|
|
225
|
-
|
|
226
218
|
## Author 👤
|
|
227
219
|
|
|
228
220
|
**Abhishek Beniwal**
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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",
|