@reactuses/core 1.0.7 → 1.1.1
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/{index.cjs → dist/index.cjs} +64 -75
- package/{index.d.ts → dist/index.d.ts} +25 -27
- package/{index.mjs → dist/index.mjs} +66 -76
- package/package.json +56 -12
|
@@ -13,38 +13,6 @@ function usePrevious(state) {
|
|
|
13
13
|
return ref.current;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
var __async$2 = (__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$2(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));
|
|
@@ -231,29 +199,47 @@ function useInterval(callback, delay, options) {
|
|
|
231
199
|
}, [delay, immediate]);
|
|
232
200
|
}
|
|
233
201
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
202
|
+
const getInitialState = (query, defaultState) => {
|
|
203
|
+
if (isBrowser) {
|
|
204
|
+
return window.matchMedia(query).matches;
|
|
205
|
+
}
|
|
206
|
+
if (defaultState !== void 0) {
|
|
207
|
+
return defaultState;
|
|
208
|
+
}
|
|
209
|
+
if (process.env.NODE_ENV !== "production") {
|
|
210
|
+
console.warn(
|
|
211
|
+
"`useMediaQuery` When server side rendering, defaultState should be defined to prevent a hydration mismatches."
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
return false;
|
|
215
|
+
};
|
|
216
|
+
function useMediaQuery(query, defaultState) {
|
|
217
|
+
const [state, setState] = react.useState(getInitialState(query, defaultState));
|
|
218
|
+
react.useEffect(() => {
|
|
219
|
+
let mounted = true;
|
|
220
|
+
const mql = window.matchMedia(query);
|
|
221
|
+
const onChange = () => {
|
|
222
|
+
if (!mounted) {
|
|
223
|
+
return;
|
|
253
224
|
}
|
|
254
|
-
|
|
225
|
+
setState(!!mql.matches);
|
|
226
|
+
};
|
|
227
|
+
if ("addEventListener" in mql) {
|
|
228
|
+
mql.addEventListener("change", onChange);
|
|
229
|
+
} else {
|
|
230
|
+
mql.addListener(onChange);
|
|
231
|
+
}
|
|
232
|
+
setState(mql.matches);
|
|
233
|
+
return () => {
|
|
234
|
+
mounted = false;
|
|
235
|
+
if ("removeEventListener" in mql) {
|
|
236
|
+
mql.removeEventListener("change", onChange);
|
|
237
|
+
} else {
|
|
238
|
+
mql.removeListener(onChange);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
255
241
|
}, [query]);
|
|
256
|
-
return
|
|
242
|
+
return state;
|
|
257
243
|
}
|
|
258
244
|
|
|
259
245
|
function usePreferredDark(defaultState) {
|
|
@@ -268,7 +254,7 @@ function useDarkMode(options = {}) {
|
|
|
268
254
|
storageKey = "reactuses-color-scheme",
|
|
269
255
|
storage = () => isBrowser ? localStorage : void 0
|
|
270
256
|
} = options;
|
|
271
|
-
const prefersDarkMode = usePreferredDark();
|
|
257
|
+
const prefersDarkMode = usePreferredDark(false);
|
|
272
258
|
const value = initialValue ? initialValue : prefersDarkMode ? "dark" : "light";
|
|
273
259
|
const [dark, setDark] = useStorage(storageKey, value, storage);
|
|
274
260
|
react.useEffect(() => {
|
|
@@ -488,6 +474,7 @@ function off(obj, ...args) {
|
|
|
488
474
|
);
|
|
489
475
|
}
|
|
490
476
|
}
|
|
477
|
+
const defaultWindow = isBrowser ? window : void 0;
|
|
491
478
|
|
|
492
479
|
function getTargetElement(target, defaultElement) {
|
|
493
480
|
if (!isBrowser) {
|
|
@@ -1533,15 +1520,15 @@ function usePageLeave() {
|
|
|
1533
1520
|
const from = event.relatedTarget || event.toElement;
|
|
1534
1521
|
setIsLeft(!from);
|
|
1535
1522
|
};
|
|
1536
|
-
useEventListener("mouseout", handler, window, { passive: true });
|
|
1537
|
-
useEventListener("mouseleave", handler, document, { passive: true });
|
|
1538
|
-
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 });
|
|
1539
1526
|
return isLeft;
|
|
1540
1527
|
}
|
|
1541
1528
|
|
|
1542
1529
|
function useDocumentVisibility() {
|
|
1543
1530
|
const [visible, setVisible] = react.useState(() => {
|
|
1544
|
-
if (
|
|
1531
|
+
if (typeof document === "undefined") {
|
|
1545
1532
|
return "visible";
|
|
1546
1533
|
} else {
|
|
1547
1534
|
return document.visibilityState;
|
|
@@ -1552,7 +1539,7 @@ function useDocumentVisibility() {
|
|
|
1552
1539
|
() => {
|
|
1553
1540
|
setVisible(document.visibilityState);
|
|
1554
1541
|
},
|
|
1555
|
-
document
|
|
1542
|
+
() => document
|
|
1556
1543
|
);
|
|
1557
1544
|
return visible;
|
|
1558
1545
|
}
|
|
@@ -1647,7 +1634,7 @@ function useFileDialog(options = {}) {
|
|
|
1647
1634
|
const [files, setFiles] = react.useState(null);
|
|
1648
1635
|
const inputRef = react.useRef();
|
|
1649
1636
|
const initFn = react.useCallback(() => {
|
|
1650
|
-
if (
|
|
1637
|
+
if (typeof document === "undefined") {
|
|
1651
1638
|
return void 0;
|
|
1652
1639
|
}
|
|
1653
1640
|
const input = document.createElement("input");
|
|
@@ -1865,8 +1852,8 @@ function useMousePressed(target, options = {}) {
|
|
|
1865
1852
|
setSourceType(null);
|
|
1866
1853
|
}, []);
|
|
1867
1854
|
useEventListener("mousedown", onPressed("mouse"), target, { passive: true });
|
|
1868
|
-
useEventListener("mouseleave", onReleased, window, { passive: true });
|
|
1869
|
-
useEventListener("mouseup", onReleased, window, { passive: true });
|
|
1855
|
+
useEventListener("mouseleave", onReleased, () => window, { passive: true });
|
|
1856
|
+
useEventListener("mouseup", onReleased, () => window, { passive: true });
|
|
1870
1857
|
useMount(() => {
|
|
1871
1858
|
const element = getTargetElement(target);
|
|
1872
1859
|
if (drag) {
|
|
@@ -2102,8 +2089,8 @@ function useVirtualList(list = [], options) {
|
|
|
2102
2089
|
}
|
|
2103
2090
|
|
|
2104
2091
|
function usePreferredColorScheme(defaultState) {
|
|
2105
|
-
const isLight = useMediaQuery("(prefers-color-scheme: light)");
|
|
2106
|
-
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);
|
|
2107
2094
|
if (!isBrowser && defaultState) {
|
|
2108
2095
|
return defaultState;
|
|
2109
2096
|
}
|
|
@@ -2111,9 +2098,9 @@ function usePreferredColorScheme(defaultState) {
|
|
|
2111
2098
|
}
|
|
2112
2099
|
|
|
2113
2100
|
function usePreferredContrast(defaultState) {
|
|
2114
|
-
const isMore = useMediaQuery("(
|
|
2115
|
-
const isLess = useMediaQuery("(prefers-contrast: less)");
|
|
2116
|
-
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);
|
|
2117
2104
|
if (!isBrowser && defaultState) {
|
|
2118
2105
|
return defaultState;
|
|
2119
2106
|
}
|
|
@@ -2125,14 +2112,17 @@ function useActiveElement() {
|
|
|
2125
2112
|
const listener = react.useCallback(() => {
|
|
2126
2113
|
setActive(window == null ? void 0 : window.document.activeElement);
|
|
2127
2114
|
}, []);
|
|
2128
|
-
useEventListener("blur", listener, window, true);
|
|
2129
|
-
useEventListener("focus", listener, window, true);
|
|
2115
|
+
useEventListener("blur", listener, () => window, true);
|
|
2116
|
+
useEventListener("focus", listener, () => window, true);
|
|
2130
2117
|
return active;
|
|
2131
2118
|
}
|
|
2132
2119
|
|
|
2133
2120
|
function useDraggable(target, options = {}) {
|
|
2134
2121
|
var _a, _b;
|
|
2135
|
-
const draggingElement = getTargetElement(
|
|
2122
|
+
const draggingElement = getTargetElement(
|
|
2123
|
+
options.draggingElement,
|
|
2124
|
+
defaultWindow
|
|
2125
|
+
);
|
|
2136
2126
|
const draggingHandle = getTargetElement((_a = options.handle) != null ? _a : target);
|
|
2137
2127
|
const [position, setPositon] = react.useState(
|
|
2138
2128
|
(_b = options.initialValue) != null ? _b : { x: 0, y: 0 }
|
|
@@ -2294,7 +2284,7 @@ function useElementVisibility(target, options = {}) {
|
|
|
2294
2284
|
|
|
2295
2285
|
function useWindowsFocus() {
|
|
2296
2286
|
const [focused, setFocused] = react.useState(() => {
|
|
2297
|
-
if (!
|
|
2287
|
+
if (!isBrowser) {
|
|
2298
2288
|
return false;
|
|
2299
2289
|
}
|
|
2300
2290
|
return window.document.hasFocus();
|
|
@@ -2393,10 +2383,10 @@ function useClickOutSide(target, handler) {
|
|
|
2393
2383
|
}
|
|
2394
2384
|
savedHandler.current(event);
|
|
2395
2385
|
};
|
|
2396
|
-
useEventListener("mousedown", listener, window, {
|
|
2386
|
+
useEventListener("mousedown", listener, () => window, {
|
|
2397
2387
|
passive: true
|
|
2398
2388
|
});
|
|
2399
|
-
useEventListener("touchstart", listener, window, {
|
|
2389
|
+
useEventListener("touchstart", listener, () => window, {
|
|
2400
2390
|
passive: true
|
|
2401
2391
|
});
|
|
2402
2392
|
}
|
|
@@ -2451,7 +2441,6 @@ exports.useKeyModifier = useKeyModifier;
|
|
|
2451
2441
|
exports.useLatest = useLatest;
|
|
2452
2442
|
exports.useLocalStorage = useLocalStorage;
|
|
2453
2443
|
exports.useLongPress = useLongPress;
|
|
2454
|
-
exports.useMarkdown = useMarkdown;
|
|
2455
2444
|
exports.useMediaDevices = useMediaDevices$1;
|
|
2456
2445
|
exports.useMediaQuery = useMediaQuery;
|
|
2457
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;
|
|
@@ -92,7 +90,7 @@ interface UseDarkOptions<T> {
|
|
|
92
90
|
}
|
|
93
91
|
declare function useDarkMode<T extends string | "light" | "dark">(options?: UseDarkOptions<T>): readonly [T | null, react.Dispatch<react.SetStateAction<T | null>>];
|
|
94
92
|
|
|
95
|
-
declare function useMediaQuery(query: string,
|
|
93
|
+
declare function useMediaQuery(query: string, defaultState?: boolean): boolean;
|
|
96
94
|
|
|
97
95
|
declare function usePreferredDark(defaultState?: boolean): boolean;
|
|
98
96
|
|
|
@@ -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;
|
|
@@ -707,9 +705,9 @@ declare function useClipBorad(): readonly [
|
|
|
707
705
|
(txt: string) => Promise<void>
|
|
708
706
|
];
|
|
709
707
|
|
|
710
|
-
|
|
708
|
+
type EventType = MouseEvent | TouchEvent;
|
|
711
709
|
declare function useClickOutSide(target: BasicTarget, handler: (evt: EventType) => void): void;
|
|
712
710
|
|
|
713
711
|
declare function useCycleList<T>(list: T[], i?: number): readonly [T, (i?: number) => void, (i?: number) => void];
|
|
714
712
|
|
|
715
|
-
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,
|
|
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$2 = (__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$2(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));
|
|
@@ -227,29 +195,47 @@ function useInterval(callback, delay, options) {
|
|
|
227
195
|
}, [delay, immediate]);
|
|
228
196
|
}
|
|
229
197
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
198
|
+
const getInitialState = (query, defaultState) => {
|
|
199
|
+
if (isBrowser) {
|
|
200
|
+
return window.matchMedia(query).matches;
|
|
201
|
+
}
|
|
202
|
+
if (defaultState !== void 0) {
|
|
203
|
+
return defaultState;
|
|
204
|
+
}
|
|
205
|
+
if (process.env.NODE_ENV !== "production") {
|
|
206
|
+
console.warn(
|
|
207
|
+
"`useMediaQuery` When server side rendering, defaultState should be defined to prevent a hydration mismatches."
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
};
|
|
212
|
+
function useMediaQuery(query, defaultState) {
|
|
213
|
+
const [state, setState] = useState(getInitialState(query, defaultState));
|
|
214
|
+
useEffect(() => {
|
|
215
|
+
let mounted = true;
|
|
216
|
+
const mql = window.matchMedia(query);
|
|
217
|
+
const onChange = () => {
|
|
218
|
+
if (!mounted) {
|
|
219
|
+
return;
|
|
249
220
|
}
|
|
250
|
-
|
|
221
|
+
setState(!!mql.matches);
|
|
222
|
+
};
|
|
223
|
+
if ("addEventListener" in mql) {
|
|
224
|
+
mql.addEventListener("change", onChange);
|
|
225
|
+
} else {
|
|
226
|
+
mql.addListener(onChange);
|
|
227
|
+
}
|
|
228
|
+
setState(mql.matches);
|
|
229
|
+
return () => {
|
|
230
|
+
mounted = false;
|
|
231
|
+
if ("removeEventListener" in mql) {
|
|
232
|
+
mql.removeEventListener("change", onChange);
|
|
233
|
+
} else {
|
|
234
|
+
mql.removeListener(onChange);
|
|
235
|
+
}
|
|
236
|
+
};
|
|
251
237
|
}, [query]);
|
|
252
|
-
return
|
|
238
|
+
return state;
|
|
253
239
|
}
|
|
254
240
|
|
|
255
241
|
function usePreferredDark(defaultState) {
|
|
@@ -264,7 +250,7 @@ function useDarkMode(options = {}) {
|
|
|
264
250
|
storageKey = "reactuses-color-scheme",
|
|
265
251
|
storage = () => isBrowser ? localStorage : void 0
|
|
266
252
|
} = options;
|
|
267
|
-
const prefersDarkMode = usePreferredDark();
|
|
253
|
+
const prefersDarkMode = usePreferredDark(false);
|
|
268
254
|
const value = initialValue ? initialValue : prefersDarkMode ? "dark" : "light";
|
|
269
255
|
const [dark, setDark] = useStorage(storageKey, value, storage);
|
|
270
256
|
useEffect(() => {
|
|
@@ -484,6 +470,7 @@ function off(obj, ...args) {
|
|
|
484
470
|
);
|
|
485
471
|
}
|
|
486
472
|
}
|
|
473
|
+
const defaultWindow = isBrowser ? window : void 0;
|
|
487
474
|
|
|
488
475
|
function getTargetElement(target, defaultElement) {
|
|
489
476
|
if (!isBrowser) {
|
|
@@ -1529,15 +1516,15 @@ function usePageLeave() {
|
|
|
1529
1516
|
const from = event.relatedTarget || event.toElement;
|
|
1530
1517
|
setIsLeft(!from);
|
|
1531
1518
|
};
|
|
1532
|
-
useEventListener("mouseout", handler, window, { passive: true });
|
|
1533
|
-
useEventListener("mouseleave", handler, document, { passive: true });
|
|
1534
|
-
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 });
|
|
1535
1522
|
return isLeft;
|
|
1536
1523
|
}
|
|
1537
1524
|
|
|
1538
1525
|
function useDocumentVisibility() {
|
|
1539
1526
|
const [visible, setVisible] = useState(() => {
|
|
1540
|
-
if (
|
|
1527
|
+
if (typeof document === "undefined") {
|
|
1541
1528
|
return "visible";
|
|
1542
1529
|
} else {
|
|
1543
1530
|
return document.visibilityState;
|
|
@@ -1548,7 +1535,7 @@ function useDocumentVisibility() {
|
|
|
1548
1535
|
() => {
|
|
1549
1536
|
setVisible(document.visibilityState);
|
|
1550
1537
|
},
|
|
1551
|
-
document
|
|
1538
|
+
() => document
|
|
1552
1539
|
);
|
|
1553
1540
|
return visible;
|
|
1554
1541
|
}
|
|
@@ -1643,7 +1630,7 @@ function useFileDialog(options = {}) {
|
|
|
1643
1630
|
const [files, setFiles] = useState(null);
|
|
1644
1631
|
const inputRef = useRef();
|
|
1645
1632
|
const initFn = useCallback(() => {
|
|
1646
|
-
if (
|
|
1633
|
+
if (typeof document === "undefined") {
|
|
1647
1634
|
return void 0;
|
|
1648
1635
|
}
|
|
1649
1636
|
const input = document.createElement("input");
|
|
@@ -1861,8 +1848,8 @@ function useMousePressed(target, options = {}) {
|
|
|
1861
1848
|
setSourceType(null);
|
|
1862
1849
|
}, []);
|
|
1863
1850
|
useEventListener("mousedown", onPressed("mouse"), target, { passive: true });
|
|
1864
|
-
useEventListener("mouseleave", onReleased, window, { passive: true });
|
|
1865
|
-
useEventListener("mouseup", onReleased, window, { passive: true });
|
|
1851
|
+
useEventListener("mouseleave", onReleased, () => window, { passive: true });
|
|
1852
|
+
useEventListener("mouseup", onReleased, () => window, { passive: true });
|
|
1866
1853
|
useMount(() => {
|
|
1867
1854
|
const element = getTargetElement(target);
|
|
1868
1855
|
if (drag) {
|
|
@@ -2098,8 +2085,8 @@ function useVirtualList(list = [], options) {
|
|
|
2098
2085
|
}
|
|
2099
2086
|
|
|
2100
2087
|
function usePreferredColorScheme(defaultState) {
|
|
2101
|
-
const isLight = useMediaQuery("(prefers-color-scheme: light)");
|
|
2102
|
-
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);
|
|
2103
2090
|
if (!isBrowser && defaultState) {
|
|
2104
2091
|
return defaultState;
|
|
2105
2092
|
}
|
|
@@ -2107,9 +2094,9 @@ function usePreferredColorScheme(defaultState) {
|
|
|
2107
2094
|
}
|
|
2108
2095
|
|
|
2109
2096
|
function usePreferredContrast(defaultState) {
|
|
2110
|
-
const isMore = useMediaQuery("(
|
|
2111
|
-
const isLess = useMediaQuery("(prefers-contrast: less)");
|
|
2112
|
-
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);
|
|
2113
2100
|
if (!isBrowser && defaultState) {
|
|
2114
2101
|
return defaultState;
|
|
2115
2102
|
}
|
|
@@ -2121,14 +2108,17 @@ function useActiveElement() {
|
|
|
2121
2108
|
const listener = useCallback(() => {
|
|
2122
2109
|
setActive(window == null ? void 0 : window.document.activeElement);
|
|
2123
2110
|
}, []);
|
|
2124
|
-
useEventListener("blur", listener, window, true);
|
|
2125
|
-
useEventListener("focus", listener, window, true);
|
|
2111
|
+
useEventListener("blur", listener, () => window, true);
|
|
2112
|
+
useEventListener("focus", listener, () => window, true);
|
|
2126
2113
|
return active;
|
|
2127
2114
|
}
|
|
2128
2115
|
|
|
2129
2116
|
function useDraggable(target, options = {}) {
|
|
2130
2117
|
var _a, _b;
|
|
2131
|
-
const draggingElement = getTargetElement(
|
|
2118
|
+
const draggingElement = getTargetElement(
|
|
2119
|
+
options.draggingElement,
|
|
2120
|
+
defaultWindow
|
|
2121
|
+
);
|
|
2132
2122
|
const draggingHandle = getTargetElement((_a = options.handle) != null ? _a : target);
|
|
2133
2123
|
const [position, setPositon] = useState(
|
|
2134
2124
|
(_b = options.initialValue) != null ? _b : { x: 0, y: 0 }
|
|
@@ -2290,7 +2280,7 @@ function useElementVisibility(target, options = {}) {
|
|
|
2290
2280
|
|
|
2291
2281
|
function useWindowsFocus() {
|
|
2292
2282
|
const [focused, setFocused] = useState(() => {
|
|
2293
|
-
if (!
|
|
2283
|
+
if (!isBrowser) {
|
|
2294
2284
|
return false;
|
|
2295
2285
|
}
|
|
2296
2286
|
return window.document.hasFocus();
|
|
@@ -2389,10 +2379,10 @@ function useClickOutSide(target, handler) {
|
|
|
2389
2379
|
}
|
|
2390
2380
|
savedHandler.current(event);
|
|
2391
2381
|
};
|
|
2392
|
-
useEventListener("mousedown", listener, window, {
|
|
2382
|
+
useEventListener("mousedown", listener, () => window, {
|
|
2393
2383
|
passive: true
|
|
2394
2384
|
});
|
|
2395
|
-
useEventListener("touchstart", listener, window, {
|
|
2385
|
+
useEventListener("touchstart", listener, () => window, {
|
|
2396
2386
|
passive: true
|
|
2397
2387
|
});
|
|
2398
2388
|
}
|
|
@@ -2413,4 +2403,4 @@ function useCycleList(list, i = 0) {
|
|
|
2413
2403
|
return [list[index], next, prev];
|
|
2414
2404
|
}
|
|
2415
2405
|
|
|
2416
|
-
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,
|
|
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.
|
|
4
|
-
"main": "./index.cjs",
|
|
5
|
-
"module": "./index.mjs",
|
|
6
|
-
"types": "./index.d.ts",
|
|
3
|
+
"version": "1.1.1",
|
|
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",
|