@azure/communication-react 1.2.3-alpha-202206220015.0 → 1.2.3-alpha-202206280015.0

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 (86) hide show
  1. package/dist/communication-react.d.ts +36 -15
  2. package/dist/dist-cjs/communication-react/index.js +154 -111
  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/calling-component-bindings/src/callControlSelectors.js +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/callControlSelectors.js.map +1 -1
  7. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.d.ts.map +1 -1
  8. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js +30 -12
  9. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js.map +1 -1
  10. package/dist/dist-esm/react-components/src/components/CameraButton.d.ts +2 -2
  11. package/dist/dist-esm/react-components/src/components/CameraButton.d.ts.map +1 -1
  12. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionMenu.d.ts +1 -1
  13. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionMenu.d.ts.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +2 -1
  15. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/ErrorBar.d.ts +16 -3
  17. package/dist/dist-esm/react-components/src/components/ErrorBar.d.ts.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/ErrorBar.js +6 -0
  19. package/dist/dist-esm/react-components/src/components/ErrorBar.js.map +1 -1
  20. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +1 -1
  21. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts.map +1 -1
  22. package/dist/dist-esm/react-components/src/components/MicrophoneButton.d.ts +3 -3
  23. package/dist/dist-esm/react-components/src/components/MicrophoneButton.d.ts.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js +14 -6
  25. package/dist/dist-esm/react-components/src/components/MicrophoneButton.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/ParticipantItem.d.ts +2 -2
  27. package/dist/dist-esm/react-components/src/components/ParticipantItem.d.ts.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/SendBox.d.ts.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/SendBox.js +3 -2
  30. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/VoiceOverButton.d.ts +7 -0
  32. package/dist/dist-esm/react-components/src/components/VoiceOverButton.d.ts.map +1 -0
  33. package/dist/dist-esm/react-components/src/components/VoiceOverButton.js +32 -0
  34. package/dist/dist-esm/react-components/src/components/VoiceOverButton.js.map +1 -0
  35. package/dist/dist-esm/react-components/src/components/styles/VoiceOverButton.style.d.ts +9 -0
  36. package/dist/dist-esm/react-components/src/components/styles/VoiceOverButton.style.d.ts.map +1 -0
  37. package/dist/dist-esm/react-components/src/components/styles/VoiceOverButton.style.js +26 -0
  38. package/dist/dist-esm/react-components/src/components/styles/VoiceOverButton.style.js.map +1 -0
  39. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +3 -0
  40. package/dist/dist-esm/react-components/src/theming/icons.d.ts +3 -0
  41. package/dist/dist-esm/react-components/src/theming/icons.d.ts.map +1 -1
  42. package/dist/dist-esm/react-components/src/theming/icons.js +4 -1
  43. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  44. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.d.ts.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js +3 -3
  46. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js.map +1 -1
  47. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.d.ts.map +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +2 -23
  49. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  50. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.d.ts.map +1 -1
  51. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js +3 -3
  52. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js.map +1 -1
  53. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.d.ts +2 -3
  54. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.d.ts.map +1 -1
  55. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.js +2 -2
  56. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/StartCallButton.js.map +1 -1
  57. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.d.ts.map +1 -1
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js +4 -4
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js.map +1 -1
  62. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/SidePaneHeader.js +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/SidePaneHeader.js.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts +4 -4
  65. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.d.ts +1 -1
  67. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.d.ts.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/common/AvatarPersona.d.ts.map +1 -1
  69. package/dist/dist-esm/react-composites/src/composites/common/AvatarPersona.js +28 -6
  70. package/dist/dist-esm/react-composites/src/composites/common/AvatarPersona.js.map +1 -1
  71. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.d.ts.map +1 -1
  72. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js +5 -3
  73. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js.map +1 -1
  74. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +5 -0
  75. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts.map +1 -1
  76. package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
  77. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.d.ts +5 -1
  78. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.d.ts.map +1 -1
  79. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.js +10 -0
  80. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.js.map +1 -1
  81. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +1 -1
  82. package/package.json +7 -7
  83. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.d.ts +0 -21
  84. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.d.ts.map +0 -1
  85. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.js +0 -59
  86. package/dist/dist-esm/react-composites/src/composites/common/CustomDataModelUtils.js.map +0 -1
