/// <reference types="node" />
import { Component } from 'react';
import { PickOptional } from '../../helpers/typeUtils';
import { TabProps } from './Tab';
import { HorizontalOverflowPopperProps } from './OverflowTab';
import { OUIAProps } from '../../helpers';
export declare enum TabsComponent {
    div = "div",
    nav = "nav"
}
export interface HorizontalOverflowObject {
    /** Flag which shows the count of overflowing tabs when enabled */
    showTabCount?: boolean;
    /** The text which displays when an overflowing tab isn't selected */
    defaultTitleText?: string;
    /** The aria label applied to the button which toggles the tab overflow menu */
    toggleAriaLabel?: string;
    /** Additional props to spread to the popper menu. */
    popperProps?: HorizontalOverflowPopperProps;
}
type TabElement = React.ReactElement<TabProps, React.JSXElementConstructor<TabProps>>;
type TabsChild = TabElement | boolean | null | undefined;
export interface TabsProps extends Omit<React.HTMLProps<HTMLElement | HTMLDivElement>, 'onSelect' | 'onToggle'>, OUIAProps {
    /** Content rendered inside the tabs component. Only `Tab` components or expressions resulting in a falsy value are allowed here. */
    children: TabsChild | TabsChild[];
    /** Additional classes added to the tabs */
    className?: string;
    /** Tabs background color variant */
    variant?: 'default' | 'secondary';
    /** The index of the active tab */
    activeKey?: number | string;
    /** The index of the default active tab. Set this for uncontrolled Tabs */
    defaultActiveKey?: number | string;
    /** Callback to handle tab selection */
    onSelect?: (event: React.MouseEvent<HTMLElement, MouseEvent>, eventKey: TabProps['eventKey']) => void;
    /** Callback to handle tab closing and adds a basic close button to all tabs. This is overridden by the tab actions property. */
    onClose?: (event: React.MouseEvent<HTMLElement, MouseEvent>, eventKey: TabProps['eventKey']) => void;
    /** Callback for the add button. Passing this property inserts the add button */
    onAdd?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
    /** Aria-label for the add button */
    addButtonAriaLabel?: string;
    /** A readable string to create an accessible name for the tablist element. This can be used to differentiate multiple tablists on a page, and should be used for subtabs. */
    tabListAriaLabel?: string;
    /** Id of an element that provides an accessible name for the tablist. Use this when a visible label already exists on the page. */
    tabListAriaLabelledBy?: string;
    /** Uniquely identifies the tabs */
    id?: string;
    /** Flag indicating that the add button is disabled when onAdd is passed in */
    isAddButtonDisabled?: boolean;
    /** Enables the filled tab list layout */
    isFilled?: boolean;
    /** Enables subtab tab styling */
    isSubtab?: boolean;
    /** @beta Enables horizontal nav tab styling */
    isNav?: boolean;
    /** Enables box styling to the tab component */
    isBox?: boolean;
    /** Enables vertical tab styling */
    isVertical?: boolean;
    /** Disables border bottom tab styling on tabs. Defaults to false. To remove the bottom border, set this prop to true. */
    hasNoBorderBottom?: boolean;
    /** @deprecated Please use backScrollAriaLabel. Aria-label for the left scroll button */
    leftScrollAriaLabel?: string;
    /** @deprecated Please use forwardScrollAriaLabel. Aria-label for the right scroll button */
    rightScrollAriaLabel?: string;
    /** Aria-label for the back scroll button */
    backScrollAriaLabel?: string;
    /** Aria-label for the forward scroll button */
    forwardScrollAriaLabel?: string;
    /** Determines what tag is used around the tabs. Use "nav" to define the tabs inside a navigation region */
    component?: 'div' | 'nav';
    /** Provides an accessible label for the tabs. Labels should be unique for each set of tabs that are present on a page. When component is set to nav, this prop should be defined to differentiate the tabs from other navigation regions on the page. */
    'aria-label'?: string;
    /** Waits until the first "enter" transition to mount tab children (add them to the DOM) */
    mountOnEnter?: boolean;
    /** Unmounts tab children (removes them from the DOM) when they are no longer visible */
    unmountOnExit?: boolean;
    /** Flag indicates that the tabs should use page insets. */
    usePageInsets?: boolean;
    /** Insets at various breakpoints. */
    inset?: {
        default?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';
        sm?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';
        md?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';
        lg?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';
        xl?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';
        '2xl'?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';
    };
    /** Enable expandable vertical tabs at various breakpoints. (isVertical should be set to true for this to work) */
    expandable?: {
        default?: 'expandable' | 'nonExpandable';
        sm?: 'expandable' | 'nonExpandable';
        md?: 'expandable' | 'nonExpandable';
        lg?: 'expandable' | 'nonExpandable';
        xl?: 'expandable' | 'nonExpandable';
        '2xl'?: 'expandable' | 'nonExpandable';
    };
    /** Flag to indicate if the vertical tabs are expanded */
    isExpanded?: boolean;
    /** Flag indicating the default expanded state for uncontrolled expand/collapse of */
    defaultIsExpanded?: boolean;
    /** Text that appears in the expandable toggle */
    toggleText?: string;
    /** Aria-label for the expandable toggle */
    toggleAriaLabel?: string;
    /** Callback function to toggle the expandable tabs. */
    onToggle?: (event: React.MouseEvent, isExpanded: boolean) => void;
    /** Flag which places overflowing tabs into a menu triggered by the last tab. Additionally an object can be passed with custom settings for the overflow tab. */
    isOverflowHorizontal?: boolean | HorizontalOverflowObject;
    /** Value to overwrite the randomly generated data-ouia-component-id.*/
    ouiaId?: number | string;
    /** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
    ouiaSafe?: boolean;
}
interface TabsState {
    /** Used to signal if the scroll buttons should be used  */
    enableScrollButtons: boolean;
    /** Used to control if the scroll buttons should be shown to the user via the pf-m-scrollable class */
    showScrollButtons: boolean;
    /** Used to control if the scroll buttons should be rendered. Rendering must occur before the scroll buttons are
     * shown and rendering must be stopped after they stop being shown to preserve CSS transitions.
     */
    renderScrollButtons: boolean;
    disableBackScrollButton: boolean;
    disableForwardScrollButton: boolean;
    shownKeys: (string | number)[];
    uncontrolledActiveKey: number | string;
    uncontrolledIsExpandedLocal: boolean;
    overflowingTabCount: number;
    isInitializingAccent: boolean;
    currentLinkAccentLength: string;
    currentLinkAccentStart: string;
}
declare class Tabs extends Component<TabsProps, TabsState> {
    static displayName: string;
    tabList: import("react").RefObject<HTMLUListElement>;
    leftScrollButtonRef: import("react").RefObject<HTMLButtonElement>;
    private direction;
    constructor(props: TabsProps);
    scrollTimeout: NodeJS.Timeout;
    static defaultProps: PickOptional<TabsProps>;
    handleTabClick(event: React.MouseEvent<HTMLElement, MouseEvent>, eventKey: number | string, tabContentRef: React.RefObject<any>): void;
    countOverflowingElements: (container: HTMLUListElement) => number;
    handleScrollButtons: () => void;
    scrollBack: () => void;
    scrollForward: () => void;
    hideScrollButtons: () => void;
    setAccentStyles: (shouldInitializeStyle?: boolean) => void;
    handleResize: () => void;
    componentDidMount(): void;
    componentWillUnmount(): void;
    componentDidUpdate(prevProps: TabsProps, prevState: TabsState): void;
    static getDerivedStateFromProps(nextProps: TabsProps, prevState: TabsState): {
        uncontrolledActiveKey: string | number;
        shownKeys: (string | number)[];
    };
    render(): import("react/jsx-runtime").JSX.Element;
}
export { Tabs };
//# sourceMappingURL=Tabs.d.ts.map