@hi-ui/tabs 4.2.0 → 5.0.0-alpha.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/CHANGELOG.md +50 -0
- package/lib/cjs/TabInk.js +10 -1
- package/lib/cjs/TabItem.js +131 -18
- package/lib/cjs/TabList.js +184 -12
- package/lib/cjs/Tabs.js +17 -2
- package/lib/cjs/hooks/index.js +8 -3
- package/lib/cjs/hooks/use-id/lib/esm/index.js +34 -0
- package/lib/cjs/hooks/use-id/node_modules/uuid/dist/esm-browser/regex.js +16 -0
- package/lib/cjs/hooks/use-id/node_modules/uuid/dist/esm-browser/rng.js +33 -0
- package/lib/cjs/hooks/use-id/node_modules/uuid/dist/esm-browser/stringify.js +41 -0
- package/lib/cjs/hooks/use-id/node_modules/uuid/dist/esm-browser/v4.js +33 -0
- package/lib/cjs/hooks/use-id/node_modules/uuid/dist/esm-browser/validate.js +19 -0
- package/lib/cjs/styles/index.scss.js +1 -1
- package/lib/cjs/utils/index.js +7 -2
- package/lib/esm/TabInk.js +10 -1
- package/lib/esm/TabItem.js +131 -19
- package/lib/esm/TabList.js +184 -13
- package/lib/esm/Tabs.js +17 -2
- package/lib/esm/hooks/index.js +8 -3
- package/lib/esm/hooks/use-id/lib/esm/index.js +29 -0
- package/lib/esm/hooks/use-id/node_modules/uuid/dist/esm-browser/regex.js +11 -0
- package/lib/esm/hooks/use-id/node_modules/uuid/dist/esm-browser/rng.js +27 -0
- package/lib/esm/hooks/use-id/node_modules/uuid/dist/esm-browser/stringify.js +36 -0
- package/lib/esm/hooks/use-id/node_modules/uuid/dist/esm-browser/v4.js +28 -0
- package/lib/esm/hooks/use-id/node_modules/uuid/dist/esm-browser/validate.js +14 -0
- package/lib/esm/styles/index.scss.js +1 -1
- package/lib/esm/utils/index.js +7 -2
- package/lib/types/TabInk.d.ts +1 -0
- package/lib/types/TabItem.d.ts +12 -2
- package/lib/types/TabList.d.ts +31 -2
- package/lib/types/Tabs.d.ts +31 -2
- package/package.json +16 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# @hi-ui/tabs
|
|
2
2
|
|
|
3
|
+
## 5.0.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 1b05b44a4: feat: 组件的 package.json 中的 exports 统一加上 types 配置 (5.0)
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- abebb5eed: feat(tabs): 支持拖拽 (5.0)
|
|
12
|
+
- 58bef969c: <br>
|
|
13
|
+
- feat(tabs): 增加 size 参数 (5.0)
|
|
14
|
+
- feat(tabs): 修改标签选中下标样式 (5.0)
|
|
15
|
+
- 1517a3349: feat(tabs): 支持编辑功能和设置最大标题宽度 (5.0)
|
|
16
|
+
- 9f2b6bab4: feat(tabs): add editRender api (5.0)
|
|
17
|
+
- 5de7a848b: feat(tabs): 增加 showDivider 参数 (5.0)
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- 36bb992d3: style: 修改 UI 问题 (5.0)
|
|
22
|
+
- 61d132802: build: 将 package.json 中 exports 配置中的 types 配置放在最上面 (5.0)
|
|
23
|
+
- b7ad460d8: style: 修改 UI (5.0)
|
|
24
|
+
- Updated dependencies [7bda04e64]
|
|
25
|
+
- Updated dependencies [77ed66eac]
|
|
26
|
+
- Updated dependencies [ddd2acc79]
|
|
27
|
+
- Updated dependencies [5de7a848b]
|
|
28
|
+
- Updated dependencies [1b05b44a4]
|
|
29
|
+
- Updated dependencies [0cd15438e]
|
|
30
|
+
- Updated dependencies [eb69f0baa]
|
|
31
|
+
- Updated dependencies [a01771e8d]
|
|
32
|
+
- Updated dependencies [5de7a848b]
|
|
33
|
+
- Updated dependencies [77ed66eac]
|
|
34
|
+
- Updated dependencies [632dbda3a]
|
|
35
|
+
- Updated dependencies [1b51c1bbe]
|
|
36
|
+
- Updated dependencies [61d132802]
|
|
37
|
+
- Updated dependencies [6ebf40f96]
|
|
38
|
+
- Updated dependencies [6eac4b78b]
|
|
39
|
+
- Updated dependencies [c125e4c48]
|
|
40
|
+
- @hi-ui/input@5.0.0-alpha.0
|
|
41
|
+
- @hi-ui/tooltip@5.0.0-alpha.0
|
|
42
|
+
- @hi-ui/core@5.0.0-alpha.0
|
|
43
|
+
- @hi-ui/use-latest@5.0.0-alpha.0
|
|
44
|
+
- @hi-ui/use-uncontrolled-state@5.0.0-alpha.0
|
|
45
|
+
- @hi-ui/use-unmount-effect@5.0.0-alpha.0
|
|
46
|
+
- @hi-ui/icons@5.0.0-alpha.0
|
|
47
|
+
- @hi-ui/icon-button@5.0.0-alpha.0
|
|
48
|
+
- @hi-ui/classname@5.0.0-alpha.0
|
|
49
|
+
- @hi-ui/env@5.0.0-alpha.0
|
|
50
|
+
- @hi-ui/react-utils@5.0.0-alpha.0
|
|
51
|
+
- @hi-ui/type-assertion@5.0.0-alpha.0
|
|
52
|
+
|
|
3
53
|
## 4.2.0
|
|
4
54
|
|
|
5
55
|
### Minor Changes
|
package/lib/cjs/TabInk.js
CHANGED
|
@@ -29,7 +29,8 @@ var TabInk = function TabInk(_ref) {
|
|
|
29
29
|
activeItemElement = _ref.activeItemElement,
|
|
30
30
|
activeTabId = _ref.activeTabId,
|
|
31
31
|
getTabOffset = _ref.getTabOffset,
|
|
32
|
-
showHorizontal = _ref.showHorizontal
|
|
32
|
+
showHorizontal = _ref.showHorizontal,
|
|
33
|
+
containerElement = _ref.containerElement;
|
|
33
34
|
var inkRef = React.useRef(null);
|
|
34
35
|
var setTabLnkPositionStyle = React.useCallback(function () {
|
|
35
36
|
if (!inkRef.current) return;
|
|
@@ -75,6 +76,14 @@ var TabInk = function TabInk(_ref) {
|
|
|
75
76
|
},
|
|
76
77
|
onResize: setTabLnkPositionStyle
|
|
77
78
|
});
|
|
79
|
+
index.useResizeObserver({
|
|
80
|
+
element: containerElement,
|
|
81
|
+
getSize: function getSize(element) {
|
|
82
|
+
var itemRect = element.getBoundingClientRect();
|
|
83
|
+
return showHorizontal ? itemRect.width : itemRect.height;
|
|
84
|
+
},
|
|
85
|
+
onResize: setTabLnkPositionStyle
|
|
86
|
+
});
|
|
78
87
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
79
88
|
className: classname.cx(prefixCls + "__ink", (_cx = {}, _cx[prefixCls + "__ink--disabled"] = disabled, _cx)),
|
|
80
89
|
ref: inkRef
|
package/lib/cjs/TabItem.js
CHANGED
|
@@ -13,28 +13,37 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
13
13
|
Object.defineProperty(exports, '__esModule', {
|
|
14
14
|
value: true
|
|
15
15
|
});
|
|
16
|
+
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
17
|
+
var tslib = require('tslib');
|
|
16
18
|
var React = require('react');
|
|
17
19
|
var classname = require('@hi-ui/classname');
|
|
18
20
|
var env = require('@hi-ui/env');
|
|
19
21
|
var icons = require('@hi-ui/icons');
|
|
22
|
+
var input = require('@hi-ui/input');
|
|
23
|
+
var tooltip = require('@hi-ui/tooltip');
|
|
20
24
|
function _interopDefaultCompat(e) {
|
|
21
25
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
22
26
|
'default': e
|
|
23
27
|
};
|
|
24
28
|
}
|
|
29
|
+
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultCompat(_regeneratorRuntime);
|
|
25
30
|
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
26
31
|
var TabItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
27
32
|
var _cx;
|
|
28
33
|
var className = _ref.className,
|
|
29
34
|
style = _ref.style,
|
|
30
35
|
disabled = _ref.disabled,
|
|
31
|
-
|
|
36
|
+
tabTitleProp = _ref.tabTitle,
|
|
32
37
|
tabDesc = _ref.tabDesc,
|
|
33
38
|
prefixCls = _ref.prefixCls,
|
|
34
39
|
tabId = _ref.tabId,
|
|
35
40
|
onTabClick = _ref.onTabClick,
|
|
36
41
|
active = _ref.active,
|
|
37
42
|
editable = _ref.editable,
|
|
43
|
+
editingProp = _ref.editing,
|
|
44
|
+
editRender = _ref.editRender,
|
|
45
|
+
onEdit = _ref.onEdit,
|
|
46
|
+
onCopy = _ref.onCopy,
|
|
38
47
|
onDelete = _ref.onDelete,
|
|
39
48
|
index = _ref.index,
|
|
40
49
|
_onDragStart = _ref.onDragStart,
|
|
@@ -48,25 +57,119 @@ var TabItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
48
57
|
_ref$closeable = _ref.closeable,
|
|
49
58
|
closeable = _ref$closeable === void 0 ? true : _ref$closeable,
|
|
50
59
|
_ref$direction = _ref.direction,
|
|
51
|
-
layout = _ref$direction === void 0 ? 'horizontal' : _ref$direction
|
|
60
|
+
layout = _ref$direction === void 0 ? 'horizontal' : _ref$direction,
|
|
61
|
+
maxTitleWidth = _ref.maxTitleWidth;
|
|
62
|
+
var _a, _b;
|
|
52
63
|
var _useState = React.useState(null),
|
|
53
64
|
dragId = _useState[0],
|
|
54
65
|
setDragId = _useState[1];
|
|
55
66
|
var _useState2 = React.useState(null),
|
|
56
67
|
direction = _useState2[0],
|
|
57
68
|
setDirection = _useState2[1];
|
|
69
|
+
var _useState3 = React.useState(editingProp),
|
|
70
|
+
editing = _useState3[0],
|
|
71
|
+
setEditing = _useState3[1];
|
|
72
|
+
var _useState4 = React.useState(tabTitleProp),
|
|
73
|
+
tabTitle = _useState4[0],
|
|
74
|
+
setTabTitle = _useState4[1];
|
|
75
|
+
var titleRef = React.useRef(null);
|
|
76
|
+
React.useEffect(function () {
|
|
77
|
+
setEditing(editingProp);
|
|
78
|
+
}, [editingProp]);
|
|
79
|
+
React.useEffect(function () {
|
|
80
|
+
setTabTitle(tabTitleProp);
|
|
81
|
+
}, [tabTitleProp]);
|
|
58
82
|
var _onClick = React.useCallback(function (e) {
|
|
59
83
|
if (onTabClick) {
|
|
60
84
|
onTabClick(tabId, e);
|
|
61
85
|
}
|
|
62
86
|
}, [onTabClick, tabId]);
|
|
63
|
-
|
|
87
|
+
var handleEditDone = React.useCallback(function (evt) {
|
|
88
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
|
|
89
|
+
var value, newTitle, result;
|
|
90
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
|
|
91
|
+
while (1) {
|
|
92
|
+
switch (_context.prev = _context.next) {
|
|
93
|
+
case 0:
|
|
94
|
+
value = evt.target.value;
|
|
95
|
+
newTitle = value;
|
|
96
|
+
if (!value) {
|
|
97
|
+
newTitle = tabTitleProp;
|
|
98
|
+
} else {
|
|
99
|
+
newTitle = value;
|
|
100
|
+
}
|
|
101
|
+
setTabTitle(newTitle);
|
|
102
|
+
_context.next = 6;
|
|
103
|
+
return onEdit === null || onEdit === void 0 ? void 0 : onEdit(newTitle);
|
|
104
|
+
case 6:
|
|
105
|
+
result = _context.sent;
|
|
106
|
+
if (!(result === false)) {
|
|
107
|
+
_context.next = 9;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
return _context.abrupt("return");
|
|
111
|
+
case 9:
|
|
112
|
+
setEditing(false);
|
|
113
|
+
onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(tabId, evt);
|
|
114
|
+
case 11:
|
|
115
|
+
case "end":
|
|
116
|
+
return _context.stop();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}, _callee);
|
|
120
|
+
}));
|
|
121
|
+
}, [onEdit, onTabClick, tabId, tabTitleProp]);
|
|
122
|
+
var renderEditor = React.useMemo(function () {
|
|
123
|
+
if (editable) {
|
|
124
|
+
if (editRender && active) {
|
|
125
|
+
return editRender({
|
|
126
|
+
tabId: tabId,
|
|
127
|
+
tabTitle: tabTitle
|
|
128
|
+
}, index, {
|
|
129
|
+
copy: function copy(targetIndex) {
|
|
130
|
+
return onCopy === null || onCopy === void 0 ? void 0 : onCopy(targetIndex);
|
|
131
|
+
},
|
|
132
|
+
edit: function edit() {
|
|
133
|
+
return setEditing(true);
|
|
134
|
+
},
|
|
135
|
+
"delete": function _delete() {
|
|
136
|
+
return onDelete === null || onDelete === void 0 ? void 0 : onDelete({
|
|
137
|
+
tabId: tabId,
|
|
138
|
+
tabTitle: tabTitle
|
|
139
|
+
}, {});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
if (closeable && !editRender) {
|
|
144
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
|
145
|
+
className: prefixCls + "__close-btn",
|
|
146
|
+
onClick: function onClick(evt) {
|
|
147
|
+
evt.stopPropagation();
|
|
148
|
+
if (onDelete) {
|
|
149
|
+
onDelete({
|
|
150
|
+
tabId: tabId,
|
|
151
|
+
tabTitle: tabTitle
|
|
152
|
+
}, evt);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}, /*#__PURE__*/React__default["default"].createElement(icons.CloseOutlined, null));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}, [active, closeable, editRender, editable, index, onCopy, onDelete, prefixCls, tabId, tabTitle]);
|
|
160
|
+
return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
|
|
64
161
|
style: style,
|
|
65
162
|
className: classname.cx(prefixCls + "__item", className, (_cx = {}, _cx[prefixCls + "__item--active"] = active, _cx[prefixCls + "__item--disabled"] = disabled, _cx[prefixCls + "__item--" + direction] = direction, _cx)),
|
|
66
163
|
ref: ref,
|
|
67
164
|
draggable: draggable,
|
|
68
165
|
tabIndex: disabled ? 0 : -1,
|
|
69
|
-
onClick: disabled ? undefined : _onClick
|
|
166
|
+
onClick: disabled ? undefined : _onClick
|
|
167
|
+
}, editable ? {
|
|
168
|
+
onDoubleClick: function onDoubleClick(e) {
|
|
169
|
+
e.stopPropagation();
|
|
170
|
+
setEditing(true);
|
|
171
|
+
}
|
|
172
|
+
} : {}, {
|
|
70
173
|
onDragStart: function onDragStart(e) {
|
|
71
174
|
e.stopPropagation();
|
|
72
175
|
e.dataTransfer.setData('tab', JSON.stringify({
|
|
@@ -154,22 +257,32 @@ var TabItem = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
154
257
|
});
|
|
155
258
|
}
|
|
156
259
|
}
|
|
157
|
-
}, /*#__PURE__*/React__default["default"].createElement("
|
|
158
|
-
className: prefixCls + "-
|
|
159
|
-
},
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
onDelete({
|
|
167
|
-
tabId: tabId,
|
|
168
|
-
tabTitle: tabTitle
|
|
169
|
-
}, index);
|
|
260
|
+
}), editing ? ( /*#__PURE__*/React__default["default"].createElement("div", {
|
|
261
|
+
className: prefixCls + "__edit-input"
|
|
262
|
+
}, /*#__PURE__*/React__default["default"].createElement(input.Input, {
|
|
263
|
+
value: tabTitle,
|
|
264
|
+
autoFocus: true,
|
|
265
|
+
onBlur: handleEditDone,
|
|
266
|
+
onKeyDown: function onKeyDown(evt) {
|
|
267
|
+
if (evt.key === 'Enter') {
|
|
268
|
+
handleEditDone(evt);
|
|
170
269
|
}
|
|
270
|
+
},
|
|
271
|
+
onChange: function onChange(e) {
|
|
272
|
+
setTabTitle(e.target.value);
|
|
171
273
|
}
|
|
172
|
-
}, /*#__PURE__*/React__default["default"].createElement(
|
|
274
|
+
}))) : ( /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(tooltip.Tooltip, {
|
|
275
|
+
title: tabTitle,
|
|
276
|
+
disabled: !maxTitleWidth || ((_b = (_a = titleRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : 0) < maxTitleWidth
|
|
277
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
278
|
+
ref: titleRef,
|
|
279
|
+
className: prefixCls + "-item__title",
|
|
280
|
+
style: {
|
|
281
|
+
maxWidth: maxTitleWidth
|
|
282
|
+
}
|
|
283
|
+
}, tabTitle)), type === 'desc' && /*#__PURE__*/React__default["default"].createElement("span", {
|
|
284
|
+
className: prefixCls + "-item__desc"
|
|
285
|
+
}, tabDesc), renderEditor)));
|
|
173
286
|
});
|
|
174
287
|
if (env.__DEV__) {
|
|
175
288
|
TabItem.displayName = 'TabItem';
|
package/lib/cjs/TabList.js
CHANGED
|
@@ -13,6 +13,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
13
13
|
Object.defineProperty(exports, '__esModule', {
|
|
14
14
|
value: true
|
|
15
15
|
});
|
|
16
|
+
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
16
17
|
var tslib = require('tslib');
|
|
17
18
|
var React = require('react');
|
|
18
19
|
var env = require('@hi-ui/env');
|
|
@@ -26,16 +27,19 @@ var iconButton = require('@hi-ui/icon-button');
|
|
|
26
27
|
var index = require('./hooks/index.js');
|
|
27
28
|
var useLatest = require('@hi-ui/use-latest');
|
|
28
29
|
var index$1 = require('./utils/index.js');
|
|
30
|
+
var input = require('@hi-ui/input');
|
|
31
|
+
var index$2 = require('./hooks/use-id/lib/esm/index.js');
|
|
29
32
|
function _interopDefaultCompat(e) {
|
|
30
33
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
31
34
|
'default': e
|
|
32
35
|
};
|
|
33
36
|
}
|
|
37
|
+
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultCompat(_regeneratorRuntime);
|
|
34
38
|
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
35
39
|
var _role = 'tabs';
|
|
36
40
|
var _prefix = classname.getPrefixCls(_role);
|
|
37
41
|
var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
38
|
-
var _cx;
|
|
42
|
+
var _cx, _cx2, _cx3, _cx4;
|
|
39
43
|
var _b;
|
|
40
44
|
var data = _a.data,
|
|
41
45
|
className = _a.className,
|
|
@@ -50,8 +54,12 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
50
54
|
_a$placement = _a.placement,
|
|
51
55
|
placement = _a$placement === void 0 ? 'horizontal' : _a$placement,
|
|
52
56
|
editable = _a.editable,
|
|
57
|
+
editRender = _a.editRender,
|
|
53
58
|
onAdd = _a.onAdd,
|
|
59
|
+
onAdded = _a.onAdded,
|
|
54
60
|
onDelete = _a.onDelete,
|
|
61
|
+
onEdit = _a.onEdit,
|
|
62
|
+
onCopy = _a.onCopy,
|
|
55
63
|
draggable = _a.draggable,
|
|
56
64
|
onDragStart = _a.onDragStart,
|
|
57
65
|
onDragOver = _a.onDragOver,
|
|
@@ -59,8 +67,12 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
59
67
|
onDragEnd = _a.onDragEnd,
|
|
60
68
|
_a$type = _a.type,
|
|
61
69
|
type = _a$type === void 0 ? 'line' : _a$type,
|
|
70
|
+
_a$size = _a.size,
|
|
71
|
+
size = _a$size === void 0 ? 'md' : _a$size,
|
|
72
|
+
showDivider = _a.showDivider,
|
|
62
73
|
extra = _a.extra,
|
|
63
|
-
|
|
74
|
+
maxTabTitleWidth = _a.maxTabTitleWidth,
|
|
75
|
+
rest = tslib.__rest(_a, ["data", "className", "style", "activeId", "defaultActiveId", "onChange", "onTabClick", "prefixCls", "direction", "placement", "editable", "editRender", "onAdd", "onAdded", "onDelete", "onEdit", "onCopy", "draggable", "onDragStart", "onDragOver", "onDrop", "onDragEnd", "type", "size", "showDivider", "extra", "maxTabTitleWidth"]);
|
|
64
76
|
var direction = (_b = placement !== null && placement !== void 0 ? placement : directionProp) !== null && _b !== void 0 ? _b : 'horizontal';
|
|
65
77
|
var _useUncontrolledState = useUncontrolledState.useUncontrolledState(function () {
|
|
66
78
|
if (typeAssertion.isUndef(defaultActiveId)) {
|
|
@@ -174,13 +186,135 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
174
186
|
setActiveTabId(tabId);
|
|
175
187
|
syncScrollPosition(tabId);
|
|
176
188
|
});
|
|
189
|
+
var _useState6 = React.useState(false),
|
|
190
|
+
adding = _useState6[0],
|
|
191
|
+
setAdding = _useState6[1];
|
|
192
|
+
var _useState7 = React.useState(data),
|
|
193
|
+
showData = _useState7[0],
|
|
194
|
+
setShowData = _useState7[1];
|
|
195
|
+
var addInputRef = React.useRef(null);
|
|
196
|
+
React.useEffect(function () {
|
|
197
|
+
setShowData(data);
|
|
198
|
+
}, [data]);
|
|
199
|
+
var handleAdd = useLatest.useLatestCallback(function () {
|
|
200
|
+
onAdd === null || onAdd === void 0 ? void 0 : onAdd();
|
|
201
|
+
setAdding(true);
|
|
202
|
+
});
|
|
203
|
+
var handleAddDone = useLatest.useLatestCallback(function (evt) {
|
|
204
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
|
|
205
|
+
var newTabTitle, newTabId, newTab, result;
|
|
206
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
|
|
207
|
+
while (1) {
|
|
208
|
+
switch (_context.prev = _context.next) {
|
|
209
|
+
case 0:
|
|
210
|
+
newTabTitle = evt.target.value;
|
|
211
|
+
if (newTabTitle) {
|
|
212
|
+
_context.next = 4;
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
setAdding(false);
|
|
216
|
+
return _context.abrupt("return");
|
|
217
|
+
case 4:
|
|
218
|
+
newTabId = index$2.uuid();
|
|
219
|
+
newTab = {
|
|
220
|
+
tabId: newTabId,
|
|
221
|
+
tabTitle: newTabTitle
|
|
222
|
+
};
|
|
223
|
+
_context.next = 8;
|
|
224
|
+
return onAdded === null || onAdded === void 0 ? void 0 : onAdded(newTab);
|
|
225
|
+
case 8:
|
|
226
|
+
result = _context.sent;
|
|
227
|
+
if (!(result === false)) {
|
|
228
|
+
_context.next = 11;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
return _context.abrupt("return");
|
|
232
|
+
case 11:
|
|
233
|
+
setActiveTabId(newTabId);
|
|
234
|
+
setAdding(false);
|
|
235
|
+
case 13:
|
|
236
|
+
case "end":
|
|
237
|
+
return _context.stop();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}, _callee);
|
|
241
|
+
}));
|
|
242
|
+
});
|
|
243
|
+
var handleEdit = useLatest.useLatestCallback(function (value, item) {
|
|
244
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2() {
|
|
245
|
+
var result;
|
|
246
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
|
|
247
|
+
while (1) {
|
|
248
|
+
switch (_context2.prev = _context2.next) {
|
|
249
|
+
case 0:
|
|
250
|
+
_context2.next = 2;
|
|
251
|
+
return onEdit === null || onEdit === void 0 ? void 0 : onEdit(value, item);
|
|
252
|
+
case 2:
|
|
253
|
+
result = _context2.sent;
|
|
254
|
+
if (!(result === false)) {
|
|
255
|
+
_context2.next = 5;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
return _context2.abrupt("return", false);
|
|
259
|
+
case 5:
|
|
260
|
+
syncScrollPosition(activeTabId);
|
|
261
|
+
return _context2.abrupt("return", true);
|
|
262
|
+
case 7:
|
|
263
|
+
case "end":
|
|
264
|
+
return _context2.stop();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}, _callee2);
|
|
268
|
+
}));
|
|
269
|
+
});
|
|
270
|
+
var handleDelete = useLatest.useLatestCallback(function (deletedNode, evt) {
|
|
271
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3() {
|
|
272
|
+
var result, nextTabId;
|
|
273
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
|
|
274
|
+
while (1) {
|
|
275
|
+
switch (_context3.prev = _context3.next) {
|
|
276
|
+
case 0:
|
|
277
|
+
_context3.next = 2;
|
|
278
|
+
return onDelete === null || onDelete === void 0 ? void 0 : onDelete(deletedNode, evt);
|
|
279
|
+
case 2:
|
|
280
|
+
result = _context3.sent;
|
|
281
|
+
if (!(result === false)) {
|
|
282
|
+
_context3.next = 5;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
return _context3.abrupt("return");
|
|
286
|
+
case 5:
|
|
287
|
+
nextTabId = index$1.getNextTabId(data, deletedNode.tabId === activeTabId ? activeTabId : deletedNode.tabId);
|
|
288
|
+
nextTabId && setActiveTabId(nextTabId);
|
|
289
|
+
nextTabId && syncScrollPosition(nextTabId);
|
|
290
|
+
case 8:
|
|
291
|
+
case "end":
|
|
292
|
+
return _context3.stop();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}, _callee3);
|
|
296
|
+
}));
|
|
297
|
+
});
|
|
298
|
+
var handleCopy = useLatest.useLatestCallback(function (targetIndex) {
|
|
299
|
+
var currentTab = showData.find(function (item) {
|
|
300
|
+
return item.tabId === activeTabId;
|
|
301
|
+
});
|
|
302
|
+
if (!currentTab) return;
|
|
303
|
+
var copiedTab = {
|
|
304
|
+
tabId: currentTab.tabId + "-" + index$2.uuid(),
|
|
305
|
+
tabTitle: currentTab.tabTitle
|
|
306
|
+
};
|
|
307
|
+
var insertIndex = targetIndex !== null && targetIndex !== void 0 ? targetIndex : showData.length;
|
|
308
|
+
var newItems = [].concat(showData.slice(0, insertIndex), [copiedTab], showData.slice(insertIndex));
|
|
309
|
+
onCopy === null || onCopy === void 0 ? void 0 : onCopy(currentTab, copiedTab, newItems);
|
|
310
|
+
});
|
|
177
311
|
React.useEffect(function () {
|
|
178
312
|
// activeId 受控模式下改变后,同步更新滚动位置
|
|
179
313
|
initScrollPosition(activeId);
|
|
180
314
|
}, [activeId, initScrollPosition]);
|
|
181
315
|
return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
|
|
182
316
|
style: style,
|
|
183
|
-
className: classname.cx(prefixCls + "__list", prefixCls + "__list--placement-" + direction, (_cx = {}, _cx[prefixCls + "__list--" + type] = type, _cx), className),
|
|
317
|
+
className: classname.cx(prefixCls + "__list", prefixCls + "__list--placement-" + direction, (_cx = {}, _cx[prefixCls + "__list--type-" + type] = type, _cx), (_cx2 = {}, _cx2[prefixCls + "__list--size-" + size] = size, _cx2), (_cx3 = {}, _cx3[prefixCls + "__list--show-divider"] = showDivider, _cx3), (_cx4 = {}, _cx4[prefixCls + "__list--editable"] = editable, _cx4), className),
|
|
184
318
|
ref: ref
|
|
185
319
|
}, rest), showScrollBtn ? ( /*#__PURE__*/React__default["default"].createElement(iconButton.IconButton, {
|
|
186
320
|
className: showHorizontal ? prefixCls + "__left-btn" : prefixCls + "__up-btn",
|
|
@@ -207,9 +341,9 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
207
341
|
style: showScrollBtn ? {
|
|
208
342
|
transform: direction === 'horizontal' ? "translateX(" + translatePos + "px)" : "translateY(" + translatePos + "px)"
|
|
209
343
|
} : undefined
|
|
210
|
-
},
|
|
344
|
+
}, showData.map(function (item, index) {
|
|
211
345
|
return /*#__PURE__*/React__default["default"].createElement(TabItem.TabItem, Object.assign({
|
|
212
|
-
key:
|
|
346
|
+
key: item.tabId
|
|
213
347
|
}, item, {
|
|
214
348
|
ref: function ref(node) {
|
|
215
349
|
itemsRef.current["" + item.tabId] = node;
|
|
@@ -219,22 +353,56 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
219
353
|
index: index,
|
|
220
354
|
active: activeTabId === item.tabId,
|
|
221
355
|
prefixCls: prefixCls,
|
|
356
|
+
closeable: item.closeable !== undefined ? item.closeable && showData.length > 1 : showData.length > 1,
|
|
222
357
|
draggable: draggable,
|
|
223
358
|
onTabClick: onClickTab,
|
|
224
359
|
editable: editable,
|
|
225
|
-
|
|
360
|
+
editRender: editRender,
|
|
361
|
+
onCopy: handleCopy,
|
|
362
|
+
onEdit: function onEdit(value) {
|
|
363
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4() {
|
|
364
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) {
|
|
365
|
+
while (1) {
|
|
366
|
+
switch (_context4.prev = _context4.next) {
|
|
367
|
+
case 0:
|
|
368
|
+
_context4.next = 2;
|
|
369
|
+
return handleEdit(value, item);
|
|
370
|
+
case 2:
|
|
371
|
+
return _context4.abrupt("return", _context4.sent);
|
|
372
|
+
case 3:
|
|
373
|
+
case "end":
|
|
374
|
+
return _context4.stop();
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}, _callee4);
|
|
378
|
+
}));
|
|
379
|
+
},
|
|
380
|
+
onDelete: handleDelete,
|
|
226
381
|
onDragStart: onDragStart,
|
|
227
382
|
onDragOver: onDragOver,
|
|
228
383
|
onDrop: onDrop,
|
|
229
384
|
onDragEnd: onDragEnd,
|
|
230
|
-
direction: direction
|
|
385
|
+
direction: direction,
|
|
386
|
+
maxTitleWidth: maxTabTitleWidth
|
|
231
387
|
}));
|
|
232
|
-
}),
|
|
388
|
+
}), adding ? ( /*#__PURE__*/React__default["default"].createElement("div", {
|
|
389
|
+
className: prefixCls + "__add-input",
|
|
390
|
+
ref: addInputRef
|
|
391
|
+
}, /*#__PURE__*/React__default["default"].createElement(input.Input, {
|
|
392
|
+
onBlur: handleAddDone,
|
|
393
|
+
autoFocus: true,
|
|
394
|
+
onKeyDown: function onKeyDown(evt) {
|
|
395
|
+
if (evt.key === 'Enter') {
|
|
396
|
+
handleAddDone(evt);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}))) : null, type === 'line' && showData.some(function (item) {
|
|
233
400
|
return item.tabId === activeTabId;
|
|
234
401
|
}) ? ( /*#__PURE__*/React__default["default"].createElement(TabInk.TabInk, {
|
|
235
402
|
prefixCls: prefixCls,
|
|
236
403
|
showHorizontal: showHorizontal,
|
|
237
404
|
activeItemElement: itemsRef.current[activeTabId],
|
|
405
|
+
containerElement: scrollElement,
|
|
238
406
|
activeTabId: activeTabId,
|
|
239
407
|
getTabOffset: getTabOffset
|
|
240
408
|
})) : null)), showScrollBtn ? ( /*#__PURE__*/React__default["default"].createElement(iconButton.IconButton, {
|
|
@@ -254,11 +422,15 @@ var TabList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
254
422
|
return prev - moveWidth;
|
|
255
423
|
});
|
|
256
424
|
}
|
|
257
|
-
})) : null, editable ? ( /*#__PURE__*/React__default["default"].createElement(
|
|
425
|
+
})) : null, editable ? ( /*#__PURE__*/React__default["default"].createElement("div", {
|
|
426
|
+
className: prefixCls + "__add-btn-wrap"
|
|
427
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
428
|
+
className: prefixCls + "__add-btn"
|
|
429
|
+
}, /*#__PURE__*/React__default["default"].createElement(iconButton.IconButton, {
|
|
430
|
+
effect: true,
|
|
258
431
|
icon: /*#__PURE__*/React__default["default"].createElement(icons.PlusOutlined, null),
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
})) : null, extra);
|
|
432
|
+
onClick: handleAdd
|
|
433
|
+
})))) : null, extra);
|
|
262
434
|
});
|
|
263
435
|
if (env.__DEV__) {
|
|
264
436
|
TabList.displayName = 'TabList';
|
package/lib/cjs/Tabs.js
CHANGED
|
@@ -45,7 +45,11 @@ var Tabs = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
45
45
|
editable = _a.editable,
|
|
46
46
|
_a$placement = _a.placement,
|
|
47
47
|
placement = _a$placement === void 0 ? 'horizontal' : _a$placement,
|
|
48
|
+
editRender = _a.editRender,
|
|
49
|
+
onEdit = _a.onEdit,
|
|
50
|
+
onCopy = _a.onCopy,
|
|
48
51
|
onAdd = _a.onAdd,
|
|
52
|
+
onAdded = _a.onAdded,
|
|
49
53
|
onDelete = _a.onDelete,
|
|
50
54
|
_a$draggable = _a.draggable,
|
|
51
55
|
draggable = _a$draggable === void 0 ? false : _a$draggable,
|
|
@@ -56,8 +60,12 @@ var Tabs = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
56
60
|
style = _a.style,
|
|
57
61
|
_a$type = _a.type,
|
|
58
62
|
type = _a$type === void 0 ? 'line' : _a$type,
|
|
63
|
+
_a$size = _a.size,
|
|
64
|
+
size = _a$size === void 0 ? 'md' : _a$size,
|
|
65
|
+
showDivider = _a.showDivider,
|
|
66
|
+
maxTabTitleWidth = _a.maxTabTitleWidth,
|
|
59
67
|
extra = _a.extra,
|
|
60
|
-
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "defaultActiveId", "activeId", "onChange", "onTabClick", "editable", "placement", "onAdd", "onDelete", "draggable", "onDragStart", "onDragOver", "onDragEnd", "onDrop", "style", "type", "extra"]);
|
|
68
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "defaultActiveId", "activeId", "onChange", "onTabClick", "editable", "placement", "editRender", "onEdit", "onCopy", "onAdd", "onAdded", "onDelete", "draggable", "onDragStart", "onDragOver", "onDragEnd", "onDrop", "style", "type", "size", "showDivider", "maxTabTitleWidth", "extra"]);
|
|
61
69
|
var tabList = React.useMemo(function () {
|
|
62
70
|
var list = [];
|
|
63
71
|
React__default["default"].Children.map(children, function (child) {
|
|
@@ -102,15 +110,22 @@ var Tabs = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
102
110
|
onTabClick: onTabClick,
|
|
103
111
|
placement: placement,
|
|
104
112
|
editable: editable,
|
|
113
|
+
editRender: editRender,
|
|
114
|
+
onEdit: onEdit,
|
|
115
|
+
onCopy: onCopy,
|
|
105
116
|
onAdd: onAdd,
|
|
117
|
+
onAdded: onAdded,
|
|
106
118
|
onDelete: onDelete,
|
|
107
119
|
draggable: draggable,
|
|
108
120
|
onDragEnd: onDragEnd,
|
|
109
121
|
onDragOver: onDragOver,
|
|
110
122
|
onDrop: onDrop,
|
|
111
123
|
type: type,
|
|
124
|
+
size: size,
|
|
125
|
+
showDivider: showDivider,
|
|
112
126
|
onDragStart: onDragStart,
|
|
113
|
-
extra: extra
|
|
127
|
+
extra: extra,
|
|
128
|
+
maxTabTitleWidth: maxTabTitleWidth
|
|
114
129
|
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
115
130
|
className: _prefix + "__content"
|
|
116
131
|
}, React__default["default"].Children.map(children, function (child) {
|
package/lib/cjs/hooks/index.js
CHANGED
|
@@ -30,8 +30,9 @@ var useResizeObserver = function useResizeObserver(_ref) {
|
|
|
30
30
|
var prevSizeRef = React.useRef(initialSize);
|
|
31
31
|
var unmountRef = useUnmountEffect.useUnmountEffect();
|
|
32
32
|
React.useEffect(function () {
|
|
33
|
+
var resizeObserver;
|
|
33
34
|
if (element) {
|
|
34
|
-
|
|
35
|
+
resizeObserver = new ResizeObserver(function () {
|
|
35
36
|
if (unmountRef.current) return;
|
|
36
37
|
var getSize = getSizeLatestRef.current;
|
|
37
38
|
if (element) {
|
|
@@ -46,9 +47,13 @@ var useResizeObserver = function useResizeObserver(_ref) {
|
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
});
|
|
49
|
-
|
|
50
|
+
resizeObserver.observe(element);
|
|
50
51
|
}
|
|
51
|
-
return function () {
|
|
52
|
+
return function () {
|
|
53
|
+
if (resizeObserver) {
|
|
54
|
+
resizeObserver.disconnect();
|
|
55
|
+
}
|
|
56
|
+
};
|
|
52
57
|
}, [element, getSizeLatestRef, onResizeLatest, unmountRef]);
|
|
53
58
|
};
|
|
54
59
|
exports.useResizeObserver = useResizeObserver;
|