@azure/communication-react 1.3.3-alpha-202208300017.0 → 1.3.3-alpha-202209020015.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 (64) hide show
  1. package/dist/communication-react.d.ts +23 -5
  2. package/dist/dist-cjs/communication-react/index.js +310 -305
  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/react-components/src/components/Announcer.d.ts +2 -2
  7. package/dist/dist-esm/react-components/src/components/Announcer.js +1 -1
  8. package/dist/dist-esm/react-components/src/components/Announcer.js.map +1 -1
  9. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  10. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js +1 -1
  11. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenuItem.js.map +1 -1
  12. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +2 -46
  13. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/VideoTile.js +9 -6
  15. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -0
  17. package/dist/dist-esm/react-components/src/components/index.js +1 -0
  18. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js +3 -0
  20. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.d.ts +3 -3
  22. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js +13 -15
  23. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  24. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +2 -2
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +4 -0
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +1 -1
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +3 -7
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.d.ts +2 -1
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js +3 -1
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js.map +1 -1
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js +3 -6
  35. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js.map +1 -1
  36. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js +8 -5
  37. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js.map +1 -1
  38. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +10 -0
  39. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +32 -4
  40. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  41. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +15 -5
  42. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +3 -2
  43. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  44. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js +6 -5
  45. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js.map +1 -1
  46. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.d.ts +2 -0
  47. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js +3 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js.map +1 -1
  49. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts +4 -0
  50. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.js.map +1 -1
  51. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.js +9 -5
  52. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.js.map +1 -1
  53. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.d.ts +1 -0
  54. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +17 -6
  55. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -1
  56. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js +7 -3
  57. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js +1 -0
  59. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js.map +1 -1
  60. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.d.ts +2 -0
  61. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.js +2 -2
  62. package/dist/dist-esm/react-composites/src/composites/common/TabHeader.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +7 -5
  64. 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-202208300017.0';
195
+ var telemetryVersion = '1.3.3-alpha-202209020015.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
  };
@@ -12791,7 +12752,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
12791
12752
  */
12792
12753
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
12793
12754
 
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};
12755
+ 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
12756
 
12796
12757
  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
12758
 
@@ -14454,7 +14415,8 @@ const END_CALL_PAGES = [
14454
14415
 
14455
14416
  // Copyright (c) Microsoft Corporation.
14456
14417
  const ACCESS_DENIED_TEAMS_MEETING_SUB_CODE = 5854;
14457
- const REMOVED_FROM_CALL_SUB_CODES = [5000, 5300];
14418
+ const REMOTE_PSTN_USER_HUNG_UP = 560000;
14419
+ const REMOVED_FROM_CALL_SUB_CODES = [5000, 5300, REMOTE_PSTN_USER_HUNG_UP];
14458
14420
  /**
14459
14421
  * @private
14460
14422
  */
@@ -14499,11 +14461,24 @@ var CallEndReasons;
14499
14461
  CallEndReasons[CallEndReasons["REMOVED_FROM_CALL"] = 2] = "REMOVED_FROM_CALL";
14500
14462
  })(CallEndReasons || (CallEndReasons = {}));
