@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 +21 -21
- package/README.md +4 -4
- package/dist/hooks/use-controlled-state.cjs +5 -1
- package/dist/hooks/use-controlled-state.d.ts +9 -4
- package/dist/hooks/use-controlled-state.mjs +5 -1
- package/dist/hooks/{use-parent-size.cjs → use-element-size.cjs} +14 -18
- package/dist/hooks/use-element-size.d.ts +15 -0
- package/dist/hooks/{use-parent-size.mjs → use-element-size.mjs} +14 -18
- package/dist/hooks/use-media-query.cjs +15 -10
- package/dist/hooks/use-media-query.mjs +15 -10
- package/dist/hooks/use-scale.cjs +40 -0
- package/dist/hooks/use-scale.d.ts +4 -0
- package/dist/hooks/use-scale.mjs +38 -0
- package/dist/hooks/use-storage-state.cjs +0 -1
- package/dist/hooks/use-storage-state.mjs +0 -1
- package/dist/hooks/{use-togglable.cjs → use-toggleable.cjs} +9 -9
- package/dist/hooks/{use-togglable.d.ts → use-toggleable.d.ts} +5 -5
- package/dist/hooks/{use-togglable.mjs → use-toggleable.mjs} +9 -9
- package/dist/hooks/use-unmount.cjs +3 -3
- package/dist/hooks/use-unmount.mjs +3 -3
- package/dist/index.cjs +6 -4
- package/dist/index.d.ts +3 -2
- package/dist/index.mjs +3 -2
- package/dist/types/intersection.d.ts +1 -0
- package/package.json +1 -1
- package/dist/hooks/use-parent-size.d.ts +0 -10
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
|
|
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,
|
|
20
|
-
declare function useControlledState<T>(controlledState: Partialable<T>,
|
|
21
|
-
declare function useControlledState<T>(controlledState: 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
|
|
14
|
-
var
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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 (
|
|
48
|
-
resizer.observe(
|
|
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.
|
|
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
|
|
12
|
-
var
|
|
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
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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 (
|
|
46
|
-
resizer.observe(
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
29
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
27
|
-
|
|
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
|
|
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,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(
|
|
27
|
+
value: function grow(toggleableKey) {
|
|
28
28
|
// create leaf, leaf will auto trigger tree collect callback
|
|
29
29
|
new Leaf({
|
|
30
|
-
key:
|
|
30
|
+
key: toggleableKey.key,
|
|
31
31
|
parent: null,
|
|
32
32
|
belongTo: this
|
|
33
|
-
}).grow(
|
|
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
|
|
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
|
|
152
|
+
// re-create tree when toggleable keys changed
|
|
153
153
|
var tree = react.useMemo(function () {
|
|
154
|
-
return
|
|
155
|
-
return _tree.grow(
|
|
154
|
+
return toggleableKeys.reduce(function (_tree, toggleable) {
|
|
155
|
+
return _tree.grow(toggleable);
|
|
156
156
|
}, new Tree());
|
|
157
|
-
}, [
|
|
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.
|
|
191
|
+
exports.useToggleable = useToggleable;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type Key } from "react";
|
|
2
2
|
/**
|
|
3
3
|
* @description
|
|
4
|
-
*
|
|
4
|
+
* toggleable key
|
|
5
5
|
*/
|
|
6
|
-
type
|
|
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?:
|
|
16
|
+
children?: ToggleableKey[];
|
|
17
17
|
};
|
|
18
18
|
/**
|
|
19
19
|
* @description
|
|
20
20
|
* extra options
|
|
21
21
|
*/
|
|
22
|
-
type
|
|
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
|
|
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(
|
|
25
|
+
value: function grow(toggleableKey) {
|
|
26
26
|
// create leaf, leaf will auto trigger tree collect callback
|
|
27
27
|
new Leaf({
|
|
28
|
-
key:
|
|
28
|
+
key: toggleableKey.key,
|
|
29
29
|
parent: null,
|
|
30
30
|
belongTo: this
|
|
31
|
-
}).grow(
|
|
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
|
|
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
|
|
150
|
+
// re-create tree when toggleable keys changed
|
|
151
151
|
var tree = useMemo(function () {
|
|
152
|
-
return
|
|
153
|
-
return _tree.grow(
|
|
152
|
+
return toggleableKeys.reduce(function (_tree, toggleable) {
|
|
153
|
+
return _tree.grow(toggleable);
|
|
154
154
|
}, new Tree());
|
|
155
|
-
}, [
|
|
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 {
|
|
189
|
+
export { useToggleable };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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,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
|
-
};
|