@hi-ui/tabs 4.0.0-beta.7 → 4.0.0

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 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) HIUI <mi-hiui@xiaomi.com>.
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
- itemRef = _ref.itemRef,
36
- tabListRef = _ref.tabListRef,
37
- direction = _ref.direction,
38
- translate = _ref.translate;
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.useEffect(function () {
41
- if (inkRef.current && itemRef && tabListRef) {
42
- var itemRect = itemRef.getBoundingClientRect();
43
- var listRect = tabListRef.getBoundingClientRect();
44
- var _style = {};
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
- if (direction === 'vertical') {
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
- Object.assign(inkRef.current.style, _style);
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
- }, [itemRef, tabListRef, direction]);
65
- return /*#__PURE__*/React__default['default'].createElement("div", {
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
@@ -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) HIUI <mi-hiui@xiaomi.com>.
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['default'].createElement("div", {
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['default'].createElement("span", {
177
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
178
178
  className: prefixCls + "-item__title"
179
- }, tabTitle), type === 'desc' && /*#__PURE__*/React__default['default'].createElement("span", {
179
+ }, tabTitle), type === 'desc' && /*#__PURE__*/React__default["default"].createElement("span", {
180
180
  className: prefixCls + "-item__desc"
181
- }, tabDesc), editable && closeable && /*#__PURE__*/React__default['default'].createElement("span", {
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['default'].createElement(icons.CloseOutlined, null)));
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
@@ -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) HIUI <mi-hiui@xiaomi.com>.
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 (_ref, ref) {
56
+ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
49
57
  var _cx;
50
58
 
51
- var data = _ref.data,
52
- className = _ref.className,
53
- style = _ref.style,
54
- activeId = _ref.activeId,
55
- defaultActiveId = _ref.defaultActiveId,
56
- onChange = _ref.onChange,
57
- onTabClick = _ref.onTabClick,
58
- _ref$prefixCls = _ref.prefixCls,
59
- prefixCls = _ref$prefixCls === void 0 ? _prefix : _ref$prefixCls,
60
- _ref$direction = _ref.direction,
61
- direction = _ref$direction === void 0 ? 'horizontal' : _ref$direction,
62
- editable = _ref.editable,
63
- onAdd = _ref.onAdd,
64
- onDelete = _ref.onDelete,
65
- draggable = _ref.draggable,
66
- onDragStart = _ref.onDragStart,
67
- onDragOver = _ref.onDragOver,
68
- onDrop = _ref.onDrop,
69
- onDragEnd = _ref.onDragEnd,
70
- _ref$type = _ref.type,
71
- type = _ref$type === void 0 ? 'line' : _ref$type,
72
- extra = _ref.extra;
73
-
74
- var _a;
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
- innerRef = _useState[0],
88
- setInnerRef = _useState[1];
99
+ innerElement = _useState[0],
100
+ setInnerElement = _useState[1];
89
101
 
90
102
  var _useState2 = React.useState(null),
91
- scrollRef = _useState2[0],
92
- setScrollRef = _useState2[1];
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
- translateX = _useState3[0],
96
- setTranslateX = _useState3[1];
112
+ translatePos = _useState3[0],
113
+ setTranslatePos = _useState3[1];
97
114
 
98
115
  var _useState4 = React.useState(0),
99
- translateY = _useState4[0],
100
- setTranslateY = _useState4[1];
116
+ translateBoundPos = _useState4[0],
117
+ setTranslateBoundPos = _useState4[1];
101
118
 
102
119
  var itemsRef = React.useRef({});
103
- var showScrollBtn = React.useMemo(function () {
104
- if (scrollRef && innerRef) {
105
- return direction === 'horizontal' ? (scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.clientWidth) > (innerRef === null || innerRef === void 0 ? void 0 : innerRef.clientWidth) : (scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.clientHeight) > (innerRef === null || innerRef === void 0 ? void 0 : innerRef.clientHeight);
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
- }, [scrollRef, innerRef, direction]);
108
- var onClickTab = React.useCallback(function (key, event) {
109
- if (onTabClick) {
110
- onTabClick(key, event);
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 (key !== activeTabId && setActiveTabId) {
114
- setActiveTabId(key);
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
- if (canScroll >= 0) {
131
- moveWidth = innerRef.clientWidth;
132
- } else {
133
- moveWidth = -translateX;
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
- setTranslateX(translateX + moveWidth);
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
- }), showScrollBtn && direction === 'vertical' && /*#__PURE__*/React__default['default'].createElement(iconButton.IconButton, {
140
- className: prefixCls + "__up-btn",
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
- icon: /*#__PURE__*/React__default['default'].createElement(icons.UpOutlined, null),
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 (scrollRef && innerRef) {
145
- var canScroll = -translateY - innerRef.clientHeight;
146
- var moveWidth = 0;
147
-
148
- if (canScroll >= 0) {
149
- moveWidth = innerRef.clientHeight;
150
- } else {
151
- moveWidth = -translateY;
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['default'].createElement("div", {
231
+ }) : null, /*#__PURE__*/React__default["default"].createElement("div", {
158
232
  className: classname.cx(prefixCls + "__list--inner"),
159
- ref: setInnerRef
160
- }, /*#__PURE__*/React__default['default'].createElement("div", {
233
+ ref: setInnerElement
234
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
161
235
  className: classname.cx(prefixCls + "__list--scroll"),
162
- ref: setScrollRef,
236
+ ref: setScrollElement,
163
237
  style: showScrollBtn ? {
164
- transform: direction === 'horizontal' ? "translateX(" + translateX + "px)" : "translateY(" + translateY + "px)"
165
- } : {}
166
- }, data.map(function (d, index) {
167
- return /*#__PURE__*/React__default['default'].createElement(TabItem.TabItem, Object.assign({
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
- }, d, {
243
+ }, item, {
170
244
  ref: function ref(node) {
171
- itemsRef.current["" + d.tabId] = node;
245
+ itemsRef.current["" + item.tabId] = node;
172
246
  },
173
247
  type: type,
174
- itemRef: itemsRef.current["" + d.tabId],
248
+ itemRef: itemsRef.current["" + item.tabId],
175
249
  index: index,
176
- active: activeTabId === d.tabId,
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' && /*#__PURE__*/React__default['default'].createElement(TabInk.TabInk, {
189
- translate: direction === 'horizontal' ? translateX : translateY,
262
+ }), type === 'line' ? /*#__PURE__*/React__default["default"].createElement(TabInk.TabInk, {
190
263
  prefixCls: prefixCls,
191
- direction: direction,
192
- tabListRef: innerRef,
193
- itemRef: (_a = itemsRef.current) === null || _a === void 0 ? void 0 : _a[activeTabId]
194
- }))), showScrollBtn && direction === 'horizontal' && /*#__PURE__*/React__default['default'].createElement(iconButton.IconButton, {
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
- icon: /*#__PURE__*/React__default['default'].createElement(icons.RightOutlined, null),
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 (scrollRef && innerRef) {
200
- var canScroll = scrollRef.clientWidth - innerRef.clientWidth + translateX;
201
- var moveWidth = 0;
202
-
203
- if (canScroll >= innerRef.clientWidth) {
204
- moveWidth = innerRef.clientWidth;
205
- } else {
206
- moveWidth = canScroll;
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['default'].createElement(iconButton.IconButton, {
231
- icon: /*#__PURE__*/React__default['default'].createElement(icons.PlusOutlined, null),
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
@@ -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) HIUI <mi-hiui@xiaomi.com>.
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 TabPane = function TabPane(_ref) {
29
- var children = _ref.children,
30
- className = _ref.className,
31
- style = _ref.style,
32
- active = _ref.active;
33
- return /*#__PURE__*/React__default['default'].createElement("div", {
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