@@ -191,7 +191,7 @@ const fromFlatCommunicationIdentifier = (id) => {
191
191
  // Copyright (c) Microsoft Corporation.
192
192
  // Licensed under the MIT license.
193
193
  // GENERATED FILE. DO NOT EDIT MANUALLY.
194
- var telemetryVersion = '1.2.3-alpha-202206220015.0';
194
+ var telemetryVersion = '1.2.3-alpha-202206280015.0';
195
195
 
196
196
  // Copyright (c) Microsoft Corporation.
197
197
  /**
@@ -462,7 +462,7 @@ const cameraButtonSelector = reselect__namespace.createSelector([getLocalVideoSt
462
462
  const localVideoFromCall = localVideoStreams === null || localVideoStreams === void 0 ? void 0 : localVideoStreams.find((stream) => stream.mediaStreamType === 'Video');
463
463
  const permission = deviceManager.deviceAccess ? deviceManager.deviceAccess.video : true;
464
464
  return {
465
- disabled: !deviceManager.selectedCamera || !permission,
465
+ disabled: !deviceManager.selectedCamera || !permission || !deviceManager.cameras.length,
466
466
  checked: localVideoStreams !== undefined && localVideoStreams.length > 0 ? !!localVideoFromCall : previewOn,
467
467
  cameras: deviceManager.cameras,
468
468
  selectedCamera: deviceManager.selectedCamera
@@ -928,7 +928,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
928
928
  wordBreak: 'break-word'
929
929
  });
930
930
 
931
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$d={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad={placeholderText:"Enter a number"};var HoldButton$1={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad,HoldButton:HoldButton$1};
931
+ var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$d={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad={placeholderText:"Enter a number"};var HoldButton$1={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad,HoldButton:HoldButton$1};
932
932
 
933
933
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted"};var typingIndicator$c={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$c={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait."};var messageStatusIndicator$c={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$c={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$c={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera"};var microphoneButton$c={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var devicesButton$c={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$c={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$c={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$c={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",editedTag:"Edited",liveAuthorIntro:"{author} says",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}"};var errorBar$c={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen."};var videoGallery$c={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Cycle camera"};var en_GB$1 = {participantItem:participantItem$c,typingIndicator:typingIndicator$c,sendBox:sendBox$c,messageStatusIndicator:messageStatusIndicator$c,endCallButton:endCallButton$c,cameraButton:cameraButton$c,microphoneButton:microphoneButton$c,devicesButton:devicesButton$c,participantsButton:participantsButton$c,screenShareButton:screenShareButton$c,messageThread:messageThread$c,errorBar:errorBar$c,videoGallery:videoGallery$c};
934
934
 
@@ -1371,10 +1371,13 @@ const messageBarType = (errorType) => {
1371
1371
  case 'callNoMicrophoneFound':
1372
1372
  case 'callMicrophoneAccessDenied':
1373
1373
  case 'callMicrophoneMutedBySystem':
1374
+ case 'callMicrophoneUnmutedBySystem':
1374
1375
  case 'callMacOsMicrophoneAccessDenied':
1375
1376
  case 'callLocalVideoFreeze':
1376
1377
  case 'callCameraAccessDenied':
1377
1378
  case 'callCameraAlreadyInUse':
1379
+ case 'callVideoStoppedBySystem':
1380
+ case 'callVideoRecoveredBySystem':
1378
1381
  case 'callMacOsCameraAccessDenied':
1379
1382
  case 'callMacOsScreenShareAccessDenied':
1380
1383
  return react.MessageBarType.warning;
@@ -1392,10 +1395,13 @@ const customIconName = {
1392
1395
  callNoMicrophoneFound: 'ErrorBarCallNoMicrophoneFound',
1393
1396
  callMicrophoneAccessDenied: 'ErrorBarCallMicrophoneAccessDenied',
1394
1397
  callMicrophoneMutedBySystem: 'ErrorBarCallMicrophoneMutedBySystem',
1398
+ callMicrophoneUnmutedBySystem: 'ErrorBarCallMicrophoneUnmutedBySystem',
1395
1399
  callMacOsMicrophoneAccessDenied: 'ErrorBarCallMacOsMicrophoneAccessDenied',
1396
1400
  callLocalVideoFreeze: 'ErrorBarCallLocalVideoFreeze',
1397
1401
  callCameraAccessDenied: 'ErrorBarCallCameraAccessDenied',
1398
1402
  callCameraAlreadyInUse: 'ErrorBarCallCameraAlreadyInUse',
1403
+ callVideoStoppedBySystem: 'ErrorBarCallVideoStoppedBySystem',
1404
+ callVideoRecoveredBySystem: 'ErrorBarCallVideoRecoveredBySystem',
1399
1405
  callMacOsCameraAccessDenied: 'ErrorBarCallMacOsCameraAccessDenied'
1400
1406
  };
1401
1407
 
@@ -1864,9 +1870,12 @@ const DEFAULT_COMPONENT_ICONS = {
1864
1870
  ErrorBarCallMacOsMicrophoneAccessDenied: React__default['default'].createElement(reactIcons.MicProhibited16Filled, null),
1865
1871
  ErrorBarCallMicrophoneAccessDenied: React__default['default'].createElement(reactIcons.MicProhibited16Filled, null),
1866
1872
  ErrorBarCallMicrophoneMutedBySystem: React__default['default'].createElement(reactIcons.MicOff16Filled, null),
1873
+ ErrorBarCallMicrophoneUnmutedBySystem: React__default['default'].createElement(reactIcons.MicOn16Filled, null),
1867
1874
  ErrorBarCallNetworkQualityLow: React__default['default'].createElement(WifiWarning16Filled, null),
1868
1875
  ErrorBarCallNoMicrophoneFound: React__default['default'].createElement(reactIcons.MicProhibited16Filled, null),
1869
1876
  ErrorBarCallNoSpeakerFound: React__default['default'].createElement(reactIcons.SpeakerMute16Filled, null),
1877
+ ErrorBarCallVideoRecoveredBySystem: React__default['default'].createElement(reactIcons.Video16Filled, null),
1878
+ ErrorBarCallVideoStoppedBySystem: React__default['default'].createElement(reactIcons.VideoProhibited16Filled, null),
1870
1879
  HorizontalGalleryLeftButton: React__default['default'].createElement(reactIcons.ChevronLeft20Regular, null),
1871
1880
  HorizontalGalleryRightButton: React__default['default'].createElement(reactIcons.ChevronRight20Regular, null),
1872
1881
  MessageDelivered: React__default['default'].createElement(reactIcons.CheckmarkCircle16Regular, null),
@@ -2078,6 +2087,55 @@ const InputBoxButton = (props) => {
2078
2087
  }, onRenderIcon: () => onRenderIcon(isHover) })));
2079
2088
  };
2080
2089
 
2090
+ // Copyright (c) Microsoft Corporation.
2091
+ /**
2092
+ * @private
2093
+ */
2094
+ const buttonStyle$1 = react.mergeStyles({
2095
+ color: 'grey',
2096
+ margin: '0',
2097
+ padding: '0',
2098
+ width: '1.0625rem',
2099
+ height: '1.0625rem',
2100
+ border: 'none',
2101
+ minWidth: '0',
2102
+ '&:hover': {
2103
+ backgroundColor: 'transparent'
2104
+ }
2105
+ });
2106
+ /**
2107
+ * @private
2108
+ */
2109
+ const iconWrapperStyle$1 = react.mergeStyles({
2110
+ position: 'absolute',
2111
+ pointerEvents: 'none'
2112
+ });
2113
+
2114
+ // Copyright (c) Microsoft Corporation.
2115
+ /**
2116
+ * @private
2117
+ */
2118
+ const VoiceOverButton = (props) => {
2119
+ const { onRenderIcon, onClick, ariaLabel, className, id, tooltipContent } = props;
2120
+ const [isHover, setIsHover] = React.useState(false);
2121
+ const mergedButtonStyle = react.mergeStyles(buttonStyle$1, className);
2122
+ const theme = useTheme();
2123
+ const calloutStyle = { root: { padding: 0 }, calloutMain: { padding: '0.5rem' } };
2124
+ // Place callout with no gap between it and the button.
2125
+ const calloutProps = {
2126
+ gapSpace: 0,
2127
+ styles: calloutStyle,
2128
+ backgroundColor: isDarkThemed(theme) ? theme.palette.neutralLighter : ''
2129
+ };
2130
+ return (React__default['default'].createElement(react.TooltipHost, { hostClassName: inputButtonTooltipStyle, content: tooltipContent, calloutProps: Object.assign({}, calloutProps) },
2131
+ React__default['default'].createElement(react.DefaultButton, { className: mergedButtonStyle, ariaLabel: ariaLabel, onClick: onClick, id: id, onMouseEnter: () => {
2132
+ setIsHover(true);
2133
+ }, onMouseLeave: () => {
2134
+ setIsHover(false);
2135
+ } }),
2136
+ React__default['default'].createElement("div", { className: iconWrapperStyle$1 }, onRenderIcon(isHover))));
2137
+ };
2138
+
2081
2139
  // Copyright (c) Microsoft Corporation.
2082
2140
  /**
2083
2141
  * @private
@@ -2438,7 +2496,7 @@ const SendBox = (props) => {
2438
2496
  }, onEnterKeyDown: () => {
2439
2497
  sendMessageOnClick();
2440
2498
  }, styles: mergedStyles, supportNewline: supportNewline, maxLength: MAXIMUM_LENGTH_OF_MESSAGE$1 },
2441
- React__default['default'].createElement(InputBoxButton, { onRenderIcon: onRenderSendIcon, onClick: (e) => {
2499
+ React__default['default'].createElement(VoiceOverButton, { onRenderIcon: onRenderSendIcon, onClick: (e) => {
2442
2500
  if (!textValueOverflow) {
2443
2501
  sendMessageOnClick();
2444
2502
  }
@@ -3368,6 +3426,7 @@ const generateCustomizedTimestamp = (props, createdOn, locale) => {
3368
3426
  };
3369
3427
  /** @private */
3370
3428
  const MessageBubble = (props) => {
3429
+ var _a;
3371
3430
  const ids = useIdentifiers();
3372
3431
  const theme = useTheme();
3373
3432
  const locale = useLocale$1();
@@ -3390,7 +3449,7 @@ const MessageBubble = (props) => {
3390
3449
  const actionMenuProps = wasInteractionByTouch
3391
3450
  ? undefined
3392
3451
  : chatMessageActionMenuProps({
3393
- ariaLabel: strings.actionMenuMoreOptions,
3452
+ ariaLabel: (_a = strings.actionMenuMoreOptions) !== null && _a !== void 0 ? _a : '',
3394
3453
  enabled: chatActionsEnabled,
3395
3454
  menuButtonRef: messageActionButtonRef,
3396
3455
  // Force show the action button while the flyout is open (otherwise this will dismiss when the pointer is hovered over the flyout)
@@ -6686,16 +6745,24 @@ var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments,
6686
6745
  * @public
6687
6746
  */
6688
6747
  const MicrophoneButton = (props) => {
6689
- var _a, _b, _c, _d, _e, _f, _g;
6748
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
6690
6749
  const { onToggleMicrophone } = props;
6691
6750
  const localeStrings = useLocale$1().strings.microphoneButton;
6692
6751
  const strings = Object.assign(Object.assign({}, localeStrings), props.strings);
6693
6752
  const [announcerString, setAnnouncerString] = React.useState(undefined);
6753
+ const isSplit = (_a = props.split) !== null && _a !== void 0 ? _a : props.enableDeviceSelectionMenu;
6754
+ // The button should be disabled when there are no mics. However if the button is a split button, if there are
6755
+ // no mics but there are speakers, then only the primary part of the button should be disabled to allow for
6756
+ // speaker change.
6757
+ const primaryDisabled = props.primaryDisabled || (isSplit && !((_b = props.microphones) === null || _b === void 0 ? void 0 : _b.length) ? true : undefined);
6758
+ const disabled = props.disabled ||
6759
+ (isSplit && !((_c = props.microphones) === null || _c === void 0 ? void 0 : _c.length) && !((_d = props.speakers) === null || _d === void 0 ? void 0 : _d.length)) ||
6760
+ (!isSplit && props.microphones && ((_e = props.microphones) === null || _e === void 0 ? void 0 : _e.length) === 0);
6694
6761
  const onRenderMicOnIcon = () => {
6695
- return React__default['default'].createElement(HighContrastAwareIcon, { disabled: props.disabled, iconName: "ControlButtonMicOn" });
6762
+ return React__default['default'].createElement(HighContrastAwareIcon, { disabled: disabled, iconName: "ControlButtonMicOn" });
6696
6763
  };
6697
6764
  const onRenderMicOffIcon = () => {
6698
- return React__default['default'].createElement(HighContrastAwareIcon, { disabled: props.disabled, iconName: "ControlButtonMicOff" });
6765
+ return React__default['default'].createElement(HighContrastAwareIcon, { disabled: disabled, iconName: "ControlButtonMicOff" });
6699
6766
  };
6700
6767
  const isMicOn = props.checked;
6701
6768
  const splitButtonAriaString = isMicOn ? strings.onSplitButtonAriaLabel : strings.offSplitButtonAriaLabel;
@@ -6716,9 +6783,9 @@ const MicrophoneButton = (props) => {
6716
6783
  }), [isMicOn, onToggleMicrophone, toggleAnnouncerString]);
6717
6784
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
6718
6785
  React__default['default'].createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),
6719
- React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { onClick: props.onToggleMicrophone ? onToggleClick : props.onClick, onRenderOnIcon: (_a = props.onRenderOnIcon) !== null && _a !== void 0 ? _a : onRenderMicOnIcon, onRenderOffIcon: (_b = props.onRenderOffIcon) !== null && _b !== void 0 ? _b : onRenderMicOffIcon, strings: strings, labelKey: (_c = props.labelKey) !== null && _c !== void 0 ? _c : 'microphoneButtonLabel', menuProps: (_d = props.menuProps) !== null && _d !== void 0 ? _d : (props.enableDeviceSelectionMenu
6720
- ? generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_e = props.styles) === null || _e === void 0 ? void 0 : _e.menuStyles }), strings)
6721
- : undefined), menuIconProps: ((_f = props.menuIconProps) !== null && _f !== void 0 ? _f : !props.enableDeviceSelectionMenu) ? { hidden: true } : undefined, split: (_g = props.split) !== null && _g !== void 0 ? _g : props.enableDeviceSelectionMenu, "aria-roledescription": props.enableDeviceSelectionMenu ? strings.microphoneButtonSplitRoleDescription : undefined, splitButtonAriaLabel: props.enableDeviceSelectionMenu ? splitButtonAriaString : undefined }))));
6786
+ React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { onClick: props.onToggleMicrophone ? onToggleClick : props.onClick, onRenderOnIcon: (_f = props.onRenderOnIcon) !== null && _f !== void 0 ? _f : onRenderMicOnIcon, onRenderOffIcon: (_g = props.onRenderOffIcon) !== null && _g !== void 0 ? _g : onRenderMicOffIcon, strings: strings, labelKey: (_h = props.labelKey) !== null && _h !== void 0 ? _h : 'microphoneButtonLabel', menuProps: (_j = props.menuProps) !== null && _j !== void 0 ? _j : (props.enableDeviceSelectionMenu
6787
+ ? generateDefaultDeviceMenuProps(Object.assign(Object.assign({}, props), { styles: (_k = props.styles) === null || _k === void 0 ? void 0 : _k.menuStyles }), strings)
6788
+ : undefined), menuIconProps: ((_l = props.menuIconProps) !== null && _l !== void 0 ? _l : !props.enableDeviceSelectionMenu) ? { hidden: true } : undefined, split: (_m = props.split) !== null && _m !== void 0 ? _m : props.enableDeviceSelectionMenu, "aria-roledescription": props.enableDeviceSelectionMenu ? strings.microphoneButtonSplitRoleDescription : undefined, splitButtonAriaLabel: props.enableDeviceSelectionMenu ? splitButtonAriaString : undefined, disabled: disabled, primaryDisabled: primaryDisabled }))));
6722
6789
  };
