@azure/communication-react 1.5.1-alpha-202306070014 → 1.5.1-alpha-202306090015

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/communication-react.d.ts +21 -1
  2. package/dist/dist-cjs/communication-react/index.js +200 -32
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js +2 -1
  7. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js.map +1 -1
  8. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/mentionTagUtils.js +2 -2
  9. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/mentionTagUtils.js.map +1 -1
  10. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +1 -1
  11. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  12. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +15 -3
  13. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  14. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +20 -0
  15. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  16. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +8 -7
  17. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  18. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +1 -1
  19. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  20. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +5 -1
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +4 -3
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +5 -1
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.d.ts +4 -1
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js +3 -3
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js.map +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.d.ts +14 -0
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js +101 -0
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js.map +1 -0
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts +4 -0
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +5 -0
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
  35. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallComposite.styles.d.ts +6 -1
  36. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallComposite.styles.js +7 -0
  37. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallComposite.styles.js.map +1 -1
  38. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.d.ts +26 -0
  39. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.js +47 -0
  40. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.js.map +1 -0
  41. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +2 -2
  42. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +8 -1
  43. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  44. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js.map +1 -1
  46. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +6 -1
  47. package/package.json +8 -8
@@ -1407,7 +1407,7 @@ export declare type CallCompositeOptions = {
1407
1407
  *
1408
1408
  * @public
1409
1409
  */
1410
- export declare type CallCompositePage = 'accessDeniedTeamsMeeting' | 'call' | 'configuration' | /* @conditional-compile-remove(PSTN-calls) */ 'hold' | 'joinCallFailedDueToNoNetwork' | 'leftCall' | 'lobby' | /* @conditional-compile-remove(rooms) */ 'deniedPermissionToRoom' | 'removedFromCall' | /* @conditional-compile-remove(rooms) */ 'roomNotFound' | /* @conditional-compile-remove(unsupported-browser) */ 'unsupportedEnvironment';
1410
+ export declare type CallCompositePage = 'accessDeniedTeamsMeeting' | 'call' | 'configuration' | /* @conditional-compile-remove(PSTN-calls) */ 'hold' | 'joinCallFailedDueToNoNetwork' | 'leftCall' | 'leaving' | 'lobby' | /* @conditional-compile-remove(rooms) */ 'deniedPermissionToRoom' | 'removedFromCall' | /* @conditional-compile-remove(rooms) */ 'roomNotFound' | /* @conditional-compile-remove(unsupported-browser) */ 'unsupportedEnvironment' | /* @conditional-compile-remove(call-transfer) */ 'transferring';
1411
1411
 
1412
1412
  /**
1413
1413
  * Props for {@link CallComposite}.
@@ -1513,6 +1513,10 @@ export declare interface CallCompositeStrings {
1513
1513
  * More details text of the page shown to the user when joining a call fails due to a network problem.
1514
1514
  */
1515
1515
  failedToJoinCallDueToNoNetworkMoreDetails?: string;
1516
+ /**
1517
+ * Text to display on a leaving page.
1518
+ */
1519
+ leavingCallTitle?: string;
1516
1520
  /**
1517
1521
  * Title text of the page shown to the user when they leave a call in the call composite.
1518
1522
  */
@@ -1893,6 +1897,22 @@ export declare interface CallCompositeStrings {
1893
1897
  * captions banner loading spinner label
1894
1898
  */
1895
1899
  captionsBannerSpinnerText?: string;
1900
+ /**
1901
+ * transfer page text when showing the transferor who initiated the transfer
1902
+ */
1903
+ transferPageTransferorText: string;
1904
+ /**
1905
+ * transfer page text when showing the transfer target
1906
+ */
1907
+ transferPageTransferTargetText: string;
1908
+ /**
1909
+ * transfer page display name for unknown participant
1910
+ */
1911
+ transferPageUnknownTransferorDisplayName: string;
1912
+ /**
1913
+ * transfer page display name for unknown participant
1914
+ */
1915
+ transferPageUnknownTransferTargetDisplayName: string;
1896
1916
  }
1897
1917
 
1898
1918
  /**
@@ -167,7 +167,7 @@ const _toCommunicationIdentifier = (id) => {
167
167
  // Copyright (c) Microsoft Corporation.
168
168
  // Licensed under the MIT license.
169
169
  // GENERATED FILE. DO NOT EDIT MANUALLY.
170
- var telemetryVersion = '1.5.1-alpha-202306070014';
170
+ var telemetryVersion = '1.5.1-alpha-202306090015';
171
171
 
172
172
  // Copyright (c) Microsoft Corporation.
173
173
  /**
@@ -433,7 +433,8 @@ var __awaiter$J = (window && window.__awaiter) || function (thisArg, _arguments,
433
433
  *
434
434
  * @internal
435
435
  */
436
- const _isInCall = (callStatus) => !!callStatus && !['None', 'Disconnected', 'Connecting', 'Ringing', 'EarlyMedia'].includes(callStatus);
436
+ const _isInCall = (callStatus) => !!callStatus &&
437
+ !['None', 'Disconnected', 'Connecting', 'Ringing', 'EarlyMedia', 'Disconnecting'].includes(callStatus);
437
438
  /**
438
439
  * Check if the call state represents being in the lobby or waiting to be admitted.
439
440
  *
@@ -6575,8 +6576,8 @@ const findStringsDiffIndexes = (props) => {
6575
6576
  * @returns The html string for the mention suggestion.
6576
6577
  */
6577
6578
  const htmlStringForMentionSuggestion = (suggestion, localeStrings) => {
6578
- const idHTML = ' id ="' + suggestion.id + '"';
6579
- const displayTextHTML = ' displayText ="' + suggestion.displayText + '"';
6579
+ const idHTML = ' id="' + suggestion.id + '"';
6580
+ const displayTextHTML = ' displayText="' + suggestion.displayText + '"';
6580
6581
  const displayText = getDisplayNameForMentionSuggestion(suggestion, localeStrings);
6581
6582
  return '<' + MSFT_MENTION_TAG + idHTML + displayTextHTML + '>' + displayText + '</' + MSFT_MENTION_TAG + '>';
6582
6583
  };
@@ -8193,7 +8194,7 @@ const defaultBlockedMessageStyleContainer = (theme) => ({
8193
8194
  * @private
8194
8195
  */
8195
8196
  const gutterWithAvatar = {
8196
- width: `${AVATAR_WIDTH_REM}`,
8197
+ width: `${AVATAR_WIDTH_REM}rem`,
8197
8198
  position: 'relative',
8198
8199
  float: 'left',
8199
8200
  display: 'block',
@@ -11074,9 +11075,9 @@ const DEFAULT_PERSONA_MIN_SIZE_PX = 32;
11074
11075
  const DefaultPlaceholder = (props) => {
11075
11076
  const { text, noVideoAvailableAriaLabel, coinSize, hidePersonaDetails } = props;
11076
11077
  return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
11077
- React__default['default'].createElement(react.Stack, { styles: defaultPersonaStyles }, coinSize && (React__default['default'].createElement(react.Persona, { coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: "white", "aria-label": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false })))));
11078
+ React__default['default'].createElement(react.Stack, { styles: defaultPersonaStyles$1 }, coinSize && (React__default['default'].createElement(react.Persona, { coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: "white", "aria-label": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false })))));
11078
11079
  };
