@hi-ui/tabs 4.0.0-beta.18 → 4.0.0-beta.19
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/lib/cjs/TabList.js +33 -4
- package/lib/cjs/hooks/index.js +55 -0
- package/lib/esm/TabList.js +32 -4
- package/lib/esm/hooks/index.js +48 -0
- package/lib/types/hooks/index.d.ts +8 -0
- package/package.json +3 -2
package/lib/cjs/TabList.js
CHANGED
|
@@ -35,6 +35,8 @@ var typeAssertion = require('@hi-ui/type-assertion');
|
|
|
35
35
|
|
|
36
36
|
var iconButton = require('@hi-ui/icon-button');
|
|
37
37
|
|
|
38
|
+
var index = require('./hooks/index.js');
|
|
39
|
+
|
|
38
40
|
function _interopDefaultLegacy(e) {
|
|
39
41
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
40
42
|
'default': e
|
|
@@ -103,12 +105,39 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
103
105
|
setTranslateY = _useState4[1];
|
|
104
106
|
|
|
105
107
|
var itemsRef = React.useRef({});
|
|
106
|
-
var showScrollBtn = false;
|
|
107
108
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
var _useState5 = React.useState(false),
|
|
110
|
+
showScrollBtn = _useState5[0],
|
|
111
|
+
setShowScrollBtn = _useState5[1];
|
|
112
|
+
|
|
113
|
+
var showHorizontal = direction === 'horizontal'; // 响应式滚动按钮展示
|
|
111
114
|
|
|
115
|
+
index.useResizeObserver({
|
|
116
|
+
element: innerRef,
|
|
117
|
+
getSize: function getSize(element) {
|
|
118
|
+
return showHorizontal ? element.clientWidth : element.clientHeight;
|
|
119
|
+
},
|
|
120
|
+
onResize: function onResize(_, size) {
|
|
121
|
+
if (scrollRef) {
|
|
122
|
+
var _showScrollBtn = showHorizontal ? scrollRef.clientWidth > size : scrollRef.clientHeight > size;
|
|
123
|
+
|
|
124
|
+
setShowScrollBtn(_showScrollBtn);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
index.useResizeObserver({
|
|
129
|
+
element: scrollRef,
|
|
130
|
+
getSize: function getSize(element) {
|
|
131
|
+
return showHorizontal ? element.clientWidth : element.clientHeight;
|
|
132
|
+
},
|
|
133
|
+
onResize: function onResize(_, size) {
|
|
134
|
+
if (innerRef) {
|
|
135
|
+
var _showScrollBtn2 = showHorizontal ? size > innerRef.clientWidth : size > innerRef.clientHeight;
|
|
136
|
+
|
|
137
|
+
setShowScrollBtn(_showScrollBtn2);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
112
141
|
var onClickTab = React.useCallback(function (key, event) {
|
|
113
142
|
if (onTabClick) {
|
|
114
143
|
onTabClick(key, event);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** @LICENSE
|
|
2
|
+
* @hi-ui/tabs
|
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
Object.defineProperty(exports, '__esModule', {
|
|
13
|
+
value: true
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
var React = require('react');
|
|
17
|
+
|
|
18
|
+
var useLatest = require('@hi-ui/use-latest');
|
|
19
|
+
|
|
20
|
+
var useResizeObserver = function useResizeObserver(_ref) {
|
|
21
|
+
var element = _ref.element,
|
|
22
|
+
onResize = _ref.onResize,
|
|
23
|
+
_ref$initialSize = _ref.initialSize,
|
|
24
|
+
initialSize = _ref$initialSize === void 0 ? 0 : _ref$initialSize,
|
|
25
|
+
getSize = _ref.getSize;
|
|
26
|
+
var getSizeLatestRef = useLatest.useLatestRef(getSize);
|
|
27
|
+
var onResizeLatest = useLatest.useLatestCallback(onResize);
|
|
28
|
+
var prevSizeRef = React.useRef(initialSize);
|
|
29
|
+
React.useEffect(function () {
|
|
30
|
+
if (element) {
|
|
31
|
+
var _resizeObserver = new ResizeObserver(function () {
|
|
32
|
+
var getSize = getSizeLatestRef.current;
|
|
33
|
+
|
|
34
|
+
if (element) {
|
|
35
|
+
if (getSize) {
|
|
36
|
+
var nextSize = getSize(element);
|
|
37
|
+
|
|
38
|
+
if (prevSizeRef.current !== nextSize) {
|
|
39
|
+
prevSizeRef.current = nextSize;
|
|
40
|
+
onResizeLatest(element, nextSize);
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
onResizeLatest(element);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
_resizeObserver.observe(element);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return function () {};
|
|
52
|
+
}, [element, getSizeLatestRef, onResizeLatest]);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
exports.useResizeObserver = useResizeObserver;
|
package/lib/esm/TabList.js
CHANGED
|
@@ -17,6 +17,7 @@ import { TabInk } from './TabInk.js';
|
|
|
17
17
|
import { LeftOutlined, UpOutlined, RightOutlined, DownOutlined, PlusOutlined } from '@hi-ui/icons';
|
|
18
18
|
import { isUndef } from '@hi-ui/type-assertion';
|
|
19
19
|
import { IconButton } from '@hi-ui/icon-button';
|
|
20
|
+
import { useResizeObserver } from './hooks/index.js';
|
|
20
21
|
var _role = 'tabs';
|
|
21
22
|
|
|
22
23
|
var _prefix = getPrefixCls(_role);
|
|
@@ -77,12 +78,39 @@ var TabList = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
77
78
|
setTranslateY = _useState4[1];
|
|
78
79
|
|
|
79
80
|
var itemsRef = useRef({});
|
|
80
|
-
var showScrollBtn = false;
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
var _useState5 = useState(false),
|
|
83
|
+
showScrollBtn = _useState5[0],
|
|
84
|
+
setShowScrollBtn = _useState5[1];
|
|
85
85
|
|
|
86
|
+
var showHorizontal = direction === 'horizontal'; // 响应式滚动按钮展示
|
|
87
|
+
|
|
88
|
+
useResizeObserver({
|
|
89
|
+
element: innerRef,
|
|
90
|
+
getSize: function getSize(element) {
|
|
91
|
+
return showHorizontal ? element.clientWidth : element.clientHeight;
|
|
92
|
+
},
|
|
93
|
+
onResize: function onResize(_, size) {
|
|
94
|
+
if (scrollRef) {
|
|
95
|
+
var _showScrollBtn = showHorizontal ? scrollRef.clientWidth > size : scrollRef.clientHeight > size;
|
|
96
|
+
|
|
97
|
+
setShowScrollBtn(_showScrollBtn);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
useResizeObserver({
|
|
102
|
+
element: scrollRef,
|
|
103
|
+
getSize: function getSize(element) {
|
|
104
|
+
return showHorizontal ? element.clientWidth : element.clientHeight;
|
|
105
|
+
},
|
|
106
|
+
onResize: function onResize(_, size) {
|
|
107
|
+
if (innerRef) {
|
|
108
|
+
var _showScrollBtn2 = showHorizontal ? size > innerRef.clientWidth : size > innerRef.clientHeight;
|
|
109
|
+
|
|
110
|
+
setShowScrollBtn(_showScrollBtn2);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
86
114
|
var onClickTab = useCallback(function (key, event) {
|
|
87
115
|
if (onTabClick) {
|
|
88
116
|
onTabClick(key, event);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** @LICENSE
|
|
2
|
+
* @hi-ui/tabs
|
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/
|
|
10
|
+
import { useRef, useEffect } from 'react';
|
|
11
|
+
import { useLatestRef, useLatestCallback } from '@hi-ui/use-latest';
|
|
12
|
+
|
|
13
|
+
var useResizeObserver = function useResizeObserver(_ref) {
|
|
14
|
+
var element = _ref.element,
|
|
15
|
+
onResize = _ref.onResize,
|
|
16
|
+
_ref$initialSize = _ref.initialSize,
|
|
17
|
+
initialSize = _ref$initialSize === void 0 ? 0 : _ref$initialSize,
|
|
18
|
+
getSize = _ref.getSize;
|
|
19
|
+
var getSizeLatestRef = useLatestRef(getSize);
|
|
20
|
+
var onResizeLatest = useLatestCallback(onResize);
|
|
21
|
+
var prevSizeRef = useRef(initialSize);
|
|
22
|
+
useEffect(function () {
|
|
23
|
+
if (element) {
|
|
24
|
+
var _resizeObserver = new ResizeObserver(function () {
|
|
25
|
+
var getSize = getSizeLatestRef.current;
|
|
26
|
+
|
|
27
|
+
if (element) {
|
|
28
|
+
if (getSize) {
|
|
29
|
+
var nextSize = getSize(element);
|
|
30
|
+
|
|
31
|
+
if (prevSizeRef.current !== nextSize) {
|
|
32
|
+
prevSizeRef.current = nextSize;
|
|
33
|
+
onResizeLatest(element, nextSize);
|
|
34
|
+
}
|
|
35
|
+
} else {
|
|
36
|
+
onResizeLatest(element);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
_resizeObserver.observe(element);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return function () {};
|
|
45
|
+
}, [element, getSizeLatestRef, onResizeLatest]);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export { useResizeObserver };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface UseResizeObserverProps {
|
|
2
|
+
element: HTMLElement | null;
|
|
3
|
+
onResize: (element: HTMLElement, size?: any) => void;
|
|
4
|
+
initialSize?: any;
|
|
5
|
+
getSize?: (element: HTMLElement) => any;
|
|
6
|
+
}
|
|
7
|
+
export declare const useResizeObserver: ({ element, onResize, initialSize, getSize, }: UseResizeObserverProps) => void;
|
|
8
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hi-ui/tabs",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.19",
|
|
4
4
|
"description": "A sub-package for @hi-ui/hiui.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "HIUI <mi-hiui@xiaomi.com>",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"@hi-ui/icon-button": "^4.0.0-beta.10",
|
|
51
51
|
"@hi-ui/icons": "^4.0.0-beta.11",
|
|
52
52
|
"@hi-ui/type-assertion": "^4.0.0-beta.5",
|
|
53
|
+
"@hi-ui/use-latest": "^4.0.0-beta.5",
|
|
53
54
|
"@hi-ui/use-uncontrolled-state": "^4.0.0-beta.5"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
@@ -61,5 +62,5 @@
|
|
|
61
62
|
"react": "^17.0.1",
|
|
62
63
|
"react-dom": "^17.0.1"
|
|
63
64
|
},
|
|
64
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "9956956831546dfe051b56cf8330912a772fa86f"
|
|
65
66
|
}
|