6723
6790
 
6724
6791
  // Copyright (c) Microsoft Corporation.
@@ -7936,7 +8003,7 @@ const useSelector$4 = (selector, selectorProps) => {
7936
8003
  * @public
7937
8004
  */
7938
8005
  const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagnostics, getDeviceManager$1], (latestErrors, diagnostics, deviceManager) => {
7939
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
8006
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
7940
8007
  // The order in which the errors are returned is significant: The `ErrorBar` shows errors on the UI in that order.
7941
8008
  // There are several options for the ordering:
7942
8009
  // - Sorted by when the errors happened (latest first / oldest first).
@@ -7956,28 +8023,46 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
7956
8023
  if (((_d = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.noMicrophoneDevicesEnumerated) === null || _d === void 0 ? void 0 : _d.value) === true) {
7957
8024
  activeErrorMessages.push({ type: 'callNoMicrophoneFound' });
7958
8025
  }
7959
- if (((_e = deviceManager.deviceAccess) === null || _e === void 0 ? void 0 : _e.audio) === false ||
7960
- ((_f = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphoneNotFunctioning) === null || _f === void 0 ? void 0 : _f.value) === true) {
8026
+ if (((_e = deviceManager.deviceAccess) === null || _e === void 0 ? void 0 : _e.audio) === false) {
7961
8027
  activeErrorMessages.push({ type: 'callMicrophoneAccessDenied' });
7962
8028
  }
7963
- if (((_g = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphoneMuteUnexpectedly) === null || _g === void 0 ? void 0 : _g.value) === true) {
7964
- activeErrorMessages.push({ type: 'callMicrophoneMutedBySystem' });
7965
- }
7966
- if (((_h = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphonePermissionDenied) === null || _h === void 0 ? void 0 : _h.value) === true) {
8029
+ if (((_f = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphonePermissionDenied) === null || _f === void 0 ? void 0 : _f.value) === true) {
7967
8030
  activeErrorMessages.push({ type: 'callMacOsMicrophoneAccessDenied' });
7968
8031
  }
7969
- if (((_j = deviceManager.deviceAccess) === null || _j === void 0 ? void 0 : _j.video) === false) {
8032
+ const microphoneMuteUnexpectedlyDiagnostic = (diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphoneMuteUnexpectedly) || (diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphoneNotFunctioning);
8033
+ if (microphoneMuteUnexpectedlyDiagnostic) {
8034
+ if (microphoneMuteUnexpectedlyDiagnostic.value === communicationCalling.DiagnosticQuality.Bad) {
8035
+ // Inform the user that microphone stopped working and inform them to start microphone again
8036
+ activeErrorMessages.push({ type: 'callMicrophoneMutedBySystem' });
8037
+ }
8038
+ else if (microphoneMuteUnexpectedlyDiagnostic.value === communicationCalling.DiagnosticQuality.Good) {
8039
+ // Inform the user that microphone recovered
8040
+ activeErrorMessages.push({ type: 'callMicrophoneUnmutedBySystem' });
8041
+ }
8042
+ }
8043
+ const cameraStoppedUnexpectedlyDiagnostic = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraStoppedUnexpectedly;
8044
+ if (cameraStoppedUnexpectedlyDiagnostic) {
8045
+ if (cameraStoppedUnexpectedlyDiagnostic.value === communicationCalling.DiagnosticQuality.Bad) {
8046
+ // Inform the user that camera stopped working and inform them to start video again
8047
+ activeErrorMessages.push({ type: 'callVideoStoppedBySystem' });
8048
+ }
8049
+ else if (cameraStoppedUnexpectedlyDiagnostic.value === communicationCalling.DiagnosticQuality.Good) {
8050
+ // Inform the user that camera recovered
8051
+ activeErrorMessages.push({ type: 'callVideoRecoveredBySystem' });
8052
+ }
8053
+ }
8054
+ if (((_g = deviceManager.deviceAccess) === null || _g === void 0 ? void 0 : _g.video) === false) {
7970
8055
  activeErrorMessages.push({ type: 'callCameraAccessDenied' });
7971
8056
  }
7972
8057
  else {
7973
- if (((_k = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraFreeze) === null || _k === void 0 ? void 0 : _k.value) === true) {
8058
+ if (((_h = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraFreeze) === null || _h === void 0 ? void 0 : _h.value) === true) {
7974
8059
  activeErrorMessages.push({ type: 'callCameraAlreadyInUse' });
7975
8060
  }
7976
8061
  }
7977
- if (((_l = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraPermissionDenied) === null || _l === void 0 ? void 0 : _l.value) === true) {
8062
+ if (((_j = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraPermissionDenied) === null || _j === void 0 ? void 0 : _j.value) === true) {
7978
8063
  activeErrorMessages.push({ type: 'callMacOsCameraAccessDenied' });
7979
8064
  }
7980
- if (((_m = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.screenshareRecordingDisabled) === null || _m === void 0 ? void 0 : _m.value) === true) {
8065
+ if (((_k = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.screenshareRecordingDisabled) === null || _k === void 0 ? void 0 : _k.value) === true) {
7981
8066
  activeErrorMessages.push({ type: 'callMacOsScreenShareAccessDenied' });
7982
8067
  }
7983
8068
  // Prefer to show errors with privacy implications.
@@ -7986,7 +8071,7 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
7986
8071
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.stopScreenSharing', 'stopScreenShareGeneric');
7987
8072
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.startVideo', 'startVideoGeneric');
7988
8073
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.unmute', 'unmuteGeneric');
7989
- if (((_o = latestErrors['CallAgent.join']) === null || _o === void 0 ? void 0 : _o.message) === 'CallAgent.join: Invalid meeting link') {
8074
+ if (((_l = latestErrors['CallAgent.join']) === null || _l === void 0 ? void 0 : _l.message) === 'CallAgent.join: Invalid meeting link') {
7990
8075
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'CallAgent.join', 'failedToJoinCallInvalidMeetingLink');
7991
8076
  }
7992
8077
  else {
@@ -12270,7 +12355,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
12270
12355
  */
12271
12356
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
12272
12357
 
12273
- var call$d={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",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",defaultPlaceHolder:"Select an option",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",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",soundLabel:"Sound",startCallButtonLabel:"Start call",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby."};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",chatButtonLabel:"Chat",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipOpen:"Show chat",chatButtonTooltipClose:"Hide chat",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",peoplePaneTitle:"People",peoplePaneSubTitle:"In this call",chatPaneTitle:"Chat",chatButtonNewMessageNotificationLabel:"New Message",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",copyInviteLinkButtonLabel:"Copy invite link",dismissSidePaneButton:"Close",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
12358
+ var call$d={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",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",defaultPlaceHolder:"Select an option",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",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",soundLabel:"Sound",startCallButtonLabel:"Start call",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby."};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",chatButtonLabel:"Chat",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipOpen:"Show chat",chatButtonTooltipClose:"Hide chat",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",peoplePaneTitle:"People",peoplePaneSubTitle:"In this call",chatPaneTitle:"Chat",chatButtonNewMessageNotificationLabel:"New Message",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",copyInviteLinkButtonLabel:"Copy invite link",dismissSidePaneButtonLabel:"Close",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
12274
12359
 
12275
12360
  var call$c={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",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",defaultPlaceHolder:"Select an option",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",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",soundLabel:"Sound",startCallButtonLabel:"Start call",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby."};var chat$c={chatListHeader:"In this chat"};var callWithChat$c={peopleButtonLabel:"People",peopleButtonTooltipContentOpen:"Show Participants",peopleButtonTooltipContentClose:"Hide Participants",chatButtonLabel:"Chat",chatButtonTooltipContentOpen:"Show Chat",chatButtonTooltipContentClose:"Hide Chat",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",peoplePaneTitle:"People",peoplePaneSubTitle:"In this call",chatPaneTitle:"Chat",chatButtonNewMessageNotificationLabel:"New Message",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",copyInviteLinkButtonLabel:"Copy invite link"};var en_GB = {call:call$c,chat:chat$c,callWithChat:callWithChat$c};
12276
12361
 
@@ -13324,44 +13409,30 @@ var __awaiter$8 = (window && window.__awaiter) || function (thisArg, _arguments,
13324
13409
  });
13325
13410
  };
13326
13411
  /**
13327
- * Hook to override the avatar persona data of the users
13328
- * - Calls {@link AvatarPersonaDataCallback} on each render for provided `userIds`
13329
- * - Returns an array of the same length as `userIds`. Entries in the array may be undefined if there is no data to return.
13412
+ * An Avatar component made using the `Persona` component.
13413
+ * It allows you to specify a `userId` and a `dataProvider` to retrieve the `AvatarPersonaData`.
13414
+ * Read more about `Persona` component at https://developer.microsoft.com/fluentui#/controls/web/persona
13415
+ *
13330
13416
  * @private
13331
13417
  */
13332
- const useCustomAvatarPersonaData = (userIds, callback) => {
13333
- const [data, setData] = React__default['default'].useState(Array(userIds.length).fill(undefined));
13418
+ const AvatarPersona = (props) => {
13419
+ var _a, _b, _c, _d, _e, _f;
13420
+ const { userId, dataProvider, text, imageUrl, imageInitials, initialsColor, initialsTextColor, showOverflowTooltip } = props;
13421
+ const [data, setData] = React.useState();
13334
13422
  React.useEffect(() => {
13335
13423
  (() => __awaiter$8(void 0, void 0, void 0, function* () {
13336
- const newData = yield Promise.all(userIds.map((userId) => __awaiter$8(void 0, void 0, void 0, function* () {
13337
- if (!userId || !callback) {
13338
- return undefined;
13424
+ if (dataProvider && userId) {
13425
+ const newData = yield dataProvider(userId);
13426
+ if (avatarDeepDifferenceCheck(data, newData)) {
13427
+ setData(newData);
13339
13428
  }
13340
- return yield callback(userId);
13341
- })));
13342
- if (shouldUpdate(data, newData)) {
13343
- setData(newData);
13344
13429
  }
13345
13430
  }))();
13346
- });
13347
- return data;
13348
- };
13349
- /**
13350
- * Function to determine if there is new user avatar data in current render pass.
13351
- * @param currentData current set set of avatar persona data present from the custom settings from the previous render
13352
- * @param newData new set of avatar persona data after a run of {@link useCustomAvatarPersonData}
13353
- * @returns Boolean whether there is new avatar persona data present.
13354
- * @private
13355
- */
13356
- const shouldUpdate = (currentData, newData) => {
13357
- if (currentData.length !== newData.length) {
13358
- return true;
13359
- }
13360
- return currentData.some((data, i) => avatarDeepDifferenceCheck(data, newData[i]));
13431
+ }, [data, dataProvider, userId]);
13432
+ return (React__default['default'].createElement(react.Persona, Object.assign({}, props, { text: (_a = data === null || data === void 0 ? void 0 : data.text) !== null && _a !== void 0 ? _a : text, imageUrl: (_b = data === null || data === void 0 ? void 0 : data.imageUrl) !== null && _b !== void 0 ? _b : imageUrl, imageInitials: (_c = data === null || data === void 0 ? void 0 : data.imageInitials) !== null && _c !== void 0 ? _c : imageInitials, initialsColor: (_d = data === null || data === void 0 ? void 0 : data.initialsColor) !== null && _d !== void 0 ? _d : initialsColor, initialsTextColor: (_f = (_e = data === null || data === void 0 ? void 0 : data.initialsTextColor) !== null && _e !== void 0 ? _e : initialsTextColor) !== null && _f !== void 0 ? _f : 'white',
13433
+ // default disable tooltip unless specified
13434
+ showOverflowTooltip: showOverflowTooltip !== null && showOverflowTooltip !== void 0 ? showOverflowTooltip : false })));
13361
13435
  };
13362
- /**
13363
- * @private
13364
- */
13365
13436
  const avatarDeepDifferenceCheck = (currentData, newData) => {
13366
13437
  return ((currentData === null || currentData === void 0 ? void 0 : currentData.text) !== (newData === null || newData === void 0 ? void 0 : newData.text) ||
13367
13438
  (currentData === null || currentData === void 0 ? void 0 : currentData.imageUrl) !== (newData === null || newData === void 0 ? void 0 : newData.imageUrl) ||
@@ -13370,26 +13441,6 @@ const avatarDeepDifferenceCheck = (currentData, newData) => {
13370
13441
  (currentData === null || currentData === void 0 ? void 0 : currentData.initialsTextColor) !== (newData === null || newData === void 0 ? void 0 : newData.initialsTextColor));
13371
13442
  };
13372
13443
 
13373
- // Copyright (c) Microsoft Corporation.
13374
- /**
13375
- * An Avatar component made using the `Persona` component.
13376
- * It allows you to specify a `userId` and a `dataProvider` to retrieve the `AvatarPersonaData`.
13377
- * Read more about `Persona` component at https://developer.microsoft.com/fluentui#/controls/web/persona
13378
- *
13379
- * @private
13380
- */
13381
- const AvatarPersona = (props) => {
13382
- var _a, _b, _c, _d, _e, _f;
13383
- const { userId, dataProvider, text, imageUrl, imageInitials, initialsColor, initialsTextColor, showOverflowTooltip } = props;
13384
- const userIds = React.useMemo(() => {
13385
- return [userId];
13386
- }, [userId]);
13387
- const [data] = useCustomAvatarPersonaData(userIds, dataProvider);
13388
- return (React__default['default'].createElement(react.Persona, Object.assign({}, props, { text: (_a = data === null || data === void 0 ? void 0 : data.text) !== null && _a !== void 0 ? _a : text, imageUrl: (_b = data === null || data === void 0 ? void 0 : data.imageUrl) !== null && _b !== void 0 ? _b : imageUrl, imageInitials: (_c = data === null || data === void 0 ? void 0 : data.imageInitials) !== null && _c !== void 0 ? _c : imageInitials, initialsColor: (_d = data === null || data === void 0 ? void 0 : data.initialsColor) !== null && _d !== void 0 ? _d : initialsColor, initialsTextColor: (_f = (_e = data === null || data === void 0 ? void 0 : data.initialsTextColor) !== null && _e !== void 0 ? _e : initialsTextColor) !== null && _f !== void 0 ? _f : 'white',
13389
- // default disable tooltip unless specified
13390
- showOverflowTooltip: showOverflowTooltip !== null && showOverflowTooltip !== void 0 ? showOverflowTooltip : false })));
13391
- };
13392
-
13393
13444
  // Copyright (c) Microsoft Corporation.
13394
13445
  /**
13395
13446
  * @private
@@ -13628,6 +13679,16 @@ const participantListMobileStyle = {
13628
13679
  }
13629
13680
  }
13630
13681
  };
13682
+ /**
13683
+ * @private
13684
+ */
13685
+ const displayNameStyles = {
13686
+ root: {
13687
+ padding: '0.5rem',
13688
+ textOverflow: 'ellipsis',
13689
+ overflow: 'hidden'
13690
+ }
13691
+ };
13631
13692
 
13632
13693
  // Copyright (c) Microsoft Corporation.
13633
13694
  /**
@@ -13655,7 +13716,9 @@ const ParticipantListWithHeading = (props) => {
13655
13716
  return (React__default['default'].createElement(react.Stack, { className: participantListStack },
13656
13717
  React__default['default'].createElement(react.Stack.Item, { styles: subheadingStyleThemed }, title),
13657
13718
  React__default['default'].createElement(react.FocusZone, { className: participantListContainerStyle },
13658
- React__default['default'].createElement(ParticipantList, Object.assign({}, participantListProps, { styles: props.isMobile ? participantListMobileStyle : participantListStyle, onRenderAvatar: (userId, options) => (React__default['default'].createElement(AvatarPersona, Object.assign({ "data-ui-id": "chat-composite-participant-custom-avatar", userId: userId }, options, { dataProvider: onFetchAvatarPersonaData }))), onFetchParticipantMenuItems: onFetchParticipantMenuItems, showParticipantOverflowTooltip: !props.isMobile })))));
13719
+ 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,
13720
+ 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 })),
13721
+ (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 })))));
13659
13722
  };
13660
13723
 
13661
13724
  // Copyright (c) Microsoft Corporation.
@@ -14621,13 +14684,12 @@ const MediaGallery = (props) => {
14621
14684
  const cameraSwitcherProps = React.useMemo(() => {
14622
14685
  return Object.assign(Object.assign({}, cameraSwitcherCallback), cameraSwitcherCameras);
14623
14686
  }, [cameraSwitcherCallback, cameraSwitcherCameras]);
14624
- const remoteParticipants = useRemoteParticipantsWithCustomDisplayNames(videoGalleryProps.remoteParticipants, props.onFetchAvatarPersonaData);
14625
14687
  const onRenderAvatar = React.useCallback((userId, options) => (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
14626
14688
  React__default['default'].createElement(AvatarPersona, Object.assign({ userId: userId }, options, { dataProvider: props.onFetchAvatarPersonaData })))), [props.onFetchAvatarPersonaData]);
14627
14689
  useLocalVideoStartTrigger(!!props.isVideoStreamOn);
14628
14690
  const VideoGalleryMemoized = React.useMemo(() => {
14629
- return (React__default['default'].createElement(VideoGallery, Object.assign({}, videoGalleryProps, { remoteParticipants: remoteParticipants, localVideoViewOptions: localVideoViewOptions$3, remoteVideoViewOptions: remoteVideoViewOptions$1, styles: VideoGalleryStyles, layout: "floatingLocalVideo", showCameraSwitcherInLocalPreview: props.isMobile, localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: onRenderAvatar })));
14630
- }, [videoGalleryProps, props.isMobile, onRenderAvatar, remoteParticipants, cameraSwitcherProps]);
14691
+ return (React__default['default'].createElement(VideoGallery, Object.assign({}, videoGalleryProps, { localVideoViewOptions: localVideoViewOptions$3, remoteVideoViewOptions: remoteVideoViewOptions$1, styles: VideoGalleryStyles, layout: "floatingLocalVideo", showCameraSwitcherInLocalPreview: props.isMobile, localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: onRenderAvatar })));
14692
+ }, [videoGalleryProps, props.isMobile, onRenderAvatar, cameraSwitcherProps]);
14631
14693
  return VideoGalleryMemoized;
14632
14694
  };
14633
14695
  /**
@@ -14656,25 +14718,6 @@ const useLocalVideoStartTrigger = (isLocalVideoAvailable, shouldTransition) => {
14656
14718
  }
14657
14719
  }, [shouldTransition, isButtonStatusSynced, isPreviewCameraOn, isLocalVideoAvailable, mediaGalleryHandlers]);
14658
14720
  };
14659
- /**
14660
- * Hook to fetch new participant avatar and video gallery displayName information if it is present.
14661
- * @param onFetchAvatarPersonaData
14662
- */
14663
- const useRemoteParticipantsWithCustomDisplayNames = (remoteParticipants, onFetchAvatarPersonaData) => {
14664
- const userIds = React.useMemo(() => {
14665
- return remoteParticipants.map((p) => p.userId);
14666
- }, [remoteParticipants]);
14667
- const avatarPersonaData = useCustomAvatarPersonaData(userIds, onFetchAvatarPersonaData);
14668
- const newParticipants = remoteParticipants.map((p, i) => {
14669
- var _a;
14670
- const newName = (_a = avatarPersonaData[i]) === null || _a === void 0 ? void 0 : _a.text;
14671
- if (!newName) {
14672
- return p;
14673
- }
14674
- return Object.assign(Object.assign({}, p), { displayName: newName });
14675
- });
14676
- return newParticipants;
14677
- };
14678
14721
 
14679
14722
  // Copyright (c) Microsoft Corporation.
14680
14723
  // Licensed under the MIT license.
@@ -14794,11 +14837,11 @@ const NetworkReconnectTile = (props) => {
14794
14837
  // This tile may be shown at the beginning of a call.
14795
14838
  // So we need to transition local video to the call.
14796
14839
  useLocalVideoStartTrigger(!!props.localParticipantVideoStream.isAvailable);
14797
- return (React__default['default'].createElement(ExpandedLocalVideoTile, Object.assign({ localParticipantVideoStream: props.localParticipantVideoStream, overlayContent: React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "center", verticalAlign: "center", className: react.mergeStyles(containerStyle$1) },
14840
+ return (React__default['default'].createElement(ExpandedLocalVideoTile, Object.assign({ localParticipantVideoStream: props.localParticipantVideoStream, overlayContent: React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "center", verticalAlign: "center", className: react.mergeStyles(containerStyle$1), "aria-atomic": true },
14798
14841
  React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(titleContainerStyle) },
14799
14842
  React__default['default'].createElement(CallCompositeIcon, { iconName: "NetworkReconnectIcon", className: react.mergeStyles(titleStyle$1) }),
14800
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyle$1(palette, isVideoReady)), "aria-live": 'polite' }, strings.networkReconnectTitle)),
14801
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyle$1(palette, isVideoReady)), "aria-live": 'polite' }, strings.networkReconnectMoreDetails)) }, handlers)));
14843
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyle$1(palette, isVideoReady)), "aria-live": 'assertive' }, strings.networkReconnectTitle)),
14844
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyle$1(palette, isVideoReady)), "aria-live": 'assertive' }, strings.networkReconnectMoreDetails)) }, handlers)));
14802
14845
  };
