@azure/communication-react 1.3.3-alpha-202208310017.0 → 1.3.3-alpha-202209030014.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 (67) hide show
  1. package/dist/communication-react.d.ts +23 -5
  2. package/dist/dist-cjs/communication-react/index.js +315 -303
  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/chat-component-bindings/src/utils/constants.d.ts +4 -0
  7. package/dist/dist-esm/chat-component-bindings/src/utils/constants.js +4 -0
  8. package/dist/dist-esm/chat-component-bindings/src/utils/constants.js.map +1 -1
  9. package/dist/dist-esm/chat-component-bindings/src/utils/updateMessagesWithAttached.js +8 -0
  10. package/dist/dist-esm/chat-component-bindings/src/utils/updateMessagesWithAttached.js.map +1 -1
  11. package/dist/dist-esm/react-components/src/components/Announcer.d.ts +2 -2
  12. package/dist/dist-esm/react-components/src/components/Announcer.js +1 -1
  13. package/dist/dist-esm/react-components/src/components/Announcer.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js +1 -1
  15. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +2 -46
  17. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/VideoTile.js +9 -6
  19. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  20. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -0
  21. package/dist/dist-esm/react-components/src/components/index.js +1 -0
  22. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js +3 -0
  24. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js.map +1 -1
  25. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.d.ts +3 -3
  26. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js +13 -15
  27. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  28. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +2 -2
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +4 -0
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +1 -1
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +3 -7
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  35. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.d.ts +2 -1
  36. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js +3 -1
  37. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js.map +1 -1
  38. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js +3 -6
  39. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js.map +1 -1
  40. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js +8 -5
  41. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js.map +1 -1
  42. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +10 -0
  43. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +32 -4
  44. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +15 -5
  46. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +4 -2
  47. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js +6 -5
  49. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js.map +1 -1
  50. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.d.ts +2 -0
  51. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js +3 -1
  52. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js.map +1 -1
  53. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts +4 -0
  54. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.js.map +1 -1
  55. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +8 -0
  56. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +8 -0
  57. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.js +9 -5
  59. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.js.map +1 -1
  60. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.d.ts +1 -0
  61. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +17 -6
  62. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.d.ts +2 -0
  64. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.js +2 -2
  65. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +7 -5
  67. package/package.json +8 -8
@@ -192,7 +192,7 @@ const fromFlatCommunicationIdentifier = (id) => {
192
192
  // Copyright (c) Microsoft Corporation.
193
193
  // Licensed under the MIT license.
194
194
  // GENERATED FILE. DO NOT EDIT MANUALLY.
195
- var telemetryVersion = '1.3.3-alpha-202208310017.0';
195
+ var telemetryVersion = '1.3.3-alpha-202209030014.0';
196
196
 
197
197
  // Copyright (c) Microsoft Corporation.
198
198
  /**
@@ -957,7 +957,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
957
957
  wordBreak: 'break-word'
958
958
  });
959
959
 
960
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On Hold"};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",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",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$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On Hold"};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$d,holdButton:holdButton,videoTile:videoTile};
960
+ var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};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",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",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$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};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$d,holdButton:holdButton,videoTile:videoTile};
961
961
 
962
962
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};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",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$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",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$c={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$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",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"};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.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$c={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$c={placeholderText:"Enter a number"};var HoldButton$d={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};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,dialpad:dialpad$c,HoldButton:HoldButton$d};
963
963
 
@@ -2189,7 +2189,7 @@ const VoiceOverButton = (props) => {
2189
2189
 
2190
2190
  // Copyright (c) Microsoft Corporation.
2191
2191
  /**
2192
- * @private
2192
+ * @internal
2193
2193
  * Announcer component to maker aria announcements on actions
2194
2194
  */
2195
2195
  const Announcer = (props) => {
@@ -2275,12 +2275,6 @@ const useLocaleFileCardStringsTrampoline = () => {
2275
2275
  /* @conditional-compile-remove(file-sharing) */
2276
2276
  return useLocale$1().strings.sendBox;
2277
2277
  };
2278
- /**
2279
- * Identify if a participant state if part of the Calling states or Hold states.
2280
- */
2281
- const _isParticipantStateCallingOrHold = (participantState) => {
2282
- return !!participantState && ['Idle', 'Connecting', 'EarlyMedia', 'Ringing', 'Hold'].includes(participantState);
2283
- };
2284
2278
 
2285
2279
  // Copyright (c) Microsoft Corporation.
2286
2280
  /**
@@ -4813,9 +4807,10 @@ const overlayContainerStyles = {
4813
4807
  */
4814
4808
  const tileInfoContainerStyle = react.mergeStyles({
4815
4809
  position: 'absolute',
4816
- bottom: '0.5rem',
4817
- left: '0.5rem',
4818
- width: 'calc(100% - 1rem)'
4810
+ bottom: '0',
4811
+ left: '0',
4812
+ padding: '0.5rem',
4813
+ width: '100%'
4819
4814
  });
4820
4815
  /**
4821
4816
  * @private
@@ -4853,30 +4848,27 @@ const displayNameStyle = {
4853
4848
  /**
4854
4849
  * @private
4855
4850
  */
4856
- const iconContainerStyle = {
4857
- height: '100%',
4851
+ const iconContainerStyle = (theme) => ({
4852
+ margin: 'auto',
4858
4853
  alignItems: 'center',
4859
4854
  '& svg': {
4860
- display: 'block'
4855
+ display: 'block',
4856
+ color: theme.palette.neutralPrimary
4861
4857
  }
4862
- };
4858
+ });
4863
4859
  /**
4864
4860
  * @private
4865
4861
  */
4866
- const participantStateStringStyles = (showLabel) => {
4862
+ const participantStateStringStyles = (theme) => {
4867
4863
  return {
4868
- textAlign: 'center',
4869
- minWidth: '3rem',
4870
- color: 'inherit',
4871
- width: showLabel ? 'auto' : '100%',
4872
- marginRight: showLabel ? 0 : 'none',
4873
- marginLeft: showLabel ? 'auto' : 'none',
4864
+ minWidth: 'max-content',
4865
+ color: theme.palette.black,
4874
4866
  fontSize: '0.75rem',
4875
4867
  lineHeight: 'normal',
4876
4868
  overflow: 'hidden',
4877
4869
  textOverflow: 'ellipsis',
4878
4870
  whiteSpace: 'nowrap',
4879
- padding: '0.25rem'
4871
+ padding: '0.1rem'
4880
4872
  };
4881
4873
  };
4882
4874
 
@@ -4955,13 +4947,13 @@ const VideoTile = (props) => {
4955
4947
  height: '100%'
4956
4948
  }
4957
4949
  }, styles === null || styles === void 0 ? void 0 : styles.root) },
4958
- isVideoRendered ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles, isMirrored && { transform: 'scaleX(-1)' }, styles === null || styles === void 0 ? void 0 : styles.videoContainer) }, renderElement)) : (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles) }, onRenderPlaceholder ? (onRenderPlaceholder(userId !== null && userId !== void 0 ? userId : '', placeholderOptions, DefaultPlaceholder)) : (React__default['default'].createElement(DefaultPlaceholder, Object.assign({}, placeholderOptions))))),
4950
+ isVideoRendered ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles, isMirrored && { transform: 'scaleX(-1)' }, styles === null || styles === void 0 ? void 0 : styles.videoContainer) }, renderElement)) : (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles), style: { opacity: participantStateString ? 0.4 : 1 } }, onRenderPlaceholder ? (onRenderPlaceholder(userId !== null && userId !== void 0 ? userId : '', placeholderOptions, DefaultPlaceholder)) : (React__default['default'].createElement(DefaultPlaceholder, Object.assign({}, placeholderOptions))))),
4959
4951
  (canShowLabel || participantStateString) && (React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoContainerStyle, tokens: tileInfoContainerTokens },
4960
- canShowLabel && (React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoStyle },
4961
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(displayNameStyle), title: displayName }, displayName),
4962
- showMuteIndicator && isMuted && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(iconContainerStyle) },
4963
- React__default['default'].createElement(react.Icon, { iconName: "VideoTileMicOff" }))))),
4964
- participantStateString && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStringStyles(showLabel)) }, participantStateString)))),
4952
+ React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoStyle },
4953
+ canShowLabel && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(displayNameStyle), title: displayName, style: { color: participantStateString ? theme.palette.neutralSecondary : 'inherit' } }, displayName)),
4954
+ participantStateString && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStringStyles(theme)) }, bracketedParticipantString(participantStateString, !!canShowLabel))),
4955
+ showMuteIndicator && isMuted && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(iconContainerStyle(theme)) },
4956
+ React__default['default'].createElement(react.Icon, { iconName: "VideoTileMicOff" })))))),
4965
4957
  children && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(overlayContainerStyles, styles === null || styles === void 0 ? void 0 : styles.overlayContainer) }, children)))));
4966
4958
  };
