shineout
Version:
Shein 前端组件库
238 lines (227 loc) • 5.36 kB
text/typescript
import * as React from 'react'
import { AnchorHTMLAttributes } from 'react'
import { StandardProps } from '../@types/common'
import { StickyProps } from '../Sticky/Props'
type ReactNode = React.ReactNode
export interface TabsLinkProps extends AnchorHTMLAttributes<any> {
/**
* @en Link content
* @cn 链接内容
*/
children: React.ReactNode
onClick?: () => void
}
interface BaseTabProps {
id?: string | number
isActive?: boolean
moveToCenter?: (tabRect: DOMRect, last: boolean, first: boolean) => void
onClick?: (id: string | number, isActive: boolean) => void
last?: boolean
}
export interface TabProps extends Required<BaseTabProps> {
background?: string
border?: string
children?: any
color?: string
disabled?: boolean
isVertical?: boolean
shape?: string
onChange?: (key: string | number) => void
align?: 'left' | 'right' | 'vertical-left' | 'vertical-right'
}
export type TabsBaseValue = string | number
/**
* @title Tabs
*/
export interface TabsProps<Key extends TabsBaseValue = TabsBaseValue> extends StandardProps {
/**
* @en Current active tab id or index
* @cn 当前选中标签页(受控)
* @default 0
* @override string | number
*/
active?: Key
/**
* @en set the label align
* @cn 设置标签对齐方式
*/
align?: 'left' | 'right' | 'vertical-left' | 'vertical-right' | 'bottom'
/**
* @en Active background color
* @cn 选中标签背景色
*/
background?: string
/**
* @en Border color
* @cn 边框颜色
*/
border?: string
/**
* @en must be Panel
* @cn 必须为 Panel 元素
*/
children?: any
/**
* @en Whether can be collapsed
* @cn 是否可折叠
* @default false
*/
collapsible?: boolean
/**
* @en the color of tab's text only when the shape is 'card'
* @cn 标签页文字颜色,仅当 shape 为 'card' 时生效
*/
color?: string
/**
* @en Default active tab id or index
* @cn 默认选中标签页(非受控)
* @override string | number
* @default 0
*/
defaultActive?: Key
/**
* @en default collapse state, effective when collapsible is set to true
* @cn 默认折叠状态,当 collapsible 设置为 true 时生效
*/
defaultCollapsed?: boolean
/**
* @en Inactive background color
* @cn 未选中标签背景色
*/
inactiveBackground?: string
/**
* @en If shape is not null, the style properties such as background, border will lose effect
* @cn shape 不为空时,background 等颜色参数将会无效
* @default 'card'
*/
shape?: 'card' | 'line' | 'button' | 'bordered' | 'dash'
/**
* @en extra element in tab bar
* @cn tab bar 上额外的元素
*/
tabBarExtraContent?: string | ReactNode
/**
* @en style in tab bar
* @cn tab bar 的样式对象
*/
tabBarStyle?: React.CSSProperties
/**
* @en lazy load
* @cn 是否开启懒加载
* @default true
*/
lazy?: boolean
/**
* @en auto fill the panel
* @cn 自动填充内容区域
* @default false
*/
autoFill?: boolean
/**
* @en sticky header
* @cn 开启头部附着
* @default false
*/
sticky?: boolean | number | StickyProps
/**
* @en switch tabs will scroll to Tabs
* @cn 切换 tab 将自动滚动到 Tabs
*/
switchToTop?: boolean
/**
* @en whether to hide the dividing line
* @cn 是否隐藏分割线
* @default false
*/
hideSplit?: boolean
/**
* @en Change callback
* @cn 标签选中时触发回调事件
*/
onChange?: (key: Key) => void
}
export interface TabsChildProps {
id: string | number
isActive: boolean
tab: any
isVertical?: boolean
align?: 'left' | 'right' | 'vertical-left' | 'vertical-right'
background: string
border?: string
color: string
disabled: boolean
shape?: 'card' | 'line' | 'button' | 'bordered' | 'dash'
last: boolean
}
export interface HeaderProps {
border?: string
collapsed?: boolean
isVertical?: boolean
onChange: (key: string | number) => void
onCollapse?: (collapsed: boolean) => void
shape?: string
tabs: TabsChildProps[]
tabBarExtraContent?: string | ReactNode
tabBarStyle?: React.CSSProperties
hideSplit?: boolean
}
/**
* @title Tabs.Panel
*/
export interface PanelProps extends StandardProps {
/**
* @en The default is index
* @cn 选填,默认为 index
*/
id?: string | number
/**
* @en Background color, override the Tab's background
* @cn 背景色,会覆盖 Tabs 的background
*/
background?: string
/**
* @inner 内部属性
*/
collapsed?: boolean
/**
* @inner 内部属性
*/
collapsible?: boolean
/**
* @en same as style.color
* @cn 同 style.color
*/
color?: string
/**
* @en Panel Content
* @cn Panel 内容
*/
children?: ReactNode
/**
* @inner 内部属性
*/
isActive?: boolean
/**
* @inner 内部属性
*/
lazy?: boolean
/**
* @en Tab content
* @cn 标签标题内容
*/
tab: string | ReactNode
/**
* @en Border color, override the Tab's border
* @cn 边框颜色,会覆盖 Tabs 的border
*/
border?: string
/**
* @en Specifies the Panel should be disabled
* @cn 是否禁用
* @default false
*/
disabled?: boolean
}
export interface WrapperProps extends PanelProps {
active: string | number
}