14803
14846
 
14804
14847
  // Copyright (c) Microsoft Corporation.
@@ -15110,9 +15153,9 @@ const buttonWithIconStyles = {
15110
15153
  * @private
15111
15154
  */
15112
15155
  const StartCallButton = (props) => {
15113
- const { isDisabled, onClickHandler, rejoinCall } = props;
15156
+ const { rejoinCall } = props;
15114
15157
  const locale = useLocale();
15115
- return (React__default['default'].createElement(react.PrimaryButton, { "data-ui-id": "call-composite-start-call-button", disabled: isDisabled, className: react.mergeStyles(buttonStyle, props.className), styles: buttonWithIconStyles, text: rejoinCall ? locale.strings.call.rejoinCallButtonLabel : locale.strings.call.startCallButtonLabel, onClick: onClickHandler, onRenderIcon: () => React__default['default'].createElement(reactIcons.Video20Filled, { className: videoCameraIconStyle }) }));
15158
+ return (React__default['default'].createElement(react.PrimaryButton, Object.assign({}, props, { "data-ui-id": "call-composite-start-call-button", className: react.mergeStyles(buttonStyle, props.className), styles: buttonWithIconStyles, text: rejoinCall ? locale.strings.call.rejoinCallButtonLabel : locale.strings.call.startCallButtonLabel, onRenderIcon: () => React__default['default'].createElement(reactIcons.Video20Filled, { className: videoCameraIconStyle }) })));
15116
15159
  };
15117
15160
 
15118
15161
  // Copyright (c) Microsoft Corporation.
@@ -15342,7 +15385,7 @@ const ConfigurationPage = (props) => {
15342
15385
  callDescription),
15343
15386
  React__default['default'].createElement(LocalDeviceSettings, Object.assign({}, options, localDeviceSettingsHandlers, { cameraPermissionGranted: cameraPermissionGranted, microphonePermissionGranted: microphonePermissionGranted })))),