4967
4959
  const participantStateStringTrampoline = (props, locale) => {
@@ -4983,184 +4975,8 @@ const tileInfoContainerTokens = {
4983
4975
  // We need to allow the children to set their own margins
4984
4976
  childrenGap: 'none'
4985
4977
  };
4986
-
4987
- // Copyright (c) Microsoft Corporation.
4988
- /**
4989
- * @private
4990
- */
4991
- const videoGalleryOuterDivStyle = react.mergeStyles({ position: 'relative', width: '100%', height: '100%' });
4992
- /**
4993
- * @private
4994
- */
4995
- const videoGalleryContainerStyle = {
4996
- root: { position: 'relative', height: '100%', width: '100%', padding: '0.5rem' }
4997
- };
4998
- /**
4999
- * Small floating modal width and height in rem for small screen
5000
- */
5001
- const SMALL_FLOATING_MODAL_SIZE_PX = { width: 64, height: 88 };
5002
- /**
5003
- * Large floating modal width and height in rem for large screen
5004
- */
5005
- const LARGE_FLOATING_MODAL_SIZE_PX = { width: 160, height: 120 };
5006
- /**
5007
- * @private
5008
- * z-index to ensure that the local video tile is above the video gallery.
5009
- */
5010
- const LOCAL_VIDEO_TILE_ZINDEX = 2;
5011
- /**
5012
- * @private
5013
- */
5014
- const floatingLocalVideoModalStyle = (theme, isNarrow) => {
5015
- return react.concatStyleSets({
5016
- main: localVideoTileContainerStyle(theme, isNarrow)
5017
- }, {
5018
- main: {
5019
- boxShadow: theme.effects.elevation8,
5020
- ':focus-within': {
5021
- boxShadow: theme.effects.elevation16,
5022
- border: `${_pxToRem(2)} solid ${theme.palette.neutralPrimary}`
5023
- }
5024
- }
5025
- }, localVideoModalStyles);
5026
- };
5027
- /**
5028
- * Padding equal to the amount the modal should stay inside the bounds of the container.
5029
- * i.e. if this is 8px, the modal should always be at least 8px inside the container at all times on all sides.
5030
- * @private
5031
- */
5032
- const localVideoTileOuterPaddingPX = 8;
5033
- /**
5034
- * @private
5035
- */
5036
- const localVideoTileContainerStyle = (theme, isNarrow) => {
5037
- return Object.assign({ minWidth: isNarrow ? _pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.width) : _pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.width), minHeight: isNarrow ? _pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.height) : _pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.height), position: 'absolute', bottom: _pxToRem(localVideoTileOuterPaddingPX), borderRadius: theme.effects.roundedCorner4, overflow: 'hidden' }, (theme.rtl
5038
- ? { left: _pxToRem(localVideoTileOuterPaddingPX) }
5039
- : { right: _pxToRem(localVideoTileOuterPaddingPX) }));
5040
- };
5041
- /**
5042
- * @private
5043
- */
5044
- const localVideoTileWithControlsContainerStyle = (theme, isNarrow) => {
5045
- return react.concatStyleSets(localVideoTileContainerStyle(theme, isNarrow), {
5046
- root: { boxShadow: theme.effects.elevation8 }
5047
- });
5048
- };
5049
- /**
5050
- * @private
5051
- */
5052
- const floatingLocalVideoTileStyle = {
5053
- root: {
5054
- position: 'absolute',
5055
- zIndex: LOCAL_VIDEO_TILE_ZINDEX,
5056
- height: '100%',
5057
- width: '100%'
5058
- }
5059
- };
5060
- /**
5061
- * @private
5062
- */
5063
- const horizontalGalleryContainerStyle = (shouldFloatLocalVideo, isNarrow) => {
5064
- return {
5065
- minHeight: isNarrow
5066
- ? `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`
5067
- : `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5068
- width: shouldFloatLocalVideo
5069
- ? isNarrow
5070
- ? `calc(100% - ${_pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.width)})`
5071
- : `calc(100% - ${_pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.width)})`
5072
- : '100%',
5073
- paddingRight: '0.5rem'
5074
- };
5075
- };
5076
- /**
5077
- * @private
5078
- */
5079
- const horizontalGalleryStyle = (isNarrow) => {
5080
- return {
5081
- children: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_STYLE : LARGE_HORIZONTAL_GALLERY_TILE_STYLE
5082
- };
5083
- };
5084
- /**
5085
- * Small horizontal gallery tile size in rem
5086
- * @private
5087
- */
5088
- const SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 5.5, width: 5.5 };
5089
- /**
5090
- * Large horizontal gallery tile size in rem
5091
- * @private
5092
- */
5093
- const LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 7.5, width: 10 };
5094
- /**
5095
- * @private
5096
- */
5097
- const SMALL_HORIZONTAL_GALLERY_TILE_STYLE = {
5098
- minHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5099
- minWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
5100
- maxHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5101
- maxWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
5102
- };
5103
- /**
5104
- * @private
5105
- */
5106
- const LARGE_HORIZONTAL_GALLERY_TILE_STYLE = {
5107
- minHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5108
- minWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
5109
- maxHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5110
- maxWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
5111
- };
5112
- /**
5113
- * @private
5114
- */
5115
- const layerHostStyle = {
5116
- position: 'absolute',
5117
- left: 0,
5118
- top: 0,
5119
- width: '100%',
5120
- height: '100%',
5121
- overflow: 'hidden',
5122
- // pointer events for layerHost set to none to make descendants interactive
5123
- pointerEvents: 'none'
5124
- };
5125
- /**
5126
- * @private
5127
- */
5128
- const localVideoCameraCycleButtonStyles = (theme) => {
5129
- return {
5130
- root: {
5131
- position: 'absolute',
5132
- width: _pxToRem(32),
5133
- height: _pxToRem(32),
5134
- right: '0rem',
5135
- top: '0rem',
5136
- color: '#FFFFFF',
5137
- zIndex: 2,
5138
- background: 'rgba(0,0,0,0.4)',
5139
- borderRadius: theme.effects.roundedCorner2
5140
- },
5141
- rootFocused: {
5142
- // styles to remove the unwanted white highlight and blue colour after tapping on button.
5143
- color: '#FFFFFF',
5144
- background: 'rgba(0,0,0,0.4)' // sets opacity of background to be visible on all backdrops in video stream.
5145
- },
5146
- icon: {
5147
- paddingLeft: _pxToRem(3),
5148
- paddingRight: _pxToRem(3),
5149
- margin: 0
5150
- },
5151
- flexContainer: {
5152
- paddingBottom: _pxToRem(8)
5153
- }
5154
- };
5155
- };
5156
- /**
5157
- * Styles for the local video tile modal when it is focused, will cause keyboard move icon to appear over video
5158
- * @private
5159
- */
5160
- const localVideoModalStyles = {
5161
- keyboardMoveIconContainer: {
5162
- zIndex: LOCAL_VIDEO_TILE_ZINDEX + 1 // zIndex to set the keyboard movement Icon above the other layers in the video tile.
5163
- }
4978
+ const bracketedParticipantString = (participantString, withBrackets) => {
4979
+ return withBrackets ? `(${participantString})` : participantString;
5164
4980
  };
5165
4981
 
5166
4982
  // Copyright (c) Microsoft Corporation.
@@ -5174,9 +4990,6 @@ const localVideoModalStyles = {
5174
4990
  const _RemoteVideoTile = React__default['default'].memo((props) => {
5175
4991
  const { isAvailable, isReceiving = true, // default to true to prevent any breaking change
5176
4992
  isMuted, isSpeaking, isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, displayName, onRenderAvatar, showMuteIndicator } = props;
5177
- const containerRef = React__default['default'].useRef(null);
5178
- /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
5179
- const containerWidth = _useContainerWidth(containerRef);
5180
4993
  const remoteVideoStreamProps = React.useMemo(() => ({
5181
4994
  isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored,
5182
4995
  isScreenSharingOn,
@@ -5209,45 +5022,11 @@ const _RemoteVideoTile = React__default['default'].memo((props) => {
5209
5022
  }
5210
5023
  return (React__default['default'].createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isReceiving === false ? 'loading' : 'none' }));
5211
5024
  }, [renderElement, isReceiving]);
5212
- const showLabelTrampoline = React.useMemo(() => {
5213
- /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
5214
- return canShowLabel(props.participantState, props.showLabel, containerWidth);
5215
- }, [
5025
+ return (React__default['default'].createElement(VideoTile, { key: userId, userId: userId, renderElement: renderVideoStreamElement, displayName: displayName, onRenderPlaceholder: onRenderAvatar, isMuted: isMuted, isSpeaking: isSpeaking, showMuteIndicator: showMuteIndicator, personaMinSize: props.personaMinSize, showLabel: props.showLabel,
5216
5026
  /* @conditional-compile-remove(one-to-n-calling) */
5217
5027
  /* @conditional-compile-remove(PSTN-calls) */
5218
- containerWidth,
5219
- props
5220
- ]);
5221
- return (
5222
- // IMPORTANT: This div needs to be a flex so that the children take up its full width and height
5223
- React__default['default'].createElement("div", { ref: containerRef, style: { display: 'flex', flexGrow: 1 } },
5224
- React__default['default'].createElement(VideoTile, { key: userId, userId: userId, renderElement: renderVideoStreamElement, displayName: displayName, onRenderPlaceholder: onRenderAvatar, isMuted: isMuted, isSpeaking: isSpeaking, showMuteIndicator: showMuteIndicator, personaMinSize: props.personaMinSize, showLabel: showLabelTrampoline,
5225
- /* @conditional-compile-remove(one-to-n-calling) */
5226
- /* @conditional-compile-remove(PSTN-calls) */
5227
- participantState: props.participantState })));
5028
+ participantState: props.participantState }));
5228
5029
  });
5229
- /* @conditional-compile-remove(one-to-n-calling) */
5230
- /* @conditional-compile-remove(PSTN-calls) */
5231
- /**
5232
- * Determines if a label should be shown for a remote video tile.
5233
- * When the remote video tile is rendered as a small tile in horizontal gallery,
5234
- * we hide the participants name if they are in hold/connecting states.
5235
- */
5236
- const canShowLabel = (participantState, showLabel, containerWidth) => {
5237
- // if showLabel has been explicitly set to false, don't show the label
5238
- if (showLabel === false) {
5239
- return showLabel;
5240
- }
5241
- // If the participant state is in calling or hold and
5242
- // the container width is less than the small horizontal gallery tile size,
5243
- // don't show the label (participant name)
5244
- if (_isParticipantStateCallingOrHold(participantState)) {
5245
- if (containerWidth && containerWidth / 16 <= SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width) {
5246
- return false;
5247
- }
5248
- }
5249
- return showLabel;
5250
- };
5251
5030
 
5252
5031
  // Copyright (c) Microsoft Corporation.
5253
5032
  // Licensed under the MIT license.
@@ -5397,6 +5176,185 @@ const calculateChildrenPerPage = (args) => {
5397
5176
  return Math.floor((childrenSpace + gapWidth) / (childWidth + gapWidth));
5398
5177
  };
5399
5178
 
5179
+ // Copyright (c) Microsoft Corporation.
5180
+ /**
5181
+ * @private
5182
+ */
5183
+ const videoGalleryOuterDivStyle = react.mergeStyles({ position: 'relative', width: '100%', height: '100%' });
5184
+ /**
5185
+ * @private
5186
+ */
5187
+ const videoGalleryContainerStyle = {
5188
+ root: { position: 'relative', height: '100%', width: '100%', padding: '0.5rem' }
5189
+ };
5190
+ /**
5191
+ * Small floating modal width and height in rem for small screen
5192
+ */
5193
+ const SMALL_FLOATING_MODAL_SIZE_PX = { width: 64, height: 88 };
5194
+ /**
5195
+ * Large floating modal width and height in rem for large screen
5196
+ */
5197
+ const LARGE_FLOATING_MODAL_SIZE_PX = { width: 160, height: 120 };
5198
+ /**
5199
+ * @private
5200
+ * z-index to ensure that the local video tile is above the video gallery.
5201
+ */
5202
+ const LOCAL_VIDEO_TILE_ZINDEX = 2;
5203
+ /**
5204
+ * @private
5205
+ */
5206
+ const floatingLocalVideoModalStyle = (theme, isNarrow) => {
5207
+ return react.concatStyleSets({
5208
+ main: localVideoTileContainerStyle(theme, isNarrow)
5209
+ }, {
5210
+ main: {
5211
+ boxShadow: theme.effects.elevation8,
5212
+ ':focus-within': {
5213
+ boxShadow: theme.effects.elevation16,
5214
+ border: `${_pxToRem(2)} solid ${theme.palette.neutralPrimary}`
5215
+ }
5216
+ }
5217
+ }, localVideoModalStyles);
5218
+ };
5219
+ /**
5220
+ * Padding equal to the amount the modal should stay inside the bounds of the container.
5221
+ * i.e. if this is 8px, the modal should always be at least 8px inside the container at all times on all sides.
5222
+ * @private
5223
+ */
5224
+ const localVideoTileOuterPaddingPX = 8;
5225
+ /**
5226
+ * @private
5227
+ */
5228
+ const localVideoTileContainerStyle = (theme, isNarrow) => {
5229
+ return Object.assign({ minWidth: isNarrow ? _pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.width) : _pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.width), minHeight: isNarrow ? _pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.height) : _pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.height), position: 'absolute', bottom: _pxToRem(localVideoTileOuterPaddingPX), borderRadius: theme.effects.roundedCorner4, overflow: 'hidden' }, (theme.rtl
5230
+ ? { left: _pxToRem(localVideoTileOuterPaddingPX) }
5231
+ : { right: _pxToRem(localVideoTileOuterPaddingPX) }));
5232
+ };
5233
+ /**
5234
+ * @private
5235
+ */
5236
+ const localVideoTileWithControlsContainerStyle = (theme, isNarrow) => {
5237
+ return react.concatStyleSets(localVideoTileContainerStyle(theme, isNarrow), {
5238
+ root: { boxShadow: theme.effects.elevation8 }
5239
+ });
5240
+ };
5241
+ /**
5242
+ * @private
5243
+ */
5244
+ const floatingLocalVideoTileStyle = {
5245
+ root: {
5246
+ position: 'absolute',
5247
+ zIndex: LOCAL_VIDEO_TILE_ZINDEX,
5248
+ height: '100%',
5249
+ width: '100%'
5250
+ }
5251
+ };
5252
+ /**
5253
+ * @private
5254
+ */
5255
+ const horizontalGalleryContainerStyle = (shouldFloatLocalVideo, isNarrow) => {
5256
+ return {
5257
+ minHeight: isNarrow
5258
+ ? `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`
5259
+ : `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5260
+ width: shouldFloatLocalVideo
5261
+ ? isNarrow
5262
+ ? `calc(100% - ${_pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.width)})`
5263
+ : `calc(100% - ${_pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.width)})`
5264
+ : '100%',
5265
+ paddingRight: '0.5rem'
5266
+ };
5267
+ };
5268
+ /**
5269
+ * @private
5270
+ */
5271
+ const horizontalGalleryStyle = (isNarrow) => {
5272
+ return {
5273
+ children: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_STYLE : LARGE_HORIZONTAL_GALLERY_TILE_STYLE
5274
+ };
5275
+ };
5276
+ /**
5277
+ * Small horizontal gallery tile size in rem
5278
+ * @private
5279
+ */
5280
+ const SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 5.5, width: 5.5 };
5281
+ /**
5282
+ * Large horizontal gallery tile size in rem
5283
+ * @private
5284
+ */
5285
+ const LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM = { height: 7.5, width: 10 };
5286
+ /**
5287
+ * @private
5288
+ */
5289
+ const SMALL_HORIZONTAL_GALLERY_TILE_STYLE = {
5290
+ minHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5291
+ minWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
5292
+ maxHeight: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5293
+ maxWidth: `${SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
5294
+ };
5295
+ /**
5296
+ * @private
5297
+ */
5298
+ const LARGE_HORIZONTAL_GALLERY_TILE_STYLE = {
5299
+ minHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5300
+ minWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`,
5301
+ maxHeight: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
5302
+ maxWidth: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width}rem`
5303
+ };
5304
+ /**
5305
+ * @private
5306
+ */
5307
+ const layerHostStyle = {
5308
+ position: 'absolute',
5309
+ left: 0,
5310
+ top: 0,
5311
+ width: '100%',
5312
+ height: '100%',
5313
+ overflow: 'hidden',
5314
+ // pointer events for layerHost set to none to make descendants interactive
5315
+ pointerEvents: 'none'
5316
+ };
5317
+ /**
5318
+ * @private
5319
+ */
5320
+ const localVideoCameraCycleButtonStyles = (theme) => {
5321
+ return {
5322
+ root: {
5323
+ position: 'absolute',
5324
+ width: _pxToRem(32),
5325
+ height: _pxToRem(32),
5326
+ right: '0rem',
5327
+ top: '0rem',
5328
+ color: '#FFFFFF',
5329
+ zIndex: 2,
5330
+ background: 'rgba(0,0,0,0.4)',
5331
+ borderRadius: theme.effects.roundedCorner2
5332
+ },
5333
+ rootFocused: {
5334
+ // styles to remove the unwanted white highlight and blue colour after tapping on button.
5335
+ color: '#FFFFFF',
5336
+ background: 'rgba(0,0,0,0.4)' // sets opacity of background to be visible on all backdrops in video stream.
5337
+ },
5338
+ icon: {
5339
+ paddingLeft: _pxToRem(3),
5340
+ paddingRight: _pxToRem(3),
5341
+ margin: 0
5342
+ },
5343
+ flexContainer: {
5344
+ paddingBottom: _pxToRem(8)
5345
+ }
5346
+ };
5347
+ };
5348
+ /**
5349
+ * Styles for the local video tile modal when it is focused, will cause keyboard move icon to appear over video
5350
+ * @private
5351
+ */
5352
+ const localVideoModalStyles = {
5353
+ keyboardMoveIconContainer: {
5354
+ zIndex: LOCAL_VIDEO_TILE_ZINDEX + 1 // zIndex to set the keyboard movement Icon above the other layers in the video tile.
5355
+ }
5356
+ };
5357
+
5400
5358
  // Copyright (c) Microsoft Corporation.
5401
5359
  /**
5402
5360
  * @private
@@ -7299,7 +7257,7 @@ const DrawerMenuItem = (props) => {
7299
7257
  const onClick = (ev) => props.onItemClick && props.onItemClick(ev, props.itemKey);
7300
7258
  const onKeyPress = (ev) => onClick && submitWithKeyboard(ev, onClick);
7301
7259
  const secondaryIcon = props.secondaryIconProps ? (React__default['default'].createElement(MenuItemIcon, Object.assign({}, props.secondaryIconProps))) : props.subMenuProps ? (React__default['default'].createElement(MenuItemIcon, { iconName: "ChevronRight" })) : undefined;
7302
- return (React__default['default'].createElement(react.Stack, { tabIndex: 0, role: "menuitem", horizontal: true, className: react.mergeStyles(drawerMenuItemRootStyles(theme.palette.neutralLight, theme.fonts.small), props.disabled ? disabledDrawerMenuItemRootStyles(theme.palette.neutralQuaternaryAlt) : undefined, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root), onKeyPress: onKeyPress, onClick: onClick, tokens: menuItemChildrenGap },
7260
+ return (React__default['default'].createElement(react.Stack, { tabIndex: 0, role: "menuitem", horizontal: true, className: react.mergeStyles(drawerMenuItemRootStyles(theme.palette.neutralLight, theme.fonts.small), props.disabled ? disabledDrawerMenuItemRootStyles(theme.palette.neutralQuaternaryAlt) : undefined, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root), onKeyPress: props.disabled ? undefined : onKeyPress, onClick: props.disabled ? undefined : onClick, tokens: menuItemChildrenGap },
7303
7261
  props.iconProps && (React__default['default'].createElement(react.Stack.Item, { role: "presentation", styles: props.disabled ? { root: { color: theme.palette.neutralTertiaryAlt } } : undefined },
7304
7262
  React__default['default'].createElement(MenuItemIcon, Object.assign({}, props.iconProps)))),
7305
7263
  React__default['default'].createElement(react.Stack.Item, { styles: drawerMenuItemTextStyles, grow: true },
@@ -7774,6 +7732,9 @@ const iconButtonStyles = (theme) => {
7774
7732
  return {
7775
7733
  root: {
7776
7734
  color: `${theme.palette.black}`
7735
+ },
7736
+ icon: {
7737
+ height: 'auto'
7777
7738
  }
7778
7739
  };
7779
7740
  };
@@ -8796,6 +8757,10 @@ const MINIMUM_TYPING_INTERVAL_IN_MILLISECONDS = 8000;
8796
8757
  * @private
8797
8758
  */
8798
8759
  const PARTICIPANTS_THRESHOLD = 20;
8760
+ /**
8761
+ * @private
8762
+ */
8763
+ const MINUTE_IN_MS = 1000 * 60;
8799
8764
  /**
8800
8765
  * @private
8801
8766
  *
@@ -8839,6 +8804,7 @@ const compareMessages = (firstMessage, secondMessage) => {
8839
8804
  const updateMessagesWithAttached = (chatMessagesWithStatus) => {
8840
8805
  chatMessagesWithStatus.sort(compareMessages);
8841
8806
  chatMessagesWithStatus.forEach((message, index, messages) => {
8807
+ var _a, _b;
8842
8808
  if (message.messageType !== 'chat') {
8843
8809
  return;
8844
8810
  }
@@ -8853,9 +8819,15 @@ const updateMessagesWithAttached = (chatMessagesWithStatus) => {
8853
8819
  const nextMessage = index === messages.length - 1 ? undefined : messages[index + 1];
8854
8820
  const previousSenderId = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.messageType) === 'chat' ? previousMessage.senderId : undefined;
8855
8821
  const nextSenderId = (nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.messageType) === 'chat' ? nextMessage.senderId : undefined;
8822
+ const timediff = new Date((_a = message === null || message === void 0 ? void 0 : message.createdOn) !== null && _a !== void 0 ? _a : '').getTime() - new Date((_b = previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.createdOn) !== null && _b !== void 0 ? _b : '').getTime();
8823
+ const diffMins = Math.round(timediff / MINUTE_IN_MS); // minutes
8856
8824
  if (previousSenderId !== message.senderId) {
8857
8825
  attached = message.senderId === nextSenderId ? 'top' : false;
8858
8826
  }
8827
+ else if (diffMins && diffMins >= 5) {
8828
+ // if there are more than or equal to 5 mins time gap between messages do not attach and show time stamp
8829
+ attached = false;
8830
+ }
8859
8831
  else {
8860
8832
  attached = message.senderId === nextSenderId ? true : 'bottom';
8861
8833
  }
@@ -12791,7 +12763,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
12791
12763
  */
12792
12764
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
12793
12765
 
12794
- var call$d={cameraLabel:"Camera",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",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",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",peopleButtonLabel:"People",peoplePaneTitle:"People",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",soundLabel:"Sound",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"};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",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",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};
12766
+ var call$d={cameraLabel:"Camera",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",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",peopleButtonLabel:"People",peoplePaneTitle:"People",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",soundLabel:"Sound",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"};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",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};
12795
12767
 
12796
12768
  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",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_GB = {call:call$c,chat:chat$c,callWithChat:callWithChat$c};
12797
12769
 
@@ -14454,7 +14426,8 @@ const END_CALL_PAGES = [
14454
14426
 
14455
14427
  // Copyright (c) Microsoft Corporation.
14456
14428
  const ACCESS_DENIED_TEAMS_MEETING_SUB_CODE = 5854;
14457
- const REMOVED_FROM_CALL_SUB_CODES = [5000, 5300];
14429
+ const REMOTE_PSTN_USER_HUNG_UP = 560000;
14430
+ const REMOVED_FROM_CALL_SUB_CODES = [5000, 5300, REMOTE_PSTN_USER_HUNG_UP];
14458
14431
  /**
14459
14432
  * @private
14460
14433
  */
@@ -14499,11 +14472,24 @@ var CallEndReasons;
14499
14472
  CallEndReasons[CallEndReasons["REMOVED_FROM_CALL"] = 2] = "REMOVED_FROM_CALL";
14500
14473
  })(CallEndReasons || (CallEndReasons = {}));
14501
14474
  const getCallEndReason = (call) => {
14502
- var _a, _b;
14503
- if (((_a = call.callEndReason) === null || _a === void 0 ? void 0 : _a.subCode) && call.callEndReason.subCode === ACCESS_DENIED_TEAMS_MEETING_SUB_CODE) {
14475
+ var _a, _b, _c;
14476
+ const remoteParticipantsEndedArray = Array.from(Object.values(call.remoteParticipantsEnded));
14477
+ /**
14478
+ * Handle the special case in a PSTN call where removing the last user kicks the caller out of the call.
14479
+ * The code and subcode is the same as when a user is removed from a teams interop call.
14480
+ * Hence, we look at the last remote participant removed to determine if the last participant removed was a phone number.
14481
+ * If yes, the caller was kicked out of the call, but we need to show them that they left the call.
14482
+ * Note: This check will only work for 1:1 PSTN Calls. The subcode is different for 1:N PSTN calls, and we do not need to handle that case.
14483
+ */
14484
+ if (remoteParticipantsEndedArray.length === 1 &&
14485
+ communicationCommon.isPhoneNumberIdentifier(remoteParticipantsEndedArray[0].identifier) &&
14486
+ ((_a = call.callEndReason) === null || _a === void 0 ? void 0 : _a.subCode) !== REMOTE_PSTN_USER_HUNG_UP) {
14487
+ return CallEndReasons.LEFT_CALL;
14488
+ }
14489
+ if (((_b = call.callEndReason) === null || _b === void 0 ? void 0 : _b.subCode) && call.callEndReason.subCode === ACCESS_DENIED_TEAMS_MEETING_SUB_CODE) {
14504
14490
  return CallEndReasons.ACCESS_DENIED;
14505
14491
  }
14506
- if (((_b = call.callEndReason) === null || _b === void 0 ? void 0 : _b.subCode) && REMOVED_FROM_CALL_SUB_CODES.includes(call.callEndReason.subCode)) {
14492
+ if (((_c = call.callEndReason) === null || _c === void 0 ? void 0 : _c.subCode) && REMOVED_FROM_CALL_SUB_CODES.includes(call.callEndReason.subCode)) {
14507
14493
  return CallEndReasons.REMOVED_FROM_CALL;
14508
14494
  }
14509
14495
  if (call.callEndReason) {
@@ -14610,6 +14596,19 @@ const disableCallControls = (callControlOptions, disabledControls) => {
14610
14596
  }
14611
14597
  return newOptions;
14612
14598
  };
14599
+ /**
14600
+ * Check if a disabled object is provided for a button and returns if the button is disabled.
14601
+ *
14602
+ * @param option
14603
+ * @returns whether a button is disabled
14604
+ * @private
14605
+ */
14606
+ const isDisabled$2 = (option) => {
14607
+ if (typeof option !== 'boolean') {
14608
+ return !!(option === null || option === void 0 ? void 0 : option.disabled);
14609
+ }
14610
+ return option;
14611
+ };
14613
14612
 
14614
14613
  // Copyright (c) Microsoft Corporation.
14615
14614
  // Licensed under the MIT license.
@@ -14978,9 +14977,9 @@ const Participants = (props) => {
14978
14977
  var _a;
14979
14978
  return concatButtonBaseStyles(props.increaseFlyoutItemSize ? participantButtonWithIncreasedTouchTargets : {}, (_a = props.styles) !== null && _a !== void 0 ? _a : {});
14980
14979
  }, [props.increaseFlyoutItemSize, props.styles]);
14981
- return (React__default['default'].createElement(ParticipantsButton, Object.assign({ "data-ui-id": "call-composite-participants-button" }, participantsButtonProps, { showLabel: props.displayType !== 'compact', callInvitationURL: props.callInvitationURL, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, disabled: isDisabled$2(props.option) || props.disabled, styles: participantsButtonStyles, showParticipantOverflowTooltip: !props.isMobile })));
14980
+ return (React__default['default'].createElement(ParticipantsButton, Object.assign({ "data-ui-id": "call-composite-participants-button" }, participantsButtonProps, { showLabel: props.displayType !== 'compact', callInvitationURL: props.callInvitationURL, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, disabled: isDisabled$1(props.option) || props.disabled, styles: participantsButtonStyles, showParticipantOverflowTooltip: !props.isMobile })));
14982
14981
  };
14983
- const isDisabled$2 = (option) => {
14982
+ const isDisabled$1 = (option) => {
14984
14983
  if (option === undefined || option === true || option === false) {
14985
14984
  return false;
14986
14985
  }
@@ -14994,11 +14993,11 @@ const ScreenShare = (props) => {
14994
14993
  const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
14995
14994
  const screenShareButtonDisabled = () => {
14996
14995
  /* @conditional-compile-remove(PSTN-calls) */
14997
- return (screenShareButtonProps === null || screenShareButtonProps === void 0 ? void 0 : screenShareButtonProps.disabled) ? screenShareButtonProps.disabled : isDisabled$1(props.option);
14996
+ return (screenShareButtonProps === null || screenShareButtonProps === void 0 ? void 0 : screenShareButtonProps.disabled) ? screenShareButtonProps.disabled : isDisabled(props.option);
14998
14997
  };
14999
14998
  return (React__default['default'].createElement(ScreenShareButton, Object.assign({ "data-ui-id": "call-composite-screenshare-button" }, screenShareButtonProps, { showLabel: props.displayType !== 'compact', disabled: screenShareButtonDisabled() || props.disabled, styles: styles })));
15000
14999
  };
15001
- const isDisabled$1 = (option) => {
15000
+ const isDisabled = (option) => {
15002
15001
  if (option === undefined || option === true || option === false) {
15003
15002
  return false;
15004
15003
  }
@@ -15179,7 +15178,7 @@ const CallControls = (props) => {
15179
15178
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15180
15179
  const moreButtonContextualMenuItems = () => {
15181
15180
  const items = [];
15182
- if (props.isMobile && props.onPeopleButtonClicked) {
15181
+ if (props.isMobile && props.onPeopleButtonClicked && isEnabled$2(options === null || options === void 0 ? void 0 : options.participantsButton)) {
15183
15182
  items.push({
15184
15183
  key: 'peopleButtonKey',
15185
15184
  text: localeStrings.component.strings.participantsButton.label,
@@ -15192,6 +15191,7 @@ const CallControls = (props) => {
15192
15191
  itemProps: {
15193
15192
  styles: buttonFlyoutIncreasedSizeStyles
15194
15193
  },
15194
+ disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.participantsButton),
15195
15195
  ['data-ui-id']: 'call-composite-more-menu-people-button'
15196
15196
  });
15197
15197
  }
@@ -15205,7 +15205,7 @@ const CallControls = (props) => {
15205
15205
  itemProps: {
15206
15206
  styles: buttonFlyoutIncreasedSizeStyles
15207
15207
  },
15208
- disabled: isDisabled(options === null || options === void 0 ? void 0 : options.holdButton),
15208
+ disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.holdButton),
15209
15209
  ['data-ui-id']: 'hold-button'
15210
15210
  });
15211
15211
  /* @conditional-compile-remove(PSTN-calls) */
@@ -15243,27 +15243,21 @@ const CallControls = (props) => {
15243
15243
  React__default['default'].createElement(SendDtmfDialpad, { isMobile: !!props.isMobile, strings: dialpadStrings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad }),
15244
15244
  React__default['default'].createElement(react.Stack.Item, null,
15245
15245
  React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: controlBarStyles(theme.semanticColors.bodyBackground) },
15246
- isEnabled$2(options === null || options === void 0 ? void 0 : options.microphoneButton) && (React__default['default'].createElement(Microphone, { displayType: options === null || options === void 0 ? void 0 : options.displayType, disabled: isDisabled(options === null || options === void 0 ? void 0 : options.microphoneButton) })),
15247
- isEnabled$2(options === null || options === void 0 ? void 0 : options.cameraButton) && (React__default['default'].createElement(Camera, { displayType: options === null || options === void 0 ? void 0 : options.displayType, disabled: isDisabled(options === null || options === void 0 ? void 0 : options.cameraButton) })),
15248
- isEnabled$2(options === null || options === void 0 ? void 0 : options.screenShareButton) && (React__default['default'].createElement(ScreenShare, { option: options === null || options === void 0 ? void 0 : options.screenShareButton, displayType: options === null || options === void 0 ? void 0 : options.displayType, disabled: isDisabled(options === null || options === void 0 ? void 0 : options.screenShareButton) })),
15246
+ isEnabled$2(options === null || options === void 0 ? void 0 : options.microphoneButton) && (React__default['default'].createElement(Microphone, { displayType: options === null || options === void 0 ? void 0 : options.displayType, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.microphoneButton) })),
15247
+ isEnabled$2(options === null || options === void 0 ? void 0 : options.cameraButton) && (React__default['default'].createElement(Camera, { displayType: options === null || options === void 0 ? void 0 : options.displayType, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.cameraButton) })),
15248
+ isEnabled$2(options === null || options === void 0 ? void 0 : options.screenShareButton) && (React__default['default'].createElement(ScreenShare, { option: options === null || options === void 0 ? void 0 : options.screenShareButton, displayType: options === null || options === void 0 ? void 0 : options.displayType, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.screenShareButton) })),
15249
15249
  isEnabled$2(options === null || options === void 0 ? void 0 : options.participantsButton) &&
15250
15250
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15251
- !props.isMobile && (React__default['default'].createElement(Participants, { option: options === null || options === void 0 ? void 0 : options.participantsButton, callInvitationURL: props.callInvitationURL, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, isMobile: props.isMobile, disabled: isDisabled(options === null || options === void 0 ? void 0 : options.participantsButton) })) && (
15251
+ !props.isMobile && (React__default['default'].createElement(Participants, { option: options === null || options === void 0 ? void 0 : options.participantsButton, callInvitationURL: props.callInvitationURL, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, isMobile: props.isMobile, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.participantsButton) })) && (
15252
15252
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15253
- React__default['default'].createElement(People, { checked: props.peopleButtonChecked, showLabel: (options === null || options === void 0 ? void 0 : options.displayType) !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-composite-people-button", strings: peopleButtonStrings, disabled: isDisabled(options === null || options === void 0 ? void 0 : options.participantsButton) })),
15254
- isEnabled$2(options === null || options === void 0 ? void 0 : options.devicesButton) && (React__default['default'].createElement(Devices, { displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, disabled: isDisabled(options === null || options === void 0 ? void 0 : options.devicesButton) })),
15253
+ React__default['default'].createElement(People, { checked: props.peopleButtonChecked, showLabel: (options === null || options === void 0 ? void 0 : options.displayType) !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-composite-people-button", strings: peopleButtonStrings, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.participantsButton) })),
15254
+ isEnabled$2(options === null || options === void 0 ? void 0 : options.devicesButton) && (React__default['default'].createElement(Devices, { displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.devicesButton) })),
15255
15255
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15256
15256
  isEnabled$2(options === null || options === void 0 ? void 0 : options.moreButton) && (React__default['default'].createElement(MoreButton, { strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: { items: moreButtonContextualMenuItems() }, showLabel: !props.isMobile })),
15257
15257
  customButtons['primary'],
15258
15258
  isEnabled$2(options === null || options === void 0 ? void 0 : options.endCallButton) && React__default['default'].createElement(EndCall, { displayType: options === null || options === void 0 ? void 0 : options.displayType })))));
15259
15259
  };
15260
15260
  const isEnabled$2 = (option) => option !== false;
15261
- const isDisabled = (option) => {
15262
- if (typeof option !== 'boolean') {
15263
- return !!(option === null || option === void 0 ? void 0 : option.disabled);
15264
- }
15265
- return option;
15266
- };
15267
15261
 
15268
15262
  // Copyright (c) Microsoft Corporation.
15269
15263
  /**
@@ -15854,6 +15848,7 @@ const AddPeopleDropdown = (props) => {
15854
15848
  const theme = react.useTheme();
15855
15849
  const { inviteLink, strings, mobileView, onAddParticipant, alternateCallerId } = props;
15856
15850
  const [showDialpad, setShowDialpad] = React.useState(false);
15851
+ const [announcerStrings, setAnnouncerStrings] = React.useState();
15857
15852
  const menuStyleThemed = React.useMemo(() => themedMenuStyle(theme), [theme]);
15858
15853
  const copyLinkButtonStylesThemed = React.useMemo(() => themedCopyLinkButtonStyles(theme, mobileView), [mobileView, theme]);
15859
15854
  const defaultMenuProps = React.useMemo(() => {
@@ -15863,6 +15858,10 @@ const AddPeopleDropdown = (props) => {
15863
15858
  useTargetWidth: true,
15864
15859
  calloutProps: {
15865
15860
  preventDismissOnEvent: _preventDismissOnEvent
15861
+ },
15862
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
15863
+ onMenuOpened(contextualMenu) {
15864
+ setAnnouncerStrings(undefined);
15866
15865
  }
15867
15866
  };
15868
15867
  if (inviteLink) {
@@ -15871,7 +15870,10 @@ const AddPeopleDropdown = (props) => {
15871
15870
  text: strings.copyInviteLinkButtonLabel,
15872
15871
  itemProps: { styles: copyLinkButtonStylesThemed },
15873
15872
  iconProps: { iconName: 'Link', style: iconStyles },
15874
- onClick: () => copy__default['default'](inviteLink)
15873
+ onClick: () => {
15874
+ setAnnouncerStrings(strings.copyInviteLinkActionedAriaLabel);
15875
+ copy__default['default'](inviteLink);
15876
+ }
15875
15877
  });
15876
15878
  }
15877
15879
  // only show the dialpad option when alternateCallerId is set
@@ -15887,12 +15889,13 @@ const AddPeopleDropdown = (props) => {
15887
15889
  }
15888
15890
  return menuProps;
15889
15891
  }, [
15892
+ menuStyleThemed,
15893
+ inviteLink,
15894
+ alternateCallerId,
15890
15895
  strings.copyInviteLinkButtonLabel,
15896
+ strings.copyInviteLinkActionedAriaLabel,
15891
15897
  strings.openDialpadButtonLabel,
15892
- copyLinkButtonStylesThemed,
15893
- inviteLink,
15894
- menuStyleThemed,
15895
- alternateCallerId
15898
+ copyLinkButtonStylesThemed
15896
15899
  ]);
15897
15900
  const onDismissDialpad = () => {
15898
15901
  setShowDialpad(false);
@@ -15906,6 +15909,7 @@ const AddPeopleDropdown = (props) => {
15906
15909
  }, [defaultMenuProps, setAddPeopleDrawerMenuItems]);
15907
15910
  if (mobileView) {
15908
15911
  return (React__default['default'].createElement(react.Stack, null,
15912
+ React__default['default'].createElement(Announcer, { ariaLive: 'assertive', announcementString: announcerStrings }),
15909
15913
  React__default['default'].createElement(react.Stack.Item, { styles: copyLinkButtonContainerStyles },
15910
15914
  React__default['default'].createElement(react.PrimaryButton, { onClick: setDrawerMenuItemsForAddPeople, styles: copyLinkButtonStylesThemed, onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, "data-ui-id": "call-add-people-button" })),
15911
15915
  addPeopleDrawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles, "data-ui-id": "call-add-people-dropdown" },
@@ -15913,6 +15917,7 @@ const AddPeopleDropdown = (props) => {
15913
15917
  alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: true, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId }))));
15914
15918
  }
15915
15919
  return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Stack, null,
15920
+ React__default['default'].createElement(Announcer, { ariaLive: 'assertive', announcementString: announcerStrings }),
15916
15921
  alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: false, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId })),
15917
15922
  React__default['default'].createElement(react.Stack, { styles: copyLinkButtonStackStyles },
15918
15923
  React__default['default'].createElement(react.DefaultButton, { onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, menuProps: defaultMenuProps, styles: copyLinkButtonStylesThemed, "data-ui-id": "call-add-people-button" })))));
@@ -16151,8 +16156,8 @@ const TabHeader = (props) => {
16151
16156
  }, [theme, haveMultipleTabs]);
16152
16157
  return (React__default['default'].createElement(react.Stack, { horizontal: true, grow: true, styles: mobilePaneControlBarStyle },
16153
16158
  React__default['default'].createElement(react.DefaultButton, { ariaLabel: strings.returnToCallButtonAriaLabel, ariaDescription: strings.returnToCallButtonAriaDescription, onClick: onClose, styles: mobilePaneBackButtonStyles, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "ChevronLeft" }), autoFocus: true }),
16154
- React__default['default'].createElement(react.Stack.Item, { grow: true }, onChatButtonClicked && (React__default['default'].createElement(react.DefaultButton, { onClick: onChatButtonClicked, styles: mobilePaneButtonStylesThemed, checked: activeTab === 'chat', role: 'tab' }, strings.chatButtonLabel))),
16155
- React__default['default'].createElement(react.Stack.Item, { grow: true }, onPeopleButtonClicked && (React__default['default'].createElement(react.DefaultButton, { onClick: onPeopleButtonClicked, styles: mobilePaneButtonStylesThemed, checked: activeTab === 'people', role: 'tab' }, strings.peopleButtonLabel))),
16159
+ React__default['default'].createElement(react.Stack.Item, { grow: true }, onChatButtonClicked && (React__default['default'].createElement(react.DefaultButton, { onClick: onChatButtonClicked, styles: mobilePaneButtonStylesThemed, checked: activeTab === 'chat', role: 'tab', disabled: props.disableChatButton }, strings.chatButtonLabel))),
16160
+ React__default['default'].createElement(react.Stack.Item, { grow: true }, onPeopleButtonClicked && (React__default['default'].createElement(react.DefaultButton, { onClick: onPeopleButtonClicked, styles: mobilePaneButtonStylesThemed, checked: activeTab === 'people', role: 'tab', disabled: props.disablePeopleButton }, strings.peopleButtonLabel))),
16156
16161
  React__default['default'].createElement(react.DefaultButton, { styles: mobilePaneHiddenIconStyles, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "ChevronLeft" }) })));
16157
16162
  };
16158
16163
 
@@ -16199,6 +16204,7 @@ var __awaiter$8 = (window && window.__awaiter) || function (thisArg, _arguments,
16199
16204
  */
16200
16205
  /** @beta */
16201
16206
  const CallPane = (props) => {
16207
+ var _a;
16202
16208
  const [drawerMenuItems, setDrawerMenuItems] = React.useState([]);
16203
16209
  const hidden = props.activePane === 'none';
16204
16210
  const paneStyles = hidden ? hiddenStyles : props.mobileView ? availableSpaceStyles : sidePaneStyles;
@@ -16210,7 +16216,7 @@ const CallPane = (props) => {
16210
16216
  };
16211
16217
  const strings = getStrings();
16212
16218
  const theme = useTheme();
16213
- const header = props.activePane === 'none' ? null : props.mobileView ? (React__default['default'].createElement(TabHeader, Object.assign({}, props, { strings: strings, activeTab: props.activePane }))) : (React__default['default'].createElement(SidePaneHeader, Object.assign({}, props, { strings: strings, headingText: props.activePane === 'people' ? strings.peoplePaneTitle : '' })));
16219
+ const header = props.activePane === 'none' ? null : props.mobileView ? (React__default['default'].createElement(TabHeader, Object.assign({}, props, { strings: strings, activeTab: props.activePane, disablePeopleButton: isDisabled$2((_a = props.callControls) === null || _a === void 0 ? void 0 : _a.participantsButton) }))) : (React__default['default'].createElement(SidePaneHeader, Object.assign({}, props, { strings: strings, headingText: props.activePane === 'people' ? strings.peoplePaneTitle : '' })));
16214
16220
  /**
16215
16221
  * In a Call Composite when a participant is removed, we must remove them from the call.
16216
16222
  */
@@ -16336,7 +16342,7 @@ const CallArrangement = (props) => {
16336
16342
  const callPaneContent = React.useCallback(() => {
16337
16343
  var _a;
16338
16344
  if (adapter && _isInCall(callStatus) && activePane === 'people') {
16339
- return (React__default['default'].createElement(CallPane, { callAdapter: adapter, onClose: closePane, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: (_a = props.callControlProps) === null || _a === void 0 ? void 0 : _a.onFetchParticipantMenuItems, onPeopleButtonClicked: showShowPeopleTabHeaderButton$1(props.callControlProps.options) ? selectPeople : undefined, modalLayerHostId: props.modalLayerHostId, activePane: activePane, mobileView: props.mobileView, inviteLink: props.callControlProps.callInvitationURL }));
16345
+ return (React__default['default'].createElement(CallPane, { callAdapter: adapter, onClose: closePane, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: (_a = props.callControlProps) === null || _a === void 0 ? void 0 : _a.onFetchParticipantMenuItems, onPeopleButtonClicked: showShowPeopleTabHeaderButton$1(props.callControlProps.options) ? selectPeople : undefined, callControls: typeof props.callControlProps.options !== 'boolean' ? props.callControlProps.options : undefined, modalLayerHostId: props.modalLayerHostId, activePane: activePane, mobileView: props.mobileView, inviteLink: props.callControlProps.callInvitationURL }));
16340
16346
  }
16341
16347
  return React__default['default'].createElement(React__default['default'].Fragment, null);
16342
16348
  }, [
@@ -17280,11 +17286,12 @@ const resumeButtonStyles = {
17280
17286
  */
17281
17287
  const holdPaneLabelStyles = {
17282
17288
  root: {
17283
- color: '#FFFFFF',
17289
+ color: 'inherit',
17284
17290
  fontWeight: 600,
17285
17291
  fontHeight: _pxToRem(22),
17286
17292
  fontSize: _pxToRem(16),
17287
- margin: '1rem auto 0.5rem'
17293
+ marginTop: '0.5rem',
17294
+ marginBottom: '1.5rem'
17288
17295
  }
17289
17296
  };
17290
17297
  /**
@@ -17294,7 +17301,7 @@ const holdPaneLabelStyles = {
17294
17301
  */
17295
17302
  const holdPaneTimerStyles = {
17296
17303
  root: {
17297
- color: '#FFFFFF',
17304
+ color: 'inherit',
17298
17305
  fontWeight: 600,
17299
17306
  fontSize: _pxToRem(20),
17300
17307
  lineHeight: _pxToRem(28),
@@ -17310,7 +17317,7 @@ const paneStyles = {
17310
17317
  root: {
17311
17318
  width: '100%',
17312
17319
  height: '100%',
17313
- background: 'rgba(0, 0, 0, 0.5)'
17320
+ background: 'inherit'
17314
17321
  }
17315
17322
  };
17316
17323
  /**
@@ -17323,7 +17330,9 @@ const holdPaneContentStyles = {
17323
17330
  display: 'flex',
17324
17331
  margin: 'auto',
17325
17332
  flexDirection: 'column',
17326
- justifyContent: 'center'
17333
+ justifyContent: 'center',
17334
+ alignContent: 'center',
17335
+ alignItems: 'center'
17327
17336
  }
17328
17337
  };
17329
17338
 
@@ -17360,14 +17369,11 @@ const HoldPane = () => {
17360
17369
  clearInterval(interval);
17361
17370
  };
17362
17371
  }, [startTime]);
17363
- const resumeSpinner = () => {
17364
- return React__default['default'].createElement(react.Spinner, { label: strings.resumingCallButtonLabel, labelPosition: 'right' });
17365
- };
17366
17372
  return (React__default['default'].createElement(react.Stack, { styles: paneStyles },
17367
17373
  React__default['default'].createElement(react.Stack, { horizontal: true, styles: holdPaneContentStyles },
17368
17374
  React__default['default'].createElement(react.Text, { styles: holdPaneTimerStyles }, elapsedTime),
17369
17375
  React__default['default'].createElement(react.Text, { styles: holdPaneLabelStyles }, strings.holdScreenLabel),
17370
- React__default['default'].createElement(react.PrimaryButton, { text: !resumingCall ? strings.resumeCallButtonLabel : undefined, ariaLabel: !resumingCall ? strings.resumeCallButtonAriaLabel : strings.resumingCallButtonAriaLabel, styles: resumeButtonStyles, disabled: resumingCall, onClick: () => __awaiter$6(void 0, void 0, void 0, function* () {
17376
+ React__default['default'].createElement(react.PrimaryButton, { text: !resumingCall ? strings.resumeCallButtonLabel : strings.resumingCallButtonLabel, ariaLabel: !resumingCall ? strings.resumeCallButtonAriaLabel : strings.resumingCallButtonAriaLabel, styles: resumeButtonStyles, disabled: resumingCall, onClick: () => __awaiter$6(void 0, void 0, void 0, function* () {
17371
17377
  setResumingCall(true);
17372
17378
  try {
17373
17379
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
@@ -17377,7 +17383,7 @@ const HoldPane = () => {
17377
17383
  setResumingCall(false);
17378
17384
  throw e;
17379
17385
  }
17380
- }), "data-ui-id": "hold-page-resume-call-button" }, resumingCall && resumeSpinner()))));
17386
+ }), "data-ui-id": "hold-page-resume-call-button" }))));
17381
17387
  };
17382
17388
  const getMinutes = (time) => {
17383
17389
  return Math.floor(getSeconds(time) / 60);
@@ -18633,7 +18639,7 @@ const CallWithChatControlBar = (props) => {
18633
18639
  if (options === false) {
18634
18640
  return React__default['default'].createElement(React__default['default'].Fragment, null);
18635
18641
  }
18636
- const chatButton = (React__default['default'].createElement(ChatButtonWithUnreadMessagesBadge, { chatAdapter: props.chatAdapter, checked: props.chatButtonChecked, showLabel: options.displayType !== 'compact', isChatPaneVisible: props.chatButtonChecked, onClick: props.onChatButtonClicked, disabled: props.disableButtonsForLobbyPage, strings: chatButtonStrings, styles: commonButtonStyles, newMessageLabel: callWithChatStrings.chatButtonNewMessageNotificationLabel }));
18642
+ const chatButton = (React__default['default'].createElement(ChatButtonWithUnreadMessagesBadge, { chatAdapter: props.chatAdapter, checked: props.chatButtonChecked, showLabel: options.displayType !== 'compact', isChatPaneVisible: props.chatButtonChecked, onClick: props.onChatButtonClicked, disabled: props.disableButtonsForLobbyPage || isDisabled$2(options.chatButton), strings: chatButtonStrings, styles: commonButtonStyles, newMessageLabel: callWithChatStrings.chatButtonNewMessageNotificationLabel }));
18637
18643
  return (React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(callControlsContainerStyles, controlBarContainerStyles) },
18638
18644
  React__default['default'].createElement(react.Stack.Item, { grow: true },
18639
18645
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
@@ -18642,14 +18648,14 @@ const CallWithChatControlBar = (props) => {
18642
18648
  React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: centerContainerStyles },
18643
18649
  isEnabled$1(options.microphoneButton) && (React__default['default'].createElement(Microphone, { displayType: options.displayType, styles: commonButtonStyles, splitButtonsForDeviceSelection: !props.mobileView,
18644
18650
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
18645
- disabled: props.disableButtonsForHoldScreen })),
18651
+ disabled: props.disableButtonsForHoldScreen || isDisabled$2(options.microphoneButton) })),
18646
18652
  isEnabled$1(options.cameraButton) && (React__default['default'].createElement(Camera, { displayType: options.displayType, styles: commonButtonStyles, splitButtonsForDeviceSelection: !props.mobileView,
18647
18653
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
18648
- disabled: props.disableButtonsForHoldScreen })),
18654
+ disabled: props.disableButtonsForHoldScreen || isDisabled$2(options.cameraButton) })),
18649
18655
  props.mobileView && isEnabled$1(options === null || options === void 0 ? void 0 : options.chatButton) && chatButton,
18650
18656
  isEnabled$1(options.screenShareButton) && (React__default['default'].createElement(ScreenShare, { option: options.screenShareButton, displayType: options.displayType, styles: screenShareButtonStyles,
18651
18657
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
18652
- disabled: props.disableButtonsForHoldScreen })),
18658
+ disabled: props.disableButtonsForHoldScreen || isDisabled$2(options.screenShareButton) })),
18653
18659
  /* @conditional-compile-remove(control-bar-button-injection) */
18654
18660
  (_a = customButtons['primary']) === null || _a === void 0 ? void 0 :
18655
18661
  _a.props.children.slice(0, props.mobileView
@@ -18668,7 +18674,7 @@ const CallWithChatControlBar = (props) => {
18668
18674
  _b.props.children.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS).map((element) => {
18669
18675
  return (React__default['default'].createElement(element.type, Object.assign({}, element.props, { key: element.props.key, styles: commonButtonStyles, displayType: options.displayType, showLabel: options.displayType !== 'compact' })));
18670
18676
  }),
18671
- isEnabled$1(options === null || options === void 0 ? void 0 : options.peopleButton) && (React__default['default'].createElement(PeopleButton, { checked: props.peopleButtonChecked, showLabel: options.displayType !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-with-chat-composite-people-button", disabled: props.disableButtonsForLobbyPage, strings: peopleButtonStrings, styles: commonButtonStyles })),
18677
+ isEnabled$1(options === null || options === void 0 ? void 0 : options.peopleButton) && (React__default['default'].createElement(PeopleButton, { checked: props.peopleButtonChecked, showLabel: options.displayType !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-with-chat-composite-people-button", disabled: props.disableButtonsForLobbyPage || isDisabled$2(options.peopleButton), strings: peopleButtonStrings, styles: commonButtonStyles })),
18672
18678
  isEnabled$1(options === null || options === void 0 ? void 0 : options.chatButton) && chatButton))));
18673
18679
  };
18674
18680
  const desktopButtonContainerStyle = {
@@ -19057,7 +19063,8 @@ const MoreDrawer = (props) => {
19057
19063
  },
19058
19064
  text: mic.name,
19059
19065
  onItemClick: onMicrophoneItemClick,
19060
- secondaryIconProps: isDeviceSelected(mic, props.selectedMicrophone) ? { iconName: 'Accept' } : undefined
19066
+ secondaryIconProps: isDeviceSelected(mic, props.selectedMicrophone) ? { iconName: 'Accept' } : undefined,
19067
+ disabled: drawerSelectionOptions !== false ? isDisabled$2(drawerSelectionOptions.microphoneButton) : undefined
19061
19068
  })),
19062
19069
  secondaryText: (_b = props.selectedMicrophone) === null || _b === void 0 ? void 0 : _b.name
19063
19070
  });
@@ -19067,14 +19074,16 @@ const MoreDrawer = (props) => {
19067
19074
  itemKey: 'people',
19068
19075
  text: props.strings.peopleButtonLabel,
19069
19076
  iconProps: { iconName: 'MoreDrawerPeople' },
19070
- onItemClick: props.onPeopleButtonClicked
19077
+ onItemClick: props.onPeopleButtonClicked,
19078
+ disabled: drawerSelectionOptions !== false ? isDisabled$2(drawerSelectionOptions.peopleButton) : undefined
19071
19079
  });
19072
19080
  }
19073
19081
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
19074
- if (drawerSelectionOptions !== false && isEnabled(drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.peopleButton)) {
19082
+ if (drawerSelectionOptions !== false && isEnabled(drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.holdButton)) {
19075
19083
  drawerMenuItems.push({
19076
19084
  itemKey: 'holdButtonKey',
19077
- disabled: props.disableButtonsForHoldScreen,
19085
+ disabled: props.disableButtonsForHoldScreen ||
19086
+ (drawerSelectionOptions !== false ? isDisabled$2(drawerSelectionOptions.holdButton) : undefined),
19078
19087
  text: localeStrings.component.strings.holdButton.tooltipOffContent,
19079
19088
  onItemClick: () => {
19080
19089
  holdButtonProps.onToggleHold();
@@ -19084,7 +19093,7 @@ const MoreDrawer = (props) => {
19084
19093
  }
19085
19094
  /*@conditional-compile-remove(PSTN-calls) */
19086
19095
  // dtmf tone sending only works for 1:1 PSTN call
19087
- if (drawerSelectionOptions !== false && isEnabled(drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.peopleButton) && props.onClickShowDialpad) {
19096
+ if (drawerSelectionOptions !== false && props.onClickShowDialpad) {
19088
19097
  drawerMenuItems.push({
19089
19098
  itemKey: 'showDialpadKey',
19090
19099
  disabled: props.disableButtonsForHoldScreen,
@@ -19156,6 +19165,7 @@ var __awaiter$1 = (window && window.__awaiter) || function (thisArg, _arguments,
19156
19165
  * @private
19157
19166
  */
19158
19167
  const CallWithChatPane = (props) => {
19168
+ var _a, _b;
19159
19169
  const [drawerMenuItems, setDrawerMenuItems] = React.useState([]);
19160
19170
  const hidden = props.activePane === 'none';
19161
19171
  const paneStyles = hidden ? hiddenStyles : props.mobileView ? availableSpaceStyles : sidePaneStyles;
@@ -19163,7 +19173,7 @@ const CallWithChatPane = (props) => {
19163
19173
  const theme = useTheme();
19164
19174
  /* @conditional-compile-remove(PSTN-calls) */
19165
19175
  const alternateCallerId = props.callAdapter.getState().alternateCallerId;
19166
- const header = props.activePane === 'none' ? null : props.mobileView ? (React__default['default'].createElement(TabHeader, Object.assign({}, props, { strings: callWithChatStrings, activeTab: props.activePane }))) : (React__default['default'].createElement(SidePaneHeader, Object.assign({}, props, { strings: callWithChatStrings, headingText: props.activePane === 'chat'
19176
+ const header = props.activePane === 'none' ? null : props.mobileView ? (React__default['default'].createElement(TabHeader, Object.assign({}, props, { strings: callWithChatStrings, activeTab: props.activePane, disableChatButton: isDisabled$2((_a = props.callControls) === null || _a === void 0 ? void 0 : _a.chatButton), disablePeopleButton: isDisabled$2((_b = props.callControls) === null || _b === void 0 ? void 0 : _b.peopleButton) }))) : (React__default['default'].createElement(SidePaneHeader, Object.assign({}, props, { strings: callWithChatStrings, headingText: props.activePane === 'chat'
19167
19177
  ? callWithChatStrings.chatPaneTitle
19168
19178
  : props.activePane === 'people'
19169
19179
  ? callWithChatStrings.peoplePaneTitle
@@ -19232,6 +19242,7 @@ const CallWithChatScreen = (props) => {
19232
19242
  setCurrentPage(newState.page);
19233
19243
  setCurrentCallState((_a = newState.call) === null || _a === void 0 ? void 0 : _a.state);
19234
19244
  };
19245
+ updateCallWithChatPage(callWithChatAdapter.getState());
19235
19246
  callWithChatAdapter.onStateChange(updateCallWithChatPage);
19236
19247
  return () => {
19237
19248
  callWithChatAdapter.offStateChange(updateCallWithChatPage);
@@ -19337,7 +19348,7 @@ const CallWithChatScreen = (props) => {
19337
19348
  React__default['default'].createElement(CallComposite, Object.assign({}, props, { formFactor: formFactor, options: { callControls: false }, adapter: callAdapter, fluentTheme: fluentTheme }))),
19338
19349
  chatProps.adapter && callAdapter && hasJoinedCall && (React__default['default'].createElement(CallWithChatPane, { chatCompositeProps: chatProps, inviteLink: props.joinInvitationURL, onClose: closePane, chatAdapter: chatProps.adapter, callAdapter: callAdapter, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, onChatButtonClicked: showShowChatTabHeaderButton(props.callControls) ? selectChat : undefined, onPeopleButtonClicked: showShowPeopleTabHeaderButton(props.callControls) ? selectPeople : undefined, modalLayerHostId: modalLayerHostId, mobileView: mobileView, activePane: activePane,
19339
19350
  /* @conditional-compile-remove(file-sharing) */
19340
- fileSharing: props.fileSharing, rtl: props.rtl }))),
19351
+ fileSharing: props.fileSharing, rtl: props.rtl, callControls: typeof props.callControls !== 'boolean' ? props.callControls : undefined }))),
19341
19352
  showControlBar && !isMobileWithActivePane && (React__default['default'].createElement(ChatAdapterProvider, { adapter: chatProps.adapter },
19342
19353
  React__default['default'].createElement(react.Stack.Item, { styles: controlBarContainerStyles$1 },
19343
19354
  React__default['default'].createElement(CallWithChatControlBar, { callAdapter: callAdapter, chatAdapter: chatProps.adapter, chatButtonChecked: activePane === 'chat', onChatButtonClicked: toggleChat, peopleButtonChecked: activePane === 'people', onPeopleButtonClicked: togglePeople, onMoreButtonClicked: onMoreButtonClicked, mobileView: mobileView, disableButtonsForLobbyPage: isInLobbyOrConnecting,
@@ -19377,7 +19388,8 @@ const CallWithChatComposite = (props) => {
19377
19388
  };
19378
19389
  const hasJoinedCallFn = (page, callStatus) => {
19379
19390
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */
19380
- return (page === 'call' && callStatus === 'Connected') || (page === 'hold' && callStatus === 'LocalHold');
19391
+ return ((page === 'call' && (callStatus === 'Connected' || callStatus === 'RemoteHold')) ||
19392
+ (page === 'hold' && callStatus === 'LocalHold'));
19381
19393
  };
19382
19394
  const showShowChatTabHeaderButton = (callControls) => {
19383
19395
  if (callControls === undefined || callControls === true) {