14501
14463
  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) {
14464
+ var _a, _b, _c;
14465
+ const remoteParticipantsEndedArray = Array.from(Object.values(call.remoteParticipantsEnded));
14466
+ /**
14467
+ * Handle the special case in a PSTN call where removing the last user kicks the caller out of the call.
14468
+ * The code and subcode is the same as when a user is removed from a teams interop call.
14469
+ * Hence, we look at the last remote participant removed to determine if the last participant removed was a phone number.
14470
+ * If yes, the caller was kicked out of the call, but we need to show them that they left the call.
14471
+ * 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.
14472
+ */
14473
+ if (remoteParticipantsEndedArray.length === 1 &&
14474
+ communicationCommon.isPhoneNumberIdentifier(remoteParticipantsEndedArray[0].identifier) &&
14475
+ ((_a = call.callEndReason) === null || _a === void 0 ? void 0 : _a.subCode) !== REMOTE_PSTN_USER_HUNG_UP) {
14476
+ return CallEndReasons.LEFT_CALL;
14477
+ }
14478
+ if (((_b = call.callEndReason) === null || _b === void 0 ? void 0 : _b.subCode) && call.callEndReason.subCode === ACCESS_DENIED_TEAMS_MEETING_SUB_CODE) {
14504
14479
  return CallEndReasons.ACCESS_DENIED;
14505
14480
  }
14506
- if (((_b = call.callEndReason) === null || _b === void 0 ? void 0 : _b.subCode) && REMOVED_FROM_CALL_SUB_CODES.includes(call.callEndReason.subCode)) {
14481
+ if (((_c = call.callEndReason) === null || _c === void 0 ? void 0 : _c.subCode) && REMOVED_FROM_CALL_SUB_CODES.includes(call.callEndReason.subCode)) {
14507
14482
  return CallEndReasons.REMOVED_FROM_CALL;
14508
14483
  }
14509
14484
  if (call.callEndReason) {
@@ -14610,6 +14585,19 @@ const disableCallControls = (callControlOptions, disabledControls) => {
14610
14585
  }
14611
14586
  return newOptions;
14612
14587
  };
14588
+ /**
14589
+ * Check if a disabled object is provided for a button and returns if the button is disabled.
14590
+ *
14591
+ * @param option
14592
+ * @returns whether a button is disabled
14593
+ * @private
14594
+ */
14595
+ const isDisabled$2 = (option) => {
14596
+ if (typeof option !== 'boolean') {
14597
+ return !!(option === null || option === void 0 ? void 0 : option.disabled);
14598
+ }
14599
+ return option;
14600
+ };
14613
14601
 
14614
14602
  // Copyright (c) Microsoft Corporation.
14615
14603
  // Licensed under the MIT license.
@@ -14978,9 +14966,9 @@ const Participants = (props) => {
14978
14966
  var _a;
14979
14967
  return concatButtonBaseStyles(props.increaseFlyoutItemSize ? participantButtonWithIncreasedTouchTargets : {}, (_a = props.styles) !== null && _a !== void 0 ? _a : {});
14980
14968
  }, [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 })));
14969
+ 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
14970
  };
14983
- const isDisabled$2 = (option) => {
14971
+ const isDisabled$1 = (option) => {
14984
14972
  if (option === undefined || option === true || option === false) {
14985
14973
  return false;
14986
14974
  }
@@ -14994,11 +14982,11 @@ const ScreenShare = (props) => {
14994
14982
  const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
14995
14983
  const screenShareButtonDisabled = () => {
14996
14984
  /* @conditional-compile-remove(PSTN-calls) */
14997
- return (screenShareButtonProps === null || screenShareButtonProps === void 0 ? void 0 : screenShareButtonProps.disabled) ? screenShareButtonProps.disabled : isDisabled$1(props.option);
14985
+ return (screenShareButtonProps === null || screenShareButtonProps === void 0 ? void 0 : screenShareButtonProps.disabled) ? screenShareButtonProps.disabled : isDisabled(props.option);
14998
14986
  };
14999
14987
  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
14988
  };
15001
- const isDisabled$1 = (option) => {
14989
+ const isDisabled = (option) => {
15002
14990
  if (option === undefined || option === true || option === false) {
15003
14991
  return false;
15004
14992
  }
@@ -15063,6 +15051,7 @@ const themedDialpadStyle$1 = (isMobile, theme) => ({
15063
15051
  backgroundColor: theme.palette.white,
15064
15052
  fontSize: theme.fonts.large.fontSize,
15065
15053
  padding: '0 0.5rem ',
15054
+ direction: 'rtl',
15066
15055
  textAlign: 'center',
15067
15056
  ':active': {
15068
15057
  padding: '0 0.5rem'
@@ -15125,19 +15114,23 @@ const SendDtmfDialpad = (props) => {
15125
15114
  const onDismissTriggered = () => {
15126
15115
  onDismissDialpad();
15127
15116
  };
15117
+ const [textFieldValue, setTextFieldValue] = React.useState();
15118
+ const onChange = (input) => {
15119
+ setTextFieldValue(input);
15120
+ };
15128
15121
  const dialpadModalStyle = React.useMemo(() => themeddialpadModalStyle$1(theme), [theme]);
15129
15122
  const dialpadStyle = React.useMemo(() => themedDialpadStyle$1(isMobile, theme), [theme, isMobile]);
15130
15123
  if (isMobile) {
15131
15124
  return (React__default['default'].createElement(react.Stack, null, showDialpad && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles$1 },
15132
15125
  React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onDismissTriggered },
15133
15126
  React__default['default'].createElement(react.Stack, { style: { padding: '1rem' } },
15134
- React__default['default'].createElement(Dialpad, Object.assign({ styles: dialpadStyle }, dialpadProps, { showDeleteButton: false, strings: strings, isMobile: isMobile }))))))));
15127
+ React__default['default'].createElement(Dialpad, Object.assign({ styles: dialpadStyle }, dialpadProps, { showDeleteButton: false, textFieldValue: textFieldValue, onChange: onChange, strings: strings, isMobile: isMobile }))))))));
15135
15128
  }