15344
15387
  React__default['default'].createElement(react.Stack, { styles: mobileView ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop },
15345
- React__default['default'].createElement(StartCallButton, { className: mobileView ? startCallButtonStyleMobile : undefined, onClickHandler: startCallHandler, isDisabled: !microphonePermissionGranted }))))));
15388
+ React__default['default'].createElement(StartCallButton, { className: mobileView ? startCallButtonStyleMobile : undefined, onClick: startCallHandler, disabled: !microphonePermissionGranted }))))));
15346
15389
  };
15347
15390
 
15348
15391
  // Copyright (c) Microsoft Corporation.
@@ -15391,13 +15434,13 @@ const moreDetailsStyles = {
15391
15434
  */
15392
15435
  function NoticePage(props) {
15393
15436
  const adapter = useAdapter();
15394
- return (React__default['default'].createElement(react.Stack, { verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": props.dataUiId },
15437
+ return (React__default['default'].createElement(react.Stack, { verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": props.dataUiId, "aria-atomic": true },
15395
15438
  React__default['default'].createElement(react.Stack, { className: react.mergeStyles(containerStyle), tokens: containerItemGap },
15396
15439
  props.iconName && React__default['default'].createElement(CallCompositeIcon, { iconName: props.iconName }),
15397
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyles) }, props.title),
15398
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyles) }, props.moreDetails),
15440
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyles), "aria-live": "assertive" }, props.title),
15441
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyles), "aria-live": "assertive" }, props.moreDetails),
15399
15442
  React__default['default'].createElement(react.Stack, { styles: rejoinCallButtonContainerStyles },
15400
- React__default['default'].createElement(StartCallButton, { onClickHandler: () => adapter.joinCall(), isDisabled: false, rejoinCall: true })))));
15443
+ React__default['default'].createElement(StartCallButton, { onClick: () => adapter.joinCall(), disabled: false, rejoinCall: true, autoFocus: true })))));
15401
15444
  }
