Skip to content

Commit c9d46f4

Browse files
committed
feat: add 'close' semantic name and update TabNode styles and classNames
1 parent 0c5dbbb commit c9d46f4

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

src/TabNavList/TabNode.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import classNames from 'classnames';
22
import * as React from 'react';
33
import type { EditableConfig, Tab } from '../interface';
44
import { genDataNodeKey, getRemovable } from '../util';
5+
import type { SemanticName } from '@/Tabs';
56

67
export interface TabNodeProps {
78
id: string;
@@ -23,8 +24,8 @@ export interface TabNodeProps {
2324
onMouseUp: React.MouseEventHandler;
2425
onFocus: React.FocusEventHandler;
2526
onBlur: React.FocusEventHandler;
26-
style?: React.CSSProperties;
27-
className?: string;
27+
styles?: Pick<Record<SemanticName, React.CSSProperties>, 'item' | 'close'>;
28+
classNames?: Pick<Record<SemanticName, string>, 'item' | 'close'>;
2829
}
2930

3031
const TabNode: React.FC<TabNodeProps> = props => {
@@ -44,8 +45,8 @@ const TabNode: React.FC<TabNodeProps> = props => {
4445
onKeyDown,
4546
onMouseDown,
4647
onMouseUp,
47-
style,
48-
className,
48+
styles,
49+
classNames: tabNodeClassNames,
4950
tabCount,
5051
currentPosition,
5152
} = props;
@@ -83,13 +84,13 @@ const TabNode: React.FC<TabNodeProps> = props => {
8384
<div
8485
key={key}
8586
data-node-key={genDataNodeKey(key)}
86-
className={classNames(tabPrefix, className, {
87+
className={classNames(tabPrefix, tabNodeClassNames?.item, {
8788
[`${tabPrefix}-with-remove`]: removable,
8889
[`${tabPrefix}-active`]: active,
8990
[`${tabPrefix}-disabled`]: disabled,
9091
[`${tabPrefix}-focus`]: focus,
9192
})}
92-
style={style}
93+
style={styles?.item}
9394
onClick={onInternalClick}
9495
>
9596
{/* Primary Tab Button */}
@@ -130,7 +131,8 @@ const TabNode: React.FC<TabNodeProps> = props => {
130131
type="button"
131132
aria-label={removeAriaLabel || 'remove'}
132133
tabIndex={active ? 0 : -1}
133-
className={`${tabPrefix}-remove`}
134+
className={classNames(`${tabPrefix}-remove`, tabNodeClassNames?.close)}
135+
style={styles?.close}
134136
onClick={e => {
135137
e.stopPropagation();
136138
onRemoveTab(e);

src/TabNavList/index.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,9 +435,15 @@ const TabNavList = React.forwardRef<HTMLDivElement, TabNavListProps>((props, ref
435435
prefixCls={prefixCls}
436436
key={key}
437437
tab={tab}
438-
className={tabsClassNames?.item}
439-
/* first node should not have margin left */
440-
style={i === 0 ? styles?.item : { ...tabNodeStyle, ...styles?.item }}
438+
classNames={{
439+
item: tabsClassNames?.item,
440+
close: tabsClassNames?.close,
441+
}}
442+
styles={{
443+
/* first node should not have margin left */
444+
item: i === 0 ? styles?.item : { ...tabNodeStyle, ...styles?.item },
445+
close: styles?.close,
446+
}}
441447
closable={tab.closable}
442448
editable={editable}
443449
active={key === activeKey}

src/Tabs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import type {
3434
// Used for accessibility
3535
let uuid = 0;
3636

37-
export type SemanticName = 'popup' | 'item' | 'indicator' | 'content' | 'header';
37+
export type SemanticName = 'popup' | 'item' | 'indicator' | 'content' | 'header' | 'close';
3838

3939
export interface TabsProps
4040
extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'children'> {

0 commit comments

Comments
 (0)