15136
15129
  return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Modal, { titleAriaId: strings.dialpadModalAriaLabel, isOpen: showDialpad, onDismiss: onDismissTriggered, isBlocking: true, styles: dialpadModalStyle },
15137
15130
  React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "end", verticalAlign: "center" },
15138
15131
  React__default['default'].createElement(react.IconButton, { iconProps: { iconName: 'Cancel' }, ariaLabel: strings.dialpadCloseModalButtonAriaLabel, onClick: onDismissTriggered, style: { color: theme.palette.black } })),
15139
15132
  React__default['default'].createElement(react.Stack, { style: { overflow: 'hidden' } },
15140
- React__default['default'].createElement(Dialpad, Object.assign({ styles: dialpadStyle }, dialpadProps, { showDeleteButton: false, strings: strings, isMobile: isMobile }))))));
15133
+ React__default['default'].createElement(Dialpad, Object.assign({ styles: dialpadStyle }, dialpadProps, { textFieldValue: textFieldValue, onChange: onChange, showDeleteButton: false, strings: strings, isMobile: isMobile }))))));
15141
15134
  };
15142
15135
 
15143
15136
  // Copyright (c) Microsoft Corporation.
@@ -15174,7 +15167,7 @@ const CallControls = (props) => {
15174
15167
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15175
15168
  const moreButtonContextualMenuItems = () => {
15176
15169
  const items = [];
15177
- if (props.isMobile && props.onPeopleButtonClicked) {
15170
+ if (props.isMobile && props.onPeopleButtonClicked && isEnabled$2(options === null || options === void 0 ? void 0 : options.participantsButton)) {
15178
15171
  items.push({
15179
15172
  key: 'peopleButtonKey',
15180
15173
  text: localeStrings.component.strings.participantsButton.label,
@@ -15187,6 +15180,7 @@ const CallControls = (props) => {
15187
15180
  itemProps: {
15188
15181
  styles: buttonFlyoutIncreasedSizeStyles
15189
15182
  },
15183
+ disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.participantsButton),
15190
15184
  ['data-ui-id']: 'call-composite-more-menu-people-button'
15191
15185
  });
15192
15186
  }
@@ -15200,7 +15194,7 @@ const CallControls = (props) => {
15200
15194
  itemProps: {
15201
15195
  styles: buttonFlyoutIncreasedSizeStyles
15202
15196
  },
15203
- disabled: isDisabled(options === null || options === void 0 ? void 0 : options.holdButton),
15197
+ disabled: isDisabled$2(options === null || options === void 0 ? void 0 : options.holdButton),
15204
15198
  ['data-ui-id']: 'hold-button'
15205
15199
  });
15206
15200
  /* @conditional-compile-remove(PSTN-calls) */
@@ -15238,27 +15232,21 @@ const CallControls = (props) => {
15238
15232
  React__default['default'].createElement(SendDtmfDialpad, { isMobile: !!props.isMobile, strings: dialpadStrings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad }),
15239
15233
  React__default['default'].createElement(react.Stack.Item, null,
15240
15234
  React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: controlBarStyles(theme.semanticColors.bodyBackground) },
15241
- 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) })),
15242
- 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) })),
15243
- 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) })),
15235
+ 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) })),
15236
+ 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) })),
15237
+ 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) })),
15244
15238
  isEnabled$2(options === null || options === void 0 ? void 0 : options.participantsButton) &&
