import { Component, ReactElement, ReactNode } from 'react';
import { BoundingRect, ContentRect } from 'react-measure';
import { TabProps } from './Tab';
import '../../helpers/base.less';
import { SearchBarProps } from './SearchBar';
import './Tabs.less';
export interface TabsProps {
    /**
     * Number of active tab
     * @since 0.0.35
     */
    active?: number;
    /**
     * Addon for search bar, dropdown etc.
     * @since 0.0.58
     */
    addon?: ReactElement;
    /**
     * Placeholder for search bar, dropdown etc.
     *
     * @deprecated Do not use! Use `addon` instead!
     * @since 0.0.42
     */
    placeholder?: ReactElement;
    /**
     * Minimum add-on width in pixels
     * @since 0.0.58
     */
    addonMinWidth?: number;
    /**
     * Monospaced version of tabs (all visible tabs as wide as widest of them)
     * @since 0.0.58
     */
    monospaced?: boolean;
    /**
     * [SearchBar](#!/SearchBar) element
     * @since 0.0.58
     */
    search?: ReactElement<SearchBarProps>;
    /**
     * [Tabs](#!/Tab)
     * @since 0.0.47
     */
    children: ReactElement<TabProps> | ReactElement<TabProps>[];
    /**
     * @ignore
     */
    className?: string;
    /**
     * @ignore
     */
    baseClassName?: string;
}
interface TabsState {
    active: number;
    prevActive?: number;
    collapsedLength: number;
    compact: boolean;
    searching: boolean;
    monospacedWidth: number;
}
interface Widths {
    tabs: number[];
    more: number;
    container: number;
    margin: number;
}
type TabMode = 'menu-item' | 'tab';
/**
 * `Tabs` component is a content area with a group of individual [Tab](#!/Tab) elements, each displaying different content
 * in the same screen area. `Tabs` are used when you have too much content to display in one place at the same time, so
 * the content is broken into logical groups and each group is displayed under its own [Tab](#!/Tab) that serves both as a
 * group name and a navigation button.
 * @since 0.0.35
 */
declare class Tabs extends Component<TabsProps, TabsState> {
    static defaultProps: {
        baseClassName: string;
    };
    state: {
        active: number;
        collapsedLength: number;
        compact: boolean;
        searching: boolean;
        monospacedWidth: number;
    };
    static getDerivedStateFromProps(props: TabsProps, state: TabsState): Partial<TabsState>;
    componentDidUpdate(): void;
    widths: Widths | undefined;
    addon: BoundingRect | undefined;
    tabsnavRef: HTMLElement | undefined;
    moreTabsRef: HTMLElement | null;
    checkAdaptive: () => void;
    onClick(active: number): void;
    handleStartSearching: () => void;
    handleCancelSearching: () => void;
    handleResize: () => void;
    handleAddonResize: (contentRect: ContentRect) => void;
    renderTabLabel(tabMode: TabMode, label: ReactNode): import("react/jsx-runtime").JSX.Element | null;
    renderTabClose(tabMode: TabMode, onClose?: TabProps['onClose']): import("react/jsx-runtime").JSX.Element | null;
    renderFakeTabs(): import("react/jsx-runtime").JSX.Element | null;
    renderTabItem: (tab: ReactElement<TabProps>, index: number, tabMode: TabMode) => import("react/jsx-runtime").JSX.Element | null;
    createTabItems(): {
        visibleItems: ReactElement<any, string | import("react").JSXElementConstructor<any>>[];
        hiddenItems: ReactElement<any, string | import("react").JSXElementConstructor<any>>[];
    };
    renderTabList(): import("react/jsx-runtime").JSX.Element | null;
    renderSearchBar(searchProps: SearchBarProps): import("react/jsx-runtime").JSX.Element | null;
    render(): import("react/jsx-runtime").JSX.Element | null;
}
export default Tabs;
