/// <reference types="react" />
import { VideoTilesOptions } from "../../../../react-components/src";
import { CallSurveyImprovementSuggestions } from "../../../../react-components/src";
import { BaseCompositeProps } from '../common/BaseComposite';
import { CallCompositeIcons } from '../common/icons';
import { CommonCallAdapter } from './adapter/CallAdapter';
import { CallControlOptions } from './types/CallControlOptions';
import { CallSurvey } from '@azure/communication-calling';
import { MobileChatSidePaneTabHeaderProps } from '../common/TabHeader';
import { InjectedSidePaneProps } from './components/SidePane/SidePaneProvider';
import { VideoGalleryLayout, LocalScreenShareView } from "../../../../react-components/src";
/**
 * Props for {@link CallComposite}.
 *
 * @public
 */
export 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;
}
/**
 * Menu options for remote video tiles in {@link VideoGallery}.
 *
 * @public
 */
export interface RemoteVideoTileMenuOptions {
    /**
     * If set to true, remote video tiles in the VideoGallery will not have menu options
     *
     * @defaultValue false
     */
    isHidden?: boolean;
}
/**
 * Options for the local video tile in the Call composite.
 *
 * @public
 */
export 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';
}
/**
 * Options for controlling the notifications in the composite.
 * @public
 */
export interface NotificationOptions {
    /**
     * Whether to show the notifications in the composite. useful
     * for hiding the notifications in the composite to replace with your own custom notifications.
     */
    hideAllNotifications?: boolean;
}
/**
 * Options to determine the rendering behavior of the dtmfDialer in the CallComposite
 * @public
 */
export interface DtmfDialPadOptions {
    dialerBehavior?: 'autoShow' | 'alwaysShow' | 'alwaysHide';
}
/**
 * Optional features of the {@link CallComposite}.
 *
 * @public
 */
export 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;
    /**
     * Options for controlling the notifications in the composite.
     */
    notificationOptions?: NotificationOptions;
    /**
     * 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';
    };
};
/**
 * 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;
/**
 * @private
 */
export interface InternalCallCompositeProps {
    overrideSidePane?: InjectedSidePaneProps;
    onSidePaneIdChange?: (sidePaneId: string | undefined) => void;
    onCloseChatPane?: () => void;
    mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;
}
/** @private */
export declare const CallCompositeInner: (props: CallCompositeProps & InternalCallCompositeProps) => JSX.Element;
//# sourceMappingURL=CallComposite.d.ts.map