@douyinfe/semi-ui
Version:
A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.
111 lines (101 loc) • 3.61 kB
text/typescript
import React, { ComponentType, CSSProperties, MouseEvent, ReactNode } from 'react';
import { Motion } from '../_base/base';
import TabBar, { OverflowItem } from './TabBar';
import { DropdownProps } from "../dropdown";
import { OverflowListProps } from "../overflowList";
export type TabType = 'line' | 'card' | 'button' | 'slash';
export type TabSize = 'small' | 'medium' | 'large';
export type TabPosition = 'top' | 'left';
export interface PlainTab {
disabled?: boolean;
icon?: ReactNode;
itemKey: string;
tab?: ReactNode;
closable?: boolean
}
interface TabsDropDownProps {
start: DropdownProps;
end: DropdownProps
}
export interface TabsProps {
activeKey?: string;
children?: ReactNode | Array<ReactNode>;
className?: string;
collapsible?: boolean | 'auto';
contentStyle?: CSSProperties;
defaultActiveKey?: string;
keepDOM?: boolean;
lazyRender?: boolean;
onChange?: (activeKey: string) => void;
onTabClick?: (activeKey: string, e: MouseEvent<Element>) => void;
renderTabBar?: (tabBarProps: TabBarProps, defaultTabBar: typeof TabBar) => ReactNode;
showRestInDropdown?: boolean;
size?: TabSize;
style?: CSSProperties;
tabBarClassName?: string;
tabBarExtraContent?: ReactNode;
tabBarStyle?: CSSProperties;
tabList?: PlainTab[];
tabPaneMotion?: boolean;
tabPosition?: TabPosition;
type?: TabType;
onTabClose?: (tabKey: string) => void;
preventScroll?: boolean;
more?: number | { count: number; render?: () => ReactNode; dropdownProps?: DropdownProps };
onVisibleTabsChange?: TabBarProps["onVisibleTabsChange"];
visibleTabsStyle?: TabBarProps['visibleTabsStyle'];
arrowPosition?: TabBarProps['arrowPosition'];
renderArrow?: TabBarProps['renderArrow'];
dropdownProps?: TabsDropDownProps
}
export interface TabBarProps {
activeKey?: string;
className?: string;
collapsible?: boolean | 'auto';
list?: Array<PlainTab>;
onTabClick?: (activeKey: string, event: MouseEvent<Element>) => void;
showRestInDropdown?: boolean;
size?: TabSize;
style?: CSSProperties;
tabBarExtraContent?: ReactNode;
tabPosition?: TabPosition;
type?: TabType;
dropdownClassName?: string;
dropdownStyle?: CSSProperties;
closable?: boolean;
deleteTabItem?: (tabKey: string, event: MouseEvent<Element>) => void;
handleKeyDown?: (event: React.KeyboardEvent, itemKey: string, closable: boolean) => void;
more?: TabsProps['more'];
onVisibleTabsChange?: (visibleState: Map<string, boolean>) => void;
visibleTabsStyle?: CSSProperties;
arrowPosition?: OverflowListProps['overflowRenderDirection'];
renderArrow?: (items: OverflowItem[], pos: "start"|"end", handleArrowClick: () => void, defaultNode: ReactNode) => ReactNode;
dropdownProps?: TabsDropDownProps
}
export interface TabPaneProps {
className?: string;
children?: React.ReactNode;
disabled?: boolean;
icon?: ReactNode;
itemKey?: string;
style?: CSSProperties;
tab?: ReactNode;
closable?: boolean;
tabIndex?: number
}
export interface TabPaneTransitionProps {
[key: string]: any;
children?: ((p: { transform?: string; opacity: number }) => ReactNode | undefined) | undefined;
direction?: boolean;
mode?: 'vertical' | 'horizontal';
motion?: Motion
}
export interface TabContextValue {
activeKey?: string;
lazyRender?: boolean;
panes?: Array<PlainTab>;
tabPaneMotion?: boolean;
tabPosition?: TabPosition;
prevActiveKey?: string | null;
forceDisableMotion?: boolean
}