15245
15239
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15246
- !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) })) && (
15240
+ !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) })) && (
15247
15241
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15248
- 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) })),
15249
- 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) })),
15242
+ 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) })),
15243
+ 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) })),
15250
15244
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
15251
15245
  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 })),
15252
15246
  customButtons['primary'],
15253
15247
  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 })))));
15254
15248
  };
15255
15249
  const isEnabled$2 = (option) => option !== false;
15256
- const isDisabled = (option) => {
15257
- if (typeof option !== 'boolean') {
15258
- return !!(option === null || option === void 0 ? void 0 : option.disabled);
15259
- }
15260
- return option;
15261
- };
15262
15250
 
15263
15251
  // Copyright (c) Microsoft Corporation.
15264
15252
  /**
@@ -15849,6 +15837,7 @@ const AddPeopleDropdown = (props) => {
15849
15837
  const theme = react.useTheme();
15850
15838
  const { inviteLink, strings, mobileView, onAddParticipant, alternateCallerId } = props;
15851
15839
  const [showDialpad, setShowDialpad] = React.useState(false);
15840
+ const [announcerStrings, setAnnouncerStrings] = React.useState();
15852
15841
  const menuStyleThemed = React.useMemo(() => themedMenuStyle(theme), [theme]);
15853
15842
  const copyLinkButtonStylesThemed = React.useMemo(() => themedCopyLinkButtonStyles(theme, mobileView), [mobileView, theme]);
15854
15843
  const defaultMenuProps = React.useMemo(() => {
@@ -15858,6 +15847,10 @@ const AddPeopleDropdown = (props) => {
15858
15847
  useTargetWidth: true,
15859
15848
  calloutProps: {
15860
15849
  preventDismissOnEvent: _preventDismissOnEvent
15850
+ },
15851
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
15852
+ onMenuOpened(contextualMenu) {
15853
+ setAnnouncerStrings(undefined);
15861
15854
  }
15862
15855
  };
15863
15856
  if (inviteLink) {
@@ -15866,7 +15859,10 @@ const AddPeopleDropdown = (props) => {
15866
15859
  text: strings.copyInviteLinkButtonLabel,
15867
15860
  itemProps: { styles: copyLinkButtonStylesThemed },
15868
15861
  iconProps: { iconName: 'Link', style: iconStyles },
15869
- onClick: () => copy__default['default'](inviteLink)
15862
+ onClick: () => {
15863
+ setAnnouncerStrings(strings.copyInviteLinkActionedAriaLabel);
15864
+ copy__default['default'](inviteLink);
15865
+ }
15870
15866
  });
15871
15867
  }
15872
15868
  // only show the dialpad option when alternateCallerId is set
@@ -15882,12 +15878,13 @@ const AddPeopleDropdown = (props) => {
15882
15878
  }
15883
15879
  return menuProps;
15884
15880
  }, [
15881
+ menuStyleThemed,
15882
+ inviteLink,
15883
+ alternateCallerId,
15885
15884
  strings.copyInviteLinkButtonLabel,
15885
+ strings.copyInviteLinkActionedAriaLabel,
15886
15886
  strings.openDialpadButtonLabel,
15887
- copyLinkButtonStylesThemed,
15888
- inviteLink,
15889
- menuStyleThemed,
15890
- alternateCallerId
15887
+ copyLinkButtonStylesThemed
15891
15888
  ]);
15892
15889
  const onDismissDialpad = () => {
15893
15890
  setShowDialpad(false);
@@ -15901,6 +15898,7 @@ const AddPeopleDropdown = (props) => {
15901
15898
  }, [defaultMenuProps, setAddPeopleDrawerMenuItems]);
15902
15899
  if (mobileView) {
15903
15900
  return (React__default['default'].createElement(react.Stack, null,
15901
+ React__default['default'].createElement(Announcer, { ariaLive: 'assertive', announcementString: announcerStrings }),
15904
15902
  React__default['default'].createElement(react.Stack.Item, { styles: copyLinkButtonContainerStyles },
15905
15903
  React__default['default'].createElement(react.PrimaryButton, { onClick: setDrawerMenuItemsForAddPeople, styles: copyLinkButtonStylesThemed, onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, "data-ui-id": "call-add-people-button" })),
15906
15904
  addPeopleDrawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles, "data-ui-id": "call-add-people-dropdown" },
@@ -15908,6 +15906,7 @@ const AddPeopleDropdown = (props) => {
15908
15906
  alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: true, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId }))));
15909
15907
  }
15910
15908
  return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Stack, null,
15909
+ React__default['default'].createElement(Announcer, { ariaLive: 'assertive', announcementString: announcerStrings }),
15911
15910
  alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: false, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId })),
15912
15911
  React__default['default'].createElement(react.Stack, { styles: copyLinkButtonStackStyles },
15913
15912
  React__default['default'].createElement(react.DefaultButton, { onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, menuProps: defaultMenuProps, styles: copyLinkButtonStylesThemed, "data-ui-id": "call-add-people-button" })))));
@@ -16146,8 +16145,8 @@ const TabHeader = (props) => {
16146
16145
  }, [theme, haveMultipleTabs]);
16147
16146
  return (React__default['default'].createElement(react.Stack, { horizontal: true, grow: true, styles: mobilePaneControlBarStyle },
16148
16147
  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 }),
16149
- 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))),
16150
- 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))),
16148
+ 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))),
16149
+ 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))),
16151
16150
  React__default['default'].createElement(react.DefaultButton, { styles: mobilePaneHiddenIconStyles, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "ChevronLeft" }) })));
16152
16151
  };
16153
16152
 
@@ -16194,6 +16193,7 @@ var __awaiter$8 = (window && window.__awaiter) || function (thisArg, _arguments,
16194
16193
  */
