@aiszlab/relax 1.2.55 → 1.2.56

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.
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ export {};
@@ -15,4 +15,4 @@ import { type Callable } from './use-event';
15
15
  * @example
16
16
  * 1000
17
17
  */
18
- export declare const useDebounceCallback: <T extends Callable, R extends unknown[] = Parameters<T>>(debouncer: T | Debouncer<T, R>, wait?: number) => Debounced<T>;
18
+ export declare const useDebounceCallback: <T extends Callable, R extends Array<unknown> = Parameters<T>>(debouncer: T | Debouncer<T, R>, wait?: number) => Debounced<T>;
@@ -1,2 +1,2 @@
1
1
  export type Callable = (...args: any) => any;
2
- export declare const useEvent: <T extends Function | Callable>(callback: T) => T;
2
+ export declare const useEvent: <T extends Callable | Function>(callback: T) => T;
@@ -11,5 +11,5 @@ type Props<T> = Pick<DOMAttributes<T>, 'onFocus' | 'onBlur'> & {
11
11
  * dom attributes
12
12
  */
13
13
  type UsedFocus<T> = [boolean, Required<Pick<DOMAttributes<T>, 'onFocus' | 'onBlur'>>];
14
- export declare const useFocus: <T extends Element = Element>(props?: Props<T> | undefined) => UsedFocus<T>;
14
+ export declare const useFocus: <T extends Element = Element>(props?: Props<T>) => UsedFocus<T>;
15
15
  export {};
@@ -4,5 +4,5 @@ type UseHoverBy<T> = {
4
4
  onLeave?: DOMAttributes<T>['onPointerLeave'];
5
5
  };
6
6
  type UsedHover<T> = [boolean, Required<Pick<DOMAttributes<T>, 'onPointerEnter' | 'onPointerLeave'>>];
7
- export declare const useHover: <T extends Element = Element>(props?: UseHoverBy<T> | undefined) => UsedHover<T>;
7
+ export declare const useHover: <T extends Element = Element>(props?: UseHoverBy<T>) => UsedHover<T>;
8
8
  export {};
@@ -3,5 +3,5 @@
3
3
  * raf
4
4
  */
5
5
  export declare const useRaf: (_callback: Function, { timely }?: {
6
- timely?: boolean | undefined;
6
+ timely?: boolean;
7
7
  }) => () => void;
@@ -15,4 +15,4 @@ import { type Callable } from './use-event';
15
15
  * @example
16
16
  * 1000
17
17
  */
18
- export declare const useThrottleCallback: <T extends Callable, R extends unknown[] = Parameters<T>>(throttler: T | Throttler<T, R>, wait?: number) => Throttled<T>;
18
+ export declare const useThrottleCallback: <T extends Callable, R extends Array<unknown> = Parameters<T>>(throttler: T | Throttler<T, R>, wait?: number) => Throttled<T>;
@@ -0,0 +1,48 @@
1
+ import { type Key } from 'react';
2
+ /**
3
+ * @description
4
+ * togglable key
5
+ */
6
+ type TogglableKey = {
7
+ /**
8
+ * @description
9
+ * unique key
10
+ */
11
+ key: Key;
12
+ /**
13
+ * @description
14
+ * children
15
+ */
16
+ children?: TogglableKey[];
17
+ };
18
+ /**
19
+ * @description
20
+ * extra options
21
+ */
22
+ type Options = {
23
+ /**
24
+ * @description
25
+ * default toggled
26
+ */
27
+ isDefaultToggled?: boolean;
28
+ /**
29
+ * @description
30
+ * toggled keys
31
+ */
32
+ toggledKeys?: Key[];
33
+ /**
34
+ * @description
35
+ * on toggle callback
36
+ */
37
+ onToggle?: (keys: Key[]) => void;
38
+ };
39
+ /**
40
+ * @description
41
+ * toggle able
42
+ */
43
+ export declare const useTogglable: (togglableKeys: TogglableKey[], { onToggle, ...options }?: Options) => {
44
+ toggledKeys: Set<Key>;
45
+ isToggled: (key: Key) => boolean;
46
+ toggle: (key: Key) => void;
47
+ };
48
+ export {};
@@ -0,0 +1,177 @@
1
+ import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, createClass as _createClass, classPrivateFieldGet2 as _classPrivateFieldGet2, classCallCheck as _classCallCheck, classPrivateFieldInitSpec as _classPrivateFieldInitSpec, classPrivateFieldSet2 as _classPrivateFieldSet2 } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useMemo, useCallback } from 'react';
3
+ import { useControlledState } from './use-controlled-state.js';
4
+ import { useEvent } from './use-event.js';
5
+
6
+ var _excluded = ["onToggle"];
7
+ var _groupedLeaves = /*#__PURE__*/new WeakMap();
8
+ var Tree = /*#__PURE__*/function () {
9
+ function Tree() {
10
+ _classCallCheck(this, Tree);
11
+ _classPrivateFieldInitSpec(this, _groupedLeaves, void 0);
12
+ _classPrivateFieldSet2(_groupedLeaves, this, new Map());
13
+ }
14
+ return _createClass(Tree, [{
15
+ key: "groupedLeaves",
16
+ get: function get() {
17
+ return _classPrivateFieldGet2(_groupedLeaves, this);
18
+ }
19
+ }, {
20
+ key: "grow",
21
+ value: function grow(togglableKey) {
22
+ // create leaf, leaf will auto trigger tree collect callback
23
+ new Leaf({
24
+ key: togglableKey.key,
25
+ parent: null,
26
+ belongTo: this
27
+ }).grow(togglableKey.children);
28
+ return this;
29
+ }
30
+ }, {
31
+ key: "collect",
32
+ value: function collect(leaf) {
33
+ _classPrivateFieldGet2(_groupedLeaves, this).has(leaf.key) ? _classPrivateFieldGet2(_groupedLeaves, this).get(leaf.key).add(leaf) : _classPrivateFieldGet2(_groupedLeaves, this).set(leaf.key, new Set([leaf]));
34
+ }
35
+ }, {
36
+ key: "toggle",
37
+ value: function toggle(key, toggledKeys) {
38
+ var hasToggled = toggledKeys.has(key);
39
+ var isToggled = !hasToggled;
40
+ return this.toggleBy(key, isToggled, toggledKeys);
41
+ }
42
+ }, {
43
+ key: "toggleBy",
44
+ value: function toggleBy(key, isToggled, toggledKeys) {
45
+ var _classPrivateFieldGet2$1;
46
+ return Array.from((_classPrivateFieldGet2$1 = _classPrivateFieldGet2(_groupedLeaves, this).get(key)) !== null && _classPrivateFieldGet2$1 !== void 0 ? _classPrivateFieldGet2$1 : []).reduce(function (prev, leaf) {
47
+ // deep fall, add or remove child key
48
+ // deep rise, add or remove parent key
49
+ return leaf.rise(isToggled, leaf.fall(isToggled, prev));
50
+ }, new Set(toggledKeys));
51
+ }
52
+ }]);
53
+ }();
54
+ var _key = /*#__PURE__*/new WeakMap();
55
+ var _belongTo = /*#__PURE__*/new WeakMap();
56
+ var _parent = /*#__PURE__*/new WeakMap();
57
+ var _children = /*#__PURE__*/new WeakMap();
58
+ var Leaf = /*#__PURE__*/function () {
59
+ function Leaf(props) {
60
+ _classCallCheck(this, Leaf);
61
+ _classPrivateFieldInitSpec(this, _key, void 0);
62
+ _classPrivateFieldInitSpec(this, _belongTo, void 0);
63
+ _classPrivateFieldInitSpec(this, _parent, void 0);
64
+ _classPrivateFieldInitSpec(this, _children, void 0);
65
+ _classPrivateFieldSet2(_key, this, props.key);
66
+ _classPrivateFieldSet2(_parent, this, props.parent);
67
+ _classPrivateFieldSet2(_belongTo, this, props.belongTo);
68
+ _classPrivateFieldSet2(_children, this, []);
69
+ // when leaf has grew, let tree collect leaf
70
+ _classPrivateFieldGet2(_belongTo, this).collect(this);
71
+ }
72
+ return _createClass(Leaf, [{
73
+ key: "key",
74
+ get: function get() {
75
+ return _classPrivateFieldGet2(_key, this);
76
+ }
77
+ }, {
78
+ key: "grow",
79
+ value: function grow() {
80
+ var _this = this;
81
+ var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
82
+ if (children.length === 0) return this;
83
+ children.forEach(function (node) {
84
+ var child = new Leaf({
85
+ key: node.key,
86
+ parent: _this,
87
+ belongTo: _classPrivateFieldGet2(_belongTo, _this)
88
+ }).grow(node.children);
89
+ _classPrivateFieldGet2(_children, _this).push(child);
90
+ });
91
+ return this;
92
+ }
93
+ }, {
94
+ key: "rise",
95
+ value: function rise(isToggled, toggledKeys) {
96
+ var rised = new Set(toggledKeys);
97
+ if (isToggled) {
98
+ rised.add(_classPrivateFieldGet2(_key, this));
99
+ } else {
100
+ rised["delete"](_classPrivateFieldGet2(_key, this));
101
+ }
102
+ if (_classPrivateFieldGet2(_parent, this)) {
103
+ return _classPrivateFieldGet2(_parent, this).rise(isToggled, rised);
104
+ }
105
+ return rised;
106
+ }
107
+ }, {
108
+ key: "fall",
109
+ value: function fall(isToggled, toggledKeys) {
110
+ return _classPrivateFieldGet2(_children, this).reduce(function (prev, leaf) {
111
+ // deep loop, remove or add key
112
+ var fell = leaf.fall(isToggled, prev);
113
+ // toggle true, add current leaf key
114
+ // toggle false, remove current leaf key
115
+ if (isToggled) {
116
+ fell.add(leaf.key);
117
+ } else {
118
+ fell["delete"](leaf.key);
119
+ }
120
+ return fell;
121
+ }, new Set(toggledKeys));
122
+ }
123
+ }]);
124
+ }();
125
+ /**
126
+ * @description
127
+ * toggle able
128
+ */
129
+ var useTogglable = function useTogglable(togglableKeys) {
130
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
131
+ onToggle = _ref.onToggle,
132
+ options = _objectWithoutProperties(_ref, _excluded);
133
+ /// re-create tree when togglable keys changed
134
+ var tree = useMemo(function () {
135
+ return togglableKeys.reduce(function (_tree, togglable) {
136
+ return _tree.grow(togglable);
137
+ }, new Tree());
138
+ }, [togglableKeys]);
139
+ /// use controlled state to record toggled keys
140
+ var _useControlledState = useControlledState(options.toggledKeys, {
141
+ defaultState: function defaultState() {
142
+ return options.isDefaultToggled ? Array.from(Array.from(tree.groupedLeaves.values()).reduce(function (prev, leaves) {
143
+ leaves.forEach(function (leaf) {
144
+ return prev.add(leaf.key);
145
+ });
146
+ return prev;
147
+ }, new Set())) : [];
148
+ }
149
+ }),
150
+ _useControlledState2 = _slicedToArray(_useControlledState, 2),
151
+ _toggledKeys = _useControlledState2[0],
152
+ _setToggledKeys = _useControlledState2[1];
153
+ /// use set for toggled keys to make it read-only
154
+ var readableToggledKeys = useMemo(function () {
155
+ return new Set(_toggledKeys);
156
+ }, [_toggledKeys]);
157
+ /// check current key is toggled
158
+ var isToggled = useCallback(function (key) {
159
+ return !readableToggledKeys || readableToggledKeys.has(key);
160
+ }, [readableToggledKeys]);
161
+ /// toggle one key
162
+ var toggle = useEvent(function (key) {
163
+ // get new toggled keys by toggle current key
164
+ var _toggledKeys = Array.from(tree.toggle(key, readableToggledKeys));
165
+ // set state
166
+ _setToggledKeys(_toggledKeys);
167
+ // trigger on toggle callback
168
+ onToggle === null || onToggle === void 0 || onToggle(_toggledKeys);
169
+ });
170
+ return {
171
+ toggledKeys: readableToggledKeys,
172
+ isToggled: isToggled,
173
+ toggle: toggle
174
+ };
175
+ };
176
+
177
+ export { useTogglable };
@@ -1,9 +1,9 @@
1
1
  import { type Key } from 'react';
