/// <reference types="react" />

import { AddPhoneNumberOptions } from '@azure/communication-calling';
import { AudioDeviceInfo } from '@azure/communication-calling';
import { AudioEffectsStartConfig } from '@azure/communication-calling';
import { BackgroundBlurConfig } from '@azure/communication-calling';
import { BackgroundBlurEffect } from '@azure/communication-calling';
import { BackgroundReplacementConfig } from '@azure/communication-calling';
import { BackgroundReplacementEffect } from '@azure/communication-calling';
import { BreakoutRoom } from '@azure/communication-calling';
import { BreakoutRoomsSettings } from '@azure/communication-calling';
import { BreakoutRoomsUpdatedListener } from '@azure/communication-calling';
import { Call } from '@azure/communication-calling';
import { CallAgent } from '@azure/communication-calling';
import { CallClient } from '@azure/communication-calling';
import { CallClientOptions } from '@azure/communication-calling';
import { CallDirection } from '@azure/communication-calling';
import { CallEndReason } from '@azure/communication-calling';
import { CallerInfo } from '@azure/communication-calling';
import { CallKind } from '@azure/communication-calling';
import { CallState as CallState_2 } from '@azure/communication-calling';
import { CallSurvey } from '@azure/communication-calling';
import { CallSurveyResponse } from '@azure/communication-calling';
import { CapabilitiesChangeInfo } from '@azure/communication-calling';
import { CaptionsKind } from '@azure/communication-calling';
import { CaptionsResultType } from '@azure/communication-calling';
import { ChatClient } from '@azure/communication-chat';
import { ChatClientOptions } from '@azure/communication-chat';
import { ChatMessage as ChatMessage_2 } from '@azure/communication-chat';
import { ChatMessageReadReceipt } from '@azure/communication-chat';
import { ChatParticipant } from '@azure/communication-chat';
import { ChatThreadClient } from '@azure/communication-chat';
import { CommunicationIdentifier } from '@azure/communication-common';
import { CommunicationIdentifierKind } from '@azure/communication-common';
import { CommunicationTokenCredential } from '@azure/communication-common';
import { CommunicationUserIdentifier } from '@azure/communication-common';
import type { CommunicationUserKind } from '@azure/communication-common';
import { CreateViewOptions } from '@azure/communication-calling';
import { DeviceAccess } from '@azure/communication-calling';
import { DeviceManager } from '@azure/communication-calling';
import { DominantSpeakersInfo } from '@azure/communication-calling';
import { DtmfTone as DtmfTone_2 } from '@azure/communication-calling';
import { EnvironmentInfo } from '@azure/communication-calling';
import { GroupCallLocator } from '@azure/communication-calling';
import { IButtonProps } from '@fluentui/react';
import { IButtonStyles } from '@fluentui/react';
import { IContextualMenuItem } from '@fluentui/react';
import { IContextualMenuItemStyles } from '@fluentui/react';
import { IContextualMenuProps } from '@fluentui/react';
import { IContextualMenuStyles } from '@fluentui/react';
import { IIconProps } from '@fluentui/react';
import { IIconStyles } from '@fluentui/react';
import { IMessageBarProps } from '@fluentui/react';
import { IncomingCall } from '@azure/communication-calling';
import { IncomingCallKind } from '@azure/communication-calling';
import { IPersonaStyleProps } from '@fluentui/react';
import { IPersonaStyles } from '@fluentui/react';
import { IRawStyle } from '@fluentui/react';
import { IRenderFunction } from '@fluentui/react';
import { IStackStyles } from '@fluentui/react';
import { IStyle } from '@fluentui/react';
import { IStyleFunctionOrObject } from '@fluentui/react';
import { ITextFieldStyles } from '@fluentui/react';
import { LatestMediaDiagnostics } from '@azure/communication-calling';
import { LatestNetworkDiagnostics } from '@azure/communication-calling';
import { LocalVideoStream } from '@azure/communication-calling';
import type { MediaDiagnosticChangedEventArgs } from '@azure/communication-calling';
import { MediaStreamType } from '@azure/communication-calling';
import { MicrosoftTeamsAppIdentifier } from '@azure/communication-common';
import { MicrosoftTeamsUserIdentifier } from '@azure/communication-common';
import type { NetworkDiagnosticChangedEventArgs } from '@azure/communication-calling';
import { PartialTheme } from '@fluentui/react';
import { ParticipantCapabilities } from '@azure/communication-calling';
import { ParticipantRole } from '@azure/communication-calling';
import { PermissionConstraints } from '@azure/communication-calling';
import { PersonaInitialsColor } from '@fluentui/react';
import { PersonaPresence } from '@fluentui/react';
import { PersonaSize } from '@fluentui/react';
import { PhoneNumberIdentifier } from '@azure/communication-common';
import { PropertyChangedEvent } from '@azure/communication-calling';
import { default as React_2 } from 'react';
import { Reaction as Reaction_2 } from '@azure/communication-calling';
import { ReactionMessage } from '@azure/communication-calling';
import type { RemoteParticipant } from '@azure/communication-calling';
import { RemoteParticipantState as RemoteParticipantState_2 } from '@azure/communication-calling';
import { RoomCallLocator } from '@azure/communication-calling';
import { ScalingMode } from '@azure/communication-calling';
import { SendMessageOptions } from '@azure/communication-chat';
import { SpotlightedParticipant } from '@azure/communication-calling';
import { StartCallOptions } from '@azure/communication-calling';
import { StartCaptionsOptions } from '@azure/communication-calling';
import { TeamsCall } from '@azure/communication-calling';
import { TeamsCallAgent } from '@azure/communication-calling';
import { TeamsCallInfo } from '@azure/communication-calling';
import { TeamsIncomingCall } from '@azure/communication-calling';
import { TeamsMeetingIdLocator } from '@azure/communication-calling';
import { TeamsMeetingLinkLocator } from '@azure/communication-calling';
import { Theme } from '@fluentui/react';
import { TransferEventArgs } from '@azure/communication-calling';
import { TypingIndicatorReceivedEvent } from '@azure/communication-chat';
import { UnknownIdentifier } from '@azure/communication-common';
import { VideoDeviceInfo } from '@azure/communication-calling';
import { VideoEffectName } from '@azure/communication-calling';
import { VideoStreamRenderer } from '@azure/communication-calling';
import { VideoStreamRendererView } from '@azure/communication-calling';

/**
 * Transfer feature state
 *
 * @public
 */
export declare interface AcceptedTransfer {
    /**
     * Stores call id of accepted transfer
     */
    callId: string;
    /**
     * Stores timestamp when transfer was accepted
     */
    timestamp: Date;
}

/**
 * Active error messages to be shown via {@link ErrorBar}.
 *
 * @public
 */
export declare interface ActiveErrorMessage {
    /**
     * Type of error that is active.
     */
    type: ErrorType;
    /**
     * The latest timestamp when this error was observed.
     *
     * When available, this is used to track errors that have already been seen and dismissed
     * by the user.
     */
    timestamp?: Date;
}

/**
 * Active notifications to be shown via {@link NotificationStack}.
 *
 * @public
 */
export declare interface ActiveNotification {
    /**
     * Type of error that is active.
     */
    type: NotificationType;
    /**
     * Callback called when the primary button inside notification bar is clicked.
     */
    onClickPrimaryButton?: () => void;
    /**
     * Callback called when the primary button inside notification bar is clicked.
     */
    onClickSecondaryButton?: () => void;
    /**
     * Callback called when the notification is dismissed.
     */
    onDismiss?: () => void;
    /**
     * If set, notification will automatically dismiss after 5 seconds
     */
    autoDismiss?: boolean;
    /**
     * The latest timestamp when this notification was observed.
     *
     * When available, this is used to track notifications that have already been seen and dismissed
     * by the user.
     */
    timestamp?: Date;
    /**
     * Aria-live property for the notification.
     * @defaultValue polite
     */
    ariaLive?: 'assertive' | 'off' | 'polite';
}

/**
 * Error reported via error events and stored in adapter state.
 *
 * @public
 */
export declare interface AdapterError extends Error {
    /**
     * The operation that failed.
     */
    target: string;
    /**
     * Error thrown by the failed operation.
     */
    innerError: Error;
    /**
     * Timestamp added to the error in the adapter implementation.
     */
    timestamp: Date;
}

/**
 * Adapters stores the latest error for each operation in the state.
 *
 * `target` is an adapter defined string for each unique operation performed by the adapter.
 *
 * @public
 */
export declare type AdapterErrors = {
    [target: string]: AdapterError;
};

/**
 * Notification from call client state stored in adapter state.
 *
 * @public
 */
export declare interface AdapterNotification {
    /**
     * Target of notification. There should only one notification per target.
     */
    target: string;
    /**
     * Timestamp added to the notification in the adapter implementation.
     */
    timestamp: Date;
}

/**
 * Adapters stores the latest notification for each target.
 *
 * @public
 */
export declare type AdapterNotifications = {
    [target: string]: AdapterNotification;
};

/**
 * Functionality for interfacing with Composite adapter state.
 *
 * @public
 */
export declare interface AdapterState<TState> {
    /** Subscribes the handler to stateChanged events. */
    onStateChange(handler: (state: TState) => void): void;
    /** Unsubscribes the handler to stateChanged events. */
    offStateChange(handler: (state: TState) => void): void;
    /** Get the current State */
    getState(): TState;
}

/**
 * Compare if 2 react components are exact equal, result type will be true/false
 *
 * @public
 */
export declare type AreEqual<A extends (props: any) => JSX.Element | undefined, B extends (props: any) => JSX.Element | undefined> = true extends AreTypeEqual<A, B> & AreParamEqual<A, B> ? true : false;

/**
 * Compare if props of 2 react components are equal, result type will be true/false
 *
 * @public
 */
export declare type AreParamEqual<A extends (props: any) => JSX.Element | undefined, B extends (props: any) => JSX.Element | undefined> = AreTypeEqual<Required<Parameters<A>[0]>, Required<Parameters<B>[0]>>;

/**
 * Compare if two types are equal, result type will be true/false
 *
 * @public
 */
export declare type AreTypeEqual<A, B> = A extends B ? (B extends A ? true : false) : false;

/**
 * Data model that represents a chat message attachment
 * where it contains an ID to uniquely identify the attachment,
 * a name that represents the name of file, and
 * a URL to download the attachment.
 *
 * @public
 */
export declare interface AttachmentMetadata {
    /**
     * Unique ID of the attachment.
     */
    id: string;
    /**
     * Attachment name to be displayed.
     */
    name: string;
    /**
     * Download URL for the attachment.
     */
    url: string;
}

/**
 * Custom data attributes for displaying avatar for a user.
 *
 * @public
 */
export declare type AvatarPersonaData = {
    /**
     * Primary text to display, usually the name of the person.
     */
    text?: string;
    /**
     * Image URL to use, should be a square aspect ratio and big enough to fit in the image area.
     */
    imageUrl?: string;
    /**
     * The user's initials to display in the image area when there is no image.
     * @defaultvalue Derived from `text`
     */
    imageInitials?: string;
    /**
     * The background color when the user's initials are displayed.
     * @defaultvalue Derived from `text`
     */
    initialsColor?: PersonaInitialsColor | string;
    /**
     * The text color when the user's initials are displayed
     * @defaultvalue `white`
     */
    initialsTextColor?: string;
    /**
     * If true, show the special coin for unknown persona.
     * It has '?' in place of initials, with static font and background colors
     */
    showUnknownPersonaCoin?: boolean;
};

/**
 * Callback function used to provide custom data to build an avatar for a user.
 *
 * @public
 */
export declare type AvatarPersonaDataCallback = (userId: string) => Promise<AvatarPersonaData>;

/**
 * Arguments for creating the Azure Communication Services implementation of {@link CallAdapter}.
 *
 * Note: `displayName` can be a maximum of 256 characters.
 *
 * @public
 */
export declare type AzureCommunicationCallAdapterArgs = {
    userId: CommunicationUserIdentifier;
    displayName: string;
    credential: CommunicationTokenCredential;
    locator: CallAdapterLocator;
    /**
     * Optional parameters for the {@link AzureCommunicationCallAdapter} created
     */
    options?: AzureCommunicationCallAdapterOptions;
};

/**
 * Optional parameters to create {@link AzureCommunicationCallAdapter}
 *
 * @public
 */
export declare type AzureCommunicationCallAdapterOptions = CommonCallAdapterOptions;

/**
 * Arguments for {@link createAzureCommunicationCallWithChatAdapter}
 *
 * @public
 */
export declare type AzureCommunicationCallWithChatAdapterArgs = {
    endpoint: string;
    userId: CommunicationUserIdentifier;
    displayName: string;
    credential: CommunicationTokenCredential;
    locator: CallAndChatLocator | TeamsMeetingLinkLocator | TeamsMeetingIdLocator;
    alternateCallerId?: string;
    callAdapterOptions?: AzureCommunicationCallAdapterOptions;
};

/**
 * Arguments for {@link createAzureCommunicationCallWithChatAdapterFromClient}
 *
 * @public
 */
export declare type AzureCommunicationCallWithChatAdapterFromClientArgs = {
    callLocator: CallAdapterLocator | TeamsMeetingLinkLocator;
    callAgent: CallAgent;
    callClient: StatefulCallClient;
    chatClient: StatefulChatClient;
    chatThreadClient: ChatThreadClient;
    callAdapterOptions?: AzureCommunicationCallAdapterOptions;
};

/**
 * Arguments for creating the Azure Communication Services implementation of {@link ChatAdapter}.
 *
 * @public
 */
export declare type AzureCommunicationChatAdapterArgs = {
    endpoint: string;
    userId: CommunicationUserIdentifier;
    displayName: string;
    credential: CommunicationTokenCredential;
    threadId: string;
};

/**
 * Arguments for creating the Azure Communication Services implementation of {@link CallAdapter}.
 *
 * These arguments are used to create an outbound call scenarios.
 *
 * Note: `displayName` can be a maximum of 256 characters.
 *
 * @public
 */
export declare type AzureCommunicationOutboundCallAdapterArgs = {
    userId: CommunicationUserIdentifier;
    displayName: string;
    credential: CommunicationTokenCredential;
    targetCallees: StartCallIdentifier[];
    /**
     * A phone number in E.164 format procured using Azure Communication Services that will be used to represent callers identity.
     * E.164 numbers are formatted as [+] [country code] [phone number including area code]. For example, +14255550123 for a US phone number.
     */
    alternateCallerId?: string;
    /**
     * Optional parameters for the {@link AzureCommunicationCallAdapter} created
     */
    options?: AzureCommunicationCallAdapterOptions;
};

/**
 * Properties common to all composites exported from this library.
 *
 * @public
 */
export declare interface BaseCompositeProps<TIcons extends Record<string, JSX.Element>> {
    /**
     * Fluent theme for the composite.
     *
     * @defaultValue light theme
     */
    fluentTheme?: PartialTheme | Theme;
    /**
     * Custom Icon override for the composite.
     * A JSX element can be provided to override the default icon.
     */
    icons?: TIcons;
    /**
     * Locale for the composite.
     *
     * @defaultValue English (US)
     */
    locale?: CompositeLocale;
    /**
     * Whether composite is displayed right-to-left.
     *
     * @defaultValue false
     */
    rtl?: boolean;
    /**
     * A callback function that can be used to provide custom data to Avatars rendered
     * in Composite.
     *
     * This will not affect the displayName shown in the composite.
     * The displayName throughout the composite will be what is provided to the adapter when the adapter is created.
     * will be what is provided to the adapter when the adapter is created.
     */
    onFetchAvatarPersonaData?: AvatarPersonaDataCallback;
    /**
     * A callback function that can be used to provide custom menu items for a participant in
     * participant list.
     */
    onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;
}

/**
 * Basic fluent styles props for all components exported from this libray.
 *
 * @public
 */
export declare interface BaseCustomStyles {
    /** Styles for the root container. */
    root?: IStyle;
}

/**
 * Breakout rooms state
 *
 * @public
 */
export declare interface BreakoutRoomsState {
    /** Breakout room assigned to local user in call */
    assignedBreakoutRoom?: BreakoutRoom;
    /** Breakout room settings of call. This is defined when call is a breakout room. */
    breakoutRoomSettings?: BreakoutRoomsSettings;
    /** Display name of breakout room. This is defined when call is a breakout room. */
    breakoutRoomDisplayName?: string;
}

/**
 *  An Adapter interface specific for Azure Communication identity which extends {@link CommonCallAdapter}.
 *
 * @public
 */
export declare interface CallAdapter extends CommonCallAdapter {
    /**
     * Join the call with microphone initially on/off.
     * @deprecated Use joinCall(options?:JoinCallOptions) instead.
     * @param microphoneOn - Whether microphone is initially enabled
     *
     * @public
     */
    joinCall(microphoneOn?: boolean): Call | undefined;
    /**
     * Join the call with options bag to set microphone/camera initial state when joining call
     * true = turn on the device when joining call
     * false = turn off the device when joining call
     * 'keep'/undefined = retain devices' precall state
     *
     * @param options - param to set microphone/camera initially on/off/use precall state.
     *
     * @public
     */
    joinCall(options?: JoinCallOptions): Call | undefined;
    /**
     * Start the call.
     *
     * @param participants - An array of participant ids to join
     *
     * @public
     */
    startCall(participants: string[], options?: StartCallOptions): Call | undefined;
    /**
     * Start the call.
     * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called
     * @public
     */
    startCall(participants: StartCallIdentifier[], options?: StartCallOptions): Call | undefined;
}

/**
 * Payload for {@link CallEndedListener} containing details on the ended call.
 *
 * @public
 */
export declare type CallAdapterCallEndedEvent = {
    callId: string;
    code?: number;
    subCode?: number;
};

/**
 * Functionality for managing the current call or start a new call
 * @deprecated CallAdapter interface will be flatten, consider using CallAdapter directly
 * @public
 */
export declare interface CallAdapterCallManagement extends CallAdapterCallOperations {
    /**
     * Join the call with microphone initially on/off.
     * @deprecated Use joinCall(options?:JoinCallOptions) instead.
     * @param microphoneOn - Whether microphone is initially enabled
     *
     * @public
     */
    joinCall(microphoneOn?: boolean): Call | undefined;
    /**
     * Join the call with options bag to set microphone/camera initial state when joining call
     * true = turn on the device when joining call
     * false = turn off the device when joining call
     * 'keep'/undefined = retain devices' precall state
     *
     * @param options - param to set microphone/camera initially on/off/use precall state.
     *
     * @public
     */
    joinCall(options?: JoinCallOptions): Call | undefined;
    /**
     * Start the call.
     *
     * @param participants - An array of participant ids to join
     *
     * @public
     */
    startCall(participants: string[], options?: StartCallOptions): Call | undefined;
    /**
     * Start the call.
     * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called
     * @public
     */
    startCall(participants: StartCallIdentifier[], options?: StartCallOptions): Call | undefined;
}

/**
 * Functionality for managing the current call.
 *
 * @public
 */
export declare interface CallAdapterCallOperations {
    /**
     * Leave the call
     *
     * @param forEveryone - Whether to remove all participants when leaving
     *
     * @public
     */
    leaveCall(forEveryone?: boolean): Promise<void>;
    /**
     * Start the camera
     * This method will start rendering a local camera view when the call is not active
     *
     * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    startCamera(options?: VideoStreamOptions): Promise<void>;
    /**
     * Stop the camera
     * This method will stop rendering a local camera view when the call is not active
     *
     * @public
     */
    stopCamera(): Promise<void>;
    /**
     * Mute the current user during the call or disable microphone locally
     *
     * @public
     */
    mute(): Promise<void>;
    /**
     * Unmute the current user during the call or enable microphone locally
     *
     * @public
     */
    unmute(): Promise<void>;
    /**
     * Start sharing the screen during a call.
     *
     * @public
     */
    startScreenShare(): Promise<void>;
    /**
     * Raise hand for current user
     *
     * @public
     */
    raiseHand(): Promise<void>;
    /**
     * lower hand for current user
     *
     * @public
     */
    lowerHand(): Promise<void>;
    /**
     * Send reaction emoji
     *
     * @public
     */
    onReactionClick(reaction: Reaction_2): Promise<void>;
    /**
     * Stop sharing the screen
     *
     * @public
     */
    stopScreenShare(): Promise<void>;
    /**
     * Remove a participant from the call.
     *
     * @param userId - Id of the participant to be removed
     *
     * @public
     */
    removeParticipant(userId: string): Promise<void>;
    /**
     * Remove a participant from the call.
     * @param participant - {@link @azure/communication-common#CommunicationIdentifier} of the participant to be removed
     * @public
     */
    removeParticipant(participant: CommunicationIdentifier): Promise<void>;
    /**
     * Create the html view for a stream.
     *
     * @remarks
     * This method is implemented for composite
     *
     * @param remoteUserId - Id of the participant to render, leave it undefined to create the local camera view
     * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    createStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void | CreateVideoStreamViewResult>;
    /**
     * Dispose the html view for a stream.
     *
     * @remarks
     * This method is implemented for composite
     *
     * @deprecated Use {@link disposeRemoteVideoStreamView}, {@link disposeLocalVideoStreamView} and {@link disposeRemoteVideoStreamView} instead.
     *
     * @param remoteUserId - Id of the participant to render, leave it undefined to dispose the local camera view
     * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    disposeStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void>;
    /**
     * Dispose the html view for a screen share stream
     *
     * @remarks
     * this method is implemented for composite
     *
     * @param remoteUserId - Id of the participant to dispose the screen share stream view for.
     *
     * @public
     */
    disposeScreenShareStreamView(remoteUserId: string): Promise<void>;
    /**
     * Dispose the html view for a remote video stream
     *
     * @param remoteUserId - Id of the participant to dispose
     *
     * @public
     */
    disposeRemoteVideoStreamView(remoteUserId: string): Promise<void>;
    /**
     * Dispose the html view for a local video stream
     *
     * @public
     */
    disposeLocalVideoStreamView(): Promise<void>;
    /**
     * Holds the call.
     *
     * @public
     */
    holdCall(): Promise<void>;
    /**
     * Resumes the call from a `LocalHold` state.
     *
     * @public
     */
    resumeCall(): Promise<void>;
    /**
     * Add a participant to the call.
     *
     * @public
     */
    addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;
    addParticipant(participant: CommunicationUserIdentifier): Promise<void>;
    /**
     * send dtmf tone to another participant in a 1:1 PSTN call
     *
     * @public
     */
    sendDtmfTone(dtmfTone: DtmfTone_2): Promise<void>;
    /**
     * Function to Start captions
     * @param options - options for start captions
     */
    startCaptions(options?: StartCaptionsAdapterOptions): Promise<void>;
    /**
     * Function to set caption language
     * @param language - language set for caption
     */
    setCaptionLanguage(language: string): Promise<void>;
    /**
     * Function to set spoken language
     * @param language - spoken language
     */
    setSpokenLanguage(language: string): Promise<void>;
    /**
     * Funtion to stop captions
     */
    stopCaptions(options?: StopCaptionsAdapterOptions): Promise<void>;
    /**
     * Start the video background effect.
     *
     * @public
     */
    startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void>;
    /**
     * Stop the video background effect.
     *
     * @public
     */
    stopVideoBackgroundEffects(): Promise<void>;
    /**
     * Override the background picker images for background replacement effect.
     *
     * @param backgroundImages - Array of custom background images.
     *
     * @public
     */
    updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void;
    /**
     * Update the selected video background effect.
     *
     * @public
     */
    updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void;
    /**
     * Start the noise suppression effect.
     *
     */
    startNoiseSuppressionEffect(): Promise<void>;
    /**
     * Stop the noise suppression effect.
     *
     */
    stopNoiseSuppressionEffect(): Promise<void>;
    /**
     * Send the end of call survey result
     *
     * @public
     */
    submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined>;
    /**
     * Start spotlight for local and remote participants by their user ids.
     * If no array of user ids is passed then action is performed on local participant.
     */
    startSpotlight(userIds?: string[]): Promise<void>;
    /**
     * Stop spotlight for local and remote participants by their user ids.
     * If no array of user ids is passed then action is performed on local participant.
     */
    stopSpotlight(userIds?: string[]): Promise<void>;
    /**
     * Stop all spotlights
     */
    stopAllSpotlight(): Promise<void>;
    /**
     * Mute a participant
     *
     * @param userId - Id of the participant to mute
     */
    muteParticipant(userId: string): Promise<void>;
    /**
     * Mute All participants
     */
    muteAllRemoteParticipants(): Promise<void>;
    /**
     * Return to origin call of breakout room
     */
    returnFromBreakoutRoom(): Promise<void>;
    /**
     * Forbid Teams meeting attendees audio by their user ids.
     */
    forbidAudio(userIds: string[]): Promise<void>;
    /**
     * Permit Teams meeting attendees audio by their user ids.
     */
    permitAudio(userIds: string[]): Promise<void>;
    /**
     * Forbid Teams meeting audio.
     */
    forbidOthersAudio(): Promise<void>;
    /**
     * Permit Teams meeting audio.
     */
    permitOthersAudio(): Promise<void>;
    /**
     * Forbid Teams meeting attendees video by their user ids.
     */
    forbidVideo(userIds: string[]): Promise<void>;
    /**
     * Permit Teams meeting attendees audio by their user ids.
     */
    permitVideo(userIds: string[]): Promise<void>;
    /**
     * Forbid Teams meeting video.
     */
    forbidOthersVideo(): Promise<void>;
    /**
     * Permit Teams meeting video.
     */
    permitOthersVideo(): Promise<void>;
}

/**
 * {@link CommonCallAdapter} state inferred from Azure Communication Services backend.
 *
 * @public
 */
export declare type CallAdapterClientState = {
    userId: CommunicationIdentifierKind;
    displayName?: string;
    call?: CallState;
    /**
     * State to track who the original call went out to. will be undefined the call is not a outbound
     * modality. This includes, groupCalls, Rooms calls, and Teams InteropMeetings.
     */
    targetCallees?: CommunicationIdentifier[];
    devices: DeviceManagerState;
    endedCall?: CallState;
    /**
     * State to track whether the call is a teams call.
     */
    isTeamsCall: boolean;
    /**
     * State to track whether the call is a teams meeting.
     */
    isTeamsMeeting: boolean;
    /**
     * State to track whether the call is a rooms call.
     */
    isRoomsCall: boolean;
    /**
     * Latest error encountered for each operation performed via the adapter.
     */
    latestErrors: AdapterErrors;
    /**
     * Latest notifications from call client state.
     */
    latestNotifications: AdapterNotifications;
    /**
     * Azure communications Phone number to make PSTN calls with.
     */
    alternateCallerId?: string;
    /**
     * Environment information about system the adapter is made on
     */
    environmentInfo?: EnvironmentInfo;
    /**
     * State to track whether the local participant's camera is on. To be used when creating a custom
     * control bar with the CallComposite.
     */
    cameraStatus?: 'On' | 'Off';
    /**
     * Default set of background images for background replacement effect.
     */
    videoBackgroundImages?: VideoBackgroundImage[];
    /**
     * Dependency to be injected for video background effect.
     */
    onResolveVideoEffectDependency?: () => Promise<VideoBackgroundEffectsDependency>;
    /**
     * Dependency to be injected for deep noise suppression effect.
     */
    onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;
    /**
     * State to track whether the noise suppression should be on by default.
     * @default true
     */
    deepNoiseSuppressionOnByDefault?: boolean;
    /**
     * State to track whether to hide the noise suppression button.
     * @default false
     */
    hideDeepNoiseSuppressionButton?: boolean;
    /**
     * State to track the selected video background effect.
     */
    selectedVideoBackgroundEffect?: VideoBackgroundEffect;
    /**
     * Call from transfer request accepted by local user
     */
    acceptedTransferCallState?: CallState;
    /**
     * Hide attendee names in teams meeting
     */
    hideAttendeeNames?: boolean;
    /**
     * State to track the sounds to be used in the call.
     */
    sounds?: CallingSounds;
    /**
     * State to track the reactions to be used.
     * @public
     */
    reactions?: ReactionResources;
};

/**
 * Functionality for managing devices within a call.
 *
 * @public
 */
export declare interface CallAdapterDeviceManagement {
    /**
     * Ask for permissions of devices.
     *
     * @remarks
     * Browser permission window will pop up if permissions are not granted yet
     *
     * @param constrain - Define constraints for accessing local devices {@link @azure/communication-calling#PermissionConstraints }
     *
     * @public
     */
    askDevicePermission(constrain: PermissionConstraints): Promise<DeviceAccess>;
    /**
     * Query for available camera devices.
     *
     * @remarks
     * This method should be called after askDevicePermission()
     *
     * @return An array of video device information entities {@link @azure/communication-calling#VideoDeviceInfo }
     *
     * @public
     */
    queryCameras(): Promise<VideoDeviceInfo[]>;
    /**
     * Query for available microphone devices.
     *
     * @remarks
     * This method should be called after askDevicePermission()
     *
     * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }
     *
     * @public
     */
    queryMicrophones(): Promise<AudioDeviceInfo[]>;
    /**
     * Query for available speaker devices.
     *
     * @remarks
     * This method should be called after askDevicePermission()
     *
     * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }
     *
     * @public
     */
    querySpeakers(): Promise<AudioDeviceInfo[]>;
    /**
     * Set the camera to use in the call.
     *
     * @param sourceInfo - Camera device to choose, pick one returned by  {@link CallAdapterDeviceManagement#queryCameras }
     * @param options - Options to control how the camera stream is rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    setCamera(sourceInfo: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void>;
    /**
     * Set the microphone to use in the call.
     *
     * @param sourceInfo - Microphone device to choose, pick one returned by {@link CallAdapterDeviceManagement#queryMicrophones }
     *
     * @public
     */
    setMicrophone(sourceInfo: AudioDeviceInfo): Promise<void>;
    /**
     * Set the speaker to use in the call.
     *
     * @param sourceInfo - Speaker device to choose, pick one returned by {@link CallAdapterDeviceManagement#querySpeakers }
     *
     * @public
     */
    setSpeaker(sourceInfo: AudioDeviceInfo): Promise<void>;
}

/**
 * Locator used by {@link createAzureCommunicationCallAdapter} to locate the call to join
 *
 * @public
 */
export declare type CallAdapterLocator = TeamsMeetingLinkLocator | GroupCallLocator | RoomCallLocator | TeamsMeetingIdLocator;

/**
 * {@link CommonCallAdapter} state.
 *
 * @public
 */
export declare type CallAdapterState = CallAdapterUiState & CallAdapterClientState;

/**
 * Call composite events that can be subscribed to.
 *
 * @public
 */
export declare interface CallAdapterSubscribers {
    /**
     * Subscribe function for 'participantsJoined' event.
     */
    on(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;
    /**
     * Subscribe function for 'participantsLeft' event.
     */
    on(event: 'participantsLeft', listener: ParticipantsLeftListener): void;
    /**
     * Subscribe function for 'isMutedChanged' event.
     *
     * @remarks
     * The event will be triggered whenever current user or remote user mute state changed
     *
     */
    on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;
    /**
     * Subscribe function for 'callIdChanged' event.
     *
     * @remarks
     * The event will be triggered when callId of current user changed.
     *
     */
    on(event: 'callIdChanged', listener: CallIdChangedListener): void;
    /**
     * Subscribe function for 'isLocalScreenSharingActiveChanged' event.
     */
    on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;
    /**
     * Subscribe function for 'displayNameChanged' event.
     */
    on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;
    /**
     * Subscribe function for 'isSpeakingChanged' event.
     */
    on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;
    /**
     * Subscribe function for 'callEnded' event.
     */
    on(event: 'callEnded', listener: CallEndedListener): void;
    /**
     * Subscribe function for 'diagnosticChanged' event.
     *
     * This event fires whenever there is a change in user facing diagnostics about the ongoing call.
     */
    on(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;
    /**
     * Subscribe function for 'selectedMicrophoneChanged' event.
     *
     * This event fires whenever the user selects a new microphone device.
     */
    on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;
    /**
     * Subscribe function for 'selectedSpeakerChanged' event.
     *
     * This event fires whenever the user selects a new speaker device.
     */
    on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;
    /**
     * Subscribe function for 'error' event.
     */
    on(event: 'error', listener: (e: AdapterError) => void): void;
    /**
     * Subscribe function for 'captionsReceived' event.
     */
    on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;
    /**
     * Subscribe function for 'isCaptionsActiveChanged' event.
     */
    on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;
    /**
     * Subscribe function for 'isCaptionLanguageChanged' event.
     */
    on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;
    /**
     * Subscribe function for 'isSpokenLanguageChanged' event.
     */
    on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;
    /**
     * Subscribe function for 'transferRequested' event.
     */
    on(event: 'transferAccepted', listener: TransferAcceptedListener): void;
    /**
     * Subscribe function for 'capabilitiesChanged' event.
     */
    on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;
    /**
     * Subscribe function for 'roleChanged' event.
     */
    on(event: 'roleChanged', listener: PropertyChangedEvent): void;
    /**
     * Subscribe function for 'spotlightChanged' event.
     */
    on(event: 'spotlightChanged', listener: SpotlightChangedListener): void;
    /**
     * Subscribe function for 'mutedByOthers' event.
     */
    on(event: 'mutedByOthers', listener: PropertyChangedEvent): void;
    /**
     * Subscribe function for 'breakoutRoomsUpdated' event.
     */
    on(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;
    /**
     * Unsubscribe function for 'participantsJoined' event.
     */
    off(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;
    /**
     * Unsubscribe function for 'participantsLeft' event.
     */
    off(event: 'participantsLeft', listener: ParticipantsLeftListener): void;
    /**
     * Unsubscribe function for 'isMutedChanged' event.
     */
    off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;
    /**
     * Unsubscribe function for 'callIdChanged' event.
     */
    off(event: 'callIdChanged', listener: CallIdChangedListener): void;
    /**
     * Unsubscribe function for 'isLocalScreenSharingActiveChanged' event.
     */
    off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;
    /**
     * Unsubscribe function for 'displayNameChanged' event.
     */
    off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;
    /**
     * Unsubscribe function for 'isSpeakingChanged' event.
     */
    off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;
    /**
     * Unsubscribe function for 'callEnded' event.
     */
    off(event: 'callEnded', listener: CallEndedListener): void;
    /**
     * Unsubscribe function for 'diagnosticChanged' event.
     */
    off(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;
    /**
     * Unsubscribe function for 'selectedMicrophoneChanged' event.
     */
    off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;
    /**
     * Unsubscribe function for 'selectedSpeakerChanged' event.
     */
    off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;
    /**
     * Unsubscribe function for 'error' event.
     */
    off(event: 'error', listener: (e: AdapterError) => void): void;
    /**
     * Unsubscribe function for 'captionsReceived' event.
     */
    off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;
    /**
     * Unsubscribe function for 'isCaptionsActiveChanged' event.
     */
    off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;
    /**
     * Unsubscribe function for 'isCaptionLanguageChanged' event.
     */
    off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;
    /**
     * Unsubscribe function for 'isSpokenLanguageChanged' event.
     */
    off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;
    /**
     * Unsubscribe function for 'transferRequested' event.
     */
    off(event: 'transferAccepted', listener: TransferAcceptedListener): void;
    /**
     * Unsubscribe function for 'capabilitiesChanged' event.
     */
    off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;
    /**
     * Unsubscribe function for 'roleChanged' event.
     */
    off(event: 'roleChanged', listener: PropertyChangedEvent): void;
    /**
     * Unsubscribe function for 'spotlightChanged' event.
     */
    off(event: 'spotlightChanged', listener: SpotlightChangedListener): void;
    /**
     * Unsubscribe function for 'mutedByOthers' event.
     */
    off(event: 'mutedByOthers', listener: PropertyChangedEvent): void;
    /**
     * Unsubscribe function for 'breakoutRoomsUpdated' event.
     */
    off(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;
}

/**
 * {@link CommonCallAdapter} state for pure UI purposes.
 *
 * @public
 */
export declare type CallAdapterUiState = {
    isLocalPreviewMicrophoneEnabled: boolean;
    page: CallCompositePage;
};

/**
 * A {@link React.Context} that stores a {@link @azure/communication-calling#CallAgent}.
 *
 * Calling components from this package must be wrapped with a {@link CallAgentProvider}.
 *
 * @public
 */
export declare const CallAgentProvider: (props: CallAgentProviderProps) => JSX.Element;

/**
 * Arguments to initialize a {@link CallAgentProvider}.
 *
 * @public
 */
export declare interface CallAgentProviderProps {
    children: React_2.ReactNode;
    callAgent?: CallAgent | TeamsCallAgent;
}

/**
 * State only version of {@link @azure/communication-calling#CallAgent} except calls is moved to be a child directly of
 * {@link CallClientState} and not included here. The reason to have CallAgent's state proxied is to provide access to
 * displayName. We don't flatten CallAgent.displayName and put it in CallClientState because it would be ambiguious that
 * displayName is actually reliant on the creation/existence of CallAgent to be available.
 *
 * @public
 */
export declare interface CallAgentState {
    /**
     * Proxy of {@link @azure/communication-calling#CallAgent.displayName}.
     */
    displayName?: string;
}

/**
 * Arguments for use in {@link createAzureCommunicationCallWithChatAdapter} to join a Call with an associated Chat thread.
 *
 * @public
 */
export declare interface CallAndChatLocator {
    /** Locator used by {@link createAzureCommunicationCallWithChatAdapter} to locate the call to join */
    callLocator: GroupCallLocator;
    /** Chat thread ID used by {@link createAzureCommunicationCallWithChatAdapter} to locate the chat thread to join */
    chatThreadId: string;
}

/**
 * A {@link React.Context} that stores a {@link StatefulCallClient}.
 *
 * Calling components from this package must be wrapped with a {@link CallClientProvider}.
 *
 * @public
 */
export declare const CallClientProvider: (props: CallClientProviderProps) => JSX.Element;

/**
 * Arguments to initialize a {@link CallClientProvider}.
 *
 * @public
 */
export declare interface CallClientProviderProps {
    children: React_2.ReactNode;
    callClient: StatefulCallClient;
}

/**
 * Container for all of the state data proxied by {@link StatefulCallClient}. The calls, callsEnded, incomingCalls, and
 * incomingCallsEnded states will be automatically provided if a callAgent has been created. The deviceManager will be
 * empty initially until populated see {@link DeviceManagerState}. The userId state is provided as a convenience for the
 * developer and is completely controled and set by the developer.
 *
 * @public
 */
export declare interface CallClientState {
    /**
     * Proxy of {@link @azure/communication-calling#CallAgent.calls} as an object with CallState {@link CallState} fields.
     * It is keyed by {@link @azure/communication-calling#Call.id}. Please note that
     * {@link @azure/communication-calling#Call.id} could change. You should not cache the id itself but the entire
     * {@link @azure/communication-calling#Call} and then use the id contained to look up data in this map.
     */
    calls: {
        [key: string]: CallState;
    };
    /**
     * Calls that have ended are stored here so the callEndReason could be checked.
     * It is an object with {@link @azure/communication-calling#Call.id} keys and {@link CallState} values.
     *
     * Only {@link MAX_CALL_HISTORY_LENGTH} Calls are kept in the history. Oldest calls are evicted if required.
     */
    callsEnded: {
        [key: string]: CallState;
    };
    /**
     * Proxy of {@link @azure/communication-calling#IncomingCall} as an object with {@link IncomingCall} fields.
     * It is keyed by {@link @azure/communication-calling#IncomingCall.id}.
     */
    incomingCalls: {
        [key: string]: IncomingCallState | TeamsIncomingCallState;
    };
    /**
     * Incoming Calls that have ended are stored here so the callEndReason could be checked.
     * It is an as an object with {@link @azure/communication-calling#Call.id} keys and {@link IncomingCall} values.
     *
     * Only {@link MAX_CALL_HISTORY_LENGTH} Calls are kept in the history. Oldest calls are evicted if required.
     */
    incomingCallsEnded: {
        [key: string]: IncomingCallState | TeamsIncomingCallState;
    };
    /**
     * Proxy of {@link @azure/communication-calling#DeviceManager}. Please review {@link DeviceManagerState}.
     */
    deviceManager: DeviceManagerState;
    /**
     * Proxy of {@link @azure/communication-calling#CallAgent}. Please review {@link CallAgentState}.
     */
    callAgent?: CallAgentState;
    /**
     * Stores a userId. This is not used by the {@link StatefulCallClient} and is provided here as a convenience for the
     * developer for easier access to userId. Must be passed in at initialization of the {@link StatefulCallClient}.
     * Completely controlled by the developer.
     */
    userId: CommunicationIdentifierKind;
    /**
     * Stores the latest error for each API method.
     *
     * See documentation of {@Link CallErrors} for details.
     */
    latestErrors: CallErrors;
    /**
     * Stores the latest notifications.
     *
     * See documentation of {@Link CallNotifications} for details.
     */
    latestNotifications: CallNotifications;
    /**
     * A phone number in E.164 format that will be used to represent callers identity.
     * For example, using the alternateCallerId to add a participant using PSTN, this number will
     * be used as the caller id in the PSTN call.
     */
    alternateCallerId?: string;
    /**
     * state to track the environment that the stateful client was made in is supported
     */
    environmentInfo?: EnvironmentInfo;
}

/**
 * A customizable UI composite for calling experience.
 *
 * @remarks Call composite min width/height are as follow:
 * - mobile: 17.5rem x 21rem (280px x 336px, with default rem at 16px)
 * - desktop: 30rem x 22rem (480px x 352px, with default rem at 16px)
 *
 * @public
 */
export declare const CallComposite: (props: CallCompositeProps) => JSX.Element;

/**
 * Icons that can be overridden for {@link CallComposite}.
 *
 * @public
 */
export declare type CallCompositeIcons = {
    ControlBarPeopleButton?: JSX.Element;
    ControlButtonCameraOff?: JSX.Element;
    ControlButtonCameraOn?: JSX.Element;
    ControlButtonEndCall?: JSX.Element;
    ControlButtonMicOff?: JSX.Element;
    ControlButtonMicOn?: JSX.Element;
    ControlButtonOptions?: JSX.Element;
    ControlButtonParticipants?: JSX.Element;
    ControlButtonScreenShareStart?: JSX.Element;
    ControlButtonScreenShareStop?: JSX.Element;
    ControlButtonCameraProhibited?: JSX.Element;
    ControlButtonCameraProhibitedSmall?: JSX.Element;
    ControlButtonMicProhibited?: JSX.Element;
    ControlButtonMicProhibitedSmall?: JSX.Element;
    ControlButtonRaiseHand?: JSX.Element;
    ControlButtonLowerHand?: JSX.Element;
    ControlButtonExitSpotlight?: JSX.Element;
    RaiseHandContextualMenuItem?: JSX.Element;
    ReactionContextualMenuItem?: JSX.Element;
    LowerHandContextualMenuItem?: JSX.Element;
    ReactionButtonIcon?: JSX.Element;
    ErrorBarCallCameraAccessDenied?: JSX.Element;
    ErrorBarCallCameraAlreadyInUse?: JSX.Element;
    ErrorBarCallLocalVideoFreeze?: JSX.Element;
    ErrorBarCallMacOsCameraAccessDenied?: JSX.Element;
    ErrorBarCallMacOsMicrophoneAccessDenied?: JSX.Element;
    ErrorBarCallMicrophoneAccessDenied?: JSX.Element;
    ErrorBarCallMicrophoneMutedBySystem?: JSX.Element;
    ErrorBarCallMicrophoneUnmutedBySystem?: JSX.Element;
    ErrorBarCallNetworkQualityLow?: JSX.Element;
    ErrorBarCallNoMicrophoneFound?: JSX.Element;
    ErrorBarCallNoSpeakerFound?: JSX.Element;
    ErrorBarClear?: JSX.Element;
    HorizontalGalleryLeftButton?: JSX.Element;
    HorizontalGalleryRightButton?: JSX.Element;
    LobbyScreenConnectingToCall?: JSX.Element;
    LobbyScreenWaitingToBeAdmitted?: JSX.Element;
    LocalDeviceSettingsCamera?: JSX.Element;
    LocalDeviceSettingsMic?: JSX.Element;
    LocalDeviceSettingsSpeaker?: JSX.Element;
    LocalPreviewPlaceholder?: JSX.Element;
    Muted?: JSX.Element;
    NetworkReconnectIcon?: JSX.Element;
    NoticePageAccessDeniedTeamsMeeting?: JSX.Element;
    NoticePageJoinCallFailedDueToNoNetwork?: JSX.Element;
    NoticePageLeftCall?: JSX.Element;
    NoticePageRemovedFromCall?: JSX.Element;
    NoticePageCallRejected?: JSX.Element;
    NoticePageNotInvitedToRoom?: JSX.Element;
    NoticePageRoomNotFound?: JSX.Element;
    NoticePageRoomNotValid?: JSX.Element;
    NoticePageCallTimeout?: JSX.Element;
    OptionsCamera?: JSX.Element;
    OptionsMic?: JSX.Element;
    OptionsSpeaker?: JSX.Element;
    ParticipantItemMicOff?: JSX.Element;
    ParticipantItemOptions?: JSX.Element;
    ParticipantItemOptionsHovered?: JSX.Element;
    ParticipantItemScreenShareStart?: JSX.Element;
    VideoTileMicOff?: JSX.Element;
    LocalCameraSwitch?: JSX.Element;
    PeoplePaneAddPerson?: JSX.Element;
    PeoplePaneOpenDialpad?: JSX.Element;
    DialpadStartCall?: JSX.Element;
    NoticePageInviteToRoomRemoved?: JSX.Element;
    BlurVideoBackground?: JSX.Element;
    RemoveVideoBackgroundEffect?: JSX.Element;
    GalleryOptions?: JSX.Element;
    SpeakerGalleryLayout?: JSX.Element;
    FloatingLocalVideoGalleryLayout?: JSX.Element;
    DefaultGalleryLayout?: JSX.Element;
    FocusedContentGalleryLayout?: JSX.Element;
    OverflowGalleryTop?: JSX.Element;
    LargeGalleryLayout?: JSX.Element;
    DefaultCustomButton?: JSX.Element;
    DtmfDialpadButton?: JSX.Element;
    PhoneNumberButton?: JSX.Element;
    JoinByPhoneDialStepIcon?: JSX.Element;
    JoinByPhoneConferenceIdIcon?: JSX.Element;
    JoinByPhoneWaitToBeAdmittedIcon?: JSX.Element;
    PeoplePaneMoreButton?: JSX.Element;
    StopAllSpotlightMenuButton?: JSX.Element;
};

/**
 * Props for the OutboundCallComposite that you can use in your application.
 *
 * Contains two options bags:
 * - adapterOptions: Options for the {@link AzureCommunicationCallAdapter}
 * - callCompositeOptions: Options for the {@link CallComposite} {@link CallCompositeOptions}
 *
 * @public
 */
export declare type CallCompositeLoaderProps = {
    userId: CommunicationUserIdentifier;
    credential: CommunicationTokenCredential;
    displayName: string;
    locator: CallAdapterLocator;
    callAdapterOptions?: AzureCommunicationCallAdapterOptions;
    callCompositeOptions?: CallCompositeOptions;
};

/**
 * Optional features of the {@link CallComposite}.
 *
 * @public
 */
export declare type CallCompositeOptions = {
    captionsBanner?: {
        height: 'full' | 'default';
    };
    /**
     * Surface Azure Communication Services backend errors in the UI with {@link @azure/communication-react#ErrorBar}.
     * Hide or show the error bar.
     * @defaultValue true
     */
    errorBar?: boolean;
    /**
     * Hide or Customize the control bar element.
     * Can be customized by providing an object of type {@link @azure/communication-react#CallControlOptions}.
     * @defaultValue true
     */
    callControls?: boolean | CallControlOptions;
    /**
     * Remote participant video tile menu options
     */
    remoteVideoTileMenuOptions?: RemoteVideoTileMenuOptions;
    /**
     * Options for controlling the local video tile.
     *
     * @remarks if 'false' the local video tile will not be rendered.
     */
    localVideoTile?: boolean | LocalVideoTileOptions;
    /**
     * Options for controlling video tile.
     */
    videoTilesOptions?: VideoTilesOptions;
    /**
     * Whether to auto show the DTMF Dialer when the call starts in supported scenarios.
     * - Teams Voice Application like Call queue or Auto Attendant
     * - PSTN Calls
     * @defaultValue false
     */
    disableAutoShowDtmfDialer?: boolean | DtmfDialPadOptions;
    /**
     * Options for controlling the starting layout of the composite's video gallery
     */
    galleryOptions?: {
        /**
         * Layout for the gallery when the call starts
         */
        layout?: VideoGalleryLayout;
        /**
         * Controls the view of the local screenshare stream in the gallery
         */
        localScreenShareView?: LocalScreenShareView;
    };
    /**
     * Options for end of call survey
     */
    surveyOptions?: {
        /**
         * Disable call survey at the end of a call.
         * @defaultValue false
         */
        disableSurvey?: boolean;
        /**
         * Optional callback to redirect users to custom screens when survey is done, note that default end call screen will be shown if this callback is not provided
         * This callback can be used to redirect users to different screens depending on survey state, whether it is submitted, skipped or has a problem when submitting the survey
         */
        onSurveyClosed?: (surveyState: 'sent' | 'skipped' | 'error', surveyError?: string) => void;
        /**
         * Optional callback to handle survey data including free form text response
         * Note that free form text response survey option is only going to be enabled when this callback is provided
         * User will need to handle all free form text response on their own
         */
        onSurveySubmitted?: (callId: string, surveyId: string, 
        /**
         * This is the survey results containing star survey data and API tag survey data.
         * This part of the result will always be sent to the calling sdk
         * This callback provides user with the ability to gain access to survey data
         */
        submittedSurvey: CallSurvey, 
        /**
         * This is the survey results containing free form text
         * This part of the result will not be handled by composites
         * User will need to collect and handle this information 100% on their own
         * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated
         */
        improvementSuggestions: CallSurveyImprovementSuggestions) => Promise<void>;
    };
    /**
     * Options for setting additional customizations related to personalized branding.
     */
    branding?: {
        /**
         * Logo displayed on the configuration page.
         */
        logo?: {
            /**
             * URL for the logo image.
             *
             * @remarks
             * Recommended size is 80x80 pixels.
             */
            url: string;
            /**
             * Alt text for the logo image.
             */
            alt?: string;
            /**
             * The logo can be displayed as a circle.
             *
             * @defaultValue 'unset'
             */
            shape?: 'unset' | 'circle';
        };
        /**
         * Background image displayed on the configuration page.
         */
        backgroundImage?: {
            /**
             * URL for the background image.
             *
             * @remarks
             * Background image should be larger than 576x567 pixels and smaller than 2048x2048 pixels pixels.
             */
            url: string;
        };
    };
    /**
     * Options for settings related to spotlight.
     */
    spotlight?: {
        /**
         * Flag to hide the menu buttons to start and stop spotlight for remote participants and the local participant.
         * @defaultValue false
         */
        hideSpotlightButtons?: boolean;
    };
    /**
     * Options for settings related to joining a call.
     */
    joinCallOptions?: {
        /**
         * options for checking microphone permissions when joining a call.
         * block on access will block the user from joining the call if the microphone permission is not granted.
         * skip will allow the user to join the call without granting the microphone permission.
         * @defaultValue 'requireMicrophoneAvailable'
         */
        microphoneCheck?: 'requireMicrophoneAvailable' | 'skip';
    };
};

/**
 * Major UI screens shown in the {@link CallComposite}.
 *
 * @public
 */
export declare type CallCompositePage = 'accessDeniedTeamsMeeting' | 'call' | 'configuration' | 'hold' | 'joinCallFailedDueToNoNetwork' | 'leftCall' | 'leaving' | 'lobby' | 'removedFromCall' | 'transferring' | 'badRequest' | 'returningFromBreakoutRoom';

/**
 * Props for {@link CallComposite}.
 *
 * @public
 */
export declare interface CallCompositeProps extends BaseCompositeProps<CallCompositeIcons> {
    /**
     * An adapter provides logic and data to the composite.
     * Composite can also be controlled using the adapter.
     */
    adapter: CommonCallAdapter;
    /**
     * Optimizes the composite form factor for either desktop or mobile.
     * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.
     * @defaultValue 'desktop'
     */
    formFactor?: 'desktop' | 'mobile';
    /**
     * URL to invite new participants to the current call. If this is supplied, a button appears in the Participants
     * Button flyout menu.
     */
    callInvitationUrl?: string;
    /**
     * Flags to enable/disable or customize UI elements of the {@link CallComposite}.
     */
    options?: CallCompositeOptions;
}

/**
 * Strings used by the {@link CallComposite} directly.
 *
 * This strings are in addition to those used by the components from the component library.
 *
 * @public
 */
export declare interface CallCompositeStrings {
    /**
     * Title of configuration page.
     */
    configurationPageTitle: string;
    /**
     * Optional 1-2 lines on the call details used on the configuration page.
     */
    configurationPageCallDetails?: string;
    /**
     * Text in button to start call in configuration page.
     */
    startCallButtonLabel: string;
    /**
     * Text in button to rejoin an ended call.
     */
    rejoinCallButtonLabel: string;
    /**
     * Placeholder text for local device settings dropdowns.
     */
    defaultPlaceHolder: string;
    /**
     * Label for camera dropdown.
     */
    cameraLabel: string;
    /**
     * Label for when there are no cameras present on configuration screen.
     */
    noCamerasLabel: string;
    /**
     * Label for sound dropdown.
     */
    soundLabel: string;
    /**
     * Label for when no microphones were found on the configuration screen
     */
    noMicrophonesLabel: string;
    /**
     * Label for when no speakers were found on the configuration screen.
     */
    noSpeakersLabel: string;
    /**
     * Error shown when camera access is blocked by the browser.
     */
    cameraPermissionDenied: string;
    /**
     * Error shown when the camera is turned off.
     */
    cameraTurnedOff: string;
    /**
     * Error shown when microphone access is blocked by the browser.
     */
    microphonePermissionDenied: string;
    /**
     * Title text of the page shown to the user when joining a Teams meeting fails because meeting owner denied access.
     */
    failedToJoinTeamsMeetingReasonAccessDeniedTitle: string;
    /**
     * More details text of the page shown to the user when joining a Teams meeting fails because meeting owner denied access.
     */
    failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails?: string;
    /**
     * Title text of the page shown to the user when joining a call fails due to a network problem.
     */
    failedToJoinCallDueToNoNetworkTitle: string;
    /**
     * More details text of the page shown to the user when joining a call fails due to a network problem.
     */
    failedToJoinCallDueToNoNetworkMoreDetails?: string;
    /**
     * Text to display on a leaving page.
     */
    leavingCallTitle?: string;
    /**
     * Title text of the page shown to the user when they leave a call in the call composite.
     */
    leftCallTitle: string;
    /**
     * More details text of the page shown to the user when they leave a call in the call composite.
     */
    leftCallMoreDetails?: string;
    /**
     * Title text of the page shown to the user when they are removed from a call in the call composite.
     */
    removedFromCallTitle: string;
    /**
     * More details text of the page shown to the user when they are removed from a call in the call composite.
     */
    removedFromCallMoreDetails?: string;
    /**
     * Text shown to the user on the lobby screen when connecting to a call.
     */
    lobbyScreenConnectingToCallTitle: string;
    /**
     * Optional addition details shown to the user on the lobby screen when connection to a call.
     */
    lobbyScreenConnectingToCallMoreDetails?: string;
    /**
     * Text shown to the user on the lobby screen when waiting to be admitted to a call.
     */
    lobbyScreenWaitingToBeAdmittedTitle: string;
    /**
     * Optional additional details shown to the user on the lobby screen when waiting to be admitted to a call.
     */
    lobbyScreenWaitingToBeAdmittedMoreDetails?: string;
    /**
     * Message shown to the user when they are speaking while muted.
     */
    mutedMessage: string;
    /**
     * Text for link to MS privacy policy in Compliance Banner.
     */
    privacyPolicy: string;
    /**
     * Text for link to learn more about a specific subject.
     */
    learnMore: string;
    /**
     * Message to let user know the meeting is only being recorded (no transcription) in ComplianceBanner.
     */
    complianceBannerNowOnlyRecording: string;
    /**
     * Message to let user know the meeting is only being transcripted (no recording) in ComplianceBanner.
     */
    complianceBannerNowOnlyTranscription: string;
    /**
     * Message to let user know recording and transcription of the meeting are saved in ComplianceBanner.
     */
    complianceBannerRecordingAndTranscriptionSaved: string;
    /**
     * Message to let user know recording and transcription of the meeting have started in ComplianceBanner.
     */
    complianceBannerRecordingAndTranscriptionStarted: string;
    /**
     * Message to let user know recording and transcription of the meeting have stopped in ComplianceBanner.
     */
    complianceBannerRecordingAndTranscriptionStopped: string;
    /**
     * Message to let user know recording of the meeting is being saved in ComplianceBanner.
     */
    complianceBannerRecordingSaving: string;
    /**
     * Message to let user know recording of the meeting has started in ComplianceBanner.
     */
    complianceBannerRecordingStarted: string;
    /**
     * Message to let user know recording of the meeting has stopped in ComplianceBanner.
     */
    complianceBannerRecordingStopped: string;
    /**
     * Message to let user know they are giving consent to meeting being transcripted in ComplianceBanner.
     */
    complianceBannerTranscriptionConsent: string;
    /**
     * Message to let user know transcription of the meeting is being saved in ComplianceBanner.
     */
    complianceBannerTranscriptionSaving: string;
    /**
     * Message to let user know transcription of the meeting has started in ComplianceBanner.
     */
    complianceBannerTranscriptionStarted: string;
    /**
     * Message to let user know the transcription of the meeting has stopped in ComplianceBanner.
     */
    complianceBannerTranscriptionStopped: string;
    /**
     * Text for close button.
     */
    close: string;
    /**
     * Title text of the page shown to the user when there is intermittent network failure during a call.
     */
    networkReconnectTitle: string;
    /**
     * More details text of the page shown to the user when there is intermittent network failure during a call.
     */
    networkReconnectMoreDetails: string;
    /**
     * Tooltip text used to inform a user that toggling microphone in lobby is not supported.
     */
    microphoneToggleInLobbyNotAllowed: string;
    /**
     * Side pane People section Title.
     */
    peoplePaneTitle: string;
    /**
     * Aria label of more button in people pane
     */
    peoplePaneMoreButtonAriaLabel: string;
    /**
     * Aria label string for return to call back button
     */
    returnToCallButtonAriaLabel?: string;
    /**
     * Aria Description string for return to call button
     */
    returnToCallButtonAriaDescription?: string;
    /**
     * control bar People button label
     */
    peopleButtonLabel: string;
    /**
     * control bar People button label when checked
     */
    selectedPeopleButtonLabel: string;
    /**
     * control bar Chat button label.
     */
    chatButtonLabel: string;
    /**
     * Label for SidePaneHeader dismiss button
     */
    dismissSidePaneButtonLabel?: string;
    /**
     * Side pane People section subheader.
     */
    peoplePaneSubTitle?: string;
    /**
     * Label for button to copy invite link
     */
    copyInviteLinkButtonLabel?: string;
    /**
     * Label for button to copy invite link when it has been actioned
     */
    copyInviteLinkButtonActionedLabel?: string;
    /**
     * Label for button to open dialpad
     */
    openDialpadButtonLabel?: string;
    /**
     * Label for menu item to remove participant
     */
    removeMenuLabel?: string;
    /**
     * Label for menu item to start spotlight on participant
     */
    startSpotlightMenuLabel: string;
    /**
     * Label for menu item to add spotlight on participant
     */
    addSpotlightMenuLabel: string;
    /**
     * Label for menu item to stop spotlight on participant
     */
    stopSpotlightMenuLabel: string;
    /**
     * Label for menu item to stop spotlight on local user
     */
    stopSpotlightOnSelfMenuLabel: string;
    /**
     * Label for menu item to stop spotlight on local user
     */
    spotlightLimitReachedMenuTitle: string;
    /**
     * Label for menu item to stop all spotlight
     */
    stopAllSpotlightMenuLabel: string;
    /**
     * Label for add people dropdown
     */
    peoplePaneAddPeopleButtonLabel?: string;
    /**
     * Label for button to start a call
     */
    dialpadStartCallButtonLabel?: string;
    /**
     * Title for dialpad Modal
     */
    dialpadModalTitle?: string;
    /**
     * Aria Label for dialpad Modal
     */
    dialpadModalAriaLabel?: string;
    /**
     * Aria Label for dialpad Modal close button
     */
    dialpadCloseModalButtonAriaLabel?: string;
    /**
     * label for more button in the Calling composite
     */
    moreButtonCallingLabel: string;
    /**
     * Label for the resume call button on the hold pane
     */
    resumeCallButtonLabel?: string;
    /**
     * Label for the resume call button on the hold pane when call is resuming
     */
    resumingCallButtonLabel?: string;
    /**
     * Aria label for the resume call button on the hold pane
     */
    resumeCallButtonAriaLabel?: string;
    /**
     * Aria label for the resume call button on the hold pane when call is resuming
     */
    resumingCallButtonAriaLabel?: string;
    /**
     * Label for the hold pane
     */
    holdScreenLabel?: string;
    /**
     * Placeholder text for dtmf dialpad
     */
    dtmfDialpadPlaceholderText?: string;
    /**
     * Label for the button to open dtmf dialpad
     */
    openDtmfDialpadLabel?: string;
    /**
     * aria label for when the invite link has been actioned
     */
    copyInviteLinkActionedAriaLabel: string;
    /**
     * Title text of the page shown to the user when the user attempts to join a room that cannot be found.
     */
    roomNotFoundTitle: string;
    /**
     * More details text of the page shown to the user when the user attempts to join a room that cannot be found.
     */
    roomNotFoundDetails?: string;
    /**
     * Title text of the page shown to the user when the user attempts to join a room that is not valid.
     */
    roomNotValidTitle: string;
    /**
     * More details text of the page shown to the user when the user attempts to join a room that is not valid.
     */
    roomNotValidDetails?: string;
    /**
     * Title text of the page shown to the user when the user's permission to join the room is removed.
     */
    inviteToRoomRemovedTitle: string;
    /**
     * More details text of the page shown to the user when the user's permission to join the room is removed.
     */
    inviteToRoomRemovedDetails?: string;
    /**
     * Video Effects pane title.
     */
    videoEffectsPaneTitle: string;
    /**
     * Video Effects pane sub section title for choosing background.
     */
    videoEffectsPaneBackgroundSelectionTitle: string;
    /**
     * Aria label for video effects pane
     */
    videoEffectsPaneAriaLabel: string;
    /**
     * Label for the button to open effects
     */
    configurationPageCameraIsLoadingLabel?: string;
    /**
     * Label for the button to open effects
     */
    configurationPageVideoEffectsButtonLabel?: string;
    /**
     * Error message for video effect failure
     */
    unableToStartVideoEffect?: string;
    /**
     * Label for the blur video background effect item
     */
    blurBackgroundEffectButtonLabel?: string;
    /**
     * Tooltip text for the blur video background effect item
     */
    blurBackgroundTooltip?: string;
    /**
     * Label for the remove video background effect item
     */
    removeBackgroundEffectButtonLabel?: string;
    /**
     * Tooltip text for the blur video background effect item
     */
    removeBackgroundTooltip?: string;
    /**
     * Text to show when warning the user the camera is off and inform the user to turn the camera on to see the selected video background effect.
     */
    cameraOffBackgroundEffectWarningText?: string;
    /**
     * Title text of the page shown to the user when the user attempts to join a room they are not invited to.
     */
    notInvitedToRoomTitle: string;
    /**
     * More details text of the page shown to the user when the user attempts to join a room they are not invited to.
     */
    notInvitedToRoomDetails?: string;
    /**
     * Control bar People button ToolTipContent
     */
    peopleButtonTooltipOpen: string;
    /**
     * Control bar People button ToolTipContent
     */
    peopleButtonTooltipClose: string;
    /**
     * Label disaplayed on the lobby screen during a 1:1 outbound call.
     */
    outboundCallingNoticeString?: string;
    /**
     * Notice to be announced by narrator when a participant joins a call
     */
    participantJoinedNoticeString: string;
    /**
     * Notice to be announced by narrator when a participant joins a call
     */
    twoParticipantJoinedNoticeString: string;
    /**
     * Notice to be announced by narrator when a participant joins a call
     */
    threeParticipantJoinedNoticeString: string;
    /**
     * Notice to be announced by narrator when a participant leaves a call
     */
    participantLeftNoticeString: string;
    /**
     * Notice to be announced by narrator when 2 participants leave a call
     */
    twoParticipantLeftNoticeString: string;
    /**
     * Notice to be announced by narrator when 3 participants leave a call
     */
    threeParticipantLeftNoticeString: string;
    /**
     * string to be used to announce a change in participant if they have no displayName
     */
    unnamedParticipantString: string;
    /**
     * string to be used to announce when more than 3 participants have joined at the same time.
     */
    manyParticipantsJoined: string;
    /**
     * string to be used to announce when more than 3 participants have left at the same time.
     */
    manyParticipantsLeft: string;
    /**
     * string to be used to announce when multiple unnamed participants have joined at the same time.
     */
    manyUnnamedParticipantsJoined: string;
    /**
     * string to be used to announce when multiple unnamed participants have left at the same time.
     */
    manyUnnamedParticipantsLeft: string;
    /**
     * string to be used to open live captions contextual menu
     */
    liveCaptionsLabel?: string;
    /**
     * label for opening captions setting modal
     */
    captionsSettingsLabel?: string;
    /**
     * string to be used to start captions
     */
    startCaptionsButtonOnLabel?: string;
    /**
     * string to be used to stop captions
     */
    startCaptionsButtonOffLabel?: string;
    /**
     * tooltip string to be used to show captions is on
     */
    startCaptionsButtonTooltipOnContent?: string;
    /**
     *tooltip string to be used to show captions is off
     */
    startCaptionsButtonTooltipOffContent?: string;
    /**
     * captions setting modal title
     */
    captionsSettingsModalTitle?: string;
    /**
     * label for spoken language dropdown inside captions setting modal
     */
    captionsSettingsSpokenLanguageDropdownLabel?: string;
    /**
     * label for captions language inside captions setting modal
     */
    captionsSettingsCaptionLanguageDropdownLabel?: string;
    /**
     * text under captions setting dropdown indicating what the dropdown is for
     */
    captionsSettingsSpokenLanguageDropdownInfoText?: string;
    /**
     * text under captions setting dropdown indicating what the dropdown is for
     */
    captionsSettingsCaptionLanguageDropdownInfoText?: string;
    /**
     * confirm button label in captions setting modal
     */
    captionsSettingsConfirmButtonLabel?: string;
    /**
     * cancel button label in captions setting modal
     */
    captionsSettingsCancelButtonLabel?: string;
    /**
     * arial label for captions setting modal
     */
    captionsSettingsModalAriaLabel?: string;
    /**
     * arial label for captions setting modal close button
     */
    captionsSettingsCloseModalButtonAriaLabel?: string;
    /**
     * label for more button inside captions banner
     */
    captionsBannerMoreButtonCallingLabel?: string;
    /**
     * arial label for more button inside captions banner
     */
    captionsBannerMoreButtonTooltip?: string;
    /**
     * list of key value pairs that pairs spoken language code to language names
     */
    spokenLanguageStrings?: SpokenLanguageStrings;
    /**
     * list of key value pairs that pairs caption language code to language names
     */
    captionLanguageStrings?: CaptionLanguageStrings;
    /**
     * captions banner loading spinner label
     */
    captionsBannerSpinnerText?: string;
    /**
     * transfer page text when showing the transferor who initiated the transfer
     */
    transferPageTransferorText: string;
    /**
     * transfer page text when showing the transfer target
     */
    transferPageTransferTargetText: string;
    /**
     * transfer page display name for unknown participant
     */
    transferPageUnknownTransferorDisplayName: string;
    /**
     * transfer page display name for unknown participant
     */
    transferPageUnknownTransferTargetDisplayName: string;
    /**
     * notice to be announced by narrator the transfer page is showing
     */
    transferPageNoticeString: string;
    /**
     * Title text of the page shown to the user when target participant could not be reached
     */
    participantCouldNotBeReachedTitle?: string;
    /**
     * More details text of the page shown to the user when target participant could not be reached
     */
    participantCouldNotBeReachedMoreDetails?: string;
    /**
     * Title text of the page shown to the user when permission to reach participant is not allowed
     */
    permissionToReachTargetParticipantNotAllowedTitle?: string;
    /**
     * More details text of the page shown to the user when permission to reach participant is not allowed
     */
    permissionToReachTargetParticipantNotAllowedMoreDetails?: string;
    /**
     * Title text of the page shown to the user when tenant id for the target participant could not be resolved
     */
    unableToResolveTenantTitle?: string;
    /**
     * More details text of the page shown to the user when tenant id for the target participant could not be resolved
     */
    unableToResolveTenantMoreDetails?: string;
    /**
     * Title text of the page shown to the user when target participant id is malformed
     */
    participantIdIsMalformedTitle?: string;
    /**
     * More details text of the page shown to the user when target participant id is malformed
     */
    participantIdIsMalformedMoreDetails?: string;
    /**
     * Controls label to move the overflow gallery around
     */
    moreButtonGalleryControlLabel?: string;
    /**
     * Label for the toggle to move the overflow gallery to the top
     */
    moreButtonGalleryPositionToggleLabel?: string;
    /**
     * Label for the selection of the speaker layout
     */
    moreButtonGallerySpeakerLayoutLabel?: string;
    /**
     * Label for the selection of the default (Gallery) layout
     */
    moreButtonGalleryDefaultLayoutLabel?: string;
    /**
     * Label for the selection of the default (Gallery) layout
     */
    moreButtonLargeGalleryDefaultLayoutLabel?: string;
    /**
     * Label for the selection of the Together Mode (Gallery) layout
     */
    moreButtonTogetherModeLayoutLabel?: string;
    /**
     * Label for the selection of the floatingLocalVideo (Dynamic) layout
     */
    moreButtonGalleryFloatingLocalLayoutLabel?: string;
    /**
     * Label for the selection of the focusedContentLayout (Focused content) layout
     */
    moreButtonGalleryFocusedContentLayoutLabel?: string;
    /**
     * All strings for capability changed notification
     */
    capabilityChangedNotification?: CapabilityChangedNotificationStrings;
    /**
     * Title for the survey
     */
    surveyTitle: string;
    /**
     * Helper text to explain what the survey is for
     */
    starSurveyHelperText: string;
    /**
     * Helper text displayed below survey question after user select one star
     */
    starSurveyOneStarText: string;
    /**
     * Helper text displayed below survey question after user select two star
     */
    starSurveyTwoStarText: string;
    /**
     * Helper text displayed below survey question after user select three star
     */
    starSurveyThreeStarText: string;
    /**
     * Helper text displayed below survey question after user select four star
     */
    starSurveyFourStarText: string;
    /**
     * Helper text displayed below survey question after user select five star
     */
    starSurveyFiveStarText: string;
    /**
     * Aria Label for each individual star rating
     */
    starRatingAriaLabel: string;
    /**
     * Tags Survey Question
     */
    tagsSurveyQuestion: string;
    /**
     * Default text for free form text field inside tags survey
     */
    tagsSurveyTextFieldDefaultText: string;
    /**
     * Tags Survey helper text
     */
    tagsSurveyHelperText: string;
    /**
     * Confirm button label for survey
     */
    surveyConfirmButtonLabel: string;
    /**
     * Cancel button label for survey
     */
    surveySkipButtonLabel: string;
    /**
     * Thank you text appeared on screen after survey is submitted
     */
    endOfSurveyText: string;
    /**
     * Corresponding texts to each call issue
     */
    surveyIssues: SurveyIssues;
    /**
     * Corresponding texts to each call category
     */
    surveyIssuesHeadingStrings: SurveyIssuesHeadingStrings;
    /**
     * String for the dismiss control on the local and remote PIP on mobile
     */
    dismissModalAriaLabel?: string;
    /**
     * String for title when the call is rejected by the callee
     */
    callRejectedTitle?: string;
    /**
     * String for more details when the call is rejected by the callee
     */
    callRejectedMoreDetails?: string;
    /**
     * String for title when the call times out because the remote user does not answer
     */
    callTimeoutTitle?: string;
    /**
     * String for title when the call times out when calling a bot.
     */
    callTimeoutBotTitle?: string;
    /**
     * String for more details when the call times out because the remote user does not answer
     */
    callTimeoutDetails?: string;
    /**
     * String for more details when the call times out when calling a bot
     */
    callTimeoutBotDetails?: string;
    /**
     * Label for the control bar button to show the dtmf dialer when the more button is disabled
     */
    dtmfDialerButtonLabel?: string;
    /**
     * Tooltip for the control bar button to show the dtmf dialer when the more button is disabled
     */
    dtmfDialerButtonTooltipOn?: string;
    /**
     * Tooltip for the control bar button to hide the dtmf dialer when the more button is disabled
     */
    dtmfDialerButtonTooltipOff?: string;
    /**
     * Label to show the dtmf dialer in the more button menu
     */
    dtmfDialerMoreButtonLabelOn?: string;
    /**
     * Label to hide the dtmf dialer in the more button menu
     */
    dtmfDialerMoreButtonLabelOff?: string;
    /**
     * Strings for spotlight prompt
     */
    spotlightPrompt: SpotlightPromptStrings;
    /**
     * Label for button to exit spotlight
     */
    exitSpotlightButtonLabel: string;
    /**
     * Tooltip for button to exit spotlight
     */
    exitSpotlightButtonTooltip: string;
    /**
     * Label for confirm button of hang up for everyone dialog
     */
    leaveConfirmButtonLabel?: string;
    /**
     * Label for confirm button of leave confim dialog
     */
    endCallConfirmButtonLabel?: string;
    /**
     * Label for cancel button in hang up confirm dialog
     */
    hangUpCancelButtonLabel?: string;
    /**
     * Title of confirm dialog when leaving
     */
    leaveConfirmDialogTitle?: string;
    /**
     * Content of confirm dialog when leaving
     */
    leaveConfirmDialogContent?: string;
    /**
     * Title of confirm dialog when leaving
     */
    endCallConfirmDialogTitle?: string;
    /**
     * Content of confirm dialog when leaving
     */
    endCallConfirmDialogContent?: string;
    /**
     * Error message when the meeting identifier or passcode is invalid
     */
    invalidMeetingIdentifier: string;
    /**
     * Menu text shown in Participant Item contextual menu for pinning a remote participant's video tile
     *
     */
    pinParticipantMenuLabel: string;
    /**
     * Menu text shown in Participant Item contextual menu when pinning limit is reached
     *
     */
    pinParticipantLimitReachedMenuLabel: string;
    /**
     * Menu text shown in Participant Item contextual menu for unpinning a remote participant's video tile
     *
     */
    unpinParticipantMenuLabel: string;
    /**
     * Aria label for unpin participant menu item of remote participant
     */
    unpinParticipantMenuItemAriaLabel: string;
    /**
     * Aria label to announce when remote participant is pinned
     */
    pinParticipantMenuItemAriaLabel: string;
    /**
     * Error message when the meeting identifier or passcode is invalid
     */
    phoneCallMoreButtonLabel: string;
    /**
     * Label for mute all remote participants menu item in People Pane
     */
    muteAllMenuLabel: string;
    /**
     * Label for mute all prompt title
     */
    muteAllDialogTitle: string;
    /**
     * Label for mute all prompt content
     */
    muteAllDialogContent: string;
    /**
     * Label for mute all confirm button
     */
    muteAllConfirmButtonLabel: string;
    /**
     * Label for mute all cancel button
     */
    muteAllCancelButtonLabel: string;
    /**
     * Label for join breakout room button
     */
    joinBreakoutRoomButtonLabel: string;
    /**
     * Label for button to return from breakout room
     */
    returnFromBreakoutRoomButtonLabel: string;
    /**
     * Label for button to leave breakout room and meeting
     */
    leaveBreakoutRoomAndMeetingButtonLabel: string;
    /**
     * Notification title for when a user joins a breakout room
     */
    breakoutRoomJoinedNotificationTitle: string;
    /**
     * Title for banner to join the assigned breakout room. The banner is shown in mobile view instead of the
     * notification.
     */
    joinBreakoutRoomBannerTitle: string;
    /**
     * Label for button in banner to join breakout room. The banner is shown in mobile view instead of the notification.
     */
    joinBreakoutRoomBannerButtonLabel: string;
    /**
     * Title for banner to return from breakout room. The banner is shown in mobile view instead of the notification.
     */
    returnFromBreakoutRoomBannerTitle: string;
    /**
     * Label for button in banner to return from breakout room. The banner is shown in mobile view instead of the
     * notification.
     */
    returnFromBreakoutRoomBannerButtonLabel: string;
    /**
     * Label for menu item to forbid audio media access
     */
    forbidAudioMenuLabel: string;
    /**
     * Label for menu item to permit audio media access
     */
    permitAudioMenuLabel: string;
    /**
     * Dialog title to confirm forbid Teams meeting audio media access
     */
    forbidOthersAudioDialogTitle: string;
    /**
     * Dialog content to confirm forbid Teams meeting audio media access
     */
    forbidOthersAudioDialogContent: string;
    /**
     * Dialog button to confirm forbid Teams meeting audio media access
     */
    forbidOthersAudioConfirmButtonLabel: string;
    /**
     * Dialog cancel button for forbid Teams meeting audio media access
     */
    forbidOthersAudioCancelButtonLabel: string;
    /**
     * Dialog title to confirm permit Teams meeting audio media access
     */
    permitOthersAudioDialogTitle: string;
    /**
     * Dialog content to confirm permit Teams meeting audio media access
     */
    permitOthersAudioDialogContent: string;
    /**
     * Dialog button to confirm permit Teams meeting audio media access
     */
    permitOthersAudioConfirmButtonLabel: string;
    /**
     * Dialog cancel button for permit Teams meeting audio media access
     */
    permitOthersAudioCancelButtonLabel: string;
    /**
     * Label for menu item to forbid video media access
     */
    forbidOthersAudioMenuLabel: string;
    /** Label for menu item to permit video media access */
    permitOthersAudioMenuLabel: string;
    /** Label for menu item to forbid video media access */
    forbidVideoMenuLabel: string;
    /** Label for menu item to permit video media access */
    permitVideoMenuLabel: string;
    /** Dialog title to confirm forbid Teams meeting video media access */
    forbidOthersVideoDialogTitle: string;
    /** Dialog content to confirm forbid Teams meeting video media access */
    forbidOthersVideoDialogContent: string;
    /** Dialog button to confirm forbid Teams meeting video media access */
    forbidOthersVideoConfirmButtonLabel: string;
    /** Dialog cancel button for forbid Teams meeting video media access */
    forbidOthersVideoCancelButtonLabel: string;
    /** Dialog title to confirm permit Teams meeting video media access */
    permitOthersVideoDialogTitle: string;
    /** Dialog content to confirm permit Teams meeting video media access */
    permitOthersVideoDialogContent: string;
    /** Dialog button to confirm permit Teams meeting video media access */
    permitOthersVideoConfirmButtonLabel: string;
    /** Dialog cancel button for permit Teams meeting video media access */
    permitOthersVideoCancelButtonLabel: string;
    /** Label for menu item to forbid audio media access */
    forbidOthersVideoMenuLabel: string;
    /** Label for menu item to permit audio media access */
    permitOthersVideoMenuLabel: string;
}

/**
 * Control bar display type for {@link CallComposite}.
 *
 * @public
 */
export declare type CallControlDisplayType = 'default' | 'compact';

/**
 * Customization options for the control bar in calling experience.
 *
 * @public
 */
export declare type CallControlOptions = CommonCallControlOptions & {
    /**
     * Show, Hide or Disable participants button during a call. This is the option only work for legacyControl bar.
     * @defaultValue true
     */
    participantsButton?: boolean | {
        disabled: boolean;
    };
    legacyControlBarExperience?: boolean;
};

/**
 * Callback for {@link CallAdapterSubscribers} 'callEnded' event.
 *
 * @public
 */
export declare type CallEndedListener = (event: CallAdapterCallEndedEvent) => void;

/**
 * Error thrown from failed stateful API methods.
 *
 * @public
 */
export declare class CallError extends Error {
    /**
     * The API method target that failed.
     */
    target: CallErrorTarget;
    /**
     * Error thrown by the failed SDK method.
     */
    innerError: Error;
    /**
     * Timestamp added to the error by the stateful layer.
     */
    timestamp: Date;
    /**
     * Primary code for the calling error
     */
    code?: number;
    /**
     * Sub code for the calling error
     */
    subCode?: number;
    /** needs to be a (innerError as CommunicationServicesError) */
    constructor(target: CallErrorTarget, innerError: Error, timestamp?: Date);
}

/**
 * Selector type for {@link ErrorBar} component.
 *
 * @public
 */
export declare type CallErrorBarSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    activeErrorMessages: ActiveErrorMessage[];
};

/**
 * Errors teed from API calls to the Calling SDK.
 *
 * Each property in the object stores the latest error for a particular SDK API method.
 *
 * Errors from this object can be cleared using the {@link newClearCallErrorsModifier}.
 * Additionally, errors are automatically cleared when:
 * - The state is cleared.
 * - Subsequent calls to related API methods succeed.
 * See documentation of individual stateful client methods for details on when errors may be automatically cleared.
 *
 * @public
 */
export declare type CallErrors = {
    [target in CallErrorTarget]: CallError;
};

/**
 * String literal type for all permissible keys in {@Link CallErrors}.
 *
 * @public
 */
export declare type CallErrorTarget = 'Call.addParticipant' | 'Call.dispose' | 'Call.feature' | 'Call.hangUp' | 'Call.hold' | 'Call.mute' | 'Call.muteIncomingAudio' | 'Call.off' | 'Call.on' | 'Call.removeParticipant' | 'Call.resume' | 'Call.sendDtmf' | 'Call.startAudio' | 'Call.startScreenSharing' | 'Call.startVideo' | 'Call.stopScreenSharing' | 'Call.stopAudio' | 'Call.stopVideo' | 'Call.unmute' | 'Call.unmuteIncomingAudio' | 'CallAgent.dispose' | 'CallAgent.feature' | 'CallAgent.join' | 'CallAgent.off' | 'CallAgent.on' | 'CallAgent.startCall' | 'CallClient.createCallAgent' | 'CallClient.createTeamsCallAgent' | 'CallClient.feature' | 'CallClient.getDeviceManager' | 'CallClient.getEnvironmentInfo' | 'DeviceManager.askDevicePermission' | 'DeviceManager.getCameras' | 'DeviceManager.getMicrophones' | 'DeviceManager.getSpeakers' | 'DeviceManager.off' | 'DeviceManager.on' | 'DeviceManager.selectMicrophone' | 'DeviceManager.selectSpeaker' | 'IncomingCall.accept' | 'IncomingCall.reject' | 'TeamsCall.addParticipant' | 'VideoEffectsFeature.startEffects' | 'Call.mutedByOthers' | 'Call.muteAllRemoteParticipants' | 'Call.setConstraints';

/**
 * Callback for {@link CallAdapterSubscribers} 'callIdChanged' event.
 *
 * @public
 */
export declare type CallIdChangedListener = (event: {
    callId: string;
}) => void;

/**
 * State to track the types {@link CallInfo} and {@link TeamsCallInfo}
 * @public
 */
export declare interface CallInfoState {
    /**
     * GroupId of the call that you joined
     */
    groupId?: string;
    /**
     * The teams meeting thread id
     */
    threadId?: string;
    /**
     * participant id of the local user
     */
    participantId: string;
    /**
     * Differentiator between the Call and TeamsCall types
     */
    kind: IncomingCallKind;
}

/**
 * Common props used to reference calling declarative client state.
 *
 * @public
 */
export declare type CallingBaseSelectorProps = {
    callId: string;
};

/**
 * Object containing all the handlers required for calling components.
 *
 * Calling related components from this package are able to pick out relevant handlers from this object.
 * See {@link useHandlers} and {@link usePropsFor}.
 *
 * @public
 */
export declare interface CallingHandlers extends CommonCallingHandlers {
    onStartCall: (participants: CommunicationIdentifier[], options?: StartCallOptions) => Call | undefined;
}

/**
 * Configuration options to include video effect background dependency.
 * @public
 */
export declare type CallingHandlersOptions = {
    onResolveVideoBackgroundEffectsDependency?: () => Promise<VideoBackgroundEffectsDependency>;
    /**
     * Dependency resolver for deep noise suppression effect.
     * @beta
     */
    onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;
};

/**
 * Helper type for {@link usePropsFor}.
 *
 * @public
 */
export declare type CallingReturnProps<Component extends (props: any) => JSX.Element> = GetCallingSelector<Component> extends ((state: CallClientState, props: any) => any) ? ReturnType<GetCallingSelector<Component>> & Common<CallingHandlers, Parameters<Component>[0]> : never;

/**
 * @public
 * Type for representing a set of sounds to use for different calling events
 */
export declare type CallingSounds = {
    /**
     * Sound to be played when the call ends
     */
    callEnded?: SoundEffect;
    /**
     * Sound to be played when the call is ringing
     */
    callRinging?: SoundEffect;
    /**
     * Sound to be played when the call is rejected by the user being callede
     */
    callBusy?: SoundEffect;
};

/**
 * Custom Fluent theme palette used by calling related components in this library.
 *
 * @public
 */
export declare interface CallingTheme {
    callingPalette: {
        callRed: string;
        callRedDark: string;
        callRedDarker: string;
        iconWhite: string;
        raiseHandGold: string;
        videoTileLabelBackgroundLight: string;
    };
}

/**
 * @public
 */
export declare interface CallNotification {
    target: NotificationTarget;
    timestamp: Date;
}

/**
 * @public
 */
export declare type CallNotifications = {
    [target in NotificationTarget]: CallNotification;
};

/**
 * Calling participant's state, as reflected in the UI components.
 *
 * @public
 */
export declare type CallParticipantListParticipant = ParticipantListParticipant & {
    /** State of calling participant */
    state: ParticipantState;
    /** Whether calling participant is screen sharing */
    isScreenSharing?: boolean;
    /** Whether calling participant is muted */
    isMuted?: boolean;
    /** Whether calling participant is speaking */
    isSpeaking?: boolean;
    /** Whether calling participant is raised hand */
    raisedHand?: RaisedHand;
    /**
     * Whether calling participant has reacted
     *
     * @beta
     * */
    reaction?: Reaction;
    /** Whether calling participant is spotlighted **/
    spotlight?: Spotlight;
    /** Whether calling participant has audio/video media access blocked **/
    mediaAccess?: MediaAccess;
};

/**
 * A {@link React.Context} that stores a {@link @azure/communication-calling#Call}.
 *
 * Calling components from this package must be wrapped with a {@link CallProvider}.
 *
 * @public
 */
export declare const CallProvider: (props: CallProviderProps) => JSX.Element;

/**
 * Arguments to initialize a {@link CallProvider}.
 *
 * @public
 */
export declare interface CallProviderProps {
    children: React_2.ReactNode;
    call?: Call | TeamsCall;
}

/**
 * State only version of {@link @azure/communication-calling#Call}. {@link StatefulCallClient} will automatically
 * retrieve Call's state and add it to the state exposed by {@link StatefulCallClient}.
 *
 * @public
 */
export declare interface CallState {
    /**
     * Proxy of {@link @azure/communication-calling#Call.id}.
     */
    id: string;
    /**
     * Type of the call.
     */
    kind: CallKind;
    /**
     * Proxy of {@link @azure/communication-calling#Call.callerInfo}.
     */
    callerInfo: CallerInfo;
    /**
     * Proxy of {@link @azure/communication-calling#Call.state}.
     */
    state: CallState_2;
    /**
     * Proxy of {@link @azure/communication-calling#Call.callEndReason}.
     */
    callEndReason?: CallEndReason;
    /**
     * Proxy of {@link @azure/communication-calling#Call.direction}.
     */
    direction: CallDirection;
    /**
     * Proxy of {@link @azure/communication-calling#Call.isMuted}.
     */
    isMuted: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#Call.isScreenSharingOn}.
     */
    isScreenSharingOn: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#DominantSpeakersInfo }.
     */
    dominantSpeakers?: DominantSpeakersInfo;
    /**
     * Proxy of {@link @azure/communication-calling#Call.localVideoStreams}.
     */
    localVideoStreams: LocalVideoStreamState[];
    /**
     * Proxy of {@link @azure/communication-calling#Call.remoteParticipants}.
     * Object with {@link RemoteParticipant} fields keyed by flattened {@link RemoteParticipantState.identifier}.
     * To obtain a flattened {@link RemoteParticipantState.identifier}, use
     * {@link @azure/communication-react#toFlatCommunicationIdentifier}.
     */
    remoteParticipants: {
        [keys: string]: RemoteParticipantState;
    };
    /**
     * Stores remote participants that have left the call so that the callEndReason could be retrieved.
     * Object with {@link RemoteParticipant} fields keyed by flattened {@link RemoteParticipantState.identifier}.
     * To obtain a flattened {@link RemoteParticipantState.identifier}, use
     * {@link @azure/communication-react#toFlatCommunicationIdentifier}.
     */
    remoteParticipantsEnded: {
        [keys: string]: RemoteParticipantState;
    };
    /**
     * Proxy of {@link @azure/communication-calling#TranscriptionCallFeature}.
     */
    transcription: TranscriptionCallFeature;
    /**
     * Proxy of {@link @azure/communication-calling#CaptionsCallFeature}.
     */
    captionsFeature: CaptionsCallFeatureState;
    /**
     * Proxy of {@link @azure/communication-calling#OptimalVideoCountCallFeature}.
     */
    optimalVideoCount: OptimalVideoCountFeatureState;
    /**
     * Proxy of {@link @azure/communication-calling#RecordingCallFeature}.
     */
    recording: RecordingCallFeature;
    /**
     * Proxy of {@link @azure/communication-calling#PPTLiveCallFeature}.
     *
     *@public
     */
    pptLive: PPTLiveCallFeatureState;
    /**
     * Proxy of {@link @azure/communication-calling#RaiseHandCallFeature}.
     */
    raiseHand: RaiseHandCallFeature;
    /**
     * Proxy of {@link @azure/communication-calling#Call.ReactionMessage} with
     * UI helper props receivedOn which indicates the timestamp when the message was received.
     *
     * @public
     */
    localParticipantReaction?: ReactionState;
    /**
     * Stores the currently active screenshare participant's key. If there is no screenshare active, then this will be
     * undefined. You can use this key to access the remoteParticipant data in {@link CallState.remoteParticipants} object.
     *
     * Note this only applies to ScreenShare in RemoteParticipant. A local ScreenShare being active will not affect this
     * property.
     *
     * This property is added by the stateful layer and is not a proxy of SDK state
     */
    screenShareRemoteParticipant?: string;
    /**
     * Stores the currently active pptlive participant's key. Will be reused by White board etc. If there is no screenshare active, then this will be
     * undefined. You can use this key to access the remoteParticipant data in {@link CallState.remoteParticipants} object.
     *
     * Note this only applies to PPTLive in RemoteParticipant.
     *
     * This property is added by the stateful layer and is not a proxy of SDK state
     *
     * @public
     */
    contentSharingRemoteParticipant?: string;
    /**
     * Stores the local date when the call started on the client. This property is added by the stateful layer and is not
     * a proxy of SDK state.
     */
    startTime: Date;
    /**
     * Stores the local date when the call ended on the client. This property is added by the stateful layer and is not
     * a proxy of SDK state.
     */
    endTime: Date | undefined;
    /**
     * Stores the latest call diagnostics.
     */
    diagnostics: DiagnosticsCallFeatureState;
    /**
     * Proxy of {@link @azure/communication-calling#Call.role}.
     */
    role?: ParticipantRole;
    /**
     * Transfer state of call
     */
    transfer: TransferFeature;
    /**
     * Proxy of {@link @azure/communication-calling#CapabilitiesFeature}.
     */
    capabilitiesFeature?: CapabilitiesFeatureState;
    /**
     * Hide attendee names in teams meeting
     */
    hideAttendeeNames?: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#SpotlightCallFeature}.
     */
    spotlight?: SpotlightCallFeatureState;
    /**
     * Proxy of {@link @azure/communication-calling#Call.info}.
     */
    info?: TeamsCallInfo;
    /**
     * Proxy of {@link @azure/communication-calling#TeamsMeetingAudioConferencingCallFeature}.
     */
    meetingConference?: {
        conferencePhones: ConferencePhoneInfo[];
    };
    /**
     * Proxy of {@link @azure/communication-calling#BreakoutRoomsFeature}.
     */
    breakoutRooms?: BreakoutRoomsState;
    /**
     * Proxy of {@link @azure/communication-calling#MediaAccessFeature}.
     */
    meetingMediaAccess?: MediaAccessState;
}

/**
 * Represents the improvement suggestion part of call survey
 * @public
 */
export declare interface CallSurveyImprovementSuggestions {
    /**
     * Improvement suggestions for overall call
     */
    overallRating?: string;
    /**
     * Improvement suggestions for audio experience
     */
    audioRating?: string;
    /**
     * Improvement suggestions for video experience
     */
    videoRating?: string;
    /**
     * Improvement suggestions for screenshare experience
     */
    screenshareRating?: string;
}

/**
 * {@link CallWithChatComposite} Adapter interface.
 *
 * @public
 */
export declare interface CallWithChatAdapter extends CallWithChatAdapterManagement, AdapterState<CallWithChatAdapterState>, Disposable_2, CallWithChatAdapterSubscriptions {
}

/**
 * Functionality for managing the current call with chat.
 * @public
 */
export declare interface CallWithChatAdapterManagement {
    /**
     * Remove a participant from a Call.
     *
     * @param userId - UserId of the participant to remove.
     *
     * @public
     */
    removeParticipant(userId: string): Promise<void>;
    /**
     * Remove a participant from the call.
     * @param participant - {@link @azure/communication-common#CommunicationIdentifier} of the participant to be removed
     * @public
     */
    removeParticipant(participant: CommunicationIdentifier): Promise<void>;
    /**
     * Join the call with microphone initially on/off.
     * @deprecated Use joinCall(options?:JoinCallOptions) instead.
     * @param microphoneOn - Whether microphone is initially enabled
     *
     * @public
     */
    joinCall(microphoneOn?: boolean): Call | undefined;
    /**
     * Join the call with options bag to set microphone/camera initial state when joining call
     * true = turn on the device when joining call
     * false = turn off the device when joining call
     * 'keep'/undefined = retain devices' precall state
     *
     * @param options - param to set microphone/camera initially on/off/use precall state.
     *
     * @public
     */
    joinCall(options?: JoinCallOptions): Call | undefined;
    /**
     * Leave the call.
     *
     * @param forEveryone - Whether to remove all participants when leaving
     *
     * @public
     */
    leaveCall(forEveryone?: boolean): Promise<void>;
    /**
     * Start the camera.
     *
     * This method will start rendering a local camera view when the call is not active.
     *
     * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    startCamera(options?: VideoStreamOptions): Promise<void>;
    /**
     * Stop the camera.
     *
     * This method will stop rendering a local camera view when the call is not active.
     *
     * @public
     */
    stopCamera(): Promise<void>;
    /**
     * Mute the current user during the call or disable microphone locally.
     *
     * @public
     */
    mute(): Promise<void>;
    /**
     * Unmute the current user during the call or enable microphone locally.
     *
     * @public
     */
    unmute(): Promise<void>;
    /**
     * Start the call.
     *
     * @param participants - An array of participant ids to join
     *
     * @public
     */
    startCall(participants: string[], options?: StartCallOptions): Call | undefined;
    /**
     * Start the call.
     * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called
     * @public
     */
    startCall(participants: (MicrosoftTeamsAppIdentifier | PhoneNumberIdentifier | CommunicationUserIdentifier | MicrosoftTeamsUserIdentifier | UnknownIdentifier)[], options?: StartCallOptions): Call | undefined;
    /**
     * Start sharing the screen during a call.
     *
     * @public
     */
    startScreenShare(): Promise<void>;
    /**
     * Stop sharing the screen.
     *
     * @public
     */
    stopScreenShare(): Promise<void>;
    /**
     * Raise hand for local user.
     *
     * @public
     */
    raiseHand(): Promise<void>;
    /**
     * Lower hand for local user.
     *
     * @public
     */
    lowerHand(): Promise<void>;
    /**
     * Send Reaction to ongoing meeting.
     * @param reaction - A value of type {@link @azure/communication-calling#Reaction}
     *
     * @public
     */
    onReactionClick(reaction: Reaction_2): Promise<void>;
    /**
     * Create the html view for a stream.
     *
     * @remarks
     * This method is implemented for composite.
     *
     * @param remoteUserId - Id of the participant to render, leave it undefined to create the local camera view
     * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    createStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void | CreateVideoStreamViewResult>;
    /**
     * Dispose the html view for a stream.
     *
     * @remarks
     * This method is implemented for composite.
     *
     * @param remoteUserId - Id of the participant to render, leave it undefined to dispose the local camera view
     * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    disposeStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void>;
    /**
     * Dispose the html view for a screen share stream
     *
     * @remarks
     * this method is implemented for composite
     *
     * @param remoteUserId - Id of the participant to dispose the screen share stream view for.
     *
     * @public
     */
    disposeScreenShareStreamView(remoteUserId: string): Promise<void>;
    /**
     * Dispose the html view for a remote video stream
     *
     * @param remoteUserId - Id of the participant to dispose
     *
     * @public
     */
    disposeRemoteVideoStreamView(remoteUserId: string): Promise<void>;
    /**
     * Dispose the html view for a local video stream
     *
     * @public
     */
    disposeLocalVideoStreamView(): Promise<void>;
    /**
     * Ask for permissions of devices.
     *
     * @remarks
     * Browser permission window will pop up if permissions are not granted yet.
     *
     * @param constrain - Define constraints for accessing local devices {@link @azure/communication-calling#PermissionConstraints }
     *
     * @public
     */
    askDevicePermission(constrain: PermissionConstraints): Promise<DeviceAccess>;
    /**
     * Query for available camera devices.
     *
     * @remarks
     * This method should be called after askDevicePermission()
     *
     * @return An array of video device information entities {@link @azure/communication-calling#VideoDeviceInfo }
     *
     * @public
     */
    queryCameras(): Promise<VideoDeviceInfo[]>;
    /**
     * Query for available microphone devices.
     *
     * @remarks
     * This method should be called after askDevicePermission()
     *
     * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }
     *
     * @public
     */
    queryMicrophones(): Promise<AudioDeviceInfo[]>;
    /**
     * Query for available microphone devices.
     *
     * @remarks
     * This method should be called after askDevicePermission()
     *
     * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }
     *
     * @public
     */
    querySpeakers(): Promise<AudioDeviceInfo[]>;
    /**
     * Set the camera to use in the call.
     *
     * @param sourceInfo - Camera device to choose, pick one returned by  {@link CallAdapterDeviceManagement#queryCameras }
     * @param options - Options to control how the camera stream is rendered {@link @azure/communication-calling#VideoStreamOptions }
     *
     * @public
     */
    setCamera(sourceInfo: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void>;
    /**
     * Set the microphone to use in the call.
     *
     * @param sourceInfo - Microphone device to choose, pick one returned by {@link CallAdapterDeviceManagement#queryMicrophones }
     *
     * @public
     */
    setMicrophone(sourceInfo: AudioDeviceInfo): Promise<void>;
    /**
     * Set the speaker to use in the call.
     *
     * @param sourceInfo - Speaker device to choose, pick one returned by {@link CallAdapterDeviceManagement#querySpeakers }
     *
     * @public
     */
    setSpeaker(sourceInfo: AudioDeviceInfo): Promise<void>;
    /**
     * Fetch initial state for the Chat adapter.
     *
     * Performs the minimal fetch necessary for ChatComposite and API methods.
     *
     * @public
     */
    fetchInitialData(): Promise<void>;
    /**
     * Send a message in the thread.
     *
     * @public
     */
    sendMessage(content: string, options?: SendMessageOptions): Promise<void>;
    /**
     * Send a read receipt for a message.
     *
     * @public
     */
    sendReadReceipt(chatMessageId: string): Promise<void>;
    /**
     * Send typing indicator in the thread.
     *
     * @public
     */
    sendTypingIndicator(): Promise<void>;
    /**
     * Update a message content.
     *
     * @public
     */
    updateMessage(messageId: string, content: string, options?: Record<string, string>): Promise<void>;
    /**
     * Delete a message in the thread.
     *
     * @public
     */
    deleteMessage(messageId: string): Promise<void>;
    /**
     * Load more previous messages in the chat thread history.
     *
     * @remarks
     * This method is usually used to control incremental fetch/infinite scroll.
     *
     * @public
     */
    loadPreviousChatMessages(messagesToLoad: number): Promise<boolean>;
    /** @public */
    downloadResourceToCache(resourceDetails: ResourceDetails): Promise<void>;
    /** @public */
    removeResourceFromCache(resourceDetails: ResourceDetails): void;
    /**
     * Puts the Call in a Localhold.
     *
     * @public
     */
    holdCall(): Promise<void>;
    /**
     * Resumes the call from a LocalHold state.
     *
     * @public
     */
    resumeCall(): Promise<void>;
    /**
     * Adds a new Participant to the call.
     *
     * @public
     */
    addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;
    addParticipant(participant: CommunicationUserIdentifier): Promise<void>;
    /**
     * send dtmf tone to another participant in the call in 1:1 calls
     *
     * @public
     */
    sendDtmfTone: (dtmfTone: DtmfTone_2) => Promise<void>;
    /**
     * Function to Start captions
     * @param options - options for start captions
     */
    startCaptions(options?: StartCaptionsAdapterOptions): Promise<void>;
    /**
     * Function to set caption language
     * @param language - language set for caption
     */
    setCaptionLanguage(language: string): Promise<void>;
    /**
     * Function to set spoken language
     * @param language - spoken language
     */
    setSpokenLanguage(language: string): Promise<void>;
    /**
     * Funtion to stop captions
     */
    stopCaptions(options?: StopCaptionsAdapterOptions): Promise<void>;
    /**
     * Start the video background effect.
     *
     * @public
     */
    startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void>;
    /**
     * Stop the video background effect.
     *
     * @public
     */
    stopVideoBackgroundEffects(): Promise<void>;
    /**
     * Override the background picker images for background replacement effect.
     *
     * @param backgroundImages - Array of custom background images.
     *
     * @public
     */
    updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void;
    /**
     * Update the selected video background effect
     *
     * @public
     */
    updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void;
    /**
     * Start the noise suppression effect.
     */
    startNoiseSuppressionEffect(): Promise<void>;
    /**
     * Start the noise suppression effect.
     */
    stopNoiseSuppressionEffect(): Promise<void>;
    /**
     * Send the end of call survey result
     *
     * @public
     */
    submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined>;
    /**
     * Start spotlight
     */
    startSpotlight(userIds?: string[]): Promise<void>;
    /**
     * Stop spotlight
     */
    stopSpotlight(userIds?: string[]): Promise<void>;
    /**
     * Stop all spotlights
     */
    stopAllSpotlight(): Promise<void>;
    /**
     * Mute a participant
     */
    muteParticipant(userId: string): Promise<void>;
    /**
     * Mute a participant
     */
    muteAllRemoteParticipants(): Promise<void>;
    /**
     * Return to origin call of breakout room
     */
    returnFromBreakoutRoom(): Promise<void>;
    /**
     * forbids audio for the specified user ids.
     */
    forbidAudio: (userIds: string[]) => Promise<void>;
    /** permits audio for the specified user ids. */
    permitAudio: (userIds: string[]) => Promise<void>;
    /** forbids audio for Teams meeting attendees except the local user. */
    forbidOthersAudio: () => Promise<void>;
    /**  permits audio for Teams meeting attendees except the local user. */
    permitOthersAudio: () => Promise<void>;
    /** forbids video for the specified user ids. */
    forbidVideo: (userIds: string[]) => Promise<void>;
    /** permits video for the specified user ids. */
    permitVideo: (userIds: string[]) => Promise<void>;
    /** forbids video for Teams meeting attendees except the local user. */
    forbidOthersVideo: () => Promise<void>;
    /** permits video for Teams meeting attendees except the local user. */
    permitOthersVideo: () => Promise<void>;
}

/**
 * CallWithChat State is a combination of Stateful Chat and Stateful Calling clients with some
 * state specific to the CallWithChat Composite only.
 *
 * @public
 */
export declare interface CallWithChatAdapterState extends CallWithChatAdapterUiState, CallWithChatClientState {
}

/**
 * Call and Chat events that can be subscribed to in the {@link CallWithChatAdapter}.
 * @public
 */
export declare interface CallWithChatAdapterSubscriptions {
    on(event: 'callEnded', listener: CallEndedListener): void;
    on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;
    on(event: 'callIdChanged', listener: CallIdChangedListener): void;
    on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;
    on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;
    on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;
    on(event: 'callParticipantsJoined', listener: ParticipantsJoinedListener): void;
    on(event: 'callParticipantsLeft', listener: ParticipantsLeftListener): void;
    on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;
    on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;
    on(event: 'callError', listener: (e: AdapterError) => void): void;
    on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;
    on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;
    on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;
    on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;
    on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;
    on(event: 'spotlightChanged', listener: SpotlightChangedListener): void;
    on(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;
    off(event: 'callEnded', listener: CallEndedListener): void;
    off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;
    off(event: 'callIdChanged', listener: CallIdChangedListener): void;
    off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;
    off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;
    off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;
    off(event: 'callParticipantsJoined', listener: ParticipantsJoinedListener): void;
    off(event: 'callParticipantsLeft', listener: ParticipantsLeftListener): void;
    off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;
    off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;
    off(event: 'callError', listener: (e: AdapterError) => void): void;
    off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;
    off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;
    off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;
    off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;
    off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;
    off(event: 'spotlightChanged', listener: SpotlightChangedListener): void;
    off(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;
    on(event: 'messageReceived', listener: MessageReceivedListener): void;
    on(event: 'messageEdited', listener: MessageEditedListener): void;
    on(event: 'messageDeleted', listener: MessageDeletedListener): void;
    on(event: 'messageSent', listener: MessageSentListener): void;
    on(event: 'messageRead', listener: MessageReadListener): void;
    on(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;
    on(event: 'chatParticipantsRemoved', listener: ParticipantsRemovedListener): void;
    on(event: 'chatError', listener: (e: AdapterError) => void): void;
    off(event: 'messageReceived', listener: MessageReceivedListener): void;
    off(event: 'messageEdited', listener: MessageEditedListener): void;
    off(event: 'messageDeleted', listener: MessageDeletedListener): void;
    off(event: 'messageSent', listener: MessageSentListener): void;
    off(event: 'messageRead', listener: MessageReadListener): void;
    off(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;
    off(event: 'chatParticipantsRemoved', listener: ParticipantsRemovedListener): void;
    off(event: 'chatError', listener: (e: AdapterError) => void): void;
    on(event: 'chatInitialized', listener: ChatInitializedListener): void;
    off(event: 'chatInitialized', listener: ChatInitializedListener): void;
}

/**
 * UI state pertaining to the {@link CallWithChatComposite}.
 *
 * @public
 */
export declare interface CallWithChatAdapterUiState {
    /**
     * Microphone state before a call has joined.
     *
     * @public
     */
    isLocalPreviewMicrophoneEnabled: boolean;
    /**
     * Current page of the Composite.
     *
     * @public
     */
    page: CallCompositePage;
}

/**
 * State from the backend services that drives {@link CallWithChatComposite}.
 *
 * @public
 */
export declare interface CallWithChatClientState {
    /** ID of the call participant using this CallWithChatAdapter. */
    userId: CommunicationIdentifierKind;
    /** Display name of the participant using this CallWithChatAdapter. */
    displayName: string | undefined;
    /** State of the current call. */
    call?: CallState;
    /** State of the current chat. */
    chat?: ChatThreadClientState;
    /** Latest call error encountered for each operation performed via the adapter. */
    latestCallErrors: AdapterErrors;
    /** Latest call notifications encountered in the call client state via the adapter. */
    latestCallNotifications: AdapterNotifications;
    /** Latest chat error encountered for each operation performed via the adapter. */
    latestChatErrors: AdapterErrors;
    /** State of available and currently selected devices */
    devices: DeviceManagerState;
    /** State of whether the active call is a Teams interop call */
    isTeamsCall: boolean;
    /** State of whether the active call is a Teams interop meeting */
    isTeamsMeeting: boolean;
    /** alternateCallerId for PSTN call */
    alternateCallerId?: string;
    /** Environment information for system adapter is made on */
    environmentInfo?: EnvironmentInfo;
    /** Default set of background images for background replacement effect */
    videoBackgroundImages?: VideoBackgroundImage[];
    /** Dependency to be injected for video background effects */
    onResolveVideoEffectDependency?: () => Promise<VideoBackgroundEffectsDependency>;
    /**
     * Dependency to be injected for deep noise suppression effect.
     */
    onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;
    /** State to track whether the noise suppression should be on by default.
     */
    deepNoiseSuppressionOnByDefault?: boolean;
    /** State to track whether to hide the noise suppression button.
     */
    hideDeepNoiseSuppressionButton?: boolean;
    /** State to track the selected video background effect */
    selectedVideoBackgroundEffect?: VideoBackgroundEffect;
    /** Hide attendee names in teams meeting */
    hideAttendeeNames?: boolean;
    /**
     * Reaction resources to render in meetings
     * */
    reactions?: ReactionResources;
}

/**
 * CallWithChatComposite brings together key components to provide a full call with chat experience out of the box.
 *
 * @public
 */
export declare const CallWithChatComposite: (props: CallWithChatCompositeProps) => JSX.Element;

/**
 * Icons that can be overridden for {@link CallWithChatComposite}.
 *
 * @public
 */
export declare type CallWithChatCompositeIcons = {
    ChevronLeft?: JSX.Element;
    ControlBarChatButtonActive?: JSX.Element;
    ControlBarChatButtonInactive?: JSX.Element;
    ControlBarPeopleButton?: JSX.Element;
    Link?: JSX.Element;
    MoreDrawerMicrophones?: JSX.Element;
    MoreDrawerPeople?: JSX.Element;
    MoreDrawerSelectedMicrophone?: JSX.Element;
    MoreDrawerSelectedSpeaker?: JSX.Element;
    MoreDrawerSpeakers?: JSX.Element;
    ControlButtonCameraOff?: JSX.Element;
    ControlButtonCameraOn?: JSX.Element;
    ControlButtonEndCall?: JSX.Element;
    ControlButtonMicOff?: JSX.Element;
    ControlButtonMicOn?: JSX.Element;
    ControlButtonOptions?: JSX.Element;
    ControlButtonScreenShareStart?: JSX.Element;
    ControlButtonScreenShareStop?: JSX.Element;
    ControlButtonCameraProhibited?: JSX.Element;
    ControlButtonCameraProhibitedSmall?: JSX.Element;
    ControlButtonMicProhibited?: JSX.Element;
    ControlButtonMicProhibitedSmall?: JSX.Element;
    ErrorBarCallCameraAccessDenied?: JSX.Element;
    ErrorBarCallCameraAlreadyInUse?: JSX.Element;
    ErrorBarCallLocalVideoFreeze?: JSX.Element;
    ErrorBarCallMacOsCameraAccessDenied?: JSX.Element;
    ErrorBarCallMacOsMicrophoneAccessDenied?: JSX.Element;
    ErrorBarCallMicrophoneAccessDenied?: JSX.Element;
    ErrorBarCallMicrophoneMutedBySystem?: JSX.Element;
    ErrorBarCallMicrophoneUnmutedBySystem?: JSX.Element;
    ErrorBarCallNetworkQualityLow?: JSX.Element;
    ErrorBarCallNoMicrophoneFound?: JSX.Element;
    ErrorBarCallNoSpeakerFound?: JSX.Element;
    ErrorBarClear?: JSX.Element;
    HorizontalGalleryLeftButton?: JSX.Element;
    HorizontalGalleryRightButton?: JSX.Element;
    LobbyScreenConnectingToCall?: JSX.Element;
    LobbyScreenWaitingToBeAdmitted?: JSX.Element;
    LocalDeviceSettingsCamera?: JSX.Element;
    LocalDeviceSettingsMic?: JSX.Element;
    LocalDeviceSettingsSpeaker?: JSX.Element;
    LocalPreviewPlaceholder?: JSX.Element;
    Muted?: JSX.Element;
    NetworkReconnectIcon?: JSX.Element;
    NoticePageAccessDeniedTeamsMeeting?: JSX.Element;
    NoticePageJoinCallFailedDueToNoNetwork?: JSX.Element;
    NoticePageLeftCall?: JSX.Element;
    NoticePageRemovedFromCall?: JSX.Element;
    OptionsCamera?: JSX.Element;
    OptionsMic?: JSX.Element;
    OptionsSpeaker?: JSX.Element;
    ParticipantItemMicOff?: JSX.Element;
    ParticipantItemScreenShareStart?: JSX.Element;
    VideoTileMicOff?: JSX.Element;
    LocalCameraSwitch?: JSX.Element;
    PeoplePaneAddPerson?: JSX.Element;
    PeoplePaneOpenDialpad?: JSX.Element;
    DialpadStartCall?: JSX.Element;
    DefaultCustomButton?: JSX.Element;
    DtmfDialpadButton?: JSX.Element;
    EditBoxCancel?: JSX.Element;
    EditBoxSubmit?: JSX.Element;
    MessageDelivered?: JSX.Element;
    MessageEdit?: JSX.Element;
    MessageFailed?: JSX.Element;
    MessageRemove?: JSX.Element;
    MessageSeen?: JSX.Element;
    MessageSending?: JSX.Element;
    SendBoxSend?: JSX.Element;
    SendBoxSendHovered?: JSX.Element;
    SendBoxAttachFile?: JSX.Element;
    ParticipantItemOptions?: JSX.Element;
    ParticipantItemOptionsHovered?: JSX.Element;
    PeoplePaneMoreButton?: JSX.Element;
    StopAllSpotlightMenuButton?: JSX.Element;
};

/**
 * Props for the CallWithChatComposite that you can use in your application.
 *
 * Contains two options bags:
 * - adapterOptions: Options for the {@link AzureCommunicationCallAdapterOptions}
 * - callCompositeOptions: Options for the {@link CallWithChatComposite} {@link CallWithChatCompositeOptions}
 * @public
 */
export declare type CallWithChatCompositeLoaderProps = {
    userId: CommunicationUserIdentifier;
    credential: CommunicationTokenCredential;
    displayName: string;
    endpoint: string;
    locator: CallAndChatLocator;
    callAdapterOptions?: AzureCommunicationCallAdapterOptions;
    callWithChatCompositeOptions?: CallWithChatCompositeOptions;
};

/**
 * Optional features of the {@link CallWithChatComposite}.
 *
 * @public
 */
export declare type CallWithChatCompositeOptions = {
    /**
     * Call control options to change what buttons show on the call-with-chat composite control bar.
     * If using the boolean values, true will cause default behavior across the whole control bar. False hides the whole control bar.
     */
    callControls?: boolean | CallWithChatControlOptions;
    /**
     * Remote participant video tile menu options
     */
    remoteVideoTileMenuOptions?: RemoteVideoTileMenuOptions;
    /**
     * Options for controlling the local video tile.
     *
     * @remarks if 'false' the local video tile will not be rendered.
     */
    localVideoTile?: boolean | LocalVideoTileOptions;
    /**
     * Options for controlling the starting layout of the composite's video gallery
     */
    galleryOptions?: {
        /**
         * Layout for the gallery when the call starts
         */
        layout?: VideoGalleryLayout;
        /**
         * Controls the view of the local screenshare stream in the gallery
         */
        localScreenShareView?: LocalScreenShareView;
    };
    /**
     * Options for end of call survey
     */
    surveyOptions?: {
        /**
         * Disable call survey at the end of a call.
         * @defaultValue false
         */
        disableSurvey?: boolean;
        /**
         * Optional callback to redirect users to custom screens when survey is done, note that default end call screen will be shown if this callback is not provided
         * This callback can be used to redirect users to different screens depending on survey state, whether it is submitted, skipped or has a problem when submitting the survey
         */
        onSurveyClosed?: (surveyState: 'sent' | 'skipped' | 'error', surveyError?: string) => void;
        /**
         * Optional callback to handle survey data including free form text response
         * Note that free form text response survey option is only going to be enabled when this callback is provided
         * User will need to handle all free form text response on their own
         */
        onSurveySubmitted?: (callId: string, surveyId: string, 
        /**
         * This is the survey results containing star survey data and API tag survey data.
         * This part of the result will always be sent to the calling sdk
         * This callback provides user with the ability to gain access to survey data
         */
        submittedSurvey: CallSurvey, 
        /**
         * This is the survey results containing free form text
         * This part of the result will not be handled by composites
         * User will need to collect and handle this information 100% on their own
         * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated
         */
        improvementSuggestions: CallSurveyImprovementSuggestions) => Promise<void>;
    };
    /**
     * Options for setting additional customizations related to personalized branding.
     */
    branding?: {
        /**
         * Logo displayed on the configuration page.
         */
        logo?: {
            /**
             * URL for the logo image.
             *
             * @remarks
             * Recommended size is 80x80 pixels.
             */
            url: string;
            /**
             * Alt text for the logo image.
             */
            alt?: string;
            /**
             * The logo can be displayed as a circle.
             *
             * @defaultValue 'unset'
             */
            shape?: 'unset' | 'circle';
        };
        /**
         * Background image displayed on the configuration page.
         */
        backgroundImage?: {
            /**
             * URL for the background image.
             *
             * @remarks
             * Background image should be larger than 576x567 pixels and smaller than 2048x2048 pixels pixels.
             */
            url: string;
        };
    };
    /**
     * Options for settings related to spotlight.
     */
    spotlight?: {
        /**
         * Flag to hide the menu buttons to start and stop spotlight for remote participants and the local participant.
         * @defaultValue false
         */
        hideSpotlightButtons?: boolean;
    };
    /**
     * Options for settings related to joining a call.
     */
    joinCallOptions?: {
        /**
         * options for checking microphone permissions when joining a call.
         * block on access will block the user from joining the call if the microphone permission is not granted.
         * skip will allow the user to join the call without granting the microphone permission.
         * @defaultValue 'requireMicrophoneAvailable'
         */
        microphoneCheck?: 'requireMicrophoneAvailable' | 'skip';
    };
};

/**
 * Props required for the {@link CallWithChatComposite}
 *
 * @public
 */
export declare interface CallWithChatCompositeProps extends BaseCompositeProps<CallWithChatCompositeIcons> {
    adapter: CallWithChatAdapter;
    /**
     * Fluent theme for the composite.
     *
     * Defaults to a light theme if undefined.
     */
    fluentTheme?: PartialTheme | Theme;
    /**
     * Optimizes the composite form factor for either desktop or mobile.
     * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.
     * @defaultValue 'desktop'
     */
    formFactor?: 'desktop' | 'mobile';
    /**
     * URL that can be used to copy a call-with-chat invite to the Users clipboard.
     */
    joinInvitationURL?: string;
    /**
     * Flags to enable/disable or customize UI elements of the {@link CallWithChatComposite}
     */
    options?: CallWithChatCompositeOptions;
}

/**
 * Strings used by the {@link CallWithChatComposite} directly.
 *
 * This strings are in addition to those used by the components from the component library.
 *
 * @public
 */
export declare interface CallWithChatCompositeStrings {
    /**
     * {@link CallWithChatComposite} control bar People button label
     */
    peopleButtonLabel: string;
    /**
     * {@link CallWithChatComposite} control bar People button label when checked
     */
    selectedPeopleButtonLabel: string;
    /**
     * {@link CallWithChatComposite} aria label for control bar People button when unchecked
     */
    peopleButtonTooltipOpenAriaLabel: string;
    /**
     * {@link CallWithChatComposite} aria label for control bar People button when checked
     */
    peopleButtonTooltipCloseAriaLabel: string;
    /**
     * {@link CallWithChatComposite} control bar People button ToolTipContent
     */
    peopleButtonTooltipOpen: string;
    /**
     * {@link CallWithChatComposite} control bar People button ToolTipContent
     */
    peopleButtonTooltipClose: string;
    /**
     * {@link CallWithChatComposite} control bar Chat button label.
     */
    chatButtonLabel: string;
    /**
     * {@Link CallWithChatComposite} control bar Chat button ToolTipContent.
     */
    chatButtonTooltipOpen: string;
    /**
     * {@Link CallWithChatComposite} control bar Chat button ToolTipContent.
     */
    chatButtonTooltipClose: string;
    /**
     * {@link CallWithChatComposite} control bar Chat button enhanced tooltip string.
     */
    chatButtonTooltipClosedWithMessageCount: string;
    /**
     * Title for the audio device selection sub-menu in more button drawer.
     *
     * Only used with `mobileView` set to `true` and when no speakers are available.
     */
    moreDrawerAudioDeviceMenuTitle?: string;
    /**
     * Title for the microphone selection sub-menu in more button drawer.
     *
     * Only used with `mobileView` set to `true` and when speakers are available.
     */
    moreDrawerMicrophoneMenuTitle: string;
    /**
     * Title for the speaker selection sub-menu in more button drawer.
     *
     * Only used with `mobileView` set to `true`.
     */
    moreDrawerSpeakerMenuTitle: string;
    /**
     * Title for the captions sub-menu in more button drawer.
     *
     * Only used with `mobileView` set to `true`.
     */
    moreDrawerCaptionsMenuTitle: string;
    /**
     * Title for the spoken language sub-menu in more button drawer.
     *
     * Only used with `mobileView` set to `true`.
     */
    moreDrawerSpokenLanguageMenuTitle: string;
    /**
     * Title for the caption language sub-menu in more button drawer.
     *
     * Only used with `mobileView` set to `true`.
     */
    moreDrawerCaptionLanguageMenuTitle: string;
    /**
     * Title for the gallery options sub-menu in the more button drawer.
     */
    moreDrawerGalleryOptionsMenuTitle: string;
    /**
     * {@Link CallWithChatComposite} control bar More button label
     */
    moreDrawerButtonLabel: string;
    /**
     * {@Link CallWithChatComposite} control bar More button tooltip content
     */
    moreDrawerButtonTooltip: string;
    /**
     * Side pane People section Title.
     */
    peoplePaneTitle: string;
    /**
     * Side pane People section subheader.
     */
    peoplePaneSubTitle: string;
    /**
     * Side pane Chat screen title.
     */
    chatPaneTitle: string;
    /**
     * Side pane Chat screen title in a breakout room.
     */
    breakoutRoomChatPaneTitle: string;
    /**
     * Label for spinner when chat content is loading.
     */
    chatContentSpinnerLabel: string;
    /**
     * New Message label for chat button with notification icon component.
     */
    chatButtonNewMessageNotificationLabel: string;
    /**
     * Aria label for the picture in picture in picture tile that.
     * This feature currently only shows on mobileView when the chat or people pane is expanded.
     * @remarks
     * This component displays the local and most-dominant remote participant and when clicked
     * returns the user to the call screen.
     */
    pictureInPictureTileAriaLabel: string;
    /**
     * Label for menu item to remove participant
     */
    removeMenuLabel: string;
    /**
     * Label for button to copy invite link
     */
    copyInviteLinkButtonLabel: string;
    /**
     * Label for button to copy invite link when it has been actioned
     */
    copyInviteLinkButtonActionedLabel: string;
    /**
     * Label for button to open dialpad
     */
    openDialpadButtonLabel: string;
    /**
     * Label for SidePaneHeader dismiss button
     */
    dismissSidePaneButtonLabel?: string;
    /**
     * Aria Description string for return to call button
     */
    returnToCallButtonAriaDescription?: string;
    /**
     * Aria label string for return to call back button
     */
    returnToCallButtonAriaLabel?: string;
    /**
     * Label for add people dropdown
     */
    peoplePaneAddPeopleButtonLabel: string;
    /**
     * Label for button to start a call
     */
    dialpadStartCallButtonLabel: string;
    /**
     * Title for dialpad Modal
     */
    dialpadModalTitle: string;
    /**
     * Aria Label for dialpad Modal
     */
    dialpadModalAriaLabel: string;
    /**
     * Aria Label for dialpad Modal close button
     */
    dialpadCloseModalButtonAriaLabel: string;
    /**
     * Placeholder text for dtmf dialpad
     */
    dtmfDialpadPlaceholderText: string;
    /**
     * Label for the button to open dtmf dialpad
     */
    openDtmfDialpadLabel: string;
    /**
     * aria label for when the invite link has been actioned
     */
    copyInviteLinkActionedAriaLabel: string;
}

/**
 * Customization options for the control bar in calling with chat experience.
 *
 * @public
 */
export declare interface CallWithChatControlOptions extends CommonCallControlOptions {
    /**
     * Show or hide the chat button in the call-with-chat composite control bar.
     * @defaultValue true
     */
    chatButton?: boolean | {
        disabled: boolean;
    };
}

/**
 * Events fired off by the {@link CallWithChatAdapter}.
 *
 * @public
 */
export declare type CallWithChatEvent = 'callError' | 'chatError' | 'callEnded' | 'isMutedChanged' | 'callIdChanged' | 'isLocalScreenSharingActiveChanged' | 'displayNameChanged' | 'isSpeakingChanged' | 'callParticipantsJoined' | 'callParticipantsLeft' | 'selectedMicrophoneChanged' | 'selectedSpeakerChanged' | 'isCaptionsActiveChanged' | 'captionsReceived' | 'isCaptionLanguageChanged' | 'isSpokenLanguageChanged' | 'capabilitiesChanged' | 'spotlightChanged' | 'breakoutRoomsUpdated' | 'messageReceived' | 'messageEdited' | 'messageDeleted' | 'messageSent' | 'messageRead' | 'chatParticipantsAdded' | 'chatParticipantsRemoved' | 'chatInitialized';

/**
 * A button to turn camera on / off.
 *
 * Can be used with {@link ControlBar}.
 *
 * @public
 */
export declare const CameraButton: (props: CameraButtonProps) => JSX.Element;

/**
 * Styles for the {@link CameraButton} menu.
 *
 * @public
 */
export declare interface CameraButtonContextualMenuStyles extends IContextualMenuStyles {
    /**
     * Styles for the items inside the {@link CameraButton} button menu.
     */
    menuItemStyles?: IContextualMenuItemStyles;
}

/**
 * Props for {@link CameraButton} component.
 *
 * @public
 */
export declare interface CameraButtonProps extends ControlBarButtonProps {
    /**
     * Utility property for using this component with `communication react eventHandlers`.
     * Maps directly to the `onClick` property.
     */
    onToggleCamera?: (options?: VideoStreamOptions) => Promise<void>;
    /**
     * Options for rendering local video view.
     */
    localVideoViewOptions?: VideoStreamOptions;
    /**
     * Available cameras for selection
     */
    cameras?: OptionsDevice[];
    /**
     * Camera that is shown as currently selected
     */
    selectedCamera?: OptionsDevice;
    /**
     * Callback when a camera is selected
     */
    onSelectCamera?: (device: OptionsDevice) => Promise<void>;
    /**
     * Whether to use a {@link SplitButton} with a {@link IContextualMenu} for device selection.
     *
     * default: false
     */
    enableDeviceSelectionMenu?: boolean;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<CameraButtonStrings>;
    /**
     * Styles for {@link CameraButton} and the device selection flyout.
     */
    styles?: Partial<CameraButtonStyles>;
    /**
     * Callback when a effects is clicked
     */
    onClickVideoEffects?: (showVideoEffects: boolean) => void;
}

/**
 * Selector type for {@link CameraButton} component.
 *
 * @public
 */
export declare type CameraButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    disabled: boolean;
    checked: boolean;
    cameras: VideoDeviceInfo[];
    selectedCamera?: VideoDeviceInfo;
};

/**
 * Strings of CameraButton that can be overridden.
 *
 * @public
 */
export declare interface CameraButtonStrings {
    /** Label when button is on. */
    onLabel: string;
    /** Label when button is off. */
    offLabel: string;
    /** Tooltip content when the button is disabled. */
    tooltipDisabledContent?: string;
    /** Tooltip content when the button is on. */
    tooltipOnContent?: string;
    /** Tooltip content when the button is off. */
    tooltipOffContent?: string;
    /** Tooltip content when the button is disabled due to video loading. */
    tooltipVideoLoadingContent?: string;
    /**
     * Title of camera menu
     */
    cameraMenuTitle: string;
    /**
     * Tooltip of camera menu
     */
    cameraMenuTooltip: string;
    /**
     * description of camera button split button role
     */
    cameraButtonSplitRoleDescription?: string;
    /**
     * Camera split button aria label for when button is enabled.
     */
    onSplitButtonAriaLabel?: string;
    /**
     * Camera split button aria label for when button is disabled.
     */
    offSplitButtonAriaLabel?: string;
    /**
     * Camera action turned on string for announcer
     */
    cameraActionTurnedOnAnnouncement?: string;
    /**
     * Camera action turned off string for announcer
     */
    cameraActionTurnedOffAnnouncement?: string;
    /**
     * Primary action for when the camera is turned off
     */
    offSplitButtonPrimaryActionCamera?: string;
    /**
     * Primary action for when the camera is on
     */
    onSplitButtonPrimaryActionCamera?: string;
    /**
     * Title for primary action section of split button
     */
    cameraPrimaryActionSplitButtonTitle?: string;
    /**
     * Title for video effects menu item
     */
    videoEffectsMenuItemTitle?: string;
    /**
     * Aria description for camera button
     */
    cameraButtonAriaDescription?: string;
}

/**
 * Styles for {@link CameraButton}
 *
 * @public
 */
export declare interface CameraButtonStyles extends ControlBarButtonStyles {
    /**
     * Styles for the {@link CameraButton} menu.
     */
    menuStyles?: Partial<CameraButtonContextualMenuStyles>;
}

/**
 * @public
 * Callback function run when a message edit is cancelled.
 */
export declare type CancelEditCallback = (messageId: string) => void;

/**
 * Callback for {@link CallAdapterSubscribers} 'capabilitiesChanged' event.
 *
 * @public
 */
export declare type CapabilitiesChangedListener = (data: CapabilitiesChangeInfo) => void;

/**
 * State only version of {@link @azure/communication-calling#CapabilitiesFeature}
 *
 * @public
 */
export declare interface CapabilitiesFeatureState {
    /**
     * Proxy of {@link @azure/communication-calling#CapabilitiesFeature.capabilities}.
     */
    capabilities: ParticipantCapabilities;
    /**
     * Proxy of the latest {@link @azure/communication-calling#CapabilitiesChangeInfo}
     */
    latestCapabilitiesChangeInfo: CapabilitiesChangeInfo;
}

/**
 * Strings for capability changed notification
 * @public
 */
export declare interface CapabilityChangedNotificationStrings {
    /**
     * Strings for 'turnVideoOn' capability
     */
    turnVideoOn?: {
        /**
         * Notification message shown to the user when capability to turn video on is lost due to a meeting option change
         */
        lostDueToMeetingOption?: string;
        /**
         * Notification message shown to the user when capability to turn video on is granted due to a meeting option change
         */
        grantedDueToMeetingOption?: string;
    };
    /**
     * Strings for 'unmuteMic' capability
     */
    unmuteMic?: {
        /**
         * Notification message shown to the user when capability to unmute mic is lost due to a meeting option change
         */
        lostDueToMeetingOption?: string;
        /**
         * Notification message shown to the user when capability to unmute mic is granted due to a meeting option change
         */
        grantedDueToMeetingOption?: string;
    };
    /**
     * Strings for 'shareScreen' capability
     */
    shareScreen?: {
        /**
         * Notification message shown to the user when capability to share screen is lost due to a role change to Attendeee
         */
        lostDueToRoleChangeToAttendee?: string;
        /**
         * Notification message shown to the user when capability to share screen is granted due to a role change to Presenter
         */
        grantedDueToRoleChangeToPresenter?: string;
    };
    /**
     * Strings for hidden attendee names capability
     */
    hideAttendeeNames?: {
        /**
         * Notification message shown to the user when capability to view attendee names is lost due to a meeting option change for Attendee
         */
        hideAttendeeNameAttendee?: string;
        /**
         * Notification message shown to the user when capability to view attendee names is lost due to a meeting option change for Presenter
         */
        hideAttendeeNamePresenter?: string;
    };
}

/**
 * @public
 * caption language strings for captions setting modal
 */
export declare interface CaptionLanguageStrings {
    ar: string;
    da: string;
    de: string;
    en: string;
    es: string;
    fi: string;
    fr: string;
    'fr-ca': string;
    hi: string;
    it: string;
    ja: string;
    ko: string;
    nb: string;
    nl: string;
    pl: string;
    pt: string;
    ru: string;
    sv: string;
    'zh-Hans': string;
    'zh-Hant': string;
    cs: string;
    'pt-pt': string;
    tr: string;
    vi: string;
    th: string;
    he: string;
    cy: string;
    uk: string;
    el: string;
    hu: string;
    ro: string;
    sk: string;
}

/**
 * @public
 * A component for displaying a CaptionsBanner with user icon, displayName and captions text.
 */
export declare const CaptionsBanner: (props: CaptionsBannerProps) => JSX.Element;

/**
 * @public
 * CaptionsBanner Component Props.
 */
export declare interface CaptionsBannerProps {
    /**
     * Array of captions to be displayed
     */
    captions: CaptionsInformation[];
    /**
     * Flag to indicate if captions are on
     */
    isCaptionsOn?: boolean;
    /**
     * Flag to indicate if captions are being started
     * This is used to show spinner while captions are being started
     */
    startCaptionsInProgress?: boolean;
    /**
     * Optional callback to override render of the avatar.
     *
     * @param userId - user Id
     */
    onRenderAvatar?: OnRenderAvatarCallback;
    /**
     * Optional strings for the component
     */
    strings?: CaptionsBannerStrings;
    /**
     * Optional form factor for the component.
     * @defaultValue 'default'
     */
    formFactor?: 'default' | 'compact';
    /**
     * Optional options for the component.
     */
    captionsOptions?: {
        height: 'full' | 'default';
    };
}

/**
 * Selector type for the {@link CaptionsBanner} component.
 * @public
 */
export declare type CaptionsBannerSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    captions: CaptionsInformation[];
    isCaptionsOn: boolean;
    startCaptionsInProgress: boolean;
};

/**
 * @public
 * strings for captions banner
 */
export declare interface CaptionsBannerStrings {
    /**
     * Spinner text for captions banner
     */
    captionsBannerSpinnerText?: string;
}

/**
 * @public
 */
export declare interface CaptionsCallFeatureState {
    /**
     * supported spoken languages
     */
    supportedSpokenLanguages: string[];
    /**
     * array of received captions
     */
    captions: CaptionsInfo[];
    /**
     * whether captions is on/off
     */
    isCaptionsFeatureActive: boolean;
    /**
     * whether start captions button is clicked or now
     */
    startCaptionsInProgress: boolean;
    /**
     * supported caption languages
     */
    supportedCaptionLanguages: string[];
    /**
     * current spoken language
     */
    currentSpokenLanguage: string;
    /**
     * current caption language
     */
    currentCaptionLanguage: string;
    /**
     * current caption kind: teams or acs captions
     */
    captionsKind: CaptionsKind;
}

/**
 * Selector type for components for Changing caption language and spoken language
 * @public
 */
export declare type CaptionSettingsSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    supportedCaptionLanguages: SupportedCaptionLanguage[];
    currentCaptionLanguage: SupportedCaptionLanguage;
    supportedSpokenLanguages: SupportedSpokenLanguage[];
    currentSpokenLanguage: SupportedSpokenLanguage;
    isCaptionsFeatureActive: boolean;
};

/**
 * @public
 */
export declare interface CaptionsInfo {
    /**
     * The state in which this caption data can be classified.
     */
    resultType: CaptionsResultType;
    /**
     * The information of the call participant who spoke the captioned text.
     */
    speaker: CallerInfo;
    /**
     * The language that the spoken words were interpretted as. Corresponds to the language specified in startCaptions / setSpokenLanguage.
     */
    spokenLanguage: string;
    /**
     * The caption text.
     */
    captionText: string;
    /**
     * Timestamp of when the captioned words were initially spoken.
     */
    timestamp: Date;
    /**
     * Timestamp of when the captions were last updated.
     */
    lastUpdatedTimestamp?: Date;
    /**
     * The language that the captions are presented in. Corresponds to the captionLanguage specified in startCaptions / setCaptionLanguage.
     */
    captionLanguage?: string;
    /**
     * The original spoken caption text prior to translating to subtitle language
     */
    spokenText?: string;
}

/**
 * @public
 * information required for each line of caption
 */
export declare type CaptionsInformation = {
    /**
     * unique id for each caption
     */
    id: string;
    /**
     * speaker's display name
     */
    displayName: string;
    /**
     * content of the caption
     */
    captionText: string;
    /**
     * id of the speaker
     */
    userId?: string;
};

/**
 * options bag to start captions
 *
 * @public
 */
export declare type CaptionsOptions = {
    spokenLanguage: string;
};

/**
 * Callback for {@link CallAdapterSubscribers} 'captionsReceived' event.
 *
 * @public
 */
export declare type CaptionsReceivedListener = (event: {
    captionsInfo: CaptionsInfo;
}) => void;

/**
 * @public
 * a component for setting spoken languages
 */
export declare const CaptionsSettingsModal: (props: CaptionsSettingsModalProps) => JSX.Element;

/**
 * @public
 * CaptionsSettingsModal Component Props.
 */
export declare interface CaptionsSettingsModalProps {
    /**
     * List of supported spoken languages
     */
    supportedSpokenLanguages: SupportedSpokenLanguage[];
    /**
     * List of supported caption languages
     */
    supportedCaptionLanguages?: SupportedCaptionLanguage[];
    /**
     * Callback to set spoken language
     */
    onSetSpokenLanguage: (language: SupportedSpokenLanguage) => Promise<void>;
    /**
     * Callback to set caption language
     */
    onSetCaptionLanguage?: (language: SupportedCaptionLanguage) => Promise<void>;
    /**
     * Callback to start captions
     */
    onStartCaptions: (options?: CaptionsOptions) => Promise<void>;
    /**
     * Current spoken language
     */
    currentSpokenLanguage: SupportedSpokenLanguage;
    /**
     * Current caption language
     */
    currentCaptionLanguage?: SupportedCaptionLanguage;
    /**
     * 1 to 1 mapping between language code and language string for spoken languages
     */
    spokenLanguageStrings?: SpokenLanguageStrings;
    /**
     * 1 to 1 mapping between language code and language string for caption languages
     */
    captionLanguageStrings?: CaptionLanguageStrings;
    /**
     * Flag to indicate if captions feature is active
     */
    isCaptionsFeatureActive?: boolean;
    /**
     * Strings for the captions settings modal
     */
    strings?: CaptionsSettingsModalStrings;
    /**
     * Flag to show the modal
     */
    showModal?: boolean;
    /**
     * Callback that is triggered when the modal is dismissed
     */
    onDismissCaptionsSettings?: () => void;
    /**
     * Flag to show the caption language dropdown
     */
    changeCaptionLanguage?: boolean;
}

/**
 * @public
 * strings for captions setting modal
 */
export declare interface CaptionsSettingsModalStrings {
    /**
     * Title for the modal
     */
    captionsSettingsModalTitle?: string;
    /**
     * Label for the spoken language dropdown menu
     */
    captionsSettingsSpokenLanguageDropdownLabel?: string;
    /**
     * Label for the caption language dropdown menu
     */
    captionsSettingsCaptionLanguageDropdownLabel?: string;
    /**
     * Disclaimer for the spoken language dropdown menu
     */
    captionsSettingsSpokenLanguageDropdownInfoText?: string;
    /**
     * Disclaimer for the caption language dropdown menu
     */
    captionsSettingsCaptionLanguageDropdownInfoText?: string;
    /**
     * Label for the confirm button
     */
    captionsSettingsConfirmButtonLabel?: string;
    /**
     * Label for the cancel button
     */
    captionsSettingsCancelButtonLabel?: string;
    /**
     * Aria label for the modal
     */
    captionsSettingsModalAriaLabel?: string;
    /**
     * Aria label for the close modal button
     */
    captionsSettingsCloseModalButtonAriaLabel?: string;
}

/**
 * {@link ChatComposite} Adapter interface.
 *
 * @public
 */
export declare type ChatAdapter = ChatAdapterThreadManagement & AdapterState<ChatAdapterState> & Disposable_2 & ChatAdapterSubscribers;

/**
 * {@link ChatAdapter} state.
 *
 * @public
 */
export declare type ChatAdapterState = ChatAdapterUiState & ChatCompositeClientState;

/**
 * Chat composite events that can be subscribed to.
 *
 * @public
 */
export declare interface ChatAdapterSubscribers {
    /**
     * Subscribe function for 'messageReceived' event.
     */
    on(event: 'messageReceived', listener: MessageReceivedListener): void;
    /**
     * Subscribe function for 'messageEdited' event.
     */
    on(event: 'messageEdited', listener: MessageEditedListener): void;
    /**
     * Subscribe function for 'messageDeleted' event.
     */
    on(event: 'messageDeleted', listener: MessageDeletedListener): void;
    /**
     * Subscribe function for 'messageSent' event.
     */
    on(event: 'messageSent', listener: MessageSentListener): void;
    /**
     * Subscribe function for 'messageRead' event.
     */
    on(event: 'messageRead', listener: MessageReadListener): void;
    /**
     * Subscribe function for 'participantsAdded' event.
     */
    on(event: 'participantsAdded', listener: ParticipantsAddedListener): void;
    /**
     * Subscribe function for 'participantsRemoved' event.
     */
    on(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;
    /**
     * Subscribe function for 'topicChanged' event.
     */
    on(event: 'topicChanged', listener: TopicChangedListener): void;
    /**
     * Subscribe function for 'error' event.
     */
    on(event: 'error', listener: (e: AdapterError) => void): void;
    /**
     * Unsubscribe function for 'messageReceived' event.
     */
    off(event: 'messageReceived', listener: MessageReceivedListener): void;
    /**
     * Unsubscribe function for 'messageEdited' event.
     */
    off(event: 'messageEdited', listener: MessageEditedListener): void;
    /**
     * Unsubscribe function for 'messageDeleted' event.
     */
    off(event: 'messageDeleted', listener: MessageDeletedListener): void;
    /**
     * Unsubscribe function for 'messageSent' event.
     */
    off(event: 'messageSent', listener: MessageSentListener): void;
    /**
     * Unsubscribe function for 'messageRead' event.
     */
    off(event: 'messageRead', listener: MessageReadListener): void;
    /**
     * Unsubscribe function for 'participantsAdded' event.
     */
    off(event: 'participantsAdded', listener: ParticipantsAddedListener): void;
    /**
     * Unsubscribe function for 'participantsRemoved' event.
     */
    off(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;
    /**
     * Unsubscribe function for 'topicChanged' event.
     */
    off(event: 'topicChanged', listener: TopicChangedListener): void;
    /**
     * Unsubscribe function for 'error' event.
     */
    off(event: 'error', listener: (e: AdapterError) => void): void;
}

/**
 * Functionality for managing the current chat thread.
 *
 * @public
 */
export declare interface ChatAdapterThreadManagement {
    /**
     * Fetch initial state for the Chat adapter.
     *
     * Performs the minimal fetch necessary for ChatComposite and API methods.
     */
    fetchInitialData(): Promise<void>;
    /**
     * Send a message in the thread.
     * Please note that SendMessageOptions is being deprecated, please use MessageOptions instead.
     */
    sendMessage(content: string, options?: SendMessageOptions): Promise<void>;
    /**
     * Send a read receipt for a message.
     */
    sendReadReceipt(chatMessageId: string): Promise<void>;
    /**
     * Send typing indicator in the thread.
     */
    sendTypingIndicator(): Promise<void>;
    /**
     * Remove a participant in the thread.
     */
    removeParticipant(userId: string): Promise<void>;
    /**
     * Set the topic for the thread.
     */
    setTopic(topicName: string): Promise<void>;
    /**
     * Update a message content.
     * Please note that metadata is being deprecated, please use MessageOptions.metadata instead.
     */
    updateMessage(messageId: string, content: string, options?: Record<string, string>): Promise<void>;
    /**
     * Delete a message in the thread.
     */
    deleteMessage(messageId: string): Promise<void>;
    /**
     * Load more previous messages in the chat thread history.
     *
     * @remarks
     * This method is usually used to control incremental fetch/infinite scroll
     *
     */
    loadPreviousChatMessages(messagesToLoad: number): Promise<boolean>;
    /**
     * Downloads a resource into the cache for the given message.
     */
    downloadResourceToCache(resourceDetails: ResourceDetails): Promise<void>;
    /**
     * Removes a resource from the cache for the given message.
     */
    removeResourceFromCache(resourceDetails: ResourceDetails): void;
}

/**
 * {@link ChatAdapter} state for pure UI purposes.
 *
 * @public
 */
export declare type ChatAdapterUiState = {
    error?: Error;
};

/**
 * Represents the type of attachment
 * @public
 */
export declare type ChatAttachmentType = 'unknown' | 'image' | 'file';

/**
 * Common props for selectors for {@link ChatClientState}.
 *
 * @public
 */
export declare type ChatBaseSelectorProps = {
    threadId: string;
};

/**
 * A {@link React.Context} that stores a {@link StatefulChatClient}.
 *
 * Chat components from this package must be wrapped with a {@link ChatClientProvider}.
 *
 * @public
 */
export declare const ChatClientProvider: (props: ChatClientProviderProps) => JSX.Element;

/**
 * Arguments to initialize a {@link ChatClientProvider}.
 *
 * @public
 */
export declare type ChatClientProviderProps = {
    children: React_2.ReactNode;
    chatClient: StatefulChatClient;
};

/**
 * Centralized state for {@link @azure/communication-chat#ChatClient}.
 *
 * @public
 */
export declare type ChatClientState = {
    /**
     * Identifier of the current user.
     */
    userId: CommunicationIdentifierKind;
    /**
     * DisplayName of the current user.
     * The same value as what others see in {@link @azure/communication-chat#ChatParticipant.displayName}
     */
    displayName: string;
    /**
     * Chat threads joined by the current user.
     * Object with {@link ChatThreadClientState} fields, keyed by {@link ChatThreadClientState.threadId}.
     */
    threads: {
        [key: string]: ChatThreadClientState;
    };
    /**
     * Stores the latest error for each API method.
     *
     * See documentation of {@link ChatErrors} for details.
     */
    latestErrors: ChatErrors;
};

/**
 * A customizable UI composite for the chat experience.
 *
 * @remarks Chat composite min width and height are respectively 17.5rem and 20rem (280px and 320px, with default rem at 16px)
 *
 * @public
 */
export declare const ChatComposite: (props: ChatCompositeProps) => JSX.Element;

/**
 * {@link ChatAdapter} state inferred from Azure Communication Services backend.
 *
 * @public
 */
export declare type ChatCompositeClientState = {
    userId: CommunicationIdentifierKind;
    displayName: string;
    thread: ChatThreadClientState;
    /**
     * Latest error encountered for each operation performed via the adapter.
     */
    latestErrors: AdapterErrors;
};

/**
 * Icons that can be overridden for {@link ChatComposite}.
 *
 * @public
 */
export declare type ChatCompositeIcons = {
    EditBoxCancel?: JSX.Element;
    EditBoxSubmit?: JSX.Element;
    MessageDelivered?: JSX.Element;
    MessageEdit?: JSX.Element;
    MessageFailed?: JSX.Element;
    MessageRemove?: JSX.Element;
    MessageSeen?: JSX.Element;
    MessageSending?: JSX.Element;
    ParticipantItemOptions?: JSX.Element;
    ParticipantItemOptionsHovered?: JSX.Element;
    SendBoxSend?: JSX.Element;
    SendBoxSendHovered?: JSX.Element;
};

/**
 * Props for the ChatComposite that you can use in your application. Contains the
 * options for the {@link ChatComposite} {@link ChatCompositeOptions}.
 * @public
 */
export declare type ChatCompositeLoaderProps = {
    userId: CommunicationUserIdentifier;
    credential: CommunicationTokenCredential;
    displayName?: string;
    endpoint: string;
    threadId: string;
    chatCompositeOptions?: ChatCompositeOptions;
};

/**
 * Optional features of the {@link ChatComposite}.
 *
 * @public
 */
export declare type ChatCompositeOptions = {
    /**
     * Surface Azure Communication Services backend errors in the UI with {@link @azure/communication-react#ErrorBar}.
     * Hide or show the error bar.
     * @defaultValue true
     */
    errorBar?: boolean;
    /**
     * Show or hide the topic at the top of the chat. Hidden if set to `false`
     * @defaultValue true
     */
    topic?: boolean;
    /**
     * enumerable to determine if the input box has focus on render or not.
     * When undefined nothing has focus on render
     */
    autoFocus?: 'sendBoxTextField';
};

/**
 * Props for {@link ChatComposite}.
 *
 * @public
 */
export declare interface ChatCompositeProps extends BaseCompositeProps<ChatCompositeIcons> {
    /**
     * An adapter provides logic and data to the composite.
     * Composite can also be controlled using the adapter.
     */
    adapter: ChatAdapter;
    /**
     * `(messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element`
     * A callback for customizing the message renderer.
     */
    onRenderMessage?: (messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element;
    /**
     * `(typingUsers: CommunicationParticipant[]) => JSX.Element`
     * A callback for customizing the typing indicator renderer.
     */
    onRenderTypingIndicator?: (typingUsers: CommunicationParticipant[]) => JSX.Element;
    /**
     * Flags to enable/disable visual elements of the {@link ChatComposite}.
     */
    options?: ChatCompositeOptions;
}

/**
 * Strings used by the {@link ChatComposite} directly.
 *
 * This strings are in addition to those used by the components from the component library.
 *
 * @public
 */
export declare interface ChatCompositeStrings {
    /**
     * Chat list header text
     */
    chatListHeader: string;
}

/**
 * Error thrown from failed {@link StatefulChatClient} methods.
 *
 * @public
 */
export declare class ChatError extends Error {
    /**
     * The API method target that failed.
     */
    target: ChatErrorTarget;
    /**
     * Error thrown by the failed SDK method.
     */
    innerError: Error;
    /**
     * Timestamp added to the error by the stateful layer.
     */
    timestamp: Date;
    constructor(target: ChatErrorTarget, innerError: Error, timestamp?: Date);
}

/**
 * Selector type for {@link ErrorBar} component.
 *
 * @public
 */
export declare type ChatErrorBarSelector = (state: ChatClientState, props: ChatBaseSelectorProps) => {
    activeErrorMessages: ActiveErrorMessage[];
};

/**
 * Errors teed from API calls to the Chat SDK.
 *
 * Each property in the object stores the latest error for a particular SDK API method.
 *
 * @public
 */
export declare type ChatErrors = {
    [target in ChatErrorTarget]: ChatError;
};

/**
 * String literal type for all permissible keys in {@link ChatErrors}.
 *
 * @public
 */
export declare type ChatErrorTarget = 'ChatClient.createChatThread' | 'ChatClient.deleteChatThread' | 'ChatClient.getChatThreadClient' | 'ChatClient.listChatThreads' | 'ChatClient.off' | 'ChatClient.on' | 'ChatClient.startRealtimeNotifications' | 'ChatClient.stopRealtimeNotifications' | 'ChatThreadClient.addParticipants' | 'ChatThreadClient.deleteMessage' | 'ChatThreadClient.getMessage' | 'ChatThreadClient.getProperties' | 'ChatThreadClient.listMessages' | 'ChatThreadClient.listParticipants' | 'ChatThreadClient.listReadReceipts' | 'ChatThreadClient.removeParticipant' | 'ChatThreadClient.sendMessage' | 'ChatThreadClient.sendReadReceipt' | 'ChatThreadClient.sendTypingNotification' | 'ChatThreadClient.updateMessage' | 'ChatThreadClient.updateTopic';

/**
 * Object containing all the handlers required for chat components.
 *
 * Chat related components from this package are able to pick out relevant handlers from this object.
 * See {@link useHandlers} and {@link usePropsFor}.
 *
 * @public
 */
export declare type ChatHandlers = {
    onSendMessage: (content: string, options?: SendMessageOptions) => Promise<void>;
    onMessageSeen: (chatMessageId: string) => Promise<void>;
    onTyping: () => Promise<void>;
    onRemoveParticipant: (userId: string) => Promise<void>;
    updateThreadTopicName: (topicName: string) => Promise<void>;
    onLoadPreviousChatMessages: (messagesToLoad: number) => Promise<boolean>;
    onUpdateMessage: (messageId: string, content: string) => Promise<void>;
    onDeleteMessage: (messageId: string) => Promise<void>;
};

/**
 * Callback for {@link CallWithChatAdapterSubscribers} 'chatInitialized' event.
 *
 * @public
 */
export declare type ChatInitializedListener = (event: {
    adapter: CallWithChatAdapter;
}) => void;

/**
 * A chat message.
 *
 * @public
 */
export declare interface ChatMessage extends MessageCommon {
    messageType: 'chat';
    content?: string;
    editedOn?: Date;
    deletedOn?: Date;
    senderId?: string;
    senderDisplayName?: string;
    status?: MessageStatus;
    failureReason?: string;
    attached?: MessageAttachedStatus;
    mine?: boolean;
    clientMessageId?: string;
    contentType: MessageContentType;
    /**
     * A metadata field for the message.
     * {@link @azure/communication-chat#ChatMessage.metadata}
     */
    metadata?: Record<string, string>;
    /**
     * A list of attachments in the message.
     * {@link AttachmentMetadata}
     */
    attachments?: AttachmentMetadata[];
}

/**
 * An extension to {@link @azure/communication-chat#ChatMessage} that stores
 * client-side only metadata for chat messages.
 *
 * TODO: The name has bitrotted. Rename me.
 *
 * @public
 */
export declare type ChatMessageWithStatus = ChatMessage_2 & {
    clientMessageId?: string;
    status: MessageStatus;
    resourceCache?: Record<string, ResourceFetchResult>;
};

/**
 * Selector type for {@link ParticipantList} component.
 *
 * @public
 */
export declare type ChatParticipantListSelector = (state: ChatClientState, props: ChatBaseSelectorProps) => {
    myUserId: string;
    participants: ParticipantListParticipant[];
};

/**
 * Helper type for {@link usePropsFor}.
 *
 * @public
 */
export declare type ChatReturnProps<Component extends (props: any) => JSX.Element> = GetChatSelector<Component> extends ((state: ChatClientState, props: any) => any) ? ReturnType<GetChatSelector<Component>> & Common<ChatHandlers, Parameters<Component>[0]> : never;

/**
 * A {@link React.Context} that stores a {@link @azure/communication-chat#ChatThreadClient}.
 *
 * Chat components from this package must be wrapped with a {@link ChatThreadClientProvider}.
 *
 * @public
 */
export declare const ChatThreadClientProvider: (props: ChatThreadClientProviderProps) => JSX.Element;

/**
 * Arguments to initialize a {@link ChatThreadClientProvider}.
 *
 * @public
 */
export declare type ChatThreadClientProviderProps = {
    children: React_2.ReactNode;
    chatThreadClient: ChatThreadClient;
};

/**
 * Centralized state for {@link @azure/communication-chat#ChatThreadClient}.
 *
 * @public
 */
export declare type ChatThreadClientState = {
    /**
     * Messages in this thread.
     * Object with {@link ChatMessageWithStatus} entries
     * Local messages are keyed by keyed by {@link ChatMessageWithStatus.clientMessageId}.
     * Remote messages are keyed by {@link @azure/communication-chat#ChatMessage.id}.
     */
    chatMessages: {
        [key: string]: ChatMessageWithStatus;
    };
    /**
     * Participants of this chat thread.
     *
     * Object with {@link @azure/communication-chat#ChatParticipant} fields,
     * keyed by {@link @azure/communication-chat#ChatParticipant.id}.
     */
    participants: {
        [key: string]: ChatParticipant;
    };
    /**
     * Id of this chat thread. Returned from {@link @azure/communication-chat#ChatThreadClient.threadId}
     */
    threadId: string;
    /**
     * An object containing properties of this chat thread.
     */
    properties?: ChatThreadProperties;
    /**
     * An array of ReadReceipts of this chat thread. Returned from {@link @azure/communication-chat#ChatThreadClient.listReadReceipts}
     */
    readReceipts: ChatMessageReadReceipt[];
    /**
     * An array of typingIndicators of this chat thread. Captured from event listener of {@link @azure/communication-chat#ChatClient}
     * Stateful client only stores recent 8000ms real-time typing indicators data.
     */
    typingIndicators: TypingIndicatorReceivedEvent[];
    /**
     * Latest timestamp when other users read messages sent by current user.
     */
    latestReadTime: Date;
};

/**
 * Properties of a chat thread.
 *
 * We define a minimal one that helps us hide the different types used by underlying API.
 *
 * @public
 */
export declare type ChatThreadProperties = {
    topic?: string;
};

/**
 * Centralized state for {@link @azure/communication-calling#CallClient} or {@link @azure/communication-chat#ChatClient}.
 *
 * See also: {@link CallClientState}, {@link ChatClientState}.
 * @public
 */
export declare type ClientState = CallClientState & ChatClientState;

/**
 * Return intersect type of 2 types
 *
 * @public
 */
export declare type Common<A, B> = Pick<A, CommonProperties<A, B>>;

/**
 * {@link CallComposite} Adapter interface.
 *
 * @public
 */
export declare interface CommonCallAdapter extends AdapterState<CallAdapterState>, Disposable_2, CallAdapterCallOperations, CallAdapterDeviceManagement, CallAdapterSubscribers {
    /**
     * Join the call with microphone initially on/off.
     * @deprecated Use joinCall(options?:JoinCallOptions) instead.
     * @param microphoneOn - Whether microphone is initially enabled
     *
     * @public
     */
    joinCall(microphoneOn?: boolean): void;
    /**
     * Join the call with options bag to set microphone/camera initial state when joining call
     * true = turn on the device when joining call
     * false = turn off the device when joining call
     * 'keep'/undefined = retain devices' precall state
     *
     * @param options - param to set microphone/camera initially on/off/use precall state.
     *
     * @public
     */
    joinCall(options?: JoinCallOptions): void;
    /**
     * Start the call.
     *
     * @param participants - An array of participant ids to join
     *
     * @public
     */
    startCall(participants: string[], options?: StartCallOptions): void;
    /**
     * Start the call.
     * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called
     * @public
     */
    startCall(participants: StartCallIdentifier[], options?: StartCallOptions): void;
}

/**
 * Common optional parameters to create {@link AzureCommunicationCallAdapter} or {@link TeamsCallAdapter}
 *
 * @public
 */
export declare type CommonCallAdapterOptions = {
    /**
     * Default set of background images for background image picker.
     */
    videoBackgroundOptions?: {
        videoBackgroundImages?: VideoBackgroundImage[];
        onResolveDependency?: () => Promise<VideoBackgroundEffectsDependency>;
    };
    /**
     * `DeepNoiseSuppressionEffect` options to be used for noise suppression.
     */
    deepNoiseSuppressionOptions?: {
        onResolveDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;
        deepNoiseSuppressionOnByDefault?: boolean;
        hideDeepNoiseSuppressionButton?: boolean;
    };
    /**
     * Use this to fetch profile information which will override data in {@link CallAdapterState} like display name
     * The onFetchProfile is fetch-and-forget one time action for each user, once a user profile is updated, the value will be cached
     * and would not be updated again within the lifecycle of adapter.
     */
    onFetchProfile?: OnFetchProfileCallback;
    /**
     * Sounds to use for calling events
     */
    callingSounds?: CallingSounds;
    /**
     * Reaction resource for reaction resources
     * @beta
     */
    reactionResources?: ReactionResources;
    /**
     * A phone number in E.164 format procured using Azure Communication Services that will be used to represent callers identity.
     * E.164 numbers are formatted as [+] [country code] [phone number including area code]. For example, +14255550123 for a US phone number.
     */
    alternateCallerId?: string;
};

/**
 * Customization options for the control bar in calling experience.
 *
 * @public
 */
export declare type CommonCallControlOptions = {
    /**
     * {@link CallControlDisplayType} to change how the call controls are displayed.
     * `'compact'` display type will decreases the size of buttons and hide the labels.
     *
     * @remarks
     * If the composite `formFactor` is set to `'mobile'`, the control bar will always use compact view.
     *
     * @defaultValue 'default'
     */
    displayType?: CallControlDisplayType;
    /**
     * Show or Hide Camera Button during a call
     * @defaultValue true
     */
    cameraButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show or Hide EndCall button during a call.
     * @defaultValue true
     */
    endCallButton?: boolean | {
        /**
         * whether to make end call button to trigger a menu, which will enable end call for everybody functionality.
         * @defaultValue false
         */
        hangUpForEveryone?: false | 'endCallOptions';
        /**
         * Wether to disable the end call confirmation modal.
         */
        disableEndCallModal?: boolean;
    };
    /**
     * Show or Hide Microphone button during a call.
     * @defaultValue true
     */
    microphoneButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show or Hide Devices button during a call.
     * @defaultValue true
     */
    devicesButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show, Hide or Disable participants button during a call.
     * @defaultValue true
     */
    participantsButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show, Hide or Disable the screen share button during a call.
     * @defaultValue true
     */
    screenShareButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show, Hide or disable the more button during a call.
     * @defaultValue true
     */
    moreButton?: boolean;
    /**
     * Show, Hide or Disable the screen share button during a call.
     * @defaultValue true
     */
    raiseHandButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show, Hide or Disable the reaction button during a call.
     * @defaultValue true
     */
    reactionButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Inject custom buttons in the call controls.
     */
    onFetchCustomButtonProps?: CustomCallControlButtonCallback[];
    holdButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show or hide the people button in the composite control bar.
     * @defaultValue true
     */
    peopleButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show or hide the dialpad button in the composite control bar.
     */
    dtmfDialerButton?: boolean | {
        disabled: boolean;
    };
    /**
     * Show or hide the exit spotlight button in the composite control bar when local participant is spotlighted.
     */
    exitSpotlightButton?: boolean;
    /**
     * Show, Hide or Disable captions during a call.
     * @defaultValue true
     */
    captionsButton?: boolean;
    /**
     * Show, Hide or Disable gallery controls button during a call.
     * @defaultValue true
     */
    galleryControlsButton?: boolean;
    /**
     * Show, meeting conference phone information.
     * @defaultValue true
     */
    teamsMeetingPhoneCallButton?: boolean;
};

/**
 * Object containing all the handlers required for calling components.
 *
 * Calling related components from this package are able to pick out relevant handlers from this object.
 * See {@link useHandlers} and {@link usePropsFor}.
 *
 * @public
 */
export declare interface CommonCallingHandlers {
    onStartLocalVideo: () => Promise<void>;
    onToggleCamera: (options?: VideoStreamOptions) => Promise<void>;
    onSelectMicrophone: (device: AudioDeviceInfo) => Promise<void>;
    onSelectSpeaker: (device: AudioDeviceInfo) => Promise<void>;
    onSelectCamera: (device: VideoDeviceInfo, options?: VideoStreamOptions) => Promise<void>;
    onToggleMicrophone: () => Promise<void>;
    onStartScreenShare: () => Promise<void>;
    onStopScreenShare: () => Promise<void>;
    onToggleScreenShare: () => Promise<void>;
    onHangUp: (forEveryone?: boolean) => Promise<void>;
    onRaiseHand: () => Promise<void>;
    onLowerHand: () => Promise<void>;
    onToggleRaiseHand: () => Promise<void>;
    onReactionClick: (reaction: Reaction_2) => Promise<void>;
    onToggleHold: () => Promise<void>;
    onAddParticipant(participant: CommunicationUserIdentifier): Promise<void>;
    onAddParticipant(participant: PhoneNumberIdentifier, options: AddPhoneNumberOptions): Promise<void>;
    onCreateLocalStreamView: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
    onCreateRemoteStreamView: (userId: string, options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
    /**
     * @deprecated use {@link onDisposeRemoteVideoStreamView} and {@link onDisposeRemoteScreenShareStreamView} instead.
     */
    onDisposeRemoteStreamView: (userId: string) => Promise<void>;
    onDisposeLocalStreamView: () => Promise<void>;
    onDisposeRemoteVideoStreamView: (userId: string) => Promise<void>;
    onDisposeRemoteScreenShareStreamView: (userId: string) => Promise<void>;
    onDisposeLocalScreenShareStreamView: () => Promise<void>;
    onSendDtmfTone: (dtmfTone: DtmfTone_2) => Promise<void>;
    onRemoveParticipant(userId: string): Promise<void>;
    onRemoveParticipant(participant: CommunicationIdentifier): Promise<void>;
    onStartCall: (participants: CommunicationIdentifier[], options?: StartCallOptions) => void;
    onAcceptCall: (incomingCallId: string, useVideo?: boolean) => Promise<void>;
    onRejectCall: (incomingCallId: string) => Promise<void>;
    onRemoveVideoBackgroundEffects: () => Promise<void>;
    onBlurVideoBackground: (backgroundBlurConfig?: BackgroundBlurConfig) => Promise<void>;
    onReplaceVideoBackground: (backgroundReplacementConfig: BackgroundReplacementConfig) => Promise<void>;
    onStartNoiseSuppressionEffect: () => Promise<void>;
    onStopNoiseSuppressionEffect: () => Promise<void>;
    onStartCaptions: (options?: CaptionsOptions) => Promise<void>;
    onStopCaptions: () => Promise<void>;
    onSetSpokenLanguage: (language: string) => Promise<void>;
    onSetCaptionLanguage: (language: string) => Promise<void>;
    onSubmitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined>;
    onStartSpotlight: (userIds?: string[]) => Promise<void>;
    onStopSpotlight: (userIds?: string[]) => Promise<void>;
    onStopAllSpotlight: () => Promise<void>;
    onMuteParticipant: (userId: string) => Promise<void>;
    onMuteAllRemoteParticipants: () => Promise<void>;
    /**
     * Forbid remote participants from sending audio
     *
     */
    onForbidAudio?: (userIds: string[]) => Promise<void>;
    /**
     * Permit remote participants to send audio
     *
     */
    onPermitAudio?: (userIds: string[]) => Promise<void>;
    /**
     * Change meeting option forbid remote participants from sending audio
     *
     */
    onForbidOthersAudio?: () => Promise<void>;
    /**
     * Change meeting option permit remote participants to send audio
     *
     */
    onPermitOthersAudio?: () => Promise<void>;
    /**
     * Forbid remote participants from sending video
     *
     */
    onForbidVideo?: (userIds: string[]) => Promise<void>;
    /**
     * Permit remote participants to send video
     *
     */
    onPermitVideo?: (userIds: string[]) => Promise<void>;
    /**
     * Change meeting option forbid remote participants from sending video
     *
     */
    onForbidOthersVideo?: () => Promise<void>;
    /**
     * Change meeting option permit remote participants to send video
     *
     */
    onPermitOthersVideo?: () => Promise<void>;
}

/**
 * Return intersect properties of 2 types
 *
 * @public
 */
export declare type CommonProperties<A, B> = {
    [P in keyof A & keyof B]: A[P] extends B[P] ? P : never;
}[keyof A & keyof B];

/**
 * A Chat or Calling participant's state, as reflected in the UI.
 *
 * @public
 */
export declare type CommunicationParticipant = {
    /** User ID of participant */
    userId: string;
    /** Display name of participant */
    displayName?: string;
};

/**
 * Locale for Arabic (Saudi Arabia).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_AR_SA: ComponentLocale;

/**
 * Locale for Czech (Czech Republic).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_CS_CZ: ComponentLocale;

/**
 * Locale for Welsh (GB).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_CY_GB: ComponentLocale;

/**
 * Locale for German (Germany).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_DE_DE: ComponentLocale;

/**
 * Locale for English (GB).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_EN_GB: ComponentLocale;

/**
 * Locale for English (US).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_EN_US: ComponentLocale;

/**
 * Locale for Spanish (Spain).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_ES_ES: ComponentLocale;

/**
 * Locale for Spanish (Mexico).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_ES_MX: ComponentLocale;

/**
 * Locale for Finnish (Finland).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_FI_FI: ComponentLocale;

/**
 * Locale for French (Canada).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_FR_CA: ComponentLocale;

/**
 * Locale for French (France).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_FR_FR: ComponentLocale;

/**
 * Locale for Hebrew (Israel).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_HE_IL: ComponentLocale;

/**
 * Locale for Italian (Italy).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_IT_IT: ComponentLocale;

/**
 * Locale for Japanese (Japan).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_JA_JP: ComponentLocale;

/**
 * Locale for Korean (South Korea).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_KO_KR: ComponentLocale;

/**
 * Locale for Norwegian Bokmål (Norway) .
 *
 * @public
 */
export declare const COMPONENT_LOCALE_NB_NO: ComponentLocale;

/**
 * Locale for Dutch (Netherlands).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_NL_NL: ComponentLocale;

/**
 * Locale for Polish (Poland).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_PL_PL: ComponentLocale;

/**
 * Locale for Portuguese (Brazil).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_PT_BR: ComponentLocale;

/**
 * Locale for Russian (Russia).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_RU_RU: ComponentLocale;

/**
 * Locale for Swedish (Sweden) .
 *
 * @public
 */
export declare const COMPONENT_LOCALE_SV_SE: ComponentLocale;

/**
 * Locale for Turkish (Turkey).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_TR_TR: ComponentLocale;

/**
 * Locale for Chinese (Mainland China).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_ZH_CN: ComponentLocale;

/**
 * Locale for Chinese (Taiwan).
 *
 * @public
 */
export declare const COMPONENT_LOCALE_ZH_TW: ComponentLocale;

/**
 * Icons used by the React components exported from this library.
 *
 * @remark See {@link CompositeIcons} for icons used by composites only.
 *
 * @public
 */
export declare type ComponentIcons = Record<keyof typeof DEFAULT_COMPONENT_ICONS, JSX.Element>;

/**
 * Locale information for all components exported from this library.
 *
 * @public
 */
export declare interface ComponentLocale {
    /** Strings for components */
    strings: ComponentStrings;
}

/**
 * Helper type for {@link usePropsFor}.
 *
 * @public
 */
export declare type ComponentProps<Component extends (props: any) => JSX.Element> = ChatReturnProps<Component> extends never ? CallingReturnProps<Component> extends never ? undefined : CallingReturnProps<Component> : ChatReturnProps<Component>;

/**
 * ComponentSlotStyle is a \@fluentui/react-northstar type.
 * As we have moved away from this package we have used the more generic IRawStyle type from fluent for interoperability.
 *
 * @public
 */
export declare type ComponentSlotStyle = Omit<IRawStyle, 'animation'>;

/**
 * Strings used by all components exported from this library.
 *
 * @public
 */
export declare interface ComponentStrings {
    /** Strings for MessageThread */
    messageThread: MessageThreadStrings;
    /** Strings for ParticipantItem */
    participantItem: ParticipantItemStrings;
    /** Strings for CameraButton */
    cameraButton: CameraButtonStrings;
    /** Strings for MicrophoneButton */
    microphoneButton: MicrophoneButtonStrings;
    /** Strings for EndCallButton */
    endCallButton: EndCallButtonStrings;
    /** Strings for DevicesButton */
    devicesButton: DevicesButtonStrings;
    /** Strings for ParticipantsButton */
    participantsButton: ParticipantsButtonStrings;
    /** Strings for ScreenShareButton */
    screenShareButton: ScreenShareButtonStrings;
    /** Strings for RaiseHandButton */
    raiseHandButton: RaiseHandButtonStrings;
    /**
     * Strings for ReactionButton
     * */
    reactionButton: ReactionButtonStrings;
    /** Strings for TypingIndicator */
    typingIndicator: TypingIndicatorStrings;
    /** Strings for SendBox */
    sendBox: SendBoxStrings;
    /** Strings for ImageOverlay */
    imageOverlay: ImageOverlayStrings;
    /** Strings for MessageStatusIndicator */
    messageStatusIndicator: MessageStatusIndicatorStrings;
    /** Strings for ErrorBar */
    errorBar: ErrorBarStrings;
    /** Strings for NotificationStack */
    notificationStack: NotificationStackStrings;
    /** Strings for VideoGallery */
    videoGallery: VideoGalleryStrings;
    /** Strings for Dialpad */
    dialpad: DialpadStrings;
    /** Strings for VideoTile */
    videoTile: VideoTileStrings;
    /** Strings for HoldButton */
    holdButton: HoldButtonStrings;
    /**
     * Strings for the VerticalGallery.
     */
    verticalGallery: VerticalGalleryStrings;
    /** Strings for the MeetingConferencePhoneInfoModal */
    meetingConferencePhoneInfo: MeetingConferencePhoneInfoModalStrings;
    IncomingCallNotification: IncomingCallNotificationStrings;
    /** Strings for Captions Setting Modal */
    captionsSettingsModal: CaptionsSettingsModalStrings;
    /**
     * 1 to 1 mapping between language code and language string for spoken languages
     */
    spokenLanguages: SpokenLanguageStrings;
    /**
     * 1 to 1 mapping between language code and language string for caption languages
     */
    captionLanguages: CaptionLanguageStrings;
    /** Strings for CaptionsBanner */
    captionsBanner: CaptionsBannerStrings;
    /** Strings for Start Captions Button */
    startCaptionsButton: StartCaptionsButtonStrings;
}

/**
 * Locale for Arabic (Saudi Arabia)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_AR_SA: CompositeLocale;

/**
 * Locale for Czech (Czech Republic)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_CS_CZ: CompositeLocale;

/**
 * Locale for Welsh (GB)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_CY_GB: CompositeLocale;

/**
 * Locale for German (Germany)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_DE_DE: CompositeLocale;

/**
 * Locale for English (British)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_EN_GB: CompositeLocale;

/**
 * Locale for English (US)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_EN_US: CompositeLocale;

/**
 * Locale for Spanish (Spain)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_ES_ES: CompositeLocale;

/**
 * Locale for Spanish (Mexico)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_ES_MX: CompositeLocale;

/**
 * Locale for Finnish (Finland)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_FI_FI: CompositeLocale;

/**
 * Locale for French (Canada)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_FR_CA: CompositeLocale;

/**
 * Locale for French (France)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_FR_FR: CompositeLocale;

/**
 * Locale for Hebrew (Israel)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_HE_IL: CompositeLocale;

/**
 * Locale for Italian (Italy)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_IT_IT: CompositeLocale;

/**
 * Locale for Japanese (Japan)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_JA_JP: CompositeLocale;

/**
 * Locale for Korean (South Korea)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_KO_KR: CompositeLocale;

/**
 * Locale for Norwegian Bokmål (Norway)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_NB_NO: CompositeLocale;

/**
 * Locale for Dutch (Netherlands)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_NL_NL: CompositeLocale;

/**
 * Locale for Polish (Poland)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_PL_PL: CompositeLocale;

/**
 * Locale for Portuguese (Brazil)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_PT_BR: CompositeLocale;

/**
 * Locale for Russian (Russia)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_RU_RU: CompositeLocale;

/**
 * Locale for Swedish (Sweden)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_SV_SE: CompositeLocale;

/**
 * Locale for Turkish (Turkey)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_TR_TR: CompositeLocale;

/**
 * Locale for Chinese (Mainland China)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_ZH_CN: CompositeLocale;

/**
 * Locale for Chinese (Taiwan)
 *
 * @public
 */
export declare const COMPOSITE_LOCALE_ZH_TW: CompositeLocale;

/**
 * The default set of icons used by the composites directly (i.e. not via the components defined in this library).
 *
 * @public
 */
export declare const COMPOSITE_ONLY_ICONS: CompositeIcons;

/**
 * Icons that can be overridden in one of the composites exported by this library.
 *
 * See {@link ChatCompositeIcons}, {@link CallCompositeIcons} and {@link CallWithChatCompositeIcons} for more targeted types.
 *
 * @public
 */
export declare type CompositeIcons = ChatCompositeIcons & CallCompositeIcons & CallWithChatCompositeIcons;

/**
 * Locale information for all composites exported from this library.
 *
 * @public
 */
export declare interface CompositeLocale {
    /** Strings used in composites directly
     *
     * Contrast with {@link CompositeLocale.component}, which contains strings used via the component library.
     */
    strings: CompositeStrings;
    /** Locale information for the pure Components used by Composites. See {@link communication-react#ComponentLocale}. */
    component: ComponentLocale;
}

/**
 * Strings used in the composites directly.
 *
 * These strings are used by the composites directly, instead of by the contained components.
 *
 * @public
 */
export declare interface CompositeStrings {
    /**
     * Strings used by {@link CallComposite}.
     */
    call: CallCompositeStrings;
    /**
     * Strings used by {@link ChatComposite}.
     */
    chat: ChatCompositeStrings;
    /**
     * Strings used by {@link CallWithChatComposite}.
     */
    callWithChat: CallWithChatCompositeStrings;
}

/**
 * @public
 * Information for conference phone info
 */
export declare interface ConferencePhoneInfo {
    /**
     * Phone number for the conference
     */
    phoneNumber: string;
    /**
     * Conference id for the conference
     */
    conferenceId: string;
    /**
     * Is toll free phone number
     */
    isTollFree: boolean;
    /**
     * phone number country
     */
    country?: string;
    /**
     * phone number city
     */
    city?: string;
}

/**
 * A system message with arbitary content.
 *
 * @public
 */
export declare interface ContentSystemMessage extends SystemMessageCommon {
    systemMessageType: 'content';
    content: string;
}

/**
 * A container for various buttons for call controls.
 *
 * Use with various call control buttons in this library, e.g., {@link CameraButton}, or your own instances of
 * {@link ControlBarButton} directly.
 *
 * @public
 */
export declare const ControlBar: (props: ControlBarProps) => JSX.Element;

/**
 * Default button styled for the {@link ControlBar}.
 *
 * Use this component create custom buttons that are styled the same as other buttons provided by the UI Library.
 *
 * @public
 */
export declare const ControlBarButton: (props: ControlBarButtonProps) => JSX.Element;

/**
 * Props for {@link ControlBarButton}.
 *
 * @public
 */
export declare interface ControlBarButtonProps extends IButtonProps {
    /**
     * Whether the label is displayed or not.
     *
     * @defaultValue `false`
     */
    showLabel?: boolean;
    /**
     * Key to use for the Label component
     */
    labelKey?: string;
    /**
     * Disable tooltip.
     *
     * @defaultValue 'false'
     */
    disableTooltip?: boolean;
    /**
     * Id to use for the tooltip host.
     *
     * @defaultValue This uses the labelKey and appends -tooltip by default
     */
    tooltipId?: string;
    /**
     * Optional strings to override in component.
     */
    strings?: ControlBarButtonStrings;
    /**
     * Icon to render when the button is checked.
     */
    onRenderOnIcon?: IRenderFunction<IButtonProps>;
    /**
     * Icon to render when the button is not checked.
     */
    onRenderOffIcon?: IRenderFunction<IButtonProps>;
    /**
     * Fluent styles, including extensions common to all {@link ControlBarButton}s.
     */
    styles?: ControlBarButtonStyles;
}

/**
 * Strings of {@link ControlBarButton} that can be overridden.
 *
 * @public
 */
export declare interface ControlBarButtonStrings {
    /**
     * Label of the button. This supersedes onLabel or offLabel if used.
     */
    label?: string;
    /**
     * Label of the button shown when the button is checked.
     */
    onLabel?: string;
    /**
     * Label of the button shown when the button is not checked.
     */
    offLabel?: string;
    /**
     * Tooltip content of the button. This supersedes tooltipDisabledContent, tooltipOnContent and tooltipOffContent if used.
     */
    tooltipContent?: string;
    /**
     * Tooltip content when the button is disabled.
     */
    tooltipDisabledContent?: string;
    /**
     * Tooltip content when the button is in the checked state.
     */
    tooltipOnContent?: string;
    /**
     * Tooltip content when the button is in the unchecked state.
     */
    tooltipOffContent?: string;
}

/**
 * Styles for all {@link ControlBarButton} implementations.
 *
 * @public
 */
export declare type ControlBarButtonStyles = IButtonStyles;

/**
 * Present layouts for the {@link ControlBar}.
 *
 * @public
 */
export declare type ControlBarLayout = 'horizontal' | 'vertical' | 'dockedTop' | 'dockedBottom' | 'dockedLeft' | 'dockedRight' | 'floatingTop' | 'floatingBottom' | 'floatingLeft' | 'floatingRight';

/**
 * Props for {@link ControlBar}.
 *
 * @public
 */
export declare interface ControlBarProps {
    /** React Child components. */
    children?: React_2.ReactNode;
    /**
     * Allows users to pass an object containing custom CSS styles.
     * @Example
     * ```
     * <ControlBar styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: BaseCustomStyles;
    /**
     * Changes the layout of the control bar.
     * Available layouts are `horizontal`, `vertical`, `dockedTop`, `dockedBottom`,
     * `dockedLeft`, `dockedRight`, `floatingTop`, `floatingBottom`, `floatingLeft`,
     * `floatingRight`
     * Defaults to a `horizontal` layout.
     */
    layout?: ControlBarLayout;
}

/**
 * Create a {@link CallAdapter} backed by Azure Communication Services.
 *
 * This is the default implementation of {@link CallAdapter} provided by this library.
 *
 * Note: `displayName` can be a maximum of 256 characters.
 *
 * @public
 */
export declare function createAzureCommunicationCallAdapter(args: AzureCommunicationCallAdapterArgs): Promise<CallAdapter>;

/**
 * Create a {@link CallAdapter} backed by Azure Communication Services.
 *
 * This is the default implementation of {@link CallAdapter} provided by this library.
 *
 * Note: `displayName` can be a maximum of 256 characters.
 *
 * @public
 */
export declare function createAzureCommunicationCallAdapter(args: AzureCommunicationOutboundCallAdapterArgs): Promise<CallAdapter>;

/**
 * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.
 *
 * Useful if you want to keep a reference to {@link StatefulCallClient}.
 * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.
 *
 * @public
 */
export declare function createAzureCommunicationCallAdapterFromClient(callClient: StatefulCallClient, callAgent: CallAgent, targetCallees: StartCallIdentifier[], options?: AzureCommunicationCallAdapterOptions): Promise<CallAdapter>;

/**
 * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.
 *
 * Useful if you want to keep a reference to {@link StatefulCallClient}.
 * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.
 *
 * @public
 */
export declare function createAzureCommunicationCallAdapterFromClient(callClient: StatefulCallClient, callAgent: CallAgent, locator: CallAdapterLocator, options?: AzureCommunicationCallAdapterOptions): Promise<CallAdapter>;

/**
 * Create a CallWithChatAdapter backed by Azure Communication services
 * to plug into the {@link CallWithChatComposite}.
 *
 * @public
 */
export declare const createAzureCommunicationCallWithChatAdapter: ({ userId, displayName, credential, endpoint, locator, alternateCallerId, callAdapterOptions }: AzureCommunicationCallWithChatAdapterArgs) => Promise<CallWithChatAdapter>;

/**
 * Create a {@link CallWithChatAdapter} using the provided {@link StatefulChatClient} and {@link StatefulCallClient}.
 *
 * Useful if you want to keep a reference to {@link StatefulChatClient} and {@link StatefulCallClient}.
 * Please note that chatThreadClient has to be created by StatefulChatClient via chatClient.getChatThreadClient(chatThreadId) API.
 * Consider using {@link createAzureCommunicationCallWithChatAdapter} for a simpler API.
 *
 * @public
 */
export declare const createAzureCommunicationCallWithChatAdapterFromClients: ({ callClient, callAgent, callLocator, chatClient, chatThreadClient, callAdapterOptions }: AzureCommunicationCallWithChatAdapterFromClientArgs) => Promise<CallWithChatAdapter>;

/**
 * Create a {@link ChatAdapter} backed by Azure Communication Services.
 *
 * This is the default implementation of {@link ChatAdapter} provided by this library.
 *
 * @public
 */
export declare const createAzureCommunicationChatAdapter: ({ endpoint: endpointUrl, userId, displayName, credential, threadId }: AzureCommunicationChatAdapterArgs) => Promise<ChatAdapter>;

/**
 * Create a {@link ChatAdapter} using the provided {@link StatefulChatClient}.
 *
 * Useful if you want to keep a reference to {@link StatefulChatClient}.
 * Consider using {@link createAzureCommunicationChatAdapter} for a simpler API.
 *
 * @public
 */
export declare function createAzureCommunicationChatAdapterFromClient(chatClient: StatefulChatClient, chatThreadClient: ChatThreadClient): Promise<ChatAdapter>;

/**
 * Type of {@link createDefaultCallingHandlers}.
 *
 * @public
 */
export declare type CreateDefaultCallingHandlers = (callClient: StatefulCallClient, callAgent: CallAgent | undefined, deviceManager: StatefulDeviceManager | undefined, call: Call | undefined, options?: CallingHandlersOptions) => CallingHandlers;

/**
 * Create the default implementation of {@link CallingHandlers} for teams call.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const createDefaultCallingHandlers: CreateDefaultCallingHandlers;

/**
 * Create the default implementation of {@link ChatHandlers}.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * Returned object is memoized to avoid rerenders when used as props for React Components.
 *
 * @public
 */
export declare const createDefaultChatHandlers: (chatClient: StatefulChatClient, chatThreadClient: ChatThreadClient) => ChatHandlers;

/**
 * Create the default implementation of {@link TeamsCallingHandlers} for teams call.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const createDefaultTeamsCallingHandlers: (callClient: StatefulCallClient, callAgent?: TeamsCallAgent, deviceManager?: StatefulDeviceManager, call?: TeamsCall, options?: {
    onResolveVideoBackgroundEffectsDependency?: () => Promise<VideoBackgroundEffectsDependency>;
    onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;
}) => TeamsCallingHandlers;

/**
 * Creates a StatefulCallClient {@link StatefulCallClient} by proxying CallClient
 * {@link @azure/communication-calling#CallClient} with ProxyCallClient {@link ProxyCallClient} which then allows access
 * to state in a declarative way.
 *
 * It is important to use the {@link @azure/communication-calling#DeviceManager} and
 * {@link @azure/communication-calling#CallAgent} and {@link @azure/communication-calling#Call} (and etc.) that are
 * obtained from the StatefulCallClient in order for their state changes to be proxied properly.
 *
 * @param args - {@link StatefulCallClientArgs}
 * @param options - {@link StatefulCallClientOptions}
 *
 * @public
 */
export declare const createStatefulCallClient: (args: StatefulCallClientArgs, options?: StatefulCallClientOptions) => StatefulCallClient;

/**
 * Creates a stateful ChatClient {@link StatefulChatClient} by proxying ChatClient
 * {@link @azure/communication-chat#ChatClient} with ProxyChatClient {@link ProxyChatClient} which then allows access
 * to state in a declarative way.
 *
 * @public
 */
export declare const createStatefulChatClient: (args: StatefulChatClientArgs, options?: StatefulChatClientOptions) => StatefulChatClient;

/**
 * @public
 */
export declare const createTeamsCallAdapter: (args: TeamsCallAdapterArgs) => Promise<TeamsCallAdapter>;

/**
 * Create a {@link TeamsCallAdapter} using the provided {@link StatefulCallClient}.
 *
 * Useful if you want to keep a reference to {@link StatefulCallClient}.
 * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.
 *
 * @public
 */
export declare const createTeamsCallAdapterFromClient: (callClient: StatefulCallClient, callAgent: TeamsCallAgent, locator: CallAdapterLocator, options?: TeamsAdapterOptions) => Promise<TeamsCallAdapter>;

/**
 * Object returned after creating a local or remote VideoStream.
 * This contains helper functions to manipulate the render of the stream.
 *
 * @public
 */
export declare interface CreateVideoStreamViewResult {
    /** View handle of the rendered video stream */
    view: {
        /**
         * Update the scale mode for this view.
         * @param scalingMode - The new scale mode.
         */
        updateScalingMode: (scalingMode: ViewScalingMode) => Promise<void>;
    };
}

/**
 * Return result from {@link StatefulCallClient.createView}.
 *
 * @public
 */
export declare type CreateViewResult = {
    renderer: VideoStreamRenderer;
    view: VideoStreamRendererView;
};

/**
 * Options that can be injected into the `onRender` function for customizing an
 * Avatar (`Persona`) component.
 *
 * @public
 */
export declare type CustomAvatarOptions = {
    /** Persona coin size in pixels  */
    coinSize?: number;
    /** Only show Coin and Initials  */
    hidePersonaDetails?: boolean;
    /** Text color of initials inside the coin  */
    initialsTextColor?: string;
    /** Optional property to set the aria label of the video tile if there is no available stream. */
    noVideoAvailableAriaLabel?: string;
    /** User status  */
    presence?: PersonaPresence;
    /** Preset Persona Size number  */
    size?: PersonaSize;
    /** Custom style for the Avatar  */
    styles?: IStyleFunctionOrObject<IPersonaStyleProps, IPersonaStyles>;
    /** Display name to be used in Persona  */
    text?: string;
    /** State for the participant to be displayed in the defaultPlaceHolder */
    participantState?: ParticipantState;
    /**
     * If true, show the special coin for unknown persona.
     * It has '?' in place of initials, with static font and background colors
     */
    showUnknownPersonaCoin?: boolean;
};

/**
 * A callback that returns the props to render a custom {@link ControlBarButton} and {@link DrawerMenuItem}.
 *
 * The response indicates where the custom button should be placed.
 *
 * Performance tip: This callback is only called when either the callback or its arguments change.
 * @public
 */
export declare type CustomCallControlButtonCallback = (args: CustomCallControlButtonCallbackArgs) => CustomCallControlButtonProps;

/**
 * Arguments for {@link CustomCallControlButtonCallback}.
 *
 * @public
 */
export declare interface CustomCallControlButtonCallbackArgs {
    /**
     * Buttons should reduce the size to fit a smaller viewport when `displayType` is `'compact'`.
     *
     * @defaultValue `'default'`
     */
    displayType?: CallControlDisplayType;
}

/**
 * Placement for a custom button injected in the {@link CommonCallControlBar}.
 *
 * 'primary': Place the button(s) on the right end of the center control bar but before the EndCallButton (left end in rtl mode).
 * 'overflow': Place the buttons(s) on the end of the overflow Menu.
 * 'secondary': Place the button(s) on the left end of the side control bar (right in rtl mode).
 *
 * Multiple buttons assigned the same placement are appended in order.
 * E.g., if two buttons are placed in 'secondary', they'll both appear on the left end (right end in rtl mode)
 * in the order provided.
 *
 * Only 'primary' placement works when legacy call control is enabled in call composite
 *
 * @public
 */
export declare type CustomCallControlButtonPlacement = 'primary' | 'overflow' | 'secondary';

/**
 * Response from {@link CustomCallControlButtonCallback}.
 * Includes the base props necessary to render a {@link ControlBarButton} or {@link DrawerMenuItem}.
 *
 * @public
 */
export declare interface CustomCallControlButtonProps {
    /**
     * Where to place the custom button relative to other buttons.
     */
    placement: CustomCallControlButtonPlacement;
    /**
     * Icon to render. Icon is a non-default icon name that needs to be registered as a
     * custom icon using registerIcons through fluentui. Examples include icons from the fluentui library
     */
    iconName?: string;
    /**
     * Calback for when button is clicked
     */
    onItemClick?: () => void;
    /**
     * Whether the buttons is disabled
     *
     * @defaultValue true
     */
    disabled?: boolean;
    /**
     * Whether the label is displayed or not.
     * If no value is set, showLabel will follow composite rules
     */
    showLabel?: boolean;
    /**
     * A unique id set for the standard HTML id attibute
     */
    id?: string;
    /**
     * Optional strings to override in component
     */
    strings?: CustomCallControlButtonStrings;
}

/**
 * Strings for CustomCallControlButtons
 *
 * @public
 */
export declare interface CustomCallControlButtonStrings {
    /**
     * Optional label for the button
     */
    label?: string;
    /**
     * Text that is shown in Tooltip content
     */
    tooltipContent?: string;
    /**
     * The aria label of the button for the benefit of screen readers.
     */
    ariaLabel?: string;
    /**
     * Detailed description of the button for the benefit of screen readers.
     */
    ariaDescription?: string;
}

/**
 * A custom message type.
 *
 * Custom messages are not rendered by default, but applications can provide custom renderers for them.
 *
 * @public
 */
export declare interface CustomMessage extends MessageCommon {
    messageType: 'custom';
    content: string;
}

/**
 * Preset dark theme for components exported from this library.
 *
 * @public
 */
export declare const darkTheme: PartialTheme & CallingTheme;

/**
 * @public
 * `DeclarativeCallAgent` extends and proxies the {@link @azure/communication-calling#CallAgent}
 */
export declare type DeclarativeCallAgent = CallAgent & IncomingCallManagement;

/**
 * @public
 * `DeclarativeTeamsCallAgent` extends and proxies the {@link @azure/communication-calling#TeamsCallAgent}
 */
export declare type DeclarativeTeamsCallAgent = TeamsCallAgent & TeamsIncomingCallManagement;

/**
 * Dependency type to be injected for deep noise suppression
 *
 * @public
 */
export declare type DeepNoiseSuppressionEffectDependency = {
    deepNoiseSuppressionEffect: AudioEffectsStartConfig;
};

/**
 * The default set of icons that are available to use in the UI components.
 *
 * @remark Icons used only in the composites are available in {@link DEFAULT_COMPOSITE_ICONS}.
 *
 * @public
 */
export declare const DEFAULT_COMPONENT_ICONS: {
    ChatMessageOptions: React_2.JSX.Element;
    ControlButtonCameraOff: React_2.JSX.Element;
    ControlButtonCameraOn: React_2.JSX.Element;
    ControlButtonEndCall: React_2.JSX.Element;
    ControlButtonMicOff: React_2.JSX.Element;
    ControlButtonMicOn: React_2.JSX.Element;
    ControlButtonOptions: React_2.JSX.Element;
    ControlButtonParticipants: React_2.JSX.Element;
    ControlButtonParticipantsContextualMenuItem: React_2.JSX.Element;
    ControlButtonScreenShareStart: React_2.JSX.Element;
    ControlButtonScreenShareStop: React_2.JSX.Element;
    ControlButtonRaiseHand: React_2.JSX.Element;
    ControlButtonLowerHand: React_2.JSX.Element;
    ControlButtonMicProhibited: React_2.JSX.Element;
    ControlButtonMicProhibitedSmall: React_2.JSX.Element;
    ControlButtonCameraProhibited: React_2.JSX.Element;
    ControlButtonCameraProhibitedSmall: React_2.JSX.Element;
    RaiseHandContextualMenuItem: React_2.JSX.Element;
    LowerHandContextualMenuItem: React_2.JSX.Element;
    ReactionButtonIcon: React_2.JSX.Element;
    OpenAttachment: React_2.JSX.Element;
    EditBoxCancel: React_2.JSX.Element;
    EditBoxSubmit: React_2.JSX.Element;
    ErrorBarCallCameraAccessDenied: React_2.JSX.Element;
    ErrorBarCallCameraAlreadyInUse: React_2.JSX.Element;
    ErrorBarCallLocalVideoFreeze: React_2.JSX.Element;
    ErrorBarCallMacOsCameraAccessDenied: React_2.JSX.Element;
    ErrorBarCallMacOsMicrophoneAccessDenied: React_2.JSX.Element;
    ErrorBarCallMicrophoneAccessDenied: React_2.JSX.Element;
    ErrorBarCallMicrophoneMutedBySystem: React_2.JSX.Element;
    ErrorBarCallMicrophoneUnmutedBySystem: React_2.JSX.Element;
    ErrorBarCallNetworkQualityLow: React_2.JSX.Element;
    ErrorBarCallNoMicrophoneFound: React_2.JSX.Element;
    ErrorBarCallNoSpeakerFound: React_2.JSX.Element;
    ErrorBarClear: React_2.JSX.Element;
    ErrorBarCallVideoRecoveredBySystem: React_2.JSX.Element;
    ErrorBarCallVideoStoppedBySystem: React_2.JSX.Element;
    ErrorBarMutedByRemoteParticipant: React_2.JSX.Element;
    NotificationBarRecording: React_2.JSX.Element;
    NotificationBarBreakoutRoomOpened: React_2.JSX.Element;
    NotificationBarBreakoutRoomPromptJoin: React_2.JSX.Element;
    NotificationBarBreakoutRoomChanged: React_2.JSX.Element;
    NotificationBarBreakoutRoomJoined: React_2.JSX.Element;
    NotificationBarBreakoutRoomClosingSoon: React_2.JSX.Element;
    NotificationBarBreakoutRoomClosed: React_2.JSX.Element;
    HorizontalGalleryLeftButton: React_2.JSX.Element;
    HorizontalGalleryRightButton: React_2.JSX.Element;
    MessageDelivered: React_2.JSX.Element;
    MessageEdit: React_2.JSX.Element;
    MessageFailed: React_2.JSX.Element;
    MessageRemove: React_2.JSX.Element;
    MessageResend: React_2.JSX.Element;
    MessageSeen: React_2.JSX.Element;
    MessageSending: React_2.JSX.Element;
    OptionsCamera: React_2.JSX.Element;
    OptionsMic: React_2.JSX.Element;
    OptionsSpeaker: React_2.JSX.Element;
    ParticipantItemMicOff: React_2.JSX.Element;
    ParticipantItemOptions: React_2.JSX.Element;
    ParticipantItemOptionsHovered: React_2.JSX.Element;
    ParticipantItemScreenShareStart: React_2.JSX.Element;
    ParticipantItemSpotlighted: React_2.JSX.Element;
    HoldCallContextualMenuItem: React_2.JSX.Element;
    HoldCallButton: React_2.JSX.Element;
    ResumeCall: React_2.JSX.Element;
    SendBoxSend: React_2.JSX.Element;
    SendBoxSendHovered: React_2.JSX.Element;
    VideoTileMicOff: React_2.JSX.Element;
    VideoTileCameraOff: React_2.JSX.Element;
    DialpadBackspace: React_2.JSX.Element;
    VideoTilePinned: React_2.JSX.Element;
    ParticipantItemPinned: React_2.JSX.Element;
    VideoTileMoreOptions: React_2.JSX.Element;
    VideoTileScaleFit: React_2.JSX.Element;
    VideoTileScaleFill: React_2.JSX.Element;
    PinParticipant: React_2.JSX.Element;
    UnpinParticipant: React_2.JSX.Element;
    SplitButtonPrimaryActionCameraOn: React_2.JSX.Element;
    SplitButtonPrimaryActionCameraOff: React_2.JSX.Element;
    SplitButtonPrimaryActionMicUnmuted: React_2.JSX.Element;
    SplitButtonPrimaryActionMicMuted: React_2.JSX.Element;
    VerticalGalleryLeftButton: React_2.JSX.Element;
    VerticalGalleryRightButton: React_2.JSX.Element;
    ControlButtonVideoEffectsOption: React_2.JSX.Element;
    ConfigurationScreenVideoEffectsButton: React_2.JSX.Element;
    CaptionsIcon: React_2.JSX.Element;
    CaptionsOffIcon: React_2.JSX.Element;
    CaptionsSettingsIcon: React_2.JSX.Element;
    ChangeSpokenLanguageIcon: React_2.JSX.Element;
    ChangeCaptionLanguageIcon: React_2.JSX.Element;
    ContextMenuCameraIcon: React_2.JSX.Element;
    ContextMenuMicIcon: React_2.JSX.Element;
    ContextMenuSpeakerIcon: React_2.JSX.Element;
    ContextMenuRemoveParticipant: React_2.JSX.Element;
    SurveyStarIcon: React_2.JSX.Element;
    SurveyStarIconFilled: React_2.JSX.Element;
    StartSpotlightContextualMenuItem: React_2.JSX.Element;
    StopSpotlightContextualMenuItem: React_2.JSX.Element;
    VideoTileSpotlighted: React_2.JSX.Element;
    ContextualMenuMicMutedIcon: React_2.JSX.Element;
    IncomingCallNotificationRejectIcon: React_2.JSX.Element;
    IncomingCallNotificationAcceptIcon: React_2.JSX.Element;
    IncomingCallNotificationAcceptWithVideoIcon: React_2.JSX.Element;
};

/**
 * The default set of icons that are available to used in the Composites.
 *
 * @public
 */
export declare const DEFAULT_COMPOSITE_ICONS: {
    EditBoxCancel: JSX.Element;
    EditBoxSubmit: JSX.Element;
    MessageDelivered: JSX.Element;
    MessageEdit: JSX.Element;
    MessageFailed: JSX.Element;
    MessageRemove: JSX.Element;
    MessageSeen: JSX.Element;
    MessageSending: JSX.Element;
    ParticipantItemOptions: JSX.Element;
    ParticipantItemOptionsHovered: JSX.Element;
    SendBoxSend: JSX.Element;
    SendBoxSendHovered: JSX.Element;
    ControlBarPeopleButton?: JSX.Element | undefined;
    ControlButtonCameraOff: JSX.Element;
    ControlButtonCameraOn: JSX.Element;
    ControlButtonEndCall: JSX.Element;
    ControlButtonMicOff: JSX.Element;
    ControlButtonMicOn: JSX.Element;
    ControlButtonOptions: JSX.Element;
    ControlButtonParticipants: JSX.Element;
    ControlButtonScreenShareStart: JSX.Element;
    ControlButtonScreenShareStop: JSX.Element;
    ControlButtonCameraProhibited: JSX.Element;
    ControlButtonCameraProhibitedSmall: JSX.Element;
    ControlButtonMicProhibited: JSX.Element;
    ControlButtonMicProhibitedSmall: JSX.Element;
    ControlButtonRaiseHand: JSX.Element;
    ControlButtonLowerHand: JSX.Element;
    ControlButtonExitSpotlight?: JSX.Element | undefined;
    RaiseHandContextualMenuItem: JSX.Element;
    ReactionContextualMenuItem?: JSX.Element | undefined;
    LowerHandContextualMenuItem: JSX.Element;
    ReactionButtonIcon: JSX.Element;
    ErrorBarCallCameraAccessDenied: JSX.Element;
    ErrorBarCallCameraAlreadyInUse: JSX.Element;
    ErrorBarCallLocalVideoFreeze: JSX.Element;
    ErrorBarCallMacOsCameraAccessDenied: JSX.Element;
    ErrorBarCallMacOsMicrophoneAccessDenied: JSX.Element;
    ErrorBarCallMicrophoneAccessDenied: JSX.Element;
    ErrorBarCallMicrophoneMutedBySystem: JSX.Element;
    ErrorBarCallMicrophoneUnmutedBySystem: JSX.Element;
    ErrorBarCallNetworkQualityLow: JSX.Element;
    ErrorBarCallNoMicrophoneFound: JSX.Element;
    ErrorBarCallNoSpeakerFound: JSX.Element;
    ErrorBarClear: JSX.Element;
    HorizontalGalleryLeftButton: JSX.Element;
    HorizontalGalleryRightButton: JSX.Element;
    LobbyScreenConnectingToCall?: JSX.Element | undefined;
    LobbyScreenWaitingToBeAdmitted?: JSX.Element | undefined;
    LocalDeviceSettingsCamera?: JSX.Element | undefined;
    LocalDeviceSettingsMic?: JSX.Element | undefined;
    LocalDeviceSettingsSpeaker?: JSX.Element | undefined;
    LocalPreviewPlaceholder?: JSX.Element | undefined;
    Muted?: JSX.Element | undefined;
    NetworkReconnectIcon?: JSX.Element | undefined;
    NoticePageAccessDeniedTeamsMeeting?: JSX.Element | undefined;
    NoticePageJoinCallFailedDueToNoNetwork?: JSX.Element | undefined;
    NoticePageLeftCall?: JSX.Element | undefined;
    NoticePageRemovedFromCall?: JSX.Element | undefined;
    NoticePageCallRejected?: JSX.Element | undefined;
    NoticePageNotInvitedToRoom?: JSX.Element | undefined;
    NoticePageRoomNotFound?: JSX.Element | undefined;
    NoticePageRoomNotValid?: JSX.Element | undefined;
    NoticePageCallTimeout?: JSX.Element | undefined;
    OptionsCamera: JSX.Element;
    OptionsMic: JSX.Element;
    OptionsSpeaker: JSX.Element;
    ParticipantItemMicOff: JSX.Element;
    ParticipantItemScreenShareStart: JSX.Element;
    VideoTileMicOff: JSX.Element;
    LocalCameraSwitch?: JSX.Element | undefined;
    PeoplePaneAddPerson?: JSX.Element | undefined;
    PeoplePaneOpenDialpad?: JSX.Element | undefined;
    DialpadStartCall?: JSX.Element | undefined;
    NoticePageInviteToRoomRemoved?: JSX.Element | undefined;
    BlurVideoBackground?: JSX.Element | undefined;
    RemoveVideoBackgroundEffect?: JSX.Element | undefined;
    GalleryOptions?: JSX.Element | undefined;
    SpeakerGalleryLayout?: JSX.Element | undefined;
    FloatingLocalVideoGalleryLayout?: JSX.Element | undefined;
    DefaultGalleryLayout?: JSX.Element | undefined;
    FocusedContentGalleryLayout?: JSX.Element | undefined;
    OverflowGalleryTop?: JSX.Element | undefined;
    LargeGalleryLayout?: JSX.Element | undefined;
    DefaultCustomButton?: JSX.Element | undefined;
    DtmfDialpadButton?: JSX.Element | undefined;
    PhoneNumberButton?: JSX.Element | undefined;
    JoinByPhoneDialStepIcon?: JSX.Element | undefined;
    JoinByPhoneConferenceIdIcon?: JSX.Element | undefined;
    JoinByPhoneWaitToBeAdmittedIcon?: JSX.Element | undefined;
    PeoplePaneMoreButton?: JSX.Element | undefined;
    StopAllSpotlightMenuButton?: JSX.Element | undefined;
    ChevronLeft?: JSX.Element | undefined;
    ControlBarChatButtonActive?: JSX.Element | undefined;
    ControlBarChatButtonInactive?: JSX.Element | undefined;
    Link?: JSX.Element | undefined;
    MoreDrawerMicrophones?: JSX.Element | undefined;
    MoreDrawerPeople?: JSX.Element | undefined;
    MoreDrawerSelectedMicrophone?: JSX.Element | undefined;
    MoreDrawerSelectedSpeaker?: JSX.Element | undefined;
    MoreDrawerSpeakers?: JSX.Element | undefined;
    SendBoxAttachFile?: JSX.Element | undefined;
    ChatMessageOptions: React_2.JSX.Element;
    ControlButtonParticipantsContextualMenuItem: React_2.JSX.Element;
    OpenAttachment: React_2.JSX.Element;
    ErrorBarCallVideoRecoveredBySystem: React_2.JSX.Element;
    ErrorBarCallVideoStoppedBySystem: React_2.JSX.Element;
    ErrorBarMutedByRemoteParticipant: React_2.JSX.Element;
    NotificationBarRecording: React_2.JSX.Element;
    NotificationBarBreakoutRoomOpened: React_2.JSX.Element;
    NotificationBarBreakoutRoomPromptJoin: React_2.JSX.Element;
    NotificationBarBreakoutRoomChanged: React_2.JSX.Element;
    NotificationBarBreakoutRoomJoined: React_2.JSX.Element;
    NotificationBarBreakoutRoomClosingSoon: React_2.JSX.Element;
    NotificationBarBreakoutRoomClosed: React_2.JSX.Element;
    MessageResend: React_2.JSX.Element;
    ParticipantItemSpotlighted: React_2.JSX.Element;
    HoldCallContextualMenuItem: React_2.JSX.Element;
    HoldCallButton: React_2.JSX.Element;
    ResumeCall: React_2.JSX.Element;
    VideoTileCameraOff: React_2.JSX.Element;
    DialpadBackspace: React_2.JSX.Element;
    VideoTilePinned: React_2.JSX.Element;
    ParticipantItemPinned: React_2.JSX.Element;
    VideoTileMoreOptions: React_2.JSX.Element;
    VideoTileScaleFit: React_2.JSX.Element;
    VideoTileScaleFill: React_2.JSX.Element;
    PinParticipant: React_2.JSX.Element;
    UnpinParticipant: React_2.JSX.Element;
    SplitButtonPrimaryActionCameraOn: React_2.JSX.Element;
    SplitButtonPrimaryActionCameraOff: React_2.JSX.Element;
    SplitButtonPrimaryActionMicUnmuted: React_2.JSX.Element;
    SplitButtonPrimaryActionMicMuted: React_2.JSX.Element;
    VerticalGalleryLeftButton: React_2.JSX.Element;
    VerticalGalleryRightButton: React_2.JSX.Element;
    ControlButtonVideoEffectsOption: React_2.JSX.Element;
    ConfigurationScreenVideoEffectsButton: React_2.JSX.Element;
    CaptionsIcon: React_2.JSX.Element;
    CaptionsOffIcon: React_2.JSX.Element;
    CaptionsSettingsIcon: React_2.JSX.Element;
    ChangeSpokenLanguageIcon: React_2.JSX.Element;
    ChangeCaptionLanguageIcon: React_2.JSX.Element;
    ContextMenuCameraIcon: React_2.JSX.Element;
    ContextMenuMicIcon: React_2.JSX.Element;
    ContextMenuSpeakerIcon: React_2.JSX.Element;
    ContextMenuRemoveParticipant: React_2.JSX.Element;
    SurveyStarIcon: React_2.JSX.Element;
    SurveyStarIconFilled: React_2.JSX.Element;
    StartSpotlightContextualMenuItem: React_2.JSX.Element;
    StopSpotlightContextualMenuItem: React_2.JSX.Element;
    VideoTileSpotlighted: React_2.JSX.Element;
    ContextualMenuMicMutedIcon: React_2.JSX.Element;
    IncomingCallNotificationRejectIcon: React_2.JSX.Element;
    IncomingCallNotificationAcceptIcon: React_2.JSX.Element;
    IncomingCallNotificationAcceptWithVideoIcon: React_2.JSX.Element;
};

/**
 * This type is meant to encapsulate all the state inside {@link @azure/communication-calling#DeviceManager}. For
 * optional parameters they may not be available until permission is granted by the user. The cameras, microphones,
 * speakers, and deviceAccess states will be empty until the corresponding
 * {@link @azure/communication-calling#DeviceManager}'s getCameras, getMicrophones, getSpeakers, and askDevicePermission
 * APIs are called and completed.
 *
 * @public
 */
export declare type DeviceManagerState = {
    /**
     * Proxy of {@link @azure/communication-calling#DeviceManager.isSpeakerSelectionAvailable}.
     */
    isSpeakerSelectionAvailable: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#DeviceManager.selectedMicrophone}.
     */
    selectedMicrophone?: AudioDeviceInfo;
    /**
     * Proxy of {@link @azure/communication-calling#DeviceManager.selectedSpeaker}.
     */
    selectedSpeaker?: AudioDeviceInfo;
    /**
     * Stores the selected camera device info. This is added by the stateful layer and does not exist in the Calling SDK.
     * It is meant as a convenience to the developer. It must be explicitly set before it has any value and does not
     * persist across instances of the {@link StatefulCallClient}. The developer controls entirely what this value holds
     * at any time.
     */
    selectedCamera?: VideoDeviceInfo;
    /**
     * Stores any cameras data returned from {@link @azure/communication-calling#DeviceManager.getCameras}.
     */
    cameras: VideoDeviceInfo[];
    /**
     * Stores any microphones data returned from {@link @azure/communication-calling#DeviceManager.getMicrophones}.
     */
    microphones: AudioDeviceInfo[];
    /**
     * Stores any speakers data returned from {@link @azure/communication-calling#DeviceManager.getSpeakers}.
     */
    speakers: AudioDeviceInfo[];
    /**
     * Stores deviceAccess data returned from {@link @azure/communication-calling#DeviceManager.askDevicePermission}.
     */
    deviceAccess?: DeviceAccess;
    /**
     * Stores created views that are not associated with any CallState (when {@link StatefulCallClient.createView} is
     * called with undefined callId, undefined participantId, and defined LocalVideoStream).
     *
     * The values in this array are generated internally when {@link StatefulCallClient.createView} is called and are
     * considered immutable.
     */
    unparentedViews: LocalVideoStreamState[];
};

/**
 * A button to open a menu that controls device options.
 *
 * Can be used with {@link ControlBar}.
 *
 * @public
 */
export declare const DevicesButton: (props: DevicesButtonProps) => JSX.Element;

/**
 * Styles for the {@link DevicesButton} menu.
 *
 * @public
 */
export declare interface DevicesButtonContextualMenuStyles extends IContextualMenuStyles {
    /**
     * Styles for the items inside the {@link DevicesButton} button menu.
     */
    menuItemStyles?: IContextualMenuItemStyles;
}

/**
 * Props for {@link DevicesButton}.
 *
 * @public
 */
export declare interface DevicesButtonProps extends ControlBarButtonProps {
    /**
     * Available microphones for selection
     */
    microphones?: OptionsDevice[];
    /**
     * Available speakers for selection
     */
    speakers?: OptionsDevice[];
    /**
     * Available cameras for selection
     */
    cameras?: OptionsDevice[];
    /**
     * Microphone that is shown as currently selected
     */
    selectedMicrophone?: OptionsDevice;
    /**
     * Speaker that is shown as currently selected
     */
    selectedSpeaker?: OptionsDevice;
    /**
     * Camera that is shown as currently selected
     */
    selectedCamera?: OptionsDevice;
    /**
     * Callback when a camera is selected
     */
    onSelectCamera?: (device: OptionsDevice) => Promise<void>;
    /**
     * Callback when a microphone is selected
     */
    onSelectMicrophone?: (device: OptionsDevice) => Promise<void>;
    /**
     * Speaker when a speaker is selected
     */
    onSelectSpeaker?: (device: OptionsDevice) => Promise<void>;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<DevicesButtonStrings>;
    /**
     * Option to increase the touch targets of the button flyout menu items from 36px to 48px.
     * Recommended for mobile devices.
     */
    styles?: DevicesButtonStyles;
}

/**
 * Selector type for {@link DevicesButton} component.
 *
 * @public
 */
export declare type DevicesButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    microphones: AudioDeviceInfo[];
    speakers: AudioDeviceInfo[];
    cameras: VideoDeviceInfo[];
    selectedMicrophone?: AudioDeviceInfo;
    selectedSpeaker?: AudioDeviceInfo;
    selectedCamera?: VideoDeviceInfo;
};

/**
 * Strings of {@link DevicesButton} that can be overridden.
 *
 * @public
 */
export declare interface DevicesButtonStrings {
    /**
     * Label of button
     */
    label: string;
    /**
     * Button tooltip content.
     */
    tooltipContent?: string;
    /**
     * Title of camera menu
     */
    cameraMenuTitle: string;
    /**
     * Title of microphone menu
     */
    microphoneMenuTitle: string;
    /**
     * Title of speaker menu
     */
    speakerMenuTitle: string;
    /**
     * Tooltip of camera menu
     */
    cameraMenuTooltip: string;
    /**
     * Tooltip of microphone menu
     */
    microphoneMenuTooltip: string;
    /**
     * Tooltip of speaker menu
     */
    speakerMenuTooltip: string;
}

/**
 * Styles for the Devices button menu items.
 *
 * @public
 */
export declare interface DevicesButtonStyles extends ControlBarButtonStyles {
    /**
     * Styles for the {@link DevicesButton} menu.
     */
    menuStyles?: Partial<DevicesButtonContextualMenuStyles>;
}

/**
 * Callback for {@link CallAdapterSubscribers} 'diagnosticChanged' event.
 *
 * @public
 */
export declare type DiagnosticChangedEventListner = (event: MediaDiagnosticChangedEvent | NetworkDiagnosticChangedEvent) => void;

/**
 * State only proxy for {@link @azure/communication-calling#DiagnosticsCallFeature}.
 *
 * @public
 */
export declare interface DiagnosticsCallFeatureState {
    /**
     * Stores diagnostics related to network conditions.
     */
    network: NetworkDiagnosticsState;
    /**
     * Stores diagnostics related to media quality.
     */
    media: MediaDiagnosticsState;
}

/**
 * A component to allow users to enter phone number through clicking on dialpad/using keyboard
 * It will return empty component for stable builds
 *
 * @public
 */
export declare const Dialpad: (props: DialpadProps) => JSX.Element;

/**
 * Modes of the dialpad component.
 * @public
 */
export declare type DialpadMode = 'dtmf' | 'dialer';

/**
 * Props for {@link Dialpad} component.
 *
 * @public
 */
export declare interface DialpadProps {
    strings?: DialpadStrings;
    /**
     * function to send dtmf tones on button click
     */
    onSendDtmfTone?: (dtmfTone: DtmfTone) => Promise<void>;
    /**
     * Callback for dialpad button behavior
     */
    onClickDialpadButton?: (buttonValue: string, buttonIndex: number) => void;
    /**
     * set dialpad textfield content
     */
    textFieldValue?: string;
    /**
     * on change function for text field, provides an unformatted plain text
     */
    onChange?: (input: string) => void;
    /**
     * flag to determine when to show/hide delete button, default true
     */
    showDeleteButton?: boolean;
    /**
     * Determines what kind of device that the user is on and should respect that based on interaction
     * interfaces available to the user
     */
    longPressTrigger?: LongPressTrigger;
    /**
     * Styles for customizing the dialpad component
     */
    styles?: DialpadStyles;
    /**
     * Disables DTMF sounds when dialpad buttons are pressed. the actual
     * tones are still sent to the call.
     */
    disableDtmfPlayback?: boolean;
    /**
     * Dialer mode for the dialpad. The dtmf mode is for sending dtmf tones and the appearence of
     * the dialpad is changed like hiding the input box. When using dialer mode the input box is there
     * and can be edited to change the number being dialed.
     */
    dialpadMode?: DialpadMode;
    /**
     * Audio context for generating DTMF tones. If this if not provided the dialpad will create one iteslf.
     */
    dtmfAudioContext?: AudioContext;
}

/**
 * Strings of {@link Dialpad} that can be overridden.
 *
 * @public
 */
export declare interface DialpadStrings {
    placeholderText: string;
    deleteButtonAriaLabel?: string;
}

/**
 * Styles for {@link Dialpad} component.
 *
 * @public
 */
export declare interface DialpadStyles {
    root?: IStyle;
    button?: IButtonStyles;
    textField?: Partial<ITextFieldStyles>;
    digit?: IStyle;
    letter?: IStyle;
    deleteIcon?: IButtonStyles;
}

/**
 * Callback for {@link CallAdapterSubscribers} 'displayNameChanged' event.
 *
 * @public
 */
export declare type DisplayNameChangedListener = (event: {
    participantId: CommunicationIdentifierKind;
    displayName: string;
}) => void;

/**
 * Functionality for correctly disposing a Composite.
 *
 * @public
 */
declare interface Disposable_2 {
    /** Dispose of the Composite */
    dispose(): void;
}
export { Disposable_2 as Disposable }

/**
 * Options to determine the rendering behavior of the dtmfDialer in the CallComposite
 * @public
 */
export declare interface DtmfDialPadOptions {
    dialerBehavior?: 'autoShow' | 'alwaysShow' | 'alwaysHide';
}

/**
 * DTMF tone for PSTN calls.
 *
 * @public
 */
export declare type DtmfTone = 'A' | 'B' | 'C' | 'D' | 'Flash' | 'Num0' | 'Num1' | 'Num2' | 'Num3' | 'Num4' | 'Num5' | 'Num6' | 'Num7' | 'Num8' | 'Num9' | 'Pound' | 'Star';

/**
 * A type for trivial selectors that return no data.
 *
 * Used as a default return value if {@link usePropsFor} is called for a component that requires no data.
 *
 * @public
 */
export declare type EmptySelector = () => Record<string, never>;

/**
 * A button to end an ongoing call.
 *
 * Can be used with {@link ControlBar}.
 *
 * @public
 */
export declare const EndCallButton: (props: EndCallButtonProps) => JSX.Element;

/**
 * Props for {@link EndCallButton}.
 *
 * @public
 */
export declare interface EndCallButtonProps extends ControlBarButtonProps {
    /**
     * Utility property for using this component with `communication react eventHandlers`.
     * Maps directly to the `onClick` property.
     */
    onHangUp?: (forEveryone?: boolean) => Promise<void>;
    /**
     * Set this to true to make it a split button.
     * The split arrow will trigger a contextual menu to allow end for everyone or just for the user.
     */
    enableEndCallMenu?: boolean;
    /**
     * Optional strings to override in component
     */
    strings?: EndCallButtonStrings;
}

/**
 * Strings of {@link EndCallButton} that can be overridden.
 *
 * @public
 */
export declare interface EndCallButtonStrings {
    /**
     * Label of button
     */
    label: string;
    /** Tooltip content. */
    tooltipContent?: string;
    /** Label for leave option when ending call */
    leaveOption?: string;
    /** Label for end the whole call option when ending call */
    endCallOption?: string;
}

/**
 * A component to show error messages on the UI.
 * All strings that can be shown are accepted as the {@link ErrorBarProps.strings} so that they can be localized.
 * Active errors are selected by {@link ErrorBarProps.activeErrorMessages}.
 *
 * This component internally tracks dismissed by the user.
 *   * Errors that have an associated timestamp: The error is shown on the UI again if it occurs after being dismissed.
 *   * Errors that do not have a timestamp: The error is dismissed until it disappears from the props.
 *         If the error recurs, it is shown in the UI.
 *
 * Uses {@link @fluentui/react#MessageBar} UI element.
 *
 * @public
 */
export declare const ErrorBar: (props: ErrorBarProps) => JSX.Element;

/**
 * Props for {@link ErrorBar}.
 *
 * In addition to the following, {@link ErrorBar} forwards all
 * {@link @fluentui/react#IMessageBarProps} to the underlying {@link @fluentui/react#MessageBar}.
 *
 * @public
 */
export declare interface ErrorBarProps extends IMessageBarProps {
    /**
     * Strings shown on the UI on errors.
     */
    strings?: ErrorBarStrings;
    /**
     * Currently active errors.
     */
    activeErrorMessages: ActiveErrorMessage[];
    /**
     * If set, errors with {@link ActiveErrorMessage.timestamp} older than the time this component is mounted
     * are not shown.
     *
     * This is useful when using the {@link ErrorBar} with a stateful client that handles more than one call
     * or chat thread. Set this prop to ignore errors from previous call or chat.
     *
     * @defaultValue false
     */
    ignorePremountErrors?: boolean;
    /**
     * Callback called when the dismiss button is triggered.
     * Use this to control errors shown when they dismissed by the user.
     */
    onDismissError?: (dismissedError: ActiveErrorMessage) => void;
}

/**
 * All strings that may be shown on the UI in the {@link ErrorBar}.
 *
 * @public
 */
export declare interface ErrorBarStrings {
    /**
     * Unable to reach Chat service.
     *
     * This can mean:
     *   - Incorrect Azure Communication Services endpoint was provided.
     *   - User's network connection is down.
     */
    unableToReachChatService: string;
    /**
     * User does not have access to the Chat service.
     * This usually means that either the Azure Communication Services endpiont or the token provided are incorrect.
     */
    accessDenied: string;
    /**
     * User is no longer on the thread.
     *
     * See also: {@link ErrorBarStrings.sendMessageNotInChatThread} for a more specific error.
     */
    userNotInChatThread: string;
    /**
     * Sending message failed because user is no longer on the thread.
     */
    sendMessageNotInChatThread: string;
    /**
     * A generic message when sending message fails.
     * Prefer more specific error strings when possible.
     */
    sendMessageGeneric: string;
    /**
     * A generic message when starting video fails.
     */
    startVideoGeneric: string;
    /**
     * A generic message when starting video fails.
     */
    stopVideoGeneric: string;
    /**
     * A generic message when muting microphone fails.
     */
    muteGeneric: string;
    /**
     * A generic message when unmuting microphone fails.
     */
    unmuteGeneric: string;
    /**
     * A generic message when starting screenshare fails.
     */
    startScreenShareGeneric: string;
    /**
     * A generic message when stopping screenshare fails.
     */
    stopScreenShareGeneric: string;
    /**
     * Message shown when poor network quality is detected during a call.
     */
    callNetworkQualityLow: string;
    /**
     * Message shown when poor network quality is detected during a call.
     */
    teamsMeetingCallNetworkQualityLow: string;
    /**
     * Message shown on failure to detect audio output devices.
     */
    callNoSpeakerFound: string;
    /**
     * Message shown on failure to detect audio input devices.
     */
    callNoMicrophoneFound: string;
    /**
     * Message shown when microphone can be enumerated but access is blocked by the system.
     */
    callMicrophoneAccessDenied: string;
    /**
     * Message shown when microphone can be enumerated but access is blocked by the system, for safari browsers
     */
    callMicrophoneAccessDeniedSafari: string;
    /**
     * Message shown when microphone is muted by the system (not by local or remote participants)
     */
    callMicrophoneMutedBySystem: string;
    /**
     * Message shown when microphone is unmuted by the system (not by local or remote participants).
     * This typically occurs if the system recovers from an unexpected mute.
     */
    callMicrophoneUnmutedBySystem: string;
    /**
     * Mac OS specific message shown when microphone can be enumerated but access is
     * blocked by the system.
     */
    callMacOsMicrophoneAccessDenied: string;
    /**
     * Message shown when poor network causes local video stream to be frozen.
     */
    callLocalVideoFreeze: string;
    /**
     * Message shown when camera can be enumerated but access is blocked by the system.
     */
    callCameraAccessDenied: string;
    /**
     * Message shown when camera can be enumerated but access is blocked by the system, for safari browsers
     */
    callCameraAccessDeniedSafari: string;
    /**
     * Message shown when local video fails to start because camera is already in use by
     * another applciation.
     */
    callCameraAlreadyInUse: string;
    /**
     * Message shown when local video is stopped by the system (not by local or remote participants)
     */
    callVideoStoppedBySystem: string;
    /**
     * Message shown when local video was recovered by the system (not by the local participant)
     */
    callVideoRecoveredBySystem: string;
    /**
     * Mac OS specific message shown when system denies access to camera.
     */
    callMacOsCameraAccessDenied: string;
    /**
     * Mac OS specific message shown when system denies sharing local screen on a call.
     */
    callMacOsScreenShareAccessDenied: string;
    /**
     * Dimiss errorbar button aria label read by screen reader accessibility tools
     */
    dismissButtonAriaLabel?: string;
    /**
     * An error message when joining a call fails.
     */
    failedToJoinCallGeneric?: string;
    /**
     * An error message when joining a call fails specifically due to an invalid meeting link.
     */
    failedToJoinCallInvalidMeetingLink?: string;
    /**
     * Error bar string letting you know remote participants see a frozen stream for you.
     */
    cameraFrozenForRemoteParticipants?: string;
    /**
     * Unable to start effect
     */
    unableToStartVideoEffect?: string;
    /**
     * An error message when starting spotlight while max participants are spotlighted
     */
    startSpotlightWhileMaxParticipantsAreSpotlighted: string;
    /**
     * An error message when local user is muted by a remote participant
     */
    mutedByRemoteParticipant: string;
}

/**
 * All errors that can be shown in the {@link ErrorBar}.
 *
 * @public
 */
export declare type ErrorType = keyof ErrorBarStrings;

/**
 * Provider to apply a Fluent theme across this library's react components.
 *
 * @remarks Components in this library are composed primarily from [Fluent UI](https://developer.microsoft.com/fluentui#/controls/web),
 * controls, mixing v8 and v9 controls.
 * This provider handles applying any theme provided to the underlying Fluent UI controls. *
 * @public
 */
export declare const FluentThemeProvider: (props: FluentThemeProviderProps) => JSX.Element;

/**
 * Props for {@link FluentThemeProvider}.
 *
 * @public
 */
export declare interface FluentThemeProviderProps {
    /** Children to be themed. */
    children: React_2.ReactNode;
    /** Theme for components. Defaults to a light theme if not provided. */
    fluentTheme?: PartialTheme | Theme;
    /**
     * Whether components are displayed right-to-left
     * @defaultValue `false`
     */
    rtl?: boolean;
    /** Optional style to change the root style of the ThemeProvider */
    rootStyle?: React_2.CSSProperties | undefined;
}

/**
 * Reverse operation of {@link toFlatCommunicationIdentifier}.
 *
 * @public
 */
export declare const fromFlatCommunicationIdentifier: (id: string) => CommunicationIdentifier;

/**
 * Specific type of the selector applicable to a given Component.
 *
 * @public
 */
export declare type GetCallingSelector<Component extends (props: any) => JSX.Element | undefined> = AreEqual<Component, typeof VideoGallery> extends true ? VideoGallerySelector : AreEqual<Component, typeof DevicesButton> extends true ? DevicesButtonSelector : AreEqual<Component, typeof MicrophoneButton> extends true ? MicrophoneButtonSelector : AreEqual<Component, typeof CameraButton> extends true ? CameraButtonSelector : AreEqual<Component, typeof ScreenShareButton> extends true ? ScreenShareButtonSelector : AreEqual<Component, typeof ParticipantList> extends true ? ParticipantListSelector : AreEqual<Component, typeof ParticipantsButton> extends true ? ParticipantsButtonSelector : AreEqual<Component, typeof EndCallButton> extends true ? EmptySelector : AreEqual<Component, typeof ErrorBar> extends true ? CallErrorBarSelector : AreEqual<Component, typeof Dialpad> extends true ? EmptySelector : AreEqual<Component, typeof HoldButton> extends true ? HoldButtonSelector : AreEqual<Component, typeof NotificationStack> extends true ? NotificationStackSelector : AreEqual<Component, typeof IncomingCallStack> extends true ? IncomingCallStackSelector : AreEqual<Component, typeof ReactionButton> extends true ? RaiseHandButtonSelector : AreEqual<Component, typeof CaptionsSettingsModal> extends true ? CaptionSettingsSelector : AreEqual<Component, typeof CaptionsBanner> extends true ? CaptionsBannerSelector : AreEqual<Component, typeof StartCaptionsButton> extends true ? StartCaptionsButtonSelector : AreEqual<Component, typeof RaiseHandButton> extends true ? EmptySelector : undefined;

/**
 * Get the selector for a specified component.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const getCallingSelector: <Component extends (props: any) => JSX.Element | undefined>(component: Component) => GetCallingSelector<Component>;

/**
 * Specific type of the selector applicable to a given Component.
 *
 * @public
 */
export declare type GetChatSelector<Component extends (props: any) => JSX.Element | undefined> = AreEqual<Component, typeof SendBox> extends true ? SendBoxSelector : AreEqual<Component, typeof MessageThread> extends true ? MessageThreadSelector : AreEqual<Component, typeof TypingIndicator> extends true ? TypingIndicatorSelector : AreEqual<Component, typeof ParticipantList> extends true ? ChatParticipantListSelector : AreEqual<Component, typeof ErrorBar> extends true ? ChatErrorBarSelector : undefined;

/**
 * Get the selector for a specified component.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const getChatSelector: <Component extends (props: any) => JSX.Element | undefined>(component: Component) => GetChatSelector<Component>;

/**
 * A component to lay out audio / video participants tiles in a call.
 *
 * @public
 */
export declare const GridLayout: (props: GridLayoutProps) => JSX.Element;

/**
 * Props for {@link GridLayout}.
 *
 * @public
 */
export declare interface GridLayoutProps {
    children: React_2.ReactNode;
    /**
     * Allows users to pass in an object contains custom CSS styles.
     * @Example
     * ```
     * <GridLayout styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: BaseCustomStyles;
}

/**
 * {@link GridLayout} Component Styles.
 * @public
 */
export declare interface GridLayoutStyles extends BaseCustomStyles {
    /** Styles for each child of {@link GridLayout} */
    children?: IStyle;
}

/**
 * a button to hold or resume a ongoing call.
 *
 * Can be used with {@link ControlBar}
 *
 * @param props - properties for the hold button.
 * @returns
 * @public
 */
export declare const HoldButton: (props: HoldButtonProps) => JSX.Element;

/**
 *@public
 */
export declare interface HoldButtonProps extends ControlBarButtonProps {
    /**
     * Utility property for using this component with communication react handlers
     * Holds the call or resumes it based on call state.
     */
    onToggleHold: () => Promise<void>;
    /**
     * Optional strings to override in component
     */
    strings?: HoldButtonStrings;
}

/**
 * Selector type for the {@link HoldButton} component.
 * @public
 */
export declare type HoldButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    checked: boolean;
};

/**
 * Strings for the hold button labels
 * @public
 */
export declare interface HoldButtonStrings {
    /**
     * Label for when action is to resume call.
     */
    onLabel?: string;
    /**
     * Label for when action is to hold call.
     */
    offLabel?: string;
    /**
     * Content for when button is checked
     */
    tooltipOnContent?: string;
    /**
     * Content for when button is unchecked
     */
    tooltipOffContent?: string;
}

/**
 * {@link HorizontalGallery} Component Styles.
 * @public
 */
export declare interface HorizontalGalleryStyles extends BaseCustomStyles {
    /** Styles for each child of {@link HorizontalGallery} */
    children?: IStyle;
    /** Styles for navigation button to go to previous page */
    previousButton?: IStyle;
    /** Styles for navigation button to go to next page */
    nextButton?: IStyle;
}

/**
 * React Context provider for {@link _Identifiers}.
 *
 * @experimental
 *
 * See documentation for {@link _Identifiers}.
 *
 * @internal
 */
export declare const _IdentifierProvider: (props: _IdentifierProviderProps) => JSX.Element;

/**
 * Arguments to Context Provider for {@link _Identifiers}.
 *
 * @experimental
 *
 * See documentation for {@link _Identifiers}.
 *
 * @internal
 */
export declare interface _IdentifierProviderProps {
    identifiers?: _Identifiers;
    children: React_2.ReactNode;
}

/**
 * Identifiers that can be used to target specific components in a composite.
 *
 * @experimental
 *
 * These identifiers are assigned as `data-ui-id` HTML attribute of the root element of the targeted component.
 *
 * This API is intended for end to end test automation. As such, they are not covered by the API
 * guarantee of the public API. This will remain perenially experimental and compatibility breaking changes
 * may be made at any point.
 *
 * @internal
 */
export declare interface _Identifiers {
    /** `data-ui-id` value for `SendBox` Component */
    sendboxTextField: string;
    /** `data-ui-id` value for `ParticipantButton` Component's People menu item */
    participantButtonPeopleMenuItem: string;
    /** `data-ui-id` value for `ParticipantItem` Component's Menu button */
    participantItemMenuButton: string;
    /** `data-ui-id` value for `ParticipantList` Component */
    participantList: string;
    /** `data-ui-id` value for `ParticipantList` Component's People Button */
    participantListPeopleButton: string;
    /** `data-ui-id` value for `ParticipantList` Component's Remove Participant Button */
    participantListRemoveParticipantButton: string;
    /** `data-ui-id` value for `MessageThread` components message content */
    messageContent: string;
    /** `data-ui-id` value for `MessageThread` components message timestamp */
    messageTimestamp: string;
    /** `data-ui-id` value for `TypingIndicator` Component */
    typingIndicator: string;
    /** `data-ui-id` value for `VideoGallery` Component */
    videoGallery: string;
    /** `data-ui-id` value for `VideoTile` Component */
    videoTile: string;
    /** `data-ui-id` value for overflow gallery component's left navigation button */
    overflowGalleryLeftNavButton: string;
    /** `data-ui-id` value for overflow gallery component's right navigation button */
    overflowGalleryRightNavButton: string;
    /** `data-ui-id` value for the video tiles in the horizontal gallery */
    horizontalGalleryVideoTile: string;
    /** `data-ui-id` value for `VerticalGallery` Component's children video tiles */
    verticalGalleryVideoTile: string;
    /** `data-ui-id` value for `VerticalGallery` Component's page counter */
    verticalGalleryPageCounter: string;
}

/**
 * Component to render a fullscreen modal for a selected image.
 *
 * @public
 */
export declare const ImageOverlay: (props: ImageOverlayProps) => JSX.Element;

/**
 * Props for {@link ImageOverlay}.
 *
 * @public
 */
export declare interface ImageOverlayProps {
    /**
     * Boolean that controls whether the modal is displayed.
     */
    isOpen: boolean;
    /**
     * Image source used to display the image in a large scale.
     */
    imageSrc: string;
    /**
     * Optional string used as a alt text for the image. @default 'image'
     */
    altText?: string;
    /**
     * Optional string used as the title of the image and displayed on the top left corner of the ImageOverlay.
     */
    title?: string;
    /**
     * Optional JSX element used as a title icon and displayed to the left of the title element.
     */
    titleIcon?: JSX.Element;
    /**
     * Callback to invoke when the ImageOverlay modal is dismissed
     */
    onDismiss: () => void;
    /**
     * Optional callback called when the download button is clicked. If not provided, the download button will not be rendered.
     */
    onDownloadButtonClicked?: (imageSrc: string) => void;
}

/**
 * Strings of {@link ImageOverlay} that can be overridden.
 *
 * @public
 */
export declare interface ImageOverlayStrings {
    /**
     * Download button label for ImageOverlay
     */
    downloadButtonLabel: string;
    /**
     * Dismiss button aria label for ImageOverlay
     */
    dismissButtonAriaLabel: string;
    /**
     * Announcer message for when ImageOverlay becomes active
     */
    overlayVisibleMessage: string;
}

/**
 * @public
 * This contains a readonly array that returns all the active `incomingCalls`.
 * An active incoming call is a call that has not been answered, declined or disconnected.
 */
export declare type IncomingCallManagement = {
    /**
     * @beta
     * @Remark This attribute doesn't exist on the {@link @azure/communication-calling#CallAgent} interface.
     * @returns readonly array of {@link IncomingCall}
     */
    incomingCalls: ReadonlyArray<IncomingCall>;
};

/**
 * A Notification component that is to be used to represent incoming calls to the end user.
 * Allows the user to accept or reject the incoming call.
 * @public
 */
export declare const IncomingCallNotification: (props: IncomingCallNotificationProps) => JSX.Element;

/**
 * Properties for the incoming call notification component.
 *
 * @public
 */
export declare interface IncomingCallNotificationProps {
    /**
     * Caller's Name
     */
    callerName?: string;
    /**
     * Alert Text"
     */
    alertText?: string;
    /**
     * URL to the avatar image for the user
     */
    avatarImage?: string;
    /**
     * Size of the persona coin
     */
    personaSize?: number;
    /**
     * Callback to render the avatar
     */
    onRenderAvatar?: () => JSX.Element;
    /**
     * Callback to accept the call with audio
     */
    onAcceptWithAudio: () => void;
    /**
     * Callback to accept the call with Video
     */
    onAcceptWithVideo: () => void;
    /**
     * Callback to reject the call
     */
    onReject: () => void;
    /**
     * Callback when the notification is dismissed
     */
    onDismiss?: () => void;
    /**
     * Styles for the incoming call notification component.
     */
    styles?: IncomingCallNotificationStyles;
    /**
     * Strings for the incoming call notification component.
     */
    strings?: IncomingCallNotificationStrings;
    /**
     * Options for whether to show the accept with video button
     */
    acceptOptions: {
        showAcceptWithVideo: boolean;
    };
}

/**
 * Strings for the incoming call notification component.
 *
 * @public
 */
export declare interface IncomingCallNotificationStrings {
    /**
     * Placeholder CallerID for the incoming call notification.
     */
    incomingCallNotificationPlaceholderId?: string;
    /**
     * Placeholder Alert for the incoming call notification.
     */
    incomingCallNotificationPlaceholderAlert?: string;
    /**
     * Aria label for the accept with audio button in the incoming call notification.
     */
    incomingCallNoticicationAcceptWithAudioAriaLabel?: string;
    /**
     * Aria label for the accept with video button in the incoming call notification.
     */
    incomingCallNoticicationAcceptWithVideoAriaLabel?: string;
    /**
     * Aria label for the reject button in the incoming call notification.
     */
    incomingCallNoticicationRejectAriaLabel?: string;
    /**
     * Label for the accept button in the incoming call notification.
     */
    incomingCallNotificationAcceptButtonLabel?: string;
    /**
     * Label for the accept with video button in the incoming call notification.
     */
    incomingCallNotificationAccceptWithVideoButtonLabel?: string;
    /**
     * label for the reject button in the incoming call notification.
     */
    incomingCallNotificationRejectButtonLabel?: string;
    /**
     * Aria label for the incoming call dismiss button
     */
    incomingCallNotificationDismissButtonAriaLabel?: string;
}

/**
 * Styles for the incoming call notification component.
 *
 * @public
 */
export declare interface IncomingCallNotificationStyles {
    /**
     * Styles for the accept buttons.
     */
    acceptButton?: IButtonStyles;
    /**
     * Styles for the reject button.
     */
    rejectButton?: IButtonStyles;
    /**
     * Styles for the root container.
     */
    root?: IStackStyles;
    /**
     * Styles for the avatar container.
     */
    avatarContainer?: IStackStyles;
}

/**
 * Wrapper to manage multiple incoming calls
 * @param props - {@link IncomingCallManagerProps}
 * @returns
 * @public
 */
export declare const IncomingCallStack: (props: IncomingCallStackProps) => JSX.Element;

/**
 * Represents an active incoming call.
 * @public
 */
export declare interface IncomingCallStackCall {
    /**
     * Unique identifier for the incoming call.
     */
    id: string;
    /**
     * Information about the caller.
     */
    callerInfo: {
        /**
         * Display name of the caller.
         */
        displayName?: string;
    };
    /**
     * Whether or not the call is a voip capable call.
     */
    videoAvailable: boolean;
}

/**
 * Props for the IncomingCallManager component.
 * @public
 */
export declare interface IncomingCallStackProps {
    /**
     * List of incoming calls.
     */
    activeIncomingCalls: IncomingCallStackCall[];
    /**
     * List of incoming calls that have ended.
     */
    removedIncomingCalls: IncomingCallStackCall[];
    /**
     * Handler to accept the incoming call.
     * @param incomingCallId - Id of the incoming call to accept.
     * @param useVideo - Whether to accept with video.
     * @returns void
     */
    onAcceptCall: (incomingCallId: string, useVideo?: boolean) => void;
    /**
     * Handler to reject the incoming call.
     * @param incomingCallId - id of the incoming call to reject
     * @returns - void
     */
    onRejectCall: (incomingCallId: string) => void;
    /**
     * Styles for the incoming call notifications.
     */
    styles?: IncomingCallNotificationStyles;
    /**
     * Strings for the incoming call notifications.
     */
    strings?: IncomingCallNotificationStrings;
    /**
     * Tab index for the incoming Call stack, this will set the tab order of the
     * incoming call notifications in your application.
     */
    tabIndex?: number;
}

/**
 * Selector to get the active and removed incoming calls.
 * @public
 */
export declare type IncomingCallStackSelector = (state: CallClientState) => {
    activeIncomingCalls: IncomingCallStackCall[];
    removedIncomingCalls: IncomingCallStackCall[];
};

/**
 * State only version of {@link @azure/communication-calling#IncomingCall}. {@link StatefulCallClient} will
 * automatically detect incoming calls and add their state to the state exposed by {@link StatefulCallClient}.
 *
 * @public
 */
export declare interface IncomingCallState {
    /**
     * Proxy of {@link @azure/communication-calling#IncomingCall.id}.
     */
    id: string;
    /**
     * Proxy of {@link @azure/communication-calling#IncomingCall.callInfo}.
     */
    info: CallInfoState;
    /**
     * Proxy of {@link @azure/communication-calling#IncomingCall.callerInfo}.
     */
    callerInfo: CallerInfo;
    /**
     * Set to the state returned by 'callEnded' event on {@link @azure/communication-calling#IncomingCall} when received.
     * This property is added by the stateful layer and is not a proxy of SDK state.
     */
    callEndReason?: CallEndReason;
    /**
     * Stores the local date when the call started on the client. This property is added by the stateful layer and is not
     * a proxy of SDK state.
     */
    startTime: Date;
    /**
     * Stores the local date when the call ended on the client. This property is added by the stateful layer and is not a
     * proxy of SDK state. It is undefined if the call is not ended yet.
     */
    endTime?: Date;
}

/**
 * InlineImage's state, as reflected in the UI.
 *
 * @public
 */
export declare interface InlineImage {
    /** ID of the message that the inline image is belonged to */
    messageId: string;
    /** Attributes of the inline image */
    imageAttributes: React_2.ImgHTMLAttributes<HTMLImageElement>;
}

/**
 * Options to display inline image in the inline image scenario.
 *
 * @public
 */
export declare interface InlineImageOptions {
    /**
     * Optional callback to render an inline image of in a message.
     */
    onRenderInlineImage?: (inlineImage: InlineImage, defaultOnRender: (inlineImage: InlineImage) => JSX.Element) => JSX.Element;
}

/**
 * Callback for {@link CallAdapterSubscribers} 'isCaptionLanguageChanged' event.
 *
 * @public
 */
export declare type IsCaptionLanguageChangedListener = (event: {
    activeCaptionLanguage: string;
}) => void;

/**
 * Callback for {@link CallAdapterSubscribers} 'isCaptionsActiveChanged' event.
 *
 * @public
 */
export declare type IsCaptionsActiveChangedListener = (event: {
    isActive: boolean;
}) => void;

/**
 * Callback for {@link CallAdapterSubscribers} 'isLocalScreenSharingActiveChanged' event.
 *
 * @public
 */
export declare type IsLocalScreenSharingActiveChangedListener = (event: {
    isScreenSharingOn: boolean;
}) => void;

/**
 * Callback for {@link CallAdapterSubscribers} 'isMuted' event.
 *
 * @public
 */
export declare type IsMutedChangedListener = (event: {
    identifier: CommunicationIdentifierKind;
    isMuted: boolean;
}) => void;

/**
 * Callback for {@link CallAdapterSubscribers} 'isSpeakingChanged' event.
 *
 * @public
 */
export declare type IsSpeakingChangedListener = (event: {
    identifier: CommunicationIdentifierKind;
    isSpeaking: boolean;
}) => void;

/**
 * Callback for {@link CallAdapterSubscribers} 'isSpokenLanguageChanged' event.
 *
 * @public
 */
export declare type IsSpokenLanguageChangedListener = (event: {
    activeSpokenLanguage: string;
}) => void;

/**
 * Options for setting microphone and camera state when joining a call
 * true = turn on the device when joining call
 * false = turn off the device when joining call
 * 'keep'/undefined = retain devices' precall state
 *
 * @public
 */
export declare interface JoinCallOptions {
    /**
     * microphone state when joining call
     * true: turn on
     * false: turn off
     * 'keep': maintain precall state
     */
    microphoneOn?: boolean | 'keep';
    /**
     * camera state when joining call
     * true: turn on
     * false: turn off
     * 'keep': maintain precall state
     */
    cameraOn?: boolean | 'keep';
}

/**
 * Arguments for {@link MessageThreadProps.onRenderJumpToNewMessageButton}.
 *
 * @public
 */
export declare interface JumpToNewMessageButtonProps {
    /** String for button text */
    text: string;
    /** Callback for when button is clicked */
    onClick: () => void;
}

/**
 * Preset light theme for components exported from this library.
 *
 * @public
 */
export declare const lightTheme: PartialTheme & CallingTheme;

/**
 * Loader function for the CallComposite that you can use in your application. This
 * function will load the CallComposite into the provided HTML element. The best use case for this
 * is in a Node ui framework that is not React based.
 *
 * @public
 */
export declare const loadCallComposite: (loaderArgs: CallCompositeLoaderProps, htmlElement: HTMLElement) => Promise<CallAdapter | undefined>;

/**
 * Props for the CallWithChatComposite that you can use in your application. This
 * function will load the CallWithChatComposite into the provided HTML element.
 * The best use case for this is in a Node UI framework that is not React based.
 *
 * @public
 */
export declare const loadCallWithChatComposite: (loaderArgs: CallWithChatCompositeLoaderProps, htmlElement: HTMLElement) => Promise<CallWithChatAdapter | undefined>;

/**
 * Loader function for the ChatComposite that you can use in your application. This
 * function will load the ChatComposite into the provided HTML element.
 * The best use case for this is in a Node UI framework that is not React based.
 *
 * @public
 */
export declare const loadChatComposite: (loaderArgs: ChatCompositeLoaderProps, htmlElement: HTMLElement) => Promise<ChatAdapter | undefined>;

/**
 * Whether the stream is loading or not.
 * @public
 */
export declare type LoadingState = 'loading' | 'none' | 'reconnecting';

/**
 * Loader function for the OutboundCallComposite that you can use in your application. This
 * function will load the CallComposite into the provided HTML element to make outbound calls.
 * The best use case for this is in a Node UI framework that is not React based.
 *
 * @public
 */
export declare const loadOutboundCallComposite: (loaderArgs: OutboundCallCompositeLoaderProps, htmlElement: HTMLElement) => Promise<CallAdapter | undefined>;

/**
 * Provider to provide localized strings for this library's react components.
 *
 * @remarks Components will be provided localized strings in English (US) by default if this
 * provider is not used.
 *
 * @public
 */
export declare const LocalizationProvider: (props: LocalizationProviderProps) => JSX.Element;

/**
 * Props for {@link LocalizationProvider}.
 *
 * @public
 */
export declare type LocalizationProviderProps = {
    /** Locale context to provide components */
    locale: ComponentLocale;
    /** Children to provide locale context. */
    children: React_2.ReactNode;
};

/**
 * @public
 */
export declare type LocalScreenShareView = 'stream' | 'placeholderMessage';

/**
 * @public
 */
export declare interface LocalVideoCameraCycleButtonProps {
    /** Array of cameras available to the user. */
    cameras?: OptionsDevice[];
    /** Currently selected camera in the local video stream. */
    selectedCamera?: OptionsDevice;
    /** callback function to change video feed. */
    onSelectCamera?: (device: OptionsDevice) => Promise<void>;
    /** label for local video camera switcher */
    label?: string;
    /** description for local video camera switcher */
    ariaDescription?: string;
    /** control to enable large button mode */
    size?: 'small' | 'large';
}

/**
 * State only version of {@link @azure/communication-calling#LocalVideoStream}.
 *
 * @public
 */
export declare interface LocalVideoStreamState {
    /**
     * Proxy of {@link @azure/communication-calling#LocalVideoStream.source}.
     */
    source: VideoDeviceInfo;
    /**
     * Proxy of {@link @azure/communication-calling#LocalVideoStream.mediaStreamType}.
     */
    mediaStreamType: MediaStreamType;
    /**
     * {@link VideoStreamRendererView} that is managed by createView/disposeView in {@link StatefulCallClient}
     * API. This can be undefined if the stream has not yet been rendered and defined after createView creates the view.
     */
    view?: VideoStreamRendererViewState;
    /**
     * Stores the state of the video effects.
     * @public
     */
    videoEffects?: LocalVideoStreamVideoEffectsState;
}

/**
 * State only version of a LocalVideoStream's {@link @azure/communication-calling#VideoEffectsFeature}.
 *
 * @public
 */
export declare interface LocalVideoStreamVideoEffectsState {
    /**
     * List of effects if any are active.
     */
    activeEffects?: VideoEffectName[];
}

/**
 * Options for the local video tile in the Call composite.
 *
 * @public
 */
export declare interface LocalVideoTileOptions {
    /**
     * Position of the local video tile. If unset will render the local tile in the floating local position.
     *
     * @defaultValue 'floating'
     * @remarks 'grid' - local video tile will be rendered in the grid view of the videoGallery.
     * 'floating' - local video tile will be rendered in the floating position and will observe overflow gallery
     * local video tile rules and be docked in the bottom corner.
     * This does not affect the Configuration screen or the side pane Picture in Picture in Picture view.
     */
    position?: 'grid' | 'floating';
}

/**
 * different modes of the local video tile
 *
 * @public
 */
export declare type LocalVideoTileSize = '9:16' | '16:9' | 'hidden' | 'followDeviceOrientation';

/**
 * Modes of how the longpress handlers can be tiggered.
 * @public
 */
export declare type LongPressTrigger = 'mouseAndTouch' | 'touch';

/**
 * Audio/Video Media access state
 *
 * @public
 */
export declare type MediaAccess = {
    isAudioPermitted: boolean;
    isVideoPermitted: boolean;
};

/**
 * Media access state
 * @public
 */
export declare interface MediaAccessState {
    /**
     * Whether the audio is forcibly muted
     */
    isAudioPermitted: boolean;
    /**
     * Whether the video is forcibly muted
     */
    isVideoPermitted: boolean;
}

/**
 * Payload for {@link DiagnosticChangedEventListner} where there is a change in a media diagnostic.
 *
 * @public
 */
export declare type MediaDiagnosticChangedEvent = MediaDiagnosticChangedEventArgs & {
    type: 'media';
};

/**
 * State only proxy for {@link @azure/communication-calling#MediaDiagnostics}.
 *
 * @public
 */
export declare interface MediaDiagnosticsState {
    latest: LatestMediaDiagnostics;
}

/**
 * strings for phone info modal
 * @public
 */
export declare interface MeetingConferencePhoneInfoModalStrings {
    /**
     * Header for the phone info modal
     */
    meetingConferencePhoneInfoModalTitle: string;
    /**
     * Phone number instruction
     */
    meetingConferencePhoneInfoModalDialIn: string;
    /**
     * Meeting ID instruction
     */
    meetingConferencePhoneInfoModalMeetingId: string;
    /**
     * Wait for phone connection
     */
    meetingConferencePhoneInfoModalWait: string;
    /**
     * Toll Free Phone Label
     */
    meetingConferencePhoneInfoModalTollFree: string;
    /**
     * Toll Phone Label
     */
    meetingConferencePhoneInfoModalToll: string;
    /**
     * Toll Phone Label without geo data
     */
    meetingConferencePhoneInfoModalTollGeoData: string;
    /**
     * No phone number available message
     */
    meetingConferencePhoneInfoModalNoPhoneAvailable: string;
}

/**
 * Discriminated union of all messages.
 *
 * The `messageType` field specializes into union variants.
 *
 * @public
 */
export declare type Message = ChatMessage | SystemMessage | CustomMessage;

/**
 * Indicate whether a chat message should be displayed merged with the message before / after it.
 * If `true`, the message will be appear grouped with the message before it.
 * 'top' and 'bottom' are used to indicate that the message is the start or end of a group.
 *
 * @public
 */
export declare type MessageAttachedStatus = 'bottom' | 'top' | boolean;

/**
 * Common properties of all message types.
 *
 * @public
 */
export declare interface MessageCommon {
    messageId: string;
    createdOn: Date;
}

/**
 * Supported types of chat message content.
 *
 * @public
 */
export declare type MessageContentType = 'text' | 'html' | 'richtext/html' | 'unknown';

/**
 * Callback for {@link ChatAdapterSubscribers} 'messageDeleted' event.
 *
 * @public
 */
export declare type MessageDeletedListener = MessageReceivedListener;

/**
 * Callback for {@link ChatAdapterSubscribers} 'messageEdited' event.
 *
 * @public
 */
export declare type MessageEditedListener = MessageReceivedListener;

/**
 * Props to render a single message.
 *
 * See {@link MessageRenderer}.
 *
 * @public
 */
export declare type MessageProps = {
    /**
     * Message to render. It can type `ChatMessage` or `SystemMessage`, `BlockedMessage` or `CustomMessage`.
     */
    message: Message;
    /**
     * Strings from parent MessageThread component
     */
    strings: MessageThreadStrings;
    /**
     * Custom CSS styles for chat message container.
     */
    messageContainerStyle?: ComponentSlotStyle;
    /**
     * Whether the date of a message is displayed or not.
     *
     * @defaultValue `false`
     */
    showDate?: boolean;
    /**
     * Disable editing messages.
     *
     * @remarks This removes the action menu on messages.
     *
     * @defaultValue `false`
     */
    disableEditing?: boolean;
    /**
     * Optional callback to edit a message.
     *
     * @param messageId - message id from chatClient
     * @param content - new content of the message
     */
    onUpdateMessage?: UpdateMessageCallback;
    /**
     * Optional callback for when a message edit is cancelled.
     *
     * @param messageId - message id from chatClient
     */
    onCancelEditMessage?: CancelEditCallback;
    /**
     * Optional callback to delete a message.
     *
     * @param messageId - message id from chatClient
     *
     */
    onDeleteMessage?: (messageId: string) => Promise<void>;
    /**
     * Optional callback to send a message.
     *
     * @param content - message content from chatClient
     * @param options - message options to be included in the message
     *
     */
    onSendMessage?: (content: string) => Promise<void>;
};

/**
 * Callback for {@link ChatAdapterSubscribers} 'messageRead' event.
 *
 * @public
 */
export declare type MessageReadListener = (event: {
    message: ChatMessage_2;
    readBy: CommunicationUserKind;
}) => void;

/**
 * Callback for {@link ChatAdapterSubscribers} 'messageReceived' event.
 *
 * @public
 */
export declare type MessageReceivedListener = (event: {
    message: ChatMessage_2;
}) => void;

/**
 * A component to render a single message.
 *
 * @public
 */
export declare type MessageRenderer = (props: MessageProps) => JSX.Element;

/**
 * Callback for {@link ChatAdapterSubscribers} 'messageSent' event.
 *
 * @public
 */
export declare type MessageSentListener = MessageReceivedListener;

/**
 * Client-side state of a sent message.
 *
 * Includes transitional states that occur before message delivery is confirmed from the backend.
 *
 * @public
 */
export declare type MessageStatus = 'delivered' | 'sending' | 'seen' | 'failed';

/**
 * Component to display the status of a sent message.
 *
 * Adds an icon and tooltip corresponding to the message status.
 *
 * @public
 */
export declare const MessageStatusIndicator: (props: MessageStatusIndicatorProps) => JSX.Element;

/**
 * Props for {@link MessageStatusIndicator}.
 *
 * @public
 */
export declare interface MessageStatusIndicatorProps {
    /** Message status that determines the icon to display. */
    status?: MessageStatus;
    readCount?: number;
    onToggleToolTip?: (isToggled: boolean) => void;
    /** number of participants not including myself */
    remoteParticipantsCount?: number;
    /**
     * Allows users to pass an object containing custom CSS styles.
     * @Example
     * ```
     * <MessageStatus styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: BaseCustomStyles;
    /**
     * Optional strings to override in component
     */
    strings?: MessageStatusIndicatorStrings;
}

/**
 * Strings of {@link MessageStatusIndicator} that can be overridden.
 *
 * @public
 */
export declare interface MessageStatusIndicatorStrings {
    /** Aria label to notify user when their message has been delivered. */
    deliveredAriaLabel?: string;
    /** Text to display in the delivered message icon tooltip. */
    deliveredTooltipText: string;
    /** Aria label to notify user when their message has been seen by others. */
    seenAriaLabel?: string;
    /** Text to display in the seen message icon tooltip if read number/ participant number is 1 */
    seenTooltipText: string;
    /** Text to display in the seen message icon tooltip if read number logic is working correctly (more than 1 read number and more than 1 particiants)*/
    readByTooltipText?: string;
    /** Aria label to notify user when their message is being sent. */
    sendingAriaLabel?: string;
    /** Text to display in the sending message icon tooltip. */
    sendingTooltipText: string;
    /** Aria label to notify user when their message has failed to be sent. */
    failedToSendAriaLabel?: string;
    /** Text to display in the failed message icon tooltip. */
    failedToSendTooltipText: string;
}

/**
 * `MessageThread` allows you to easily create a component for rendering chat messages, handling scrolling behavior of new/old messages and customizing icons & controls inside the chat thread.
 * @param props - of type MessageThreadProps
 *
 * Users will need to provide at least chat messages and userId to render the `MessageThread` component.
 * Users can also customize `MessageThread` by passing in their own Avatar, `MessageStatusIndicator` icon, `JumpToNewMessageButton`, `LoadPreviousMessagesButton` and the behavior of these controls.
 *
 * `MessageThread` internally uses the `Chat` component from `@fluentui-contrib/chat`. You can checkout the details about these components [here](https://microsoft.github.io/fluentui-contrib/react-chat/).
 *
 * @public
 */
export declare const MessageThread: (props: MessageThreadProps) => JSX.Element;

/**
 * Props for {@link MessageThread}.
 *
 * @public
 */
export declare type MessageThreadProps = {
    /**
     * UserId of the current user.
     */
    userId: string;
    /**
     * Messages to render in message thread. A message can be of type `ChatMessage`, `SystemMessage`, `BlockedMessage` or `CustomMessage`.
     */
    messages: (ChatMessage | SystemMessage | CustomMessage)[];
    /**
     * number of participants in the thread
     */
    participantCount?: number;
    /**
     * read receipts for each sender in the chat
     */
    readReceiptsBySenderId?: ReadReceiptsBySenderId;
    /**
     * Allows users to pass an object containing custom CSS styles.
     * @Example
     * ```
     * <MessageThread styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: MessageThreadStyles;
    /**
     * Whether the new message button is disabled or not.
     *
     * @defaultValue `false`
     */
    disableJumpToNewMessageButton?: boolean;
    /**
     * Whether the date of each message is displayed or not.
     * It is ignored when onDisplayDateTimeString is supplied.
     *
     * @defaultValue `false`
     */
    showMessageDate?: boolean;
    /**
     * Whether the status indicator for each message is displayed or not.
     *
     * @defaultValue `false`
     */
    showMessageStatus?: boolean;
    /**
     * Number of chat messages to reload each time onLoadPreviousChatMessages is called.
     *
     * @defaultValue 0
     */
    numberOfChatMessagesToReload?: number;
    /**
     * Optional callback to override actions on message being seen.
     *
     * @param messageId - message Id
     */
    onMessageSeen?: (messageId: string) => Promise<void>;
    /**
     * Optional callback to override render of the message status indicator.
     *
     * @param messageStatusIndicatorProps - props of type MessageStatusIndicatorProps
     */
    onRenderMessageStatus?: (messageStatusIndicatorProps: MessageStatusIndicatorProps) => JSX.Element | null;
    /**
     * Optional callback to override render of the avatar.
     *
     * @param userId - user Id
     */
    onRenderAvatar?: OnRenderAvatarCallback;
    /**
     * Optional callback to override render of the button for jumping to the new message.
     *
     * @param newMessageButtonProps - button props of type JumpToNewMessageButtonProps 0  */
    onRenderJumpToNewMessageButton?: (newMessageButtonProps: JumpToNewMessageButtonProps) => JSX.Element;
    /**
     * Optional callback to override loading of previous messages.
     * It accepts the number of history chat messages that we want to load and return a boolean Promise indicating if we have got all the history messages.
     * If the promise resolves to `true`, we have load all chat messages into the message thread and `loadPreviousMessagesButton` will not be rendered anymore.
     */
    onLoadPreviousChatMessages?: (messagesToLoad: number) => Promise<boolean>;
    /**
     * Optional callback to override render of a message.
     *
     * @param messageProps - props of type {@link communication-react#MessageProps}
     * @param defaultOnRender - default render of type {@link communication-react#MessageRenderer}
     *
     * @remarks
     * `messageRenderer` is not provided for `CustomMessage` and thus only available for `ChatMessage` and `SystemMessage`.
     */
    onRenderMessage?: (messageProps: MessageProps, messageRenderer?: MessageRenderer) => JSX.Element;
    /**
     * Optional callback to edit a message.
     *
     * @param messageId - message id from chatClient
     * @param content - new content of the message
     *
     */
    onUpdateMessage?: UpdateMessageCallback;
    /**
     * Optional callback for when a message edit is cancelled.
     *
     * @param messageId - message id from chatClient
     */
    onCancelEditMessage?: CancelEditCallback;
    /**
     * Optional callback to delete a message.
     *
     * @param messageId - message id from chatClient
     *
     */
    onDeleteMessage?: (messageId: string) => Promise<void>;
    /**
     * Optional callback to send a message.
     *
     * @param content - message body to send
     * @param options - message options to be included in the message
     *
     */
    onSendMessage?: (content: string) => Promise<void>;
    /**
     /**
     * Disable editing messages.
     *
     * @remarks This removes the action menu on messages.
     *
     * @defaultValue `false`
     */
    disableEditing?: boolean;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<MessageThreadStrings>;
    /**
     * Optional callback called when an inline image is clicked.
     * @beta
     */
    inlineImageOptions?: InlineImageOptions;
};

/**
 * Selector type for {@link MessageThread} component.
 *
 * @public
 */
export declare type MessageThreadSelector = (state: ChatClientState, props: ChatBaseSelectorProps) => {
    userId: string;
    showMessageStatus: boolean;
    messages: Message[];
};

/**
 * Strings of {@link MessageThread} that can be overridden.
 *
 * @public
 */
export declare interface MessageThreadStrings {
    /** String for Sunday */
    sunday: string;
    /** String for Monday */
    monday: string;
    /** String for Tuesday */
    tuesday: string;
    /** String for Wednesday */
    wednesday: string;
    /** String for Thursday */
    thursday: string;
    /** String for Friday */
    friday: string;
    /** String for Saturday */
    saturday: string;
    /** String for Yesterday */
    yesterday: string;
    /** String for participants joined */
    participantJoined: string;
    /** String for participants left */
    participantLeft: string;
    /** Tag shown on a message that has been edited */
    editedTag: string;
    /** String for editing message in floating menu */
    editMessage: string;
    /** String for removing message in floating menu */
    removeMessage: string;
    /** String for resending failed message in floating menu */
    resendMessage?: string;
    /** String for indicating failed to send messages */
    failToSendTag?: string;
    /** String for LiveMessage introduction for the Chat Message */
    liveAuthorIntro: string;
    /** String for LiveMessage introduction for the edited Chat Message by remote user */
    editedMessageLiveAuthorIntro: string;
    /** String for LiveMessage introduction for the edited Chat Message sent by local user */
    editedMessageLocalUserLiveAuthorIntro: string;
    /** String for aria text of remote user's message content */
    messageContentAriaText: string;
    /** String for aria text of local user's message content */
    messageContentMineAriaText: string;
    /** String for warning on text limit exceeded in EditBox*/
    editBoxTextLimit: string;
    /** String for placeholder text in EditBox when there is no user input*/
    editBoxPlaceholderText: string;
    /** String for new messages indicator*/
    newMessagesIndicator: string;
    /** String for showing message read status in floating menu */
    messageReadCount?: string;
    /** String for replacing display name when there is none*/
    noDisplayNameSub: string;
    /** String for Cancel button in EditBox*/
    editBoxCancelButton: string;
    /** String for Submit in EditBox when there is no user input*/
    editBoxSubmitButton: string;
    /** String for action menu indicating there are more options */
    actionMenuMoreOptions?: string;
    /** Aria label to announce when a message is deleted */
    messageDeletedAnnouncementAriaLabel: string;
    /** String for open attachment button in attachment card */
    openAttachment: string;
    /** String for aria text in attachment card group*/
    attachmentCardGroupMessage: string;
}

/**
 * Fluent styles for {@link MessageThread}.
 *
 * @public
 */
export declare interface MessageThreadStyles extends BaseCustomStyles {
    /** Styles for load previous messages container. */
    loadPreviousMessagesButtonContainer?: IStyle;
    /** Styles for new message container. */
    newMessageButtonContainer?: IStyle;
    /** Styles for chat container. */
    chatContainer?: ComponentSlotStyle;
    /** styles for my chat items.  */
    myChatItemMessageContainer?: ComponentSlotStyle;
    /** styles for chat items.  */
    chatItemMessageContainer?: ComponentSlotStyle;
    /** Styles for my chat message container. */
    myChatMessageContainer?: ComponentSlotStyle;
    /** Styles for my chat message container in case of failure. */
    failedMyChatMessageContainer?: ComponentSlotStyle;
    /** Styles for chat message container. */
    chatMessageContainer?: ComponentSlotStyle;
    /** Styles for system message container. */
    systemMessageContainer?: ComponentSlotStyle;
    /** Styles for blocked message container. */
    /** Styles for message status indicator container. */
    messageStatusContainer?: (mine: boolean) => IStyle;
}

/**
 * A button to turn microphone on / off.
 *
 * Can be used with {@link ControlBar}.
 *
 * @public
 */
export declare const MicrophoneButton: (props: MicrophoneButtonProps) => JSX.Element;

/**
 * Styles for the {@link MicrophoneButton} menu.
 *
 * @public
 */
export declare interface MicrophoneButtonContextualMenuStyles extends IContextualMenuStyles {
    /**
     * Styles for the items inside the {@link MicrophoneButton} button menu.
     */
    menuItemStyles?: IContextualMenuItemStyles;
}

/**
 * Props for {@link MicrophoneButton}.
 *
 * @public
 */
export declare interface MicrophoneButtonProps extends ControlBarButtonProps {
    /**
     * Utility property for using this component with `communication react eventHandlers`.
     * Maps directly to the `onClick` property.
     */
    onToggleMicrophone?: () => Promise<void>;
    /**
     * Available microphones for selection
     */
    microphones?: OptionsDevice[];
    /**
     * Available speakers for selection
     */
    speakers?: OptionsDevice[];
    /**
     * Microphone that is shown as currently selected
     */
    selectedMicrophone?: OptionsDevice;
    /**
     * Speaker that is shown as currently selected
     */
    selectedSpeaker?: OptionsDevice;
    /**
     * Callback when a microphone is selected
     */
    onSelectMicrophone?: (device: OptionsDevice) => Promise<void>;
    /**
     * Speaker when a speaker is selected
     */
    onSelectSpeaker?: (device: OptionsDevice) => Promise<void>;
    /**
     * Whether to use a {@link SplitButton} with a {@link IContextualMenu} for device selection.
     *
     * default: false
     */
    enableDeviceSelectionMenu?: boolean;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<MicrophoneButtonStrings>;
    /**
     * Styles for {@link MicrophoneButton} and the device selection flyout.
     */
    styles?: Partial<MicrophoneButtonStyles>;
    /**
     * Whether the deep noise suppression is on or off
     */
    isDeepNoiseSuppressionOn?: boolean;
    /**
     * Callback when noise suppression is clicked
     */
    onClickNoiseSuppression?: () => void;
    /**
     * Show/Hide the deep noise suppression button
     */
    showNoiseSuppressionButton?: boolean;
}

/**
 * Selector type for {@link MicrophoneButton} component.
 *
 * @public
 */
export declare type MicrophoneButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    disabled: boolean;
    checked: boolean;
    microphones: AudioDeviceInfo[];
    speakers: AudioDeviceInfo[];
    selectedMicrophone?: AudioDeviceInfo;
    selectedSpeaker?: AudioDeviceInfo;
};

/**
 * Strings of {@link MicrophoneButton} that can be overridden.
 *
 * @public
 */
export declare interface MicrophoneButtonStrings {
    /** Label when button is on. */
    onLabel: string;
    /** Label when button is off. */
    offLabel: string;
    /** * Tooltip content when the button is disabled. */
    tooltipDisabledContent?: string;
    /** Tooltip content when the button is on. */
    tooltipOnContent?: string;
    /** Tooltip content when the button is off. */
    tooltipOffContent?: string;
    /**
     * Title of microphone menu
     */
    microphoneMenuTitle?: string;
    /**
     * Title of speaker menu
     */
    speakerMenuTitle?: string;
    /**
     * Tooltip of microphone menu
     */
    microphoneMenuTooltip?: string;
    /**
     * Tooltip of speaker menu
     */
    speakerMenuTooltip?: string;
    /**
     * Description of microphone button split button role
     */
    microphoneButtonSplitRoleDescription?: string;
    /**
     * Microphone split button aria label when mic is enabled.
     */
    onSplitButtonAriaLabel?: string;
    /**
     * Microphone split button aria label when mic is disabled.
     */
    offSplitButtonAriaLabel?: string;
    /**
     * Microphone action turned on string for announcer
     */
    microphoneActionTurnedOnAnnouncement?: string;
    /**
     * Microphone action turned off string for announcer
     */
    microphoneActionTurnedOffAnnouncement?: string;
    /**
     * Primary action for the microphone when microphone is live.
     */
    onSplitButtonMicrophonePrimaryAction?: string;
    /**
     * Primary action for the microphone when the microphone is muted.
     */
    offSplitButtonMicrophonePrimaryAction?: string;
    /**
     * Title for primary action section of split button
     */
    microphonePrimaryActionSplitButtonTitle?: string;
    /**
     * Aria description for the microphone button
     */
    microphoneAriaDescription?: string;
    /**
     * Title for deep noise suppression button
     */
    deepNoiseSuppressionTitle?: string;
    /**
     * Noise Suppression turned on string for announcer
     */
    deepNoiseSuppressionOnAnnouncement?: string;
    /**
     * Noise Suppression turned off string for announcer
     */
    deepNoiseSuppressionOffAnnouncement?: string;
}

/**
 * Styles for {@link MicrophoneButton}
 *
 * @public
 */
export declare interface MicrophoneButtonStyles extends ControlBarButtonStyles {
    /**
     * Styles for the {@link MicrophoneButton} menu.
     */
    menuStyles?: Partial<MicrophoneButtonContextualMenuStyles>;
}

/**
 * Payload for {@link DiagnosticChangedEventListner} where there is a change in a network diagnostic.
 *
 * @public
 */
export declare type NetworkDiagnosticChangedEvent = NetworkDiagnosticChangedEventArgs & {
    type: 'network';
};

/**
 * State only proxy for {@link @azure/communication-calling#NetworkDiagnostics}.
 *
 * @public
 */
export declare interface NetworkDiagnosticsState {
    latest: LatestNetworkDiagnostics;
}

/**
 * A component to show notification messages on the UI.
 *
 * @public
 */
declare const Notification_2: (props: NotificationProps) => JSX.Element;
export { Notification_2 as Notification }

/**
 * Props for {@link Notification}.
 *
 * @public
 */
export declare interface NotificationProps {
    /**
     * Notification bar strings;
     */
    notificationStrings?: NotificationStrings;
    /**
     * Notification bar icon;
     */
    notificationIconProps?: IIconProps;
    /**
     * If set, notifications will automatically dismiss after 5 seconds
     * @defaultValue false
     */
    autoDismiss?: boolean;
    /**
     * If set, notifications will be shown in a stacked effect
     * @defaultValue false
     */
    showStackedEffect?: boolean;
    /**
     * Role html property for the notification bar.
     * @defaultValue alert
     */
    role?: 'alert' | 'status' | 'presentation' | 'none';
    /**
     * Aria-live property for the notification bar.
     * @defaultValue assertive
     */
    ariaLive?: 'assertive' | 'off' | 'polite';
    /**
     * Callback called when the primary button inside notification bar is clicked.
     */
    onClickPrimaryButton?: () => void;
    /**
     * Callback called when the secondary button inside notification bar is clicked.
     */
    onClickSecondaryButton?: () => void;
    /**
     * Callback called when the notification is dismissed.
     */
    onDismiss?: () => void;
    /**
     * Optional callback to supply users with further troubleshooting steps or more information for the notification.
     */
    onClickLink?: () => void;
    /**
     * Styles for the incoming call notifications.
     */
    styles?: NotificationStyles;
}

/**
 * A component to show notifications on the UI.
 * All strings that can be shown are accepted as the {@link NotificationStackProps.strings} so that they can be localized.
 * Active notifications are selected by {@link NotificationStackProps.activeNotifications}.
 *
 * This component internally tracks dismissed by the user.
 *   * Notifications that have an associated timestamp: The notification is shown on the UI again if it occurs after being dismissed.
 *   * Notifications that do not have a timestamp: The notification is dismissed until it disappears from the props.
 *         If the notification recurs, it is shown in the UI.
 *
 *
 * @public
 */
export declare const NotificationStack: (props: NotificationStackProps) => JSX.Element;

/**
 * Props for {@link NotificationStack}.
 * @public
 */
export declare interface NotificationStackProps {
    /**
     * Strings shown on the UI on errors.
     */
    strings?: NotificationStackStrings;
    /**
     * Currently active notifications.
     */
    activeNotifications: ActiveNotification[];
    /**
     * Max notifications to show at a time.
     * @defaultValue 2
     */
    maxNotificationsToShow?: number;
    /**
     * Callback called when the dismiss button is triggered.
     * Use this to control notifications shown when they dismissed by the user.
     * Note this onDismiss function will affect all notifications in the same stack
     */
    onDismissNotification?: (dismissedNotification: ActiveNotification) => void;
    /**
     * If set, notifications with {@link ActiveNotification.timestamp} older than the time this component is mounted
     * are not shown.
     *
     * This is useful when using the {@link NotificationStack} with a stateful client that handles more than one call
     * or chat thread. Set this prop to ignore notifications from previous call or chat.
     *
     * @defaultValue false
     */
    ignorePremountNotifications?: boolean;
}

/**
 * Selector type for {@link Notification} component.
 *
 * @public
 */
export declare type NotificationStackSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    activeErrorMessages: ActiveNotification[];
    activeNotifications: ActiveNotification[];
};

/**
 * All strings that may be shown on the UI in the {@link NotificationStack}.
 *
 * @public
 */
export declare interface NotificationStackStrings {
    /**
     * A generic message when starting video fails.
     */
    startVideoGeneric?: NotificationStrings;
    /**
     * A generic message when starting video fails.
     */
    stopVideoGeneric?: NotificationStrings;
    /**
     * A generic message when muting microphone fails.
     */
    muteGeneric?: NotificationStrings;
    /**
     * A generic message when unmuting microphone fails.
     */
    unmuteGeneric?: NotificationStrings;
    /**
     * A generic message when starting screenshare fails.
     */
    startScreenShareGeneric?: NotificationStrings;
    /**
     * A generic message when stopping screenshare fails.
     */
    stopScreenShareGeneric?: NotificationStrings;
    /**
     * Message shown when poor network quality is detected during a call.
     */
    callNetworkQualityLow?: NotificationStrings;
    /**
     * Message shown when poor network quality is detected during a teams meetings.
     * Contains actions to open phone info modal.
     */
    teamsMeetingCallNetworkQualityLow?: NotificationStrings;
    /**
     * Message shown on failure to detect audio output devices.
     */
    callNoSpeakerFound?: NotificationStrings;
    /**
     * Message shown on failure to detect audio input devices.
     */
    callNoMicrophoneFound?: NotificationStrings;
    /**
     * Message shown when microphone can be enumerated but access is blocked by the system.
     */
    callMicrophoneAccessDenied?: NotificationStrings;
    /**
     * Message shown when microphone can be enumerated but access is blocked by the system, for safari browsers
     */
    callMicrophoneAccessDeniedSafari?: NotificationStrings;
    /**
     * Message shown when microphone is muted by the system (not by local or remote participants)
     */
    callMicrophoneMutedBySystem?: NotificationStrings;
    /**
     * Message shown when microphone is unmuted by the system (not by local or remote participants).
     * This typically occurs if the system recovers from an unexpected mute.
     */
    callMicrophoneUnmutedBySystem?: NotificationStrings;
    /**
     * Mac OS specific message shown when microphone can be enumerated but access is
     * blocked by the system.
     */
    callMacOsMicrophoneAccessDenied?: NotificationStrings;
    /**
     * Message shown when poor network causes local video stream to be frozen.
     */
    callLocalVideoFreeze?: NotificationStrings;
    /**
     * Message shown when camera can be enumerated but access is blocked by the system.
     */
    callCameraAccessDenied?: NotificationStrings;
    /**
     * Message shown when camera can be enumerated but access is blocked by the system, for safari browsers
     */
    callCameraAccessDeniedSafari?: NotificationStrings;
    /**
     * Message shown when local video fails to start because camera is already in use by
     * another applciation.
     */
    callCameraAlreadyInUse?: NotificationStrings;
    /**
     * Message shown when local video is stopped by the system (not by local or remote participants)
     */
    callVideoStoppedBySystem?: NotificationStrings;
    /**
     * Message shown when local video was recovered by the system (not by the local participant)
     */
    callVideoRecoveredBySystem?: NotificationStrings;
    /**
     * Mac OS specific message shown when system denies access to camera.
     */
    callMacOsCameraAccessDenied?: NotificationStrings;
    /**
     * Mac OS specific message shown when system denies sharing local screen on a call.
     */
    callMacOsScreenShareAccessDenied?: NotificationStrings;
    /**
     * Dimiss Notifications button aria label read by screen reader accessibility tools
     */
    dismissButtonAriaLabel?: NotificationStrings;
    /**
     * An error message when joining a call fails.
     */
    failedToJoinCallGeneric?: NotificationStrings;
    /**
     * An error message when joining a call fails specifically due to an invalid meeting link.
     */
    failedToJoinCallInvalidMeetingLink?: NotificationStrings;
    /**
     * Error string letting you know remote participants see a frozen stream for you.
     */
    cameraFrozenForRemoteParticipants?: NotificationStrings;
    /**
     * Unable to start effect
     */
    unableToStartVideoEffect?: NotificationStrings;
    /**
     * An error message when starting spotlight while max participants are spotlighted
     */
    startSpotlightWhileMaxParticipantsAreSpotlighted?: NotificationStrings;
    /**
     * Muted by a remote participant message
     */
    mutedByRemoteParticipant?: NotificationStrings;
    /**
     * Speaking while muted message
     */
    speakingWhileMuted?: NotificationStrings;
    /**
     * Recording started message
     */
    recordingStarted?: NotificationStrings;
    /**
     * Transcription started message
     */
    transcriptionStarted?: NotificationStrings;
    /**
     * Recording stopped message
     */
    recordingStopped?: NotificationStrings;
    /**
     * Transcription stopped message
     */
    transcriptionStopped?: NotificationStrings;
    /**
     * Recording and transcription both started message
     */
    recordingAndTranscriptionStarted?: NotificationStrings;
    /**
     * Recording and transcription both stopped message
     */
    recordingAndTranscriptionStopped?: NotificationStrings;
    /**
     * Recording stopped but transcription still going on message
     */
    recordingStoppedStillTranscribing?: NotificationStrings;
    /**
     * Transcription stopped but recording still going on message
     */
    transcriptionStoppedStillRecording?: NotificationStrings;
    /**
     * Message shown in notification when the user will be automatically to their assigned breakout room that is opened
     */
    assignedBreakoutRoomOpened?: NotificationStrings;
    /**
     * Message shown in notification when the user is prompted to join their assigned breakout room that is opened
     */
    assignedBreakoutRoomOpenedPromptJoin?: NotificationStrings;
    /**
     * Message shown in notification when the user's assigned breakout room is changed
     */
    assignedBreakoutRoomChanged?: NotificationStrings;
    /**
     * Message shown in notification when the user's assigned breakout room is closed
     */
    assignedBreakoutRoomClosed?: NotificationStrings;
    /**
     * Message shown in notification when breakout room is joined
     */
    breakoutRoomJoined?: NotificationStrings;
    /**
     * Message shown in notification when breakout room is closing soon
     */
    breakoutRoomClosingSoon?: NotificationStrings;
    /**
     * Message shown in notification when capability turnVideoOn is present
     */
    capabilityTurnVideoOnPresent?: NotificationStrings;
    /**
     * Message shown in notification when capability turnVideoOn is absent
     */
    capabilityTurnVideoOnAbsent?: NotificationStrings;
    /**
     * Message shown in notification when capability unMuteMic is present
     */
    capabilityUnmuteMicPresent?: NotificationStrings;
    /**
     * Message shown in notification when capability unMuteMic is absent
     */
    capabilityUnmuteMicAbsent?: NotificationStrings;
}

/**
 * All strings that may be shown on the UI in the {@link Notification}.
 *
 * @public
 */
export declare interface NotificationStrings {
    /**
     * Notification bar title.
     */
    title: string;
    /**
     * Notification bar dismiss button aria label
     */
    dismissButtonAriaLabel?: string;
    /**
     * Notification bar message.
     */
    message?: string;
    /**
     * Notification bar primary button label
     */
    primaryButtonLabel?: string;
    /**
     * Notification bar secondary button label
     */
    secondaryButtonLabel?: string;
    /**
     * Notification bar link label
     */
    linkLabel?: string;
}

/**
 * Styles for the notification component.
 *
 * @public
 */
export declare interface NotificationStyles {
    /**
     * Styles for the primary button.
     */
    primaryButton?: IButtonStyles;
    /**
     * Styles for the secondary button.
     */
    secondaryButton?: IButtonStyles;
    /**
     * Styles for the root container.
     */
    root?: IStackStyles;
    /**
     * Styles for the notification title.
     */
    title?: IStackStyles;
    /**
     * Styles for the notification icon.
     */
    icon?: IIconStyles;
    /**
     * Styles for the notification content.
     */
    content?: IStackStyles;
    /**
     * Styles for the notification hyperlink.
     */
    link?: IStackStyles;
}

/** @public */
export declare type NotificationTarget = 'assignedBreakoutRoomOpened' | 'assignedBreakoutRoomOpenedPromptJoin' | 'assignedBreakoutRoomChanged' | 'assignedBreakoutRoomClosed' | 'breakoutRoomJoined' | 'breakoutRoomClosingSoon' | 'capabilityTurnVideoOnPresent' | 'capabilityTurnVideoOnAbsent' | 'capabilityUnmuteMicPresent' | 'capabilityUnmuteMicAbsent';

/**
 * All notifications that can be shown in the {@link NotificationStack}.
 *
 * @public
 */
export declare type NotificationType = keyof NotificationStackStrings;

/**
 * Callback function used to provide custom data to build profile for a user or bot.
 *
 * @public
 */
export declare type OnFetchProfileCallback = (userId: string, defaultProfile?: Profile) => Promise<Profile | undefined>;

/**
 * A custom rendered callback that allows users to customize the rendering of a Persona Component.
 *
 * @public
 */
export declare type OnRenderAvatarCallback = (
/**
 * An Communication user ID.
 */
userId?: string, options?: CustomAvatarOptions, 
/**
 * A default `onRender` component that can be used to render the default avatar.
 * Pass the `options` to the `onRender` component for default rendering.
 */
defaultOnRender?: (props: CustomAvatarOptions) => JSX.Element) => JSX.Element | undefined;

/**
 *
 * Dependency resolution for video background effects using lazy loading.
 * @public
 */
export declare const onResolveDeepNoiseSuppressionDependency: () => Promise<DeepNoiseSuppressionEffectDependency>;

/**
 *
 * Dependency resolution for video background effects using lazy loading.
 * @public
 */
export declare const onResolveDeepNoiseSuppressionDependencyLazy: () => Promise<DeepNoiseSuppressionEffectDependency>;

/**
 * Dependency resolution for video background effects.
 *
 * @public
 */
export declare const onResolveVideoEffectDependency: () => Promise<VideoBackgroundEffectsDependency>;

/**
 *
 * Dependency resolution for video background effects using lazy loading.
 * @public
 */
export declare const onResolveVideoEffectDependencyLazy: () => Promise<VideoBackgroundEffectsDependency>;

/**
 * State only version of Optimal Video Count Feature {@link @azure/communication-calling#OptimalVideoCountCallFeature}.
 *
 * @public
 */
export declare interface OptimalVideoCountFeatureState {
    /**
     * State of the current optimal video count.
     */
    maxRemoteVideoStreams: number;
}

/**
 * A device, e.g. camera, microphone, or speaker, in the {@link DevicesButton} flyout.
 *
 * @public
 */
export declare interface OptionsDevice {
    /**
     * Device unique identifier
     */
    id: string;
    /**
     * Device name
     */
    name: string;
}

/**
 * Props for the OutboundCallComposite that you can use in your application.
 *
 * Contains two options bags:
 * - adapterOptions: Options for the {@link AzureCommunicationCallAdapter}
 * - callCompositeOptions: Options for the {@link CallComposite} {@link CallCompositeOptions}
 *
 * @public
 */
export declare type OutboundCallCompositeLoaderProps = {
    userId: CommunicationUserIdentifier;
    credential: CommunicationTokenCredential;
    displayName: string;
    targetCallees: string[] | StartCallIdentifier[];
    callAdapterOptions?: AzureCommunicationCallAdapterOptions;
    callCompositeOptions?: CallCompositeOptions;
};

/**
 * Different modes and positions of the overflow gallery in the VideoGallery
 *
 * @public
 */
export declare type OverflowGalleryPosition = 'horizontalBottom' | 'verticalRight' | 'horizontalTop';

/**
 * A system message notifying that a participant was added to the chat thread.
 *
 * @public
 */
export declare interface ParticipantAddedSystemMessage extends SystemMessageCommon {
    systemMessageType: 'participantAdded';
    participants: CommunicationParticipant[];
}

/**
 * Component to render a calling or chat participant.
 *
 * Displays the participant's avatar, displayName and status as well as optional icons and context menu.
 *
 * @public
 */
export declare const ParticipantItem: (props: ParticipantItemProps) => JSX.Element;

/**
 * Props for {@link ParticipantItem}.
 *
 * @public
 */
export declare interface ParticipantItemProps {
    /** Unique User ID of the participant. This `userId` is available in the `onRenderAvatar` callback function */
    userId?: string;
    /** Name of participant. */
    displayName?: string;
    /** Optional indicator to show participant is the user. */
    me?: boolean;
    /** Optional callback returning a JSX element to override avatar. */
    onRenderAvatar?: OnRenderAvatarCallback;
    /** Optional array of IContextualMenuItem for contextual menu. */
    menuItems?: IContextualMenuItem[];
    /** Optional callback returning a JSX element rendered on the right portion of the ParticipantItem. Intended for adding icons. */
    onRenderIcon?: (props?: ParticipantItemProps) => JSX.Element | null;
    /** Optional PersonaPresence to show participant presence. This will not have an effect if property avatar is assigned. */
    presence?: PersonaPresence;
    /**
     * Allows users to pass in an object contains custom CSS styles.
     * @Example
     * ```
     * <ParticipantItem styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: ParticipantItemStyles;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<ParticipantItemStrings>;
    /**
     * Optional callback when component is clicked
     */
    onClick?: (props?: ParticipantItemProps) => void;
    /** Optional value to determine if the tooltip should be shown for participants or not */
    showParticipantOverflowTooltip?: boolean;
    /**
     * Optional value to determine and display a participants connection status.
     * For example, `Connecting`, `Ringing` etc.
     * The actual text that is displayed is determined by the localized string
     * corresponding to the provided participant state.
     * For example, `strings.participantStateConnecting` will be used if `participantState` is `Connecting`.
     */
    participantState?: ParticipantState;
    /**
     * Optional aria property that prefixes the ParticipantItems aria content
     * Takes in a unique id value of the element you would like to be read before the ParticipantItem.
     */
    ariaLabelledBy?: string;
}

/**
 * Strings of {@link ParticipantItem} that can be overridden.
 *
 * @public
 */
export declare interface ParticipantItemStrings {
    /** String shown when participant is me */
    isMeText: string;
    /** String shown when hovering over menu button */
    menuTitle: string;
    /** Label for the remove button in participant menu  */
    removeButtonLabel: string;
    /** Label for the sharing icon in participant state stack  */
    sharingIconLabel: string;
    /** Label for the muted icon in participant state stack  */
    mutedIconLabel: string;
    /** Label for the raised hand icon in participant state stack  */
    handRaisedIconLabel?: string;
    /** placeholder text for participants who does not have a display name*/
    displayNamePlaceholder?: string;
    /** String shown when `participantState` is `Ringing` */
    participantStateRinging?: string;
    /** String shown when `participantState` is `Hold` */
    participantStateHold?: string;
    /** Aria Label applied to the base element of the `participantItem` */
    participantItemAriaLabel?: string;
    /** Aria Label applied to the base element of the `participantItem` when there are more options present */
    participantItemWithMoreOptionsAriaLabel?: string;
    /** String for the attendee role */
    attendeeRole: string;
    /** Label for the disabled microphone icon in participant state stack  */
    micDisabledIconLabel: string;
    /** Label for the disabled camera icon in participant state stack  */
    cameraDisabledIconLabel: string;
}

/**
 * Fluent styles for {@link ParticipantItem}.
 *
 * @public
 */
export declare interface ParticipantItemStyles extends BaseCustomStyles {
    /** Styles for the avatar. */
    avatar?: IStyle;
    /** Styles for the (You) string. */
    me?: IStyle;
    /** Styles for the container of the icon. */
    iconContainer?: IStyle;
    /** Styles for the menu. */
    menu?: IStyle;
}

/**
 * Component to render all calling or chat participants.
 *
 * By default, each participant is rendered with {@link ParticipantItem}. See {@link ParticipantListProps.onRenderParticipant} to override.
 *
 * @public
 */
export declare const ParticipantList: (props: ParticipantListProps) => JSX.Element;

/**
 * Styles for the {@link ParticipantList} {@link ParticipantItem}.
 *
 * @public
 */
export declare interface ParticipantListItemStyles extends ParticipantItemStyles {
    /** Styles applied to the sub-menu of the {@link ParticipantList} {@link ParticipantItem}. */
    participantSubMenuItemsStyles?: IContextualMenuItemStyles;
}

/**
 * Participants displayed in a {@link ParticipantList}.
 *
 * @public
 */
export declare type ParticipantListParticipant = CommunicationParticipant & {
    /**
     * If true, local participant can remove this participant from the roster.
     */
    isRemovable: boolean;
};

/**
 * Props for {@link ParticipantList}.
 *
 * @public
 */
export declare type ParticipantListProps = {
    /** Participants in user call or chat */
    participants: ParticipantListParticipant[];
    /** User ID of user */
    myUserId?: string;
    /**
     * If set to `true`, excludes the local participant from the participant list with use of `myUserId` props (required in this case).
     *
     * @defaultValue `false`
     */
    excludeMe?: boolean;
    /** Optional callback to render each participant. If no callback is provided, each participant will be rendered with `ParticipantItem`  */
    onRenderParticipant?: (participant: ParticipantListParticipant) => JSX.Element | null;
    /** Optional callback to render the avatar for each participant. This property will have no effect if `onRenderParticipant` is assigned.  */
    onRenderAvatar?: OnRenderAvatarCallback;
    /** Optional callback to render the context menu for each participant  */
    onRemoveParticipant?: (userId: string) => void;
    /** Optional callback to render custom menu items for each participant. */
    onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;
    /** Optional callback when rendered ParticipantItem is clicked */
    onParticipantClick?: (participant?: ParticipantListParticipant) => void;
    /** Optional callback to render a context menu to mute a participant */
    onMuteParticipant?: (userId: string) => Promise<void>;
    styles?: ParticipantListStyles;
    /** Optional value to determine if the tooltip should be shown for participants or not */
    showParticipantOverflowTooltip?: boolean;
    /** Optional aria-labelledby prop that prefixes each ParticipantItem aria-label */
    participantAriaLabelledBy?: string;
    /** List of pinned participants */
    pinnedParticipants?: string[];
};

/**
 * Selector type for {@link ParticipantList} component.
 *
 * @public
 */
export declare type ParticipantListSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    participants: CallParticipantListParticipant[];
    myUserId: string;
};

/**
 * Styles for the {@link ParticipantList}.
 *
 * @public
 */
export declare interface ParticipantListStyles extends BaseCustomStyles {
    /** Styles for the {@link ParticipantList} {@link ParticipantItem}. */
    participantItemStyles?: ParticipantListItemStyles;
}

/**
 * A callback for providing custom menu items for each participant in {@link ParticipantList}.
 *
 * @public
 */
export declare type ParticipantMenuItemsCallback = (participantUserId: string, userId?: string, defaultMenuItems?: IContextualMenuItem[]) => IContextualMenuItem[];

/**
 * A system message notifying that a participant was removed from the chat thread.
 *
 * @public
 */
export declare interface ParticipantRemovedSystemMessage extends SystemMessageCommon {
    systemMessageType: 'participantRemoved';
    participants: CommunicationParticipant[];
}

/**
 * Callback for {@link ChatAdapterSubscribers} 'participantsAdded' event.
 *
 * @public
 */
export declare type ParticipantsAddedListener = (event: {
    participantsAdded: ChatParticipant[];
    addedBy: ChatParticipant;
}) => void;

/**
 * A button to show a menu with calling or chat participants.
 *
 * Can be used with {@link ControlBar}.
 *
 * This button contains dropdown menu items defined through its property `menuProps`. By default, it can display the number of remote participants with the full list
 * as sub-menu and an option to mute all participants, as well as a copy-to-clipboard button to copy the call invitation URL.
 * This `menuProps` can be fully redefined and its property is of type [IContextualMenuProps](https://developer.microsoft.com/fluentui#/controls/web/contextualmenu#IContextualMenuProps).
 *
 * @public
 */
export declare const ParticipantsButton: (props: ParticipantsButtonProps) => JSX.Element;

/**
 * Styles for the {@link ParticipantsButton} menu.
 *
 * @public
 */
export declare interface ParticipantsButtonContextualMenuStyles extends IContextualMenuStyles {
    /** Styles for the {@link ParticipantsButton} menu items. */
    menuItemStyles?: IContextualMenuItemStyles;
    /** Styles for the {@link ParticipantList} menu item inside the {@link ParticipantsButton} menu. */
    participantListStyles?: ParticipantListStyles;
}

/**
 * Props for {@link ParticipantsButton}.
 *
 * @public
 */
export declare interface ParticipantsButtonProps extends ControlBarButtonProps {
    /**
     * Participants in user call or chat
     */
    participants: ParticipantListParticipant[];
    /**
     * User ID of user
     */
    myUserId?: string;
    /**
     * If set to `true`, excludes the local participant from the participant list with use of `myUserId` props (required in this case).
     *
     * @defaultValue `false`
     */
    excludeMe?: boolean;
    /**
     * Callback to render each participant. If no callback is provided, each participant will be rendered with `ParticipantItem`
     */
    onRenderParticipant?: (participant: CommunicationParticipant) => JSX.Element | null;
    /**
     * Callback to render the avatar for each participant. This property will have no effect if `onRenderParticipant` is assigned.
     */
    onRenderAvatar?: OnRenderAvatarCallback;
    /**
     * Callback to render the context menu for each participant
     */
    onRemoveParticipant?: (userId: string) => void;
    /**
     * Callback to render custom menu items for each participant.
     */
    onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;
    /**
     * Optional callback to render a custom participant list.
     */
    onRenderParticipantList?: (props: ParticipantListProps) => JSX.Element | null;
    /**
     * Allows users to pass an object containing custom CSS styles.
     * @Example
     * ```
     * <ParticipantsButton styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: ParticipantsButtonStyles;
    /**
     * URL to invite new participants to the current call
     */
    callInvitationURL?: string;
    /**
     * CallBack to mute all remote participants
     */
    onMuteAll?: () => void;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<ParticipantsButtonStrings>;
    /** Optional value to determine if the tooltip should be shown for participants or not */
    showParticipantOverflowTooltip?: boolean;
}

/**
 * Selector type for {@link ParticipantsButton} component.
 *
 * @public
 */
export declare type ParticipantsButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    participants: CallParticipantListParticipant[];
    myUserId: string;
};

/**
 * Strings of {@link ParticipantsButton} that can be overridden.
 *
 * @public
 */
export declare interface ParticipantsButtonStrings {
    /**
     * Label of button
     */
    label: string;
    /**
     * Button tooltip content.
     */
    tooltipContent?: string;
    /**
     * Aria label for button accessibility announcement
     */
    ariaLabel?: string;
    /**
     * Header of menu pop up
     */
    menuHeader: string;
    /**
     * Label of menu button to show list of participants. Placeholders: [numParticipants]
     */
    participantsListButtonLabel: string;
    /**
     * Label of menu button to copy invite link
     */
    copyInviteLinkButtonLabel: string;
    /**
     * Label of menu button to mute all participants
     */
    muteAllButtonLabel: string;
    /**
     * Narrator announcement for when the invite link has been copied by the user to the clipboard
     */
    copyInviteLinkActionedAriaLabel: string;
}

/**
 * Styles Props for {@link ParticipantsButton}.
 *
 * @public
 */
export declare interface ParticipantsButtonStyles extends ControlBarButtonStyles {
    /** Styles of the {@link ParticipantsButton} menu flyout */
    menuStyles?: Partial<ParticipantsButtonContextualMenuStyles>;
}

/**
 * Callback for {@link CallAdapterSubscribers} 'participantsJoined' event.
 *
 * @public
 */
export declare type ParticipantsJoinedListener = (event: {
    joined: RemoteParticipant[];
}) => void;

/**
 * Callback for {@link CallAdapterSubscribers} 'participantsLeft' event.
 *
 * @public
 */
export declare type ParticipantsLeftListener = (event: {
    removed: RemoteParticipant[];
}) => void;

/**
 * Callback for {@link ChatAdapterSubscribers} 'participantsRemoved' event.
 *
 * @public
 */
export declare type ParticipantsRemovedListener = (event: {
    participantsRemoved: ChatParticipant[];
    removedBy: ChatParticipant;
}) => void;

/**
 * @public
 * The connection state of a call participant.
 */
export declare type ParticipantState = 'Idle' | 'Connecting' | 'Ringing' | 'Connected' | 'Hold' | 'InLobby' | 'EarlyMedia' | 'Disconnected' | 'Reconnecting';

/**
 * State only version of {@link @azure/communication-calling#PPTLiveCallFeature}. {@link StatefulCallClient} will
 * automatically listen for pptLive on the call and update the state exposed by {@link StatefulCallClient} accordingly.
 *
 * @public
 */
export declare interface PPTLiveCallFeatureState {
    /**
     * Proxy of {@link @azure/communication-calling#PPTLiveCallFeature.isActive}.
     */
    isActive: boolean;
}

/**
 * The profile of a user or bot.
 *
 * @public
 */
export declare type Profile = {
    /**
     * Primary text to display, usually the name of the person.
     */
    displayName?: string;
};

/**
 * Raised hand state with order
 *
 * @public
 */
export declare type RaisedHand = {
    raisedHandOrderPosition: number;
};

/**
 * Raised hand state with order
 *
 * @public
 */
export declare type RaisedHandState = {
    raisedHandOrderPosition: number;
};

/**
 * A button to start / stop screen sharing.
 *
 * Can be used with {@link ControlBar}.
 *
 * @public
 */
export declare const RaiseHandButton: (props: RaiseHandButtonProps) => JSX.Element;

/**
 * Props for {@link RaiseHandButton}.
 *
 * @public
 */
export declare interface RaiseHandButtonProps extends ControlBarButtonProps {
    /**
     * Utility property for using this component with `communication react eventHandlers`.
     * Maps directly to the `onClick` property.
     */
    onToggleRaiseHand?: () => Promise<void>;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<RaiseHandButtonStrings>;
}

/**
 * Selector type for {@link RaiseHandButton} component.
 *
 * @public
 */
export declare type RaiseHandButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    checked?: boolean;
    disabled?: boolean;
};

/**
 * Strings of {@link RaiseHandButton} that can be overridden.
 *
 * @public
 */
export declare interface RaiseHandButtonStrings {
    /** Label when button is on. */
    onLabel: string;
    /** Label when button is off. */
    offLabel: string;
    /** * Tooltip content when the button is disabled. */
    tooltipDisabledContent?: string;
    /** Tooltip content when the button is on. */
    tooltipOnContent?: string;
    /** Tooltip content when the button is off. */
    tooltipOffContent?: string;
}

/**
 * State only version of {@link @azure/communication-calling#RaiseHandCallFeature}. {@link StatefulCallClient} will
 * automatically listen for raised hands on the call and update the state exposed by {@link StatefulCallClient} accordingly.
 *
 * @public
 */
export declare interface RaiseHandCallFeature {
    /**
     * Proxy of {@link @azure/communication-calling#RaiseHandCallFeature.raisedHands}.
     */
    raisedHands: RaisedHandState[];
    /**
     * Contains information for local participant from list {@link @azure/communication-calling#RaiseHandCallFeature.raisedHands}.
     */
    localParticipantRaisedHand?: RaisedHandState;
}

/**
 * Reaction state with reaction type to render
 *
 * @public
 */
export declare type Reaction = {
    /**
     * Specifies the type of reaction videoTile should render i.e. like, heart etc.
     */
    reactionType: string;
    /**
     * Received timestamp for the message as default Date format.
     */
    receivedOn: Date;
};

/**
 * A button to send reactions.
 *
 * Can be used with {@link ControlBar}.
 *
 * @public
 */
export declare const ReactionButton: (props: ReactionButtonProps) => JSX.Element;

/**
 * Props for {@link ReactionButton}.
 *
 * @public
 */
export declare interface ReactionButtonProps extends ControlBarButtonProps {
    /**
     * Optional strings to override in component
     */
    strings?: Partial<ReactionButtonStrings>;
    /**
     * Click event to send reaction to meeting
     */
    onReactionClick: (reaction: ReactionButtonReaction) => Promise<void>;
    /**
     * Reaction resource locator and parameters
     */
    reactionResources: ReactionResources;
}

/**
 * Reactions types for the Reaction button
 * @public
 */
export declare type ReactionButtonReaction = 'like' | 'heart' | 'applause' | 'laugh' | 'surprised';

/**
 * Strings of {@link ReactionButton} that can be overridden.
 *
 * @public
 */
export declare interface ReactionButtonStrings {
    /** Label of the button. */
    label: string;
    /** Aria label for reaction button accessibility announcement */
    ariaLabel: string;
    /** Tooltip content when the button is disabled. */
    tooltipDisabledContent?: string;
    /** Tooltip content when the button is enabled. */
    tooltipContent?: string;
    /** Tooltip content of like reaction button. */
    likeReactionTooltipContent?: string;
    /** Tooltip content of heart reaction button. */
    heartReactionTooltipContent?: string;
    /** Tooltip content of clap reaction button. */
    applauseReactionTooltipContent?: string;
    /** Tooltip content of laugh reaction button. */
    laughReactionTooltipContent?: string;
    /** Tooltip content of surprised reaction button. */
    surprisedReactionTooltipContent?: string;
}

/**
 * Interface for animation sprite image and related metadata
 * @public
 */
export declare interface ReactionResources {
    /**
     * Like reaction animation resource.
     */
    likeReaction?: ReactionSprite;
    /**
     * Heart reaction animation resource.
     */
    heartReaction?: ReactionSprite;
    /**
     * Laugh reaction animation resource.
     */
    laughReaction?: ReactionSprite;
    /**
     * Applause reaction animation resource.
     */
    applauseReaction?: ReactionSprite;
    /**
     * Surprised reaction animation resource.
     */
    surprisedReaction?: ReactionSprite;
}

/**
 * Type for animation sprite image and related metadata
 * @public
 */
export declare type ReactionSprite = {
    /**
     * Path to animation sprite image for reaction.
     */
    url: string;
    /**
     * The frame count of the resource reaction in the sprite image
     */
    frameCount: number;
};

/**
 * State only version of {@link @azure/communication-calling#Call.ReactionMessage} with UI helper props receivedOn.
 * Reaction state with a timestamp which helps UI to decide to render the reaction accordingly.
 *
 * @public
 */
export declare type ReactionState = {
    /**
     * Reaction message from the meeting {@link @azure/communication-calling#Call.ReactionMessage}
     */
    reactionMessage: ReactionMessage;
    /**
     * Received timestamp of the reaction message in a meeting.
     */
    receivedOn: Date;
};

/**
 * An array of key value pairs that stores each sender's display name and last read message
 *
 * @public
 */
export declare type ReadReceiptsBySenderId = {
    [key: string]: {
        lastReadMessage: string;
        displayName: string;
    };
};

/**
 * State only version of {@link @azure/communication-calling#RecordingCallFeature}. {@link StatefulCallClient} will
 * automatically listen for recording state of the call and update the state exposed by {@link StatefulCallClient} accordingly.
 *
 * @public
 */
export declare interface RecordingCallFeature {
    /**
     * Proxy of {@link @azure/communication-calling#RecordingCallFeature.isRecordingActive}.
     */
    isRecordingActive: boolean;
}

/**
 * State only version of {@link @azure/communication-calling#RemoteParticipant}. {@link StatefulCallClient} will
 * automatically retrieve RemoteParticipants and add their state to the state exposed by {@link StatefulCallClient}.
 *
 * @public
 */
export declare interface RemoteParticipantState {
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.identifier}.
     */
    identifier: CommunicationIdentifierKind;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.displayName}.
     */
    displayName?: string;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.state}.
     */
    state: RemoteParticipantState_2;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.callEndReason}.
     */
    callEndReason?: CallEndReason;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.videoStreams} as an object with
     * {@link RemoteVideoStream} fields keyed by {@link @azure/communication-calling#RemoteVideoStream.id}.
     */
    videoStreams: {
        [key: number]: RemoteVideoStreamState;
    };
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.isMuted}.
     */
    isMuted: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.isSpeaking}.
     */
    isSpeaking: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteParticipant.role}.
     */
    role?: ParticipantRole;
    /**
     * Proxy of {@link @azure/communication-calling#Call.RaisedHand.raisedHands}.
     */
    raisedHand?: RaisedHandState;
    /**
     * Proxy of {@link @azure/communication-calling#Call.PPTLive.target}.
     *
     * @public
     */
    contentSharingStream?: HTMLElement;
    /**
     * Proxy of {@link @azure/communication-calling#Call.ReactionMessage} with
     * UI helper props receivedOn which indicates the timestamp when the message was received.
     *
     * @public
     */
    reactionState?: ReactionState;
    /**
     * Proxy of {@link @azure/communication-calling#SpotlightCallFeature.spotlightedParticipants}.
     */
    spotlight?: SpotlightState;
    /**
     * Proxy of {@link @azure/communication-calling#Call.MediaAccessCallFeature.MediaAccess}.
     */
    mediaAccess?: MediaAccessState;
}

/**
 * State only version of {@link @azure/communication-calling#RemoteVideoStream}.
 *
 * @public
 */
export declare interface RemoteVideoStreamState {
    /**
     * Proxy of {@link @azure/communication-calling#RemoteVideoStream.id}.
     */
    id: number;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteVideoStream.mediaStreamType}.
     */
    mediaStreamType: MediaStreamType;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteVideoStream.isAvailable}.
     */
    isAvailable: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteVideoStream.isReceiving}.
     * @public
     */
    isReceiving: boolean;
    /**
     * {@link VideoStreamRendererView} that is managed by createView/disposeView in {@link StatefulCallClient}
     * API. This can be undefined if the stream has not yet been rendered and defined after createView creates the view.
     */
    view?: VideoStreamRendererViewState;
    /**
     * Proxy of {@link @azure/communication-calling#RemoteVideoStream.size}.
     */
    streamSize?: {
        width: number;
        height: number;
    };
}

/**
 * Menu options for remote video tiles in {@link VideoGallery}.
 *
 * @public
 */
export declare interface RemoteVideoTileMenuOptions {
    /**
     * If set to true, remote video tiles in the VideoGallery will not have menu options
     *
     * @defaultValue false
     */
    isHidden?: boolean;
}

/**
 * Details required for download a resource to cache.
 *
 * @public
 */
export declare type ResourceDetails = {
    threadId: string;
    messageId: string;
    resourceUrl: string;
};

/**
 * Result of the Resource downloaded from stateful client
 * @public
 */
export declare type ResourceFetchResult = {
    sourceUrl?: string;
    error?: Error;
};

/**
 * A button to start / stop screen sharing.
 *
 * Can be used with {@link ControlBar}.
 *
 * @public
 */
export declare const ScreenShareButton: (props: ScreenShareButtonProps) => JSX.Element;

/**
 * Props for {@link ScreenShareButton}.
 *
 * @public
 */
export declare interface ScreenShareButtonProps extends ControlBarButtonProps {
    /**
     * Utility property for using this component with `communication react eventHandlers`.
     * Maps directly to the `onClick` property.
     */
    onToggleScreenShare?: () => Promise<void>;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<ScreenShareButtonStrings>;
}

/**
 * Selector type for {@link ScreenShareButton} component.
 *
 * @public
 */
export declare type ScreenShareButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    checked?: boolean;
    disabled?: boolean;
};

/**
 * Strings of {@link ScreenShareButton} that can be overridden.
 *
 * @public
 */
export declare interface ScreenShareButtonStrings {
    /** Label when button is on. */
    onLabel: string;
    /** Label when button is off. */
    offLabel: string;
    /** * Tooltip content when the button is disabled. */
    tooltipDisabledContent?: string;
    /** Tooltip content when the button is on. */
    tooltipOnContent?: string;
    /** Tooltip content when the button is off. */
    tooltipOffContent?: string;
}

/**
 * An optimized selector that refines {@link ClientState} updates into props for React Components in this library.
 *
 * @public
 */
export declare type Selector = (state: ClientState, props: any) => any;

/**
 * Component for typing and sending messages.
 *
 * Supports sending typing notification when user starts entering text.
 * Supports an optional message below the text input field.
 *
 * @public
 */
export declare const SendBox: (props: SendBoxProps) => JSX.Element;

/**
 * Props for {@link SendBox}.
 *
 * @public
 */
export declare interface SendBoxProps {
    /**
     * Optional boolean to disable text box
     * @defaultValue false
     */
    disabled?: boolean;
    /**
     * Optional text for system message below text box
     */
    systemMessage?: string;
    /**
     * Optional override behavior on send button click
     */
    onSendMessage?: (content: string) => Promise<void>;
    /**
     * Optional callback called when user is typing
     */
    onTyping?: () => Promise<void>;
    /**
     * Optional callback to render system message below the SendBox.
     * @defaultValue MessageBar
     */
    onRenderSystemMessage?: (systemMessage: string | undefined) => React_2.ReactElement;
    /**
     * Optional boolean to support new line in SendBox.
     * @defaultValue false
     */
    supportNewline?: boolean;
    /**
     * Optional callback to render send button icon to the right of the SendBox.
     * @defaultValue SendBoxSendHovered icon when mouse over icon and SendBoxSend icon otherwise
     */
    onRenderIcon?: (isHover: boolean) => JSX.Element;
    /**
     * Allows users to pass in an object contains custom CSS styles.
     * @Example
     * ```
     * <SendBox styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: SendBoxStylesProps;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<SendBoxStrings>;
    /**
     * enumerable to determine if the input box has focus on render or not.
     * When undefined nothing has focus on render
     */
    autoFocus?: 'sendBoxTextField';
}

/**
 * Selector type for {@link SendBox} component.
 *
 * @public
 */
export declare type SendBoxSelector = (state: ChatClientState, props: ChatBaseSelectorProps) => {
    displayName: string;
    userId: string;
};

/**
 * Strings of {@link SendBox} that can be overridden.
 *
 * @public
 */
export declare interface SendBoxStrings {
    /**
     * Placeholder text in SendBox when there is no user input
     */
    placeholderText: string;
    /**
     * The warning message when send box text length is more than max limit
     */
    textTooLong: string;
    /**
     * Aria label for send message button
     */
    sendButtonAriaLabel: string;
}

/**
 * Fluent styles for {@link Sendbox}.
 *
 * @public
 */
export declare interface SendBoxStylesProps extends BaseCustomStyles {
    /** Styles for the text field. */
    textField?: IStyle;
    /** styles for the text field container */
    textFieldContainer?: IStyle;
    /** Styles for the container of the send message icon. */
    sendMessageIconContainer?: IStyle;
    /** Styles for the send message icon; These styles will be ignored when a custom send message icon is provided. */
    sendMessageIcon?: IStyle;
    /** Styles for the system message; These styles will be ignored when a custom system message component is provided. */
    systemMessage?: IStyle;
}

/**
 * @public
 * Type for representing a custom sound to use for a calling event
 */
export declare type SoundEffect = {
    /**
     * Path to sound effect
     */
    url: string;
};

/**
 * @public
 * spoken language strings for captions setting modal
 */
export declare interface SpokenLanguageStrings {
    'ar-ae': string;
    'ar-sa': string;
    'da-dk': string;
    'de-de': string;
    'en-au': string;
    'en-ca': string;
    'en-gb': string;
    'en-in': string;
    'en-nz': string;
    'en-us': string;
    'es-es': string;
    'es-mx': string;
    'fi-fi': string;
    'fr-ca': string;
    'fr-fr': string;
    'hi-in': string;
    'it-it': string;
    'ja-jp': string;
    'ko-kr': string;
    'nb-no': string;
    'nl-be': string;
    'nl-nl': string;
    'pl-pl': string;
    'pt-br': string;
    'ru-ru': string;
    'sv-se': string;
    'zh-cn': string;
    'zh-hk': string;
    'cs-cz': string;
    'pt-pt': string;
    'tr-tr': string;
    'vi-vn': string;
    'th-th': string;
    'he-il': string;
    'cy-gb': string;
    'uk-ua': string;
    'el-gr': string;
    'hu-hu': string;
    'ro-ro': string;
    'sk-sk': string;
    'zh-tw': string;
}

/**
 * Spotlight state with order
 *
 * @public
 */
export declare type Spotlight = {
    /**
     * Specifies the order position of the spotlight
     */
    spotlightedOrderPosition?: number;
};

/**
 * State only version of {@link @azure/communication-calling#SpotlightCallFeature}
 *
 * @public
 */
export declare interface SpotlightCallFeatureState {
    /**
     * Ordered array of spotlighted participants in call
     */
    spotlightedParticipants: SpotlightedParticipant[];
    /**
     * Local participant spotlight
     */
    localParticipantSpotlight?: SpotlightState;
    /**
     * Proxy of {@link @azure/communication-calling#SpotlightCallFeature.maxParticipantsToSpotlight}.
     */
    maxParticipantsToSpotlight: number;
}

/**
 * Callback for {@link CallAdapterSubscribers} 'spotlightChanged' event.
 *
 * @public
 */
export declare type SpotlightChangedListener = (args: {
    added: SpotlightedParticipant[];
    removed: SpotlightedParticipant[];
}) => void;

/**
 * Strings used in prompt related to spotlight
 * @public
 */
export declare interface SpotlightPromptStrings {
    /**
     * Heading for prompt when starting spotlight on participant
     */
    startSpotlightHeading: string;
    /**
     * Text for prompt when starting spotlight on participant
     */
    startSpotlightText: string;
    /**
     * Label for button to confirm starting spotlight on local user in prompt
     */
    startSpotlightOnSelfText: string;
    /**
     * Label for button to confirm starting spotlight on participant in prompt
     */
    startSpotlightConfirmButtonLabel: string;
    /**
     * Label for button to cancel starting spotlight on participant in prompt
     */
    startSpotlightCancelButtonLabel: string;
    /**
     * Heading for prompt when stopping spotlight on participant
     */
    stopSpotlightHeading: string;
    /**
     * Heading for prompt when stopping spotlight on local user
     */
    stopSpotlightOnSelfHeading: string;
    /**
     * Heading for prompt when stopping all spotlight
     */
    stopAllSpotlightHeading: string;
    /**
     * Text for prompt when stopping spotlight on participant
     */
    stopSpotlightText: string;
    /**
     * Text for prompt when stopping spotlight on local user
     */
    stopSpotlightOnSelfText: string;
    /**
     * Text for prompt when stopping all spotlight
     */
    stopAllSpotlightText: string;
    /**
     * Label for button to confirm stopping spotlight on participant(s) in prompt
     */
    stopSpotlightConfirmButtonLabel: string;
    /**
     * Label for button to confirm stopping spotlight on local user in prompt
     */
    stopSpotlightOnSelfConfirmButtonLabel: string;
    /**
     * Label for button to cancel stopping spotlight on participant(s) in prompt
     */
    stopSpotlightCancelButtonLabel: string;
    /**
     * Label for button to close prompt
     */
    closeSpotlightPromptButtonLabel: string;
}

/**
 * Spotlight state with order
 *
 * @public
 */
export declare interface SpotlightState {
    /**
     * Order position of spotlight in call
     */
    spotlightedOrderPosition?: number;
}

/**
 * Identifier types for initiating a call using the CallAdapter
 * @public
 */
export declare type StartCallIdentifier = CommunicationIdentifier;

/**
 * Options passed to adapter.startCaptions
 *
 * @public
 */
export declare interface StartCaptionsAdapterOptions extends StartCaptionsOptions {
    /**
     * Start captions in the background without showing the captions UI to the Composite user.
     *
     * @defaultValue false
     */
    startInBackground?: boolean;
}

/**
 * a button to start or stop captions
 *
 * Can be used with {@link ControlBar}
 *
 * @param props - properties for the start captions button.
 * @public
 */
export declare const StartCaptionsButton: (props: StartCaptionsButtonProps) => JSX.Element;

/**
 * @public
 */
export declare interface StartCaptionsButtonProps extends ControlBarButtonProps {
    /**
     * Utility property for using this component with communication react handlers
     * Start captions based on captions state
     */
    onStartCaptions: (options?: CaptionsOptions) => Promise<void>;
    /**
     * Utility property for using this component with communication react handlers
     * Stop captions based on captions state
     */
    onStopCaptions: () => Promise<void>;
    /**
     * Utility property for using this component with communication react handlers
     * set captions spoken language
     */
    onSetSpokenLanguage: (language: string) => Promise<void>;
    /**
     * Spoken language set for starting captions
     */
    currentSpokenLanguage: string;
    /**
     * Optional strings to override in component
     */
    strings?: StartCaptionsButtonStrings;
}

/**
 * Selector type for the {@link StartCaptionsButton} component.
 * @public
 */
export declare type StartCaptionsButtonSelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    checked: boolean;
    currentCaptionLanguage: string;
    currentSpokenLanguage: string;
};

/**
 * Strings for the hold button labels
 * @public
 */
export declare interface StartCaptionsButtonStrings {
    /**
     * Label for when action is to start Captions
     */
    onLabel: string;
    /**
     * Label for when action is to stop Captions
     */
    offLabel: string;
    /**
     * Content for when button is checked, captions is on
     */
    tooltipOnContent: string;
    /**
     * Content for when button is unchecked, captions is off
     */
    tooltipOffContent: string;
}

/**
 * Defines the methods that allow CallClient {@link @azure/communication-calling#CallClient} to be used statefully.
 * The interface provides access to proxied state and also allows registering a handler for state change events. For
 * state definition see {@link CallClientState}.
 *
 * State change events are driven by:
 * - Returned data from {@link @azure/communication-calling#DeviceManager} APIs.
 * - Returned data from {@link @azure/communication-calling#CallAgent} APIs.
 * - Listeners automatically attached to various azure communication-calling objects:
 *   - CallAgent 'incomingCall'
 *   - CallAgent 'callsUpdated'
 *   - DeviceManager 'videoDevicesUpdated'
 *   - DeviceManager 'audioDevicesUpdated
 *   - DeviceManager 'selectedMicrophoneChanged'
 *   - DeviceManager 'selectedSpeakerChanged'
 *   - Call 'stateChanged'
 *   - Call 'idChanged'
 *   - Call 'isMutedChanged'
 *   - Call 'isScreenSharingOnChanged'
 *   - Call 'remoteParticipantsUpdated'
 *   - Call 'localVideoStreamsUpdated'
 *   - IncomingCall 'callEnded'
 *   - RemoteParticipant 'stateChanged'
 *   - RemoteParticipant 'isMutedChanged'
 *   - RemoteParticipant 'displayNameChanged'
 *   - RemoteParticipant 'isSpeakingChanged'
 *   - RemoteParticipant 'videoStreamsUpdated'
 *   - RemoteVideoStream 'isAvailableChanged'
 *   - TranscriptionCallFeature 'isTranscriptionActiveChanged'
 *   - RecordingCallFeature 'isRecordingActiveChanged'
 *   - LocalRecordingCallFeature 'isLocalRecordingActiveChanged'
 *   - RaiseHandCallFeature 'raisedHandEvent'
 *   - RaiseHandCallFeature 'loweredHandEvent'
 *   - PPTLiveCallFeature 'isAciveChanged'
 *   - ReactionCallFeature 'reaction'
 *
 * @public
 */
export declare interface StatefulCallClient extends CallClient {
    /**
     * Holds all the state that we could proxy from CallClient {@link @azure/communication-calling#CallClient} as
     * CallClientState {@link CallClientState}.
     */
    getState(): CallClientState;
    /**
     * Allows a handler to be registered for 'stateChanged' events.
     *
     * @param handler - Callback to receive the state.
     */
    onStateChange(handler: (state: CallClientState) => void): void;
    /**
     * Allows unregistering for 'stateChanged' events.
     *
     * @param handler - Original callback to be unsubscribed.
     */
    offStateChange(handler: (state: CallClientState) => void): void;
    /**
     * Renders a {@link RemoteVideoStreamState} or {@link LocalVideoStreamState} and stores the resulting
     * {@link VideoStreamRendererViewState} under the relevant {@link RemoteVideoStreamState} or
     * {@link LocalVideoStreamState} or as unparented view in the state. Under the hood calls
     * {@link @azure/communication-calling#VideoStreamRenderer.createView}.
     *
     * Scenario 1: Render RemoteVideoStreamState
     * - CallId is required, participantId is required, and stream of type RemoteVideoStreamState is required
     * - Resulting {@link VideoStreamRendererViewState} is stored in the given callId and participantId in
     * {@link CallClientState}
     *
     * Scenario 2: Render LocalVideoStreamState for a call
     * - CallId is required, participantId must be undefined, and stream of type LocalVideoStreamState is required.
     * - The {@link @azure/communication-calling#Call.localVideoStreams} must already be started using
     *   {@link @azure/communication-calling#Call.startVideo}.
     * - Resulting {@link VideoStreamRendererViewState} is stored in the given callId {@link CallState.localVideoStreams}
     *   in {@link CallClientState}.
     *
     * - Scenario 2: Render LocalVideoStreamState not part of a call (example rendering camera for local preview)
     * - CallId must be undefined, participantId must be undefined, and stream of type LocalVideoStreamState is required.
     * - Resulting {@link VideoStreamRendererViewState} is stored in under the given LocalVideoStreamState in
     *   {@link CallClientState.deviceManager.unparentedViews}
     *
     * @param callId - CallId for the given stream. Can be undefined if the stream is not part of any call.
     * @param participantId - {@link RemoteParticipant.identifier} associated with the given RemoteVideoStreamState. Could
     *   be undefined if rendering LocalVideoStreamState.
     * @param stream - The LocalVideoStreamState or RemoteVideoStreamState to start rendering.
     * @param options - Options that are passed to the {@link @azure/communication-calling#VideoStreamRenderer}.
     */
    createView(callId: string | undefined, participantId: CommunicationIdentifier | undefined, stream: LocalVideoStreamState | RemoteVideoStreamState, options?: CreateViewOptions): Promise<CreateViewResult | undefined>;
    /**
     * Stops rendering a {@link RemoteVideoStreamState} or {@link LocalVideoStreamState} and removes the
     * {@link VideoStreamRendererView} from the relevant {@link RemoteVideoStreamState} in {@link CallClientState} or
     * {@link LocalVideoStream} in {@link CallClientState} or appropriate
     * {@link CallClientState.deviceManager.unparentedViews} Under the hood calls
     * {@link @azure/communication-calling#VideoStreamRenderer.dispose}.
     *
     * Its important to disposeView to clean up resources properly.
     *
     * Scenario 1: Dispose RemoteVideoStreamState
     * - CallId is required, participantId is required, and stream of type RemoteVideoStreamState is required
     *
     * Scenario 2: Dispose LocalVideoStreamState for a call
     * - CallId is required, participantId must be undefined, and stream of type LocalVideoStreamState is required.
     *
     * - Scenario 2: Dispose LocalVideoStreamState not part of a call
     * - CallId must be undefined, participantId must be undefined, and stream of type LocalVideoStreamState is required.
     * - LocalVideoStreamState must be the original one passed to createView.
     *
     * @param callId - CallId for the given stream. Can be undefined if the stream is not part of any call.
     * @param participantId - {@link RemoteParticipant.identifier} associated with the given RemoteVideoStreamState. Could
     *   be undefined if disposing LocalVideoStreamState.
     * @param stream - The LocalVideoStreamState or RemoteVideoStreamState to dispose.
     */
    disposeView(callId: string | undefined, participantId: CommunicationIdentifier | undefined, stream: LocalVideoStreamState | RemoteVideoStreamState): void;
    /**
     * The CallAgent is used to handle calls.
     * To create the CallAgent, pass a CommunicationTokenCredential object provided from SDK.
     * - The CallClient can only have one active CallAgent instance at a time.
     * - You can create a new CallClient instance to create a new CallAgent.
     * - You can dispose of a CallClient's current active CallAgent, and call the CallClient's
     *   createCallAgent() method again to create a new CallAgent.
     * @param tokenCredential - The token credential. Use AzureCommunicationTokenCredential from `@azure/communication-common` to create a credential.
     * @param options - The CallAgentOptions for additional options like display name.
     * @public
     */
    createCallAgent(...args: Parameters<CallClient['createCallAgent']>): Promise<DeclarativeCallAgent>;
    /**
     * The TeamsCallAgent is used to handle calls.
     * To create the TeamsCallAgent, pass a CommunicationTokenCredential object provided from SDK.
     * - The CallClient can only have one active TeamsCallAgent instance at a time.
     * - You can create a new CallClient instance to create a new TeamsCallAgent.
     * - You can dispose of a CallClient's current active TeamsCallAgent, and call the CallClient's
     *   createTeamsCallAgent() method again to create a new TeamsCallAgent.
     * @param tokenCredential - The token credential. Use AzureCommunicationTokenCredential from `@azure/communication-common` to create a credential.
     * @param options - The TeamsCallAgentOptions for additional options like display name.
     * @public
     */
    createTeamsCallAgent(...args: Parameters<CallClient['createTeamsCallAgent']>): Promise<DeclarativeTeamsCallAgent>;
}

/**
 * Arguments to construct the StatefulCallClient.
 *
 * @public
 */
export declare type StatefulCallClientArgs = {
    /**
     * UserId from SDK. This is provided for developer convenience to easily access the userId from the
     * state. It is not used by StatefulCallClient.
     */
    userId: CommunicationUserIdentifier | MicrosoftTeamsUserIdentifier;
};

/**
 * Options to construct the StatefulCallClient with.
 *
 * @public
 */
export declare type StatefulCallClientOptions = {
    /**
     * Options to construct the {@link @axure/communication-calling#CallClient} with.
     */
    callClientOptions: CallClientOptions;
    /**
     * Sets the max listeners limit of the 'stateChange' event. Defaults to the node.js EventEmitter.defaultMaxListeners
     * if not specified.
     */
    maxStateChangeListeners?: number;
};

/**
 * Defines the methods that allow {@Link @azure/communication-chat#ChatClient} to be used with a centralized generated state.
 *
 * The interface provides access to proxied state and also allows registering a handler for state change events.
 *
 * @public
 */
export declare interface StatefulChatClient extends ChatClient {
    /**
     * Cleans up the resource cache from the chat thread client.
     */
    dispose(): void;
    /**
     * Holds all the state that we could proxy from ChatClient {@Link @azure/communication-chat#ChatClient} as
     * ChatClientState {@Link ChatClientState}.
     */
    getState(): ChatClientState;
    /**
     * Allows a handler to be registered for 'stateChanged' events.
     *
     * @param handler - Callback to receive the state.
     */
    onStateChange(handler: (state: ChatClientState) => void): void;
    /**
     * Allows unregistering for 'stateChanged' events.
     *
     * @param handler - Original callback to be unsubscribed.
     */
    offStateChange(handler: (state: ChatClientState) => void): void;
    /**
     * Downloads a resource for specific message and caches it.
     *
     * @param threadId - The thread id of the chat thread.
     * @param messageId - The message id of the chat message.
     * @param resourceUrl - The resource url to fetch and cache.
     */
    downloadResourceToCache(threadId: string, messageId: string, resourceUrl: string): void;
    /**
     * Removes a resource from cache for a specific message.
     *
     * @param threadId - The thread id of the chat thread.
     * @param messageId - The message id of the chat message.
     * @param resourceUrl - The resource url to remove from cache.
     */
    removeResourceFromCache(threadId: string, messageId: string, resourceUrl: string): void;
}

/**
 * Arguments to construct the {@link StatefulChatClient}.
 *
 * @public
 */
export declare type StatefulChatClientArgs = {
    userId: CommunicationUserIdentifier;
    displayName: string;
    endpoint: string;
    credential: CommunicationTokenCredential;
};

/**
 * Options to construct the {@link StatefulChatClient}.
 *
 * @public
 */
export declare type StatefulChatClientOptions = {
    /**
     * Options to construct the {@link @azure/communication-chat#ChatClient} with.
     */
    chatClientOptions: ChatClientOptions;
    /**
     * Sets the max listeners limit of the 'stateChange' event. Defaults to the node.js EventEmitter.defaultMaxListeners
     * if not specified.
     */
    maxStateChangeListeners?: number;
};

/**
 * Defines the additional methods added by the stateful on top of {@link @azure/communication-calling#DeviceManager}.
 *
 * @public
 */
export declare interface StatefulDeviceManager extends DeviceManager {
    /**
     * Sets the selectedCamera in the {@link DeviceManagerState}. This is completely developer driven and is not tied in
     * any way to {@link @azure/communication-calling#DeviceManager}. It is entirely contained in
     * {@link StatefulDeviceManager}. See also {@link DeviceManagerState.selectedCamera}.
     */
    selectCamera: (device: VideoDeviceInfo) => void;
    /**
     * Gets the list of unparented video streams. This is a list of video streams that have not been added to a
     * {@link @azure/communication-calling#Call}. This is useful for developers who want to interact with rendered
     * video streams before they have started a call. See also {@link @azure/communication-react#CallClient.createView}.
     *
     * @public
     */
    getUnparentedVideoStreams: () => LocalVideoStream[];
}

/**
 * Options passed to adapter.stopCaptions
 *
 * @public
 */
export declare interface StopCaptionsAdapterOptions {
    /**
     * Stop captions that have been started in the background.
     *
     * @remarks
     * This option is only applicable when stopping captions that have been started using the `startInBackground` property of adpater.startCaptions.
     *
     * @defaultValue false
     */
    stopInBackground?: boolean;
}

/**
 * Utility component to convert an HTMLElement with a video stream into a JSX element.
 *
 * Use to convert an HTMLElement returned by headless calling API into a component that can be rendered as a {@link VideoTile}.
 *
 * @public
 */
export declare const StreamMedia: (props: StreamMediaProps) => JSX.Element;

/**
 * Props for {@link StreamMedia}.
 *
 * @public
 */
export declare interface StreamMediaProps {
    /** Video stream element to render. */
    videoStreamElement: HTMLElement | null;
    /** Decides whether to mirror the video or not. */
    isMirrored?: boolean;
    /** Whether the stream is loading data */
    loadingState?: LoadingState;
    /**
     * Allows users to pass in an object contains custom CSS styles.
     * @Example
     * ```
     * <StreamMedia styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: BaseCustomStyles;
}

/**
 * @public
 */
export declare type SupportedCaptionLanguage = keyof CaptionLanguageStrings;

/**
 * @public
 */
export declare type SupportedSpokenLanguage = keyof SpokenLanguageStrings;

/**
 * @public
 * Corresponding texts to each call issue
 */
export declare interface SurveyIssues {
    overallRating: {
        callCannotJoin: string;
        callCannotInvite: string;
        hadToRejoin: string;
        callEndedUnexpectedly: string;
        otherIssues: string;
    };
    audioRating: {
        noLocalAudio: string;
        noRemoteAudio: string;
        echo: string;
        audioNoise: string;
        lowVolume: string;
        audioStoppedUnexpectedly: string;
        distortedSpeech: string;
        audioInterruption: string;
        otherIssues: string;
    };
    videoRating: {
        noVideoReceived: string;
        noVideoSent: string;
        lowQuality: string;
        freezes: string;
        stoppedUnexpectedly: string;
        darkVideoReceived: string;
        audioVideoOutOfSync: string;
        otherIssues: string;
    };
    screenshareRating: {
        noContentLocal: string;
        noContentRemote: string;
        cannotPresent: string;
        lowQuality: string;
        freezes: string;
        stoppedUnexpectedly: string;
        largeDelay: string;
        otherIssues: string;
    };
}

/**
 * @public
 * Corresponding texts to each call issue category
 */
export declare interface SurveyIssuesHeadingStrings {
    overallRating: string;
    audioRating: string;
    videoRating: string;
    screenshareRating: string;
}

/**
 * Discriminated union of all system messages.
 *
 * The `systemMessageType` field specializes into union variants.
 *
 * @public
 */
export declare type SystemMessage = ParticipantAddedSystemMessage | ParticipantRemovedSystemMessage | TopicUpdatedSystemMessage | ContentSystemMessage;

/**
 * Common properties of all system messages.
 *
 * @public
 */
export declare interface SystemMessageCommon extends MessageCommon {
    messageType: 'system';
    iconName: string;
}

/**
 * Optional parameters to create {@link TeamsCallAdapter}
 *
 * @public
 */
export declare type TeamsAdapterOptions = CommonCallAdapterOptions;

/**
 * An Adapter interface specific for Teams identity which extends {@link CommonCallAdapter}.
 *
 * @public
 */
export declare interface TeamsCallAdapter extends CommonCallAdapter {
    /**
     * Join the call with microphone initially on/off.
     * @deprecated Use joinCall(options?:JoinCallOptions) instead.
     * @param microphoneOn - Whether microphone is initially enabled
     */
    joinCall(microphoneOn?: boolean): TeamsCall | undefined;
    /**
     * Join the call with options bag to set microphone/camera initial state when joining call
     * true = turn on the device when joining call
     * false = turn off the device when joining call
     * 'keep'/undefined = retain devices' precall state
     *
     * @param options - param to set microphone/camera initially on/off.
     *
     * @public
     */
    joinCall(options?: JoinCallOptions): TeamsCall | undefined;
    /**
     * Start the call.
     *
     * @param participants - An array of participant ids to join
     *
     * @public
     */
    startCall(participants: string[], options?: StartCallOptions): TeamsCall | undefined;
    /**
     * Start the call.
     * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called
     * @public
     */
    startCall(participants: StartCallIdentifier[], options?: StartCallOptions): TeamsCall | undefined;
}

/**
 * Arguments for creating the Azure Communication Services implementation of {@link TeamsCallAdapter}.
 *
 * @public
 */
export declare type TeamsCallAdapterArgs = TeamsCallAdapterArgsCommon & {
    locator: TeamsMeetingLinkLocator | TeamsMeetingIdLocator;
};

/**
 * Common part of args to create the Azure Communication Services implementation of {@link TeamsCallAdapter}.
 *
 * @public
 */
export declare type TeamsCallAdapterArgsCommon = {
    userId: MicrosoftTeamsUserIdentifier;
    credential: CommunicationTokenCredential;
    options?: TeamsAdapterOptions;
};

/**
 * Object containing all the teams call handlers required for calling components.
 *
 * Calling related components from this package are able to pick out relevant handlers from this object.
 * See {@link useHandlers} and {@link usePropsFor}.
 *
 * @public
 */
export declare interface TeamsCallingHandlers extends CommonCallingHandlers {
    onStartCall: (participants: CommunicationIdentifier[], options?: StartCallOptions) => undefined | TeamsCall;
}

/**
 * @public
 * Proxies the {@link @azure/communication-calling#TeamsIncomingCall} interface.
 */
export declare type TeamsIncomingCallManagement = {
    /**
     * @beta
     * @Remark This attribute doesn't exist on the {@link @azure/communication-calling#TeamsCallAgent} interface.
     * @returns readonly array of {@link DeclarativeTeamsIncomingCall}
     */
    incomingCalls: ReadonlyArray<TeamsIncomingCall>;
};

/**
 * State only version of {@link @azure/communication-calling#TeamsIncomingCall}
 * @public
 */
export declare interface TeamsIncomingCallState {
    /**
     * Proxy of {@link @azure/communication-calling#TeamsIncomingCall.id}.
     */
    id: string;
    /**
     * Proxy of {@link @azure/communication-calling#TeamsIncomingCall.teamsCallInfo}.
     */
    info: CallInfoState;
    /**
     * Proxy of {@link @azure/communication-calling#TeamsIncomingCall.callerInfo}.
     */
    callerInfo: CallerInfo;
    /**
     * Set to the state returned by 'callEnded' event on {@link @azure/communication-calling#IncomingCall} when received.
     * This property is added by the stateful layer and is not a proxy of SDK state.
     */
    callEndReason?: CallEndReason;
    /**
     * Stores the local date when the call started on the client. This property is added by the stateful layer and is not
     * a proxy of SDK state.
     */
    startTime: Date;
    /**
     * Stores the local date when the call ended on the client. This property is added by the stateful layer and is not a
     * proxy of SDK state. It is undefined if the call is not ended yet.
     */
    endTime?: Date;
}

/**
 * A string representation of a {@link @azure/communication-common#CommunicationIdentifier}.
 *
 * This string representation of CommunicationIdentifier is guaranteed to be stable for
 * a unique Communication user. Thus,
 * - it can be used to persist a user's identity in external databases.
 * - it can be used as keys into a Map to store data for the user.
 *
 * @public
 */
export declare const toFlatCommunicationIdentifier: (identifier: CommunicationIdentifier) => string;

/**
 * Callback for {@link ChatAdapterSubscribers} 'topicChanged' event.
 *
 * @public
 */
export declare type TopicChangedListener = (event: {
    topic: string;
}) => void;

/**
 * A system message notifying that the chat thread topic was updated.
 *
 * @public
 */
export declare interface TopicUpdatedSystemMessage extends SystemMessageCommon {
    systemMessageType: 'topicUpdated';
    topic: string;
}

/**
 * State only version of {@link @azure/communication-calling#TranscriptionCallFeature}. {@link StatefulCallClient} will
 * automatically listen for transcription state of the call and update the state exposed by {@link StatefulCallClient}
 * accordingly.
 *
 * @public
 */
export declare interface TranscriptionCallFeature {
    /**
     * Proxy of {@link @azure/communication-calling#TranscriptionCallFeature.isTranscriptionActive}.
     */
    isTranscriptionActive: boolean;
}

/**
 * Callback for {@link CallAdapterSubscribers} 'transferRequested' event.
 *
 * @public
 */
export declare type TransferAcceptedListener = (event: TransferEventArgs) => void;

/**
 * Transfer feature state
 *
 * @public
 */
export declare interface TransferFeature {
    /**
     * Accepted transfer requests
     */
    acceptedTransfers: {
        [key: string]: AcceptedTransfer;
    };
}

/**
 * Component to notify local user when one or more participants in the chat thread are typing.
 *
 * @public
 */
export declare const TypingIndicator: (props: TypingIndicatorProps) => JSX.Element;

/**
 * Props for {@link TypingIndicator}.
 *
 * @public
 */
export declare interface TypingIndicatorProps {
    /** List of the typing users. */
    typingUsers: CommunicationParticipant[];
    /** Callback to render typing users */
    onRenderUser?: (users: CommunicationParticipant) => JSX.Element;
    /**
     * Allows users to pass in an object contains custom CSS styles.
     * @Example
     * ```
     * <TypingIndicator styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: TypingIndicatorStylesProps;
    /**
     * Optional strings to override in component
     */
    strings?: Partial<TypingIndicatorStrings>;
}

/**
 * Selector type for {@link TypingIndicator} component.
 *
 * @public
 */
export declare type TypingIndicatorSelector = (state: ChatClientState, props: ChatBaseSelectorProps) => {
    typingUsers: CommunicationParticipant[];
};

/**
 * Strings of {@link TypingIndicator} that can be overridden.
 *
 * @public
 */
export declare interface TypingIndicatorStrings {
    /**
     * String template to use when one user is typing. Placeholders: [user].
     * @example
     * ```
     * <TypingIndicator
     *  strings={{ multipleUsersAbbreviateOne: '{users} is typing...' }}
     *  typingUsers={[{ userId: 'user1', displayName: 'Claire' }]}
     * />
     * ```
     * would be 'Claire is typing...'
     **/
    singleUser: string;
    /**
     * String template to use when multiple users are typing. Placeholders: [users].
     * @example
     * ```
     * <TypingIndicator
     *  strings={{ multipleUsers: '{users} are typing...' }}
     *  typingUsers={[
     *    { userId: 'user1', displayName: 'Claire' },
     *    { userId: 'user2', displayName: 'Christopher' }
     *  ]}
     * />
     * ```
     * would be 'Claire, Chris are typing...'
     **/
    multipleUsers: string;
    /**
     * String template to use when multiple users are typing with one other user abbreviated. Placeholders: [users].
     * @example
     * ```typescript
     * <TypingIndicator
     * strings={{ multipleUsersAbbreviateOne: '{users} and 1 other are typing...' }}
     * typingUsers={[
     * { userId: 'user1', displayName: 'Claire Romanov' },
     * { userId: 'user2', displayName: 'Christopher Rutherford' }
     * ]}
     * />
     * ```
     * would be 'Claire Romanov and 1 other are typing...'
     **/
    multipleUsersAbbreviateOne: string;
    /**
     * String template to use when multiple users are typing with one other user abbreviated. Placeholders: [users, numOthers].
     * @example
     * ```
     * <TypingIndicator
     *  strings={{ multipleUsersAbbreviateMany: '{users} and {numOthers} others are typing...' }}
     *  typingUsers={[
     *    { userId: 'user1', displayName: 'Claire Romanov' },
     *    { userId: 'user2', displayName: 'Christopher Rutherford' },
     *    { userId: 'user3', displayName: 'Jill Vernblom' }
     *  ]}
     * />
     * ```
     * would be 'Claire Romanov and 2 others are typing...'
     **/
    multipleUsersAbbreviateMany: string;
    /**
     * String to use as delimiter to separate multiple users.
     * @example
     * ```
     * <TypingIndicator
     *  strings={{ delimiter: ' + ' }}
     *  typingUsers={[
     *    { userId: 'user1', displayName: 'Claire' },
     *    { userId: 'user2', displayName: 'Chris' },
     *    { userId: 'user3', displayName: 'Jill' }
     *  ]}
     * />
     * ```
     * would be 'Claire + Chris + Jill are typing...'
     **/
    delimiter: string;
}

/**
 * Fluent styles for {@link TypingIndicator}.
 *
 * @public
 */
export declare interface TypingIndicatorStylesProps extends BaseCustomStyles {
    /** Styles for each typing user's displayName. */
    typingUserDisplayName?: IStyle;
    /** Styles for the typing string. */
    typingString?: IStyle;
}

/**
 * @public
 * Callback function run when a message is updated.
 */
export declare type UpdateMessageCallback = (messageId: string, content: string) => Promise<void>;

/**
 * A custom React hook to simplify the creation of {@link CallAdapter}.
 *
 * Similar to {@link createAzureCommunicationCallAdapter}, but takes care of asynchronous
 * creation of the adapter internally.
 *
 * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments
 * as they are created. The adapter is only created when all arguments are defined.
 *
 * Note that you must memoize the arguments to avoid recreating adapter on each render.
 * See storybook for typical usage examples.
 *
 * @public
 */
export declare const useAzureCommunicationCallAdapter: (args: Partial<AzureCommunicationCallAdapterArgs | AzureCommunicationOutboundCallAdapterArgs>, afterCreate?: (adapter: CallAdapter) => Promise<CallAdapter>, beforeDispose?: (adapter: CallAdapter) => Promise<void>) => CallAdapter | undefined;

/**
 * A custom React hook to simplify the creation of {@link CallWithChatAdapter}.
 *
 * Similar to {@link createAzureCommunicationCallWithChatAdapter}, but takes care of asynchronous
 * creation of the adapter internally.
 *
 * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments
 * as they are created. The adapter is only created when all arguments are defined.
 *
 * Note that you must memoize the arguments to avoid recreating adapter on each render.
 * See storybook for typical usage examples.
 *
 * @public
 */
export declare const useAzureCommunicationCallWithChatAdapter: (args: Partial<AzureCommunicationCallWithChatAdapterArgs>, afterCreate?: (adapter: CallWithChatAdapter) => Promise<CallWithChatAdapter>, beforeDispose?: (adapter: CallWithChatAdapter) => Promise<void>) => CallWithChatAdapter | undefined;

/**
 * A custom React hook to simplify the creation of {@link ChatAdapter}.
 *
 * Similar to {@link createAzureCommunicationChatAdapter}, but takes care of asynchronous
 * creation of the adapter internally.
 *
 * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments
 * as they are created. The adapter is only created when all arguments are defined.
 *
 * Note that you must memoize the arguments to avoid recreating adapter on each render.
 * See storybook for typical usage examples.
 *
 * @public
 */
export declare const useAzureCommunicationChatAdapter: (args: Partial<AzureCommunicationChatAdapterArgs>, afterCreate?: (adapter: ChatAdapter) => Promise<ChatAdapter>, beforeDispose?: (adapter: ChatAdapter) => Promise<void>) => ChatAdapter | undefined;

/**
 * Hook to obtain {@link @azure/communication-calling#Call} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * you must have previously used the CallProvider with a Call object to use this hook
 *
 * @public
 */
export declare const useCall: () => Call | undefined;

/**
 * Hook to obtain {@link @azure/communication-calling#CallAgent} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const useCallAgent: () => CallAgent | undefined;

/**
 * Hook to obtain {@link StatefulCallClient} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const useCallClient: () => StatefulCallClient;

/**
 * Hook to obtain {@link StatefulChatClient} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const useChatClient: () => StatefulChatClient;

/**
 * Hook to obtain {@link @azure/communication-chat#ChatThreadClient} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const useChatThreadClient: () => ChatThreadClient;

/**
 * Hook to obtain {@link StatefulDeviceManager} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const useDeviceManager: () => StatefulDeviceManager | undefined;

/**
 * Primary hook to get all hooks necessary for a React Component from this library.
 *
 * To call this hook, the component requires to be wrapped under these providers:
 *
 * 1. For chat components: {@link ChatClientProvider} and {@link ChatThreadClientProvider}.
 *
 * 2. For calling components: {@link CallClientProvider}, {@link CallAgentProvider} and {@link CallAgentProvider}.
 *
 * Most straightforward usage of a components looks like:
 *
 * @example
 * ```
 *     import { ParticipantList, usePropsFor } from '@azure/communication-react';
 *
 *     const App = (): JSX.Element => {
 *         // ... code to setup Providers ...
 *
 *         return <ParticipantList {...usePropsFor(ParticipantList)}/>
 *     }
 * ```
 *
 * @public
 */
export declare const usePropsFor: <Component extends (props: any) => JSX.Element>(component: Component, type?: 'calling' | 'chat') => ComponentProps<Component>;

/**
 * Hook to obtain a selector for a specified component.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const useSelector: <ParamT extends Selector | undefined>(selector: ParamT, selectorProps?: ParamT extends Selector ? Parameters<ParamT>[1] : undefined, type?: 'calling' | 'chat') => ParamT extends Selector ? ReturnType<ParamT> : undefined;

/**
 * Hook to obtain {@link @azure/communication-calling#TeamsCall} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * you must have previously used the CallProvider with a TeamsCall object to use this hook
 *
 * @public
 */
export declare const useTeamsCall: () => undefined | TeamsCall;

/**
 * A custom React hook to simplify the creation of {@link TeamsCallAdapter}.
 *
 * Similar to {@link createTeamsAzureCommunicationCallAdapter}, but takes care of asynchronous
 * creation of the adapter internally.
 *
 * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments
 * as they are created. The adapter is only created when all arguments are defined.
 *
 * Note that you must memoize the arguments to avoid recreating adapter on each render.
 * See storybook for typical usage examples.
 *
 * @public
 */
export declare const useTeamsCallAdapter: (args: Partial<TeamsCallAdapterArgs>, afterCreate?: (adapter: TeamsCallAdapter) => Promise<TeamsCallAdapter>, beforeDispose?: (adapter: TeamsCallAdapter) => Promise<void>) => TeamsCallAdapter | undefined;

/**
 * Hook to obtain {@link @azure/communication-calling#TeamsCallAgent} from the provider.
 *
 * Useful when implementing a custom component that utilizes the providers
 * exported from this library.
 *
 * @public
 */
export declare const useTeamsCallAgent: () => undefined | TeamsCallAgent;

/**
 * React hook to access theme
 *
 * @public
 */
export declare const useTheme: () => Theme;

/**
 * Styles for the control bar inside the VerticalGallery component
 *
 * @public
 */
export declare interface VerticalGalleryControlBarStyles extends BaseCustomStyles {
    /**
     * styles for the next button in the VerticalGalleryControlBar
     */
    nextButton?: IStyle;
    /**
     * Styles for the previous button in the VerticalGalleryControlBar
     */
    previousButton?: IStyle;
    /**
     * Styles for the counter in the VerticalGalleryControlBar
     */
    counter?: IStyle;
}

/**
 * Strings for localization of the vertical gallery.
 *
 * @public
 */
export declare interface VerticalGalleryStrings {
    /** Aria label for the left page navigation button */
    leftNavButtonAriaLabel?: string;
    /** Aria label for the right page navigation button */
    rightNavButtonAriaLabel?: string;
}

/**
 * Styles for the VerticalGallery component
 *
 * @public
 */
export declare interface VerticalGalleryStyles extends BaseCustomStyles {
    /** Styles for each video tile in the vertical gallery */
    children?: IStyle;
    /** Styles for the verticalGallery control bar */
    controlBar?: VerticalGalleryControlBarStyles;
}

/**
 * Contains the attibutes of the blur video background effect
 *
 * @public
 */
export declare interface VideoBackgroundBlurEffect extends BackgroundBlurConfig {
    /**
     * Name of effect to blur video background effect
     */
    effectName: 'blur';
}

/**
 * Contains the attibutes of a selected video background effect
 *
 * @public
 */
export declare type VideoBackgroundEffect = VideoBackgroundNoEffect | VideoBackgroundBlurEffect | VideoBackgroundReplacementEffect;

/**
 * Dependency type to be injected for video background effects
 *
 * @public
 */
export declare type VideoBackgroundEffectsDependency = {
    createBackgroundBlurEffect: (config?: BackgroundBlurConfig) => BackgroundBlurEffect;
    createBackgroundReplacementEffect: (config: BackgroundReplacementConfig) => BackgroundReplacementEffect;
};

/**
 * Contains the attibutes of a background image like url, name etc.
 *
 * @public
 */
export declare interface VideoBackgroundImage {
    /**
     * key for unique identification of the custom background
     */
    key: string;
    /**
     * URL of the uploaded background image.
     */
    url: string;
    /**
     * Image name to be displayed.
     */
    tooltipText?: string;
}

/**
 * Contains the attibutes to remove video background effect
 *
 * @public
 */
export declare interface VideoBackgroundNoEffect {
    /**
     * Name of effect to remove video background effect
     */
    effectName: 'none';
}

/**
 * Contains the attibutes of a selected replacement video background effect
 *
 * @public
 */
export declare interface VideoBackgroundReplacementEffect extends BackgroundReplacementConfig {
    /**
     * Name of effect to replace video background effect
     */
    effectName: 'replacement';
    /**
     * key for unique identification of the custom background
     */
    key?: string;
}

/**
 * VideoGallery represents a layout of video tiles for a specific call.
 * It displays a {@link VideoTile} for the local user as well as for each remote participant who has joined the call.
 *
 * @public
 */
export declare const VideoGallery: (props: VideoGalleryProps) => JSX.Element;

/**
 * @public
 */
export declare type VideoGalleryLayout = 'default' | 'floatingLocalVideo' | 'speaker' | 'focusedContent';

/**
 * The state of the local participant in the {@link VideoGallery}.
 *
 * @public
 */
export declare interface VideoGalleryLocalParticipant extends VideoGalleryParticipant {
    /** Whether local participant is raised a hand */
    raisedHand?: RaisedHand;
    /**
     * Whether local participant has reacted
     *
     * */
    reaction?: Reaction;
    /** Video stream of shared screen */
    screenShareStream?: VideoGalleryStream;
}

/**
 * The state of a participant in the {@link VideoGallery}.
 *
 * @public
 */
export declare type VideoGalleryParticipant = {
    /** User ID of participant */
    userId: string;
    /** Whether participant is muted */
    isMuted?: boolean;
    /** Display name of participant */
    displayName?: string;
    /** Video stream of participant */
    videoStream?: VideoGalleryStream;
    /** Whether participant is screen sharing or not */
    isScreenSharingOn?: boolean;
    /** Whether participant is spotlighted **/
    spotlight?: Spotlight;
    /** Media audio video access states **/
    mediaAccess?: MediaAccess;
    /** Attendee can have audio be forbidden **/
    canAudioBeForbidden?: boolean;
    /** Attendee can have video be forbidden **/
    canVideoBeForbidden?: boolean;
};

/**
 * Props for {@link VideoGallery}.
 *
 * @public
 */
export declare interface VideoGalleryProps {
    /**
     * Allows users to pass an object containing custom CSS styles for the gallery container.
     *
     * @Example
     * ```
     * <VideoGallery styles={{ root: { border: 'solid 1px red' } }} />
     * ```
     */
    styles?: VideoGalleryStyles;
    /** Layout of the video tiles. */
    layout?: VideoGalleryLayout;
    /** Local video particpant */
    localParticipant: VideoGalleryLocalParticipant;
    /** List of remote video particpants */
    remoteParticipants?: VideoGalleryRemoteParticipant[];
    /** List of dominant speaker userIds in the order of their dominance. 0th index is the most dominant. */
    dominantSpeakers?: string[];
    /** Local video view options */
    localVideoViewOptions?: VideoStreamOptions;
    /** Remote videos view options */
    remoteVideoViewOptions?: VideoStreamOptions;
    /** Callback to create the local video stream view */
    onCreateLocalStreamView?: (options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
    /** Callback to dispose of the local video stream view */
    onDisposeLocalStreamView?: () => void;
    /** Callback to render the local video tile*/
    onRenderLocalVideoTile?: (localParticipant: VideoGalleryLocalParticipant) => JSX.Element;
    /** Callback to create a remote video stream view */
    onCreateRemoteStreamView?: (userId: string, options?: VideoStreamOptions) => Promise<void | CreateVideoStreamViewResult>;
    /** Callback to render a remote video tile */
    onRenderRemoteVideoTile?: (remoteParticipant: VideoGalleryRemoteParticipant) => JSX.Element;
    /**
     * @deprecated use {@link onDisposeRemoteVideoStreamView} and {@link onDisposeRemoteScreenShareStreamView} instead
     *
     * Callback to dispose a remote video stream view
     */
    onDisposeRemoteStreamView?: (userId: string) => Promise<void>;
    /** Callback to dispose a remote video stream view */
    onDisposeRemoteVideoStreamView?: (userId: string) => Promise<void>;
    /** Callback to dispose a remote screen share stream view */
    onDisposeRemoteScreenShareStreamView?: (userId: string) => Promise<void>;
    /** Callback to dispose a local screen share stream view */
    onDisposeLocalScreenShareStreamView?: () => Promise<void>;
    /** Callback to render a participant avatar */
    onRenderAvatar?: OnRenderAvatarCallback;
    /**
     * Whether to display the local video camera switcher button
     */
    showCameraSwitcherInLocalPreview?: boolean;
    /**
     * Whether to display a mute icon beside the user's display name.
     * @defaultValue `true`
     */
    showMuteIndicator?: boolean;
    /** Optional strings to override in component  */
    strings?: Partial<VideoGalleryStrings>;
    /**
     * Maximum number of participant remote video streams that is rendered.
     * @defaultValue 4
     */
    maxRemoteVideoStreams?: number;
    /**
     * Camera control information for button to switch cameras.
     */
    localVideoCameraCycleButtonProps?: LocalVideoCameraCycleButtonProps;
    /**
     * List of pinned participant userIds.
     */
    pinnedParticipants?: string[];
    /**
     * This callback will be called when a participant video tile is pinned.
     */
    onPinParticipant?: (userId: string) => void;
    /**
     * This callback will be called when a participant video tile is un-pinned.
     */
    onUnpinParticipant?: (userId: string) => void;
    /**
     * List of spotlighted participant userIds.
     */
    spotlightedParticipants?: string[];
    /**
     * This callback is to start spotlight for local participant video tile.
     */
    onStartLocalSpotlight?: () => Promise<void>;
    /**
     * This callback is to stop spotlight for local participant video tile.
     */
    onStartRemoteSpotlight?: (userIds: string[]) => Promise<void>;
    /**
     * This callback is to start spotlight for remote participant video tiles.
     */
    onStopLocalSpotlight?: () => Promise<void>;
    /**
     * This callback is to stop spotlight for remote participant video tiles.
     */
    onStopRemoteSpotlight?: (userIds: string[]) => Promise<void>;
    /**
     * Maximum participants that can be spotlighted
     */
    maxParticipantsToSpotlight?: number;
    /**
     * Options for showing the remote video tile menu.
     *
     * @defaultValue \{ kind: 'contextual' \}
     */
    remoteVideoTileMenu?: false | VideoTileContextualMenuProps | VideoTileDrawerMenuProps;
    /**
     * Determines the layout of the overflowGallery inside the VideoGallery.
     * @defaultValue 'horizontalBottom'
     */
    overflowGalleryPosition?: OverflowGalleryPosition;
    /**
     * Determines the aspect ratio of local video tile in the video gallery.
     * @remarks 'followDeviceOrientation' will be responsive to the screen orientation and will change between 9:16 (portrait) and
     * 16:9 (landscape) aspect ratios.
     * @defaultValue 'followDeviceOrientation'
     */
    localVideoTileSize?: LocalVideoTileSize;
    /**
     * Reaction resources for like, heart, laugh, applause and surprised.
     */
    reactionResources?: ReactionResources;
    /**
     * Additional Options for Video Tiles
     */
    videoTilesOptions?: VideoTilesOptions;
    /**
     * This callback is to mute a remote participant
     */
    onMuteParticipant?: (userId: string) => Promise<void>;
    /**
     * This callback is to forbid audio for remote participant(s)
     */
    onForbidAudio?: (userIds: string[]) => Promise<void>;
    /**
     * This callback is to permit audio for remote participant(s)
     */
    onPermitAudio?: (userIds: string[]) => Promise<void>;
    /**
     * This callback is to forbid video for remote participant(s)
     */
    onForbidVideo?: (userIds: string[]) => Promise<void>;
    /**
     * This callback is to permit video for remote participant(s)
     */
    onPermitVideo?: (userIds: string[]) => Promise<void>;
    /**
     * Controls the view of the local screenshare stream in the gallery
     */
    localScreenShareView?: LocalScreenShareView;
}

/**
 * The state of a remote participant in the {@link VideoGallery}.
 *
 * @public
 */
export declare interface VideoGalleryRemoteParticipant extends VideoGalleryParticipant {
    /** Whether participant is speaking or not */
    isSpeaking?: boolean;
    /** Video stream of shared screen */
    screenShareStream?: VideoGalleryStream;
    /**
     * @public
     * The connection state of the participant. For example, 'Hold', 'Connecting' etc.
     */
    state?: ParticipantState;
    /** Whether participant is raised a hand */
    raisedHand?: RaisedHand;
    /**
     * Whether participant has reacted
     *
     * @public
     * */
    reaction?: Reaction;
    /** Media audio video access states **/
    mediaAccess?: MediaAccess;
}

/**
 * Selector type for {@link VideoGallery} component.
 *
 * @public
 */
export declare type VideoGallerySelector = (state: CallClientState, props: CallingBaseSelectorProps) => {
    screenShareParticipant?: VideoGalleryRemoteParticipant;
    localParticipant: VideoGalleryLocalParticipant;
    remoteParticipants: VideoGalleryRemoteParticipant[];
    dominantSpeakers?: string[];
    optimalVideoCount?: number;
    spotlightedParticipants?: string[];
    maxParticipantsToSpotlight?: number;
};

/**
 * Video stream of a participant in {@link VideoGallery}.
 *
 * @public
 */
export declare interface VideoGalleryStream {
    /** ID of the video stream */
    id?: number;
    /** Whether the video stream is available or not */
    isAvailable?: boolean;
    /** Whether the video stream is receiving data or not */
    isReceiving?: boolean;
    /** Whether the video stream is mirrored or not */
    isMirrored?: boolean;
    /** Render element of the video stream */
    renderElement?: HTMLElement;
    /** Scaling mode of the video stream */
    scalingMode?: ViewScalingMode;
    /** Stream Size of the video stream */
    streamSize?: {
        width: number;
        height: number;
    };
}

/**
 * All strings that may be shown on the UI in the {@link VideoGallery}.
 *
 * @public
 */
export declare interface VideoGalleryStrings {
    /** String to notify that local user is sharing their screen */
    screenIsBeingSharedMessage: string;
    /** String to show when remote screen share stream is loading */
    screenShareLoadingMessage: string;
    /** String to show when local screen share stream is loading */
    localScreenShareLoadingMessage: string;
    /** String for local video label. Default is "You" */
    localVideoLabel: string;
    /** String for local video camera switcher */
    localVideoCameraSwitcherLabel: string;
    /** String for announcing the local video tile can be moved by keyboard controls */
    localVideoMovementLabel: string;
    /** Aria-label for announcing the local video tile can be moved by keyboard controls */
    localVideoMovementAriaLabel: string;
    /** String for announcing the selected camera */
    localVideoSelectedDescription: string;
    /** placeholder text for participants who does not have a display name*/
    displayNamePlaceholder: string;
    /** Menu text shown in Video Tile contextual menu for setting a remote participants video to fit in frame */
    fitRemoteParticipantToFrame: string;
    /** Menu text shown in Video Tile contextual menu for setting a remote participants video to fill the frame */
    fillRemoteParticipantFrame: string;
    /** Menu text shown in Video Tile contextual menu for pinning a remote participant's video tile */
    pinParticipantForMe: string;
    /** Menu text shown in Video Tile contextual menu for unpinning a remote participant's video tile */
    unpinParticipantForMe: string;
    /** Aria label for pin participant menu item of remote participant's video tile */
    pinParticipantMenuItemAriaLabel: string;
    /** Aria label for unpin participant menu item of remote participant's video tile */
    unpinParticipantMenuItemAriaLabel: string;
    /** Aria label to announce when remote participant's video tile is pinned */
    pinnedParticipantAnnouncementAriaLabel: string;
    /** Aria label to announce when remote participant's video tile is unpinned */
    unpinnedParticipantAnnouncementAriaLabel: string;
    /** Menu text shown in Video Tile contextual menu to start spotlight on participant's video tile */
    startSpotlightVideoTileMenuLabel: string;
    /** Menu text shown in Video Tile contextual menu to add spotlight to participant's video tile */
    addSpotlightVideoTileMenuLabel: string;
    /** Menu title for start spotlight menu item when spotlight limit is reached */
    spotlightLimitReachedMenuTitle: string;
    /** Menu text shown in Video Tile contextual menu to stop spotlight on participant's video tile */
    stopSpotlightVideoTileMenuLabel: string;
    /** Menu text shown in Video Tile contextual menu to stop spotlight on local user's video tile */
    stopSpotlightOnSelfVideoTileMenuLabel: string;
    /** String for the attendee role */
    attendeeRole: string;
    /** Menu text shown in Video Tile contextual menu to mute a remote participant */
    muteParticipantMenuItemLabel: string;
    /** Text shown when waiting for others to join the call */
    waitingScreenText: string;
}

/**
 * {@link VideoGallery} Component Styles.
 * @public
 */
export declare interface VideoGalleryStyles extends BaseCustomStyles {
    /** Styles for the grid layout */
    gridLayout?: GridLayoutStyles;
    /** Styles for the horizontal gallery  */
    horizontalGallery?: HorizontalGalleryStyles;
    /** Styles for the local video  */
    localVideo?: IStyle;
    /** Styles for the vertical gallery */
    verticalGallery?: VerticalGalleryStyles;
}

/**
 * Options to control how video streams are rendered.
 *
 * @public
 */
export declare interface VideoStreamOptions {
    /** Whether the video stream is mirrored or not */
    isMirrored?: boolean;
    /** Scaling mode. It can be `Stretch`, `Crop` or `Fit` */
    scalingMode?: ViewScalingMode;
}

/**
 * State only version of {@link @azure/communication-calling#VideoStreamRendererView}. This property is added to the state exposed
 * by {@link StatefulCallClient} by {@link StatefulCallClient.createView} and removed by {@link StatefulCallClient.disposeView}.
 *
 * @public
 */
export declare interface VideoStreamRendererViewState {
    /**
     * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.scalingMode}.
     */
    scalingMode: ScalingMode;
    /**
     * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.isMirrored}.
     */
    isMirrored: boolean;
    /**
     * Proxy of {@link @azure/communication-calling#VideoStreamRendererView.target}.
     */
    target: HTMLElement;
}

/**
 * A component to render the video stream for a single call participant.
 *
 * Use with {@link GridLayout} in a {@link VideoGallery}.
 *
 * @public
 */
export declare const VideoTile: (props: VideoTileProps) => JSX.Element;

/**
 * Properties for showing contextual menu for remote {@link VideoTile} components in {@link VideoGallery}.
 *
 * @public
 */
export declare interface VideoTileContextualMenuProps {
    /**
     * The menu property kind
     */
    kind: 'contextual';
}

/**
 * Properties for showing drawer menu on remote {@link VideoTile} long touch in {@link VideoGallery}.
 *
 * @public
 */
export declare interface VideoTileDrawerMenuProps {
    /**
     * The menu property kind
     */
    kind: 'drawer';
    /**
     * The optional id property provided on an element that the drawer menu should render within when a
     * remote participant video tile Drawer is shown. If an id is not provided, then a drawer menu will
     * render within the VideoGallery component.
     */
    hostId?: string;
}

/**
 * Props for {@link VideoTile}.
 *
 * @public
 */
export declare interface VideoTileProps {
    /** React Child components. Child Components will show as overlay component in the VideoTile. */
    children?: React_2.ReactNode;
    /**
     * Allows users to pass in an object contains custom CSS styles.
     * @Example
     * ```
     * <VideoTile styles={{ root: { background: 'blue' } }} />
     * ```
     */
    styles?: VideoTileStylesProps;
    /** user id for the VideoTile placeholder. */
    userId?: string;
    /** Component with the video stream. */
    renderElement?: JSX.Element | null;
    /**
     * Overlay component responsible for rendering reaction
     */
    overlay?: JSX.Element | null;
    /** Determines if the video is mirrored or not. */
    isMirrored?: boolean;
    /** Custom render Component function for no video is available. Render a Persona Icon if undefined. */
    onRenderPlaceholder?: OnRenderAvatarCallback;
    /**
     * Show label on the VideoTile
     * @defaultValue true
     */
    showLabel?: boolean;
    /**
     * Show label background on the VideoTile
     * @defaultValue false
     */
    alwaysShowLabelBackground?: boolean;
    /**
     * Whether to display a mute icon beside the user's display name.
     * @defaultValue true
     */
    showMuteIndicator?: boolean;
    /**
     * Whether the video is muted or not.
     */
    isMuted?: boolean;
    /**
     * If true, the video tile will show the pin icon.
     */
    isPinned?: boolean;
    /**
     * Display Name of the Participant to be shown in the label.
     * @remarks `displayName` is used to generate avatar initials if `initialsName` is not provided.
     */
    displayName?: string;
    /**
     * Name of the participant used to generate initials. For example, a name `John Doe` will display `JD` as initials.
     * @remarks `displayName` is used if this property is not specified.
     */
    initialsName?: string;
    /**
     * Minimum size of the persona avatar in px.
     * The persona avatar is the default placeholder shown when no video stream is available.
     * For more information see https://developer.microsoft.com/en-us/fluentui#/controls/web/persona
     * @defaultValue 32px
     */
    personaMinSize?: number;
    /**
     * Maximum size of the personal avatar in px.
     * The persona avatar is the default placeholder shown when no video stream is available.
     * For more information see https://developer.microsoft.com/en-us/fluentui#/controls/web/persona
     * @defaultValue 100px
     */
    personaMaxSize?: number;
    /** Optional property to set the aria label of the video tile if there is no available stream. */
    noVideoAvailableAriaLabel?: string;
    /** Whether the participant in the videoTile is speaking. Shows a speaking indicator (border). */
    isSpeaking?: boolean;
    /** Whether the participant is raised hand. Show a indicator (border) and icon with order */
    raisedHand?: RaisedHand;
    /**
     * The call connection state of the participant.
     * For example, `Hold` means the participant is on hold.
     */
    participantState?: ParticipantState;
    /**
     * Strings to override in the component.
     */
    strings?: VideoTileStrings;
    /**
     * Display custom menu items in the VideoTile's contextual menu.
     * Uses Fluent UI ContextualMenu.
     * An ellipses icon will be displayed to open the contextual menu if this prop is defined.
     */
    contextualMenu?: IContextualMenuProps;
    /**
     * Callback triggered by video tile on touch and hold.
     */
    onLongTouch?: () => void;
    /**
     * If true, the video tile will show the spotlighted icon.
     */
    isSpotlighted?: boolean;
    /**
     * Reactions resources' url and metadata.
     */
    reactionResources?: ReactionResources;
    /**
     * Media access state of the participant.
     */
    mediaAccess?: MediaAccess;
}

/**
 * Options that apply to all Video Tiles in the {@link VideoGallery}
 *
 * @public
 */
export declare interface VideoTilesOptions {
    /**
     * Whether to always show the label background for the video tile
     */
    alwaysShowLabelBackground?: boolean;
}

/**
 * Strings of {@link VideoTile} that can be overridden.
 * @public
 */
export declare interface VideoTileStrings {
    /** Aria label for announcing the remote video tile drawer menu */
    moreOptionsButtonAriaLabel: string;
    /** String for displaying the Ringing of the remote participant */
    participantStateRinging: string;
    /** String for displaying the Hold state of the remote participant */
    participantStateHold: string;
    /** String for the announcement of the muted state of the participant when muted */
    moreOptionsParticipantMutedStateMutedAriaLabel: string;
    /** String for the announcement of the unmuted state of the participant when unmuted */
    moreOptionsParticipantMutedStateUnmutedAriaLabel: string;
    /** String for the announcement of the participant has their hand raised */
    moreOptionsParticipantHandRaisedAriaLabel: string;
    /** String for the announcement of whether the participant is speaking or not */
    moreOptionsParticipantIsSpeakingAriaLabel: string;
    /** String for the announcement of whether the participant microphone disabled */
    moreOptionsParticipantMicDisabledAriaLabel: string;
    /** String for the announcement of whether the participant camera disabled */
    moreOptionsParticipantCameraDisabledAriaLabel: string;
}

/**
 * Fluent styles for {@link VideoTile}.
 *
 * @public
 */
export declare interface VideoTileStylesProps extends BaseCustomStyles {
    /** Styles for video container. */
    videoContainer?: IStyle;
    /** Styles for container overlayed on the video container. */
    overlayContainer?: IStyle;
    /** Styles for displayName on the video container. */
    displayNameContainer?: IStyle;
}

/**
 * Scaling mode of a {@link VideoGalleryStream}.
 *
 * @public
 */
export declare type ViewScalingMode = 'Stretch' | 'Crop' | 'Fit';

export { }
