@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.
Files changed (154) hide show
  1. package/dist/dom/clipboard.d.ts +1 -0
  2. package/dist/dom/contains.cjs +22 -0
  3. package/dist/dom/index.cjs +9 -0
  4. package/dist/dom/index.mjs +2 -0
  5. package/dist/dom/scroll-to.cjs +74 -0
  6. package/dist/hooks/use-boolean.cjs +36 -0
  7. package/dist/hooks/use-click-away.cjs +29 -0
  8. package/dist/hooks/{use-click-away.js → use-click-away.mjs} +3 -3
  9. package/dist/hooks/use-controlled-state.cjs +39 -0
  10. package/dist/hooks/{use-controlled-state.js → use-controlled-state.mjs} +3 -3
  11. package/dist/hooks/use-counter.cjs +61 -0
  12. package/dist/hooks/{use-counter.js → use-counter.mjs} +2 -2
  13. package/dist/hooks/use-debounce-callback.cjs +83 -0
  14. package/dist/hooks/{use-debounce-callback.js → use-debounce-callback.mjs} +4 -4
  15. package/dist/hooks/use-default.cjs +16 -0
  16. package/dist/hooks/{use-default.js → use-default.mjs} +1 -1
  17. package/dist/hooks/use-device-pixel-ratio.cjs +22 -0
  18. package/dist/hooks/{use-device-pixel-ratio.js → use-device-pixel-ratio.mjs} +1 -1
  19. package/dist/hooks/use-event.cjs +16 -0
  20. package/dist/hooks/use-focus.cjs +33 -0
  21. package/dist/hooks/{use-focus.js → use-focus.mjs} +2 -2
  22. package/dist/hooks/use-force-update.cjs +23 -0
  23. package/dist/hooks/use-hover.cjs +27 -0
  24. package/dist/hooks/{use-hover.js → use-hover.mjs} +3 -3
  25. package/dist/hooks/use-identity.cjs +22 -0
  26. package/dist/hooks/use-image-loader.cjs +65 -0
  27. package/dist/hooks/use-infinite-scroll.cjs +64 -0
  28. package/dist/hooks/{use-infinite-scroll.js → use-infinite-scroll.mjs} +2 -2
  29. package/dist/hooks/use-is-mounted.cjs +35 -0
  30. package/dist/hooks/{use-is-mounted.js → use-is-mounted.mjs} +1 -1
  31. package/dist/hooks/use-local-storage-state.cjs +9 -0
  32. package/dist/hooks/{use-local-storage-state.js → use-local-storage-state.mjs} +1 -1
  33. package/dist/hooks/use-media-query.cjs +55 -0
  34. package/dist/hooks/{use-media-query.js → use-media-query.mjs} +3 -3
  35. package/dist/hooks/use-memorable.cjs +16 -0
  36. package/dist/hooks/use-mount.cjs +18 -0
  37. package/dist/hooks/{use-mount.js → use-mount.mjs} +1 -1
  38. package/dist/hooks/use-mounted.cjs +18 -0
  39. package/dist/hooks/{use-mounted.js → use-mounted.mjs} +1 -1
  40. package/dist/hooks/use-mutate-observer.cjs +30 -0
  41. package/dist/hooks/{use-mutate-observer.js → use-mutate-observer.mjs} +3 -3
  42. package/dist/hooks/use-raf.cjs +28 -0
  43. package/dist/hooks/{use-raf.js → use-raf.mjs} +1 -1
  44. package/dist/hooks/use-reactive.cjs +32 -0
  45. package/dist/hooks/{use-reactive.js → use-reactive.mjs} +1 -1
  46. package/dist/hooks/use-refs.cjs +33 -0
  47. package/dist/hooks/{use-refs.js → use-refs.mjs} +1 -1
  48. package/dist/hooks/use-scroll-locker.cjs +99 -0
  49. package/dist/hooks/{use-scroll-locker.js → use-scroll-locker.mjs} +2 -2
  50. package/dist/hooks/use-scrollable.cjs +45 -0
  51. package/dist/hooks/{use-scrollable.js → use-scrollable.mjs} +1 -1
  52. package/dist/hooks/use-session-storage-state.cjs +9 -0
  53. package/dist/hooks/{use-session-storage-state.js → use-session-storage-state.mjs} +1 -1
  54. package/dist/hooks/use-storage-state.cjs +49 -0
  55. package/dist/hooks/{use-storage-state.js → use-storage-state.mjs} +1 -1
  56. package/dist/hooks/use-throttle-callback.cjs +85 -0
  57. package/dist/hooks/{use-throttle-callback.js → use-throttle-callback.mjs} +4 -4
  58. package/dist/hooks/use-timeout.cjs +70 -0
  59. package/dist/hooks/{use-timeout.js → use-timeout.mjs} +2 -2
  60. package/dist/hooks/use-timer.cjs +34 -0
  61. package/dist/hooks/{use-timer.js → use-timer.mjs} +1 -1
  62. package/dist/hooks/use-togglable.cjs +191 -0
  63. package/dist/hooks/{use-togglable.js → use-togglable.mjs} +2 -2
  64. package/dist/hooks/use-unmount.cjs +17 -0
  65. package/dist/hooks/use-update-effect.cjs +15 -0
  66. package/dist/hooks/{use-update-effect.js → use-update-effect.mjs} +2 -2
  67. package/dist/index.cjs +136 -0
  68. package/dist/index.mjs +65 -0
  69. package/dist/is/is-array.cjs +11 -0
  70. package/dist/is/is-dom-usable.cjs +12 -0
  71. package/dist/is/is-empty.cjs +27 -0
  72. package/dist/is/{is-empty.js → is-empty.mjs} +3 -3
  73. package/dist/is/is-function.cjs +11 -0
  74. package/dist/is/is-html-element.cjs +13 -0
  75. package/dist/is/is-html-input-element.cjs +13 -0
  76. package/dist/is/{is-html-input-element.js → is-html-input-element.mjs} +1 -1
  77. package/dist/is/is-mobile.cjs +15 -0
  78. package/dist/is/is-null.cjs +11 -0
  79. package/dist/is/is-number.cjs +7 -0
  80. package/dist/is/is-object.cjs +13 -0
  81. package/dist/is/is-overflow.cjs +16 -0
  82. package/dist/is/is-primitive.cjs +11 -0
  83. package/dist/is/is-refable.cjs +36 -0
  84. package/dist/is/is-set.cjs +11 -0
  85. package/dist/is/is-string.cjs +7 -0
  86. package/dist/is/is-style-element.cjs +11 -0
  87. package/dist/is/is-thenable.cjs +11 -0
  88. package/dist/is/is-undefined.cjs +11 -0
  89. package/dist/is/is-void.cjs +14 -0
  90. package/dist/is/{is-void.js → is-void.mjs} +2 -2
  91. package/dist/utils/chain.cjs +17 -0
  92. package/dist/utils/clamp.cjs +15 -0
  93. package/dist/utils/clone.cjs +19 -0
  94. package/dist/utils/{clone.js → clone.mjs} +2 -2
  95. package/dist/utils/clsx.cjs +34 -0
  96. package/dist/utils/{clsx.js → clsx.mjs} +4 -4
  97. package/dist/utils/debounce.cjs +34 -0
  98. package/dist/utils/{debounce.js → debounce.mjs} +2 -2
  99. package/dist/utils/effect.cjs +18 -0
  100. package/dist/utils/{effect.js → effect.mjs} +1 -1
  101. package/dist/utils/exclude.cjs +20 -0
  102. package/dist/utils/range.cjs +18 -0
  103. package/dist/utils/replace.cjs +22 -0
  104. package/dist/utils/{replace.js → replace.mjs} +1 -1
  105. package/dist/utils/set-style.cjs +23 -0
  106. package/dist/utils/tagged-template-literals.cjs +34 -0
  107. package/dist/utils/throttle.cjs +34 -0
  108. package/dist/utils/{throttle.js → throttle.mjs} +2 -2
  109. package/dist/utils/to-array.cjs +27 -0
  110. package/dist/utils/{to-array.js → to-array.mjs} +1 -1
  111. package/dist/utils/to-form-data.cjs +29 -0
  112. package/dist/utils/{to-form-data.js → to-form-data.mjs} +1 -1
  113. package/dist/utils/to-function.cjs +15 -0
  114. package/dist/utils/{to-function.js → to-function.mjs} +1 -1
  115. package/dist/utils/toggle.cjs +32 -0
  116. package/dist/utils/{toggle.js → toggle.mjs} +1 -1
  117. package/dist/utils/unique.cjs +19 -0
  118. package/dist/utils/waitable.cjs +99 -0
  119. package/dist/utils/{waitable.js → waitable.mjs} +1 -1
  120. package/package.json +9 -3
  121. package/dist/dom/index.js +0 -2
  122. package/dist/index.js +0 -65
  123. /package/dist/dom/{contains.js → contains.mjs} +0 -0
  124. /package/dist/dom/{scroll-to.js → scroll-to.mjs} +0 -0
  125. /package/dist/hooks/{use-boolean.js → use-boolean.mjs} +0 -0
  126. /package/dist/hooks/{use-event.js → use-event.mjs} +0 -0
  127. /package/dist/hooks/{use-force-update.js → use-force-update.mjs} +0 -0
  128. /package/dist/hooks/{use-identity.js → use-identity.mjs} +0 -0
  129. /package/dist/hooks/{use-image-loader.js → use-image-loader.mjs} +0 -0
  130. /package/dist/hooks/{use-memorable.js → use-memorable.mjs} +0 -0
  131. /package/dist/hooks/{use-unmount.js → use-unmount.mjs} +0 -0
  132. /package/dist/is/{is-array.js → is-array.mjs} +0 -0
  133. /package/dist/is/{is-dom-usable.js → is-dom-usable.mjs} +0 -0
  134. /package/dist/is/{is-function.js → is-function.mjs} +0 -0
  135. /package/dist/is/{is-html-element.js → is-html-element.mjs} +0 -0
  136. /package/dist/is/{is-mobile.js → is-mobile.mjs} +0 -0
  137. /package/dist/is/{is-null.js → is-null.mjs} +0 -0
  138. /package/dist/is/{is-number.js → is-number.mjs} +0 -0
  139. /package/dist/is/{is-object.js → is-object.mjs} +0 -0
  140. /package/dist/is/{is-overflow.js → is-overflow.mjs} +0 -0
  141. /package/dist/is/{is-primitive.js → is-primitive.mjs} +0 -0
  142. /package/dist/is/{is-refable.js → is-refable.mjs} +0 -0
  143. /package/dist/is/{is-set.js → is-set.mjs} +0 -0
  144. /package/dist/is/{is-string.js → is-string.mjs} +0 -0
  145. /package/dist/is/{is-style-element.js → is-style-element.mjs} +0 -0
  146. /package/dist/is/{is-thenable.js → is-thenable.mjs} +0 -0
  147. /package/dist/is/{is-undefined.js → is-undefined.mjs} +0 -0
  148. /package/dist/utils/{chain.js → chain.mjs} +0 -0
  149. /package/dist/utils/{clamp.js → clamp.mjs} +0 -0
  150. /package/dist/utils/{exclude.js → exclude.mjs} +0 -0
  151. /package/dist/utils/{range.js → range.mjs} +0 -0
  152. /package/dist/utils/{set-style.js → set-style.mjs} +0 -0
  153. /package/dist/utils/{tagged-template-literals.js → tagged-template-literals.mjs} +0 -0
  154. /package/dist/utils/{unique.js → unique.mjs} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { useRef, useCallback } from 'react';
2
- import { scrollTo as _scrollTo } from '../dom/scroll-to.js';
2
+ import { scrollTo as _scrollTo } from '../dom/scroll-to.mjs';
3
3
 
4
4
  /**
5
5
  * @description
@@ -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;
@@ -1,4 +1,4 @@
1
- import { useStorageState } from './use-storage-state.js';
1
+ import { useStorageState } from './use-storage-state.mjs';
2
2
 
3
3
  var useSessionStorageState = function useSessionStorageState(key, useBy) {
4
4
  return useStorageState(key, sessionStorage, useBy);
@@ -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.js';
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.js';
3
- import { useEvent } from './use-event.js';
4
- import { isFunction } from '../is/is-function.js';
5
- import { useDefault } from './use-default.js';
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.js';
4
- import { useMounted } from './use-mounted.js';
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;
@@ -1,5 +1,5 @@
1
1
  import { useRef, useCallback } from 'react';
2
- import { useUnmount } from './use-unmount.js';
2
+ import { useUnmount } from './use-unmount.mjs';
3
3
 
4
4
  /**
5
5
  * @description
@@ -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.js';
9
- import { useEvent } from './use-event.js';
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.js';
3
- import { useIsMounted } from './use-is-mounted.js';
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 () {