import * as React from "react";
import { TranslationKey } from "../../languageHandler";
import { ScreenName } from "../../PosthogTrackers";
import { NonEmptyArray } from "../../@types/common";
/**
 * Represents a tab for the TabbedView.
 */
export declare class Tab<T extends string> {
    readonly id: T;
    readonly label: TranslationKey;
    readonly icon: string | null;
    readonly body: React.ReactNode;
    readonly screenName?: "User" | "Room" | "Register" | "Home" | "Welcome" | "RoomDirectory" | "Group" | "Login" | "ForgotPassword" | "UseCaseSelection" | "RoomDetails" | "RoomMembers" | "RoomSearch" | "RoomUploads" | "RoomNotifications" | "RoomFilter" | "StartChat" | "CreateRoom" | "DeactivateAccount" | "MyGroups" | "SpaceExploreRooms" | "Loading" | "CompleteSecurity" | "E2ESetup" | "SoftLogout" | "UserSettings" | "UserSettingsGeneral" | "UserSettingsAppearance" | "UserSettingsNotifications" | "UserSettingsPreferences" | "UserSettingsKeyboard" | "UserSettingsSidebar" | "UserSettingsVoiceVideo" | "UserSettingsSecurityPrivacy" | "UserSettingsLabs" | "UserSettingsIgnoredUsers" | "UserSettingsHelpAbout" | "UserSettingMjolnir" | "UserSettingFlair" | "RoomSettings" | "RoomSettingsGeneral" | "RoomSettingsSecurityPrivacy" | "RoomSettingsRolesPermissions" | "RoomSettingsNotifications" | "RoomSettingsBridges" | "RoomSettingsAdvanced" | "UnifiedSearch" | "FavouriteMessages" | "ConfirmStartup" | "SessionLockStolen" | undefined;
    /**
     * Creates a new tab.
     * @param {string} id The tab's ID.
     * @param {string} label The untranslated tab label.
     * @param {string} icon The class for the tab icon. This should be a simple mask.
     * @param {React.ReactNode} body The JSX for the tab container.
     * @param {string} screenName The screen name to report to Posthog.
     */
    constructor(id: T, label: TranslationKey, icon: string | null, body: React.ReactNode, screenName?: "User" | "Room" | "Register" | "Home" | "Welcome" | "RoomDirectory" | "Group" | "Login" | "ForgotPassword" | "UseCaseSelection" | "RoomDetails" | "RoomMembers" | "RoomSearch" | "RoomUploads" | "RoomNotifications" | "RoomFilter" | "StartChat" | "CreateRoom" | "DeactivateAccount" | "MyGroups" | "SpaceExploreRooms" | "Loading" | "CompleteSecurity" | "E2ESetup" | "SoftLogout" | "UserSettings" | "UserSettingsGeneral" | "UserSettingsAppearance" | "UserSettingsNotifications" | "UserSettingsPreferences" | "UserSettingsKeyboard" | "UserSettingsSidebar" | "UserSettingsVoiceVideo" | "UserSettingsSecurityPrivacy" | "UserSettingsLabs" | "UserSettingsIgnoredUsers" | "UserSettingsHelpAbout" | "UserSettingMjolnir" | "UserSettingFlair" | "RoomSettings" | "RoomSettingsGeneral" | "RoomSettingsSecurityPrivacy" | "RoomSettingsRolesPermissions" | "RoomSettingsNotifications" | "RoomSettingsBridges" | "RoomSettingsAdvanced" | "UnifiedSearch" | "FavouriteMessages" | "ConfirmStartup" | "SessionLockStolen" | undefined);
}
export declare enum TabLocation {
    LEFT = "left",
    TOP = "top"
}
interface IProps<T extends string> {
    tabs: NonEmptyArray<Tab<T>>;
    initialTabId?: T;
    tabLocation: TabLocation;
    onChange?: (tabId: T) => void;
    screenName?: ScreenName;
}
interface IState<T extends string> {
    activeTabId: T;
}
export default class TabbedView<T extends string> extends React.Component<IProps<T>, IState<T>> {
    constructor(props: IProps<T>);
    static defaultProps: {
        tabLocation: TabLocation;
    };
    private getTabById;
    /**
     * Shows the given tab
     * @param {Tab} tab the tab to show
     * @private
     */
    private setActiveTab;
    private renderTabLabel;
    private getTabId;
    private renderTabPanel;
    render(): React.ReactNode;
}
export {};