16195
16194
  /** @beta */
16196
16195
  const CallPane = (props) => {
16196
+ var _a;
16197
16197
  const [drawerMenuItems, setDrawerMenuItems] = React.useState([]);
16198
16198
  const hidden = props.activePane === 'none';
16199
16199
  const paneStyles = hidden ? hiddenStyles : props.mobileView ? availableSpaceStyles : sidePaneStyles;
@@ -16205,7 +16205,7 @@ const CallPane = (props) => {
16205
16205
  };
16206
16206
  const strings = getStrings();
16207
16207
  const theme = useTheme();
16208
- 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 : '' })));
16208
+ 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 : '' })));
16209
16209
  /**
16210
16210
  * In a Call Composite when a participant is removed, we must remove them from the call.
16211
16211
  */
@@ -16331,7 +16331,7 @@ const CallArrangement = (props) => {
16331
16331
  const callPaneContent = React.useCallback(() => {
16332
16332
  var _a;
16333
16333
  if (adapter && _isInCall(callStatus) && activePane === 'people') {
16334
- 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 }));
16334
+ 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 }));
16335
16335
  }
16336
16336
  return React__default['default'].createElement(React__default['default'].Fragment, null);
16337
16337
  }, [
@@ -17275,11 +17275,12 @@ const resumeButtonStyles = {
17275
17275
  */
17276
17276
  const holdPaneLabelStyles = {
17277
17277
  root: {
17278
- color: '#FFFFFF',
17278
+ color: 'inherit',
17279
17279
  fontWeight: 600,
17280
17280
  fontHeight: _pxToRem(22),
17281
17281
  fontSize: _pxToRem(16),
17282
- margin: '1rem auto 0.5rem'
17282
+ marginTop: '0.5rem',
17283
+ marginBottom: '1.5rem'
17283
17284
  }
17284
17285
  };
17285
17286
  /**
@@ -17289,7 +17290,7 @@ const holdPaneLabelStyles = {
17289
17290
  */
17290
17291
  const holdPaneTimerStyles = {
17291
17292
  root: {
17292
- color: '#FFFFFF',
17293
+ color: 'inherit',
17293
17294
  fontWeight: 600,
17294
17295
  fontSize: _pxToRem(20),
17295
17296
  lineHeight: _pxToRem(28),
@@ -17305,7 +17306,7 @@ const paneStyles = {
17305
17306
  root: {
17306
17307
  width: '100%',
17307
17308
  height: '100%',
17308
- background: 'rgba(0, 0, 0, 0.5)'
17309
+ background: 'inherit'
17309
17310
  }
17310
17311
  };
17311
17312
  /**
@@ -17318,7 +17319,9 @@ const holdPaneContentStyles = {
17318
17319
  display: 'flex',
17319
17320
  margin: 'auto',
17320
17321
  flexDirection: 'column',
17321
- justifyContent: 'center'
17322
+ justifyContent: 'center',
17323
+ alignContent: 'center',
17324
+ alignItems: 'center'
17322
17325
  }
17323
17326
  };
17324
17327
 
@@ -17355,14 +17358,11 @@ const HoldPane = () => {
17355
17358
  clearInterval(interval);
17356
17359
  };
17357
17360
  }, [startTime]);
17358
- const resumeSpinner = () => {
17359
- return React__default['default'].createElement(react.Spinner, { label: strings.resumingCallButtonLabel, labelPosition: 'right' });
17360
- };
17361
17361
  return (React__default['default'].createElement(react.Stack, { styles: paneStyles },
17362
17362
  React__default['default'].createElement(react.Stack, { horizontal: true, styles: holdPaneContentStyles },
17363
17363
  React__default['default'].createElement(react.Text, { styles: holdPaneTimerStyles }, elapsedTime),
17364
17364
  React__default['default'].createElement(react.Text, { styles: holdPaneLabelStyles }, strings.holdScreenLabel),
17365
- 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* () {
17365
+ 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* () {
17366
17366
  setResumingCall(true);
17367
17367
  try {
17368
17368
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
@@ -17372,7 +17372,7 @@ const HoldPane = () => {
17372
17372
  setResumingCall(false);
17373
17373
  throw e;
17374
17374
  }
17375
- }), "data-ui-id": "hold-page-resume-call-button" }, resumingCall && resumeSpinner()))));
17375
+ }), "data-ui-id": "hold-page-resume-call-button" }))));
17376
17376
  };
17377
17377
  const getMinutes = (time) => {
17378
17378
  return Math.floor(getSeconds(time) / 60);
@@ -18628,7 +18628,7 @@ const CallWithChatControlBar = (props) => {
18628
18628
  if (options === false) {
18629
18629
  return React__default['default'].createElement(React__default['default'].Fragment, null);
18630
18630
  }
18631
- 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 }));
18631
+ 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 }));
18632
18632
  return (React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(callControlsContainerStyles, controlBarContainerStyles) },
18633
18633
  React__default['default'].createElement(react.Stack.Item, { grow: true },
18634
18634
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
@@ -18637,14 +18637,14 @@ const CallWithChatControlBar = (props) => {
18637
18637
  React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: centerContainerStyles },
18638
18638
  isEnabled$1(options.microphoneButton) && (React__default['default'].createElement(Microphone, { displayType: options.displayType, styles: commonButtonStyles, splitButtonsForDeviceSelection: !props.mobileView,
18639
18639
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
18640
- disabled: props.disableButtonsForHoldScreen })),
18640
+ disabled: props.disableButtonsForHoldScreen || isDisabled$2(options.microphoneButton) })),
18641
18641
  isEnabled$1(options.cameraButton) && (React__default['default'].createElement(Camera, { displayType: options.displayType, styles: commonButtonStyles, splitButtonsForDeviceSelection: !props.mobileView,
18642
18642
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
18643
- disabled: props.disableButtonsForHoldScreen })),
18643
+ disabled: props.disableButtonsForHoldScreen || isDisabled$2(options.cameraButton) })),
18644
18644
  props.mobileView && isEnabled$1(options === null || options === void 0 ? void 0 : options.chatButton) && chatButton,
18645
18645
  isEnabled$1(options.screenShareButton) && (React__default['default'].createElement(ScreenShare, { option: options.screenShareButton, displayType: options.displayType, styles: screenShareButtonStyles,
18646
18646
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
18647
- disabled: props.disableButtonsForHoldScreen })),
18647
+ disabled: props.disableButtonsForHoldScreen || isDisabled$2(options.screenShareButton) })),
18648
18648
  /* @conditional-compile-remove(control-bar-button-injection) */
18649
18649
  (_a = customButtons['primary']) === null || _a === void 0 ? void 0 :
18650
18650
  _a.props.children.slice(0, props.mobileView
@@ -18663,7 +18663,7 @@ const CallWithChatControlBar = (props) => {
18663
18663
  _b.props.children.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS).map((element) => {
18664
18664
  return (React__default['default'].createElement(element.type, Object.assign({}, element.props, { key: element.props.key, styles: commonButtonStyles, displayType: options.displayType, showLabel: options.displayType !== 'compact' })));
18665
18665
  }),
18666
- 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 })),
18666
+ 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 })),
18667
18667
  isEnabled$1(options === null || options === void 0 ? void 0 : options.chatButton) && chatButton))));
