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