@hi-ui/tabs 4.0.0-beta.8 → 4.0.1
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/TabInk.js +48 -29
- package/lib/cjs/TabItem.js +6 -7
- package/lib/cjs/TabList.js +185 -131
- package/lib/cjs/TabPane.js +17 -9
- package/lib/cjs/Tabs.js +10 -11
- package/lib/cjs/hooks/index.js +63 -0
- package/lib/cjs/index.js +1 -2
- package/lib/cjs/styles/index.scss.js +3 -4
- package/lib/cjs/utils/index.js +32 -0
- package/lib/esm/TabInk.js +47 -29
- package/lib/esm/TabItem.js +1 -2
- package/lib/esm/TabList.js +178 -128
- package/lib/esm/TabPane.js +14 -9
- package/lib/esm/Tabs.js +4 -5
- package/lib/esm/hooks/index.js +54 -0
- package/lib/esm/index.js +2 -3
- package/lib/esm/styles/index.scss.js +4 -6
- package/lib/esm/utils/index.js +26 -0
- package/lib/types/TabInk.d.ts +5 -5
- package/lib/types/TabItem.d.ts +1 -1
- package/lib/types/TabList.d.ts +36 -5
- package/lib/types/TabPane.d.ts +20 -3
- package/lib/types/Tabs.d.ts +15 -18
- package/lib/types/hooks/index.d.ts +11 -0
- package/lib/types/utils/index.d.ts +3 -0
- package/package.json +16 -11
- package/lib/cjs/TabInk.js.map +0 -1
- package/lib/cjs/TabItem.js.map +0 -1
- package/lib/cjs/TabList.js.map +0 -1
- package/lib/cjs/TabPane.js.map +0 -1
- package/lib/cjs/Tabs.js.map +0 -1
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/styles/index.scss.js.map +0 -1
- package/lib/esm/TabInk.js.map +0 -1
- package/lib/esm/TabItem.js.map +0 -1
- package/lib/esm/TabList.js.map +0 -1
- package/lib/esm/TabPane.js.map +0 -1
- package/lib/esm/Tabs.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/styles/index.scss.js.map +0 -1
package/lib/cjs/TabInk.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @hi-ui/tabs
|
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c)
|
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -19,6 +19,8 @@ var React = require('react');
|
|
|
19
19
|
|
|
20
20
|
var classname = require('@hi-ui/classname');
|
|
21
21
|
|
|
22
|
+
var index = require('./hooks/index.js');
|
|
23
|
+
|
|
22
24
|
function _interopDefaultLegacy(e) {
|
|
23
25
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
24
26
|
'default': e
|
|
@@ -32,41 +34,58 @@ var TabInk = function TabInk(_ref) {
|
|
|
32
34
|
|
|
33
35
|
var disabled = _ref.disabled,
|
|
34
36
|
prefixCls = _ref.prefixCls,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
activeItemElement = _ref.activeItemElement,
|
|
38
|
+
activeTabId = _ref.activeTabId,
|
|
39
|
+
getTabOffset = _ref.getTabOffset,
|
|
40
|
+
showHorizontal = _ref.showHorizontal;
|
|
39
41
|
var inkRef = React.useRef(null);
|
|
40
|
-
React.
|
|
41
|
-
if (inkRef.current
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
var setTabLnkPositionStyle = React.useCallback(function () {
|
|
43
|
+
if (!inkRef.current) return;
|
|
44
|
+
if (!activeItemElement) return;
|
|
45
|
+
var computedStyle = getComputedStyle(activeItemElement);
|
|
46
|
+
var itemRect = activeItemElement.getBoundingClientRect();
|
|
47
|
+
var offset = getTabOffset(activeTabId);
|
|
45
48
|
|
|
46
|
-
|
|
47
|
-
_style = {
|
|
48
|
-
top: itemRect.top - listRect.top - translate + 2 + 8 + "px",
|
|
49
|
-
height: itemRect.height - 4 - 16 + "px",
|
|
50
|
-
left: '',
|
|
51
|
-
width: ''
|
|
52
|
-
};
|
|
53
|
-
} else {
|
|
54
|
-
_style = {
|
|
55
|
-
left: itemRect.left - listRect.left - translate + 20 + "px",
|
|
56
|
-
width: itemRect.width - 40 + "px",
|
|
57
|
-
top: '',
|
|
58
|
-
height: ''
|
|
59
|
-
};
|
|
60
|
-
}
|
|
49
|
+
var _style;
|
|
61
50
|
|
|
62
|
-
|
|
51
|
+
if (!showHorizontal) {
|
|
52
|
+
var paddingTop = parseFloat(computedStyle.getPropertyValue('padding-top'));
|
|
53
|
+
var paddingBottom = parseFloat(computedStyle.getPropertyValue('padding-bottom'));
|
|
54
|
+
_style = {
|
|
55
|
+
// 2px 保证尽量和文字顶部对齐,减少文本行高的影响
|
|
56
|
+
top: offset + paddingTop + 2 + 'px',
|
|
57
|
+
height: itemRect.height - paddingTop - paddingBottom - 4 + "px",
|
|
58
|
+
left: '',
|
|
59
|
+
width: ''
|
|
60
|
+
};
|
|
61
|
+
} else {
|
|
62
|
+
var paddingLeft = parseFloat(computedStyle.getPropertyValue('padding-left'));
|
|
63
|
+
var paddingRight = parseFloat(computedStyle.getPropertyValue('padding-right'));
|
|
64
|
+
_style = {
|
|
65
|
+
left: offset + paddingLeft + 'px',
|
|
66
|
+
width: itemRect.width - paddingRight - paddingLeft + "px",
|
|
67
|
+
top: '',
|
|
68
|
+
height: ''
|
|
69
|
+
};
|
|
63
70
|
}
|
|
64
|
-
|
|
65
|
-
|
|
71
|
+
|
|
72
|
+
Object.assign(inkRef.current.style, _style);
|
|
73
|
+
}, [activeItemElement, activeTabId, getTabOffset, showHorizontal]);
|
|
74
|
+
React.useEffect(function () {
|
|
75
|
+
setTabLnkPositionStyle();
|
|
76
|
+
}, [setTabLnkPositionStyle]);
|
|
77
|
+
index.useResizeObserver({
|
|
78
|
+
element: activeItemElement,
|
|
79
|
+
getSize: function getSize(element) {
|
|
80
|
+
var itemRect = element.getBoundingClientRect();
|
|
81
|
+
return showHorizontal ? itemRect.width : itemRect.height;
|
|
82
|
+
},
|
|
83
|
+
onResize: setTabLnkPositionStyle
|
|
84
|
+
});
|
|
85
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
66
86
|
className: classname.cx(prefixCls + "__ink", (_cx = {}, _cx[prefixCls + "__ink--disabled"] = disabled, _cx)),
|
|
67
87
|
ref: inkRef
|
|
68
88
|
});
|
|
69
89
|
};
|
|
70
90
|
|
|
71
91
|
exports.TabInk = TabInk;
|
|
72
|
-
//# sourceMappingURL=TabInk.js.map
|
package/lib/cjs/TabItem.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @hi-ui/tabs
|
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c)
|
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -73,7 +73,7 @@ var TabItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
73
73
|
}
|
|
74
74
|
}, [onTabClick, tabId]);
|
|
75
75
|
|
|
76
|
-
return /*#__PURE__*/React__default[
|
|
76
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
77
77
|
style: style,
|
|
78
78
|
className: classname.cx(prefixCls + "__item", className, (_cx = {}, _cx[prefixCls + "__item--active"] = active, _cx[prefixCls + "__item--" + direction] = direction, _cx)),
|
|
79
79
|
ref: ref,
|
|
@@ -174,11 +174,11 @@ var TabItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
174
174
|
});
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
|
-
}, /*#__PURE__*/React__default[
|
|
177
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
178
178
|
className: prefixCls + "-item__title"
|
|
179
|
-
}, tabTitle), type === 'desc' && /*#__PURE__*/React__default[
|
|
179
|
+
}, tabTitle), type === 'desc' && /*#__PURE__*/React__default["default"].createElement("span", {
|
|
180
180
|
className: prefixCls + "-item__desc"
|
|
181
|
-
}, tabDesc), editable && closeable && /*#__PURE__*/React__default[
|
|
181
|
+
}, tabDesc), editable && closeable && /*#__PURE__*/React__default["default"].createElement("span", {
|
|
182
182
|
className: prefixCls + "__close-btn",
|
|
183
183
|
onClick: function onClick(e) {
|
|
184
184
|
e.stopPropagation();
|
|
@@ -190,7 +190,7 @@ var TabItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
190
190
|
}, index);
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
-
}, /*#__PURE__*/React__default[
|
|
193
|
+
}, /*#__PURE__*/React__default["default"].createElement(icons.CloseOutlined, null)));
|
|
194
194
|
});
|
|
195
195
|
|
|
196
196
|
if (env.__DEV__) {
|
|
@@ -198,4 +198,3 @@ if (env.__DEV__) {
|
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
exports.TabItem = TabItem;
|
|
201
|
-
//# sourceMappingURL=TabItem.js.map
|
package/lib/cjs/TabList.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @hi-ui/tabs
|
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c)
|
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -15,6 +15,8 @@ Object.defineProperty(exports, '__esModule', {
|
|
|
15
15
|
value: true
|
|
16
16
|
});
|
|
17
17
|
|
|
18
|
+
var tslib = require('tslib');
|
|
19
|
+
|
|
18
20
|
var React = require('react');
|
|
19
21
|
|
|
20
22
|
var env = require('@hi-ui/env');
|
|
@@ -33,6 +35,12 @@ var typeAssertion = require('@hi-ui/type-assertion');
|
|
|
33
35
|
|
|
34
36
|
var iconButton = require('@hi-ui/icon-button');
|
|
35
37
|
|
|
38
|
+
var index = require('./hooks/index.js');
|
|
39
|
+
|
|
40
|
+
var useLatest = require('@hi-ui/use-latest');
|
|
41
|
+
|
|
42
|
+
var index$1 = require('./utils/index.js');
|
|
43
|
+
|
|
36
44
|
function _interopDefaultLegacy(e) {
|
|
37
45
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
38
46
|
'default': e
|
|
@@ -45,33 +53,37 @@ var _role = 'tabs';
|
|
|
45
53
|
|
|
46
54
|
var _prefix = classname.getPrefixCls(_role);
|
|
47
55
|
|
|
48
|
-
var TabList = /*#__PURE__*/React.forwardRef(function (
|
|
56
|
+
var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
49
57
|
var _cx;
|
|
50
58
|
|
|
51
|
-
var
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
59
|
+
var _b;
|
|
60
|
+
|
|
61
|
+
var data = _a.data,
|
|
62
|
+
className = _a.className,
|
|
63
|
+
style = _a.style,
|
|
64
|
+
activeId = _a.activeId,
|
|
65
|
+
defaultActiveId = _a.defaultActiveId,
|
|
66
|
+
onChange = _a.onChange,
|
|
67
|
+
onTabClick = _a.onTabClick,
|
|
68
|
+
_a$prefixCls = _a.prefixCls,
|
|
69
|
+
prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
|
|
70
|
+
directionProp = _a.direction,
|
|
71
|
+
_a$placement = _a.placement,
|
|
72
|
+
placement = _a$placement === void 0 ? 'horizontal' : _a$placement,
|
|
73
|
+
editable = _a.editable,
|
|
74
|
+
onAdd = _a.onAdd,
|
|
75
|
+
onDelete = _a.onDelete,
|
|
76
|
+
draggable = _a.draggable,
|
|
77
|
+
onDragStart = _a.onDragStart,
|
|
78
|
+
onDragOver = _a.onDragOver,
|
|
79
|
+
onDrop = _a.onDrop,
|
|
80
|
+
onDragEnd = _a.onDragEnd,
|
|
81
|
+
_a$type = _a.type,
|
|
82
|
+
type = _a$type === void 0 ? 'line' : _a$type,
|
|
83
|
+
extra = _a.extra,
|
|
84
|
+
rest = tslib.__rest(_a, ["data", "className", "style", "activeId", "defaultActiveId", "onChange", "onTabClick", "prefixCls", "direction", "placement", "editable", "onAdd", "onDelete", "draggable", "onDragStart", "onDragOver", "onDrop", "onDragEnd", "type", "extra"]);
|
|
85
|
+
|
|
86
|
+
var direction = (_b = placement !== null && placement !== void 0 ? placement : directionProp) !== null && _b !== void 0 ? _b : 'horizontal';
|
|
75
87
|
|
|
76
88
|
var _useUncontrolledState = useUncontrolledState.useUncontrolledState(function () {
|
|
77
89
|
if (typeAssertion.isUndef(defaultActiveId)) {
|
|
@@ -79,101 +91,163 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
79
91
|
}
|
|
80
92
|
|
|
81
93
|
return defaultActiveId;
|
|
82
|
-
}, activeId, onChange),
|
|
94
|
+
}, activeId, onChange, Object.is),
|
|
83
95
|
activeTabId = _useUncontrolledState[0],
|
|
84
96
|
setActiveTabId = _useUncontrolledState[1];
|
|
85
97
|
|
|
86
98
|
var _useState = React.useState(null),
|
|
87
|
-
|
|
88
|
-
|
|
99
|
+
innerElement = _useState[0],
|
|
100
|
+
setInnerElement = _useState[1];
|
|
89
101
|
|
|
90
102
|
var _useState2 = React.useState(null),
|
|
91
|
-
|
|
92
|
-
|
|
103
|
+
scrollElement = _useState2[0],
|
|
104
|
+
setScrollElement = _useState2[1];
|
|
105
|
+
|
|
106
|
+
var showHorizontal = direction === 'horizontal';
|
|
107
|
+
var getClientSize = React.useCallback(function (element) {
|
|
108
|
+
return showHorizontal ? element.clientWidth : element.clientHeight;
|
|
109
|
+
}, [showHorizontal]);
|
|
93
110
|
|
|
94
111
|
var _useState3 = React.useState(0),
|
|
95
|
-
|
|
96
|
-
|
|
112
|
+
translatePos = _useState3[0],
|
|
113
|
+
setTranslatePos = _useState3[1];
|
|
97
114
|
|
|
98
115
|
var _useState4 = React.useState(0),
|
|
99
|
-
|
|
100
|
-
|
|
116
|
+
translateBoundPos = _useState4[0],
|
|
117
|
+
setTranslateBoundPos = _useState4[1];
|
|
101
118
|
|
|
102
119
|
var itemsRef = React.useRef({});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
120
|
+
|
|
121
|
+
var _useState5 = React.useState(false),
|
|
122
|
+
showScrollBtn = _useState5[0],
|
|
123
|
+
setShowScrollBtn = _useState5[1];
|
|
124
|
+
|
|
125
|
+
var resizeScroll = function resizeScroll(scrollSize, innerSize) {
|
|
126
|
+
var showScrollBtn = scrollSize > innerSize;
|
|
127
|
+
setShowScrollBtn(showScrollBtn);
|
|
128
|
+
|
|
129
|
+
if (showScrollBtn) {
|
|
130
|
+
setTranslateBoundPos(scrollSize - innerSize);
|
|
131
|
+
}
|
|
132
|
+
}; // 响应式滚动按钮展示
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
index.useResizeObserver({
|
|
136
|
+
element: innerElement,
|
|
137
|
+
getSize: getClientSize,
|
|
138
|
+
onResize: function onResize(_, innerSize) {
|
|
139
|
+
if (scrollElement) {
|
|
140
|
+
var scrollSize = getClientSize(scrollElement);
|
|
141
|
+
resizeScroll(scrollSize, innerSize);
|
|
142
|
+
}
|
|
106
143
|
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
144
|
+
});
|
|
145
|
+
index.useResizeObserver({
|
|
146
|
+
element: scrollElement,
|
|
147
|
+
getSize: getClientSize,
|
|
148
|
+
onResize: function onResize(_, scrollSize) {
|
|
149
|
+
if (innerElement) {
|
|
150
|
+
var innerSize = getClientSize(innerElement);
|
|
151
|
+
resizeScroll(scrollSize, innerSize);
|
|
152
|
+
}
|
|
111
153
|
}
|
|
154
|
+
});
|
|
155
|
+
var getTabPos = React.useCallback(function (tabId) {
|
|
156
|
+
var target = 0; // 获取目标元素的位置
|
|
157
|
+
|
|
158
|
+
var targetElement = itemsRef.current[tabId];
|
|
112
159
|
|
|
113
|
-
if (
|
|
114
|
-
|
|
160
|
+
if (targetElement) {
|
|
161
|
+
var rect = targetElement.getBoundingClientRect();
|
|
162
|
+
target = showHorizontal ? rect.left : rect.top;
|
|
115
163
|
}
|
|
116
|
-
}, [activeTabId, onTabClick, setActiveTabId]);
|
|
117
|
-
return /*#__PURE__*/React__default['default'].createElement("div", {
|
|
118
|
-
style: style,
|
|
119
|
-
className: classname.cx(prefixCls + "__list", (_cx = {}, _cx[prefixCls + "__list--" + type] = type, _cx), className),
|
|
120
|
-
ref: ref
|
|
121
|
-
}, showScrollBtn && direction === 'horizontal' && /*#__PURE__*/React__default['default'].createElement(iconButton.IconButton, {
|
|
122
|
-
className: prefixCls + "__left-btn",
|
|
123
|
-
effect: true,
|
|
124
|
-
icon: /*#__PURE__*/React__default['default'].createElement(icons.LeftOutlined, null),
|
|
125
|
-
onClick: function onClick() {
|
|
126
|
-
if (scrollRef && innerRef) {
|
|
127
|
-
var canScroll = -translateX - innerRef.clientWidth;
|
|
128
|
-
var moveWidth = 0;
|
|
129
164
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
165
|
+
return target;
|
|
166
|
+
}, [showHorizontal]);
|
|
167
|
+
var getTabOffset = React.useCallback(function (tabId) {
|
|
168
|
+
// 获取目标元素的位置
|
|
169
|
+
var targetPos = getTabPos(tabId); // 获取基准元素的位置(第一个)
|
|
170
|
+
|
|
171
|
+
var basePos = 0;
|
|
172
|
+
|
|
173
|
+
if (typeAssertion.isArrayNonEmpty(data)) {
|
|
174
|
+
var baseItem = data[0];
|
|
175
|
+
basePos = getTabPos(baseItem.tabId);
|
|
176
|
+
} // 返回目标元素相对基准元素的偏移量
|
|
177
|
+
|
|
135
178
|
|
|
136
|
-
|
|
179
|
+
return targetPos ? targetPos - basePos : 0;
|
|
180
|
+
}, [data, getTabPos]);
|
|
181
|
+
|
|
182
|
+
var syncScrollPosition = function syncScrollPosition(tabId) {
|
|
183
|
+
if (!innerElement) return;
|
|
184
|
+
if (!scrollElement) return;
|
|
185
|
+
var scrollSize = getClientSize(scrollElement);
|
|
186
|
+
var innerSize = getClientSize(innerElement);
|
|
187
|
+
var offsetValue = getTabOffset(tabId); // 左边或上半部内容展示不全
|
|
188
|
+
|
|
189
|
+
var currentOffset = -translatePos;
|
|
190
|
+
|
|
191
|
+
if (offsetValue < currentOffset) {
|
|
192
|
+
setTranslatePos(-offsetValue);
|
|
193
|
+
} else {
|
|
194
|
+
// 右边或下半部内容展示不全
|
|
195
|
+
var nextTabId = index$1.getNextTabId(data, tabId);
|
|
196
|
+
var nextOffsetValue = nextTabId !== null ? getTabOffset(nextTabId) : scrollSize;
|
|
197
|
+
|
|
198
|
+
var _currentOffset = -translatePos + innerSize;
|
|
199
|
+
|
|
200
|
+
if (nextOffsetValue > _currentOffset) {
|
|
201
|
+
setTranslatePos(translatePos - (nextOffsetValue - _currentOffset));
|
|
137
202
|
}
|
|
138
203
|
}
|
|
139
|
-
}
|
|
140
|
-
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
var onClickTab = useLatest.useLatestCallback(function (tabId, event) {
|
|
207
|
+
onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(tabId, event);
|
|
208
|
+
setActiveTabId(tabId);
|
|
209
|
+
syncScrollPosition(tabId);
|
|
210
|
+
});
|
|
211
|
+
return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
|
|
212
|
+
style: style,
|
|
213
|
+
className: classname.cx(prefixCls + "__list", (_cx = {}, _cx[prefixCls + "__list--" + type] = type, _cx), className),
|
|
214
|
+
ref: ref
|
|
215
|
+
}, rest), showScrollBtn ? /*#__PURE__*/React__default["default"].createElement(iconButton.IconButton, {
|
|
216
|
+
className: showHorizontal ? prefixCls + "__left-btn" : prefixCls + "__up-btn",
|
|
141
217
|
effect: true,
|
|
142
|
-
|
|
218
|
+
disabled: translatePos === 0,
|
|
219
|
+
icon: showHorizontal ? /*#__PURE__*/React__default["default"].createElement(icons.LeftOutlined, null) : /*#__PURE__*/React__default["default"].createElement(icons.UpOutlined, null),
|
|
143
220
|
onClick: function onClick() {
|
|
144
|
-
if (
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
setTranslateY(translateY + moveWidth);
|
|
155
|
-
}
|
|
221
|
+
if (!scrollElement) return;
|
|
222
|
+
if (!innerElement) return; // 向前面滚动
|
|
223
|
+
|
|
224
|
+
var clientSize = getClientSize(innerElement);
|
|
225
|
+
var canScroll = -translatePos - clientSize;
|
|
226
|
+
var moveWidth = canScroll >= 0 ? clientSize : -translatePos;
|
|
227
|
+
setTranslatePos(function (prev) {
|
|
228
|
+
return prev + moveWidth;
|
|
229
|
+
});
|
|
156
230
|
}
|
|
157
|
-
}), /*#__PURE__*/React__default[
|
|
231
|
+
}) : null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
158
232
|
className: classname.cx(prefixCls + "__list--inner"),
|
|
159
|
-
ref:
|
|
160
|
-
}, /*#__PURE__*/React__default[
|
|
233
|
+
ref: setInnerElement
|
|
234
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
161
235
|
className: classname.cx(prefixCls + "__list--scroll"),
|
|
162
|
-
ref:
|
|
236
|
+
ref: setScrollElement,
|
|
163
237
|
style: showScrollBtn ? {
|
|
164
|
-
transform: direction === 'horizontal' ? "translateX(" +
|
|
165
|
-
} :
|
|
166
|
-
}, data.map(function (
|
|
167
|
-
return /*#__PURE__*/React__default[
|
|
238
|
+
transform: direction === 'horizontal' ? "translateX(" + translatePos + "px)" : "translateY(" + translatePos + "px)"
|
|
239
|
+
} : undefined
|
|
240
|
+
}, data.map(function (item, index) {
|
|
241
|
+
return /*#__PURE__*/React__default["default"].createElement(TabItem.TabItem, Object.assign({
|
|
168
242
|
key: index
|
|
169
|
-
},
|
|
243
|
+
}, item, {
|
|
170
244
|
ref: function ref(node) {
|
|
171
|
-
itemsRef.current["" +
|
|
245
|
+
itemsRef.current["" + item.tabId] = node;
|
|
172
246
|
},
|
|
173
247
|
type: type,
|
|
174
|
-
itemRef: itemsRef.current["" +
|
|
248
|
+
itemRef: itemsRef.current["" + item.tabId],
|
|
175
249
|
index: index,
|
|
176
|
-
active: activeTabId ===
|
|
250
|
+
active: activeTabId === item.tabId,
|
|
177
251
|
prefixCls: prefixCls,
|
|
178
252
|
draggable: draggable,
|
|
179
253
|
onTabClick: onClickTab,
|
|
@@ -185,50 +259,31 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
185
259
|
onDragEnd: onDragEnd,
|
|
186
260
|
direction: direction
|
|
187
261
|
}));
|
|
188
|
-
}), type === 'line'
|
|
189
|
-
translate: direction === 'horizontal' ? translateX : translateY,
|
|
262
|
+
}), type === 'line' ? /*#__PURE__*/React__default["default"].createElement(TabInk.TabInk, {
|
|
190
263
|
prefixCls: prefixCls,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
264
|
+
showHorizontal: showHorizontal,
|
|
265
|
+
activeItemElement: itemsRef.current[activeTabId],
|
|
266
|
+
activeTabId: activeTabId,
|
|
267
|
+
getTabOffset: getTabOffset
|
|
268
|
+
}) : null)), showScrollBtn ? /*#__PURE__*/React__default["default"].createElement(iconButton.IconButton, {
|
|
195
269
|
effect: true,
|
|
196
|
-
className: prefixCls + "__right-btn",
|
|
197
|
-
|
|
270
|
+
className: showHorizontal ? prefixCls + "__right-btn" : prefixCls + "__down-btn",
|
|
271
|
+
disabled: translateBoundPos === -translatePos,
|
|
272
|
+
icon: showHorizontal ? /*#__PURE__*/React__default["default"].createElement(icons.RightOutlined, null) : /*#__PURE__*/React__default["default"].createElement(icons.DownOutlined, null),
|
|
198
273
|
onClick: function onClick() {
|
|
199
|
-
if (
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
setTranslateX(translateX - moveWidth);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}), showScrollBtn && direction === 'vertical' && /*#__PURE__*/React__default['default'].createElement(iconButton.IconButton, {
|
|
213
|
-
effect: true,
|
|
214
|
-
className: prefixCls + "__down-btn",
|
|
215
|
-
icon: /*#__PURE__*/React__default['default'].createElement(icons.DownOutlined, null),
|
|
216
|
-
onClick: function onClick() {
|
|
217
|
-
if (scrollRef && innerRef) {
|
|
218
|
-
var canScroll = scrollRef.clientHeight - innerRef.clientHeight + translateY;
|
|
219
|
-
var moveWidth = 0;
|
|
220
|
-
|
|
221
|
-
if (canScroll >= innerRef.clientHeight) {
|
|
222
|
-
moveWidth = innerRef.clientHeight;
|
|
223
|
-
} else {
|
|
224
|
-
moveWidth = canScroll;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
setTranslateY(translateY - moveWidth);
|
|
228
|
-
}
|
|
274
|
+
if (!scrollElement) return;
|
|
275
|
+
if (!innerElement) return; // 向后面滚动
|
|
276
|
+
|
|
277
|
+
var scrollSize = getClientSize(scrollElement);
|
|
278
|
+
var innerSize = getClientSize(innerElement);
|
|
279
|
+
var canScrollWidth = scrollSize - innerSize + translatePos;
|
|
280
|
+
var moveWidth = canScrollWidth < innerSize ? canScrollWidth : innerSize;
|
|
281
|
+
setTranslatePos(function (prev) {
|
|
282
|
+
return prev - moveWidth;
|
|
283
|
+
});
|
|
229
284
|
}
|
|
230
|
-
}), editable ? /*#__PURE__*/React__default[
|
|
231
|
-
icon: /*#__PURE__*/React__default[
|
|
285
|
+
}) : null, editable ? /*#__PURE__*/React__default["default"].createElement(iconButton.IconButton, {
|
|
286
|
+
icon: /*#__PURE__*/React__default["default"].createElement(icons.PlusOutlined, null),
|
|
232
287
|
className: prefixCls + "__add-btn",
|
|
233
288
|
onClick: onAdd
|
|
234
289
|
}) : null, extra);
|
|
@@ -239,4 +294,3 @@ if (env.__DEV__) {
|
|
|
239
294
|
}
|
|
240
295
|
|
|
241
296
|
exports.TabList = TabList;
|
|
242
|
-
//# sourceMappingURL=TabList.js.map
|
package/lib/cjs/TabPane.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @hi-ui/tabs
|
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/tabs#readme
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c)
|
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -15,8 +15,12 @@ Object.defineProperty(exports, '__esModule', {
|
|
|
15
15
|
value: true
|
|
16
16
|
});
|
|
17
17
|
|
|
18
|
+
var tslib = require('tslib');
|
|
19
|
+
|
|
18
20
|
var React = require('react');
|
|
19
21
|
|
|
22
|
+
var reactUtils = require('@hi-ui/react-utils');
|
|
23
|
+
|
|
20
24
|
function _interopDefaultLegacy(e) {
|
|
21
25
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
22
26
|
'default': e
|
|
@@ -25,16 +29,20 @@ function _interopDefaultLegacy(e) {
|
|
|
25
29
|
|
|
26
30
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
27
31
|
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
var omitProps = ['tabId', 'tabTitle', 'disabled', 'tabDesc', 'closeable'];
|
|
33
|
+
|
|
34
|
+
var TabPane = function TabPane(_a) {
|
|
35
|
+
var children = _a.children,
|
|
36
|
+
className = _a.className,
|
|
37
|
+
style = _a.style,
|
|
38
|
+
active = _a.active,
|
|
39
|
+
rest = tslib.__rest(_a, ["children", "className", "style", "active"]);
|
|
40
|
+
|
|
41
|
+
var htmlProps = reactUtils.filterProps(rest, omitProps);
|
|
42
|
+
return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
|
|
34
43
|
style: style,
|
|
35
44
|
className: className
|
|
36
|
-
}, active ? children : null);
|
|
45
|
+
}, htmlProps), active ? children : null);
|
|
37
46
|
};
|
|
38
47
|
|
|
39
48
|
exports.TabPane = TabPane;
|
|
40
|
-
//# sourceMappingURL=TabPane.js.map
|