11079
- const defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };
11080
+ const defaultPersonaStyles$1 = { root: { margin: 'auto', maxHeight: '100%' } };
11080
11081
  /* @conditional-compile-remove(pinned-participants) */
11081
11082
  const videoTileMoreMenuIconProps = { iconName: undefined, style: { display: 'none' } };
11082
11083
  /* @conditional-compile-remove(pinned-participants) */
@@ -11162,7 +11163,7 @@ const VideoTile = (props) => {
11162
11163
  text: initialsName !== null && initialsName !== void 0 ? initialsName : displayName,
11163
11164
  noVideoAvailableAriaLabel,
11164
11165
  coinSize: personaSize,
11165
- styles: defaultPersonaStyles,
11166
+ styles: defaultPersonaStyles$1,
11166
11167
  hidePersonaDetails: true
11167
11168
  };
11168
11169
  const videoHintWithBorderRadius = react.mergeStyles(videoHint, { borderRadius: theme.effects.roundedCorner4 });
@@ -14823,11 +14824,11 @@ const _PictureInPictureInPicture = (props) => {
14823
14824
  */
14824
14825
  const PictureInPictureInPictureContainer = (props) => {
14825
14826
  const onKeyPress = (e) => props.onClick && submitWithKeyboard(e, props.onClick);
14826
- return (React__default['default'].createElement("aside", { style: tileContainerStyles, onClick: props.onClick, onKeyPress: onKeyPress, "aria-label": props.ariaLabel, tabIndex: props.onClick ? 0 : -1, "data-ui-id": "picture-in-picture-in-picture-root" },
14827
+ return (React__default['default'].createElement("aside", { style: tileContainerStyles$1, onClick: props.onClick, onKeyPress: onKeyPress, "aria-label": props.ariaLabel, tabIndex: props.onClick ? 0 : -1, "data-ui-id": "picture-in-picture-in-picture-root" },
14827
14828
  props.primaryView,
14828
14829
  React__default['default'].createElement("div", { style: secondaryTileFloatingStyles }, props.secondaryView)));
14829
14830
  };
14830
- const tileContainerStyles = {
14831
+ const tileContainerStyles$1 = {
14831
14832
  display: 'flex',
14832
14833
  width: 'min-content',
14833
14834
  position: 'relative',
@@ -18636,7 +18637,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
18636
18637
  */
18637
18638
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
18638
18639
 
18639
- var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"What language is being spoken?",captionsSettingsDropdownLabel:"Spoken language",captionsSettingsDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",captionsAvailableLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionsBannerSpinnerText:"Starting captions..."};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
18640
+ var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"What language is being spoken?",captionsSettingsDropdownLabel:"Spoken language",captionsSettingsDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",captionsAvailableLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown"};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
18640
18641
 
18641
18642
  var call$c={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"What language is being spoken?",captionsSettingsDropdownLabel:"Spoken language",captionsSettingsDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",captionsAvailableLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionsBannerSpinnerText:"Starting captions..."};var chat$c={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$c={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_GB = {call:call$c,chat:chat$c,callWithChat:callWithChat$c};
18642
18643
 
@@ -19163,11 +19164,15 @@ const getCallEndReason = (call) => {
19163
19164
  *
19164
19165
  * @private
19165
19166
  */
19166
- const getCallCompositePage = (call, previousCall, unsupportedBrowserInfo) => {
19167
+ const getCallCompositePage = (call, previousCall, unsupportedBrowserInfo, transferCall) => {
19167
19168
  /* @conditional-compile-remove(unsupported-browser) */
19168
19169
  if (isUnsupportedEnvironment(unsupportedBrowserInfo.environmentInfo, unsupportedBrowserInfo.unsupportedBrowserVersionOptedIn)) {
19169
19170
  return 'unsupportedEnvironment';
19170
19171
  }
19172
+ /* @conditional-compile-remove(call-transfer) */
19173
+ if (transferCall !== undefined) {
19174
+ return 'transferring';
19175
+ }
19171
19176
  if (call) {
19172
19177
  // Must check for ongoing call *before* looking at any previous calls.
19173
19178
  // If the composite completes one call and joins another, the previous calls
@@ -19181,6 +19186,9 @@ const getCallCompositePage = (call, previousCall, unsupportedBrowserInfo) => {
19181
19186
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
19182
19187
  return 'hold';
19183
19188
  }
19189
+ else if ((call === null || call === void 0 ? void 0 : call.state) === 'Disconnecting') {
19190
+ return 'leaving';
19191
+ }
19184
19192
  else if (_isInCall(call === null || call === void 0 ? void 0 : call.state)) {
19185
19193
  return 'call';
19186
19194
  }
@@ -20442,7 +20450,7 @@ const participantListMobileStyle = {
20442
20450
  /**
20443
20451
  * @private
20444
20452
  */
20445
- const displayNameStyles = {
20453
+ const displayNameStyles$1 = {
20446
20454
  root: {
20447
20455
  padding: '0.5rem',
20448
20456
  textOverflow: 'ellipsis',
@@ -20478,7 +20486,7 @@ const ParticipantListWithHeading = (props) => {
20478
20486
  React__default['default'].createElement(react.FocusZone, { className: participantListContainerStyle, shouldFocusOnMount: true },
20479
20487
  React__default['default'].createElement(ParticipantList, Object.assign({}, participantListProps, { styles: props.isMobile ? participantListMobileStyle : participantListStyle, onRenderAvatar: (userId, options) => (React__default['default'].createElement(React__default['default'].Fragment, null,
20480
20488
  React__default['default'].createElement(AvatarPersona, Object.assign({ "data-ui-id": "chat-composite-participant-custom-avatar", userId: userId }, options, { hidePersonaDetails: !!(options === null || options === void 0 ? void 0 : options.text) }, { dataProvider: onFetchAvatarPersonaData })),
20481
- (options === null || options === void 0 ? void 0 : options.text) && (React__default['default'].createElement(react.Text, { nowrap: true, styles: displayNameStyles }, options === null || options === void 0 ? void 0 : options.text)))), onFetchParticipantMenuItems: onFetchParticipantMenuItems, showParticipantOverflowTooltip: !props.isMobile })))));
20489
+ (options === null || options === void 0 ? void 0 : options.text) && (React__default['default'].createElement(react.Text, { nowrap: true, styles: displayNameStyles$1 }, options === null || options === void 0 ? void 0 : options.text)))), onFetchParticipantMenuItems: onFetchParticipantMenuItems, showParticipantOverflowTooltip: !props.isMobile })))));
20482
20490
  };
20483
20491
 
20484
20492
  // Copyright (c) Microsoft Corporation.
@@ -21313,6 +21321,11 @@ const getRole = (state) => { var _a; return (_a = state.call) === null || _a ===
21313
21321
  * @private
21314
21322
  */
21315
21323
  const getPage = (state) => state.page;
21324
+ /* @conditional-compile-remove(call-transfer) */
21325
+ /**
21326
+ * @private
21327
+ */
21328
+ const getTransferCall = (state) => state.acceptedTransferCallState;
21316
21329
  /**
21317
21330
  * @private
21318
21331
  */
@@ -21517,6 +21530,13 @@ const drawerContainerStyles = (zIndex = DEFAULT_Z_INDEX) => ({
21517
21530
  zIndex: zIndex
21518
21531
  }
21519
21532
  });
21533
+ /**
21534
+ * @private
21535
+ * Page container style for leaving page
21536
+ */
21537
+ const leavingPageStyle = (palette) => ({
21538
+ background: palette.neutralLighterAlt
21539
+ });
21520
21540
 
21521
21541
  // Copyright (c) Microsoft Corporation.
21522
21542
  /** @private */
@@ -23604,7 +23624,7 @@ const VideoEffectsPaneTrampoline = (onDismissError, activeVideoEffectError, sele
23604
23624
  const locale = useLocale();
23605
23625
  /* @conditional-compile-remove(video-background-effects) */
23606
23626
  return (React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
23607
- videoEffectError && (React__default['default'].createElement(react.MessageBar, { messageBarType: react.MessageBarType.error, onDismiss: () => onDismissError(videoEffectError) }, locale.strings.call.unableToStartVideoEffect)),
23627
+ videoEffectError && isCameraOn && (React__default['default'].createElement(react.MessageBar, { messageBarType: react.MessageBarType.error, onDismiss: () => onDismissError(videoEffectError) }, locale.strings.call.unableToStartVideoEffect)),
23608
23628
  showWarning && (React__default['default'].createElement(react.MessageBar, { messageBarType: react.MessageBarType.warning }, locale.strings.call.cameraOffBackgroundEffectWarningText)),
23609
23629
  React__default['default'].createElement(_VideoBackgroundEffectsPicker, { label: locale.strings.call.videoEffectsPaneBackgroundSelectionTitle, styles: backgroundPickerStyles, options: selectableVideoEffects !== null && selectableVideoEffects !== void 0 ? selectableVideoEffects : [], onChange: onEffectChange, selectedEffectKey: selectedEffect })));
23610
23630
  };
@@ -24071,13 +24091,15 @@ const CallArrangement = (props) => {
24071
24091
  /* @conditional-compile-remove(rooms) */
24072
24092
  canUnmute = rolePermissions.microphoneButton;
24073
24093
  let errorBarProps = props.errorBarProps;
24094
+ /* @conditional-compile-remove(video-background-effects) */
24095
+ const isCameraOn = useSelector$1(localVideoSelector).isAvailable;
24074
24096
  /* @conditional-compile-remove(rooms) */
24075
24097
  // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK
24076
24098
  if (!rolePermissions.cameraButton && props.errorBarProps) {
24077
24099
  errorBarProps = Object.assign(Object.assign({}, props.errorBarProps), { activeErrorMessages: props.errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari') });
24078
24100
  }
24079
24101
  /* @conditional-compile-remove(video-background-effects) */
24080
- if (useIsParticularSidePaneOpen('videoeffects') && props.errorBarProps) {
24102
+ if ((useIsParticularSidePaneOpen('videoeffects') || !isCameraOn) && props.errorBarProps) {
24081
24103
  errorBarProps = Object.assign(Object.assign({}, props.errorBarProps), { activeErrorMessages: props.errorBarProps.activeErrorMessages.filter((e) => e.type !== 'unableToStartVideoEffect') });
24082
24104
  }
24083
24105
  /* @conditional-compile-remove(close-captions) */
@@ -24347,14 +24369,14 @@ const MediaGallery = (props) => {
24347
24369
  ? 'VerticalRight'
24348
24370
  : 'HorizontalBottom', [containerWidth, containerHeight]);
24349
24371
  const VideoGalleryMemoized = React.useMemo(() => {
24350
- var _a;
24351
- return (React__default['default'].createElement(VideoGallery, Object.assign({}, videoGalleryProps, { localVideoViewOptions: localVideoViewOptions$2, remoteVideoViewOptions: remoteVideoViewOptions, styles: VideoGalleryStyles, layout: layoutBasedOnTilePosition, showCameraSwitcherInLocalPreview: props.isMobile, localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: onRenderAvatar,
24372
+ var _a, _b;
24373
+ return (React__default['default'].createElement(VideoGallery, Object.assign({}, videoGalleryProps, { localVideoViewOptions: localVideoViewOptions$2, remoteVideoViewOptions: remoteVideoViewOptions, styles: VideoGalleryStyles, layout: layoutBasedOnTilePosition, showCameraSwitcherInLocalPreview: props.isMobile, localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: (_a = props.onRenderAvatar) !== null && _a !== void 0 ? _a : onRenderAvatar,
24352
24374
  /* @conditional-compile-remove(pinned-participants) */
24353
24375
  remoteVideoTileMenuOptions: remoteVideoTileMenuOptions,
24354
24376
  /* @conditional-compile-remove(vertical-gallery) */
24355
24377
  overflowGalleryPosition: overflowGalleryPosition,
24356
24378
  /* @conditional-compile-remove(click-to-call) */
24357
- localVideoTileSize: ((_a = props.localVideoTileOptions) === null || _a === void 0 ? void 0 : _a.position) === 'hidden'
24379
+ localVideoTileSize: ((_b = props.localVideoTileOptions) === null || _b === void 0 ? void 0 : _b.position) === 'hidden'
24358
24380
  ? 'hidden'
24359
24381
  : props.isMobile
24360
24382
  ? 'followDeviceOrientation'
@@ -24362,6 +24384,7 @@ const MediaGallery = (props) => {
24362
24384
  }, [
24363
24385
  videoGalleryProps,
24364
24386
  props.isMobile,
24387
+ props.onRenderAvatar,
24365
24388
  onRenderAvatar,
24366
24389
  cameraSwitcherProps,
24367
24390
  /* @conditional-compile-remove(pinned-participants) */ remoteVideoTileMenuOptions,
@@ -25443,13 +25466,15 @@ const ConfigurationPage = (props) => {
25443
25466
  let disableStartCallButton = !microphonePermissionGranted || ((_a = deviceState.microphones) === null || _a === void 0 ? void 0 : _a.length) === 0;
25444
25467
  /* @conditional-compile-remove(rooms) */
25445
25468
  const rolePermissions = _usePermissions();
25469
+ /* @conditional-compile-remove(video-background-effects) */
25470
+ const isCameraOn = useSelector$1(localVideoSelector).isAvailable;
25446
25471
  /* @conditional-compile-remove(rooms) */
25447
25472
  // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK
25448
25473
  if (!rolePermissions.cameraButton) {
25449
25474
  errorBarProps = Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari') });
25450
25475
  }
25451
25476
  /* @conditional-compile-remove(video-background-effects) */
25452
- if (useIsParticularSidePaneOpen('videoeffects') && errorBarProps) {
25477
+ if ((useIsParticularSidePaneOpen('videoeffects') || !isCameraOn) && errorBarProps) {
25453
25478
  errorBarProps = Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'unableToStartVideoEffect') });
25454
25479
  }
25455
25480
  /* @conditional-compile-remove(rooms) */
@@ -25642,13 +25667,13 @@ const moreDetailsStyles = {
25642
25667
  */
25643
25668
  function NoticePage(props) {
25644
25669
  const adapter = useAdapter();
25645
- return (React__default['default'].createElement(react.Stack, { verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": props.dataUiId, "aria-atomic": true },
25670
+ return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(props.pageStyle), verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": props.dataUiId, "aria-atomic": true },
25646
25671
  React__default['default'].createElement(react.Stack, { className: react.mergeStyles(containerStyle), tokens: containerItemGap },
25647
25672
  props.iconName && React__default['default'].createElement(CallCompositeIcon, { iconName: props.iconName }),
25648
25673
  React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyles), "aria-live": "assertive" }, props.title),
25649
25674
  React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyles), "aria-live": "assertive" }, props.moreDetails),
25650
- React__default['default'].createElement(react.Stack, { styles: rejoinCallButtonContainerStyles },
25651
- React__default['default'].createElement(StartCallButton, { onClick: () => adapter.joinCall(), disabled: false, rejoinCall: true, autoFocus: true })))));
25675
+ !props.disableStartCallButton && (React__default['default'].createElement(react.Stack, { styles: rejoinCallButtonContainerStyles },
25676
+ React__default['default'].createElement(StartCallButton, { onClick: () => adapter.joinCall(), disabled: false, rejoinCall: true, autoFocus: true }))))));
25652
25677
  }
25653
25678
 
25654
25679
  // Copyright (c) Microsoft Corporation.
@@ -25769,6 +25794,139 @@ const outboundCallStringsTrampoline = (strings) => {
25769
25794
  return strings.outboundCallingNoticeString;
25770
25795
  };
25771
25796
 
25797
+ // Copyright (c) Microsoft Corporation.
25798
+ // Licensed under the MIT license.
25799
+ /**
25800
+ * @private
25801
+ */
25802
+ const tileContainerStyles = {
25803
+ position: 'absolute',
25804
+ top: '0',
25805
+ left: '0',
25806
+ width: '100%',
25807
+ height: '100%',
25808
+ minWidth: '100%',
25809
+ minHeight: '100%',
25810
+ objectPosition: 'center',
25811
+ objectFit: 'cover',
25812
+ zIndex: 0
25813
+ };
25814
+ /**
25815
+ * @private
25816
+ */
25817
+ const tileContentStyles = {
25818
+ width: '100%',
25819
+ position: 'absolute',
25820
+ top: '50%',
25821
+ transform: 'translate(0, -50%)',
25822
+ display: 'flex',
25823
+ justifyContent: 'center'
25824
+ };
25825
+ /**
25826
+ * @private
25827
+ */
25828
+ const defaultPersonaStyles = {
25829
+ root: { margin: 'auto' }
25830
+ };
25831
+ /**
25832
+ * @private
25833
+ */
25834
+ const displayNameStyles = { textAlign: 'center', fontSize: '1.5rem', fontWeight: 400 };
25835
+ /**
25836
+ * @private
25837
+ */
25838
+ const spinnerStyles = { circle: { borderWidth: '0.125rem' } };
25839
+ /**
25840
+ * @private
25841
+ */
25842
+ const statusTextStyles = { textAlign: 'center', fontSize: '1rem' };
25843
+
25844
+ // Copyright (c) Microsoft Corporation.
25845
+ /**
25846
+ * @private
25847
+ */
25848
+ const TransferPage = (props) => {
25849
+ var _a, _b, _c, _d, _e;
25850
+ const errorBarProps = usePropsFor$1(ErrorBar);
25851
+ const strings = useLocale().strings.call;
25852
+ const remoteParticipants = useSelector$1(getRemoteParticipants);
25853
+ /* @conditional-compile-remove(call-transfer) */
25854
+ const transferCall = useSelector$1(getTransferCall);
25855
+ // Reduce the controls shown when mobile view is enabled.
25856
+ const callControlOptions = props.mobileView
25857
+ ? reduceCallControlsForMobile((_a = props.options) === null || _a === void 0 ? void 0 : _a.callControls)
25858
+ : (_b = props.options) === null || _b === void 0 ? void 0 : _b.callControls;
25859
+ /* @conditional-compile-remove(call-transfer) */
25860
+ // page subject is which should be participant shown in the transfer page depending on the transfer call state
25861
+ const pageSubject = React.useMemo(() => {
25862
+ if (transferCall && ['Ringing', 'Connected'].includes(transferCall.state)) {
25863
+ return 'transferTarget';
25864
+ }
25865
+ return 'transferor';
25866
+ }, [transferCall]);
25867
+ const transferor = React.useMemo(() => { var _a; return (remoteParticipants ? (_a = Object.values(remoteParticipants)) === null || _a === void 0 ? void 0 : _a[0] : undefined); }, [remoteParticipants]);
25868
+ /* @conditional-compile-remove(call-transfer) */
25869
+ const transferTarget = React.useMemo(() => { var _a; return ((transferCall === null || transferCall === void 0 ? void 0 : transferCall.remoteParticipants) ? (_a = Object.values(transferCall.remoteParticipants)) === null || _a === void 0 ? void 0 : _a[0] : undefined); }, [transferCall]);
25870
+ let transferTileParticipant = transferor;
25871
+ /* @conditional-compile-remove(call-transfer) */
25872
+ if (pageSubject === 'transferTarget') {
25873
+ transferTileParticipant = transferTarget;
25874
+ }
25875
+ let transferParticipantDisplayName = (_c = transferor === null || transferor === void 0 ? void 0 : transferor.displayName) !== null && _c !== void 0 ? _c :
25876
+ /* @conditional-compile-remove(call-transfer) */ strings.transferPageUnknownTransferorDisplayName;
25877
+ /* @conditional-compile-remove(call-transfer) */
25878
+ if (pageSubject === 'transferTarget') {
25879
+ transferParticipantDisplayName =
25880
+ (_d = transferTarget === null || transferTarget === void 0 ? void 0 : transferTarget.displayName) !== null && _d !== void 0 ? _d : strings.transferPageUnknownTransferTargetDisplayName;
25881
+ }
25882
+ return (React__default['default'].createElement(CallArrangement, { complianceBannerProps: { strings },
25883
+ // Ignore errors from before current call. This avoids old errors from showing up when a user re-joins a call.
25884
+ errorBarProps: ((_e = props.options) === null || _e === void 0 ? void 0 : _e.errorBar) !== false && Object.assign(Object.assign({}, errorBarProps), { ignorePremountErrors: true }), callControlProps: {
25885
+ options: callControlOptions,
25886
+ increaseFlyoutItemSize: props.mobileView
25887
+ }, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => (React__default['default'].createElement(TransferTile, { userId: transferTileParticipant ? toFlatCommunicationIdentifier(transferTileParticipant === null || transferTileParticipant === void 0 ? void 0 : transferTileParticipant.identifier) : undefined, displayName: transferParticipantDisplayName, initialsName: transferParticipantDisplayName,
25888
+ /* @conditional-compile-remove(call-transfer) */
25889
+ statusText: pageSubject === 'transferTarget'
25890
+ ? strings.transferPageTransferTargetText
25891
+ : strings.transferPageTransferorText, onRenderAvatar: props.onRenderAvatar, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData })), dataUiId: 'transfer-page', updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader }));
25892
+ };
25893
+ const TransferTile = (props) => {
25894
+ const { displayName, initialsName, userId, onRenderAvatar, onFetchAvatarPersonaData, statusText } = props;
25895
+ const [personaSize, setPersonaSize] = React.useState();
25896
+ const tileRef = React.useRef(null);
25897
+ const observer = React.useRef(new ResizeObserver((entries) => {
25898
+ const { width, height } = entries[0].contentRect;
25899
+ const personaSize = Math.min(width, height) / 2;
25900
+ setPersonaSize(Math.max(Math.min(personaSize, 150), 32));
25901
+ }));
25902
+ React.useLayoutEffect(() => {
25903
+ if (tileRef.current) {
25904
+ observer.current.observe(tileRef.current);
25905
+ }
25906
+ const currentObserver = observer.current;
25907
+ return () => currentObserver.disconnect();
25908
+ }, [observer, tileRef]);
25909
+ const placeholderOptions = React.useMemo(() => ({
25910
+ userId,
25911
+ text: initialsName !== null && initialsName !== void 0 ? initialsName : displayName,
25912
+ coinSize: personaSize,
25913
+ styles: defaultPersonaStyles,
25914
+ hidePersonaDetails: true
25915
+ }), [userId, initialsName, displayName, personaSize]);
25916
+ const defaultOnRenderAvatar = React.useCallback(() => {
25917
+ return personaSize ? React__default['default'].createElement(AvatarPersona, Object.assign({}, placeholderOptions, { dataProvider: onFetchAvatarPersonaData })) : React__default['default'].createElement(React__default['default'].Fragment, null);
25918
+ }, [placeholderOptions, onFetchAvatarPersonaData, personaSize]);
25919
+ const defaultAvatar = React.useMemo(() => defaultOnRenderAvatar(), [defaultOnRenderAvatar]);
25920
+ return (React__default['default'].createElement("div", { ref: tileRef, className: react.mergeStyles(tileContainerStyles), "data-is-focusable": true },
25921
+ React__default['default'].createElement(react.Stack, { className: react.mergeStyles(tileContentStyles), tokens: { childrenGap: '1rem' } },
25922
+ React__default['default'].createElement(react.Stack, { horizontalAlign: "center", tokens: { childrenGap: '0.5rem' } },
25923
+ onRenderAvatar ? onRenderAvatar(userId !== null && userId !== void 0 ? userId : '', placeholderOptions, defaultOnRenderAvatar) : defaultAvatar,
25924
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(displayNameStyles) }, displayName)),
25925
+ React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "center", verticalAlign: "center", tokens: { childrenGap: '0.5rem' } },
25926
+ React__default['default'].createElement(react.Spinner, { size: react.SpinnerSize.large, className: react.mergeStyles(spinnerStyles) }),
25927
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(statusTextStyles) }, statusText)))));
25928
+ };
25929
+
25772
25930
  // Copyright (c) Microsoft Corporation.
25773
25931
  /**
25774
25932
  * styles for hold pane resume button
@@ -26014,7 +26172,7 @@ const isShowing = (overrideSidePane) => {
26014
26172
  return !!(overrideSidePane === null || overrideSidePane === void 0 ? void 0 : overrideSidePane.isActive);
26015
26173
  };
26016
26174
  const MainScreen = (props) => {
26017
- var _a, _b, _c, _d;
26175
+ var _a, _b, _c, _d, _e;
26018
26176
  const { callInvitationUrl, onRenderAvatar, onFetchAvatarPersonaData, onFetchParticipantMenuItems } = props;
26019
26177
  const page = useSelector$1(getPage);
26020
26178
  const [sidePaneRenderer, setSidePaneRenderer] = React__default['default'].useState();
@@ -26035,6 +26193,8 @@ const MainScreen = (props) => {
26035
26193
  }, [sidePaneRenderer === null || sidePaneRenderer === void 0 ? void 0 : sidePaneRenderer.id, onSidePaneIdChange]);
26036
26194
  const adapter = useAdapter();
26037
26195
  const locale = useLocale();
26196
+ const palette = useTheme().palette;
26197
+ const leavePageStyle = React.useMemo(() => leavingPageStyle(palette), [palette]);
26038
26198
  /* @conditional-compile-remove(rooms) */
26039
26199
  const role = useSelector$1(getRole);
26040
26200
  let pageElement;
@@ -26068,12 +26228,19 @@ const MainScreen = (props) => {
26068
26228
  case 'joinCallFailedDueToNoNetwork':
26069
26229
  pageElement = (React__default['default'].createElement(NoticePage, { iconName: "NoticePageJoinCallFailedDueToNoNetwork", title: locale.strings.call.failedToJoinCallDueToNoNetworkTitle, moreDetails: locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails, dataUiId: 'join-call-failed-due-to-no-network-page' }));
26070
26230
  break;
26231
+ case 'leaving':
26232
+ pageElement = (React__default['default'].createElement(NoticePage, { title: (_d = locale.strings.call.leavingCallTitle) !== null && _d !== void 0 ? _d : 'Leaving...', dataUiId: 'leaving-page', pageStyle: leavePageStyle, disableStartCallButton: true }));
26233
+ break;
26071
26234
  case 'leftCall':
26072
26235
  pageElement = (React__default['default'].createElement(NoticePage, { iconName: "NoticePageLeftCall", title: locale.strings.call.leftCallTitle, moreDetails: locale.strings.call.leftCallMoreDetails, dataUiId: 'left-call-page' }));
26073
26236
  break;
26074
26237
  case 'lobby':
26075
26238
  pageElement = (React__default['default'].createElement(LobbyPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader }));
26076
26239
  break;
26240
+ /* @conditional-compile-remove(call-transfer) */
26241
+ case 'transferring':
26242
+ pageElement = (React__default['default'].createElement(TransferPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onRenderAvatar: onRenderAvatar, onFetchAvatarPersonaData: onFetchAvatarPersonaData }));
26243
+ break;
26077
26244
  case 'call':
26078
26245
  pageElement = (React__default['default'].createElement(CallPage, { onRenderAvatar: onRenderAvatar, callInvitationURL: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader }));
26079
26246
  break;
@@ -26087,7 +26254,7 @@ const MainScreen = (props) => {
26087
26254
  case 'unsupportedEnvironment':
26088
26255
  pageElement = (React__default['default'].createElement(React__default['default'].Fragment, null,
26089
26256
  /* @conditional-compile-remove(unsupported-browser) */
26090
- React__default['default'].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_d = props.options) === null || _d === void 0 ? void 0 : _d.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
26257
+ React__default['default'].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_e = props.options) === null || _e === void 0 ? void 0 : _e.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
26091
26258
  break;
26092
26259
  }
26093
26260
  if (!pageElement) {
@@ -26376,8 +26543,15 @@ class CallContext {
26376
26543
  environmentInfo: this.state.environmentInfo,
26377
26544
  unsupportedBrowserVersionOptedIn: this.state.unsupportedBrowserVersionsAllowed
26378
26545
  };
26546
+ /* @conditional-compile-remove(call-transfer) */
26547
+ const latestAcceptedTransfer = (call === null || call === void 0 ? void 0 : call.transferFeature.acceptedTransfers)
26548
+ ? findLatestAcceptedTransfer(call.transferFeature.acceptedTransfers)
26549
+ : undefined;
26550
+ /* @conditional-compile-remove(call-transfer) */
26551
+ const transferCall = latestAcceptedTransfer ? clientState.calls[latestAcceptedTransfer.callId] : undefined;
26379
26552
  const newPage = getCallCompositePage(call, latestEndedCall,
26380
- /* @conditional-compile-remove(unsupported-browser) */ environmentInfo);
26553
+ /* @conditional-compile-remove(unsupported-browser) */ environmentInfo,
26554
+ /* @conditional-compile-remove(call-transfer) */ transferCall);
26381
26555
  if (!IsCallEndedPage(oldPage) && IsCallEndedPage(newPage)) {
26382
26556
  this.emitter.emit('callEnded', { callId: this.callId });
26383
26557
  // Reset the callId to undefined as the call has ended.
@@ -26385,12 +26559,6 @@ class CallContext {
26385
26559
  // Make sure that the call is set to undefined in the state.
26386
26560
  call = undefined;
26387
26561
  }
26388
- /* @conditional-compile-remove(call-transfer) */
26389
- const latestAcceptedTransfer = (call === null || call === void 0 ? void 0 : call.transferFeature.acceptedTransfers)
26390
- ? findLatestAcceptedTransfer(call.transferFeature.acceptedTransfers)
26391
- : undefined;
26392
- /* @conditional-compile-remove(call-transfer) */
26393
- const transferCall = latestAcceptedTransfer ? clientState.calls[latestAcceptedTransfer.callId] : undefined;
26394
26562
  if (this.state.page) {
26395
26563
  this.setState(Object.assign(Object.assign({}, this.state), { userId: clientState.userId, displayName: (_a = clientState.callAgent) === null || _a === void 0 ? void 0 : _a.displayName, call, page: newPage, endedCall: latestEndedCall, devices: clientState.deviceManager, latestErrors: clientState.latestErrors, cameraStatus: (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((s) => s.mediaStreamType === 'Video')) ||
26396
26564
  clientState.deviceManager.unparentedViews.find((s) => s.mediaStreamType === 'Video')