18668
18668
  };
18669
18669
  const desktopButtonContainerStyle = {
@@ -19052,7 +19052,8 @@ const MoreDrawer = (props) => {
19052
19052
  },
19053
19053
  text: mic.name,
19054
19054
  onItemClick: onMicrophoneItemClick,
19055
- secondaryIconProps: isDeviceSelected(mic, props.selectedMicrophone) ? { iconName: 'Accept' } : undefined
19055
+ secondaryIconProps: isDeviceSelected(mic, props.selectedMicrophone) ? { iconName: 'Accept' } : undefined,
19056
+ disabled: drawerSelectionOptions !== false ? isDisabled$2(drawerSelectionOptions.microphoneButton) : undefined
19056
19057
  })),
19057
19058
  secondaryText: (_b = props.selectedMicrophone) === null || _b === void 0 ? void 0 : _b.name
19058
19059
  });
@@ -19062,14 +19063,16 @@ const MoreDrawer = (props) => {
19062
19063
  itemKey: 'people',
19063
19064
  text: props.strings.peopleButtonLabel,
19064
19065
  iconProps: { iconName: 'MoreDrawerPeople' },
19065
- onItemClick: props.onPeopleButtonClicked
19066
+ onItemClick: props.onPeopleButtonClicked,
19067
+ disabled: drawerSelectionOptions !== false ? isDisabled$2(drawerSelectionOptions.peopleButton) : undefined
19066
19068
  });
