@aiszlab/relax 2.0.6-beta.7 → 2.0.6-beta.8

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 aiszlab
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2023 aiszlab
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
- # relax
2
- favorite and easy hooks for react
3
-
4
- ## i alaways like writting many hooks for mine project
1
+ # relax
2
+ favorite and easy hooks for react
3
+
4
+ ## i alaways like writting many hooks for mine project
5
5
  ## so i need a hooks project to support me
@@ -8,7 +8,8 @@ var isFunction = require('../is/is-function.cjs');
8
8
 
9
9
  function useControlledState(controlledState) {
10
10
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
11
- defaultState = _ref.defaultState;
11
+ defaultState = _ref.defaultState,
12
+ onUpdate = _ref.onUpdate;
12
13
  // initialize state
13
14
  var _useState = react.useState(function () {
14
15
  // default use controlled state
@@ -29,6 +30,9 @@ function useControlledState(controlledState) {
29
30
  if (!isUndefined.isUndefined(controlledState)) {
30
31
  return;
31
32
  }
33
+ if (controlledState !== _state) {
34
+ onUpdate === null || onUpdate === void 0 || onUpdate(controlledState, _state);
35
+ }
32
36
  _setState(defaultState !== null && defaultState !== void 0 ? defaultState : controlledState);
33
37
  }, [controlledState]);
34
38
  // use controlled
@@ -1,11 +1,16 @@
1
1
  import { type Dispatch, type SetStateAction } from "react";
2
2
  import type { Partialable, RequiredIn, State } from "@aiszlab/relax/types";
3
- type UseControlledStateBy<S> = {
3
+ type UsingControlledState<S> = {
4
4
  /**
5
5
  * @description
6
6
  * default value
7
7
  */
8
8
  defaultState?: State<S>;
9
+ /**
10
+ * @description
11
+ * value update callback
12
+ */
13
+ onUpdate?: (next: S | undefined, prev: S | undefined) => void;
9
14
  };
10
15
  type UsedControlledState<T> = [T, Dispatch<SetStateAction<T>>];
11
16
  /**
@@ -16,7 +21,7 @@ type UsedControlledState<T> = [T, Dispatch<SetStateAction<T>>];
16
21
  */
17
22
  declare function useControlledState<T>(): UsedControlledState<Partialable<T>>;
18
23
  declare function useControlledState<T>(controlledState: T): UsedControlledState<T>;
19
- declare function useControlledState<T>(controlledState: T, useControlledStateBy: UseControlledStateBy<undefined>): UsedControlledState<T>;
20
- declare function useControlledState<T>(controlledState: Partialable<T>, useControlledStateBy: RequiredIn<UseControlledStateBy<T>, "defaultState">): UsedControlledState<T>;
21
- declare function useControlledState<T>(controlledState: T, useControlledStateBy: UseControlledStateBy<T>): UsedControlledState<T>;
24
+ declare function useControlledState<T>(controlledState: T, usingControlledState: UsingControlledState<undefined>): UsedControlledState<T>;
25
+ declare function useControlledState<T>(controlledState: Partialable<T>, usingControlledState: RequiredIn<UsingControlledState<T>, "defaultState">): UsedControlledState<T>;
26
+ declare function useControlledState<T>(controlledState: T, usingControlledState: UsingControlledState<T>): UsedControlledState<T>;
22
27
  export { useControlledState };
@@ -6,7 +6,8 @@ import { isFunction } from '../is/is-function.mjs';
6
6
 
7
7
  function useControlledState(controlledState) {
8
8
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
9
- defaultState = _ref.defaultState;
9
+ defaultState = _ref.defaultState,
10
+ onUpdate = _ref.onUpdate;
10
11
  // initialize state
11
12
  var _useState = useState(function () {
12
13
  // default use controlled state
@@ -27,6 +28,9 @@ function useControlledState(controlledState) {
27
28
  if (!isUndefined(controlledState)) {
28
29
  return;
29
30
  }
31
+ if (controlledState !== _state) {
32
+ onUpdate === null || onUpdate === void 0 || onUpdate(controlledState, _state);
33
+ }
30
34
  _setState(defaultState !== null && defaultState !== void 0 ? defaultState : controlledState);
31
35
  }, [controlledState]);
32
36
  // use controlled
@@ -2,16 +2,16 @@
2
2
 
3
3
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
4
  var react = require('react');
5
- var useDebounceCallback = require('./use-debounce-callback.cjs');
6
5
  var useMounted = require('./use-mounted.cjs');
6
+ var useEvent = require('./use-event.cjs');
7
7
 
8
8
  /**
9
9
  * @description
10
10
  * listen parent size change
11
11
  * provider with\height to child
12
12
  */
13
- var useParentSize = function useParentSize() {
14
- var parentRef = react.useRef(null);
13
+ var useElementSize = function useElementSize() {
14
+ var elementRef = react.useRef(null);
15
15
  var _useState = react.useState(0),
16
16
  _useState2 = _slicedToArray(_useState, 2),
17
17
  width = _useState2[0],
@@ -21,14 +21,12 @@ var useParentSize = function useParentSize() {
21
21
  height = _useState4[0],
22
22
  setHeight = _useState4[1];
23
23
  var _animation = react.useRef(0);
24
- var _useDebounceCallback = useDebounceCallback.useDebounceCallback(function (_ref) {
25
- var width = _ref.width,
26
- height = _ref.height;
27
- setWidth(width);
28
- setHeight(height);
29
- }, 300),
30
- resize = _useDebounceCallback.next,
31
- abort = _useDebounceCallback.abort;
24
+ var resize = useEvent.useEvent(function (_ref) {
25
+ var width = _ref.width,
26
+ height = _ref.height;
27
+ setWidth(width);
28
+ setHeight(height);
29
+ });
32
30
  useMounted.useMounted(function () {
33
31
  var resizer = new ResizeObserver(function (entries) {
34
32
  entries.forEach(function (entry) {
@@ -44,22 +42,20 @@ var useParentSize = function useParentSize() {
44
42
  });
45
43
  });
46
44
  });
47
- if (parentRef.current) {
48
- resizer.observe(parentRef.current);
45
+ if (elementRef.current) {
46
+ resizer.observe(elementRef.current);
49
47
  }
50
48
  return function () {
51
49
  var _resizer;
52
50
  cancelAnimationFrame(_animation.current);
53
51
  (_resizer = resizer) === null || _resizer === void 0 || _resizer.disconnect();
54
52
  resizer = null;
55
- abort();
56
53
  };
57
54
  });
58
- return {
59
- parentRef: parentRef,
55
+ return [elementRef, {
60
56
  width: width,
61
57
  height: height
62
- };
58
+ }];
63
59
  };
64
60
 
65
- exports.useParentSize = useParentSize;
61
+ exports.useElementSize = useElementSize;
@@ -0,0 +1,15 @@
1
+ import { RefObject } from "react";
2
+ type UsedElementSize<T extends HTMLElement> = [
3
+ RefObject<T | null>,
4
+ {
5
+ width: number;
6
+ height: number;
7
+ }
8
+ ];
9
+ /**
10
+ * @description
11
+ * listen parent size change
12
+ * provider with\height to child
13
+ */
14
+ export declare const useElementSize: <T extends HTMLElement = HTMLDivElement>() => UsedElementSize<T>;
15
+ export {};
@@ -1,15 +1,15 @@
1
1
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
2
  import { useRef, useState } from 'react';
3
- import { useDebounceCallback } from './use-debounce-callback.mjs';
4
3
  import { useMounted } from './use-mounted.mjs';
4
+ import { useEvent } from './use-event.mjs';
5
5
 
6
6
  /**
7
7
  * @description
8
8
  * listen parent size change
9
9
  * provider with\height to child
10
10
  */
11
- var useParentSize = function useParentSize() {
12
- var parentRef = useRef(null);
11
+ var useElementSize = function useElementSize() {
12
+ var elementRef = useRef(null);
13
13
  var _useState = useState(0),
14
14
  _useState2 = _slicedToArray(_useState, 2),
15
15
  width = _useState2[0],
@@ -19,14 +19,12 @@ var useParentSize = function useParentSize() {
19
19
  height = _useState4[0],
20
20
  setHeight = _useState4[1];
21
21
  var _animation = useRef(0);
22
- var _useDebounceCallback = useDebounceCallback(function (_ref) {
23
- var width = _ref.width,
24
- height = _ref.height;
25
- setWidth(width);
26
- setHeight(height);
27
- }, 300),
28
- resize = _useDebounceCallback.next,
29
- abort = _useDebounceCallback.abort;
22
+ var resize = useEvent(function (_ref) {
23
+ var width = _ref.width,
24
+ height = _ref.height;
25
+ setWidth(width);
26
+ setHeight(height);
27
+ });
30
28
  useMounted(function () {
31
29
  var resizer = new ResizeObserver(function (entries) {
32
30
  entries.forEach(function (entry) {
@@ -42,22 +40,20 @@ var useParentSize = function useParentSize() {
42
40
  });
43
41
  });
44
42
  });
45
- if (parentRef.current) {
46
- resizer.observe(parentRef.current);
43
+ if (elementRef.current) {
44
+ resizer.observe(elementRef.current);
47
45
  }
48
46
  return function () {
49
47
  var _resizer;
50
48
  cancelAnimationFrame(_animation.current);
51
49
  (_resizer = resizer) === null || _resizer === void 0 || _resizer.disconnect();
52
50
  resizer = null;
53
- abort();
54
51
  };
55
52
  });
56
- return {
57
- parentRef: parentRef,
53
+ return [elementRef, {
58
54
  width: width,
59
55
  height: height
60
- };
56
+ }];
61
57
  };
62
58
 
63
- export { useParentSize };
59
+ export { useElementSize };
@@ -4,41 +4,46 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
4
  var react = require('react');
5
5
  var toArray = require('../utils/to-array.cjs');
6
6
  var replaceAt = require('../utils/replace/replace-at.cjs');
7
+ var isDomUsable = require('../is/is-dom-usable.cjs');
7
8
 
8
9
  var useMediaQuery = function useMediaQuery(query) {
10
+ var queries = react.useMemo(function () {
11
+ return toArray.toArray(query);
12
+ }, [query]);
9
13
  var _query = react.useMemo(function () {
10
- return query.toString();
14
+ return JSON.stringify(query);
11
15
  }, [query]);
12
- var queries = toArray.toArray(query);
13
16
  var _useState = react.useState(function () {
17
+ if (!isDomUsable.isDomUsable()) return [];
14
18
  return queries.map(function (query) {
15
- var _globalThis$window$ma, _globalThis$window;
16
- return !!((_globalThis$window$ma = (_globalThis$window = globalThis.window).matchMedia) !== null && _globalThis$window$ma !== void 0 && (_globalThis$window$ma = _globalThis$window$ma.call(_globalThis$window, query)) !== null && _globalThis$window$ma !== void 0 && _globalThis$window$ma.matches);
19
+ return !!globalThis.matchMedia(query).matches;
17
20
  });
18
21
  }),
19
22
  _useState2 = _slicedToArray(_useState, 2),
20
23
  value = _useState2[0],
21
24
  setValue = _useState2[1];
22
- var onMediaQueryChange = react.useCallback(function (event, index) {
25
+ var changeIsMatched = react.useCallback(function (event, index) {
23
26
  setValue(function (prev) {
24
27
  return replaceAt.replaceAt(prev, index, event.matches);
25
28
  });
26
29
  }, []);
30
+ // only run when dom is usable
31
+ // when hook is executed, add listener to all media queries
32
+ // then on hook unmount, remove all listeners
27
33
  react.useEffect(function () {
28
- var mediaQueries = queries.map(function (query) {
29
- return globalThis.window.matchMedia(query);
34
+ if (!isDomUsable.isDomUsable()) return;
35
+ var mediaQueries = queries.map(function (_query) {
36
+ return globalThis.matchMedia(_query);
30
37
  });
31
- // listen media query change
32
38
  var cleaners = mediaQueries.map(function (mediaQuery, index) {
33
39
  var listener = function listener(event) {
34
- return onMediaQueryChange(event, index);
40
+ return changeIsMatched(event, index);
35
41
  };
36
42
  mediaQuery.addEventListener("change", listener);
37
43
  return function () {
38
44
  mediaQuery.removeEventListener("change", listener);
39
45
  };
40
46
  });
41
- // clean up all listeners
42
47
  return function () {
43
48
  cleaners.forEach(function (cleaner) {
44
49
  cleaner();
@@ -2,41 +2,46 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
2
  import { useMemo, useState, useCallback, useEffect } from 'react';
3
3
  import { toArray } from '../utils/to-array.mjs';
4
4
  import { replaceAt } from '../utils/replace/replace-at.mjs';
5
+ import { isDomUsable } from '../is/is-dom-usable.mjs';
5
6
 
6
7
  var useMediaQuery = function useMediaQuery(query) {
8
+ var queries = useMemo(function () {
9
+ return toArray(query);
10
+ }, [query]);
7
11
  var _query = useMemo(function () {
8
- return query.toString();
12
+ return JSON.stringify(query);
9
13
  }, [query]);
10
- var queries = toArray(query);
11
14
  var _useState = useState(function () {
15
+ if (!isDomUsable()) return [];
12
16
  return queries.map(function (query) {
13
- var _globalThis$window$ma, _globalThis$window;
14
- return !!((_globalThis$window$ma = (_globalThis$window = globalThis.window).matchMedia) !== null && _globalThis$window$ma !== void 0 && (_globalThis$window$ma = _globalThis$window$ma.call(_globalThis$window, query)) !== null && _globalThis$window$ma !== void 0 && _globalThis$window$ma.matches);
17
+ return !!globalThis.matchMedia(query).matches;
15
18
  });
16
19
  }),
17
20
  _useState2 = _slicedToArray(_useState, 2),
18
21
  value = _useState2[0],
19
22
  setValue = _useState2[1];
20
- var onMediaQueryChange = useCallback(function (event, index) {
23
+ var changeIsMatched = useCallback(function (event, index) {
21
24
  setValue(function (prev) {
22
25
  return replaceAt(prev, index, event.matches);
23
26
  });
24
27
  }, []);
28
+ // only run when dom is usable
29
+ // when hook is executed, add listener to all media queries
30
+ // then on hook unmount, remove all listeners
25
31
  useEffect(function () {
26
- var mediaQueries = queries.map(function (query) {
27
- return globalThis.window.matchMedia(query);
32
+ if (!isDomUsable()) return;
33
+ var mediaQueries = queries.map(function (_query) {
34
+ return globalThis.matchMedia(_query);
28
35
  });
29
- // listen media query change
30
36
  var cleaners = mediaQueries.map(function (mediaQuery, index) {
31
37
  var listener = function listener(event) {
32
- return onMediaQueryChange(event, index);
38
+ return changeIsMatched(event, index);
33
39
  };
34
40
  mediaQuery.addEventListener("change", listener);
35
41
  return function () {
36
42
  mediaQuery.removeEventListener("change", listener);
37
43
  };
38
44
  });
39
- // clean up all listeners
40
45
  return function () {
41
46
  cleaners.forEach(function (cleaner) {
42
47
  cleaner();
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var react = require('react');
5
+ var isNumber = require('../is/is-number.cjs');
6
+
7
+ /**
8
+ * @description 比较两个`css`单位的缩放比例
9
+ */
10
+ var useScale = function useScale(resize, originalSize) {
11
+ var _useState = react.useState(1),
12
+ _useState2 = _slicedToArray(_useState, 2),
13
+ scale = _useState2[0],
14
+ setScale = _useState2[1];
15
+ react.useLayoutEffect(function () {
16
+ var _parent = document.createElement("div");
17
+ _parent.style.width = "0px";
18
+ _parent.style.height = "0px";
19
+ _parent.style.position = "fixed";
20
+ _parent.style.overflow = "hidden";
21
+ var _resizedElement = document.createElement("div");
22
+ _resizedElement.style.width = isNumber.isNumber(resize) ? "".concat(resize, "px") : resize;
23
+ var _originalSizedElement = document.createElement("div");
24
+ _originalSizedElement.style.width = isNumber.isNumber(originalSize) ? "".concat(originalSize, "px") : originalSize;
25
+ _parent.appendChild(_resizedElement);
26
+ _parent.appendChild(_originalSizedElement);
27
+ document.body.appendChild(_parent);
28
+ var _resizedWidth = _resizedElement.offsetWidth;
29
+ var _originalSizedWidth = _originalSizedElement.offsetWidth;
30
+ if (_originalSizedWidth > 0) {
31
+ setScale(_resizedWidth / _originalSizedWidth);
32
+ } else {
33
+ setScale(1);
34
+ }
35
+ _parent.remove();
36
+ }, [resize, originalSize]);
37
+ return scale;
38
+ };
39
+
40
+ exports.useScale = useScale;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @description 比较两个`css`单位的缩放比例
3
+ */
4
+ export declare const useScale: (resize: string | number, originalSize: string | number) => number;
@@ -0,0 +1,38 @@
1
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
+ import { useState, useLayoutEffect } from 'react';
3
+ import { isNumber } from '../is/is-number.mjs';
4
+
5
+ /**
6
+ * @description 比较两个`css`单位的缩放比例
7
+ */
8
+ var useScale = function useScale(resize, originalSize) {
9
+ var _useState = useState(1),
10
+ _useState2 = _slicedToArray(_useState, 2),
11
+ scale = _useState2[0],
12
+ setScale = _useState2[1];
13
+ useLayoutEffect(function () {
14
+ var _parent = document.createElement("div");
15
+ _parent.style.width = "0px";
16
+ _parent.style.height = "0px";
17
+ _parent.style.position = "fixed";
18
+ _parent.style.overflow = "hidden";
19
+ var _resizedElement = document.createElement("div");
20
+ _resizedElement.style.width = isNumber(resize) ? "".concat(resize, "px") : resize;
21
+ var _originalSizedElement = document.createElement("div");
22
+ _originalSizedElement.style.width = isNumber(originalSize) ? "".concat(originalSize, "px") : originalSize;
23
+ _parent.appendChild(_resizedElement);
24
+ _parent.appendChild(_originalSizedElement);
25
+ document.body.appendChild(_parent);
26
+ var _resizedWidth = _resizedElement.offsetWidth;
27
+ var _originalSizedWidth = _originalSizedElement.offsetWidth;
28
+ if (_originalSizedWidth > 0) {
29
+ setScale(_resizedWidth / _originalSizedWidth);
30
+ } else {
31
+ setScale(1);
32
+ }
33
+ _parent.remove();
34
+ }, [resize, originalSize]);
35
+ return scale;
36
+ };
37
+
38
+ export { useScale };
@@ -20,7 +20,6 @@ var useStorageState = function useStorageState(key, storage) {
20
20
  }, [key]);
21
21
  react.useEffect(function () {
22
22
  var onStorageChange = function onStorageChange(event) {
23
- console.log("12321321321321321");
24
23
  if (event.key !== key) return;
25
24
  if (event.storageArea !== storage) return;
26
25
  setState(event.newValue);
@@ -18,7 +18,6 @@ var useStorageState = function useStorageState(key, storage) {
18
18
  }, [key]);
19
19
  useEffect(function () {
20
20
  var onStorageChange = function onStorageChange(event) {
21
- console.log("12321321321321321");
22
21
  if (event.key !== key) return;
23
22
  if (event.storageArea !== storage) return;
24
23
  setState(event.newValue);
@@ -24,13 +24,13 @@ var Tree = /*#__PURE__*/function () {
24
24
  }
25
25
  }, {
26
26
  key: "grow",
27
- value: function grow(togglableKey) {
27
+ value: function grow(toggleableKey) {
28
28
  // create leaf, leaf will auto trigger tree collect callback
29
29
  new Leaf({
30
- key: togglableKey.key,
30
+ key: toggleableKey.key,
31
31
  parent: null,
32
32
  belongTo: this
33
- }).grow(togglableKey.children);
33
+ }).grow(toggleableKey.children);
34
34
  return this;
35
35
  }
36
36
  }, {
@@ -142,19 +142,19 @@ var Leaf = /*#__PURE__*/function () {
142
142
  * @description
143
143
  * toggle able
144
144
  */
145
- var useTogglable = function useTogglable(togglableKeys) {
145
+ var useToggleable = function useToggleable(toggleableKeys) {
146
146
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
147
147
  onToggle = _ref.onToggle,
148
148
  _ref$defaultToggledKe = _ref.defaultToggledKeys,
149
149
  defaultToggledKeys = _ref$defaultToggledKe === void 0 ? [] : _ref$defaultToggledKe,
150
150
  isDefaultToggled = _ref.isDefaultToggled,
151
151
  toggledKeys = _ref.toggledKeys;
152
- // re-create tree when togglable keys changed
152
+ // re-create tree when toggleable keys changed
153
153
  var tree = react.useMemo(function () {
154
- return togglableKeys.reduce(function (_tree, togglable) {
155
- return _tree.grow(togglable);
154
+ return toggleableKeys.reduce(function (_tree, toggleable) {
155
+ return _tree.grow(toggleable);
156
156
  }, new Tree());
157
- }, [togglableKeys]);
157
+ }, [toggleableKeys]);
158
158
  // use controlled state to record toggled keys
159
159
  var _useControlledState = useControlledState.useControlledState(toggledKeys, {
160
160
  defaultState: function defaultState() {
@@ -188,4 +188,4 @@ var useTogglable = function useTogglable(togglableKeys) {
188
188
  };
189
189
  };
190
190
 
191
- exports.useTogglable = useTogglable;
191
+ exports.useToggleable = useToggleable;
@@ -1,9 +1,9 @@
1
1
  import { type Key } from "react";
2
2
  /**
3
3
  * @description
4
- * togglable key
4
+ * toggleable key
5
5
  */
6
- type TogglableKey = {
6
+ type ToggleableKey = {
7
7
  /**
8
8
  * @description
9
9
  * unique key
@@ -13,13 +13,13 @@ type TogglableKey = {
13
13
  * @description
14
14
  * children
15
15
  */
16
- children?: TogglableKey[];
16
+ children?: ToggleableKey[];
17
17
  };
18
18
  /**
19
19
  * @description
20
20
  * extra options
21
21
  */
22
- type UseTogglableOptions = {
22
+ type UseToggleableOptions = {
23
23
  /**
24
24
  * @description
25
25
  * default toggled
@@ -45,7 +45,7 @@ type UseTogglableOptions = {
45
45
  * @description
46
46
  * toggle able
47
47
  */
48
- export declare const useTogglable: (togglableKeys: TogglableKey[], { onToggle, defaultToggledKeys, isDefaultToggled, toggledKeys }?: UseTogglableOptions) => {
48
+ export declare const useToggleable: (toggleableKeys: ToggleableKey[], { onToggle, defaultToggledKeys, isDefaultToggled, toggledKeys }?: UseToggleableOptions) => {
49
49
  toggledKeys: Set<Key>;
50
50
  isToggled: (key: Key) => boolean;
51
51
  toggle: (key: Key) => void;
@@ -22,13 +22,13 @@ var Tree = /*#__PURE__*/function () {
22
22
  }
23
23
  }, {
24
24
  key: "grow",
25
- value: function grow(togglableKey) {
25
+ value: function grow(toggleableKey) {
26
26
  // create leaf, leaf will auto trigger tree collect callback
27
27
  new Leaf({
28
- key: togglableKey.key,
28
+ key: toggleableKey.key,
29
29
  parent: null,
30
30
  belongTo: this
31
- }).grow(togglableKey.children);
31
+ }).grow(toggleableKey.children);
32
32
  return this;
33
33
  }
34
34
  }, {
@@ -140,19 +140,19 @@ var Leaf = /*#__PURE__*/function () {
140
140
  * @description
141
141
  * toggle able
142
142
  */
143
- var useTogglable = function useTogglable(togglableKeys) {
143
+ var useToggleable = function useToggleable(toggleableKeys) {
144
144
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
145
145
  onToggle = _ref.onToggle,
146
146
  _ref$defaultToggledKe = _ref.defaultToggledKeys,
147
147
  defaultToggledKeys = _ref$defaultToggledKe === void 0 ? [] : _ref$defaultToggledKe,
148
148
  isDefaultToggled = _ref.isDefaultToggled,
149
149
  toggledKeys = _ref.toggledKeys;
150
- // re-create tree when togglable keys changed
150
+ // re-create tree when toggleable keys changed
151
151
  var tree = useMemo(function () {
152
- return togglableKeys.reduce(function (_tree, togglable) {
153
- return _tree.grow(togglable);
152
+ return toggleableKeys.reduce(function (_tree, toggleable) {
153
+ return _tree.grow(toggleable);
154
154
  }, new Tree());
155
- }, [togglableKeys]);
155
+ }, [toggleableKeys]);
156
156
  // use controlled state to record toggled keys
157
157
  var _useControlledState = useControlledState(toggledKeys, {
158
158
  defaultState: function defaultState() {
@@ -186,4 +186,4 @@ var useTogglable = function useTogglable(togglableKeys) {
186
186
  };
187
187
  };
188
188
 
189
- export { useTogglable };
189
+ export { useToggleable };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var react = require('react');
3
+ var useMounted = require('./use-mounted.cjs');
4
4
 
5
5
  /**
6
6
  * @author murukal
@@ -9,9 +9,9 @@ var react = require('react');
9
9
  * unmount
10
10
  */
11
11
  var useUnmount = function useUnmount(callback) {
12
- react.useEffect(function () {
12
+ useMounted.useMounted(function () {
13
13
  return callback;
14
- }, []);
14
+ });
15
15
  };
16
16
 
17
17
  exports.useUnmount = useUnmount;
@@ -1,4 +1,4 @@
1
- import { useEffect } from 'react';
1
+ import { useMounted } from './use-mounted.mjs';
2
2
 
3
3
  /**
4
4
  * @author murukal
@@ -7,9 +7,9 @@ import { useEffect } from 'react';
7
7
  * unmount
8
8
  */
9
9
  var useUnmount = function useUnmount(callback) {
10
- useEffect(function () {
10
+ useMounted(function () {
11
11
  return callback;
12
- }, []);
12
+ });
13
13
  };
14
14
 
15
15
  export { useUnmount };
package/dist/index.cjs CHANGED
@@ -13,7 +13,7 @@ var useScrollLocker = require('./hooks/use-scroll-locker.cjs');
13
13
  var useForceUpdate = require('./hooks/use-force-update.cjs');
14
14
  var useScrollable = require('./hooks/use-scrollable.cjs');
15
15
  var useComposedRef = require('./hooks/use-composed-ref.cjs');
16
- var useTogglable = require('./hooks/use-togglable.cjs');
16
+ var useToggleable = require('./hooks/use-toggleable.cjs');
17
17
  var useEvent = require('./hooks/use-event.cjs');
18
18
  var useUpdateEffect = require('./hooks/use-update-effect.cjs');
19
19
  var useCounter = require('./hooks/use-counter.cjs');
@@ -33,7 +33,7 @@ var useSessionStorageState = require('./hooks/use-session-storage-state.cjs');
33
33
  var useIsMounted = require('./hooks/use-is-mounted.cjs');
34
34
  var useInfiniteScroll = require('./hooks/use-infinite-scroll.cjs');
35
35
  var useReactive = require('./hooks/use-reactive.cjs');
36
- var useParentSize = require('./hooks/use-parent-size.cjs');
36
+ var useElementSize = require('./hooks/use-element-size.cjs');
37
37
  var useScreenSize = require('./hooks/use-screen-size.cjs');
38
38
  var useDrag = require('./hooks/use-drag.cjs');
39
39
  var useEventSource = require('./hooks/use-event-source.cjs');
@@ -57,6 +57,7 @@ var isThenable = require('./is/is-thenable.cjs');
57
57
  var isHtmlElement = require('./is/is-html-element.cjs');
58
58
  var isHtmlInputElement = require('./is/is-html-input-element.cjs');
59
59
  var isObject = require('./is/is-object.cjs');
60
+ var useScale = require('./hooks/use-scale.cjs');
60
61
  var effect = require('./utils/effect.cjs');
61
62
  var unique = require('./utils/unique.cjs');
62
63
  var uniqueBy = require('./utils/unique-by.cjs');
@@ -102,7 +103,7 @@ exports.useScrollLocker = useScrollLocker.useScrollLocker;
102
103
  exports.useForceUpdate = useForceUpdate.useForceUpdate;
103
104
  exports.useScrollable = useScrollable.useScrollable;
104
105
  exports.useComposedRef = useComposedRef.useComposedRef;
105
- exports.useTogglable = useTogglable.useTogglable;
106
+ exports.useToggleable = useToggleable.useToggleable;
106
107
  exports.useEvent = useEvent.useEvent;
107
108
  exports.useUpdateEffect = useUpdateEffect.useUpdateEffect;
108
109
  exports.useCounter = useCounter.useCounter;
@@ -122,7 +123,7 @@ exports.useSessionStorageState = useSessionStorageState.useSessionStorageState;
122
123
  exports.useIsMounted = useIsMounted.useIsMounted;
123
124
  exports.useInfiniteScroll = useInfiniteScroll.useInfiniteScroll;
124
125
  exports.useReactive = useReactive.useReactive;
125
- exports.useParentSize = useParentSize.useParentSize;
126
+ exports.useElementSize = useElementSize.useElementSize;
126
127
  exports.useScreenSize = useScreenSize.useScreenSize;
127
128
  exports.useDrag = useDrag.useDrag;
128
129
  exports.useEventSource = useEventSource.useEventSource;
@@ -146,6 +147,7 @@ exports.isThenable = isThenable.isThenable;
146
147
  exports.isHTMLElement = isHtmlElement.isHTMLElement;
147
148
  exports.isHTMLInputElement = isHtmlInputElement.isHTMLInputElement;
148
149
  exports.isObject = isObject.isObject;
150
+ exports.useScale = useScale.useScale;
149
151
  exports.effect = effect.effect;
150
152
  exports.unique = unique.unique;
151
153
  exports.uniqueBy = uniqueBy.uniqueBy;
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 { useComposedRef } from "./hooks/use-composed-ref";
18
- export { useTogglable } from "./hooks/use-togglable";
18
+ export { useToggleable } from "./hooks/use-toggleable";
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";
@@ -35,7 +35,7 @@ export { useSessionStorageState } from "./hooks/use-session-storage-state";
35
35
  export { useIsMounted } from "./hooks/use-is-mounted";
36
36
  export { useInfiniteScroll } from "./hooks/use-infinite-scroll";
37
37
  export { useReactive } from "./hooks/use-reactive";
38
- export { useParentSize } from "./hooks/use-parent-size";
38
+ export { useElementSize } from "./hooks/use-element-size";
39
39
  export { useScreenSize } from "./hooks/use-screen-size";
40
40
  export { useDrag } from "./hooks/use-drag";
41
41
  export { useEventSource } from "./hooks/use-event-source";
@@ -63,6 +63,7 @@ export { isThenable } from "./is/is-thenable";
63
63
  export { isHTMLElement } from "./is/is-html-element";
64
64
  export { isHTMLInputElement } from "./is/is-html-input-element";
65
65
  export { isObject } from "./is/is-object";
66
+ export { useScale } from "./hooks/use-scale";
66
67
  /**
67
68
  * @description
68
69
  * utils
package/dist/index.mjs CHANGED
@@ -11,7 +11,7 @@ export { useScrollLocker } from './hooks/use-scroll-locker.mjs';
11
11
  export { useForceUpdate } from './hooks/use-force-update.mjs';
12
12
  export { useScrollable } from './hooks/use-scrollable.mjs';
13
13
  export { useComposedRef } from './hooks/use-composed-ref.mjs';
14
- export { useTogglable } from './hooks/use-togglable.mjs';
14
+ export { useToggleable } from './hooks/use-toggleable.mjs';
15
15
  export { useEvent } from './hooks/use-event.mjs';
16
16
  export { useUpdateEffect } from './hooks/use-update-effect.mjs';
17
17
  export { useCounter } from './hooks/use-counter.mjs';
@@ -31,7 +31,7 @@ export { useSessionStorageState } from './hooks/use-session-storage-state.mjs';
31
31
  export { useIsMounted } from './hooks/use-is-mounted.mjs';
32
32
  export { useInfiniteScroll } from './hooks/use-infinite-scroll.mjs';
33
33
  export { useReactive } from './hooks/use-reactive.mjs';
34
- export { useParentSize } from './hooks/use-parent-size.mjs';
34
+ export { useElementSize } from './hooks/use-element-size.mjs';
35
35
  export { useScreenSize } from './hooks/use-screen-size.mjs';
36
36
  export { useDrag } from './hooks/use-drag.mjs';
37
37
  export { useEventSource } from './hooks/use-event-source.mjs';
@@ -55,6 +55,7 @@ export { isThenable } from './is/is-thenable.mjs';
55
55
  export { isHTMLElement } from './is/is-html-element.mjs';
56
56
  export { isHTMLInputElement } from './is/is-html-input-element.mjs';
57
57
  export { isObject } from './is/is-object.mjs';
58
+ export { useScale } from './hooks/use-scale.mjs';
58
59
  export { effect } from './utils/effect.mjs';
59
60
  export { unique } from './utils/unique.mjs';
60
61
  export { uniqueBy } from './utils/unique-by.mjs';
@@ -0,0 +1 @@
1
+ export type Intersection<P, N> = Pick<P, keyof N & keyof P> & Partial<Omit<P, keyof N & keyof P>> & Partial<Omit<N, keyof N & keyof P>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiszlab/relax",
3
- "version": "2.0.6-beta.7",
3
+ "version": "2.0.6-beta.8",
4
4
  "description": "react utils collection",
5
5
  "exports": {
6
6
  ".": {
@@ -1,10 +0,0 @@
1
- /**
2
- * @description
3
- * listen parent size change
4
- * provider with\height to child
5
- */
6
- export declare const useParentSize: <T extends HTMLElement = HTMLDivElement>() => {
7
- parentRef: import("react").RefObject<T | null>;
8
- width: number;
9
- height: number;
10
- };