import { CSSProperties, ReactNode, ReactElement } from 'react'; import TabHeader from './tab-header/index'; /** * @title Tabs */ export interface TabsProps { style?: CSSProperties; className?: string | string[]; children?: ReactNode; /** * 默认选中的标签选项卡,如不指定默认选择第一个 */ defaultActiveTab?: string; /** * 当前选中的 tab 的 key */ activeTab?: string; activeKey?: string; /** * 是否开启过渡效果 */ animation?: boolean | { tabPane?: boolean; inkBar?: boolean; }; /** * 选项卡位置 * @defaultValue top */ position?: 'left' | 'right' | 'top' | 'bottom'; /** * 尺寸,分别为 `small`, `middle`, `large` */ size?: 'small' | 'middle' | 'large'; direction?: 'vertical' | 'horizontal'; /** * 标签选项卡的类型 * @defaultValue line */ type?: 'line' | 'card' | 'card-gutter' | 'text' | 'rounded' | 'capsule'; /** * 定制下划线尺寸 */ inkBarSize?: { width?: CSSProperties['width']; height?: CSSProperties['height']; }; /** * 选项卡头部是否存在水平边距。仅对 `type`等于 `line`、`text`类型的选项卡生效 * @defaultValue true */ headerPadding?: boolean; /** * 标签页较多时候,选择滚动/下拉菜单形式展示 tab * @defaultValue scroll */ overflow?: 'scroll' | 'dropdown'; /** * 是否允许增减标签。只在 `type` 为 `card` 或 `card-gutter` 时候生效。 */ editable?: boolean; /** * 是否显示新增按钮(仅在`editable`为`true`时生效) * @defaultValue true */ showAddButton?: boolean; /** * 标签页头部 编辑/滚动/下拉 图标配置。对于不想展示的图标可以将其设置为`null` */ icons?: { add?: ReactNode; delete?: ReactNode; prev?: ReactNode; next?: ReactNode; dropdown?: ReactNode; }; /** * 是否在标签增减后,自动进行滚动调整(`editable`为`true`时生效) * @defaultValue { add: true, delete: true } */ scrollAfterEdit?: { delete?: boolean; add?: boolean; }; /** * 显示在标签页右侧的附加 */ extra?: ReactNode; /** * 是否销毁隐藏标签页的节点, `TabPane` 的该属性优先级高于 `Tabs`。 */ destroyOnHide?: boolean; /** * 设置为 `true` 时,将不会在组件挂载的时候渲染被隐藏的标签页。 * @defaultValue true */ lazyload?: boolean; /** * 高度撑满容器,只在水平模式下生效。(默认的高度是又撑起的。) */ justify?: boolean; /** * 自定义删除按钮 */ deleteButton?: ReactNode; /** * 自定义新增按钮 */ addButton?: ReactNode; /** * 被选中 tab 的滚动位置,默认 auto 即会将 activeTab 滚动到可见区域,但不会特意做位置调整 * @defaultValue auto */ scrollPosition?: 'start' | 'end' | 'center' | 'auto' | number; /** * `activeTab` 改变的回调 */ onChange?: (key: string) => void; /** * 点击选项卡的回调 */ onClickTab?: (key: string) => void; /** * 点击新增 tab 按钮的回调 */ onAddTab?: () => void; /** * 点击删除按钮的回调 */ onDeleteTab?: (key: string) => void; /** * 自定义选项卡头部 */ renderTabHeader?: (tabProps: TabsProps, DefaultTabHeader: typeof TabHeader) => ReactElement; /** * 自定义单个选项卡头部 */ renderTabTitle?: (tabTitle: ReactNode, info: { key: string | number; isActive: boolean; disabled: boolean; editable: boolean; }) => ReactNode; } /** * @title Tabs.TabPane */ export interface TabPaneProps { style?: CSSProperties; className?: string | string[]; /** * 选项卡的标题显示 */ title: string | ReactNode; /** * * 选项卡隐藏的时候是否销毁标签页内的DOM结构,优先级高于 `Tabs` 的 `destroyOnHide` 属性 */ destroyOnHide?: boolean; /** * 是否禁用 */ disabled?: boolean; /** * 动态增减标签页时是否允许关闭当前标签页 */ closable?: boolean; isActive?: boolean; lazyload?: boolean; children?: ReactNode; }