@aiszlab/relax 1.3.11 → 1.3.12
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/dist/dom/clipboard.d.ts +1 -0
- package/dist/dom/contains.cjs +22 -0
- package/dist/dom/index.cjs +9 -0
- package/dist/dom/index.mjs +2 -0
- package/dist/dom/scroll-to.cjs +74 -0
- package/dist/hooks/use-boolean.cjs +36 -0
- package/dist/hooks/use-click-away.cjs +29 -0
- package/dist/hooks/{use-click-away.js → use-click-away.mjs} +3 -3
- package/dist/hooks/use-controlled-state.cjs +39 -0
- package/dist/hooks/{use-controlled-state.js → use-controlled-state.mjs} +3 -3
- package/dist/hooks/use-counter.cjs +61 -0
- package/dist/hooks/{use-counter.js → use-counter.mjs} +2 -2
- package/dist/hooks/use-debounce-callback.cjs +83 -0
- package/dist/hooks/{use-debounce-callback.js → use-debounce-callback.mjs} +4 -4
- package/dist/hooks/use-default.cjs +16 -0
- package/dist/hooks/{use-default.js → use-default.mjs} +1 -1
- package/dist/hooks/use-device-pixel-ratio.cjs +22 -0
- package/dist/hooks/{use-device-pixel-ratio.js → use-device-pixel-ratio.mjs} +1 -1
- package/dist/hooks/use-event.cjs +16 -0
- package/dist/hooks/use-focus.cjs +33 -0
- package/dist/hooks/{use-focus.js → use-focus.mjs} +2 -2
- package/dist/hooks/use-force-update.cjs +23 -0
- package/dist/hooks/use-hover.cjs +27 -0
- package/dist/hooks/{use-hover.js → use-hover.mjs} +3 -3
- package/dist/hooks/use-identity.cjs +22 -0
- package/dist/hooks/use-image-loader.cjs +65 -0
- package/dist/hooks/use-infinite-scroll.cjs +64 -0
- package/dist/hooks/{use-infinite-scroll.js → use-infinite-scroll.mjs} +2 -2
- package/dist/hooks/use-is-mounted.cjs +35 -0
- package/dist/hooks/{use-is-mounted.js → use-is-mounted.mjs} +1 -1
- package/dist/hooks/use-local-storage-state.cjs +9 -0
- package/dist/hooks/{use-local-storage-state.js → use-local-storage-state.mjs} +1 -1
- package/dist/hooks/use-media-query.cjs +55 -0
- package/dist/hooks/{use-media-query.js → use-media-query.mjs} +3 -3
- package/dist/hooks/use-memorable.cjs +16 -0
- package/dist/hooks/use-mount.cjs +18 -0
- package/dist/hooks/{use-mount.js → use-mount.mjs} +1 -1
- package/dist/hooks/use-mounted.cjs +18 -0
- package/dist/hooks/{use-mounted.js → use-mounted.mjs} +1 -1
- package/dist/hooks/use-mutate-observer.cjs +30 -0
- package/dist/hooks/{use-mutate-observer.js → use-mutate-observer.mjs} +3 -3
- package/dist/hooks/use-raf.cjs +28 -0
- package/dist/hooks/{use-raf.js → use-raf.mjs} +1 -1
- package/dist/hooks/use-reactive.cjs +32 -0
- package/dist/hooks/{use-reactive.js → use-reactive.mjs} +1 -1
- package/dist/hooks/use-refs.cjs +33 -0
- package/dist/hooks/{use-refs.js → use-refs.mjs} +1 -1
- package/dist/hooks/use-scroll-locker.cjs +99 -0
- package/dist/hooks/{use-scroll-locker.js → use-scroll-locker.mjs} +2 -2
- package/dist/hooks/use-scrollable.cjs +45 -0
- package/dist/hooks/{use-scrollable.js → use-scrollable.mjs} +1 -1
- package/dist/hooks/use-session-storage-state.cjs +9 -0
- package/dist/hooks/{use-session-storage-state.js → use-session-storage-state.mjs} +1 -1
- package/dist/hooks/use-storage-state.cjs +49 -0
- package/dist/hooks/{use-storage-state.js → use-storage-state.mjs} +1 -1
- package/dist/hooks/use-throttle-callback.cjs +85 -0
- package/dist/hooks/{use-throttle-callback.js → use-throttle-callback.mjs} +4 -4
- package/dist/hooks/use-timeout.cjs +70 -0
- package/dist/hooks/{use-timeout.js → use-timeout.mjs} +2 -2
- package/dist/hooks/use-timer.cjs +34 -0
- package/dist/hooks/{use-timer.js → use-timer.mjs} +1 -1
- package/dist/hooks/use-togglable.cjs +191 -0
- package/dist/hooks/{use-togglable.js → use-togglable.mjs} +2 -2
- package/dist/hooks/use-unmount.cjs +17 -0
- package/dist/hooks/use-update-effect.cjs +15 -0
- package/dist/hooks/{use-update-effect.js → use-update-effect.mjs} +2 -2
- package/dist/index.cjs +136 -0
- package/dist/index.mjs +65 -0
- package/dist/is/is-array.cjs +11 -0
- package/dist/is/is-dom-usable.cjs +12 -0
- package/dist/is/is-empty.cjs +27 -0
- package/dist/is/{is-empty.js → is-empty.mjs} +3 -3
- package/dist/is/is-function.cjs +11 -0
- package/dist/is/is-html-element.cjs +13 -0
- package/dist/is/is-html-input-element.cjs +13 -0
- package/dist/is/{is-html-input-element.js → is-html-input-element.mjs} +1 -1
- package/dist/is/is-mobile.cjs +15 -0
- package/dist/is/is-null.cjs +11 -0
- package/dist/is/is-number.cjs +7 -0
- package/dist/is/is-object.cjs +13 -0
- package/dist/is/is-overflow.cjs +16 -0
- package/dist/is/is-primitive.cjs +11 -0
- package/dist/is/is-refable.cjs +36 -0
- package/dist/is/is-set.cjs +11 -0
- package/dist/is/is-string.cjs +7 -0
- package/dist/is/is-style-element.cjs +11 -0
- package/dist/is/is-thenable.cjs +11 -0
- package/dist/is/is-undefined.cjs +11 -0
- package/dist/is/is-void.cjs +14 -0
- package/dist/is/{is-void.js → is-void.mjs} +2 -2
- package/dist/utils/chain.cjs +17 -0
- package/dist/utils/clamp.cjs +15 -0
- package/dist/utils/clone.cjs +19 -0
- package/dist/utils/{clone.js → clone.mjs} +2 -2
- package/dist/utils/clsx.cjs +34 -0
- package/dist/utils/{clsx.js → clsx.mjs} +4 -4
- package/dist/utils/debounce.cjs +34 -0
- package/dist/utils/{debounce.js → debounce.mjs} +2 -2
- package/dist/utils/effect.cjs +18 -0
- package/dist/utils/{effect.js → effect.mjs} +1 -1
- package/dist/utils/exclude.cjs +20 -0
- package/dist/utils/range.cjs +18 -0
- package/dist/utils/replace.cjs +22 -0
- package/dist/utils/{replace.js → replace.mjs} +1 -1
- package/dist/utils/set-style.cjs +23 -0
- package/dist/utils/tagged-template-literals.cjs +34 -0
- package/dist/utils/throttle.cjs +34 -0
- package/dist/utils/{throttle.js → throttle.mjs} +2 -2
- package/dist/utils/to-array.cjs +27 -0
- package/dist/utils/{to-array.js → to-array.mjs} +1 -1
- package/dist/utils/to-form-data.cjs +29 -0
- package/dist/utils/{to-form-data.js → to-form-data.mjs} +1 -1
- package/dist/utils/to-function.cjs +15 -0
- package/dist/utils/{to-function.js → to-function.mjs} +1 -1
- package/dist/utils/toggle.cjs +32 -0
- package/dist/utils/{toggle.js → toggle.mjs} +1 -1
- package/dist/utils/unique.cjs +19 -0
- package/dist/utils/waitable.cjs +99 -0
- package/dist/utils/{waitable.js → waitable.mjs} +1 -1
- package/package.json +9 -3
- package/dist/dom/index.js +0 -2
- package/dist/index.js +0 -65
- /package/dist/dom/{contains.js → contains.mjs} +0 -0
- /package/dist/dom/{scroll-to.js → scroll-to.mjs} +0 -0
- /package/dist/hooks/{use-boolean.js → use-boolean.mjs} +0 -0
- /package/dist/hooks/{use-event.js → use-event.mjs} +0 -0
- /package/dist/hooks/{use-force-update.js → use-force-update.mjs} +0 -0
- /package/dist/hooks/{use-identity.js → use-identity.mjs} +0 -0
- /package/dist/hooks/{use-image-loader.js → use-image-loader.mjs} +0 -0
- /package/dist/hooks/{use-memorable.js → use-memorable.mjs} +0 -0
- /package/dist/hooks/{use-unmount.js → use-unmount.mjs} +0 -0
- /package/dist/is/{is-array.js → is-array.mjs} +0 -0
- /package/dist/is/{is-dom-usable.js → is-dom-usable.mjs} +0 -0
- /package/dist/is/{is-function.js → is-function.mjs} +0 -0
- /package/dist/is/{is-html-element.js → is-html-element.mjs} +0 -0
- /package/dist/is/{is-mobile.js → is-mobile.mjs} +0 -0
- /package/dist/is/{is-null.js → is-null.mjs} +0 -0
- /package/dist/is/{is-number.js → is-number.mjs} +0 -0
- /package/dist/is/{is-object.js → is-object.mjs} +0 -0
- /package/dist/is/{is-overflow.js → is-overflow.mjs} +0 -0
- /package/dist/is/{is-primitive.js → is-primitive.mjs} +0 -0
- /package/dist/is/{is-refable.js → is-refable.mjs} +0 -0
- /package/dist/is/{is-set.js → is-set.mjs} +0 -0
- /package/dist/is/{is-string.js → is-string.mjs} +0 -0
- /package/dist/is/{is-style-element.js → is-style-element.mjs} +0 -0
- /package/dist/is/{is-thenable.js → is-thenable.mjs} +0 -0
- /package/dist/is/{is-undefined.js → is-undefined.mjs} +0 -0
- /package/dist/utils/{chain.js → chain.mjs} +0 -0
- /package/dist/utils/{clamp.js → clamp.mjs} +0 -0
- /package/dist/utils/{exclude.js → exclude.mjs} +0 -0
- /package/dist/utils/{range.js → range.mjs} +0 -0
- /package/dist/utils/{set-style.js → set-style.mjs} +0 -0
- /package/dist/utils/{tagged-template-literals.js → tagged-template-literals.mjs} +0 -0
- /package/dist/utils/{unique.js → unique.mjs} +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var rxjs = require('rxjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @author murukal
|
|
9
|
+
*
|
|
10
|
+
* @description
|
|
11
|
+
* image loader
|
|
12
|
+
*/
|
|
13
|
+
var useImageLoader = function useImageLoader(_ref) {
|
|
14
|
+
var src = _ref.src,
|
|
15
|
+
crossOrigin = _ref.crossOrigin,
|
|
16
|
+
_ref$referrerPolicy = _ref.referrerPolicy,
|
|
17
|
+
referrerPolicy = _ref$referrerPolicy === void 0 ? "no-referrer" : _ref$referrerPolicy;
|
|
18
|
+
var loader = react.useRef();
|
|
19
|
+
var _useState = react.useState("none"),
|
|
20
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
21
|
+
status = _useState2[0],
|
|
22
|
+
setStatus = _useState2[1];
|
|
23
|
+
react.useEffect(function () {
|
|
24
|
+
if (!src) {
|
|
25
|
+
return setStatus("none");
|
|
26
|
+
}
|
|
27
|
+
// create observable to listen img status
|
|
28
|
+
new rxjs.Observable(function (subscriber) {
|
|
29
|
+
loader.current = subscriber;
|
|
30
|
+
subscriber.next();
|
|
31
|
+
}).subscribe({
|
|
32
|
+
next: function next() {
|
|
33
|
+
return setStatus("loading");
|
|
34
|
+
},
|
|
35
|
+
complete: function complete() {
|
|
36
|
+
return setStatus("loaded");
|
|
37
|
+
},
|
|
38
|
+
error: function error() {
|
|
39
|
+
return setStatus("error");
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
var load = function load() {
|
|
43
|
+
var _loader$current;
|
|
44
|
+
(_loader$current = loader.current) === null || _loader$current === void 0 || _loader$current.complete();
|
|
45
|
+
};
|
|
46
|
+
var error = function error() {
|
|
47
|
+
var _loader$current2;
|
|
48
|
+
(_loader$current2 = loader.current) === null || _loader$current2 === void 0 || _loader$current2.error(null);
|
|
49
|
+
};
|
|
50
|
+
var image = new Image();
|
|
51
|
+
image.addEventListener("load", load);
|
|
52
|
+
image.addEventListener("error", error);
|
|
53
|
+
image.crossOrigin = crossOrigin !== null && crossOrigin !== void 0 ? crossOrigin : null;
|
|
54
|
+
image.referrerPolicy = referrerPolicy;
|
|
55
|
+
image.src = src;
|
|
56
|
+
return function () {
|
|
57
|
+
image.removeEventListener("load", load);
|
|
58
|
+
image.removeEventListener("error", error);
|
|
59
|
+
image.remove();
|
|
60
|
+
};
|
|
61
|
+
}, [src, crossOrigin, referrerPolicy]);
|
|
62
|
+
return status;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
exports.useImageLoader = useImageLoader;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var useEvent = require('./use-event.cjs');
|
|
6
|
+
var debounce = require('../utils/debounce.cjs');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @description
|
|
10
|
+
* use infinite scroll
|
|
11
|
+
*/
|
|
12
|
+
var useInfiniteScroll = function useInfiniteScroll(_ref) {
|
|
13
|
+
var _ref$hasMore = _ref.hasMore,
|
|
14
|
+
hasMore = _ref$hasMore === void 0 ? true : _ref$hasMore,
|
|
15
|
+
_ref$distance = _ref.distance,
|
|
16
|
+
distance = _ref$distance === void 0 ? 0 : _ref$distance,
|
|
17
|
+
onLoadMore = _ref.onLoadMore;
|
|
18
|
+
var loadable = react.useRef(null);
|
|
19
|
+
var scrollable = react.useRef(null);
|
|
20
|
+
var loadMore = useEvent.useEvent(function () {
|
|
21
|
+
onLoadMore === null || onLoadMore === void 0 || onLoadMore();
|
|
22
|
+
});
|
|
23
|
+
react.useEffect(function () {
|
|
24
|
+
var loader = loadable.current;
|
|
25
|
+
var scroller = scrollable.current;
|
|
26
|
+
if (!hasMore) return;
|
|
27
|
+
if (!scroller) return;
|
|
28
|
+
// use loader if loader is assigned
|
|
29
|
+
if (!!loader) {
|
|
30
|
+
var options = {
|
|
31
|
+
root: scroller,
|
|
32
|
+
rootMargin: "0px 0px ".concat(distance, "px 0px"),
|
|
33
|
+
threshold: 0.1
|
|
34
|
+
};
|
|
35
|
+
var observer = new IntersectionObserver(function (entries) {
|
|
36
|
+
var _entries = _slicedToArray(entries, 1),
|
|
37
|
+
entry = _entries[0];
|
|
38
|
+
if (!entry.isIntersecting) return;
|
|
39
|
+
loadMore();
|
|
40
|
+
}, options);
|
|
41
|
+
observer.observe(loader);
|
|
42
|
+
return function () {
|
|
43
|
+
observer.disconnect();
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// listen scroll event, when loader is not assigned
|
|
47
|
+
var _debounce = debounce.debounce(function () {
|
|
48
|
+
if (scroller.scrollHeight - scroller.scrollTop > scroller.clientHeight + distance) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
loadMore();
|
|
52
|
+
}, 100),
|
|
53
|
+
next = _debounce.next,
|
|
54
|
+
abort = _debounce.abort;
|
|
55
|
+
scroller.addEventListener("scroll", next);
|
|
56
|
+
return function () {
|
|
57
|
+
scroller.removeEventListener("scroll", next);
|
|
58
|
+
abort();
|
|
59
|
+
};
|
|
60
|
+
}, [hasMore]);
|
|
61
|
+
return [loadable, scrollable];
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
exports.useInfiniteScroll = useInfiniteScroll;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
2
|
import { useRef, useEffect } from 'react';
|
|
3
|
-
import { useEvent } from './use-event.
|
|
4
|
-
import { debounce } from '../utils/debounce.
|
|
3
|
+
import { useEvent } from './use-event.mjs';
|
|
4
|
+
import { debounce } from '../utils/debounce.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @description
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var useMounted = require('./use-mounted.cjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @description
|
|
9
|
+
* `useIsMounted`
|
|
10
|
+
*/
|
|
11
|
+
var useIsMounted = function useIsMounted() {
|
|
12
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
13
|
+
_ref$rerender = _ref.rerender,
|
|
14
|
+
rerender = _ref$rerender === void 0 ? false : _ref$rerender;
|
|
15
|
+
var _useState = react.useState(false),
|
|
16
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
17
|
+
setIsMounted = _useState2[1];
|
|
18
|
+
var isMountedRef = react.useRef(false);
|
|
19
|
+
useMounted.useMounted(function () {
|
|
20
|
+
isMountedRef.current = true;
|
|
21
|
+
if (rerender) {
|
|
22
|
+
setIsMounted(true);
|
|
23
|
+
}
|
|
24
|
+
return function () {
|
|
25
|
+
isMountedRef.current = false;
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
// only use callback
|
|
29
|
+
// avoid parent component or hooks change isMountedRef.current
|
|
30
|
+
return function () {
|
|
31
|
+
return isMountedRef.current;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.useIsMounted = useIsMounted;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useStorageState = require('./use-storage-state.cjs');
|
|
4
|
+
|
|
5
|
+
var useLocalStorageState = function useLocalStorageState(key, useBy) {
|
|
6
|
+
return useStorageState.useStorageState(key, localStorage, useBy);
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
exports.useLocalStorageState = useLocalStorageState;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var toArray = require('../utils/to-array.cjs');
|
|
6
|
+
var useEvent = require('./use-event.cjs');
|
|
7
|
+
var replace = require('../utils/replace.cjs');
|
|
8
|
+
|
|
9
|
+
var useMediaQuery = function useMediaQuery(query) {
|
|
10
|
+
var _query = react.useMemo(function () {
|
|
11
|
+
return query.toString();
|
|
12
|
+
}, [query]);
|
|
13
|
+
var queries = toArray.toArray(query);
|
|
14
|
+
var _useState = react.useState(function () {
|
|
15
|
+
return queries.map(function (query) {
|
|
16
|
+
var _window$matchMedia, _window;
|
|
17
|
+
return !!((_window$matchMedia = (_window = window).matchMedia) !== null && _window$matchMedia !== void 0 && (_window$matchMedia = _window$matchMedia.call(_window, query)) !== null && _window$matchMedia !== void 0 && _window$matchMedia.matches);
|
|
18
|
+
});
|
|
19
|
+
}),
|
|
20
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
21
|
+
value = _useState2[0],
|
|
22
|
+
setValue = _useState2[1];
|
|
23
|
+
var onMediaQueryChange = useEvent.useEvent(function (event, index) {
|
|
24
|
+
setValue(function (prev) {
|
|
25
|
+
return replace.replace(prev, {
|
|
26
|
+
index: index,
|
|
27
|
+
replaceValue: event.matches
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
react.useEffect(function () {
|
|
32
|
+
var mediaQueries = queries.map(function (query) {
|
|
33
|
+
return window.matchMedia(query);
|
|
34
|
+
});
|
|
35
|
+
// listen media query change
|
|
36
|
+
var cleaners = mediaQueries.map(function (mediaQuery, index) {
|
|
37
|
+
var listener = function listener(event) {
|
|
38
|
+
return onMediaQueryChange(event, index);
|
|
39
|
+
};
|
|
40
|
+
mediaQuery.addEventListener("change", listener);
|
|
41
|
+
return function () {
|
|
42
|
+
return mediaQuery.removeEventListener("change", listener);
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
// clean up all listeners
|
|
46
|
+
return function () {
|
|
47
|
+
return cleaners.forEach(function (cleaner) {
|
|
48
|
+
return cleaner();
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
}, [_query]);
|
|
52
|
+
return value;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
exports.useMediaQuery = useMediaQuery;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
2
|
import { useMemo, useState, useEffect } from 'react';
|
|
3
|
-
import { toArray } from '../utils/to-array.
|
|
4
|
-
import { useEvent } from './use-event.
|
|
5
|
-
import { replace } from '../utils/replace.
|
|
3
|
+
import { toArray } from '../utils/to-array.mjs';
|
|
4
|
+
import { useEvent } from './use-event.mjs';
|
|
5
|
+
import { replace } from '../utils/replace.mjs';
|
|
6
6
|
|
|
7
7
|
var useMediaQuery = function useMediaQuery(query) {
|
|
8
8
|
var _query = useMemo(function () {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
var useMemorable = function useMemorable(getter, condition, shouldUpdate) {
|
|
6
|
+
var cacheRef = react.useRef(null);
|
|
7
|
+
if (cacheRef.current === null || shouldUpdate(cacheRef.current.condition, condition)) {
|
|
8
|
+
cacheRef.current = {
|
|
9
|
+
value: getter(),
|
|
10
|
+
condition: condition
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
return cacheRef.current.value;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
exports.useMemorable = useMemorable;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var effect = require('../utils/effect.cjs');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @author murukal
|
|
8
|
+
*
|
|
9
|
+
* @description
|
|
10
|
+
* when components will mount
|
|
11
|
+
*/
|
|
12
|
+
var useMount = function useMount(callback) {
|
|
13
|
+
react.useLayoutEffect(function () {
|
|
14
|
+
return effect.effect(callback);
|
|
15
|
+
}, []);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
exports.useMount = useMount;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var effect = require('../utils/effect.cjs');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @author murukal
|
|
8
|
+
*
|
|
9
|
+
* @description
|
|
10
|
+
* when components mounted
|
|
11
|
+
*/
|
|
12
|
+
var useMounted = function useMounted(callback) {
|
|
13
|
+
react.useEffect(function () {
|
|
14
|
+
return effect.effect(callback);
|
|
15
|
+
}, []);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
exports.useMounted = useMounted;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var useEvent = require('./use-event.cjs');
|
|
5
|
+
var isDomUsable = require('../is/is-dom-usable.cjs');
|
|
6
|
+
var toArray = require('../utils/to-array.cjs');
|
|
7
|
+
|
|
8
|
+
var useMutateObserver = function useMutateObserver(_elements, _callback) {
|
|
9
|
+
var callback = useEvent.useEvent(_callback);
|
|
10
|
+
react.useEffect(function () {
|
|
11
|
+
if (!isDomUsable.isDomUsable() || !_elements) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
var elements = toArray.toArray(_elements);
|
|
15
|
+
var listener = new MutationObserver(callback);
|
|
16
|
+
elements.forEach(function (element) {
|
|
17
|
+
listener.observe(element, {
|
|
18
|
+
subtree: true,
|
|
19
|
+
childList: true,
|
|
20
|
+
attributeFilter: ["style", "class"]
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
return function () {
|
|
24
|
+
listener.takeRecords();
|
|
25
|
+
listener.disconnect();
|
|
26
|
+
};
|
|
27
|
+
}, [_elements, callback]);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
exports.useMutateObserver = useMutateObserver;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
-
import { useEvent } from './use-event.
|
|
3
|
-
import { isDomUsable } from '../is/is-dom-usable.
|
|
4
|
-
import { toArray } from '../utils/to-array.
|
|
2
|
+
import { useEvent } from './use-event.mjs';
|
|
3
|
+
import { isDomUsable } from '../is/is-dom-usable.mjs';
|
|
4
|
+
import { toArray } from '../utils/to-array.mjs';
|
|
5
5
|
|
|
6
6
|
var useMutateObserver = function useMutateObserver(_elements, _callback) {
|
|
7
7
|
var callback = useEvent(_callback);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var useEvent = require('./use-event.cjs');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @description
|
|
8
|
+
* raf
|
|
9
|
+
*/
|
|
10
|
+
var useRaf = function useRaf(_callback) {
|
|
11
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
12
|
+
_ref$timely = _ref.timely,
|
|
13
|
+
timely = _ref$timely === void 0 ? false : _ref$timely;
|
|
14
|
+
var callback = useEvent.useEvent(_callback);
|
|
15
|
+
var timed = react.useRef(null);
|
|
16
|
+
var isTimed = react.useRef(false);
|
|
17
|
+
return function () {
|
|
18
|
+
if (isTimed.current) return;
|
|
19
|
+
isTimed.current = true;
|
|
20
|
+
timely && callback();
|
|
21
|
+
timed.current = requestAnimationFrame(function () {
|
|
22
|
+
isTimed.current = false;
|
|
23
|
+
!timely && callback();
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
exports.useRaf = useRaf;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var useEvent = require('./use-event.cjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @description
|
|
9
|
+
* use reactive
|
|
10
|
+
*/
|
|
11
|
+
var useReactive = function useReactive(initialState) {
|
|
12
|
+
var _useState = react.useState(initialState),
|
|
13
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
14
|
+
_state = _useState2[0],
|
|
15
|
+
_setState = _useState2[1];
|
|
16
|
+
var getter = useEvent.useEvent(function () {
|
|
17
|
+
return _state;
|
|
18
|
+
});
|
|
19
|
+
var setter = useEvent.useEvent(function (_target, _key, value) {
|
|
20
|
+
_setState(value);
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
23
|
+
var ref = react.useRef(new Proxy({
|
|
24
|
+
value: _state
|
|
25
|
+
}, {
|
|
26
|
+
get: getter,
|
|
27
|
+
set: setter
|
|
28
|
+
}));
|
|
29
|
+
return ref.current;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
exports.useReactive = useReactive;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var isFunction = require('../is/is-function.cjs');
|
|
5
|
+
|
|
6
|
+
var mount = function mount(ref, trigger) {
|
|
7
|
+
if (isFunction.isFunction(ref)) {
|
|
8
|
+
ref(trigger);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
// in deprecated react, class component can use string ref
|
|
12
|
+
// but there are many problems, in relax, we just make it not work
|
|
13
|
+
// issue for react: https://github.com/facebook/react/pull/8333#issuecomment-271648615
|
|
14
|
+
if (typeof ref === "string") {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
ref.current = trigger;
|
|
18
|
+
};
|
|
19
|
+
var useRefs = function useRefs() {
|
|
20
|
+
for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
21
|
+
refs[_key] = arguments[_key];
|
|
22
|
+
}
|
|
23
|
+
return react.useMemo(function () {
|
|
24
|
+
return function (trigger) {
|
|
25
|
+
refs.forEach(function (ref) {
|
|
26
|
+
if (!ref) return;
|
|
27
|
+
mount(ref, trigger);
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
}, refs);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.useRefs = useRefs;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
4
|
+
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
5
|
+
var _classPrivateFieldInitSpec = require('@babel/runtime/helpers/classPrivateFieldInitSpec');
|
|
6
|
+
var _classPrivateFieldSet = require('@babel/runtime/helpers/classPrivateFieldSet2');
|
|
7
|
+
var _classPrivateFieldGet = require('@babel/runtime/helpers/classPrivateFieldGet2');
|
|
8
|
+
var react = require('react');
|
|
9
|
+
var isOverflow = require('../is/is-overflow.cjs');
|
|
10
|
+
var setStyle = require('../utils/set-style.cjs');
|
|
11
|
+
|
|
12
|
+
var _barSize = /*#__PURE__*/new WeakMap();
|
|
13
|
+
var _locked = /*#__PURE__*/new WeakMap();
|
|
14
|
+
var ScrollLocker = /*#__PURE__*/function () {
|
|
15
|
+
function ScrollLocker() {
|
|
16
|
+
var _scrollLocker$_;
|
|
17
|
+
_classCallCheck(this, ScrollLocker);
|
|
18
|
+
// bar size
|
|
19
|
+
_classPrivateFieldInitSpec(this, _barSize, null);
|
|
20
|
+
// locked elements, with previous styles
|
|
21
|
+
_classPrivateFieldInitSpec(this, _locked, new Map());
|
|
22
|
+
return (_scrollLocker$_ = _scrollLocker._) !== null && _scrollLocker$_ !== void 0 ? _scrollLocker$_ : _scrollLocker._ = this;
|
|
23
|
+
}
|
|
24
|
+
return _createClass(ScrollLocker, [{
|
|
25
|
+
key: "barSize",
|
|
26
|
+
get: function get() {
|
|
27
|
+
if (_classPrivateFieldGet(_barSize, this)) return _classPrivateFieldGet(_barSize, this);
|
|
28
|
+
// how to calculate dom scroll bar size
|
|
29
|
+
// create a backend dom element, set force scrollable
|
|
30
|
+
var _target = document.createElement("div");
|
|
31
|
+
_target.attributeStyleMap.set("position", "absolute");
|
|
32
|
+
_target.attributeStyleMap.set("left", "0");
|
|
33
|
+
_target.attributeStyleMap.set("top", "0");
|
|
34
|
+
_target.attributeStyleMap.set("width", "100vw");
|
|
35
|
+
_target.attributeStyleMap.set("height", "100vh");
|
|
36
|
+
_target.attributeStyleMap.set("overflow", "scroll");
|
|
37
|
+
// calculate, then clear
|
|
38
|
+
document.body.appendChild(_target);
|
|
39
|
+
_classPrivateFieldSet(_barSize, this, {
|
|
40
|
+
width: _target.offsetWidth - _target.clientWidth,
|
|
41
|
+
height: _target.offsetHeight - _target.clientHeight
|
|
42
|
+
});
|
|
43
|
+
document.body.removeChild(_target);
|
|
44
|
+
return _classPrivateFieldGet(_barSize, this);
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
key: "isOverflow",
|
|
48
|
+
get: function get() {
|
|
49
|
+
return isOverflow.isOverflow();
|
|
50
|
+
}
|
|
51
|
+
}, {
|
|
52
|
+
key: "lock",
|
|
53
|
+
value: function lock() {
|
|
54
|
+
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body;
|
|
55
|
+
// if locked, do not lock again
|
|
56
|
+
if (_classPrivateFieldGet(_locked, this).has(element)) return;
|
|
57
|
+
// if target is not scrollable, do not lock
|
|
58
|
+
if (!isOverflow.isOverflow(element)) return;
|
|
59
|
+
_classPrivateFieldGet(_locked, this).set(element, setStyle.setStyle(element, {
|
|
60
|
+
overflow: "hidden",
|
|
61
|
+
width: "calc(100% - ".concat(this.barSize.width, "px)")
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "unlock",
|
|
66
|
+
value: function unlock() {
|
|
67
|
+
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body;
|
|
68
|
+
// not locked, no need to unlock
|
|
69
|
+
if (!_classPrivateFieldGet(_locked, this).has(element)) return;
|
|
70
|
+
// reset style, in lock, some styled are setted
|
|
71
|
+
setStyle.setStyle(element, _classPrivateFieldGet(_locked, this).get(element));
|
|
72
|
+
_classPrivateFieldGet(_locked, this)["delete"](element);
|
|
73
|
+
}
|
|
74
|
+
}]);
|
|
75
|
+
}();
|
|
76
|
+
/**
|
|
77
|
+
* @description
|
|
78
|
+
* hooks
|
|
79
|
+
*/
|
|
80
|
+
// singleton mode
|
|
81
|
+
var _scrollLocker = {
|
|
82
|
+
_: null
|
|
83
|
+
};
|
|
84
|
+
var useScrollLocker = function useScrollLocker() {
|
|
85
|
+
var isLock = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
86
|
+
react.useLayoutEffect(function () {
|
|
87
|
+
var scrollLocker = new ScrollLocker();
|
|
88
|
+
if (!!isLock) {
|
|
89
|
+
scrollLocker.lock(document.body);
|
|
90
|
+
} else {
|
|
91
|
+
scrollLocker.unlock(document.body);
|
|
92
|
+
}
|
|
93
|
+
return function () {
|
|
94
|
+
scrollLocker.unlock(document.body);
|
|
95
|
+
};
|
|
96
|
+
}, [isLock]);
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
exports.useScrollLocker = useScrollLocker;
|
|
@@ -4,8 +4,8 @@ import _classPrivateFieldInitSpec from '@babel/runtime/helpers/classPrivateField
|
|
|
4
4
|
import _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet2';
|
|
5
5
|
import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet2';
|
|
6
6
|
import { useLayoutEffect } from 'react';
|
|
7
|
-
import { isOverflow } from '../is/is-overflow.
|
|
8
|
-
import { setStyle } from '../utils/set-style.
|
|
7
|
+
import { isOverflow } from '../is/is-overflow.mjs';
|
|
8
|
+
import { setStyle } from '../utils/set-style.mjs';
|
|
9
9
|
|
|
10
10
|
var _barSize = /*#__PURE__*/new WeakMap();
|
|
11
11
|
var _locked = /*#__PURE__*/new WeakMap();
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var scrollTo = require('../dom/scroll-to.cjs');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @description
|
|
8
|
+
* scrollable hook
|
|
9
|
+
*/
|
|
10
|
+
var useScrollable = function useScrollable() {
|
|
11
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
12
|
+
_ref$orientation = _ref.orientation,
|
|
13
|
+
orientation = _ref$orientation === void 0 ? "vertical" : _ref$orientation;
|
|
14
|
+
var targetRef = react.useRef(null);
|
|
15
|
+
var triggerRefs = react.useRef(new Map());
|
|
16
|
+
var scrollTo$1 = react.useCallback(function (to) {
|
|
17
|
+
var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
18
|
+
var target = targetRef.current;
|
|
19
|
+
if (!target) return;
|
|
20
|
+
// use animated scroll
|
|
21
|
+
scrollTo.scrollTo(target, to, {
|
|
22
|
+
duration: duration,
|
|
23
|
+
orientation: orientation
|
|
24
|
+
});
|
|
25
|
+
}, [orientation]);
|
|
26
|
+
var to = react.useCallback(function (key) {
|
|
27
|
+
var trigger = triggerRefs.current.get(key);
|
|
28
|
+
if (!trigger) return 0;
|
|
29
|
+
// different orientation, use different property
|
|
30
|
+
return orientation === "vertical" ? trigger.offsetTop : trigger.offsetLeft;
|
|
31
|
+
}, [orientation]);
|
|
32
|
+
// set trigger
|
|
33
|
+
var setTrigger = react.useCallback(function (key, trigger) {
|
|
34
|
+
triggerRefs.current.set(key, trigger);
|
|
35
|
+
}, []);
|
|
36
|
+
return {
|
|
37
|
+
targetRef: targetRef,
|
|
38
|
+
triggerRefs: triggerRefs,
|
|
39
|
+
scrollTo: scrollTo$1,
|
|
40
|
+
to: to,
|
|
41
|
+
setTrigger: setTrigger
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.useScrollable = useScrollable;
|