@reactuses/core 1.0.6 → 1.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.
- package/{LICENSE → dist/LICENSE} +0 -0
- package/{README.md → dist/README.md} +0 -0
- package/{index.cjs → dist/index.cjs} +102 -55
- package/{index.d.ts → dist/index.d.ts} +33 -25
- package/{index.mjs → dist/index.mjs} +101 -56
- package/package.json +56 -12
package/{LICENSE → dist/LICENSE}
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -13,38 +13,6 @@ function usePrevious(state) {
|
|
|
13
13
|
return ref.current;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
var __async$1 = (__this, __arguments, generator) => {
|
|
17
|
-
return new Promise((resolve, reject) => {
|
|
18
|
-
var fulfilled = (value) => {
|
|
19
|
-
try {
|
|
20
|
-
step(generator.next(value));
|
|
21
|
-
} catch (e) {
|
|
22
|
-
reject(e);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
var rejected = (value) => {
|
|
26
|
-
try {
|
|
27
|
-
step(generator.throw(value));
|
|
28
|
-
} catch (e) {
|
|
29
|
-
reject(e);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
33
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
function useMarkdown(filepath) {
|
|
37
|
-
const [content, setContent] = react.useState("");
|
|
38
|
-
react.useEffect(() => {
|
|
39
|
-
const getContent = () => __async$1(this, null, function* () {
|
|
40
|
-
const data = yield (yield fetch(filepath)).text();
|
|
41
|
-
setContent(data);
|
|
42
|
-
});
|
|
43
|
-
getContent();
|
|
44
|
-
}, [filepath]);
|
|
45
|
-
return content;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
16
|
function useLatest(value) {
|
|
49
17
|
const ref = react.useRef(value);
|
|
50
18
|
react.useEffect(() => {
|
|
@@ -161,7 +129,7 @@ function useStorage(key, defaults, getStorage, options = {}) {
|
|
|
161
129
|
const getStoredValue = () => {
|
|
162
130
|
try {
|
|
163
131
|
const raw = storage == null ? void 0 : storage.getItem(key);
|
|
164
|
-
if (raw) {
|
|
132
|
+
if (raw !== void 0 && raw !== null) {
|
|
165
133
|
return serializer.read(raw);
|
|
166
134
|
} else {
|
|
167
135
|
storage == null ? void 0 : storage.setItem(key, serializer.write(data));
|
|
@@ -240,7 +208,7 @@ const getInitialState = (query, defaultState) => {
|
|
|
240
208
|
}
|
|
241
209
|
if (process.env.NODE_ENV !== "production") {
|
|
242
210
|
console.warn(
|
|
243
|
-
"`
|
|
211
|
+
"`useMediaQuery` When server side rendering, defaultState should be defined to prevent a hydration mismatches."
|
|
244
212
|
);
|
|
245
213
|
}
|
|
246
214
|
return false;
|
|
@@ -286,7 +254,7 @@ function useDarkMode(options = {}) {
|
|
|
286
254
|
storageKey = "reactuses-color-scheme",
|
|
287
255
|
storage = () => isBrowser ? localStorage : void 0
|
|
288
256
|
} = options;
|
|
289
|
-
const prefersDarkMode = usePreferredDark();
|
|
257
|
+
const prefersDarkMode = usePreferredDark(false);
|
|
290
258
|
const value = initialValue ? initialValue : prefersDarkMode ? "dark" : "light";
|
|
291
259
|
const [dark, setDark] = useStorage(storageKey, value, storage);
|
|
292
260
|
react.useEffect(() => {
|
|
@@ -506,6 +474,7 @@ function off(obj, ...args) {
|
|
|
506
474
|
);
|
|
507
475
|
}
|
|
508
476
|
}
|
|
477
|
+
const defaultWindow = isBrowser ? window : void 0;
|
|
509
478
|
|
|
510
479
|
function getTargetElement(target, defaultElement) {
|
|
511
480
|
if (!isBrowser) {
|
|
@@ -1551,15 +1520,15 @@ function usePageLeave() {
|
|
|
1551
1520
|
const from = event.relatedTarget || event.toElement;
|
|
1552
1521
|
setIsLeft(!from);
|
|
1553
1522
|
};
|
|
1554
|
-
useEventListener("mouseout", handler, window, { passive: true });
|
|
1555
|
-
useEventListener("mouseleave", handler, document, { passive: true });
|
|
1556
|
-
useEventListener("mouseenter", handler, document, { passive: true });
|
|
1523
|
+
useEventListener("mouseout", handler, () => window, { passive: true });
|
|
1524
|
+
useEventListener("mouseleave", handler, () => document, { passive: true });
|
|
1525
|
+
useEventListener("mouseenter", handler, () => document, { passive: true });
|
|
1557
1526
|
return isLeft;
|
|
1558
1527
|
}
|
|
1559
1528
|
|
|
1560
1529
|
function useDocumentVisibility() {
|
|
1561
1530
|
const [visible, setVisible] = react.useState(() => {
|
|
1562
|
-
if (
|
|
1531
|
+
if (typeof document === "undefined") {
|
|
1563
1532
|
return "visible";
|
|
1564
1533
|
} else {
|
|
1565
1534
|
return document.visibilityState;
|
|
@@ -1570,7 +1539,7 @@ function useDocumentVisibility() {
|
|
|
1570
1539
|
() => {
|
|
1571
1540
|
setVisible(document.visibilityState);
|
|
1572
1541
|
},
|
|
1573
|
-
document
|
|
1542
|
+
() => document
|
|
1574
1543
|
);
|
|
1575
1544
|
return visible;
|
|
1576
1545
|
}
|
|
@@ -1665,7 +1634,7 @@ function useFileDialog(options = {}) {
|
|
|
1665
1634
|
const [files, setFiles] = react.useState(null);
|
|
1666
1635
|
const inputRef = react.useRef();
|
|
1667
1636
|
const initFn = react.useCallback(() => {
|
|
1668
|
-
if (
|
|
1637
|
+
if (typeof document === "undefined") {
|
|
1669
1638
|
return void 0;
|
|
1670
1639
|
}
|
|
1671
1640
|
const input = document.createElement("input");
|
|
@@ -1787,7 +1756,7 @@ var __spreadValues = (a, b) => {
|
|
|
1787
1756
|
return a;
|
|
1788
1757
|
};
|
|
1789
1758
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
1790
|
-
var __async = (__this, __arguments, generator) => {
|
|
1759
|
+
var __async$1 = (__this, __arguments, generator) => {
|
|
1791
1760
|
return new Promise((resolve, reject) => {
|
|
1792
1761
|
var fulfilled = (value) => {
|
|
1793
1762
|
try {
|
|
@@ -1818,7 +1787,7 @@ function useInfiniteScroll(target, onLoadMore, options = {}) {
|
|
|
1818
1787
|
}));
|
|
1819
1788
|
const di = state[3][direction];
|
|
1820
1789
|
useUpdateEffect(() => {
|
|
1821
|
-
const fn = () => __async(this, null, function* () {
|
|
1790
|
+
const fn = () => __async$1(this, null, function* () {
|
|
1822
1791
|
var _a2, _b2;
|
|
1823
1792
|
const element = getTargetElement(target);
|
|
1824
1793
|
const previous = {
|
|
@@ -1883,8 +1852,8 @@ function useMousePressed(target, options = {}) {
|
|
|
1883
1852
|
setSourceType(null);
|
|
1884
1853
|
}, []);
|
|
1885
1854
|
useEventListener("mousedown", onPressed("mouse"), target, { passive: true });
|
|
1886
|
-
useEventListener("mouseleave", onReleased, window, { passive: true });
|
|
1887
|
-
useEventListener("mouseup", onReleased, window, { passive: true });
|
|
1855
|
+
useEventListener("mouseleave", onReleased, () => window, { passive: true });
|
|
1856
|
+
useEventListener("mouseup", onReleased, () => window, { passive: true });
|
|
1888
1857
|
useMount(() => {
|
|
1889
1858
|
const element = getTargetElement(target);
|
|
1890
1859
|
if (drag) {
|
|
@@ -2120,8 +2089,8 @@ function useVirtualList(list = [], options) {
|
|
|
2120
2089
|
}
|
|
2121
2090
|
|
|
2122
2091
|
function usePreferredColorScheme(defaultState) {
|
|
2123
|
-
const isLight = useMediaQuery("(prefers-color-scheme: light)");
|
|
2124
|
-
const isDark = useMediaQuery("(prefers-color-scheme: dark)");
|
|
2092
|
+
const isLight = useMediaQuery("(prefers-color-scheme: light)", false);
|
|
2093
|
+
const isDark = useMediaQuery("(prefers-color-scheme: dark)", false);
|
|
2125
2094
|
if (!isBrowser && defaultState) {
|
|
2126
2095
|
return defaultState;
|
|
2127
2096
|
}
|
|
@@ -2129,9 +2098,9 @@ function usePreferredColorScheme(defaultState) {
|
|
|
2129
2098
|
}
|
|
2130
2099
|
|
|
2131
2100
|
function usePreferredContrast(defaultState) {
|
|
2132
|
-
const isMore = useMediaQuery("(
|
|
2133
|
-
const isLess = useMediaQuery("(prefers-contrast: less)");
|
|
2134
|
-
const isCustom = useMediaQuery("(prefers-contrast: custom)");
|
|
2101
|
+
const isMore = useMediaQuery("(prefexrs-contrast: more)", false);
|
|
2102
|
+
const isLess = useMediaQuery("(prefers-contrast: less)", false);
|
|
2103
|
+
const isCustom = useMediaQuery("(prefers-contrast: custom)", false);
|
|
2135
2104
|
if (!isBrowser && defaultState) {
|
|
2136
2105
|
return defaultState;
|
|
2137
2106
|
}
|
|
@@ -2143,14 +2112,17 @@ function useActiveElement() {
|
|
|
2143
2112
|
const listener = react.useCallback(() => {
|
|
2144
2113
|
setActive(window == null ? void 0 : window.document.activeElement);
|
|
2145
2114
|
}, []);
|
|
2146
|
-
useEventListener("blur", listener, window, true);
|
|
2147
|
-
useEventListener("focus", listener, window, true);
|
|
2115
|
+
useEventListener("blur", listener, () => window, true);
|
|
2116
|
+
useEventListener("focus", listener, () => window, true);
|
|
2148
2117
|
return active;
|
|
2149
2118
|
}
|
|
2150
2119
|
|
|
2151
2120
|
function useDraggable(target, options = {}) {
|
|
2152
2121
|
var _a, _b;
|
|
2153
|
-
const draggingElement = getTargetElement(
|
|
2122
|
+
const draggingElement = getTargetElement(
|
|
2123
|
+
options.draggingElement,
|
|
2124
|
+
defaultWindow
|
|
2125
|
+
);
|
|
2154
2126
|
const draggingHandle = getTargetElement((_a = options.handle) != null ? _a : target);
|
|
2155
2127
|
const [position, setPositon] = react.useState(
|
|
2156
2128
|
(_b = options.initialValue) != null ? _b : { x: 0, y: 0 }
|
|
@@ -2312,7 +2284,7 @@ function useElementVisibility(target, options = {}) {
|
|
|
2312
2284
|
|
|
2313
2285
|
function useWindowsFocus() {
|
|
2314
2286
|
const [focused, setFocused] = react.useState(() => {
|
|
2315
|
-
if (!
|
|
2287
|
+
if (!isBrowser) {
|
|
2316
2288
|
return false;
|
|
2317
2289
|
}
|
|
2318
2290
|
return window.document.hasFocus();
|
|
@@ -2362,9 +2334,85 @@ function useWindowScroll() {
|
|
|
2362
2334
|
return state;
|
|
2363
2335
|
}
|
|
2364
2336
|
|
|
2337
|
+
var __async = (__this, __arguments, generator) => {
|
|
2338
|
+
return new Promise((resolve, reject) => {
|
|
2339
|
+
var fulfilled = (value) => {
|
|
2340
|
+
try {
|
|
2341
|
+
step(generator.next(value));
|
|
2342
|
+
} catch (e) {
|
|
2343
|
+
reject(e);
|
|
2344
|
+
}
|
|
2345
|
+
};
|
|
2346
|
+
var rejected = (value) => {
|
|
2347
|
+
try {
|
|
2348
|
+
step(generator.throw(value));
|
|
2349
|
+
} catch (e) {
|
|
2350
|
+
reject(e);
|
|
2351
|
+
}
|
|
2352
|
+
};
|
|
2353
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
2354
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
2355
|
+
});
|
|
2356
|
+
};
|
|
2357
|
+
function useClipBorad() {
|
|
2358
|
+
const [text, setText] = react.useState("");
|
|
2359
|
+
const updateText = react.useCallback(() => {
|
|
2360
|
+
window.navigator.clipboard.readText().then((value) => {
|
|
2361
|
+
setText(value);
|
|
2362
|
+
});
|
|
2363
|
+
}, []);
|
|
2364
|
+
useEventListener("copy", updateText);
|
|
2365
|
+
useEventListener("cut", updateText);
|
|
2366
|
+
const copy = react.useCallback((txt) => __async(this, null, function* () {
|
|
2367
|
+
setText(txt);
|
|
2368
|
+
yield window.navigator.clipboard.writeText(txt);
|
|
2369
|
+
}), []);
|
|
2370
|
+
return [text, copy];
|
|
2371
|
+
}
|
|
2372
|
+
|
|
2373
|
+
function useClickOutSide(target, handler) {
|
|
2374
|
+
const savedHandler = useLatest(handler);
|
|
2375
|
+
const listener = (event) => {
|
|
2376
|
+
const element = getTargetElement(target);
|
|
2377
|
+
if (!element) {
|
|
2378
|
+
return;
|
|
2379
|
+
}
|
|
2380
|
+
const elements = event.composedPath();
|
|
2381
|
+
if (element === event.target || elements.includes(element)) {
|
|
2382
|
+
return;
|
|
2383
|
+
}
|
|
2384
|
+
savedHandler.current(event);
|
|
2385
|
+
};
|
|
2386
|
+
useEventListener("mousedown", listener, () => window, {
|
|
2387
|
+
passive: true
|
|
2388
|
+
});
|
|
2389
|
+
useEventListener("touchstart", listener, () => window, {
|
|
2390
|
+
passive: true
|
|
2391
|
+
});
|
|
2392
|
+
}
|
|
2393
|
+
|
|
2394
|
+
function useCycleList(list, i = 0) {
|
|
2395
|
+
const [index, setIndex] = react.useState(i);
|
|
2396
|
+
const set = (i2) => {
|
|
2397
|
+
const length = list.length;
|
|
2398
|
+
const nextIndex = ((index + i2) % length + length) % length;
|
|
2399
|
+
setIndex(nextIndex);
|
|
2400
|
+
};
|
|
2401
|
+
const next = (i2 = 1) => {
|
|
2402
|
+
set(i2);
|
|
2403
|
+
};
|
|
2404
|
+
const prev = (i2 = 1) => {
|
|
2405
|
+
set(-i2);
|
|
2406
|
+
};
|
|
2407
|
+
return [list[index], next, prev];
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2365
2410
|
exports.useActiveElement = useActiveElement;
|
|
2411
|
+
exports.useClickOutside = useClickOutSide;
|
|
2412
|
+
exports.useClipboard = useClipBorad;
|
|
2366
2413
|
exports.useCounter = useCounter;
|
|
2367
2414
|
exports.useCustomCompareEffect = useCustomCompareEffect;
|
|
2415
|
+
exports.useCycleList = useCycleList;
|
|
2368
2416
|
exports.useDarkMode = useDarkMode;
|
|
2369
2417
|
exports.useDebounce = useDebounce;
|
|
2370
2418
|
exports.useDebounceFn = useDebounceFn;
|
|
@@ -2393,7 +2441,6 @@ exports.useKeyModifier = useKeyModifier;
|
|
|
2393
2441
|
exports.useLatest = useLatest;
|
|
2394
2442
|
exports.useLocalStorage = useLocalStorage;
|
|
2395
2443
|
exports.useLongPress = useLongPress;
|
|
2396
|
-
exports.useMarkdown = useMarkdown;
|
|
2397
2444
|
exports.useMediaDevices = useMediaDevices$1;
|
|
2398
2445
|
exports.useMediaQuery = useMediaQuery;
|
|
2399
2446
|
exports.useMount = useMount;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { useEffect, useLayoutEffect, Dispatch, SetStateAction,
|
|
2
|
+
import { MutableRefObject, useEffect, useLayoutEffect, Dispatch, SetStateAction, DependencyList, EffectCallback, RefObject, CSSProperties } from 'react';
|
|
3
3
|
import * as lodash from 'lodash';
|
|
4
4
|
|
|
5
5
|
declare function usePrevious<T>(state: T): T | undefined;
|
|
6
6
|
|
|
7
|
-
declare function
|
|
8
|
-
|
|
9
|
-
declare function useLatest<T>(value: T): React.MutableRefObject<T>;
|
|
7
|
+
declare function useLatest<T>(value: T): MutableRefObject<T>;
|
|
10
8
|
|
|
11
9
|
declare function useFirstMountState(): boolean;
|
|
12
10
|
|
|
@@ -43,9 +41,9 @@ declare function useSessionStorage(key: string, defaults: boolean, options?: Use
|
|
|
43
41
|
declare function useSessionStorage<T>(key: string, defaults: T, options?: UseStorageOptions<T>): readonly [T | null, Dispatch<SetStateAction<T | null>>];
|
|
44
42
|
declare function useSessionStorage<T = unknown>(key: string, defaults: null, options?: UseStorageOptions<T>): readonly [T | null, Dispatch<SetStateAction<T | null>>];
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
type Fn = (this: any, ...args: any[]) => any;
|
|
45
|
+
type Stoppable = [boolean, Fn, Fn];
|
|
46
|
+
type PointerType = "mouse" | "touch" | "pen";
|
|
49
47
|
interface Position {
|
|
50
48
|
x: number;
|
|
51
49
|
y: number;
|
|
@@ -153,11 +151,11 @@ declare function useTimeout(ms?: number, options?: UseTimeoutFnOptions): Stoppab
|
|
|
153
151
|
|
|
154
152
|
declare function useMountedState(): () => boolean;
|
|
155
153
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
type TargetValue<T> = T | undefined | null;
|
|
155
|
+
type TargetType = HTMLElement | Element | Window | Document | EventTarget;
|
|
156
|
+
type BasicTarget<T extends TargetType = Element> = (() => TargetValue<T>) | TargetValue<T> | MutableRefObject<TargetValue<T>>;
|
|
159
157
|
|
|
160
|
-
|
|
158
|
+
type Target = BasicTarget<HTMLElement | Element | Window | Document | EventTarget>;
|
|
161
159
|
declare function useEventListener<K extends keyof WindowEventMap>(eventName: K, handler: (event: WindowEventMap[K]) => void, element?: Window, options?: boolean | AddEventListenerOptions): void;
|
|
162
160
|
declare function useEventListener<K extends keyof DocumentEventMap>(eventName: K, handler: (event: DocumentEventMap[K]) => void, element: Document, options?: boolean | AddEventListenerOptions): void;
|
|
163
161
|
declare function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = HTMLDivElement>(eventName: K, handler: (event: HTMLElementEventMap[K]) => void, element: T, options?: boolean | AddEventListenerOptions): void;
|
|
@@ -167,7 +165,7 @@ declare function useEventListener(eventName: string, handler: (...p: any) => voi
|
|
|
167
165
|
|
|
168
166
|
declare function useCounter(initialValue?: number | (() => number), max?: number | null, min?: number | null): readonly [number, (newState: number | ((prev: number) => number) | (() => number)) => void, (delta?: number) => void, (delta?: number) => void, () => void];
|
|
169
167
|
|
|
170
|
-
|
|
168
|
+
type RafLoopReturns = readonly [() => void, () => void, () => boolean];
|
|
171
169
|
declare function useRafFn(callback: FrameRequestCallback, initiallyActive?: boolean): RafLoopReturns;
|
|
172
170
|
|
|
173
171
|
interface IDisposable {
|
|
@@ -182,7 +180,7 @@ declare function useFavicon(href: string, baseUrl?: string, rel?: string): void;
|
|
|
182
180
|
|
|
183
181
|
declare function useMutationObserver(callback: MutationCallback, target: BasicTarget, options?: MutationObserverInit): () => void;
|
|
184
182
|
|
|
185
|
-
|
|
183
|
+
type DepsEqualFnType<TDeps extends DependencyList> = (prevDeps: TDeps, nextDeps: TDeps) => boolean;
|
|
186
184
|
declare function useCustomCompareEffect<TDeps extends DependencyList>(effect: EffectCallback, deps: TDeps, depsEqual: DepsEqualFnType<TDeps>): void;
|
|
187
185
|
|
|
188
186
|
declare function useDeepCompareEffect(effect: EffectCallback, deps: DependencyList): void;
|
|
@@ -224,12 +222,12 @@ interface UseScriptTagOptions {
|
|
|
224
222
|
*/
|
|
225
223
|
attrs?: Record<string, string>;
|
|
226
224
|
}
|
|
227
|
-
|
|
225
|
+
type Status = "idle" | "loading" | "ready" | "error";
|
|
228
226
|
declare function useScriptTag(src: string, onLoaded?: (el: HTMLScriptElement) => void, options?: UseScriptTagOptions): readonly [HTMLScriptElement | null, Status, (waitForScriptLoad?: boolean) => Promise<HTMLScriptElement | boolean>, () => void];
|
|
229
227
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
228
|
+
type IState = PermissionState | "";
|
|
229
|
+
type DescriptorNamePolyfill = "accelerometer" | "accessibility-events" | "ambient-light-sensor" | "background-sync" | "camera" | "clipboard-read" | "clipboard-write" | "gyroscope" | "magnetometer" | "microphone" | "notifications" | "payment-handler" | "persistent-storage" | "push" | "speaker";
|
|
230
|
+
type GeneralPermissionDescriptor = PermissionDescriptor | {
|
|
233
231
|
name: DescriptorNamePolyfill;
|
|
234
232
|
};
|
|
235
233
|
declare function usePermission(permissionDesc: GeneralPermissionDescriptor | GeneralPermissionDescriptor["name"]): IState;
|
|
@@ -252,7 +250,7 @@ declare function useIdle(ms?: number, initialState?: boolean, events?: (keyof Wi
|
|
|
252
250
|
|
|
253
251
|
declare const _default$1: () => {};
|
|
254
252
|
|
|
255
|
-
|
|
253
|
+
type UseTextDirectionValue = "ltr" | "rtl" | "auto";
|
|
256
254
|
interface UseTextDirectionOptions {
|
|
257
255
|
/**
|
|
258
256
|
* CSS Selector for the target element applying to
|
|
@@ -495,7 +493,7 @@ interface UseInfiniteScrollOptions extends UseScrollOptions {
|
|
|
495
493
|
}
|
|
496
494
|
declare function useInfiniteScroll(target: BasicTarget<HTMLElement | SVGElement | Window | Document>, onLoadMore: (state: ReturnType<typeof useScroll>) => void | Promise<void>, options?: UseInfiniteScrollOptions): void;
|
|
497
495
|
|
|
498
|
-
|
|
496
|
+
type KeyModifier = "Alt" | "AltGraph" | "CapsLock" | "Control" | "Fn" | "FnLock" | "Meta" | "NumLock" | "ScrollLock" | "Shift" | "Symbol" | "SymbolLock";
|
|
499
497
|
interface UseModifierOptions {
|
|
500
498
|
/**
|
|
501
499
|
* Event names that will prompt update to modifier states
|
|
@@ -512,8 +510,8 @@ interface UseModifierOptions {
|
|
|
512
510
|
}
|
|
513
511
|
declare function useKeyModifier(modifier: KeyModifier, options?: UseModifierOptions): boolean;
|
|
514
512
|
|
|
515
|
-
|
|
516
|
-
|
|
513
|
+
type IHookStateInitialSetter<S> = () => S;
|
|
514
|
+
type IHookStateInitAction<S> = S | IHookStateInitialSetter<S>;
|
|
517
515
|
|
|
518
516
|
interface MousePressedOptions {
|
|
519
517
|
/**
|
|
@@ -535,7 +533,7 @@ interface MousePressedOptions {
|
|
|
535
533
|
*/
|
|
536
534
|
initialValue?: IHookStateInitAction<boolean>;
|
|
537
535
|
}
|
|
538
|
-
|
|
536
|
+
type MouseSourceType = "mouse" | "touch" | null;
|
|
539
537
|
declare function useMousePressed(target?: BasicTarget, options?: MousePressedOptions): readonly [boolean, MouseSourceType];
|
|
540
538
|
|
|
541
539
|
declare function useScrollLock(target: BasicTarget<HTMLElement | SVGElement | Window | Document>, initialState?: boolean): readonly [boolean, (flag: boolean) => void];
|
|
@@ -582,10 +580,10 @@ interface UseVirtualListReturn<T> {
|
|
|
582
580
|
}
|
|
583
581
|
declare function useVirtualList<T = any>(list: T[] | undefined, options: UseVirtualListOptions): UseVirtualListReturn<T>;
|
|
584
582
|
|
|
585
|
-
|
|
583
|
+
type ColorScheme = "dark" | "light" | "no-preference";
|
|
586
584
|
declare function usePreferredColorScheme(defaultState?: ColorScheme): ColorScheme;
|
|
587
585
|
|
|
588
|
-
|
|
586
|
+
type Contrast = "more" | "less" | "custom" | "no-preference";
|
|
589
587
|
declare function usePreferredContrast(defaultState?: Contrast): Contrast;
|
|
590
588
|
|
|
591
589
|
declare function useActiveElement<T extends Element>(): T | null;
|
|
@@ -702,4 +700,14 @@ interface State {
|
|
|
702
700
|
}
|
|
703
701
|
declare function useWindowScroll(): State;
|
|
704
702
|
|
|
705
|
-
|
|
703
|
+
declare function useClipBorad(): readonly [
|
|
704
|
+
string,
|
|
705
|
+
(txt: string) => Promise<void>
|
|
706
|
+
];
|
|
707
|
+
|
|
708
|
+
type EventType = MouseEvent | TouchEvent;
|
|
709
|
+
declare function useClickOutSide(target: BasicTarget, handler: (evt: EventType) => void): void;
|
|
710
|
+
|
|
711
|
+
declare function useCycleList<T>(list: T[], i?: number): readonly [T, (i?: number) => void, (i?: number) => void];
|
|
712
|
+
|
|
713
|
+
export { useActiveElement, useClickOutSide as useClickOutside, useClipBorad as useClipboard, useCounter, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useFavicon, useFileDialog, useFirstMountState, _default as useFps, useFullscreen, useGeolocation, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, _default$1 as useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useResizeObserver, useScriptTag, useScroll, useScrollLock, useSessionStorage, useTextDirection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, _default$3 as useUpdateEffect, _default$2 as useUpdateLayoutEffect, useVirtualList, useWindowScroll, useWindowSize, useWindowsFocus };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useRef, useEffect,
|
|
1
|
+
import { useRef, useEffect, useLayoutEffect, useCallback, useState, useReducer, useMemo } from 'react';
|
|
2
2
|
import { throttle, debounce, isEqual } from 'lodash';
|
|
3
3
|
|
|
4
4
|
function usePrevious(state) {
|
|
@@ -9,38 +9,6 @@ function usePrevious(state) {
|
|
|
9
9
|
return ref.current;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
var __async$1 = (__this, __arguments, generator) => {
|
|
13
|
-
return new Promise((resolve, reject) => {
|
|
14
|
-
var fulfilled = (value) => {
|
|
15
|
-
try {
|
|
16
|
-
step(generator.next(value));
|
|
17
|
-
} catch (e) {
|
|
18
|
-
reject(e);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
var rejected = (value) => {
|
|
22
|
-
try {
|
|
23
|
-
step(generator.throw(value));
|
|
24
|
-
} catch (e) {
|
|
25
|
-
reject(e);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
29
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
function useMarkdown(filepath) {
|
|
33
|
-
const [content, setContent] = useState("");
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
const getContent = () => __async$1(this, null, function* () {
|
|
36
|
-
const data = yield (yield fetch(filepath)).text();
|
|
37
|
-
setContent(data);
|
|
38
|
-
});
|
|
39
|
-
getContent();
|
|
40
|
-
}, [filepath]);
|
|
41
|
-
return content;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
12
|
function useLatest(value) {
|
|
45
13
|
const ref = useRef(value);
|
|
46
14
|
useEffect(() => {
|
|
@@ -157,7 +125,7 @@ function useStorage(key, defaults, getStorage, options = {}) {
|
|
|
157
125
|
const getStoredValue = () => {
|
|
158
126
|
try {
|
|
159
127
|
const raw = storage == null ? void 0 : storage.getItem(key);
|
|
160
|
-
if (raw) {
|
|
128
|
+
if (raw !== void 0 && raw !== null) {
|
|
161
129
|
return serializer.read(raw);
|
|
162
130
|
} else {
|
|
163
131
|
storage == null ? void 0 : storage.setItem(key, serializer.write(data));
|
|
@@ -236,7 +204,7 @@ const getInitialState = (query, defaultState) => {
|
|
|
236
204
|
}
|
|
237
205
|
if (process.env.NODE_ENV !== "production") {
|
|
238
206
|
console.warn(
|
|
239
|
-
"`
|
|
207
|
+
"`useMediaQuery` When server side rendering, defaultState should be defined to prevent a hydration mismatches."
|
|
240
208
|
);
|
|
241
209
|
}
|
|
242
210
|
return false;
|
|
@@ -282,7 +250,7 @@ function useDarkMode(options = {}) {
|
|
|
282
250
|
storageKey = "reactuses-color-scheme",
|
|
283
251
|
storage = () => isBrowser ? localStorage : void 0
|
|
284
252
|
} = options;
|
|
285
|
-
const prefersDarkMode = usePreferredDark();
|
|
253
|
+
const prefersDarkMode = usePreferredDark(false);
|
|
286
254
|
const value = initialValue ? initialValue : prefersDarkMode ? "dark" : "light";
|
|
287
255
|
const [dark, setDark] = useStorage(storageKey, value, storage);
|
|
288
256
|
useEffect(() => {
|
|
@@ -502,6 +470,7 @@ function off(obj, ...args) {
|
|
|
502
470
|
);
|
|
503
471
|
}
|
|
504
472
|
}
|
|
473
|
+
const defaultWindow = isBrowser ? window : void 0;
|
|
505
474
|
|
|
506
475
|
function getTargetElement(target, defaultElement) {
|
|
507
476
|
if (!isBrowser) {
|
|
@@ -1547,15 +1516,15 @@ function usePageLeave() {
|
|
|
1547
1516
|
const from = event.relatedTarget || event.toElement;
|
|
1548
1517
|
setIsLeft(!from);
|
|
1549
1518
|
};
|
|
1550
|
-
useEventListener("mouseout", handler, window, { passive: true });
|
|
1551
|
-
useEventListener("mouseleave", handler, document, { passive: true });
|
|
1552
|
-
useEventListener("mouseenter", handler, document, { passive: true });
|
|
1519
|
+
useEventListener("mouseout", handler, () => window, { passive: true });
|
|
1520
|
+
useEventListener("mouseleave", handler, () => document, { passive: true });
|
|
1521
|
+
useEventListener("mouseenter", handler, () => document, { passive: true });
|
|
1553
1522
|
return isLeft;
|
|
1554
1523
|
}
|
|
1555
1524
|
|
|
1556
1525
|
function useDocumentVisibility() {
|
|
1557
1526
|
const [visible, setVisible] = useState(() => {
|
|
1558
|
-
if (
|
|
1527
|
+
if (typeof document === "undefined") {
|
|
1559
1528
|
return "visible";
|
|
1560
1529
|
} else {
|
|
1561
1530
|
return document.visibilityState;
|
|
@@ -1566,7 +1535,7 @@ function useDocumentVisibility() {
|
|
|
1566
1535
|
() => {
|
|
1567
1536
|
setVisible(document.visibilityState);
|
|
1568
1537
|
},
|
|
1569
|
-
document
|
|
1538
|
+
() => document
|
|
1570
1539
|
);
|
|
1571
1540
|
return visible;
|
|
1572
1541
|
}
|
|
@@ -1661,7 +1630,7 @@ function useFileDialog(options = {}) {
|
|
|
1661
1630
|
const [files, setFiles] = useState(null);
|
|
1662
1631
|
const inputRef = useRef();
|
|
1663
1632
|
const initFn = useCallback(() => {
|
|
1664
|
-
if (
|
|
1633
|
+
if (typeof document === "undefined") {
|
|
1665
1634
|
return void 0;
|
|
1666
1635
|
}
|
|
1667
1636
|
const input = document.createElement("input");
|
|
@@ -1783,7 +1752,7 @@ var __spreadValues = (a, b) => {
|
|
|
1783
1752
|
return a;
|
|
1784
1753
|
};
|
|
1785
1754
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
1786
|
-
var __async = (__this, __arguments, generator) => {
|
|
1755
|
+
var __async$1 = (__this, __arguments, generator) => {
|
|
1787
1756
|
return new Promise((resolve, reject) => {
|
|
1788
1757
|
var fulfilled = (value) => {
|
|
1789
1758
|
try {
|
|
@@ -1814,7 +1783,7 @@ function useInfiniteScroll(target, onLoadMore, options = {}) {
|
|
|
1814
1783
|
}));
|
|
1815
1784
|
const di = state[3][direction];
|
|
1816
1785
|
useUpdateEffect(() => {
|
|
1817
|
-
const fn = () => __async(this, null, function* () {
|
|
1786
|
+
const fn = () => __async$1(this, null, function* () {
|
|
1818
1787
|
var _a2, _b2;
|
|
1819
1788
|
const element = getTargetElement(target);
|
|
1820
1789
|
const previous = {
|
|
@@ -1879,8 +1848,8 @@ function useMousePressed(target, options = {}) {
|
|
|
1879
1848
|
setSourceType(null);
|
|
1880
1849
|
}, []);
|
|
1881
1850
|
useEventListener("mousedown", onPressed("mouse"), target, { passive: true });
|
|
1882
|
-
useEventListener("mouseleave", onReleased, window, { passive: true });
|
|
1883
|
-
useEventListener("mouseup", onReleased, window, { passive: true });
|
|
1851
|
+
useEventListener("mouseleave", onReleased, () => window, { passive: true });
|
|
1852
|
+
useEventListener("mouseup", onReleased, () => window, { passive: true });
|
|
1884
1853
|
useMount(() => {
|
|
1885
1854
|
const element = getTargetElement(target);
|
|
1886
1855
|
if (drag) {
|
|
@@ -2116,8 +2085,8 @@ function useVirtualList(list = [], options) {
|
|
|
2116
2085
|
}
|
|
2117
2086
|
|
|
2118
2087
|
function usePreferredColorScheme(defaultState) {
|
|
2119
|
-
const isLight = useMediaQuery("(prefers-color-scheme: light)");
|
|
2120
|
-
const isDark = useMediaQuery("(prefers-color-scheme: dark)");
|
|
2088
|
+
const isLight = useMediaQuery("(prefers-color-scheme: light)", false);
|
|
2089
|
+
const isDark = useMediaQuery("(prefers-color-scheme: dark)", false);
|
|
2121
2090
|
if (!isBrowser && defaultState) {
|
|
2122
2091
|
return defaultState;
|
|
2123
2092
|
}
|
|
@@ -2125,9 +2094,9 @@ function usePreferredColorScheme(defaultState) {
|
|
|
2125
2094
|
}
|
|
2126
2095
|
|
|
2127
2096
|
function usePreferredContrast(defaultState) {
|
|
2128
|
-
const isMore = useMediaQuery("(
|
|
2129
|
-
const isLess = useMediaQuery("(prefers-contrast: less)");
|
|
2130
|
-
const isCustom = useMediaQuery("(prefers-contrast: custom)");
|
|
2097
|
+
const isMore = useMediaQuery("(prefexrs-contrast: more)", false);
|
|
2098
|
+
const isLess = useMediaQuery("(prefers-contrast: less)", false);
|
|
2099
|
+
const isCustom = useMediaQuery("(prefers-contrast: custom)", false);
|
|
2131
2100
|
if (!isBrowser && defaultState) {
|
|
2132
2101
|
return defaultState;
|
|
2133
2102
|
}
|
|
@@ -2139,14 +2108,17 @@ function useActiveElement() {
|
|
|
2139
2108
|
const listener = useCallback(() => {
|
|
2140
2109
|
setActive(window == null ? void 0 : window.document.activeElement);
|
|
2141
2110
|
}, []);
|
|
2142
|
-
useEventListener("blur", listener, window, true);
|
|
2143
|
-
useEventListener("focus", listener, window, true);
|
|
2111
|
+
useEventListener("blur", listener, () => window, true);
|
|
2112
|
+
useEventListener("focus", listener, () => window, true);
|
|
2144
2113
|
return active;
|
|
2145
2114
|
}
|
|
2146
2115
|
|
|
2147
2116
|
function useDraggable(target, options = {}) {
|
|
2148
2117
|
var _a, _b;
|
|
2149
|
-
const draggingElement = getTargetElement(
|
|
2118
|
+
const draggingElement = getTargetElement(
|
|
2119
|
+
options.draggingElement,
|
|
2120
|
+
defaultWindow
|
|
2121
|
+
);
|
|
2150
2122
|
const draggingHandle = getTargetElement((_a = options.handle) != null ? _a : target);
|
|
2151
2123
|
const [position, setPositon] = useState(
|
|
2152
2124
|
(_b = options.initialValue) != null ? _b : { x: 0, y: 0 }
|
|
@@ -2308,7 +2280,7 @@ function useElementVisibility(target, options = {}) {
|
|
|
2308
2280
|
|
|
2309
2281
|
function useWindowsFocus() {
|
|
2310
2282
|
const [focused, setFocused] = useState(() => {
|
|
2311
|
-
if (!
|
|
2283
|
+
if (!isBrowser) {
|
|
2312
2284
|
return false;
|
|
2313
2285
|
}
|
|
2314
2286
|
return window.document.hasFocus();
|
|
@@ -2358,4 +2330,77 @@ function useWindowScroll() {
|
|
|
2358
2330
|
return state;
|
|
2359
2331
|
}
|
|
2360
2332
|
|
|
2361
|
-
|
|
2333
|
+
var __async = (__this, __arguments, generator) => {
|
|
2334
|
+
return new Promise((resolve, reject) => {
|
|
2335
|
+
var fulfilled = (value) => {
|
|
2336
|
+
try {
|
|
2337
|
+
step(generator.next(value));
|
|
2338
|
+
} catch (e) {
|
|
2339
|
+
reject(e);
|
|
2340
|
+
}
|
|
2341
|
+
};
|
|
2342
|
+
var rejected = (value) => {
|
|
2343
|
+
try {
|
|
2344
|
+
step(generator.throw(value));
|
|
2345
|
+
} catch (e) {
|
|
2346
|
+
reject(e);
|
|
2347
|
+
}
|
|
2348
|
+
};
|
|
2349
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
2350
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
2351
|
+
});
|
|
2352
|
+
};
|
|
2353
|
+
function useClipBorad() {
|
|
2354
|
+
const [text, setText] = useState("");
|
|
2355
|
+
const updateText = useCallback(() => {
|
|
2356
|
+
window.navigator.clipboard.readText().then((value) => {
|
|
2357
|
+
setText(value);
|
|
2358
|
+
});
|
|
2359
|
+
}, []);
|
|
2360
|
+
useEventListener("copy", updateText);
|
|
2361
|
+
useEventListener("cut", updateText);
|
|
2362
|
+
const copy = useCallback((txt) => __async(this, null, function* () {
|
|
2363
|
+
setText(txt);
|
|
2364
|
+
yield window.navigator.clipboard.writeText(txt);
|
|
2365
|
+
}), []);
|
|
2366
|
+
return [text, copy];
|
|
2367
|
+
}
|
|
2368
|
+
|
|
2369
|
+
function useClickOutSide(target, handler) {
|
|
2370
|
+
const savedHandler = useLatest(handler);
|
|
2371
|
+
const listener = (event) => {
|
|
2372
|
+
const element = getTargetElement(target);
|
|
2373
|
+
if (!element) {
|
|
2374
|
+
return;
|
|
2375
|
+
}
|
|
2376
|
+
const elements = event.composedPath();
|
|
2377
|
+
if (element === event.target || elements.includes(element)) {
|
|
2378
|
+
return;
|
|
2379
|
+
}
|
|
2380
|
+
savedHandler.current(event);
|
|
2381
|
+
};
|
|
2382
|
+
useEventListener("mousedown", listener, () => window, {
|
|
2383
|
+
passive: true
|
|
2384
|
+
});
|
|
2385
|
+
useEventListener("touchstart", listener, () => window, {
|
|
2386
|
+
passive: true
|
|
2387
|
+
});
|
|
2388
|
+
}
|
|
2389
|
+
|
|
2390
|
+
function useCycleList(list, i = 0) {
|
|
2391
|
+
const [index, setIndex] = useState(i);
|
|
2392
|
+
const set = (i2) => {
|
|
2393
|
+
const length = list.length;
|
|
2394
|
+
const nextIndex = ((index + i2) % length + length) % length;
|
|
2395
|
+
setIndex(nextIndex);
|
|
2396
|
+
};
|
|
2397
|
+
const next = (i2 = 1) => {
|
|
2398
|
+
set(i2);
|
|
2399
|
+
};
|
|
2400
|
+
const prev = (i2 = 1) => {
|
|
2401
|
+
set(-i2);
|
|
2402
|
+
};
|
|
2403
|
+
return [list[index], next, prev];
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2406
|
+
export { useActiveElement, useClickOutSide as useClickOutside, useClipBorad as useClipboard, useCounter, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useFavicon, useFileDialog, useFirstMountState, useFps$1 as useFps, useFullscreen, useGeolocation, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, useMediaDevices$1 as useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useResizeObserver, useScriptTag, useScroll, useScrollLock, useSessionStorage, useTextDirection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, useUpdateEffect, useUpdateLayoutEffect, useVirtualList, useWindowScroll, useWindowSize, useWindowsFocus };
|
package/package.json
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reactuses/core",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"main": "./index.cjs",
|
|
5
|
-
"module": "./index.mjs",
|
|
6
|
-
"types": "./index.d.ts",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"main": "./dist/index.cjs",
|
|
5
|
+
"module": "./dist/index.mjs",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"package.json",
|
|
10
|
+
"LICENSE",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
7
13
|
"sideEffects": false,
|
|
8
14
|
"license": "Unlicense",
|
|
9
15
|
"homepage": "https://www.reactuse.com/",
|
|
@@ -15,21 +21,59 @@
|
|
|
15
21
|
"bugs": {
|
|
16
22
|
"url": "https://github.com/childrentime/reactuse/issues"
|
|
17
23
|
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"lint": "eslint \"{hooks,tests}/**/*.{ts,tsx}\"",
|
|
26
|
+
"build": "esno scripts/build.ts",
|
|
27
|
+
"build:rollup": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" rollup -c",
|
|
28
|
+
"publish:ci": "esno scripts/publish.ts",
|
|
29
|
+
"release:prepare": "bump",
|
|
30
|
+
"release": "esno scripts/release.ts",
|
|
31
|
+
"test": "jest",
|
|
32
|
+
"test:coverage": "jest --coverage"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@testing-library/react": "^13.4.0",
|
|
36
|
+
"lodash": "^4.17.21",
|
|
37
|
+
"screenfull": "^5.0.0"
|
|
38
|
+
},
|
|
18
39
|
"devDependencies": {
|
|
40
|
+
"@babel/cli": "^7.19.3",
|
|
41
|
+
"@babel/core": "^7.20.2",
|
|
42
|
+
"@babel/preset-env": "^7.20.2",
|
|
43
|
+
"@babel/preset-react": "^7.18.6",
|
|
44
|
+
"@babel/preset-typescript": "^7.18.6",
|
|
45
|
+
"@jsdevtools/version-bump-prompt": "^6.1.0",
|
|
46
|
+
"@rollup/plugin-commonjs": "^22.0.2",
|
|
47
|
+
"@rollup/plugin-json": "^4.1.0",
|
|
48
|
+
"@rollup/plugin-node-resolve": "^14.1.0",
|
|
49
|
+
"@rollup/plugin-replace": "^4.0.0",
|
|
50
|
+
"@types/fs-extra": "^9.0.13",
|
|
51
|
+
"@types/jest": "^27.5.2",
|
|
19
52
|
"@types/lodash": "^4.14.184",
|
|
53
|
+
"@types/node": "^18.11.9",
|
|
54
|
+
"@types/react": "^18.0.25",
|
|
20
55
|
"@typescript-eslint/eslint-plugin": "^5.36.1",
|
|
21
56
|
"@typescript-eslint/parser": "^5.36.1",
|
|
57
|
+
"babel-jest": "^29.0.2",
|
|
58
|
+
"consola": "^2.15.3",
|
|
59
|
+
"cross-env": "^7.0.3",
|
|
60
|
+
"esbuild-register": "^3.4.1",
|
|
22
61
|
"eslint": "^8.23.0",
|
|
23
62
|
"eslint-config-prettier": "^8.5.0",
|
|
24
63
|
"eslint-plugin-react": "^7.31.5",
|
|
25
|
-
"eslint-plugin-react-hooks": "^4.6.0"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
"
|
|
64
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
65
|
+
"esno": "^0.16.3",
|
|
66
|
+
"fast-glob": "^3.2.12",
|
|
67
|
+
"fs-extra": "^10.1.0",
|
|
68
|
+
"jest": "^29.0.2",
|
|
69
|
+
"jest-environment-jsdom": "^29.0.2",
|
|
70
|
+
"react": "^18.2.0",
|
|
71
|
+
"react-dom": "^18.2.0",
|
|
72
|
+
"rollup": "^2.79.0",
|
|
73
|
+
"rollup-plugin-dts": "^4.2.2",
|
|
74
|
+
"rollup-plugin-esbuild": "^4.10.1",
|
|
75
|
+
"ts-node": "^10.9.1",
|
|
76
|
+
"typescript": "^4.8.2"
|
|
33
77
|
},
|
|
34
78
|
"keywords": [
|
|
35
79
|
"react",
|