@douyinfe/semi-ui 2.58.0-beta.0 → 2.58.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/dist/css/semi.css +108 -29
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +105 -31
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/lib/cjs/_base/base.css +2 -2
- package/lib/cjs/button/Button.d.ts +1 -1
- package/lib/cjs/button/Button.js +1 -0
- package/lib/cjs/locale/interface.d.ts +3 -0
- package/lib/cjs/locale/source/ar.js +3 -0
- package/lib/cjs/locale/source/de.js +3 -0
- package/lib/cjs/locale/source/en_GB.js +3 -0
- package/lib/cjs/locale/source/en_US.js +3 -0
- package/lib/cjs/locale/source/es.js +3 -0
- package/lib/cjs/locale/source/fr.js +3 -0
- package/lib/cjs/locale/source/id_ID.js +3 -0
- package/lib/cjs/locale/source/it.js +3 -0
- package/lib/cjs/locale/source/ja_JP.js +3 -0
- package/lib/cjs/locale/source/ko_KR.js +3 -0
- package/lib/cjs/locale/source/ms_MY.js +3 -0
- package/lib/cjs/locale/source/nl_NL.js +3 -0
- package/lib/cjs/locale/source/pl_PL.js +3 -0
- package/lib/cjs/locale/source/pt_BR.js +3 -0
- package/lib/cjs/locale/source/ro.js +3 -0
- package/lib/cjs/locale/source/ru_RU.js +3 -0
- package/lib/cjs/locale/source/sv_SE.js +3 -0
- package/lib/cjs/locale/source/th_TH.js +3 -0
- package/lib/cjs/locale/source/tr_TR.js +3 -0
- package/lib/cjs/locale/source/vi_VN.js +3 -0
- package/lib/cjs/locale/source/zh_CN.js +3 -0
- package/lib/cjs/locale/source/zh_TW.js +3 -0
- package/lib/cjs/slider/index.js +13 -8
- package/lib/cjs/tabs/TabBar.d.ts +7 -0
- package/lib/cjs/tabs/TabBar.js +78 -18
- package/lib/cjs/tabs/TabItem.js +3 -1
- package/lib/cjs/tabs/index.d.ts +1 -0
- package/lib/cjs/tabs/index.js +7 -4
- package/lib/cjs/tabs/interface.d.ts +7 -0
- package/lib/es/_base/base.css +2 -2
- package/lib/es/button/Button.d.ts +1 -1
- package/lib/es/button/Button.js +1 -0
- package/lib/es/locale/interface.d.ts +3 -0
- package/lib/es/locale/source/ar.js +3 -0
- package/lib/es/locale/source/de.js +3 -0
- package/lib/es/locale/source/en_GB.js +3 -0
- package/lib/es/locale/source/en_US.js +3 -0
- package/lib/es/locale/source/es.js +3 -0
- package/lib/es/locale/source/fr.js +3 -0
- package/lib/es/locale/source/id_ID.js +3 -0
- package/lib/es/locale/source/it.js +3 -0
- package/lib/es/locale/source/ja_JP.js +3 -0
- package/lib/es/locale/source/ko_KR.js +3 -0
- package/lib/es/locale/source/ms_MY.js +3 -0
- package/lib/es/locale/source/nl_NL.js +3 -0
- package/lib/es/locale/source/pl_PL.js +3 -0
- package/lib/es/locale/source/pt_BR.js +3 -0
- package/lib/es/locale/source/ro.js +3 -0
- package/lib/es/locale/source/ru_RU.js +3 -0
- package/lib/es/locale/source/sv_SE.js +3 -0
- package/lib/es/locale/source/th_TH.js +3 -0
- package/lib/es/locale/source/tr_TR.js +3 -0
- package/lib/es/locale/source/vi_VN.js +3 -0
- package/lib/es/locale/source/zh_CN.js +3 -0
- package/lib/es/locale/source/zh_TW.js +3 -0
- package/lib/es/slider/index.js +13 -8
- package/lib/es/tabs/TabBar.d.ts +7 -0
- package/lib/es/tabs/TabBar.js +79 -19
- package/lib/es/tabs/TabItem.js +3 -1
- package/lib/es/tabs/index.d.ts +1 -0
- package/lib/es/tabs/index.js +7 -4
- package/lib/es/tabs/interface.d.ts +7 -0
- package/package.json +8 -8
package/lib/cjs/_base/base.css
CHANGED
|
@@ -203,7 +203,7 @@ body, body .semi-always-light, :host, :host .semi-always-light {
|
|
|
203
203
|
--semi-yellow-9: 83,72,0;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
body[theme-mode=dark], body .semi-always-dark, :host
|
|
206
|
+
body[theme-mode=dark], body .semi-always-dark, :host([theme-mode=dark]), :host .semi-always-dark {
|
|
207
207
|
--semi-red-0: 108,9,11;
|
|
208
208
|
--semi-red-1: 144,17,16;
|
|
209
209
|
--semi-red-2: 180,32,25;
|
|
@@ -478,7 +478,7 @@ body, body[theme-mode=dark] .semi-always-light, :host, :host .semi-always-light
|
|
|
478
478
|
--semi-color-data-19: rgba(188, 198, 255, 1);
|
|
479
479
|
}
|
|
480
480
|
|
|
481
|
-
body[theme-mode=dark], body .semi-always-dark, :host
|
|
481
|
+
body[theme-mode=dark], body .semi-always-dark, :host([theme-mode=dark]), :host .semi-always-dark {
|
|
482
482
|
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
483
483
|
-webkit-font-smoothing: antialiased;
|
|
484
484
|
--semi-color-white: rgba(228, 231, 245, 1);
|
|
@@ -4,7 +4,7 @@ import '@douyinfe/semi-foundation/lib/cjs/button/button.css';
|
|
|
4
4
|
import { noop } from '@douyinfe/semi-foundation/lib/cjs/utils/function';
|
|
5
5
|
export type HtmlType = 'button' | 'reset' | 'submit';
|
|
6
6
|
export type Size = 'default' | 'small' | 'large';
|
|
7
|
-
export type Theme = 'solid' | 'borderless' | 'light';
|
|
7
|
+
export type Theme = 'solid' | 'borderless' | 'light' | 'outline';
|
|
8
8
|
export type Type = 'primary' | 'secondary' | 'tertiary' | 'warning' | 'danger';
|
|
9
9
|
export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {
|
|
10
10
|
id?: string;
|
package/lib/cjs/button/Button.js
CHANGED
|
@@ -60,6 +60,7 @@ class Button extends _react.PureComponent {
|
|
|
60
60
|
[`${prefixCls}-block`]: block,
|
|
61
61
|
[`${prefixCls}-circle`]: circle,
|
|
62
62
|
[`${prefixCls}-borderless`]: theme === 'borderless',
|
|
63
|
+
[`${prefixCls}-outline`]: theme === "outline",
|
|
63
64
|
[`${prefixCls}-${type}-disabled`]: disabled && type
|
|
64
65
|
}, className),
|
|
65
66
|
type: htmlType,
|
package/lib/cjs/slider/index.js
CHANGED
|
@@ -273,11 +273,11 @@ class Slider extends _baseComponent.default {
|
|
|
273
273
|
const minPercent = percentInfo.min;
|
|
274
274
|
const maxPercent = percentInfo.max;
|
|
275
275
|
let trackStyle = !vertical ? {
|
|
276
|
-
width: range ? `${(maxPercent - minPercent) * 100}%` : `${minPercent * 100}%`,
|
|
277
|
-
left: range ? `${minPercent * 100}%` : 0
|
|
276
|
+
width: range ? `${Math.abs(maxPercent - minPercent) * 100}%` : `${minPercent * 100}%`,
|
|
277
|
+
left: range ? `${Math.min(minPercent, maxPercent) * 100}%` : 0
|
|
278
278
|
} : {
|
|
279
|
-
height: range ? `${(maxPercent - minPercent) * 100}%` : `${minPercent * 100}%`,
|
|
280
|
-
top: range ? `${minPercent * 100}%` : 0
|
|
279
|
+
height: range ? `${Math.abs(maxPercent - minPercent) * 100}%` : `${minPercent * 100}%`,
|
|
280
|
+
top: range ? `${Math.min(minPercent, maxPercent) * 100}%` : 0
|
|
281
281
|
};
|
|
282
282
|
trackStyle = included ? trackStyle : {};
|
|
283
283
|
return (
|
|
@@ -392,11 +392,13 @@ class Slider extends _baseComponent.default {
|
|
|
392
392
|
var _this = this;
|
|
393
393
|
return Object.assign(Object.assign({}, super.adapter), {
|
|
394
394
|
getSliderLengths: () => {
|
|
395
|
+
var _a;
|
|
395
396
|
if (this.sliderEl && this.sliderEl.current) {
|
|
396
397
|
const rect = this.sliderEl.current.getBoundingClientRect();
|
|
398
|
+
const offsetParentRect = (_a = this.sliderEl.current.offsetParent) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
|
|
397
399
|
const offset = {
|
|
398
|
-
x: this.sliderEl.current.offsetLeft,
|
|
399
|
-
y: this.sliderEl.current.offsetTop
|
|
400
|
+
x: offsetParentRect ? rect.left - offsetParentRect.left : this.sliderEl.current.offsetLeft,
|
|
401
|
+
y: offsetParentRect ? rect.top - offsetParentRect.top : this.sliderEl.current.offsetTop
|
|
400
402
|
};
|
|
401
403
|
return {
|
|
402
404
|
sliderX: offset.x,
|
|
@@ -453,7 +455,9 @@ class Slider extends _baseComponent.default {
|
|
|
453
455
|
let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _noop2.default;
|
|
454
456
|
this.setState(stateObj, callback);
|
|
455
457
|
},
|
|
456
|
-
notifyChange: cbValue =>
|
|
458
|
+
notifyChange: cbValue => {
|
|
459
|
+
this.props.onChange(Array.isArray(cbValue) ? [...cbValue].sort() : cbValue);
|
|
460
|
+
},
|
|
457
461
|
setDragging: value => {
|
|
458
462
|
this.dragging = value;
|
|
459
463
|
},
|
|
@@ -606,7 +610,8 @@ class Slider extends _baseComponent.default {
|
|
|
606
610
|
[`${prefixCls}`]: !vertical,
|
|
607
611
|
[_constants.cssClasses.VERTICAL]: vertical
|
|
608
612
|
});
|
|
609
|
-
const
|
|
613
|
+
const fixedCurrentValue = Array.isArray(currentValue) ? [...currentValue].sort() : currentValue;
|
|
614
|
+
const ariaLabel = range ? `Range: ${this._getAriaValueText(fixedCurrentValue[0], 0)} to ${this._getAriaValueText(fixedCurrentValue[1], 1)}` : undefined;
|
|
610
615
|
const slider = /*#__PURE__*/_react.default.createElement("div", Object.assign({
|
|
611
616
|
className: wrapperClass,
|
|
612
617
|
style: style,
|
package/lib/cjs/tabs/TabBar.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { MouseEvent, ReactNode } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
+
import { DropdownProps } from '../dropdown';
|
|
3
4
|
import { TabBarProps, PlainTab } from './interface';
|
|
4
5
|
export interface TabBarState {
|
|
5
6
|
endInd: number;
|
|
@@ -25,19 +26,25 @@ declare class TabBar extends React.Component<TabBarProps, TabBarState> {
|
|
|
25
26
|
type: PropTypes.Requireable<string>;
|
|
26
27
|
closable: PropTypes.Requireable<boolean>;
|
|
27
28
|
deleteTabItem: PropTypes.Requireable<(...args: any[]) => any>;
|
|
29
|
+
more: PropTypes.Requireable<NonNullable<number | object>>;
|
|
28
30
|
};
|
|
29
31
|
constructor(props: TabBarProps);
|
|
30
32
|
componentDidMount(): void;
|
|
33
|
+
componentDidUpdate(prevProps: any): void;
|
|
31
34
|
renderIcon(icon: ReactNode): ReactNode;
|
|
32
35
|
renderExtra(): ReactNode;
|
|
33
36
|
handleItemClick: (itemKey: string, e: MouseEvent<Element>) => void;
|
|
34
37
|
handleKeyDown: (event: React.KeyboardEvent, itemKey: string, closable: boolean) => void;
|
|
35
38
|
renderTabItem: (panel: PlainTab) => ReactNode;
|
|
39
|
+
scrollTabItemIntoViewByKey: (key: string, logicalPosition?: ScrollLogicalPosition) => void;
|
|
40
|
+
scrollActiveTabItemIntoView: (logicalPosition?: ScrollLogicalPosition) => void;
|
|
36
41
|
renderTabComponents: (list: Array<PlainTab>) => Array<ReactNode>;
|
|
37
42
|
handleArrowClick: (items: Array<OverflowItem>, pos: 'start' | 'end') => void;
|
|
38
43
|
renderCollapse: (items: Array<OverflowItem>, icon: ReactNode, pos: 'start' | 'end') => ReactNode;
|
|
39
44
|
renderOverflow: (items: any[]) => Array<ReactNode>;
|
|
40
45
|
renderCollapsedTab: () => ReactNode;
|
|
46
|
+
renderWithMoreTrigger: () => ReactNode;
|
|
47
|
+
renderMoreDropdown: (panels: PlainTab[], dropDownProps: DropdownProps, trigger: ReactNode) => ReactNode;
|
|
41
48
|
render(): ReactNode;
|
|
42
49
|
private _isActive;
|
|
43
50
|
private _getItemKey;
|
package/lib/cjs/tabs/TabBar.js
CHANGED
|
@@ -17,6 +17,7 @@ var _button = _interopRequireDefault(require("../button"));
|
|
|
17
17
|
var _semiIcons = require("@douyinfe/semi-icons");
|
|
18
18
|
var _uuid = require("@douyinfe/semi-foundation/lib/cjs/utils/uuid");
|
|
19
19
|
var _TabItem = _interopRequireDefault(require("./TabItem"));
|
|
20
|
+
var _localeConsumer = _interopRequireDefault(require("../locale/localeConsumer"));
|
|
20
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
22
|
var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
22
23
|
var t = {};
|
|
@@ -28,18 +29,11 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
28
29
|
};
|
|
29
30
|
class TabBar extends _react.default.Component {
|
|
30
31
|
constructor(props) {
|
|
32
|
+
var _this;
|
|
31
33
|
super(props);
|
|
34
|
+
_this = this;
|
|
32
35
|
this.handleItemClick = (itemKey, e) => {
|
|
33
36
|
this.props.onTabClick(itemKey, e);
|
|
34
|
-
if (this.props.collapsible) {
|
|
35
|
-
const key = this._getItemKey(itemKey);
|
|
36
|
-
const tabItem = document.querySelector(`[data-uuid="${this.state.uuid}"] .${_constants.cssClasses.TABS_TAB}[data-scrollkey="${key}"]`);
|
|
37
|
-
tabItem.scrollIntoView({
|
|
38
|
-
behavior: 'smooth',
|
|
39
|
-
block: 'nearest',
|
|
40
|
-
inline: 'nearest'
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
37
|
};
|
|
44
38
|
this.handleKeyDown = (event, itemKey, closable) => {
|
|
45
39
|
this.props.handleKeyDown(event, itemKey, closable);
|
|
@@ -64,6 +58,19 @@ class TabBar extends _react.default.Component {
|
|
|
64
58
|
onClick: this.handleItemClick
|
|
65
59
|
}));
|
|
66
60
|
};
|
|
61
|
+
this.scrollTabItemIntoViewByKey = function (key) {
|
|
62
|
+
let logicalPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'nearest';
|
|
63
|
+
const tabItem = document.querySelector(`[data-uuid="${_this.state.uuid}"] .${_constants.cssClasses.TABS_TAB}[data-scrollkey="${key}"]`);
|
|
64
|
+
tabItem === null || tabItem === void 0 ? void 0 : tabItem.scrollIntoView({
|
|
65
|
+
behavior: 'smooth',
|
|
66
|
+
block: logicalPosition,
|
|
67
|
+
inline: logicalPosition
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
this.scrollActiveTabItemIntoView = logicalPosition => {
|
|
71
|
+
const key = this._getItemKey(this.props.activeKey);
|
|
72
|
+
this.scrollTabItemIntoViewByKey(key, logicalPosition);
|
|
73
|
+
};
|
|
67
74
|
this.renderTabComponents = list => list.map(panel => this.renderTabItem(panel));
|
|
68
75
|
this.handleArrowClick = (items, pos) => {
|
|
69
76
|
const lastItem = pos === 'start' ? items.pop() : items.shift();
|
|
@@ -71,12 +78,7 @@ class TabBar extends _react.default.Component {
|
|
|
71
78
|
return;
|
|
72
79
|
}
|
|
73
80
|
const key = this._getItemKey(lastItem.itemKey);
|
|
74
|
-
|
|
75
|
-
tabItem.scrollIntoView({
|
|
76
|
-
behavior: 'smooth',
|
|
77
|
-
block: 'nearest',
|
|
78
|
-
inline: 'nearest'
|
|
79
|
-
});
|
|
81
|
+
this.scrollTabItemIntoViewByKey(key);
|
|
80
82
|
};
|
|
81
83
|
this.renderCollapse = (items, icon, pos) => {
|
|
82
84
|
if ((0, _isEmpty2.default)(items)) {
|
|
@@ -163,6 +165,55 @@ class TabBar extends _react.default.Component {
|
|
|
163
165
|
visibleItemRenderer: this.renderTabItem
|
|
164
166
|
});
|
|
165
167
|
};
|
|
168
|
+
this.renderWithMoreTrigger = () => {
|
|
169
|
+
const {
|
|
170
|
+
list,
|
|
171
|
+
more
|
|
172
|
+
} = this.props;
|
|
173
|
+
let tabElements = [];
|
|
174
|
+
let moreTrigger = /*#__PURE__*/_react.default.createElement("div", {
|
|
175
|
+
className: (0, _classnames.default)({
|
|
176
|
+
[`${_constants.cssClasses.TABS_BAR}-more-trigger`]: true,
|
|
177
|
+
[`${_constants.cssClasses.TABS_BAR}-more-trigger-${this.props.type}`]: true
|
|
178
|
+
})
|
|
179
|
+
}, /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
|
|
180
|
+
componentName: "Tabs"
|
|
181
|
+
}, (locale, localeCode) => /*#__PURE__*/_react.default.createElement("div", {
|
|
182
|
+
className: `${_constants.cssClasses.TABS_BAR}-more-trigger-content`
|
|
183
|
+
}, /*#__PURE__*/_react.default.createElement("div", null, locale.more), /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronDown, {
|
|
184
|
+
className: `${_constants.cssClasses.TABS_BAR}-more-trigger-content-icon`
|
|
185
|
+
}))));
|
|
186
|
+
let keepCount;
|
|
187
|
+
if (typeof more === "number") {
|
|
188
|
+
keepCount = list.length - Math.min(more, list.length);
|
|
189
|
+
tabElements = list.slice(0, keepCount).map(panel => this.renderTabItem(panel));
|
|
190
|
+
} else if (typeof more === 'object') {
|
|
191
|
+
keepCount = list.length - Math.min(more.count, list.length);
|
|
192
|
+
tabElements = list.slice(0, keepCount).map(panel => this.renderTabItem(panel));
|
|
193
|
+
if (more.render) {
|
|
194
|
+
moreTrigger = more.render();
|
|
195
|
+
}
|
|
196
|
+
} else if (more !== undefined) {
|
|
197
|
+
throw new Error("[Semi Tabs]: invalid tab props format: more");
|
|
198
|
+
}
|
|
199
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, tabElements, this.renderMoreDropdown(list.slice(keepCount), more === null || more === void 0 ? void 0 : more['dropdownProps'], moreTrigger));
|
|
200
|
+
};
|
|
201
|
+
this.renderMoreDropdown = (panels, dropDownProps, trigger) => {
|
|
202
|
+
return /*#__PURE__*/_react.default.createElement(_dropdown.default, Object.assign({
|
|
203
|
+
trigger: 'hover',
|
|
204
|
+
showTick: true,
|
|
205
|
+
position: 'bottomLeft',
|
|
206
|
+
className: `${_constants.cssClasses.TABS_BAR}-more-dropdown-${this.props.type}`,
|
|
207
|
+
clickToHide: true,
|
|
208
|
+
menu: panels.map(panel => ({
|
|
209
|
+
node: 'item',
|
|
210
|
+
name: panel.tab,
|
|
211
|
+
icon: panel.icon,
|
|
212
|
+
onClick: e => this.props.onTabClick(panel.itemKey, e),
|
|
213
|
+
active: this.props.activeKey === panel.itemKey
|
|
214
|
+
}))
|
|
215
|
+
}, dropDownProps), trigger);
|
|
216
|
+
};
|
|
166
217
|
this._isActive = key => key === this.props.activeKey;
|
|
167
218
|
this._getItemKey = key => `${key}-bar`;
|
|
168
219
|
this.state = {
|
|
@@ -177,6 +228,13 @@ class TabBar extends _react.default.Component {
|
|
|
177
228
|
uuid: (0, _uuid.getUuidv4)()
|
|
178
229
|
});
|
|
179
230
|
}
|
|
231
|
+
componentDidUpdate(prevProps) {
|
|
232
|
+
if (prevProps.activeKey !== this.props.activeKey) {
|
|
233
|
+
if (this.props.collapsible) {
|
|
234
|
+
this.scrollActiveTabItemIntoView();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
180
238
|
renderIcon(icon) {
|
|
181
239
|
return /*#__PURE__*/_react.default.createElement("span", null, icon);
|
|
182
240
|
}
|
|
@@ -212,9 +270,10 @@ class TabBar extends _react.default.Component {
|
|
|
212
270
|
className,
|
|
213
271
|
list,
|
|
214
272
|
tabPosition,
|
|
273
|
+
more,
|
|
215
274
|
collapsible
|
|
216
275
|
} = _a,
|
|
217
|
-
restProps = __rest(_a, ["type", "style", "className", "list", "tabPosition", "collapsible"]);
|
|
276
|
+
restProps = __rest(_a, ["type", "style", "className", "list", "tabPosition", "more", "collapsible"]);
|
|
218
277
|
const classNames = (0, _classnames.default)(className, {
|
|
219
278
|
[_constants.cssClasses.TABS_BAR]: true,
|
|
220
279
|
[_constants.cssClasses.TABS_BAR_LINE]: type === 'line',
|
|
@@ -224,7 +283,7 @@ class TabBar extends _react.default.Component {
|
|
|
224
283
|
[`${_constants.cssClasses.TABS_BAR}-collapse`]: collapsible
|
|
225
284
|
});
|
|
226
285
|
const extra = this.renderExtra();
|
|
227
|
-
const contents = collapsible ? this.renderCollapsedTab() : this.renderTabComponents(list);
|
|
286
|
+
const contents = collapsible ? this.renderCollapsedTab() : more ? this.renderWithMoreTrigger() : this.renderTabComponents(list);
|
|
228
287
|
return /*#__PURE__*/_react.default.createElement("div", Object.assign({
|
|
229
288
|
role: "tablist",
|
|
230
289
|
"aria-orientation": tabPosition === "left" ? "vertical" : "horizontal",
|
|
@@ -247,7 +306,8 @@ TabBar.propTypes = {
|
|
|
247
306
|
tabPosition: _propTypes.default.oneOf(_constants.strings.POSITION_MAP),
|
|
248
307
|
type: _propTypes.default.oneOf(_constants.strings.TYPE_MAP),
|
|
249
308
|
closable: _propTypes.default.bool,
|
|
250
|
-
deleteTabItem: _propTypes.default.func
|
|
309
|
+
deleteTabItem: _propTypes.default.func,
|
|
310
|
+
more: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.object])
|
|
251
311
|
};
|
|
252
312
|
var _default = TabBar;
|
|
253
313
|
exports.default = _default;
|
package/lib/cjs/tabs/TabItem.js
CHANGED
|
@@ -43,7 +43,9 @@ const TabItem = (props, ref) => {
|
|
|
43
43
|
onClick: e => deleteTabItem(itemKey, e)
|
|
44
44
|
}) : null;
|
|
45
45
|
}, [type, closable, deleteTabItem, itemKey]);
|
|
46
|
-
const renderIcon = (0, _react.useCallback)(icon => /*#__PURE__*/_react.default.createElement("span",
|
|
46
|
+
const renderIcon = (0, _react.useCallback)(icon => /*#__PURE__*/_react.default.createElement("span", {
|
|
47
|
+
className: `${_constants.cssClasses.TABS_BAR}-icon`
|
|
48
|
+
}, icon), []);
|
|
47
49
|
const handleKeyDownInItem = (0, _react.useCallback)(event => {
|
|
48
50
|
handleKeyDown && handleKeyDown(event, itemKey, closable);
|
|
49
51
|
}, [handleKeyDown, itemKey, closable]);
|
package/lib/cjs/tabs/index.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ declare class Tabs extends BaseComponent<TabsProps, TabsState> {
|
|
|
37
37
|
type: PropTypes.Requireable<string>;
|
|
38
38
|
onTabClose: PropTypes.Requireable<(...args: any[]) => any>;
|
|
39
39
|
preventScroll: PropTypes.Requireable<boolean>;
|
|
40
|
+
more: PropTypes.Requireable<NonNullable<number | object>>;
|
|
40
41
|
};
|
|
41
42
|
static __SemiComponentName__: string;
|
|
42
43
|
static defaultProps: TabsProps;
|
package/lib/cjs/tabs/index.js
CHANGED
|
@@ -243,9 +243,10 @@ class Tabs extends _baseComponent.default {
|
|
|
243
243
|
tabBarStyle,
|
|
244
244
|
tabPaneMotion,
|
|
245
245
|
tabPosition,
|
|
246
|
-
type
|
|
246
|
+
type,
|
|
247
|
+
more
|
|
247
248
|
} = _a,
|
|
248
|
-
restProps = __rest(_a, ["children", "className", "collapsible", "contentStyle", "keepDOM", "lazyRender", "renderTabBar", "size", "style", "tabBarClassName", "tabBarExtraContent", "tabBarStyle", "tabPaneMotion", "tabPosition", "type"]);
|
|
249
|
+
restProps = __rest(_a, ["children", "className", "collapsible", "contentStyle", "keepDOM", "lazyRender", "renderTabBar", "size", "style", "tabBarClassName", "tabBarExtraContent", "tabBarStyle", "tabPaneMotion", "tabPosition", "type", "more"]);
|
|
249
250
|
const {
|
|
250
251
|
panes,
|
|
251
252
|
activeKey
|
|
@@ -270,7 +271,8 @@ class Tabs extends _baseComponent.default {
|
|
|
270
271
|
tabPosition,
|
|
271
272
|
type,
|
|
272
273
|
deleteTabItem: this.deleteTabItem,
|
|
273
|
-
handleKeyDown: this.foundation.handleKeyDown
|
|
274
|
+
handleKeyDown: this.foundation.handleKeyDown,
|
|
275
|
+
more
|
|
274
276
|
};
|
|
275
277
|
const tabBar = renderTabBar ? renderTabBar(tabBarProps, _TabBar.default) : /*#__PURE__*/_react.default.createElement(_TabBar.default, Object.assign({}, tabBarProps));
|
|
276
278
|
const content = keepDOM ? children : this.getActiveItem();
|
|
@@ -317,7 +319,8 @@ Tabs.propTypes = {
|
|
|
317
319
|
tabPosition: _propTypes.default.oneOf(_constants.strings.POSITION_MAP),
|
|
318
320
|
type: _propTypes.default.oneOf(_constants.strings.TYPE_MAP),
|
|
319
321
|
onTabClose: _propTypes.default.func,
|
|
320
|
-
preventScroll: _propTypes.default.bool
|
|
322
|
+
preventScroll: _propTypes.default.bool,
|
|
323
|
+
more: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.object])
|
|
321
324
|
};
|
|
322
325
|
Tabs.__SemiComponentName__ = "Tabs";
|
|
323
326
|
Tabs.defaultProps = (0, _utils.getDefaultPropsFromGlobalConfig)(Tabs.__SemiComponentName__, {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { CSSProperties, MouseEvent, ReactNode } from 'react';
|
|
2
2
|
import { Motion } from '../_base/base';
|
|
3
3
|
import TabBar from './TabBar';
|
|
4
|
+
import { DropdownProps } from "../dropdown";
|
|
4
5
|
export type TabType = 'line' | 'card' | 'button';
|
|
5
6
|
export type TabSize = 'small' | 'medium' | 'large';
|
|
6
7
|
export type TabPosition = 'top' | 'left';
|
|
@@ -34,6 +35,11 @@ export interface TabsProps {
|
|
|
34
35
|
type?: TabType;
|
|
35
36
|
onTabClose?: (tabKey: string) => void;
|
|
36
37
|
preventScroll?: boolean;
|
|
38
|
+
more?: number | {
|
|
39
|
+
count: number;
|
|
40
|
+
render?: () => ReactNode;
|
|
41
|
+
dropdownProps?: DropdownProps;
|
|
42
|
+
};
|
|
37
43
|
}
|
|
38
44
|
export interface TabBarProps {
|
|
39
45
|
activeKey?: string;
|
|
@@ -51,6 +57,7 @@ export interface TabBarProps {
|
|
|
51
57
|
closable?: boolean;
|
|
52
58
|
deleteTabItem?: (tabKey: string, event: MouseEvent<Element>) => void;
|
|
53
59
|
handleKeyDown?: (event: React.KeyboardEvent, itemKey: string, closable: boolean) => void;
|
|
60
|
+
more?: TabsProps['more'];
|
|
54
61
|
}
|
|
55
62
|
export interface TabPaneProps {
|
|
56
63
|
className?: string;
|
package/lib/es/_base/base.css
CHANGED
|
@@ -203,7 +203,7 @@ body, body .semi-always-light, :host, :host .semi-always-light {
|
|
|
203
203
|
--semi-yellow-9: 83,72,0;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
body[theme-mode=dark], body .semi-always-dark, :host
|
|
206
|
+
body[theme-mode=dark], body .semi-always-dark, :host([theme-mode=dark]), :host .semi-always-dark {
|
|
207
207
|
--semi-red-0: 108,9,11;
|
|
208
208
|
--semi-red-1: 144,17,16;
|
|
209
209
|
--semi-red-2: 180,32,25;
|
|
@@ -478,7 +478,7 @@ body, body[theme-mode=dark] .semi-always-light, :host, :host .semi-always-light
|
|
|
478
478
|
--semi-color-data-19: rgba(188, 198, 255, 1);
|
|
479
479
|
}
|
|
480
480
|
|
|
481
|
-
body[theme-mode=dark], body .semi-always-dark, :host
|
|
481
|
+
body[theme-mode=dark], body .semi-always-dark, :host([theme-mode=dark]), :host .semi-always-dark {
|
|
482
482
|
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
483
483
|
-webkit-font-smoothing: antialiased;
|
|
484
484
|
--semi-color-white: rgba(228, 231, 245, 1);
|
|
@@ -4,7 +4,7 @@ import '@douyinfe/semi-foundation/lib/es/button/button.css';
|
|
|
4
4
|
import { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';
|
|
5
5
|
export type HtmlType = 'button' | 'reset' | 'submit';
|
|
6
6
|
export type Size = 'default' | 'small' | 'large';
|
|
7
|
-
export type Theme = 'solid' | 'borderless' | 'light';
|
|
7
|
+
export type Theme = 'solid' | 'borderless' | 'light' | 'outline';
|
|
8
8
|
export type Type = 'primary' | 'secondary' | 'tertiary' | 'warning' | 'danger';
|
|
9
9
|
export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {
|
|
10
10
|
id?: string;
|