19067
19069
  }
19068
19070
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
19069
- if (drawerSelectionOptions !== false && isEnabled(drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.peopleButton)) {
19071
+ if (drawerSelectionOptions !== false && isEnabled(drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.holdButton)) {
19070
19072
  drawerMenuItems.push({
19071
19073
  itemKey: 'holdButtonKey',
19072
- disabled: props.disableButtonsForHoldScreen,
19074
+ disabled: props.disableButtonsForHoldScreen ||
19075
+ (drawerSelectionOptions !== false ? isDisabled$2(drawerSelectionOptions.holdButton) : undefined),
19073
19076
  text: localeStrings.component.strings.holdButton.tooltipOffContent,
19074
19077
  onItemClick: () => {
19075
19078
  holdButtonProps.onToggleHold();
@@ -19079,7 +19082,7 @@ const MoreDrawer = (props) => {
19079
19082
  }
19080
19083
  /*@conditional-compile-remove(PSTN-calls) */
19081
19084
  // dtmf tone sending only works for 1:1 PSTN call
19082
- if (drawerSelectionOptions !== false && isEnabled(drawerSelectionOptions === null || drawerSelectionOptions === void 0 ? void 0 : drawerSelectionOptions.peopleButton) && props.onClickShowDialpad) {
19085
+ if (drawerSelectionOptions !== false && props.onClickShowDialpad) {
19083
19086
  drawerMenuItems.push({
19084
19087
  itemKey: 'showDialpadKey',
19085
19088
  disabled: props.disableButtonsForHoldScreen,
@@ -19151,6 +19154,7 @@ var __awaiter$1 = (window && window.__awaiter) || function (thisArg, _arguments,
19151
19154
  * @private
19152
19155
  */
19153
19156
  const CallWithChatPane = (props) => {
19157
+ var _a, _b;
19154
19158
  const [drawerMenuItems, setDrawerMenuItems] = React.useState([]);
19155
19159
  const hidden = props.activePane === 'none';
19156
19160
  const paneStyles = hidden ? hiddenStyles : props.mobileView ? availableSpaceStyles : sidePaneStyles;
@@ -19158,7 +19162,7 @@ const CallWithChatPane = (props) => {
19158
19162
  const theme = useTheme();
19159
19163
  /* @conditional-compile-remove(PSTN-calls) */
19160
19164
  const alternateCallerId = props.callAdapter.getState().alternateCallerId;
19161
- 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'
19165
+ 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'
19162
19166
  ? callWithChatStrings.chatPaneTitle
19163
19167
  : props.activePane === 'people'
19164
19168
  ? callWithChatStrings.peoplePaneTitle
@@ -19332,7 +19336,7 @@ const CallWithChatScreen = (props) => {
19332
19336
  React__default['default'].createElement(CallComposite, Object.assign({}, props, { formFactor: formFactor, options: { callControls: false }, adapter: callAdapter, fluentTheme: fluentTheme }))),
19333
19337
  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,
19334
19338
  /* @conditional-compile-remove(file-sharing) */
19335
- fileSharing: props.fileSharing, rtl: props.rtl }))),
19339
+ fileSharing: props.fileSharing, rtl: props.rtl, callControls: typeof props.callControls !== 'boolean' ? props.callControls : undefined }))),
19336
19340
  showControlBar && !isMobileWithActivePane && (React__default['default'].createElement(ChatAdapterProvider, { adapter: chatProps.adapter },
19337
19341
  React__default['default'].createElement(react.Stack.Item, { styles: controlBarContainerStyles$1 },
19338
19342
  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,
@@ -19372,7 +19376,8 @@ const CallWithChatComposite = (props) => {
19372
19376
  };
19373
19377
  const hasJoinedCallFn = (page, callStatus) => {
19374
19378
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */
19375
- return (page === 'call' && callStatus === 'Connected') || (page === 'hold' && callStatus === 'LocalHold');
19379
+ return ((page === 'call' && (callStatus === 'Connected' || callStatus === 'RemoteHold')) ||
19380
+ (page === 'hold' && callStatus === 'LocalHold'));
19376
19381
  };
19377
19382
  const showShowChatTabHeaderButton = (callControls) => {
19378
19383
  if (callControls === undefined || callControls === true) {