2
2
  /**
3
3
  * @description
4
- * toggleable key
4
+ * togglable key
5
5
  */
6
- type ToggleableKey = {
6
+ type TogglableKey = {
7
7
  /**
8
8
  * @description
9
9
  * unique key
@@ -13,7 +13,7 @@ type ToggleableKey = {
13
13
  * @description
14
14
  * children
15
15
  */
16
- children?: ToggleableKey[];
16
+ children?: TogglableKey[];
17
17
  };
18
18
  /**
19
19
  * @description
@@ -40,7 +40,7 @@ type Options = {
40
40
  * @description
41
41
  * toggle able
42
42
  */
43
- export declare const useToggleable: (toggleableKeys: ToggleableKey[], { onToggle, ...options }?: Options) => {
43
+ export declare const useTogglable: (togglableKeys: TogglableKey[], { onToggle, ...options }?: Options) => {
44
44
  toggledKeys: Set<Key>;
45
45
  isToggled: (key: Key) => boolean;
46
46
  toggle: (key: Key) => void;
@@ -1,6 +1,7 @@
1
1
  import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, createClass as _createClass, classPrivateFieldGet2 as _classPrivateFieldGet2, classCallCheck as _classCallCheck, classPrivateFieldInitSpec as _classPrivateFieldInitSpec, classPrivateFieldSet2 as _classPrivateFieldSet2 } from '../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import { useMemo, useCallback } from 'react';
3
3
  import { useControlledState } from './use-controlled-state.js';
4
+ import { useEvent } from './use-event.js';
4
5
 
5
6
  var _excluded = ["onToggle"];
6
7
  var _groupedLeaves = /*#__PURE__*/new WeakMap();
@@ -17,13 +18,13 @@ var Tree = /*#__PURE__*/function () {
17
18
  }
18
19
  }, {
19
20
  key: "grow",
20
- value: function grow(toggleableKey) {
21
+ value: function grow(togglableKey) {
21
22
  // create leaf, leaf will auto trigger tree collect callback
22
23
  new Leaf({
23
- key: toggleableKey.key,
24
+ key: togglableKey.key,
24
25
  parent: null,
25
26
  belongTo: this
26
- }).grow(toggleableKey.children);
27
+ }).grow(togglableKey.children);
27
28
  return this;
28
29
  }
29
30
  }, {
@@ -35,13 +36,14 @@ var Tree = /*#__PURE__*/function () {
35
36
  key: "toggle",
36
37
  value: function toggle(key, toggledKeys) {
37
38
  var hasToggled = toggledKeys.has(key);
38
- var _isToggled = !hasToggled;
39
- return this.toggleBy(key, _isToggled, toggledKeys);
39
+ var isToggled = !hasToggled;
40
+ return this.toggleBy(key, isToggled, toggledKeys);
40
41
  }
41
42
  }, {
42
43
  key: "toggleBy",
43
44
  value: function toggleBy(key, isToggled, toggledKeys) {
44
45
  var _classPrivateFieldGet2$1;
46
+ debugger;
45
47
  return Array.from((_classPrivateFieldGet2$1 = _classPrivateFieldGet2(_groupedLeaves, this).get(key)) !== null && _classPrivateFieldGet2$1 !== void 0 ? _classPrivateFieldGet2$1 : []).reduce(function (prev, leaf) {
46
48
  // deep fall, add or remove child key
47
49
  var fell = leaf.fall(isToggled, prev);
@@ -79,17 +81,16 @@ var Leaf = /*#__PURE__*/function () {
79
81
  key: "grow",
80
82
  value: function grow() {
81
83
  var _this = this;
82
- var toggleableKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
83
- if (toggleableKeys.length > 0) {
84
- toggleableKeys.forEach(function (_toggleableKey) {
85
- var child = new Leaf({
86
- key: _toggleableKey.key,
87
- parent: _this,
88
- belongTo: _classPrivateFieldGet2(_belongTo, _this)
89
- }).grow(_toggleableKey.children);
90
- _classPrivateFieldGet2(_children, _this).push(child);
91
- });
92
- }
84
+ var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
85
+ if (children.length === 0) return this;
86
+ children.forEach(function (node) {
87
+ var child = new Leaf({
88
+ key: node.key,
89
+ parent: _this,
90
+ belongTo: _classPrivateFieldGet2(_belongTo, _this)
91
+ }).grow(node.children);
92
+ _classPrivateFieldGet2(_children, _this).push(child);
93
+ });
93
94
  return this;
94
95
  }
95
96
  }, {
@@ -135,16 +136,16 @@ var Leaf = /*#__PURE__*/function () {
135
136
  * @description
136
137
  * toggle able
137
138
  */
138
- var useToggleable = function useToggleable(toggleableKeys) {
139
+ var useTogglable = function useTogglable(togglableKeys) {
139
140
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
140
141
  onToggle = _ref.onToggle,
141
142
  options = _objectWithoutProperties(_ref, _excluded);
142
- /// re-create tree when toggleable keys changed
143
+ /// re-create tree when togglable keys changed
143
144
  var tree = useMemo(function () {
144
- return toggleableKeys.reduce(function (_tree, toggleable) {
145
- return _tree.grow(toggleable);
145
+ return togglableKeys.reduce(function (_tree, togglable) {
146
+ return _tree.grow(togglable);
146
147
  }, new Tree());
147
- }, [toggleableKeys]);
148
+ }, [togglableKeys]);
148
149
  /// use controlled state to record toggled keys
149
150
  var _useControlledState = useControlledState(options.toggledKeys, {
150
151
  defaultState: function defaultState() {
@@ -168,14 +169,14 @@ var useToggleable = function useToggleable(toggleableKeys) {
168
169
  return !readableToggledKeys || readableToggledKeys.has(key);
169
170
  }, [readableToggledKeys]);
170
171
  /// toggle one key
171
- var toggle = useCallback(function (key) {
172
+ var toggle = useEvent(function (key) {
172
173
  // get new toggled keys by toggle current key
173
174
  var _toggledKeys = Array.from(tree.toggle(key, readableToggledKeys));
174
175
  // set state
175
176
  _setToggledKeys(_toggledKeys);
176
177
  // trigger on toggle callback
177
178
  onToggle === null || onToggle === void 0 || onToggle(_toggledKeys);
178
- }, [tree, readableToggledKeys, _setToggledKeys, onToggle]);
179
+ });
179
180
  return {
180
181
  toggledKeys: readableToggledKeys,
181
182
  isToggled: isToggled,
@@ -183,4 +184,4 @@ var useToggleable = function useToggleable(toggleableKeys) {
183
184
  };
184
185
  };
185
186
 
186
- export { useToggleable };
187
+ export { useTogglable };
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ export { useScrollLocker } from './hooks/use-scroll-locker';
15
15
  export { useForceUpdate } from './hooks/use-force-update';
16
16
  export { useScrollable } from './hooks/use-scrollable';
17
17
  export { useRefs } from './hooks/use-refs';
18
- export { useToggleable } from './hooks/use-toggleable';
18
+ export { useTogglable } from './hooks/use-togglable';
19
19
  export { useEvent } from './hooks/use-event';
20
20
  export { useUpdateEffect } from './hooks/use-update-effect';
21
21
  export { useCounter } from './hooks/use-counter';
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ export { useScrollLocker } from './hooks/use-scroll-locker.js';
11
11
  export { useForceUpdate } from './hooks/use-force-update.js';
12
12
  export { useScrollable } from './hooks/use-scrollable.js';
13
13
  export { useRefs } from './hooks/use-refs.js';
14
- export { useToggleable } from './hooks/use-toggleable.js';
14
+ export { useTogglable } from './hooks/use-togglable.js';
15
15
  export { useEvent } from './hooks/use-event.js';
16
16
  export { useUpdateEffect } from './hooks/use-update-effect.js';
17
17
  export { useCounter } from './hooks/use-counter.js';
@@ -20,4 +20,4 @@ export type Debouncer<T extends Callable, R extends Array<unknown> = Parameters<
20
20
  callback: (...args: R) => ReturnType<T>;
21
21
  pipe: (...args: Parameters<T>) => R | Promise<R>;
22
22
  };
23
- export declare const debounce: <T extends Callable, R extends unknown[] = Parameters<T>>(debouncer: T | Debouncer<T, R>, wait: number) => Debounced<T>;
23
+ export declare const debounce: <T extends Callable, R extends Array<unknown> = Parameters<T>>(debouncer: Debouncer<T, R> | T, wait: number) => Debounced<T>;
@@ -7,4 +7,4 @@
7
7
  * @example
8
8
  * exclude([1, 2, 3, 4, 5], [2, 4]) // [1, 3, 5]
9
9
  */
10
- export declare const exclude: <T, E = unknown>(value: T[], _excludeBy: E[]) => Exclude<T, E>[];
10
+ export declare const exclude: <T, E = unknown>(value: Array<T>, _excludeBy: Array<E>) => Array<Exclude<T, E>>;
@@ -2,4 +2,4 @@ import type { Debounced, Debouncer } from './debounce';
2
2
  import { type Callable } from '../hooks/use-event';
3
3
  export type Throttled<T extends Callable> = Debounced<T>;
4
4
  export type Throttler<T extends Callable, R extends Array<unknown> = Parameters<T>> = Debouncer<T, R>;
5
- export declare const throttle: <T extends Callable, R extends unknown[] = Parameters<T>>(throttler: T | Throttler<T, R>, wait: number) => Throttled<T>;
5
+ export declare const throttle: <T extends Callable, R extends Array<unknown> = Parameters<T>>(throttler: Throttler<T, R> | T, wait: number) => Throttled<T>;
@@ -14,5 +14,5 @@ type Options = {
14
14
  * @description
15
15
  * convert any type data to a array
16
16
  */
17
- export declare const toArray: <T extends unknown = unknown>(value: T | T[], { separator }?: Options) => T[];
17
+ export declare const toArray: <T extends unknown = unknown>(value: T | Array<T>, { separator }?: Options) => Array<T>;
18
18
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiszlab/relax",
3
- "version": "1.2.55",
3
+ "version": "1.2.56",
4
4
  "description": "react utils collection",
5
5
  "type": "module",
6
6
  "exports": {
@@ -26,9 +26,9 @@
26
26
  "rxjs": "^7.8.1"
27
27
  },
28
28
  "devDependencies": {
29
- "@babel/core": "^7.24.0",
30
- "@babel/preset-env": "^7.24.0",
31
- "@babel/preset-typescript": "^7.24.1",
29
+ "@babel/core": "^7.24.7",
30
+ "@babel/preset-env": "^7.24.7",
31
+ "@babel/preset-typescript": "^7.24.7",
32
32
  "@rollup/plugin-babel": "^6.0.4",
33
33
  "@rollup/plugin-node-resolve": "^15.1.0",
34
34
  "@rollup/plugin-typescript": "^11.1.6",
@@ -42,7 +42,7 @@
42
42
  "react": "18",
43
43
  "react-dom": "18",
44
44
  "rollup": "^4.17.2",
45
- "typescript": "5.3.3"
45
+ "typescript": "5.5.2"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "react": "18",