15402
15445
 
15403
15446
  // Copyright (c) Microsoft Corporation.
@@ -15438,10 +15481,10 @@ const LobbyTile = (props) => {
15438
15481
  const isVideoReady = (_a = videoStream === null || videoStream === void 0 ? void 0 : videoStream.isAvailable) !== null && _a !== void 0 ? _a : false;
15439
15482
  const palette = useTheme().palette;
15440
15483
  const handlers = useHandlers();
15441
- return (React__default['default'].createElement(ExpandedLocalVideoTile, Object.assign({ localParticipantVideoStream: props.localParticipantVideoStream, overlayContent: props.overlayProps ? (React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "center", verticalAlign: "center", className: react.mergeStyles(overlayContainerStyle) },
15484
+ return (React__default['default'].createElement(ExpandedLocalVideoTile, Object.assign({ localParticipantVideoStream: props.localParticipantVideoStream, overlayContent: props.overlayProps ? (React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "center", verticalAlign: "center", className: react.mergeStyles(overlayContainerStyle), "aria-atomic": true },
15442
15485
  React__default['default'].createElement(react.Stack.Item, { className: react.mergeStyles(titleStyle(palette, isVideoReady)) }, props.overlayProps.overlayIcon),
15443
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyle(palette, isVideoReady)), "aria-live": 'polite' }, props.overlayProps.title),
15444
- props.overlayProps.moreDetails && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyle(palette, isVideoReady)) }, props.overlayProps.moreDetails)))) : undefined }, handlers)));
15486
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(titleStyle(palette, isVideoReady)), "aria-live": "assertive" }, props.overlayProps.title),
15487
+ props.overlayProps.moreDetails && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(moreDetailsStyle(palette, isVideoReady)), "aria-live": "assertive" }, props.overlayProps.moreDetails)))) : undefined }, handlers)));
15445
15488
  };
15446
15489
 
15447
15490
  // Copyright (c) Microsoft Corporation.
@@ -17075,7 +17118,7 @@ const SidePaneHeader = (props) => {
17075
17118
  const callWithChatStrings = useCallWithChatCompositeStrings();
17076
17119
  return (React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", styles: sidePaneHeaderContainerStyles },
17077
17120
  React__default['default'].createElement(react.Stack.Item, { styles: sidePaneHeaderStyles }, props.headingText),
17078
- React__default['default'].createElement(react.CommandBarButton, { ariaLabel: callWithChatStrings.dismissSidePaneButton, styles: sidePaneCloseButtonStyles, iconProps: { iconName: 'cancel' }, onClick: props.onClose })));
17121
+ React__default['default'].createElement(react.CommandBarButton, { ariaLabel: callWithChatStrings.dismissSidePaneButtonLabel, styles: sidePaneCloseButtonStyles, iconProps: { iconName: 'cancel' }, onClick: props.onClose })));
17079
17122
  };
17080
17123
 
17081
17124
  // Copyright (c) Microsoft Corporation.