@grantpearceuk/hooks 0.1.0

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 (134) hide show
  1. package/README.md +403 -0
  2. package/lib/cjs/global.d.d.ts +7 -0
  3. package/lib/cjs/global.d.js +2 -0
  4. package/lib/cjs/index.d.ts +32 -0
  5. package/lib/cjs/index.js +69 -0
  6. package/lib/cjs/useArray/index.d.ts +2 -0
  7. package/lib/cjs/useArray/index.js +43 -0
  8. package/lib/cjs/useAsync/index.d.ts +2 -0
  9. package/lib/cjs/useAsync/index.js +29 -0
  10. package/lib/cjs/useClickOutside/index.d.ts +5 -0
  11. package/lib/cjs/useClickOutside/index.js +14 -0
  12. package/lib/cjs/useCookie/index.d.ts +2 -0
  13. package/lib/cjs/useCookie/index.js +26 -0
  14. package/lib/cjs/useCopyToClipboard/index.d.ts +2 -0
  15. package/lib/cjs/useCopyToClipboard/index.js +20 -0
  16. package/lib/cjs/useDarkMode/index.d.ts +4 -0
  17. package/lib/cjs/useDarkMode/index.js +18 -0
  18. package/lib/cjs/useDebounce/index.d.ts +2 -0
  19. package/lib/cjs/useDebounce/index.js +22 -0
  20. package/lib/cjs/useDebugInformation/index.d.ts +8 -0
  21. package/lib/cjs/useDebugInformation/index.js +44 -0
  22. package/lib/cjs/useDeepCompareEffect/index.d.ts +2 -0
  23. package/lib/cjs/useDeepCompareEffect/index.js +16 -0
  24. package/lib/cjs/useEffectOnce/index.d.ts +1 -0
  25. package/lib/cjs/useEffectOnce/index.js +7 -0
  26. package/lib/cjs/useEventListener/index.d.ts +2 -0
  27. package/lib/cjs/useEventListener/index.js +18 -0
  28. package/lib/cjs/useFetch/index.d.ts +2 -0
  29. package/lib/cjs/useFetch/index.js +82 -0
  30. package/lib/cjs/useGenerateHtmlId/index.d.ts +3 -0
  31. package/lib/cjs/useGenerateHtmlId/index.js +9 -0
  32. package/lib/cjs/useGeolocation/index.d.ts +2 -0
  33. package/lib/cjs/useGeolocation/index.js +26 -0
  34. package/lib/cjs/useHover/index.d.ts +2 -0
  35. package/lib/cjs/useHover/index.js +17 -0
  36. package/lib/cjs/useLongPress/index.d.ts +4 -0
  37. package/lib/cjs/useLongPress/index.js +19 -0
  38. package/lib/cjs/useMediaQuery/index.d.ts +1 -0
  39. package/lib/cjs/useMediaQuery/index.js +22 -0
  40. package/lib/cjs/useOnScreen/index.d.ts +2 -0
  41. package/lib/cjs/useOnScreen/index.js +23 -0
  42. package/lib/cjs/useOnlineStatus/index.d.ts +1 -0
  43. package/lib/cjs/useOnlineStatus/index.js +14 -0
  44. package/lib/cjs/usePagination/index.d.ts +9 -0
  45. package/lib/cjs/usePagination/index.js +22 -0
  46. package/lib/cjs/usePrevious/index.d.ts +2 -0
  47. package/lib/cjs/usePrevious/index.js +13 -0
  48. package/lib/cjs/useRenderCount/index.d.ts +1 -0
  49. package/lib/cjs/useRenderCount/index.js +11 -0
  50. package/lib/cjs/useScript/index.d.ts +2 -0
  51. package/lib/cjs/useScript/index.js +19 -0
  52. package/lib/cjs/useSize/index.d.ts +3 -0
  53. package/lib/cjs/useSize/index.js +18 -0
  54. package/lib/cjs/useStateWithHistory/index.d.ts +4 -0
  55. package/lib/cjs/useStateWithHistory/index.js +53 -0
  56. package/lib/cjs/useStateWithValidation/index.d.ts +2 -0
  57. package/lib/cjs/useStateWithValidation/index.js +14 -0
  58. package/lib/cjs/useStorage/index.d.ts +5 -0
  59. package/lib/cjs/useStorage/index.js +33 -0
  60. package/lib/cjs/useTimeout/index.d.ts +2 -0
  61. package/lib/cjs/useTimeout/index.js +26 -0
  62. package/lib/cjs/useToggle/index.d.ts +2 -0
  63. package/lib/cjs/useToggle/index.js +12 -0
  64. package/lib/cjs/useUpdateEffect/index.d.ts +2 -0
  65. package/lib/cjs/useUpdateEffect/index.js +14 -0
  66. package/lib/cjs/useWindowSize/index.d.ts +2 -0
  67. package/lib/cjs/useWindowSize/index.js +18 -0
  68. package/lib/esm/global.d.d.ts +7 -0
  69. package/lib/esm/global.d.js +1 -0
  70. package/lib/esm/index.d.ts +32 -0
  71. package/lib/esm/index.js +32 -0
  72. package/lib/esm/useArray/index.d.ts +2 -0
  73. package/lib/esm/useArray/index.js +40 -0
  74. package/lib/esm/useAsync/index.d.ts +2 -0
  75. package/lib/esm/useAsync/index.js +26 -0
  76. package/lib/esm/useClickOutside/index.d.ts +5 -0
  77. package/lib/esm/useClickOutside/index.js +8 -0
  78. package/lib/esm/useCookie/index.d.ts +2 -0
  79. package/lib/esm/useCookie/index.js +20 -0
  80. package/lib/esm/useCopyToClipboard/index.d.ts +2 -0
  81. package/lib/esm/useCopyToClipboard/index.js +14 -0
  82. package/lib/esm/useDarkMode/index.d.ts +4 -0
  83. package/lib/esm/useDarkMode/index.js +12 -0
  84. package/lib/esm/useDebounce/index.d.ts +2 -0
  85. package/lib/esm/useDebounce/index.js +16 -0
  86. package/lib/esm/useDebugInformation/index.d.ts +8 -0
  87. package/lib/esm/useDebugInformation/index.js +38 -0
  88. package/lib/esm/useDeepCompareEffect/index.d.ts +2 -0
  89. package/lib/esm/useDeepCompareEffect/index.js +10 -0
  90. package/lib/esm/useEffectOnce/index.d.ts +1 -0
  91. package/lib/esm/useEffectOnce/index.js +4 -0
  92. package/lib/esm/useEventListener/index.d.ts +2 -0
  93. package/lib/esm/useEventListener/index.js +15 -0
  94. package/lib/esm/useFetch/index.d.ts +2 -0
  95. package/lib/esm/useFetch/index.js +76 -0
  96. package/lib/esm/useGenerateHtmlId/index.d.ts +3 -0
  97. package/lib/esm/useGenerateHtmlId/index.js +7 -0
  98. package/lib/esm/useGeolocation/index.d.ts +2 -0
  99. package/lib/esm/useGeolocation/index.js +23 -0
  100. package/lib/esm/useHover/index.d.ts +2 -0
  101. package/lib/esm/useHover/index.js +11 -0
  102. package/lib/esm/useLongPress/index.d.ts +4 -0
  103. package/lib/esm/useLongPress/index.js +13 -0
  104. package/lib/esm/useMediaQuery/index.d.ts +1 -0
  105. package/lib/esm/useMediaQuery/index.js +16 -0
  106. package/lib/esm/useOnScreen/index.d.ts +2 -0
  107. package/lib/esm/useOnScreen/index.js +20 -0
  108. package/lib/esm/useOnlineStatus/index.d.ts +1 -0
  109. package/lib/esm/useOnlineStatus/index.js +8 -0
  110. package/lib/esm/usePagination/index.d.ts +9 -0
  111. package/lib/esm/usePagination/index.js +19 -0
  112. package/lib/esm/usePrevious/index.d.ts +2 -0
  113. package/lib/esm/usePrevious/index.js +10 -0
  114. package/lib/esm/useRenderCount/index.d.ts +1 -0
  115. package/lib/esm/useRenderCount/index.js +8 -0
  116. package/lib/esm/useScript/index.d.ts +2 -0
  117. package/lib/esm/useScript/index.js +13 -0
  118. package/lib/esm/useSize/index.d.ts +3 -0
  119. package/lib/esm/useSize/index.js +15 -0
  120. package/lib/esm/useStateWithHistory/index.d.ts +4 -0
  121. package/lib/esm/useStateWithHistory/index.js +50 -0
  122. package/lib/esm/useStateWithValidation/index.d.ts +2 -0
  123. package/lib/esm/useStateWithValidation/index.js +11 -0
  124. package/lib/esm/useStorage/index.d.ts +5 -0
  125. package/lib/esm/useStorage/index.js +28 -0
  126. package/lib/esm/useTimeout/index.d.ts +2 -0
  127. package/lib/esm/useTimeout/index.js +23 -0
  128. package/lib/esm/useToggle/index.d.ts +2 -0
  129. package/lib/esm/useToggle/index.js +9 -0
  130. package/lib/esm/useUpdateEffect/index.d.ts +2 -0
  131. package/lib/esm/useUpdateEffect/index.js +11 -0
  132. package/lib/esm/useWindowSize/index.d.ts +2 -0
  133. package/lib/esm/useWindowSize/index.js +12 -0
  134. package/package.json +49 -0
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = require("react");
7
+ var useMediaQuery_1 = __importDefault(require("../useMediaQuery"));
8
+ var useStorage_1 = require("../useStorage");
9
+ function useDarkMode() {
10
+ var _a = (0, useStorage_1.useLocalStorage)("useDarkMode"), darkMode = _a[0], setDarkMode = _a[1];
11
+ var prefersDarkMode = (0, useMediaQuery_1.default)("(prefers-color-scheme: dark)");
12
+ var enabled = darkMode !== null && darkMode !== void 0 ? darkMode : prefersDarkMode;
13
+ (0, react_1.useEffect)(function () {
14
+ document.body.classList.toggle("dark-mode", enabled);
15
+ }, [enabled]);
16
+ return [enabled, setDarkMode];
17
+ }
18
+ exports.default = useDarkMode;
@@ -0,0 +1,2 @@
1
+ import { Callback, Dependencies } from "./types";
2
+ export default function useDebounce(callback: Callback, delay: number, dependencies: Dependencies): void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ var react_1 = require("react");
16
+ var useTimeout_1 = __importDefault(require("../useTimeout"));
17
+ function useDebounce(callback, delay, dependencies) {
18
+ var _a = (0, useTimeout_1.default)(callback, delay), reset = _a.reset, clear = _a.clear;
19
+ (0, react_1.useEffect)(reset, __spreadArray(__spreadArray([], dependencies, true), [reset], false));
20
+ (0, react_1.useEffect)(clear, [clear]);
21
+ }
22
+ exports.default = useDebounce;
@@ -0,0 +1,8 @@
1
+ interface DebugInformation {
2
+ count: number;
3
+ changedProps: Record<string, unknown>;
4
+ timeSinceLastRender: number;
5
+ lastRenderTimestamp: number;
6
+ }
7
+ export default function useDebugInformation(componentName: string, props: Record<string, unknown>): DebugInformation;
8
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var react_1 = require("react");
18
+ var useRenderCount_1 = __importDefault(require("../useRenderCount"));
19
+ function useDebugInformation(componentName, props) {
20
+ var count = (0, useRenderCount_1.default)();
21
+ var changedProps = (0, react_1.useRef)({});
22
+ var previousProps = (0, react_1.useRef)(props);
23
+ var lastRenderTimestamp = (0, react_1.useRef)(Date.now());
24
+ var propKeys = Object.keys(__assign(__assign({}, props), previousProps));
25
+ changedProps.current = propKeys.reduce(function (obj, key) {
26
+ var _a;
27
+ if (props[key] === previousProps.current[key])
28
+ return obj;
29
+ return __assign(__assign({}, obj), (_a = {}, _a[key] = { previous: previousProps.current[key], current: props[key] }, _a));
30
+ }, {});
31
+ var info = {
32
+ count: count,
33
+ changedProps: changedProps.current,
34
+ timeSinceLastRender: Date.now() - lastRenderTimestamp.current,
35
+ lastRenderTimestamp: lastRenderTimestamp.current,
36
+ };
37
+ (0, react_1.useEffect)(function () {
38
+ previousProps.current = props;
39
+ lastRenderTimestamp.current = Date.now();
40
+ console.log("[debug-info]", componentName, info);
41
+ });
42
+ return info;
43
+ }
44
+ exports.default = useDebugInformation;
@@ -0,0 +1,2 @@
1
+ export declare type Dependencies = [unknown] | [];
2
+ export default function useDeepCompareEffect(callback: () => void, dependencies?: Dependencies): void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = require("react");
7
+ var isEqual_1 = __importDefault(require("lodash/fp/isEqual"));
8
+ function useDeepCompareEffect(callback, dependencies) {
9
+ if (dependencies === void 0) { dependencies = []; }
10
+ var currentDependenciesRef = (0, react_1.useRef)([]);
11
+ if (!(0, isEqual_1.default)(currentDependenciesRef.current, dependencies)) {
12
+ currentDependenciesRef.current = dependencies;
13
+ }
14
+ (0, react_1.useEffect)(callback, [currentDependenciesRef.current]);
15
+ }
16
+ exports.default = useDeepCompareEffect;
@@ -0,0 +1 @@
1
+ export default function useEffectOnce(callback: () => void): void;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useEffectOnce(callback) {
5
+ (0, react_1.useEffect)(callback, []);
6
+ }
7
+ exports.default = useEffectOnce;
@@ -0,0 +1,2 @@
1
+ import { Callback, EventElement } from "./types";
2
+ export default function useEventListener(eventType: string, callback: Callback, element?: EventElement): void;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useEventListener(eventType, callback, element) {
5
+ if (element === void 0) { element = window; }
6
+ var callbackRef = (0, react_1.useRef)(callback);
7
+ (0, react_1.useEffect)(function () {
8
+ callbackRef.current = callback;
9
+ }, [callback]);
10
+ (0, react_1.useEffect)(function () {
11
+ if (element == null)
12
+ return;
13
+ var handler = function (e) { return callbackRef.current(e); };
14
+ element.addEventListener(eventType, handler);
15
+ return function () { return element.removeEventListener(eventType, handler); };
16
+ }, [eventType, element]);
17
+ }
18
+ exports.default = useEventListener;
@@ -0,0 +1,2 @@
1
+ import { Dependencies, Fetch } from "./types";
2
+ export default function useFetch(url: string, options?: Record<string, unknown | never>, dependencies?: Dependencies): Fetch;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var useAsync_1 = __importDefault(require("../useAsync"));
54
+ var DEFAULT_OPTIONS = {
55
+ headers: { "Content-Type": "application/json" },
56
+ };
57
+ function useFetch(url, options, dependencies) {
58
+ var _this = this;
59
+ if (options === void 0) { options = {}; }
60
+ if (dependencies === void 0) { dependencies = []; }
61
+ return (0, useAsync_1.default)(function () { return __awaiter(_this, void 0, void 0, function () {
62
+ var _this = this;
63
+ return __generator(this, function (_a) {
64
+ return [2 /*return*/, fetch(url, __assign(__assign({}, DEFAULT_OPTIONS), options)).then(function (res) { return __awaiter(_this, void 0, void 0, function () {
65
+ var json;
66
+ return __generator(this, function (_a) {
67
+ switch (_a.label) {
68
+ case 0:
69
+ if (res.ok)
70
+ return [2 /*return*/, res.json()];
71
+ return [4 /*yield*/, res.json()];
72
+ case 1:
73
+ json = _a.sent();
74
+ return [4 /*yield*/, Promise.reject(json)];
75
+ case 2: return [2 /*return*/, _a.sent()];
76
+ }
77
+ });
78
+ }); })];
79
+ });
80
+ }); }, dependencies);
81
+ }
82
+ exports.default = useFetch;
@@ -0,0 +1,3 @@
1
+ declare type GenerateID = () => (suffix: string) => string;
2
+ declare const useGenerateHtmlId: GenerateID;
3
+ export default useGenerateHtmlId;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ var counter = 0;
5
+ var useGenerateHtmlId = function () {
6
+ var id = (0, react_1.useMemo)(function () { return ++counter; }, []);
7
+ return function (suffix) { return "id" + id + "_" + suffix; };
8
+ };
9
+ exports.default = useGenerateHtmlId;
@@ -0,0 +1,2 @@
1
+ import { GeolocationResponse, Options } from "./types";
2
+ export default function useGeolocation(options?: Options): GeolocationResponse;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useGeolocation(options) {
5
+ if (options === void 0) { options = undefined; }
6
+ var _a = (0, react_1.useState)(true), loading = _a[0], setLoading = _a[1];
7
+ var _b = (0, react_1.useState)(), error = _b[0], setError = _b[1];
8
+ var _c = (0, react_1.useState)({}), data = _c[0], setData = _c[1];
9
+ (0, react_1.useEffect)(function () {
10
+ var successHandler = function (geoLocation) {
11
+ console.log("s", geoLocation);
12
+ setLoading(false);
13
+ setError(null);
14
+ setData(geoLocation.coords);
15
+ };
16
+ var errorHandler = function (geoLocation) {
17
+ setError(geoLocation);
18
+ setLoading(false);
19
+ };
20
+ navigator.geolocation.getCurrentPosition(successHandler, errorHandler, options);
21
+ var id = navigator.geolocation.watchPosition(successHandler, errorHandler, options);
22
+ return function () { return navigator.geolocation.clearWatch(id); };
23
+ }, [options]);
24
+ return { loading: loading, error: error, data: data };
25
+ }
26
+ exports.default = useGeolocation;
@@ -0,0 +1,2 @@
1
+ import { MutableRefObject } from "react";
2
+ export default function useHover(ref: MutableRefObject<undefined>): boolean;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = require("react");
7
+ var useEventListener_1 = __importDefault(require("../useEventListener"));
8
+ function useHover(ref) {
9
+ var _a = (0, react_1.useState)(false), hovered = _a[0], setHovered = _a[1];
10
+ (0, react_1.useEffect)(function () {
11
+ setHovered(false);
12
+ }, [ref.current]);
13
+ (0, useEventListener_1.default)("mouseover", function () { return setHovered(true); }, ref.current);
14
+ (0, useEventListener_1.default)("mouseout", function () { return setHovered(false); }, ref.current);
15
+ return hovered;
16
+ }
17
+ exports.default = useHover;
@@ -0,0 +1,4 @@
1
+ import { MutableRefObject } from "react";
2
+ export default function useLongPress(ref: MutableRefObject<undefined>, cb: () => void, { delay }?: {
3
+ delay?: number | undefined;
4
+ }): void;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var useEffectOnce_1 = __importDefault(require("../useEffectOnce"));
7
+ var useEventListener_1 = __importDefault(require("../useEventListener"));
8
+ var useTimeout_1 = __importDefault(require("../useTimeout"));
9
+ function useLongPress(ref, cb, _a) {
10
+ var _b = _a === void 0 ? {} : _a, _c = _b.delay, delay = _c === void 0 ? 250 : _c;
11
+ var _d = (0, useTimeout_1.default)(cb, delay), reset = _d.reset, clear = _d.clear;
12
+ (0, useEffectOnce_1.default)(clear);
13
+ (0, useEventListener_1.default)("mousedown", reset, ref.current);
14
+ (0, useEventListener_1.default)("touchstart", reset, ref.current);
15
+ (0, useEventListener_1.default)("mouseup", clear, ref.current);
16
+ (0, useEventListener_1.default)("mouseleave", clear, ref.current);
17
+ (0, useEventListener_1.default)("touchend", clear, ref.current);
18
+ }
19
+ exports.default = useLongPress;
@@ -0,0 +1 @@
1
+ export default function useMediaQuery(mediaQuery: string): boolean;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = require("react");
7
+ var useEventListener_1 = __importDefault(require("../useEventListener"));
8
+ function useMediaQuery(mediaQuery) {
9
+ var _a = (0, react_1.useState)(false), isMatch = _a[0], setIsMatch = _a[1];
10
+ var _b = (0, react_1.useState)(undefined), mediaQueryList = _b[0], setMediaQueryList = _b[1];
11
+ (0, react_1.useEffect)(function () {
12
+ var list = window.matchMedia(mediaQuery);
13
+ setMediaQueryList(list);
14
+ setIsMatch(list.matches);
15
+ }, [mediaQuery]);
16
+ (0, useEventListener_1.default)("change", function (event) {
17
+ var e = event;
18
+ setIsMatch(e.matches);
19
+ }, mediaQueryList);
20
+ return isMatch;
21
+ }
22
+ exports.default = useMediaQuery;
@@ -0,0 +1,2 @@
1
+ import { MutableRefObject } from "react";
2
+ export default function useOnScreen(ref: MutableRefObject<undefined>, rootMargin?: string): boolean;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useOnScreen(ref, rootMargin) {
5
+ if (rootMargin === void 0) { rootMargin = "0px"; }
6
+ var _a = (0, react_1.useState)(false), isVisible = _a[0], setIsVisible = _a[1];
7
+ (0, react_1.useEffect)(function () {
8
+ if (ref.current == null)
9
+ return;
10
+ var observer = new IntersectionObserver(function (_a) {
11
+ var entry = _a[0];
12
+ return setIsVisible(entry.isIntersecting);
13
+ }, { rootMargin: rootMargin });
14
+ observer.observe(ref.current);
15
+ return function () {
16
+ if (ref.current == null)
17
+ return;
18
+ observer.unobserve(ref.current);
19
+ };
20
+ }, [ref.current, rootMargin]);
21
+ return isVisible;
22
+ }
23
+ exports.default = useOnScreen;
@@ -0,0 +1 @@
1
+ export default function useOnlineStatus(): boolean;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = require("react");
7
+ var useEventListener_1 = __importDefault(require("../useEventListener"));
8
+ function useOnlineStatus() {
9
+ var _a = (0, react_1.useState)(navigator.onLine), online = _a[0], setOnline = _a[1];
10
+ (0, useEventListener_1.default)("online", function () { return setOnline(navigator.onLine); });
11
+ (0, useEventListener_1.default)("offline", function () { return setOnline(navigator.onLine); });
12
+ return online;
13
+ }
14
+ exports.default = useOnlineStatus;
@@ -0,0 +1,9 @@
1
+ interface PaginationResponse {
2
+ data: Record<string, unknown>[];
3
+ totalPages: number;
4
+ currentPage: number;
5
+ nextPage: () => void;
6
+ previousPage: () => void;
7
+ }
8
+ export default function usePagination(data: Record<string, unknown>[], pageSize: number): PaginationResponse;
9
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function usePagination(data, pageSize) {
5
+ var _a = (0, react_1.useState)(0), pageIndex = _a[0], setPageIndex = _a[1];
6
+ var totalPages = Math.ceil(data.length / pageSize);
7
+ var filteredData = data.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize);
8
+ var nextPage = function () {
9
+ setPageIndex(Math.min(pageIndex + 1, totalPages - 1));
10
+ };
11
+ var previousPage = function () {
12
+ setPageIndex(Math.max(pageIndex - 1, 0));
13
+ };
14
+ return {
15
+ data: filteredData,
16
+ currentPage: pageIndex + 1,
17
+ totalPages: totalPages,
18
+ nextPage: nextPage,
19
+ previousPage: previousPage,
20
+ };
21
+ }
22
+ exports.default = usePagination;
@@ -0,0 +1,2 @@
1
+ import { PreviousValue } from "./types";
2
+ export default function usePrevious(value: PreviousValue): PreviousValue | undefined;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function usePrevious(value) {
5
+ var currentRef = (0, react_1.useRef)(value);
6
+ var previousRef = (0, react_1.useRef)();
7
+ if (currentRef.current !== value) {
8
+ previousRef.current = currentRef.current;
9
+ currentRef.current = value;
10
+ }
11
+ return previousRef.current;
12
+ }
13
+ exports.default = usePrevious;
@@ -0,0 +1 @@
1
+ export default function useRenderCount(): number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useRenderCount() {
5
+ var count = (0, react_1.useRef)(1);
6
+ (0, react_1.useEffect)(function () {
7
+ count.current = count.current + 1;
8
+ });
9
+ return count.current;
10
+ }
11
+ exports.default = useRenderCount;
@@ -0,0 +1,2 @@
1
+ import { ScriptInterface } from "./types";
2
+ export default function useScript(url: string): ScriptInterface;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var useAsync_1 = __importDefault(require("../useAsync"));
7
+ function useScript(url) {
8
+ return (0, useAsync_1.default)(function () {
9
+ var script = document.createElement("script");
10
+ script.src = url;
11
+ script.async = true;
12
+ return new Promise(function (resolve, reject) {
13
+ script.addEventListener("load", resolve);
14
+ script.addEventListener("error", reject);
15
+ document.body.appendChild(script);
16
+ });
17
+ }, [url]);
18
+ }
19
+ exports.default = useScript;
@@ -0,0 +1,3 @@
1
+ import { MutableRefObject } from "react";
2
+ import { SizeObject } from "./types";
3
+ export default function useSize(ref: MutableRefObject<undefined>): SizeObject;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useSize(ref) {
5
+ var _a = (0, react_1.useState)({}), size = _a[0], setSize = _a[1];
6
+ (0, react_1.useEffect)(function () {
7
+ if (ref.current == null)
8
+ return;
9
+ var observer = new ResizeObserver(function (_a) {
10
+ var entry = _a[0];
11
+ return setSize(entry.contentRect);
12
+ });
13
+ observer.observe(ref.current);
14
+ return function () { return observer.disconnect(); };
15
+ }, []);
16
+ return size;
17
+ }
18
+ exports.default = useSize;
@@ -0,0 +1,4 @@
1
+ import { HistoryObject } from "./types";
2
+ export default function useStateWithHistory(defaultValue: number, { capacity }?: {
3
+ capacity?: number | undefined;
4
+ }): HistoryObject;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useStateWithHistory(defaultValue, _a) {
5
+ var _b = _a === void 0 ? {} : _a, _c = _b.capacity, capacity = _c === void 0 ? 10 : _c;
6
+ var _d = (0, react_1.useState)(defaultValue), value = _d[0], setValue = _d[1];
7
+ var historyRef = (0, react_1.useRef)([value]);
8
+ var pointerRef = (0, react_1.useRef)(0);
9
+ var set = (0, react_1.useCallback)(function (item) {
10
+ var resolvedValue = typeof item === "function" ? item(value) : item;
11
+ if (historyRef.current[pointerRef.current] !== resolvedValue) {
12
+ if (pointerRef.current < historyRef.current.length - 1) {
13
+ historyRef.current.splice(pointerRef.current + 1);
14
+ }
15
+ historyRef.current.push(resolvedValue);
16
+ while (historyRef.current.length > capacity) {
17
+ historyRef.current.shift();
18
+ }
19
+ pointerRef.current = historyRef.current.length - 1;
20
+ }
21
+ setValue(resolvedValue);
22
+ }, [capacity, value]);
23
+ var back = (0, react_1.useCallback)(function () {
24
+ if (pointerRef.current <= 0)
25
+ return;
26
+ pointerRef.current--;
27
+ setValue(historyRef.current[pointerRef.current]);
28
+ }, []);
29
+ var forward = (0, react_1.useCallback)(function () {
30
+ if (pointerRef.current >= historyRef.current.length - 1)
31
+ return;
32
+ pointerRef.current++;
33
+ setValue(historyRef.current[pointerRef.current]);
34
+ }, []);
35
+ var go = (0, react_1.useCallback)(function (index) {
36
+ if (index < 0 || index >= historyRef.current.length - 1)
37
+ return;
38
+ pointerRef.current = index;
39
+ setValue(historyRef.current[pointerRef.current]);
40
+ }, []);
41
+ return [
42
+ value,
43
+ set,
44
+ {
45
+ history: historyRef.current,
46
+ pointer: pointerRef.current,
47
+ back: back,
48
+ forward: forward,
49
+ go: go,
50
+ },
51
+ ];
52
+ }
53
+ exports.default = useStateWithHistory;
@@ -0,0 +1,2 @@
1
+ import { StateValidation, ValidationFunc, Value } from "./types";
2
+ export default function useStateWithValidation(validationFunc: ValidationFunc, initialValue: Value): StateValidation;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ function useStateWithValidation(validationFunc, initialValue) {
5
+ var _a = (0, react_1.useState)(initialValue), state = _a[0], setState = _a[1];
6
+ var _b = (0, react_1.useState)(function () { return validationFunc(state); }), isValid = _b[0], setIsValid = _b[1];
7
+ var onChange = (0, react_1.useCallback)(function (nextState) {
8
+ var value = typeof nextState === "function" ? nextState(state) : nextState;
9
+ setState(value);
10
+ setIsValid(validationFunc(value));
11
+ }, [validationFunc]);
12
+ return [state, onChange, isValid];
13
+ }
14
+ exports.default = useStateWithValidation;
@@ -0,0 +1,5 @@
1
+ import { Dispatch } from "react";
2
+ declare type StorageObject = [value: any, setValue: Dispatch<unknown>, remove: () => void];
3
+ export declare function useLocalStorage(key: string, defaultValue?: any): StorageObject;
4
+ export declare function useSessionStorage(key: string, defaultValue?: any): StorageObject;
5
+ export {};