import { Dispatch, PropsWithChildren, RefObject } from 'react';
type RefTab<T extends HTMLElement = HTMLElement> = RefObject<T>;
type RefTabs<T extends HTMLElement = HTMLElement> = Map<number, RefTab<T>>;
type TabsUpdateAction = {
    type: 'update';
    payload: number;
};
type TabsRegisterAction<T extends HTMLElement = HTMLElement> = {
    type: 'register';
    payload: {
        value: number;
        ref: RefObject<T>;
    };
};
type TabsUnregisterAction = {
    type: 'unregister';
    payload: {
        value: number;
    };
};
type TabsAction<T extends HTMLElement = HTMLElement> = {
    type: 'start' | 'end' | 'previous' | 'next';
} | TabsUpdateAction | TabsRegisterAction<T> | TabsUnregisterAction;
interface TabsState<T extends HTMLElement = HTMLElement> {
    uid: string;
    value: number;
    refs: RefTabs<T>;
}
interface TabControl<T extends HTMLElement = HTMLElement> extends TabsState<T> {
    uid: string;
    value: number;
    refs: RefTabs<T>;
    dispatch: Dispatch<TabsAction>;
    register: (value: number, ref: RefTab<T>) => void;
    unregister: (value: number) => void;
}
export declare const TabControlContext: import('react').Context<TabControl<HTMLElement>>;
export interface TabsProviderProps {
    selected?: number;
}
export declare function TabsProvider({ selected, children }: PropsWithChildren<TabsProviderProps>): import("react/jsx-runtime").JSX.Element;
export {};
