@reactuses/core 4.0.7 → 4.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/index.cjs +80 -13
- package/dist/index.d.ts +9 -1
- package/dist/index.mjs +80 -14
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ Collection of essential React Hooks Utilities.
|
|
|
32
32
|
```tsx harmony
|
|
33
33
|
import { useToggle } from "@reactuses/core";
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
function Demo() {
|
|
36
36
|
const [on, toggle] = useToggle(true);
|
|
37
37
|
|
|
38
38
|
return (
|
|
@@ -43,7 +43,7 @@ const Demo = () => {
|
|
|
43
43
|
<button onClick={() => toggle(false)}>set OFF</button>
|
|
44
44
|
</div>
|
|
45
45
|
);
|
|
46
|
-
}
|
|
46
|
+
}
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
Refer to [documentations](https://reactuse.com/) for more details.
|
|
@@ -56,6 +56,12 @@ Refer to [documentations](https://reactuse.com/) for more details.
|
|
|
56
56
|
|
|
57
57
|
<hr/>
|
|
58
58
|
|
|
59
|
+
## Feedback
|
|
60
|
+
|
|
61
|
+
You can submit an [issue](https://github.com/childrentime/reactuse/issues) or provide feedback on [Discord](https://discord.gg/WzDtCCFF).
|
|
62
|
+
|
|
63
|
+
<hr/>
|
|
64
|
+
|
|
59
65
|
## Contribute
|
|
60
66
|
|
|
61
67
|
See the [**Contributing Guide**](CONTRIBUTING.md)
|
package/dist/index.cjs
CHANGED
|
@@ -3306,6 +3306,7 @@ function useScriptTag(src, onLoaded = noop, options = defaultOptions$1) {
|
|
|
3306
3306
|
function usePermission(permissionDesc) {
|
|
3307
3307
|
const [state, setState] = React.useState("");
|
|
3308
3308
|
React.useEffect(() => {
|
|
3309
|
+
var _a;
|
|
3309
3310
|
const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc;
|
|
3310
3311
|
let mounted = true;
|
|
3311
3312
|
let permissionStatus = null;
|
|
@@ -3314,11 +3315,11 @@ function usePermission(permissionDesc) {
|
|
|
3314
3315
|
return;
|
|
3315
3316
|
}
|
|
3316
3317
|
setState(() => {
|
|
3317
|
-
var
|
|
3318
|
-
return (
|
|
3318
|
+
var _a2;
|
|
3319
|
+
return (_a2 = permissionStatus == null ? void 0 : permissionStatus.state) != null ? _a2 : "";
|
|
3319
3320
|
});
|
|
3320
3321
|
};
|
|
3321
|
-
navigator.permissions.query(desc).then((status) => {
|
|
3322
|
+
(_a = navigator.permissions) == null ? void 0 : _a.query(desc).then((status) => {
|
|
3322
3323
|
permissionStatus = status;
|
|
3323
3324
|
on(permissionStatus, "change", onChange);
|
|
3324
3325
|
onChange();
|
|
@@ -3444,7 +3445,7 @@ function useSupported(callback, sync = false) {
|
|
|
3444
3445
|
return supported;
|
|
3445
3446
|
}
|
|
3446
3447
|
|
|
3447
|
-
var __async$
|
|
3448
|
+
var __async$5 = (__this, __arguments, generator) => {
|
|
3448
3449
|
return new Promise((resolve, reject) => {
|
|
3449
3450
|
var fulfilled = (value) => {
|
|
3450
3451
|
try {
|
|
@@ -3489,7 +3490,7 @@ function useMediaDevices(options = {}) {
|
|
|
3489
3490
|
});
|
|
3490
3491
|
}).catch(noop);
|
|
3491
3492
|
}, []);
|
|
3492
|
-
const ensurePermissions = React.useCallback(() => __async$
|
|
3493
|
+
const ensurePermissions = React.useCallback(() => __async$5(this, null, function* () {
|
|
3493
3494
|
if (!isSupported) {
|
|
3494
3495
|
return false;
|
|
3495
3496
|
}
|
|
@@ -4295,7 +4296,7 @@ var __spreadValues$1 = (a, b) => {
|
|
|
4295
4296
|
return a;
|
|
4296
4297
|
};
|
|
4297
4298
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
4298
|
-
var __async$
|
|
4299
|
+
var __async$4 = (__this, __arguments, generator) => {
|
|
4299
4300
|
return new Promise((resolve, reject) => {
|
|
4300
4301
|
var fulfilled = (value) => {
|
|
4301
4302
|
try {
|
|
@@ -4327,7 +4328,7 @@ function useInfiniteScroll(target, onLoadMore, options = defaultOptions$1) {
|
|
|
4327
4328
|
const element = useLatestElement(target);
|
|
4328
4329
|
const di = state[3][direction];
|
|
4329
4330
|
useUpdateEffect(() => {
|
|
4330
|
-
const fn = () => __async$
|
|
4331
|
+
const fn = () => __async$4(this, null, function* () {
|
|
4331
4332
|
var _a2, _b2;
|
|
4332
4333
|
const previous = {
|
|
4333
4334
|
height: (_a2 = element == null ? void 0 : element.scrollHeight) != null ? _a2 : 0,
|
|
@@ -4861,7 +4862,7 @@ function useWindowScroll() {
|
|
|
4861
4862
|
return state;
|
|
4862
4863
|
}
|
|
4863
4864
|
|
|
4864
|
-
var __async$
|
|
4865
|
+
var __async$3 = (__this, __arguments, generator) => {
|
|
4865
4866
|
return new Promise((resolve, reject) => {
|
|
4866
4867
|
var fulfilled = (value) => {
|
|
4867
4868
|
try {
|
|
@@ -4890,7 +4891,7 @@ function useClipBorad() {
|
|
|
4890
4891
|
}, []);
|
|
4891
4892
|
useEventListener("copy", updateText);
|
|
4892
4893
|
useEventListener("cut", updateText);
|
|
4893
|
-
const copy = React.useCallback((txt) => __async$
|
|
4894
|
+
const copy = React.useCallback((txt) => __async$3(this, null, function* () {
|
|
4894
4895
|
setText(txt);
|
|
4895
4896
|
yield window.navigator.clipboard.writeText(txt);
|
|
4896
4897
|
}), []);
|
|
@@ -5229,7 +5230,7 @@ const useSticky = (targetElement, { axis = "y", nav = 0 }, scrollElement) => {
|
|
|
5229
5230
|
return [isSticky, setSticky];
|
|
5230
5231
|
};
|
|
5231
5232
|
|
|
5232
|
-
var __async$
|
|
5233
|
+
var __async$2 = (__this, __arguments, generator) => {
|
|
5233
5234
|
return new Promise((resolve, reject) => {
|
|
5234
5235
|
var fulfilled = (value) => {
|
|
5235
5236
|
try {
|
|
@@ -5252,7 +5253,7 @@ var __async$1 = (__this, __arguments, generator) => {
|
|
|
5252
5253
|
function useAsyncEffect(effect, cleanup = noop, deps) {
|
|
5253
5254
|
const mounted = useMountedState();
|
|
5254
5255
|
React.useEffect(() => {
|
|
5255
|
-
const execute = () => __async$
|
|
5256
|
+
const execute = () => __async$2(this, null, function* () {
|
|
5256
5257
|
if (!mounted()) {
|
|
5257
5258
|
return;
|
|
5258
5259
|
}
|
|
@@ -5313,7 +5314,7 @@ function useTextSelection() {
|
|
|
5313
5314
|
return selection;
|
|
5314
5315
|
}
|
|
5315
5316
|
|
|
5316
|
-
var __async = (__this, __arguments, generator) => {
|
|
5317
|
+
var __async$1 = (__this, __arguments, generator) => {
|
|
5317
5318
|
return new Promise((resolve, reject) => {
|
|
5318
5319
|
var fulfilled = (value) => {
|
|
5319
5320
|
try {
|
|
@@ -5339,7 +5340,7 @@ function useEyeDropper() {
|
|
|
5339
5340
|
true
|
|
5340
5341
|
);
|
|
5341
5342
|
const open = React.useCallback(
|
|
5342
|
-
(..._0) => __async(this, [..._0], function* (options = {}) {
|
|
5343
|
+
(..._0) => __async$1(this, [..._0], function* (options = {}) {
|
|
5343
5344
|
if (!isSupported) {
|
|
5344
5345
|
return {
|
|
5345
5346
|
sRGBHex: ""
|
|
@@ -5740,6 +5741,71 @@ function getValue(position) {
|
|
|
5740
5741
|
return getComputedStyle(document.documentElement).getPropertyValue(position);
|
|
5741
5742
|
}
|
|
5742
5743
|
|
|
5744
|
+
var __async = (__this, __arguments, generator) => {
|
|
5745
|
+
return new Promise((resolve, reject) => {
|
|
5746
|
+
var fulfilled = (value) => {
|
|
5747
|
+
try {
|
|
5748
|
+
step(generator.next(value));
|
|
5749
|
+
} catch (e) {
|
|
5750
|
+
reject(e);
|
|
5751
|
+
}
|
|
5752
|
+
};
|
|
5753
|
+
var rejected = (value) => {
|
|
5754
|
+
try {
|
|
5755
|
+
step(generator.throw(value));
|
|
5756
|
+
} catch (e) {
|
|
5757
|
+
reject(e);
|
|
5758
|
+
}
|
|
5759
|
+
};
|
|
5760
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
5761
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
5762
|
+
});
|
|
5763
|
+
};
|
|
5764
|
+
function useWebNotification(requestPermissions = false) {
|
|
5765
|
+
const isSupported = useSupported(() => !!window && "Notification" in window);
|
|
5766
|
+
const permissionGranted = React.useRef(false);
|
|
5767
|
+
const notificationRef = React.useRef(null);
|
|
5768
|
+
const show = (title, options = defaultOptions$1) => {
|
|
5769
|
+
if (!isSupported && !permissionGranted.current) {
|
|
5770
|
+
return;
|
|
5771
|
+
}
|
|
5772
|
+
notificationRef.current = new Notification(title || "", options);
|
|
5773
|
+
return notificationRef.current;
|
|
5774
|
+
};
|
|
5775
|
+
const close = React.useCallback(() => {
|
|
5776
|
+
if (notificationRef.current) {
|
|
5777
|
+
notificationRef.current.close();
|
|
5778
|
+
}
|
|
5779
|
+
notificationRef.current = null;
|
|
5780
|
+
}, []);
|
|
5781
|
+
React.useEffect(() => {
|
|
5782
|
+
permissionGranted.current = isSupported && "permission" in Notification && Notification.permission === "granted";
|
|
5783
|
+
}, [isSupported]);
|
|
5784
|
+
const ensurePermissions = React.useCallback(() => __async(this, null, function* () {
|
|
5785
|
+
if (!isSupported)
|
|
5786
|
+
return;
|
|
5787
|
+
if (!permissionGranted.current && Notification.permission !== "denied") {
|
|
5788
|
+
const result = yield Notification.requestPermission();
|
|
5789
|
+
if (result === "granted")
|
|
5790
|
+
permissionGranted.current = true;
|
|
5791
|
+
}
|
|
5792
|
+
return permissionGranted.current;
|
|
5793
|
+
}), [isSupported]);
|
|
5794
|
+
React.useEffect(() => {
|
|
5795
|
+
if (requestPermissions) {
|
|
5796
|
+
ensurePermissions();
|
|
5797
|
+
}
|
|
5798
|
+
}, [requestPermissions, ensurePermissions]);
|
|
5799
|
+
useUnmount(close);
|
|
5800
|
+
return {
|
|
5801
|
+
isSupported,
|
|
5802
|
+
show,
|
|
5803
|
+
close,
|
|
5804
|
+
ensurePermissions,
|
|
5805
|
+
permissionGranted
|
|
5806
|
+
};
|
|
5807
|
+
}
|
|
5808
|
+
|
|
5743
5809
|
exports.getHMSTime = getHMSTime;
|
|
5744
5810
|
exports.useActiveElement = useActiveElement;
|
|
5745
5811
|
exports.useAsyncEffect = useAsyncEffect;
|
|
@@ -5830,6 +5896,7 @@ exports.useUpdate = useUpdate;
|
|
|
5830
5896
|
exports.useUpdateEffect = useUpdateEffect;
|
|
5831
5897
|
exports.useUpdateLayoutEffect = index$3;
|
|
5832
5898
|
exports.useVirtualList = useVirtualList;
|
|
5899
|
+
exports.useWebNotification = useWebNotification;
|
|
5833
5900
|
exports.useWindowScroll = useWindowScroll;
|
|
5834
5901
|
exports.useWindowSize = useWindowSize;
|
|
5835
5902
|
exports.useWindowsFocus = useWindowsFocus;
|
package/dist/index.d.ts
CHANGED
|
@@ -865,4 +865,12 @@ interface UseCssVarOptions {
|
|
|
865
865
|
}
|
|
866
866
|
declare function useCssVar<T extends HTMLElement = HTMLElement>(prop: string, target: BasicTarget<T>, defaultValue?: string, options?: UseCssVarOptions): readonly [string, (v: string) => void];
|
|
867
867
|
|
|
868
|
-
|
|
868
|
+
declare function useWebNotification(requestPermissions?: boolean): {
|
|
869
|
+
readonly isSupported: boolean;
|
|
870
|
+
readonly show: (title: string, options?: NotificationOptions) => Notification | undefined;
|
|
871
|
+
readonly close: () => void;
|
|
872
|
+
readonly ensurePermissions: () => Promise<boolean | undefined>;
|
|
873
|
+
readonly permissionGranted: react.MutableRefObject<boolean>;
|
|
874
|
+
};
|
|
875
|
+
|
|
876
|
+
export { ColorScheme, Contrast, CursorState, EyeDropperOpenReturnType, GeneralPermissionDescriptor, IDisposable, IEvent, IEventOnce, IListener, INetworkInformation, IState, IUseNetworkState, KeyModifier, MousePressedOptions, MouseSourceType, OrientationState, RafLoopReturns, ScrollIntoViewAnimation, ScrollIntoViewParams, Status, Target, UseCookieState, UseCssVarOptions, UseDarkOptions, UseDraggableOptions, UseElementBoundingOptions, UseEventEmitterReturn, UseEyeDropperReturn, UseFileDialogOptions, UseFpsOptions, UseFullScreenOptions, UseInfiniteScrollOptions, UseLongPressOptions, UseMeasureRect, UseMediaDeviceOptions, UseModifierOptions, UseScriptTagOptions, UseScrollOptions, UseStickyParams, UseTextDirectionOptions, UseTextDirectionValue, UseTimeoutFnOptions, UseVirtualListItem, UseVirtualListOptions, UseVirtualListReturn, UseWindowScrollState, WindowSize, getHMSTime, useActiveElement, useAsyncEffect, useClickOutside, useClipBorad as useClipboard, useControlled, useCookie, useCountDown, useCounter, useCssVar, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDoubleClick, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useEyeDropper, useFavicon, useFileDialog, useFirstMountState, useFocus, _default$2 as useFps, useFullscreen, useGeolocation, useHover, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, useMeasure, useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, _default$1 as useOnceEffect, _default as useOnceLayoutEffect, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useReducedMotion, useResizeObserver, useScreenSafeArea, useScriptTag, useScroll, useScrollIntoView, useScrollLock, useSessionStorage, useSetState, useSticky, useSupported, useTextDirection, useTextSelection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, _default$4 as useUpdateEffect, _default$3 as useUpdateLayoutEffect, useVirtualList, useWebNotification, useWindowScroll, useWindowSize, useWindowsFocus };
|
package/dist/index.mjs
CHANGED
|
@@ -3298,6 +3298,7 @@ function useScriptTag(src, onLoaded = noop, options = defaultOptions$1) {
|
|
|
3298
3298
|
function usePermission(permissionDesc) {
|
|
3299
3299
|
const [state, setState] = useState("");
|
|
3300
3300
|
useEffect(() => {
|
|
3301
|
+
var _a;
|
|
3301
3302
|
const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc;
|
|
3302
3303
|
let mounted = true;
|
|
3303
3304
|
let permissionStatus = null;
|
|
@@ -3306,11 +3307,11 @@ function usePermission(permissionDesc) {
|
|
|
3306
3307
|
return;
|
|
3307
3308
|
}
|
|
3308
3309
|
setState(() => {
|
|
3309
|
-
var
|
|
3310
|
-
return (
|
|
3310
|
+
var _a2;
|
|
3311
|
+
return (_a2 = permissionStatus == null ? void 0 : permissionStatus.state) != null ? _a2 : "";
|
|
3311
3312
|
});
|
|
3312
3313
|
};
|
|
3313
|
-
navigator.permissions.query(desc).then((status) => {
|
|
3314
|
+
(_a = navigator.permissions) == null ? void 0 : _a.query(desc).then((status) => {
|
|
3314
3315
|
permissionStatus = status;
|
|
3315
3316
|
on(permissionStatus, "change", onChange);
|
|
3316
3317
|
onChange();
|
|
@@ -3436,7 +3437,7 @@ function useSupported(callback, sync = false) {
|
|
|
3436
3437
|
return supported;
|
|
3437
3438
|
}
|
|
3438
3439
|
|
|
3439
|
-
var __async$
|
|
3440
|
+
var __async$5 = (__this, __arguments, generator) => {
|
|
3440
3441
|
return new Promise((resolve, reject) => {
|
|
3441
3442
|
var fulfilled = (value) => {
|
|
3442
3443
|
try {
|
|
@@ -3481,7 +3482,7 @@ function useMediaDevices(options = {}) {
|
|
|
3481
3482
|
});
|
|
3482
3483
|
}).catch(noop);
|
|
3483
3484
|
}, []);
|
|
3484
|
-
const ensurePermissions = useCallback(() => __async$
|
|
3485
|
+
const ensurePermissions = useCallback(() => __async$5(this, null, function* () {
|
|
3485
3486
|
if (!isSupported) {
|
|
3486
3487
|
return false;
|
|
3487
3488
|
}
|
|
@@ -4287,7 +4288,7 @@ var __spreadValues$1 = (a, b) => {
|
|
|
4287
4288
|
return a;
|
|
4288
4289
|
};
|
|
4289
4290
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
4290
|
-
var __async$
|
|
4291
|
+
var __async$4 = (__this, __arguments, generator) => {
|
|
4291
4292
|
return new Promise((resolve, reject) => {
|
|
4292
4293
|
var fulfilled = (value) => {
|
|
4293
4294
|
try {
|
|
@@ -4319,7 +4320,7 @@ function useInfiniteScroll(target, onLoadMore, options = defaultOptions$1) {
|
|
|
4319
4320
|
const element = useLatestElement(target);
|
|
4320
4321
|
const di = state[3][direction];
|
|
4321
4322
|
useUpdateEffect(() => {
|
|
4322
|
-
const fn = () => __async$
|
|
4323
|
+
const fn = () => __async$4(this, null, function* () {
|
|
4323
4324
|
var _a2, _b2;
|
|
4324
4325
|
const previous = {
|
|
4325
4326
|
height: (_a2 = element == null ? void 0 : element.scrollHeight) != null ? _a2 : 0,
|
|
@@ -4853,7 +4854,7 @@ function useWindowScroll() {
|
|
|
4853
4854
|
return state;
|
|
4854
4855
|
}
|
|
4855
4856
|
|
|
4856
|
-
var __async$
|
|
4857
|
+
var __async$3 = (__this, __arguments, generator) => {
|
|
4857
4858
|
return new Promise((resolve, reject) => {
|
|
4858
4859
|
var fulfilled = (value) => {
|
|
4859
4860
|
try {
|
|
@@ -4882,7 +4883,7 @@ function useClipBorad() {
|
|
|
4882
4883
|
}, []);
|
|
4883
4884
|
useEventListener("copy", updateText);
|
|
4884
4885
|
useEventListener("cut", updateText);
|
|
4885
|
-
const copy = useCallback((txt) => __async$
|
|
4886
|
+
const copy = useCallback((txt) => __async$3(this, null, function* () {
|
|
4886
4887
|
setText(txt);
|
|
4887
4888
|
yield window.navigator.clipboard.writeText(txt);
|
|
4888
4889
|
}), []);
|
|
@@ -5221,7 +5222,7 @@ const useSticky = (targetElement, { axis = "y", nav = 0 }, scrollElement) => {
|
|
|
5221
5222
|
return [isSticky, setSticky];
|
|
5222
5223
|
};
|
|
5223
5224
|
|
|
5224
|
-
var __async$
|
|
5225
|
+
var __async$2 = (__this, __arguments, generator) => {
|
|
5225
5226
|
return new Promise((resolve, reject) => {
|
|
5226
5227
|
var fulfilled = (value) => {
|
|
5227
5228
|
try {
|
|
@@ -5244,7 +5245,7 @@ var __async$1 = (__this, __arguments, generator) => {
|
|
|
5244
5245
|
function useAsyncEffect(effect, cleanup = noop, deps) {
|
|
5245
5246
|
const mounted = useMountedState();
|
|
5246
5247
|
useEffect(() => {
|
|
5247
|
-
const execute = () => __async$
|
|
5248
|
+
const execute = () => __async$2(this, null, function* () {
|
|
5248
5249
|
if (!mounted()) {
|
|
5249
5250
|
return;
|
|
5250
5251
|
}
|
|
@@ -5305,7 +5306,7 @@ function useTextSelection() {
|
|
|
5305
5306
|
return selection;
|
|
5306
5307
|
}
|
|
5307
5308
|
|
|
5308
|
-
var __async = (__this, __arguments, generator) => {
|
|
5309
|
+
var __async$1 = (__this, __arguments, generator) => {
|
|
5309
5310
|
return new Promise((resolve, reject) => {
|
|
5310
5311
|
var fulfilled = (value) => {
|
|
5311
5312
|
try {
|
|
@@ -5331,7 +5332,7 @@ function useEyeDropper() {
|
|
|
5331
5332
|
true
|
|
5332
5333
|
);
|
|
5333
5334
|
const open = useCallback(
|
|
5334
|
-
(..._0) => __async(this, [..._0], function* (options = {}) {
|
|
5335
|
+
(..._0) => __async$1(this, [..._0], function* (options = {}) {
|
|
5335
5336
|
if (!isSupported) {
|
|
5336
5337
|
return {
|
|
5337
5338
|
sRGBHex: ""
|
|
@@ -5732,4 +5733,69 @@ function getValue(position) {
|
|
|
5732
5733
|
return getComputedStyle(document.documentElement).getPropertyValue(position);
|
|
5733
5734
|
}
|
|
5734
5735
|
|
|
5735
|
-
|
|
5736
|
+
var __async = (__this, __arguments, generator) => {
|
|
5737
|
+
return new Promise((resolve, reject) => {
|
|
5738
|
+
var fulfilled = (value) => {
|
|
5739
|
+
try {
|
|
5740
|
+
step(generator.next(value));
|
|
5741
|
+
} catch (e) {
|
|
5742
|
+
reject(e);
|
|
5743
|
+
}
|
|
5744
|
+
};
|
|
5745
|
+
var rejected = (value) => {
|
|
5746
|
+
try {
|
|
5747
|
+
step(generator.throw(value));
|
|
5748
|
+
} catch (e) {
|
|
5749
|
+
reject(e);
|
|
5750
|
+
}
|
|
5751
|
+
};
|
|
5752
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
5753
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
5754
|
+
});
|
|
5755
|
+
};
|
|
5756
|
+
function useWebNotification(requestPermissions = false) {
|
|
5757
|
+
const isSupported = useSupported(() => !!window && "Notification" in window);
|
|
5758
|
+
const permissionGranted = useRef(false);
|
|
5759
|
+
const notificationRef = useRef(null);
|
|
5760
|
+
const show = (title, options = defaultOptions$1) => {
|
|
5761
|
+
if (!isSupported && !permissionGranted.current) {
|
|
5762
|
+
return;
|
|
5763
|
+
}
|
|
5764
|
+
notificationRef.current = new Notification(title || "", options);
|
|
5765
|
+
return notificationRef.current;
|
|
5766
|
+
};
|
|
5767
|
+
const close = useCallback(() => {
|
|
5768
|
+
if (notificationRef.current) {
|
|
5769
|
+
notificationRef.current.close();
|
|
5770
|
+
}
|
|
5771
|
+
notificationRef.current = null;
|
|
5772
|
+
}, []);
|
|
5773
|
+
useEffect(() => {
|
|
5774
|
+
permissionGranted.current = isSupported && "permission" in Notification && Notification.permission === "granted";
|
|
5775
|
+
}, [isSupported]);
|
|
5776
|
+
const ensurePermissions = useCallback(() => __async(this, null, function* () {
|
|
5777
|
+
if (!isSupported)
|
|
5778
|
+
return;
|
|
5779
|
+
if (!permissionGranted.current && Notification.permission !== "denied") {
|
|
5780
|
+
const result = yield Notification.requestPermission();
|
|
5781
|
+
if (result === "granted")
|
|
5782
|
+
permissionGranted.current = true;
|
|
5783
|
+
}
|
|
5784
|
+
return permissionGranted.current;
|
|
5785
|
+
}), [isSupported]);
|
|
5786
|
+
useEffect(() => {
|
|
5787
|
+
if (requestPermissions) {
|
|
5788
|
+
ensurePermissions();
|
|
5789
|
+
}
|
|
5790
|
+
}, [requestPermissions, ensurePermissions]);
|
|
5791
|
+
useUnmount(close);
|
|
5792
|
+
return {
|
|
5793
|
+
isSupported,
|
|
5794
|
+
show,
|
|
5795
|
+
close,
|
|
5796
|
+
ensurePermissions,
|
|
5797
|
+
permissionGranted
|
|
5798
|
+
};
|
|
5799
|
+
}
|
|
5800
|
+
|
|
5801
|
+
export { getHMSTime, useActiveElement, useAsyncEffect, useClickOutside, useClipBorad as useClipboard, useControlled, useCookie, useCountDown, useCounter, useCssVar, useCustomCompareEffect, useCycleList, useDarkMode, useDebounce, useDebounceFn, useDeepCompareEffect, useDocumentVisibility, useDoubleClick, useDraggable, useDropZone, useElementBounding, useElementSize, useElementVisibility, useEvent, useEventEmitter, useEventListener, useEyeDropper, useFavicon, useFileDialog, useFirstMountState, useFocus, index$2 as useFps, useFullscreen, useGeolocation, useHover, useIdle, useInfiniteScroll, useIntersectionObserver, useInterval, useIsomorphicLayoutEffect, useKeyModifier, useLatest, useLocalStorage, useLongPress, useMeasure, useMediaDevices, useMediaQuery, useMount, useMountedState, useMouse, useMousePressed, useMutationObserver, useNetwork, useObjectUrl, index$1 as useOnceEffect, index as useOnceLayoutEffect, useOnline, useOrientation, usePageLeave, usePermission, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePrevious, useRafFn, useRafState, useReducedMotion, useResizeObserver, useScreenSafeArea, useScriptTag, useScroll, useScrollIntoView, useScrollLock, useSessionStorage, useSetState, useSticky, useSupported, useTextDirection, useTextSelection, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useTitle, useToggle, useUnmount, useUpdate, useUpdateEffect, index$3 as useUpdateLayoutEffect, useVirtualList, useWebNotification, useWindowScroll, useWindowSize, useWindowsFocus };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reactuses/core",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.9",
|
|
4
4
|
"license": "Unlicense",
|
|
5
5
|
"homepage": "https://www.reactuse.com/",
|
|
6
6
|
"repository": {
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"./package.json": "./package.json",
|
|
25
25
|
".": {
|
|
26
26
|
"types": "./dist/index.d.ts",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
27
|
+
"import": "./dist/index.mjs",
|
|
28
|
+
"require": "./dist/index.cjs"
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"main": "./dist/index.cjs",
|
|
@@ -64,6 +64,9 @@
|
|
|
64
64
|
"@rollup/plugin-replace": "^4.0.0",
|
|
65
65
|
"@testing-library/react": "^13.4.0",
|
|
66
66
|
"@types/jest": "^27.5.2",
|
|
67
|
+
"@types/js-cookie": "^3.0.3",
|
|
68
|
+
"@types/lodash": "^4.14.184",
|
|
69
|
+
"@types/lodash-es": "^4.17.7",
|
|
67
70
|
"babel-jest": "^29.0.2",
|
|
68
71
|
"consola": "^2.15.3",
|
|
69
72
|
"esbuild": "^0.17.15",
|