@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,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useStorageState = require('./use-storage-state.cjs');
|
|
4
|
+
|
|
5
|
+
var useSessionStorageState = function useSessionStorageState(key, useBy) {
|
|
6
|
+
return useStorageState.useStorageState(key, sessionStorage, useBy);
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
exports.useSessionStorageState = useSessionStorageState;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var isNull = require('../is/is-null.cjs');
|
|
6
|
+
|
|
7
|
+
var useStorageState = function useStorageState(key, storage) {
|
|
8
|
+
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
|
|
9
|
+
_ref$listen = _ref.listen,
|
|
10
|
+
listen = _ref$listen === void 0 ? true : _ref$listen;
|
|
11
|
+
var _useState = react.useState(function () {
|
|
12
|
+
return storage.getItem(key);
|
|
13
|
+
}),
|
|
14
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
15
|
+
state = _useState2[0],
|
|
16
|
+
setState = _useState2[1];
|
|
17
|
+
// effect sync state after key change
|
|
18
|
+
react.useEffect(function () {
|
|
19
|
+
setState(storage.getItem(key));
|
|
20
|
+
}, [key]);
|
|
21
|
+
react.useEffect(function () {
|
|
22
|
+
var onStorageChange = function onStorageChange(event) {
|
|
23
|
+
if (event.key !== key) return;
|
|
24
|
+
if (event.storageArea !== storage) return;
|
|
25
|
+
};
|
|
26
|
+
// only listen with flag = `true`
|
|
27
|
+
if (listen) {
|
|
28
|
+
window.addEventListener("storage", onStorageChange);
|
|
29
|
+
}
|
|
30
|
+
return function () {
|
|
31
|
+
window.removeEventListener("storage", onStorageChange);
|
|
32
|
+
};
|
|
33
|
+
}, [listen]);
|
|
34
|
+
// change handler
|
|
35
|
+
var setter = react.useCallback(function (value) {
|
|
36
|
+
if (listen) {
|
|
37
|
+
if (isNull.isNull(value)) {
|
|
38
|
+
storage.removeItem(key);
|
|
39
|
+
} else {
|
|
40
|
+
storage.setItem(key, value);
|
|
41
|
+
}
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
setState(value);
|
|
45
|
+
}, [key, listen]);
|
|
46
|
+
return [state, setter];
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
exports.useStorageState = useStorageState;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
2
|
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
-
import { isNull } from '../is/is-null.
|
|
3
|
+
import { isNull } from '../is/is-null.mjs';
|
|
4
4
|
|
|
5
5
|
var useStorageState = function useStorageState(key, storage) {
|
|
6
6
|
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var throttle = require('../utils/throttle.cjs');
|
|
5
|
+
var useEvent = require('./use-event.cjs');
|
|
6
|
+
var isFunction = require('../is/is-function.cjs');
|
|
7
|
+
var useDefault = require('./use-default.cjs');
|
|
8
|
+
|
|
9
|
+
var useThrottler = function useThrottler(throttler) {
|
|
10
|
+
var _useMemo = react.useMemo(function () {
|
|
11
|
+
return isFunction.isFunction(throttler) ? {
|
|
12
|
+
callback: throttler,
|
|
13
|
+
pipe: null
|
|
14
|
+
} : throttler;
|
|
15
|
+
}, [throttler]),
|
|
16
|
+
callback = _useMemo.callback,
|
|
17
|
+
pipe = _useMemo.pipe;
|
|
18
|
+
return {
|
|
19
|
+
callback: useEvent.useEvent(function () {
|
|
20
|
+
return callback.apply(void 0, arguments);
|
|
21
|
+
}),
|
|
22
|
+
pipe: useEvent.useEvent(function () {
|
|
23
|
+
var _pipe;
|
|
24
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
25
|
+
args[_key] = arguments[_key];
|
|
26
|
+
}
|
|
27
|
+
return (_pipe = pipe === null || pipe === void 0 ? void 0 : pipe.apply(void 0, args)) !== null && _pipe !== void 0 ? _pipe : args;
|
|
28
|
+
})
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* @author murukal
|
|
33
|
+
*
|
|
34
|
+
* @description
|
|
35
|
+
* throttle callback
|
|
36
|
+
*
|
|
37
|
+
* @param callback
|
|
38
|
+
* @param wait number
|
|
39
|
+
* @description
|
|
40
|
+
* The wait time (in milliseconds) until the throttle function is called.
|
|
41
|
+
* default 1000
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* 1000
|
|
45
|
+
*/
|
|
46
|
+
var useThrottleCallback = function useThrottleCallback(throttler) {
|
|
47
|
+
var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
|
|
48
|
+
var throttled = react.useRef(null);
|
|
49
|
+
var _useThrottler = useThrottler(throttler),
|
|
50
|
+
callback = _useThrottler.callback,
|
|
51
|
+
pipe = _useThrottler.pipe;
|
|
52
|
+
react.useEffect(function () {
|
|
53
|
+
var _throttled = throttle.throttle({
|
|
54
|
+
callback: callback,
|
|
55
|
+
pipe: pipe
|
|
56
|
+
}, wait);
|
|
57
|
+
throttled.current = _throttled;
|
|
58
|
+
// dispose
|
|
59
|
+
return function () {
|
|
60
|
+
_throttled.abort();
|
|
61
|
+
throttled.current = null;
|
|
62
|
+
};
|
|
63
|
+
}, [wait]);
|
|
64
|
+
return useDefault.useDefault(function () {
|
|
65
|
+
return {
|
|
66
|
+
next: function next() {
|
|
67
|
+
var _throttled$current;
|
|
68
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
69
|
+
args[_key2] = arguments[_key2];
|
|
70
|
+
}
|
|
71
|
+
return (_throttled$current = throttled.current) === null || _throttled$current === void 0 ? void 0 : _throttled$current.next.apply(_throttled$current, args);
|
|
72
|
+
},
|
|
73
|
+
flush: function flush() {
|
|
74
|
+
var _throttled$current2;
|
|
75
|
+
return (_throttled$current2 = throttled.current) === null || _throttled$current2 === void 0 ? void 0 : _throttled$current2.flush();
|
|
76
|
+
},
|
|
77
|
+
abort: function abort() {
|
|
78
|
+
var _throttled$current3;
|
|
79
|
+
return (_throttled$current3 = throttled.current) === null || _throttled$current3 === void 0 ? void 0 : _throttled$current3.abort();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
exports.useThrottleCallback = useThrottleCallback;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useRef, useEffect, useMemo } from 'react';
|
|
2
|
-
import { throttle } from '../utils/throttle.
|
|
3
|
-
import { useEvent } from './use-event.
|
|
4
|
-
import { isFunction } from '../is/is-function.
|
|
5
|
-
import { useDefault } from './use-default.
|
|
2
|
+
import { throttle } from '../utils/throttle.mjs';
|
|
3
|
+
import { useEvent } from './use-event.mjs';
|
|
4
|
+
import { isFunction } from '../is/is-function.mjs';
|
|
5
|
+
import { useDefault } from './use-default.mjs';
|
|
6
6
|
|
|
7
7
|
var useThrottler = function useThrottler(throttler) {
|
|
8
8
|
var _useMemo = useMemo(function () {
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var rxjs = require('rxjs');
|
|
5
|
+
var useEvent = require('./use-event.cjs');
|
|
6
|
+
var useMounted = require('./use-mounted.cjs');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @author murukal
|
|
10
|
+
*
|
|
11
|
+
* @description
|
|
12
|
+
* timeout effect
|
|
13
|
+
*/
|
|
14
|
+
var useTimeout = function useTimeout(callback, wait) {
|
|
15
|
+
var trigger = react.useRef(null);
|
|
16
|
+
var timed = react.useRef(null);
|
|
17
|
+
var callable = useEvent.useEvent(callback);
|
|
18
|
+
useMounted.useMounted(function () {
|
|
19
|
+
new rxjs.Observable(function (_) {
|
|
20
|
+
trigger.current = _;
|
|
21
|
+
}).subscribe({
|
|
22
|
+
complete: function complete() {
|
|
23
|
+
return callable();
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
// when user what to flush timeout handler
|
|
28
|
+
// if trigger already registed, just complete trigger
|
|
29
|
+
// not registed, call `handler` manaully
|
|
30
|
+
var flush = useEvent.useEvent(function () {
|
|
31
|
+
var _timed$current;
|
|
32
|
+
if (trigger.current) {
|
|
33
|
+
trigger.current.complete();
|
|
34
|
+
} else {
|
|
35
|
+
callback();
|
|
36
|
+
}
|
|
37
|
+
(_timed$current = timed.current) === null || _timed$current === void 0 || _timed$current.unsubscribe();
|
|
38
|
+
timed.current = null;
|
|
39
|
+
trigger.current = null;
|
|
40
|
+
});
|
|
41
|
+
// cancel
|
|
42
|
+
var cancel = useEvent.useEvent(function () {
|
|
43
|
+
var _trigger$current, _timed$current2;
|
|
44
|
+
(_trigger$current = trigger.current) === null || _trigger$current === void 0 || _trigger$current.error();
|
|
45
|
+
(_timed$current2 = timed.current) === null || _timed$current2 === void 0 || _timed$current2.unsubscribe();
|
|
46
|
+
timed.current = null;
|
|
47
|
+
});
|
|
48
|
+
// add timer for `wait`
|
|
49
|
+
react.useEffect(function () {
|
|
50
|
+
// if 0, always mean not need to set timeout
|
|
51
|
+
if (wait <= 0) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
var _timed = rxjs.timer(wait).subscribe(function () {
|
|
55
|
+
var _trigger$current2;
|
|
56
|
+
(_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 || _trigger$current2.complete();
|
|
57
|
+
});
|
|
58
|
+
timed.current = _timed;
|
|
59
|
+
return function () {
|
|
60
|
+
_timed.unsubscribe();
|
|
61
|
+
timed.current = null;
|
|
62
|
+
};
|
|
63
|
+
}, [wait]);
|
|
64
|
+
return {
|
|
65
|
+
flush: flush,
|
|
66
|
+
cancel: cancel
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
exports.useTimeout = useTimeout;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRef, useEffect } from 'react';
|
|
2
2
|
import { Observable, timer } from 'rxjs';
|
|
3
|
-
import { useEvent } from './use-event.
|
|
4
|
-
import { useMounted } from './use-mounted.
|
|
3
|
+
import { useEvent } from './use-event.mjs';
|
|
4
|
+
import { useMounted } from './use-mounted.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @author murukal
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var useUnmount = require('./use-unmount.cjs');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @description
|
|
8
|
+
* use timer
|
|
9
|
+
*/
|
|
10
|
+
var useTimer = function useTimer() {
|
|
11
|
+
var timed = react.useRef(void 0);
|
|
12
|
+
var clear = react.useCallback(function () {
|
|
13
|
+
clearTimeout(timed.current);
|
|
14
|
+
timed.current = void 0;
|
|
15
|
+
}, []);
|
|
16
|
+
var timeout = react.useCallback(function (handler) {
|
|
17
|
+
var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
18
|
+
clear();
|
|
19
|
+
if (duration <= 0) {
|
|
20
|
+
handler();
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
timed.current = setTimeout(function () {
|
|
24
|
+
handler();
|
|
25
|
+
}, duration);
|
|
26
|
+
}, []);
|
|
27
|
+
useUnmount.useUnmount(clear);
|
|
28
|
+
return {
|
|
29
|
+
timeout: timeout,
|
|
30
|
+
clear: clear
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.useTimer = useTimer;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
5
|
+
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
6
|
+
var _classPrivateFieldInitSpec = require('@babel/runtime/helpers/classPrivateFieldInitSpec');
|
|
7
|
+
var _classPrivateFieldGet = require('@babel/runtime/helpers/classPrivateFieldGet2');
|
|
8
|
+
var _classPrivateFieldSet = require('@babel/runtime/helpers/classPrivateFieldSet2');
|
|
9
|
+
var react = require('react');
|
|
10
|
+
var useControlledState = require('./use-controlled-state.cjs');
|
|
11
|
+
var useEvent = require('./use-event.cjs');
|
|
12
|
+
|
|
13
|
+
var _groupedLeaves = /*#__PURE__*/new WeakMap();
|
|
14
|
+
var Tree = /*#__PURE__*/function () {
|
|
15
|
+
function Tree() {
|
|
16
|
+
_classCallCheck(this, Tree);
|
|
17
|
+
_classPrivateFieldInitSpec(this, _groupedLeaves, void 0);
|
|
18
|
+
_classPrivateFieldSet(_groupedLeaves, this, new Map());
|
|
19
|
+
}
|
|
20
|
+
return _createClass(Tree, [{
|
|
21
|
+
key: "groupedLeaves",
|
|
22
|
+
get: function get() {
|
|
23
|
+
return _classPrivateFieldGet(_groupedLeaves, this);
|
|
24
|
+
}
|
|
25
|
+
}, {
|
|
26
|
+
key: "grow",
|
|
27
|
+
value: function grow(togglableKey) {
|
|
28
|
+
// create leaf, leaf will auto trigger tree collect callback
|
|
29
|
+
new Leaf({
|
|
30
|
+
key: togglableKey.key,
|
|
31
|
+
parent: null,
|
|
32
|
+
belongTo: this
|
|
33
|
+
}).grow(togglableKey.children);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
}, {
|
|
37
|
+
key: "collect",
|
|
38
|
+
value: function collect(leaf) {
|
|
39
|
+
_classPrivateFieldGet(_groupedLeaves, this).has(leaf.key) ? _classPrivateFieldGet(_groupedLeaves, this).get(leaf.key).add(leaf) : _classPrivateFieldGet(_groupedLeaves, this).set(leaf.key, new Set([leaf]));
|
|
40
|
+
}
|
|
41
|
+
}, {
|
|
42
|
+
key: "toggle",
|
|
43
|
+
value: function toggle(key, toggledKeys) {
|
|
44
|
+
var hasToggled = toggledKeys.has(key);
|
|
45
|
+
var isToggled = !hasToggled;
|
|
46
|
+
return this.toggleBy(key, isToggled, toggledKeys);
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
key: "toggleBy",
|
|
50
|
+
value: function toggleBy(key, isToggled, _toggledKeys) {
|
|
51
|
+
var _classPrivateFieldGet2;
|
|
52
|
+
var toggledKeys = new Set(_toggledKeys);
|
|
53
|
+
// toggle current leaf
|
|
54
|
+
if (isToggled) {
|
|
55
|
+
toggledKeys.add(key);
|
|
56
|
+
} else {
|
|
57
|
+
toggledKeys["delete"](key);
|
|
58
|
+
}
|
|
59
|
+
return Array.from((_classPrivateFieldGet2 = _classPrivateFieldGet(_groupedLeaves, this).get(key)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : []).reduce(function (prev, leaf) {
|
|
60
|
+
// deep fall, add or remove child key
|
|
61
|
+
return leaf.rise(
|
|
62
|
+
// deep rise, add or remove parent key
|
|
63
|
+
leaf.fall(isToggled, prev));
|
|
64
|
+
}, toggledKeys);
|
|
65
|
+
}
|
|
66
|
+
}]);
|
|
67
|
+
}();
|
|
68
|
+
var _key = /*#__PURE__*/new WeakMap();
|
|
69
|
+
var _belongTo = /*#__PURE__*/new WeakMap();
|
|
70
|
+
var _parent = /*#__PURE__*/new WeakMap();
|
|
71
|
+
var _children = /*#__PURE__*/new WeakMap();
|
|
72
|
+
var Leaf = /*#__PURE__*/function () {
|
|
73
|
+
function Leaf(props) {
|
|
74
|
+
_classCallCheck(this, Leaf);
|
|
75
|
+
_classPrivateFieldInitSpec(this, _key, void 0);
|
|
76
|
+
_classPrivateFieldInitSpec(this, _belongTo, void 0);
|
|
77
|
+
_classPrivateFieldInitSpec(this, _parent, void 0);
|
|
78
|
+
_classPrivateFieldInitSpec(this, _children, void 0);
|
|
79
|
+
_classPrivateFieldSet(_key, this, props.key);
|
|
80
|
+
_classPrivateFieldSet(_parent, this, props.parent);
|
|
81
|
+
_classPrivateFieldSet(_belongTo, this, props.belongTo);
|
|
82
|
+
_classPrivateFieldSet(_children, this, []);
|
|
83
|
+
// when leaf has grew, let tree collect leaf
|
|
84
|
+
_classPrivateFieldGet(_belongTo, this).collect(this);
|
|
85
|
+
}
|
|
86
|
+
return _createClass(Leaf, [{
|
|
87
|
+
key: "key",
|
|
88
|
+
get: function get() {
|
|
89
|
+
return _classPrivateFieldGet(_key, this);
|
|
90
|
+
}
|
|
91
|
+
}, {
|
|
92
|
+
key: "grow",
|
|
93
|
+
value: function grow() {
|
|
94
|
+
var _this = this;
|
|
95
|
+
var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
96
|
+
if (children.length === 0) return this;
|
|
97
|
+
children.forEach(function (node) {
|
|
98
|
+
var child = new Leaf({
|
|
99
|
+
key: node.key,
|
|
100
|
+
parent: _this,
|
|
101
|
+
belongTo: _classPrivateFieldGet(_belongTo, _this)
|
|
102
|
+
}).grow(node.children);
|
|
103
|
+
_classPrivateFieldGet(_children, _this).push(child);
|
|
104
|
+
});
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
}, {
|
|
108
|
+
key: "rise",
|
|
109
|
+
value: function rise(_toggledKeys) {
|
|
110
|
+
var rised = new Set(_toggledKeys);
|
|
111
|
+
if (!_classPrivateFieldGet(_parent, this)) return rised;
|
|
112
|
+
var isChildrenToggled = _classPrivateFieldGet(_children, _classPrivateFieldGet(_parent, this)).every(function (child) {
|
|
113
|
+
return rised.has(child.key);
|
|
114
|
+
});
|
|
115
|
+
if (isChildrenToggled) {
|
|
116
|
+
rised.add(_classPrivateFieldGet(_parent, this).key);
|
|
117
|
+
} else {
|
|
118
|
+
rised["delete"](_classPrivateFieldGet(_parent, this).key);
|
|
119
|
+
}
|
|
120
|
+
// go on parent
|
|
121
|
+
return _classPrivateFieldGet(_parent, this).rise(rised);
|
|
122
|
+
}
|
|
123
|
+
}, {
|
|
124
|
+
key: "fall",
|
|
125
|
+
value: function fall(isToggled, toggledKeys) {
|
|
126
|
+
return _classPrivateFieldGet(_children, this).reduce(function (prev, leaf) {
|
|
127
|
+
// deep loop, remove or add key
|
|
128
|
+
var fell = leaf.fall(isToggled, prev);
|
|
129
|
+
// toggle true, add current leaf key
|
|
130
|
+
// toggle false, remove current leaf key
|
|
131
|
+
if (isToggled) {
|
|
132
|
+
fell.add(leaf.key);
|
|
133
|
+
} else {
|
|
134
|
+
fell["delete"](leaf.key);
|
|
135
|
+
}
|
|
136
|
+
return fell;
|
|
137
|
+
}, new Set(toggledKeys));
|
|
138
|
+
}
|
|
139
|
+
}]);
|
|
140
|
+
}();
|
|
141
|
+
/**
|
|
142
|
+
* @description
|
|
143
|
+
* toggle able
|
|
144
|
+
*/
|
|
145
|
+
var useTogglable = function useTogglable(togglableKeys) {
|
|
146
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
147
|
+
onToggle = _ref.onToggle,
|
|
148
|
+
_ref$defaultToggledKe = _ref.defaultToggledKeys,
|
|
149
|
+
defaultToggledKeys = _ref$defaultToggledKe === void 0 ? [] : _ref$defaultToggledKe,
|
|
150
|
+
isDefaultToggled = _ref.isDefaultToggled,
|
|
151
|
+
toggledKeys = _ref.toggledKeys;
|
|
152
|
+
// re-create tree when togglable keys changed
|
|
153
|
+
var tree = react.useMemo(function () {
|
|
154
|
+
return togglableKeys.reduce(function (_tree, togglable) {
|
|
155
|
+
return _tree.grow(togglable);
|
|
156
|
+
}, new Tree());
|
|
157
|
+
}, [togglableKeys]);
|
|
158
|
+
// use controlled state to record toggled keys
|
|
159
|
+
var _useControlledState = useControlledState.useControlledState(toggledKeys, {
|
|
160
|
+
defaultState: function defaultState() {
|
|
161
|
+
return isDefaultToggled ? Array.from(tree.groupedLeaves.keys()) : defaultToggledKeys;
|
|
162
|
+
}
|
|
163
|
+
}),
|
|
164
|
+
_useControlledState2 = _slicedToArray(_useControlledState, 2),
|
|
165
|
+
_toggledKeys = _useControlledState2[0],
|
|
166
|
+
_setToggledKeys = _useControlledState2[1];
|
|
167
|
+
// use set for toggled keys to make it read easily
|
|
168
|
+
var readableToggledKeys = react.useMemo(function () {
|
|
169
|
+
return new Set(_toggledKeys);
|
|
170
|
+
}, [_toggledKeys]);
|
|
171
|
+
// check current key is toggled
|
|
172
|
+
var isToggled = react.useCallback(function (key) {
|
|
173
|
+
return readableToggledKeys.has(key);
|
|
174
|
+
}, [readableToggledKeys]);
|
|
175
|
+
// toggle one key
|
|
176
|
+
var toggle = useEvent.useEvent(function (key) {
|
|
177
|
+
// get new toggled keys by toggle current key
|
|
178
|
+
var _toggledKeys = Array.from(tree.toggle(key, readableToggledKeys));
|
|
179
|
+
// set state
|
|
180
|
+
_setToggledKeys(_toggledKeys);
|
|
181
|
+
// trigger on toggle callback
|
|
182
|
+
onToggle === null || onToggle === void 0 || onToggle(_toggledKeys);
|
|
183
|
+
});
|
|
184
|
+
return {
|
|
185
|
+
toggledKeys: readableToggledKeys,
|
|
186
|
+
isToggled: isToggled,
|
|
187
|
+
toggle: toggle
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
exports.useTogglable = useTogglable;
|
|
@@ -5,8 +5,8 @@ import _classPrivateFieldInitSpec from '@babel/runtime/helpers/classPrivateField
|
|
|
5
5
|
import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet2';
|
|
6
6
|
import _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet2';
|
|
7
7
|
import { useMemo, useCallback } from 'react';
|
|
8
|
-
import { useControlledState } from './use-controlled-state.
|
|
9
|
-
import { useEvent } from './use-event.
|
|
8
|
+
import { useControlledState } from './use-controlled-state.mjs';
|
|
9
|
+
import { useEvent } from './use-event.mjs';
|
|
10
10
|
|
|
11
11
|
var _groupedLeaves = /*#__PURE__*/new WeakMap();
|
|
12
12
|
var Tree = /*#__PURE__*/function () {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @author murukal
|
|
7
|
+
*
|
|
8
|
+
* @description
|
|
9
|
+
* unmount
|
|
10
|
+
*/
|
|
11
|
+
var useUnmount = function useUnmount(callback) {
|
|
12
|
+
react.useEffect(function () {
|
|
13
|
+
return callback;
|
|
14
|
+
}, []);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
exports.useUnmount = useUnmount;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var effect = require('../utils/effect.cjs');
|
|
5
|
+
var useIsMounted = require('./use-is-mounted.cjs');
|
|
6
|
+
|
|
7
|
+
var useUpdateEffect = function useUpdateEffect(callback, deps) {
|
|
8
|
+
react.useEffect(function () {
|
|
9
|
+
if (!isMounted()) return;
|
|
10
|
+
return effect.effect(callback);
|
|
11
|
+
}, deps);
|
|
12
|
+
var isMounted = useIsMounted.useIsMounted();
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
exports.useUpdateEffect = useUpdateEffect;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
-
import { effect } from '../utils/effect.
|
|
3
|
-
import { useIsMounted } from './use-is-mounted.
|
|
2
|
+
import { effect } from '../utils/effect.mjs';
|
|
3
|
+
import { useIsMounted } from './use-is-mounted.mjs';
|
|
4
4
|
|
|
5
5
|
var useUpdateEffect = function useUpdateEffect(callback, deps) {
|
|
6
6
|
useEffect(function () {
|