@azure/communication-react 1.4.3-alpha-202212150014.0 → 1.4.3-alpha-202212160013.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 (36) hide show
  1. package/dist/communication-react.d.ts +22 -0
  2. package/dist/dist-cjs/communication-react/index.js +167 -47
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +1 -1
  7. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +2 -1
  8. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
  9. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js +21 -10
  10. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js.map +1 -1
  11. package/dist/dist-esm/react-components/src/components/DevicePermissions/DomainPermissions.d.ts +4 -0
  12. package/dist/dist-esm/react-components/src/components/DevicePermissions/DomainPermissions.js +9 -3
  13. package/dist/dist-esm/react-components/src/components/DevicePermissions/DomainPermissions.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/ErrorBar.d.ts +8 -0
  15. package/dist/dist-esm/react-components/src/components/ErrorBar.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/ParticipantsButton.d.ts +4 -0
  17. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js +25 -4
  18. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/utils.js +4 -0
  20. package/dist/dist-esm/react-components/src/components/utils.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +6 -0
  22. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +22 -1
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +1 -1
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.d.ts +3 -4
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js +55 -24
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js.map +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +27 -5
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +5 -0
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +9 -0
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  34. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js +26 -3
  35. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js.map +1 -1
  36. package/package.json +8 -8
@@ -202,7 +202,7 @@ const _toCommunicationIdentifier = (id) => {
202
202
  // Copyright (c) Microsoft Corporation.
203
203
  // Licensed under the MIT license.
204
204
  // GENERATED FILE. DO NOT EDIT MANUALLY.
205
- var telemetryVersion = '1.4.3-alpha-202212150014.0';
205
+ var telemetryVersion = '1.4.3-alpha-202212160013.0';
206
206
 
207
207
  // Copyright (c) Microsoft Corporation.
208
208
  /**
@@ -408,6 +408,13 @@ const getDiagnostics = (state, props) => { var _a; return (_a = state.calls[prop
408
408
  * @private
409
409
  */
410
410
  const getCallState = (state, props) => { var _a; return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.state; };
411
+ /**
412
+ * @private
413
+ */
414
+ const getEnvironmentInfo = (state) => {
415
+ /* @conditional-compile-remove(unsupported-browser) */
416
+ return state.environmentInfo;
417
+ };
411
418
 
412
419
  // Copyright (c) Microsoft Corporation.
413
420
  // Licensed under the MIT license.
@@ -4003,7 +4010,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
4003
4010
  wordBreak: 'break-word'
4004
4011
  });
4005
4012
 
