/**
 * @hidden
 * @internal
 * @beta
 * @module
 * Limited to Microsoft-internal use
 *
 * CRUD operations for tabs associated with apps
 */
import { TabInstance } from '../../public/interfaces';
import { AppTypes, HostEntityIds } from './hostEntity';
/**
 * Represents information about a static tab instance
 */
export interface StaticTabInstance extends TabInstance {
    tabType: 'StaticTab';
}
/**
 * Represents information about a configurable tab instance
 */
export interface ConfigurableTabInstance extends TabInstance {
    tabType: 'ConfigurableTab';
}
/**
 * Represents information about a tab instance associated with a host entity like chat, channel or meeting. Cab be a configurable tab or static tab.
 */
export type HostEntityTabInstance = StaticTabInstance | ConfigurableTabInstance;
/**
 * Represents all tabs associated with a host entity like chat, channel or meeting
 */
export interface HostEntityTabInstances {
    allTabs: HostEntityTabInstance[];
}
/**
 * @hidden
 * @internal
 * @beta
 * Limited to Microsoft-internal use
 *
 * Launches host-owned UI that lets a user select an app, installs it if required,
 * runs through app configuration if required, and then associates the app with the threadId provided
 *
 * @param hostEntityIds Ids of the host entity like channel, chat or meeting
 *
 * @param appTypes What type of applications to show the user. If EDU is passed as appType, only apps supported by EDU tenant are shown.
 * If no value is passed, all apps are shown.
 *
 * @returns The HostEntityTabInstance of the newly associated app
 *
 * @throws Error if host does not support this capability, library as not been initialized successfully, input parameters are invalid, user cancels operation or installing
 * or configuring or adding tab fails
 */
export declare function addAndConfigure(hostEntityIds: HostEntityIds, appTypes?: AppTypes[]): Promise<HostEntityTabInstance>;
/**
 * @hidden
 * @internal
 * @beta
 * Limited to Microsoft-internal use
 *
 * Returns all tab instances associated with a host entity
 *
 * @param hostEntityIds Ids of the host entity like channel, chat or meeting
 *
 * @returns Object with array of HostEntityTabInstance's associated with a host entity
 *
 * @throws Error if host does not support this capability, library as not been initialized successfully, input parameters are invalid or fetching tabs fails
 */
export declare function getAll(hostEntityIds: HostEntityIds): Promise<HostEntityTabInstances>;
/**
 * @hidden
 * @internal
 * @beta
 * Limited to Microsoft-internal use
 *
 * Launches host-owned UI that lets a user re-configure the contentUrl of the tab
 *
 * @param tab Configurable tab instance that needs to be updated
 *
 * @param hostEntityIds Ids of the host entity like channel, chat or meeting
 *
 * @returns The HostEntityTabInstance of the updated tab
 *
 * @throws Error if host does not support this capability, library as not been initialized successfully, input parameters are invalid, user cancels operation,
 * re-configuring tab fails or if tab is a static tab
 */
export declare function reconfigure(tab: ConfigurableTabInstance, hostEntityIds: HostEntityIds): Promise<ConfigurableTabInstance>;
/**
 * @hidden
 * @internal
 * @beta
 * Limited to Microsoft-internal use
 *
 * Launches host-owned UI that lets a user rename the tab
 *
 * @param tab Configurable tab instance that needs to be updated
 *
 * @param hostEntityIds Ids of the host entity like channel, chat or meeting
 *
 * @returns The HostEntityTabInstance of the updated tab
 *
 * @throws Error if host does not support this capability, library as not been initialized successfully, input parameters are invalid, user cancels operation,
 * re-naming tab fails or if tab is a static tab
 */
export declare function rename(tab: ConfigurableTabInstance, hostEntityIds: HostEntityIds): Promise<ConfigurableTabInstance>;
/**
 * @hidden
 * @internal
 * @beta
 * Limited to Microsoft-internal use
 *
 * Launches host-owned UI that lets a user remove the tab
 *
 * @param tab tab instance that needs to be updated. Can be static tab or configurable tab.
 *
 * @param hostEntityIds Ids of the host entity like channel, chat or meeting
 *
 * @returns Boolean. Returns true if removing tab was successful
 *
 * @throws Error if host does not support this capability, library as not been initialized successfully, input parameters are invalid, user cancels operation or
 * removing tab fails
 */
export declare function remove(tab: HostEntityTabInstance, hostEntityIds: HostEntityIds): Promise<boolean>;
/**
 * @hidden
 * @internal
 * @beta
 * Limited to Microsoft-internal use
 *
 * Checks if the hostEntity.tab capability is supported by the host
 * @returns boolean to represent whether the histEntity and hostEntity.tab capability is supported
 *
 * @throws Error if {@linkcode app.initialize} has not successfully completed
 */
export declare function isSupported(): boolean;
