import { Component, ContextType, ReactNode, MouseEvent, ReactComponentElement } from 'react'; import { EventListenerHandler } from '@befe/brick-utils'; import { ConfigContext } from '@befe/brick-core'; import { MenuPopperProps } from '@befe/brick-comp-menu'; import { RadioGroupProps } from '@befe/brick-comp-radio'; import { TabPane, TabPaneProps } from './tab-pane'; import { TabPaneId, TabsContextValue } from './tabs-context'; type ButtonGroupProps = Pick; interface TabItem extends TabPaneProps { /** * tab 页内容 */ content?: ReactNode; } export interface TabsProps { /** * 自定义 class */ className?: string; /** * 尺寸 * use config context `baseSize` as default */ size?: 'sm' | 'md'; /** * 标签卡样式类型 */ type?: 'plain' | 'card' | 'tag' | 'button-group-intensive' | 'button-group-important'; /** * 标签页 */ panes?: TabItem[]; /** * 激活 tab id 的 控制值 */ activeId?: TabPaneId; /** * 激活 tab id 的 默认值 */ defaultActiveId?: TabPaneId | null; /** * activeId 变化时的回调 */ onChange?: (activeId: TabPaneId) => void; /** * 点击 tab 的回调 * * type `button-group-intensive` 和 `button-group-important` 无效,因 RadioGroup 没有 onClick 事件 */ onClickTab?: (e: MouseEvent, id: TabPaneId) => void; /** * 下拉列表触发方式 */ triggerType?: MenuPopperProps['type']; /** * 是否干掉非当前激活的 pane dom */ shouldDestroyInactivePane?: boolean; /** * 添加按钮点击回调 * * 提供回调则显示添加按钮,仅 type 'card' 支持 */ onClickAdd?: (e: MouseEvent) => void | TabPaneId; /** * delete 删除tab回调 */ onTabDelete?: (activeId: TabPaneId) => void; /** * @private 暂不公布,以便于收集需要使用 "非 bottom-end" 场景的普遍率 * 收起到等多下拉 popper 位置 */ ellipsisDropdownPlacement?: MenuPopperProps['placement']; } interface TabsState { activeId?: TabPaneId | null; visibleFrom: number; visibleTo: number; isEllipsisPopperVisible: boolean; } export declare class Tabs extends Component { static displayName: string; static defaultProps: { className: string; type: string; defaultActiveId: null; shouldDestroyInactivePane: boolean; ellipsisDropdownPlacement: string; }; static contextType: import("react").Context; context: ContextType; windowResizeHandler: EventListenerHandler | null; tabsWheelHandler: EventListenerHandler | null; static getDerivedStateFromProps(nextProps: TabsProps): Partial | null; state: TabsState; refTabsWrap: import("react").RefObject; refTabs: import("react").RefObject; tabsWrapWidth: number; tabsWidth: number[]; tabsWrapMaxScrollLeft: number; tabsWrapScrollLeft: number; get className(): string; get size(): "sm" | "md"; get contextValue(): TabsContextValue; get validChildren(): ReactComponentElement>[] | null; get tabsAll(): TabItem[]; get tabsEllipsis(): TabItem[]; get canEllipsis(): boolean; get withEllipsis(): boolean; isTabPaneDisabled(id: TabPaneId): boolean; updateWidth(): void; updateEllipsis(): void; changeActive(id: TabPaneId): void; deleteTab(id: TabPaneId): void; scrollTabsWrap(scrollLeftTo?: number): void; scrollTabsWrapToTab(id: TabPaneId, force?: boolean): void; scrollTabsWrapToActive(force?: boolean): void; handleClickAdd: (e: MouseEvent) => void; handleClickTab: (e: MouseEvent, id: TabPaneId) => void; handleChangeRadioGroup: (value: ButtonGroupProps['value']) => void; handleMenuPopperChange: (status: boolean) => void; handleWheelTabsWrap: (e: WheelEvent) => void; renderTabDelete(tab: TabItem): import("react/jsx-runtime").JSX.Element | null; renderTabStatus(tab: TabItem): false | import("react/jsx-runtime").JSX.Element | null; renderTab: (tab: TabItem) => import("react/jsx-runtime").JSX.Element; renderTabs(): import("react/jsx-runtime").JSX.Element; renderTabsEllipsisMenu(): import("react/jsx-runtime").JSX.Element; renderTabsEllipsis(): import("react/jsx-runtime").JSX.Element | null; renderAddButton(): import("react/jsx-runtime").JSX.Element | null; renderButtonGroupTabs(): import("react/jsx-runtime").JSX.Element; renderTabsContainer(): import("react/jsx-runtime").JSX.Element; renderTabPanes(): import("react/jsx-runtime").JSX.Element[] | null; renderTabPanesContainer(): import("react/jsx-runtime").JSX.Element | null; componentDidMount(): void; componentWillUnmount(): void; componentDidUpdate(prevProps: Readonly, prevState: Readonly): void; render(): import("react/jsx-runtime").JSX.Element; } export {};