4006
- 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",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneDomainPermissionsCheck={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraDomainPermissionsCheck={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneDomainPermissionsCheck={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneDomainPermissionsDenied={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDenied={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDenied={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$1={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$1={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$d={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$d={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};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$d,videoTile:videoTile$d,CameraAndMicrophoneDomainPermissionsRequest:CameraAndMicrophoneDomainPermissionsRequest,CameraDomainPermissionsRequest:CameraDomainPermissionsRequest,MicrophoneDomainPermissionsRequest:MicrophoneDomainPermissionsRequest,CameraAndMicrophoneDomainPermissionsCheck:CameraAndMicrophoneDomainPermissionsCheck,CameraDomainPermissionsCheck:CameraDomainPermissionsCheck,MicrophoneDomainPermissionsCheck:MicrophoneDomainPermissionsCheck,CameraAndMicrophoneDomainPermissionsDenied:CameraAndMicrophoneDomainPermissionsDenied,CameraDomainPermissionsDenied:CameraDomainPermissionsDenied,MicrophoneDomainPermissionsDenied:MicrophoneDomainPermissionsDenied,UnsupportedBrowser:UnsupportedBrowser$e,UnsupportedBrowserVersion:UnsupportedBrowserVersion$1,UnsupportedOperatingSystem:UnsupportedOperatingSystem$1,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d};
4013
+ 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",copyInviteLinkActionedAriaLabel:"Invite link copied"};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.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",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.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",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",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneDomainPermissionsCheck={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraDomainPermissionsCheck={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneDomainPermissionsCheck={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneDomainPermissionsDenied={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraAndMicrophoneDomainPermissionsDeniedSafari={primaryText:"Unable to access camera and microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDenied={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDenied={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDeniedSafari={primaryText:"Unable to access camera",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDeniedSafari={primaryText:"Unable to access microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$1={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$1={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$d={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$d={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};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$d,videoTile:videoTile$d,CameraAndMicrophoneDomainPermissionsRequest:CameraAndMicrophoneDomainPermissionsRequest,CameraDomainPermissionsRequest:CameraDomainPermissionsRequest,MicrophoneDomainPermissionsRequest:MicrophoneDomainPermissionsRequest,CameraAndMicrophoneDomainPermissionsCheck:CameraAndMicrophoneDomainPermissionsCheck,CameraDomainPermissionsCheck:CameraDomainPermissionsCheck,MicrophoneDomainPermissionsCheck:MicrophoneDomainPermissionsCheck,CameraAndMicrophoneDomainPermissionsDenied:CameraAndMicrophoneDomainPermissionsDenied,CameraAndMicrophoneDomainPermissionsDeniedSafari:CameraAndMicrophoneDomainPermissionsDeniedSafari,CameraDomainPermissionsDenied:CameraDomainPermissionsDenied,MicrophoneDomainPermissionsDenied:MicrophoneDomainPermissionsDenied,CameraDomainPermissionsDeniedSafari:CameraDomainPermissionsDeniedSafari,MicrophoneDomainPermissionsDeniedSafari:MicrophoneDomainPermissionsDeniedSafari,UnsupportedBrowser:UnsupportedBrowser$e,UnsupportedBrowserVersion:UnsupportedBrowserVersion$1,UnsupportedOperatingSystem:UnsupportedOperatingSystem$1,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d};
4007
4014
 
4008
4015
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};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.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};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",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$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.",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$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 phone number",deleteButtonAriaLabel:"Delete"};var holdButton$c={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$c={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var DomainPermissions$c={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Allow Access"};var UnsupportedBrowser$d={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLink:"More help"};var BrowserPermissionDenied$c={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$c={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};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$c,videoTile:videoTile$c,DomainPermissions:DomainPermissions$c,UnsupportedBrowser:UnsupportedBrowser$d,BrowserPermissionDenied:BrowserPermissionDenied$c,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$c};
4009
4016
 
@@ -4454,11 +4461,13 @@ const messageBarType = (errorType) => {
4454
4461
  case 'callNoSpeakerFound':
4455
4462
  case 'callNoMicrophoneFound':
4456
4463
  case 'callMicrophoneAccessDenied':
4464
+ case 'callMicrophoneAccessDeniedSafari':
4457
4465
  case 'callMicrophoneMutedBySystem':
4458
4466
  case 'callMicrophoneUnmutedBySystem':
4459
4467
  case 'callMacOsMicrophoneAccessDenied':
4460
4468
  case 'callLocalVideoFreeze':
4461
4469
  case 'callCameraAccessDenied':
4470
+ case 'callCameraAccessDeniedSafari':
4462
4471
  case 'callCameraAlreadyInUse':
4463
4472
  case 'callVideoStoppedBySystem':
4464
4473
  case 'callVideoRecoveredBySystem':
@@ -4486,11 +4495,13 @@ const customIconName = {
4486
4495
  callNoSpeakerFound: 'ErrorBarCallNoSpeakerFound',
4487
4496
  callNoMicrophoneFound: 'ErrorBarCallNoMicrophoneFound',
4488
4497
  callMicrophoneAccessDenied: 'ErrorBarCallMicrophoneAccessDenied',
4498
+ callMicrophoneAccessDeniedSafari: 'ErrorBarCallMicrophoneAccessDenied',
4489
4499
  callMicrophoneMutedBySystem: 'ErrorBarCallMicrophoneMutedBySystem',
4490
4500
  callMicrophoneUnmutedBySystem: 'ErrorBarCallMicrophoneUnmutedBySystem',
4491
4501
  callMacOsMicrophoneAccessDenied: 'ErrorBarCallMacOsMicrophoneAccessDenied',
4492
4502
  callLocalVideoFreeze: 'ErrorBarCallLocalVideoFreeze',
4493
4503
  callCameraAccessDenied: 'ErrorBarCallCameraAccessDenied',
4504
+ callCameraAccessDeniedSafari: 'ErrorBarCallCameraAccessDenied',
4494
4505
  callCameraAlreadyInUse: 'ErrorBarCallCameraAlreadyInUse',
4495
4506
  callVideoStoppedBySystem: 'ErrorBarCallVideoStoppedBySystem',
4496
4507
  callVideoRecoveredBySystem: 'ErrorBarCallVideoRecoveredBySystem',
@@ -10708,7 +10719,9 @@ const CameraAndMicrophoneDomainPermissions = (props) => {
10708
10719
  const locale = useLocale$1().strings;
10709
10720
  /* @conditional-compile-remove(call-readiness) */
10710
10721
  const strings = useShallowMerge(props.type === 'denied'
10711
- ? locale.CameraAndMicrophoneDomainPermissionsDenied
10722
+ ? props.browserHint === 'safari'
10723
+ ? locale.CameraAndMicrophoneDomainPermissionsDeniedSafari
10724
+ : locale.CameraAndMicrophoneDomainPermissionsDenied
10712
10725
  : props.type === 'request'
10713
10726
  ? locale.CameraAndMicrophoneDomainPermissionsRequest
10714
10727
  : locale.CameraAndMicrophoneDomainPermissionsCheck, props.strings);
@@ -10733,7 +10746,9 @@ const MicrophoneDomainPermissions = (props) => {
10733
10746
  const locale = useLocale$1().strings;
10734
10747
  /* @conditional-compile-remove(call-readiness) */
10735
10748
  const strings = useShallowMerge(props.type === 'denied'
10736
- ? locale.MicrophoneDomainPermissionsDenied
10749
+ ? props.browserHint === 'safari'
10750
+ ? locale.MicrophoneDomainPermissionsDeniedSafari
10751
+ : locale.MicrophoneDomainPermissionsDenied
10737
10752
  : props.type === 'request'
10738
10753
  ? locale.MicrophoneDomainPermissionsRequest
10739
10754
  : locale.MicrophoneDomainPermissionsCheck, props.strings);
@@ -10754,7 +10769,9 @@ const CameraDomainPermissions = (props) => {
10754
10769
  const locale = useLocale$1().strings;
10755
10770
  /* @conditional-compile-remove(call-readiness) */
10756
10771
  const strings = useShallowMerge(props.type === 'denied'
10757
- ? locale.CameraDomainPermissionsDenied
10772
+ ? props.browserHint === 'safari'
10773
+ ? locale.CameraDomainPermissionsDeniedSafari
10774
+ : locale.CameraDomainPermissionsDenied
10758
10775
  : props.type === 'request'
10759
10776
  ? locale.CameraDomainPermissionsRequest
10760
10777
  : locale.CameraDomainPermissionsCheck, props.strings);
@@ -10780,6 +10797,7 @@ const ParticipantsButton = (props) => {
10780
10797
  var _a, _b, _c, _d;
10781
10798
  const { callInvitationURL, styles, onMuteAll, onRenderIcon, onRenderParticipantList, participants, myUserId, excludeMe, onRenderParticipant, onRenderAvatar, onRemoveParticipant, onFetchParticipantMenuItems, showParticipantOverflowTooltip } = props;
10782
10799
  const disabled = props.disabled;
10800
+ const [copyInviteLinkAnnouncerStrings, setCopyInviteLinkAnnouncerStrings] = React.useState('');
10783
10801
  const onRenderPeopleIcon = () => (React__default['default'].createElement(_HighContrastAwareIcon, { disabled: disabled, iconName: "ControlButtonParticipants" }));
10784
10802
  const ids = useIdentifiers();
10785
10803
  const onMuteAllCallback = React.useCallback(() => {
@@ -10810,6 +10828,19 @@ const ParticipantsButton = (props) => {
10810
10828
  const localeStrings = useLocale$1().strings.participantsButton;
10811
10829
  const strings = React.useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);
10812
10830
  const participantCount = participants.length;
10831
+ /**
10832
+ * sets the announcement string for when the link is copied.
10833
+ */
10834
+ const toggleAnnouncerString = React.useCallback(() => {
10835
+ setCopyInviteLinkAnnouncerStrings(strings.copyInviteLinkActionedAriaLabel);
10836
+ /**
10837
+ * Clears the announcer string after the user clicks the
10838
+ * copyInviteLink button allowing it to be re-announced.
10839
+ */
10840
+ setTimeout(() => {
10841
+ setCopyInviteLinkAnnouncerStrings('');
10842
+ }, 3000);
10843
+ }, [strings.copyInviteLinkActionedAriaLabel]);
10813
10844
  const generateDefaultParticipantsSubMenuProps = React.useCallback(() => {
10814
10845
  var _a;
10815
10846
  const items = [];
@@ -10889,7 +10920,10 @@ const ParticipantsButton = (props) => {
10889
10920
  title: strings.copyInviteLinkButtonLabel,
10890
10921
  itemProps: { styles: (_b = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _b === void 0 ? void 0 : _b.menuItemStyles },
10891
10922
  iconProps: { iconName: 'Link' },
10892
- onClick: onCopyCallback
10923
+ onClick: () => {
10924
+ onCopyCallback();
10925
+ toggleAnnouncerString();
10926
+ }
10893
10927
  });
10894
10928
  }
10895
10929
  return menuProps;
@@ -10904,9 +10938,12 @@ const ParticipantsButton = (props) => {
10904
10938
  excludeMe,
10905
10939
  ids.participantButtonPeopleMenuItem,
10906
10940
  generateDefaultParticipantsSubMenuProps,
10907
- onCopyCallback
10941
+ onCopyCallback,
10942
+ toggleAnnouncerString
10908
10943
  ]);
10909
- return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { disabled: disabled, menuProps: (_c = props.menuProps) !== null && _c !== void 0 ? _c : defaultMenuProps, menuIconProps: { hidden: true }, onRenderIcon: onRenderIcon !== null && onRenderIcon !== void 0 ? onRenderIcon : onRenderPeopleIcon, strings: strings, labelKey: (_d = props.labelKey) !== null && _d !== void 0 ? _d : 'participantsButtonLabel' })));
10944
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
10945
+ React__default['default'].createElement(Announcer, { announcementString: copyInviteLinkAnnouncerStrings, ariaLive: 'polite' }),
10946
+ React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { disabled: disabled, menuProps: (_c = props.menuProps) !== null && _c !== void 0 ? _c : defaultMenuProps, menuIconProps: { hidden: true }, onRenderIcon: onRenderIcon !== null && onRenderIcon !== void 0 ? onRenderIcon : onRenderPeopleIcon, strings: strings, labelKey: (_d = props.labelKey) !== null && _d !== void 0 ? _d : 'participantsButtonLabel' }))));
10910
10947
  };
10911
10948
 
10912
10949
  // Copyright (c) Microsoft Corporation.
@@ -12324,8 +12361,8 @@ const useSelector$4 = (selector, selectorProps) => {
12324
12361
  *
12325
12362
  * @public
12326
12363
  */
12327
- const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagnostics, getDeviceManager$1], (latestErrors, diagnostics, deviceManager) => {
12328
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
12364
+ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagnostics, getDeviceManager$1, getEnvironmentInfo], (latestErrors, diagnostics, deviceManager, environmentInfo) => {
12365
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
12329
12366
  // The order in which the errors are returned is significant: The `ErrorBar` shows errors on the UI in that order.
12330
12367
  // There are several options for the ordering:
12331
12368
  // - Sorted by when the errors happened (latest first / oldest first).
@@ -12334,6 +12371,10 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
12334
12371
  // We chose to stable sort by error type: We intend to show only a small number of errors on the UI and we do not
12335
12372
  // have timestamps for errors.
12336
12373
  const activeErrorMessages = [];
12374
+ const isSafari = () => {
12375
+ /* @conditional-compile-remove(unsupported-browser) */
12376
+ return (environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.environment.browser) === 'safari';
12377
+ };
12337
12378
  // Errors reported via diagnostics are more reliable than from API method failures, so process those first.
12338
12379
  if (((_a = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.network.latest.networkReceiveQuality) === null || _a === void 0 ? void 0 : _a.value) === communicationCalling.DiagnosticQuality.Bad ||
12339
12380
  ((_b = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.network.latest.networkReceiveQuality) === null || _b === void 0 ? void 0 : _b.value) === communicationCalling.DiagnosticQuality.Poor) {
@@ -12345,10 +12386,13 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
12345
12386
  if (((_d = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.noMicrophoneDevicesEnumerated) === null || _d === void 0 ? void 0 : _d.value) === true) {
12346
12387
  activeErrorMessages.push({ type: 'callNoMicrophoneFound' });
12347
12388
  }
12348
- if (((_e = deviceManager.deviceAccess) === null || _e === void 0 ? void 0 : _e.audio) === false) {
12389
+ if (((_e = deviceManager.deviceAccess) === null || _e === void 0 ? void 0 : _e.audio) === false && isSafari()) {
12390
+ activeErrorMessages.push({ type: 'callMicrophoneAccessDeniedSafari' });
12391
+ }
12392
+ if (((_f = deviceManager.deviceAccess) === null || _f === void 0 ? void 0 : _f.audio) === false && !isSafari()) {
12349
12393
  activeErrorMessages.push({ type: 'callMicrophoneAccessDenied' });
12350
12394
  }
12351
- if (((_f = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphonePermissionDenied) === null || _f === void 0 ? void 0 : _f.value) === true) {
12395
+ if (((_g = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphonePermissionDenied) === null || _g === void 0 ? void 0 : _g.value) === true) {
12352
12396
  activeErrorMessages.push({ type: 'callMacOsMicrophoneAccessDenied' });
12353
12397
  }
12354
12398
  const microphoneMuteUnexpectedlyDiagnostic = (diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphoneMuteUnexpectedly) || (diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphoneNotFunctioning);
@@ -12373,18 +12417,21 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
12373
12417
  activeErrorMessages.push({ type: 'callVideoRecoveredBySystem' });
12374
12418
  }
12375
12419
  }
12376
- if (((_g = deviceManager.deviceAccess) === null || _g === void 0 ? void 0 : _g.video) === false) {
12420
+ if (((_h = deviceManager.deviceAccess) === null || _h === void 0 ? void 0 : _h.video) === false && isSafari()) {
12421
+ activeErrorMessages.push({ type: 'callCameraAccessDeniedSafari' });
12422
+ }
12423
+ else if (((_j = deviceManager.deviceAccess) === null || _j === void 0 ? void 0 : _j.video) === false) {
12377
12424
  activeErrorMessages.push({ type: 'callCameraAccessDenied' });
12378
12425
  }
12379
12426
  else {
12380
- if (((_h = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraFreeze) === null || _h === void 0 ? void 0 : _h.value) === true) {
12427
+ if (((_k = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraFreeze) === null || _k === void 0 ? void 0 : _k.value) === true) {
12381
12428
  activeErrorMessages.push({ type: 'callCameraAlreadyInUse' });
12382
12429
  }
12383
12430
  }
12384
- if (((_j = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraPermissionDenied) === null || _j === void 0 ? void 0 : _j.value) === true) {
12431
+ if (((_l = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraPermissionDenied) === null || _l === void 0 ? void 0 : _l.value) === true) {
12385
12432
  activeErrorMessages.push({ type: 'callMacOsCameraAccessDenied' });
12386
12433
  }
12387
- if (((_k = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.screenshareRecordingDisabled) === null || _k === void 0 ? void 0 : _k.value) === true) {
12434
+ if (((_m = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.screenshareRecordingDisabled) === null || _m === void 0 ? void 0 : _m.value) === true) {
12388
12435
  activeErrorMessages.push({ type: 'callMacOsScreenShareAccessDenied' });
12389
12436
  }
12390
12437
  // Prefer to show errors with privacy implications.
@@ -12393,7 +12440,7 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
12393
12440
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.stopScreenSharing', 'stopScreenShareGeneric');
12394
12441
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.startVideo', 'startVideoGeneric');
12395
12442
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.unmute', 'unmuteGeneric');
12396
- if (((_l = latestErrors['CallAgent.join']) === null || _l === void 0 ? void 0 : _l.message) === 'CallAgent.join: Invalid meeting link') {
12443
+ if (((_o = latestErrors['CallAgent.join']) === null || _o === void 0 ? void 0 : _o.message) === 'CallAgent.join: Invalid meeting link') {
12397
12444
  appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'CallAgent.join', 'failedToJoinCallInvalidMeetingLink');
12398
12445
  }
12399
12446
  else {
@@ -15020,6 +15067,14 @@ const isValidIdentifier = (identifier) => {
15020
15067
  communicationCommon.isMicrosoftTeamsUserIdentifier(identifier) ||
15021
15068
  communicationCommon.isUnknownIdentifier(identifier));
15022
15069
  };
15070
+ /**
15071
+ * Check if we are using safari browser
15072
+ * @private
15073
+ */
15074
+ const _isSafari = (environmentInfo) => {
15075
+ /* @conditional-compile-remove(unsupported-browser) */
15076
+ return (environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.environment.browser) === 'safari';
15077
+ };
15023
15078
 
15024
15079
  // Copyright (c) Microsoft Corporation.
15025
15080
  // Licensed under the MIT license.
@@ -17706,7 +17761,21 @@ function PeoplePaneAddPersonIconTrampoline() {
17706
17761
  const AddPeopleButton = (props) => {
17707
17762
  const { inviteLink, mobileView, strings, participantList } = props;
17708
17763
  const theme = react.useTheme();
17764
+ const [copyInviteLinkAnnouncerStrings, setCopyInviteLinkAnnouncerStrings] = React.useState('');
17709
17765
  React.useMemo(() => react.concatStyleSets(copyLinkButtonStyles, themedCopyLinkButtonStyles$1(mobileView, theme)), [mobileView, theme]);
17766
+ /**
17767
+ * sets the announcement string for when the link is copied.
17768
+ */
17769
+ React.useCallback(() => {
17770
+ setCopyInviteLinkAnnouncerStrings(strings.copyInviteLinkActionedAriaLabel);
17771
+ /**
17772
+ * Clears the announcer string after the user clicks the
17773
+ * copyInviteLink button allowing it to be re-announced.
17774
+ */
17775
+ setTimeout(() => {
17776
+ setCopyInviteLinkAnnouncerStrings('');
17777
+ }, 3000);
17778
+ }, [strings.copyInviteLinkActionedAriaLabel]);
17710
17779
  /* @conditional-compile-remove(PSTN-calls) */
17711
17780
  if (mobileView) {
17712
17781
  return (React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink, onAddParticipant: props.onAddParticipant, alternateCallerId: props.alternateCallerId }));
@@ -18109,7 +18178,7 @@ const CallArrangement = (props) => {
18109
18178
  /* @conditional-compile-remove(rooms) */
18110
18179
  // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK
18111
18180
  if (!rolePermissions.cameraButton && props.errorBarProps) {
18112
- errorBarProps = Object.assign(Object.assign({}, props.errorBarProps), { activeErrorMessages: props.errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied') });
18181
+ errorBarProps = Object.assign(Object.assign({}, props.errorBarProps), { activeErrorMessages: props.errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari') });
18113
18182
  }
18114
18183
  return (React__default['default'].createElement("div", { ref: containerRef, className: react.mergeStyles(containerDivStyles) },
18115
18184
  React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
@@ -19087,18 +19156,26 @@ const DRAWER_HIGH_Z_BAND = 99; // setting z index to 99 so that it sit above al
19087
19156
  * @private
19088
19157
  */
19089
19158
  const CallReadinessModal = (props) => {
19090
- const { mobileView, audioState, videoState, permissionsState, isPermissionsModalDismissed, setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick } = props;
19159
+ const { mobileView, permissionsState,
19160
+ /* @conditional-compile-remove(unsupported-browser) */ environmentInfo, isPermissionsModalDismissed, setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick } = props;
19091
19161
  const onLightDismissTriggered = () => {
19092
19162
  // do nothing here
19093
19163
  // only way to dismiss this drawer is clicking on allow access which will leads to device permission prompt
19094
19164
  };
19165
+ // On Safari browser with 2 options: don't allow/never for this website again, when don't allow is clicked, permissionAPI returns prompt and PermissionGranted from calling sdk returns false (the right value)
19166
+ const videoState = permissionsState.camera;
19167
+ const audioState = permissionsState.microphone;
19095
19168
  const showModal = videoState === 'denied' || videoState === 'prompt' || audioState === 'denied' || audioState === 'prompt';
19169
+ /* @conditional-compile-remove(unsupported-browser) */
19170
+ const isSafari = _isSafari(environmentInfo);
19096
19171
  const modal = !showModal
19097
19172
  ? undefined
19098
19173
  : () => {
19099
19174
  // if both video and audio permission are not set
19100
19175
  if (videoState === 'prompt' && audioState === 'prompt') {
19101
- return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19176
+ return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
19177
+ /* @conditional-compile-remove(unsupported-browser) */
19178
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19102
19179
  ? () => {
19103
19180
  onPermissionsTroubleshootingClick(permissionsState);
19104
19181
  }
@@ -19106,7 +19183,9 @@ const CallReadinessModal = (props) => {
19106
19183
  }
19107
19184
  // if audio permission is set up but video is not
19108
19185
  else if (videoState === 'prompt') {
19109
- return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19186
+ return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
19187
+ /* @conditional-compile-remove(unsupported-browser) */
19188
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19110
19189
  ? () => {
19111
19190
  onPermissionsTroubleshootingClick(permissionsState);
19112
19191
  }
@@ -19116,7 +19195,9 @@ const CallReadinessModal = (props) => {
19116
19195
  }
19117
19196
  // if video permission is set up but audio is not
19118
19197
  else if (audioState === 'prompt') {
19119
- return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19198
+ return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
19199
+ /* @conditional-compile-remove(unsupported-browser) */
19200
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19120
19201
  ? () => {
19121
19202
  onPermissionsTroubleshootingClick(permissionsState);
19122
19203
  }
@@ -19124,7 +19205,9 @@ const CallReadinessModal = (props) => {
19124
19205
  }
19125
19206
  // if both video and audio are denied
19126
19207
  else if (videoState === 'denied' && audioState === 'denied') {
19127
- return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19208
+ return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
19209
+ /* @conditional-compile-remove(unsupported-browser) */
19210
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19128
19211
  ? () => {
19129
19212
  onPermissionsTroubleshootingClick(permissionsState);
19130
19213
  }
@@ -19132,7 +19215,9 @@ const CallReadinessModal = (props) => {
19132
19215
  }
19133
19216
  // if only video is denied
19134
19217
  else if (videoState === 'denied') {
19135
- return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19218
+ return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
19219
+ /* @conditional-compile-remove(unsupported-browser) */
19220
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19136
19221
  ? () => {
19137
19222
  onPermissionsTroubleshootingClick(permissionsState);
19138
19223
  }
@@ -19142,7 +19227,9 @@ const CallReadinessModal = (props) => {
19142
19227
  }
19143
19228
  // if only audio is denied
19144
19229
  else {
19145
- return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19230
+ return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
19231
+ /* @conditional-compile-remove(unsupported-browser) */
19232
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19146
19233
  ? () => {
19147
19234
  onPermissionsTroubleshootingClick(permissionsState);
19148
19235
  }
@@ -19168,26 +19255,35 @@ const CallReadinessModal = (props) => {
19168
19255
  * @private
19169
19256
  */
19170
19257
  const CallReadinessModalFallBack = (props) => {
19171
- const { mobileView, cameraPermissionGranted, microphonePermissionGranted, checkPermissionModalShowing, permissionsState, isPermissionsModalDismissed, setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick } = props;
19258
+ const { mobileView, checkPermissionModalShowing, permissionsState,
19259
+ /* @conditional-compile-remove(unsupported-browser) */ environmentInfo, isPermissionsModalDismissed, setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick } = props;
19172
19260
  const onLightDismissTriggered = () => {
19173
19261
  // do nothing here
19174
19262
  // only way to dismiss this drawer is clicking on allow access which will leads to device permission prompt
19175
19263
  };
19176
- // When permissions are not set, value is undefined, do nothing here
19177
- // When permissions are set to denied, value is false, show helper screen
19178
- const showModal = cameraPermissionGranted === false || microphonePermissionGranted === false;
19264
+ const videoState = permissionsState.camera;
19265
+ const audioState = permissionsState.microphone;
19266
+ // When permissions are not set, do nothing here
19267
+ // When permissions are set to denied, show helper screen
19268
+ const showModal = videoState === 'denied' || audioState === 'denied';
19269
+ /* @conditional-compile-remove(unsupported-browser) */
19270
+ const isSafari = _isSafari(environmentInfo);
19179
19271
  const modal = !showModal
19180
19272
  ? undefined
19181
19273
  : () => {
19182
- if (cameraPermissionGranted === false && microphonePermissionGranted === false) {
19183
- return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19274
+ if (videoState === 'denied' && audioState === 'denied') {
19275
+ return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
19276
+ /* @conditional-compile-remove(unsupported-browser) */
19277
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19184
19278
  ? () => {
19185
19279
  onPermissionsTroubleshootingClick(permissionsState);
19186
19280
  }
19187
19281
  : undefined, type: "denied" }));
19188
19282
  }
19189
- else if (cameraPermissionGranted === false && microphonePermissionGranted) {
19190
- return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19283
+ else if (videoState === 'denied' && audioState === 'granted') {
19284
+ return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
19285
+ /* @conditional-compile-remove(unsupported-browser) */
19286
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19191
19287
  ? () => {
19192
19288
  onPermissionsTroubleshootingClick(permissionsState);
19193
19289
  }
@@ -19196,7 +19292,9 @@ const CallReadinessModalFallBack = (props) => {
19196
19292
  }, type: "denied" }));
19197
19293
  }
19198
19294
  else {
19199
- return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19295
+ return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
19296
+ /* @conditional-compile-remove(unsupported-browser) */
19297
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19200
19298
  ? () => {
19201
19299
  onPermissionsTroubleshootingClick(permissionsState);
19202
19300
  }
@@ -19205,10 +19303,10 @@ const CallReadinessModalFallBack = (props) => {
19205
19303
  };
19206
19304
  if (mobileView) {
19207
19305
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
19208
- (checkPermissionModalShowing ||
19209
- microphonePermissionGranted === undefined ||
19210
- cameraPermissionGranted === undefined) && (React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) },
19211
- React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19306
+ (checkPermissionModalShowing || audioState === 'prompt' || videoState === 'prompt') && (React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) },
19307
+ React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
19308
+ /* @conditional-compile-remove(unsupported-browser) */
19309
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19212
19310
  ? () => {
19213
19311
  onPermissionsTroubleshootingClick(permissionsState);
19214
19312
  }
@@ -19217,12 +19315,12 @@ const CallReadinessModalFallBack = (props) => {
19217
19315
  }
19218
19316
  else {
19219
19317
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
19220
- (checkPermissionModalShowing ||
19221
- microphonePermissionGranted === undefined ||
19222
- cameraPermissionGranted === undefined) && (React__default['default'].createElement(react.Modal, { isOpen: isPermissionsModalDismissed, isBlocking: false, onDismiss: () => {
19318
+ (checkPermissionModalShowing || audioState === 'prompt' || videoState === 'prompt') && (React__default['default'].createElement(react.Modal, { isOpen: isPermissionsModalDismissed, isBlocking: false, onDismiss: () => {
19223
19319
  setIsPermissionsModalDismissed(false);
19224
19320
  }, overlay: { styles: { root: { background: 'rgba(0,0,0,0.9)' } } } },
19225
- React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
19321
+ React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
19322
+ /* @conditional-compile-remove(unsupported-browser) */
19323
+ browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
19226
19324
  ? () => {
19227
19325
  onPermissionsTroubleshootingClick(permissionsState);
19228
19326
  }
@@ -19257,13 +19355,15 @@ const ConfigurationPage = (props) => {
19257
19355
  let errorBarProps = usePropsFor$1(ErrorBar);
19258
19356
  const adapter = useAdapter();
19259
19357
  const deviceState = adapter.getState().devices;
19358
+ /* @conditional-compile-remove(unsupported-browser) */
19359
+ const environmentInfo = adapter.getState().environmentInfo;
19260
19360
  let disableStartCallButton = !microphonePermissionGranted || ((_a = deviceState.microphones) === null || _a === void 0 ? void 0 : _a.length) === 0;
19261
19361
  /* @conditional-compile-remove(rooms) */
19262
19362
  const rolePermissions = _usePermissions();
19263
19363
  /* @conditional-compile-remove(rooms) */
19264
19364
  // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK
19265
19365
  if (!rolePermissions.cameraButton) {
19266
- errorBarProps = Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied') });
19366
+ errorBarProps = Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari') });
19267
19367
  }
19268
19368
  /* @conditional-compile-remove(rooms) */
19269
19369
  if (!rolePermissions.microphoneButton) {
@@ -19291,8 +19391,24 @@ const ConfigurationPage = (props) => {
19291
19391
  /* @conditional-compile-remove(call-readiness) */
19292
19392
  const permissionsState = {
19293
19393
  // fall back to using cameraPermissionGranted and microphonePermissionGranted if permission API is not supported
19294
- camera: videoState && videoState !== 'unsupported' ? videoState : cameraPermissionGranted ? 'granted' : 'denied',
19295
- microphone: audioState && audioState !== 'unsupported' ? audioState : microphonePermissionGranted ? 'granted' : 'denied'
19394
+ camera: videoState && videoState !== 'unsupported'
19395
+ ? cameraPermissionGranted !== false
19396
+ ? videoState
19397
+ : 'denied'
19398
+ : cameraPermissionGranted !== false
19399
+ ? cameraPermissionGranted
19400
+ ? 'granted'
19401
+ : 'prompt'
19402
+ : 'denied',
19403
+ microphone: audioState && audioState !== 'unsupported'
19404
+ ? microphonePermissionGranted !== false
19405
+ ? audioState
19406
+ : 'denied'
19407
+ : microphonePermissionGranted !== false
19408
+ ? microphonePermissionGranted
19409
+ ? 'granted'
19410
+ : 'prompt'
19411
+ : 'denied'
19296
19412
  };
19297
19413
  /* @conditional-compile-remove(call-readiness) */
19298
19414
  const networkErrors = errorBarProps.activeErrorMessages.filter((message) => message.type === 'callNetworkQualityLow');
@@ -19331,13 +19447,17 @@ const ConfigurationPage = (props) => {
19331
19447
  videoState &&
19332
19448
  videoState !== 'unsupported' &&
19333
19449
  audioState &&
19334
- audioState !== 'unsupported' && (React__default['default'].createElement(CallReadinessModal, { mobileView: mobileView, audioState: audioState, videoState: videoState, permissionsState: permissionsState, isPermissionsModalDismissed: isPermissionsModalDismissed, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
19450
+ audioState !== 'unsupported' && (React__default['default'].createElement(CallReadinessModal, { mobileView: mobileView,
19451
+ /* @conditional-compile-remove(unsupported-browser) */
19452
+ environmentInfo: environmentInfo, permissionsState: permissionsState, isPermissionsModalDismissed: isPermissionsModalDismissed, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
19335
19453
  /* @conditional-compile-remove(call-readiness) */
19336
19454
  // show the following screen if permission API is not availible (unsupported) and videoState, audioState is assigned values
19337
19455
  callReadinessOptedIn &&
19338
19456
  videoState &&
19339
19457
  audioState &&
19340
- (videoState === 'unsupported' || audioState === 'unsupported') && (React__default['default'].createElement(CallReadinessModalFallBack, { mobileView: mobileView, cameraPermissionGranted: cameraPermissionGranted, microphonePermissionGranted: microphonePermissionGranted, checkPermissionModalShowing: forceShowingCheckPermissions, permissionsState: permissionsState, isPermissionsModalDismissed: isPermissionsModalDismissed, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
19458
+ (videoState === 'unsupported' || audioState === 'unsupported') && (React__default['default'].createElement(CallReadinessModalFallBack, { mobileView: mobileView, checkPermissionModalShowing: forceShowingCheckPermissions, permissionsState: permissionsState, isPermissionsModalDismissed: isPermissionsModalDismissed,
19459
+ /* @conditional-compile-remove(unsupported-browser) */
19460
+ environmentInfo: environmentInfo, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
19341
19461
  React__default['default'].createElement(react.Stack, { grow: true, horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalAlign: "center", tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
19342
19462
  mobileWithPreview && (React__default['default'].createElement(react.Stack.Item, null,
19343
19463
  title,