@azure/communication-react 1.4.3-alpha-202212150014.0 → 1.4.3-alpha-202212170012.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.
- package/dist/communication-react.d.ts +27 -1
- package/dist/dist-cjs/communication-react/index.js +560 -336
- package/dist/dist-cjs/communication-react/index.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +1 -1
- package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +2 -1
- package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
- package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js +21 -10
- package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js.map +1 -1
- package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js +6 -2
- package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/DevicePermissions/DomainPermissions.d.ts +4 -0
- package/dist/dist-esm/react-components/src/components/DevicePermissions/DomainPermissions.js +9 -3
- package/dist/dist-esm/react-components/src/components/DevicePermissions/DomainPermissions.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/ErrorBar.d.ts +8 -0
- package/dist/dist-esm/react-components/src/components/ErrorBar.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/ParticipantsButton.d.ts +4 -0
- package/dist/dist-esm/react-components/src/components/ParticipantsButton.js +25 -4
- package/dist/dist-esm/react-components/src/components/ParticipantsButton.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.d.ts +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js +2 -2
- package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.d.ts +1 -1
- package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js +2 -2
- package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.d.ts +2 -27
- package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.d.ts +2 -26
- package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.js +2 -2
- package/dist/dist-esm/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.d.ts +34 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.js +4 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/Layout.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/PinnedParticipantsLayout.d.ts +25 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/PinnedParticipantsLayout.js +62 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/PinnedParticipantsLayout.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.d.ts +3 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.js +3 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/VideoGalleryResponsiveHorizontalGallery.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.d.ts +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js +2 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.d.ts +0 -14
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.js +1 -8
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/VideoGalleryResponsiveHorizontalGallery.styles.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.d.ts +36 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery/{videoGalleryUtils.js → utils/videoGalleryLayoutUtils.js} +46 -2
- package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +4 -0
- package/dist/dist-esm/react-components/src/components/VideoGallery.js +47 -3
- package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/utils.js +4 -0
- package/dist/dist-esm/react-components/src/components/utils.js.map +1 -1
- package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +6 -0
- package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
- package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +22 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +12 -12
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.d.ts +3 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js +55 -24
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +27 -5
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.d.ts +0 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.js +0 -8
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +5 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +9 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js +1 -11
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.d.ts +0 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.js +0 -15
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js +26 -3
- package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/styles/Pane.styles.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/styles/Pane.styles.js.map +1 -1
- package/package.json +8 -8
- package/dist/dist-esm/react-components/src/components/VideoGallery/videoGalleryUtils.d.ts +0 -17
- package/dist/dist-esm/react-components/src/components/VideoGallery/videoGalleryUtils.js.map +0 -1
@@ -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-
|
205
|
+
var telemetryVersion = '1.4.3-alpha-202212170012.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.
|
@@ -2491,7 +2498,9 @@ function createView(context, internalContext, callId, participantId, stream, opt
|
|
2491
2498
|
}
|
2492
2499
|
else if (!('id' in stream) && !callId) {
|
2493
2500
|
// Render LocalVideoStream that is not part of a Call
|
2494
|
-
|
2501
|
+
// Because it is not part of the call we don't tee errors to state naturally (e.g. via a Call Client function such as startVideo).
|
2502
|
+
// We do not have a startLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
|
2503
|
+
return context.withAsyncErrorTeedToState(() => __awaiter$v(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
|
2495
2504
|
}
|
2496
2505
|
else {
|
2497
2506
|
_logEvent(callingStatefulLogger, {
|
@@ -2516,7 +2525,9 @@ function disposeView(context, internalContext, callId, participantId, stream) {
|
|
2516
2525
|
}
|
2517
2526
|
else if (!('id' in stream) && !callId) {
|
2518
2527
|
// Stop rendering LocalVideoStream that is not part of a Call
|
2519
|
-
|
2528
|
+
// Because it is not part of the call we don't tee errors to state naturally (e.g. via a Call Client function such as startVideo).
|
2529
|
+
// We do not have a stopLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
|
2530
|
+
context.withErrorTeedToState(() => disposeViewUnparentedVideo(context, internalContext, stream), 'Call.stopVideo')();
|
2520
2531
|
}
|
2521
2532
|
else {
|
2522
2533
|
_logEvent(callingStatefulLogger, {
|
@@ -4003,7 +4014,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
|
|
4003
4014
|
wordBreak: 'break-word'
|
4004
4015
|
});
|
4005
4016
|
|
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};
|
4017
|
+
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
4018
|
|
4008
4019
|
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
4020
|
|
@@ -4454,11 +4465,13 @@ const messageBarType = (errorType) => {
|
|
4454
4465
|
case 'callNoSpeakerFound':
|
4455
4466
|
case 'callNoMicrophoneFound':
|
4456
4467
|
case 'callMicrophoneAccessDenied':
|
4468
|
+
case 'callMicrophoneAccessDeniedSafari':
|
4457
4469
|
case 'callMicrophoneMutedBySystem':
|
4458
4470
|
case 'callMicrophoneUnmutedBySystem':
|
4459
4471
|
case 'callMacOsMicrophoneAccessDenied':
|
4460
4472
|
case 'callLocalVideoFreeze':
|
4461
4473
|
case 'callCameraAccessDenied':
|
4474
|
+
case 'callCameraAccessDeniedSafari':
|
4462
4475
|
case 'callCameraAlreadyInUse':
|
4463
4476
|
case 'callVideoStoppedBySystem':
|
4464
4477
|
case 'callVideoRecoveredBySystem':
|
@@ -4486,11 +4499,13 @@ const customIconName = {
|
|
4486
4499
|
callNoSpeakerFound: 'ErrorBarCallNoSpeakerFound',
|
4487
4500
|
callNoMicrophoneFound: 'ErrorBarCallNoMicrophoneFound',
|
4488
4501
|
callMicrophoneAccessDenied: 'ErrorBarCallMicrophoneAccessDenied',
|
4502
|
+
callMicrophoneAccessDeniedSafari: 'ErrorBarCallMicrophoneAccessDenied',
|
4489
4503
|
callMicrophoneMutedBySystem: 'ErrorBarCallMicrophoneMutedBySystem',
|
4490
4504
|
callMicrophoneUnmutedBySystem: 'ErrorBarCallMicrophoneUnmutedBySystem',
|
4491
4505
|
callMacOsMicrophoneAccessDenied: 'ErrorBarCallMacOsMicrophoneAccessDenied',
|
4492
4506
|
callLocalVideoFreeze: 'ErrorBarCallLocalVideoFreeze',
|
4493
4507
|
callCameraAccessDenied: 'ErrorBarCallCameraAccessDenied',
|
4508
|
+
callCameraAccessDeniedSafari: 'ErrorBarCallCameraAccessDenied',
|
4494
4509
|
callCameraAlreadyInUse: 'ErrorBarCallCameraAlreadyInUse',
|
4495
4510
|
callVideoStoppedBySystem: 'ErrorBarCallVideoStoppedBySystem',
|
4496
4511
|
callVideoRecoveredBySystem: 'ErrorBarCallVideoRecoveredBySystem',
|
@@ -8642,6 +8657,164 @@ const rootLayoutStyle$1 = {
|
|
8642
8657
|
root: { position: 'relative', height: '100%', width: '100%', padding: '0.5rem' }
|
8643
8658
|
};
|
8644
8659
|
|
8660
|
+
/**
|
8661
|
+
* Calculates the participants that should be rendered based on the list of dominant
|
8662
|
+
* speakers and currently rendered participants in a call.
|
8663
|
+
* @param args - SmartDominantSpeakerParticipantsArgs
|
8664
|
+
* @returns VideoGalleryRemoteParticipant[] {@link @azure/communication-react#VideoGalleryRemoteParticipant}
|
8665
|
+
*/
|
8666
|
+
const smartDominantSpeakerParticipants = (args) => {
|
8667
|
+
const { participants, dominantSpeakers = [], lastVisibleParticipants = [], maxDominantSpeakers } = args;
|
8668
|
+
// Don't apply any logic if total number of video streams is less than max dominant speakers.
|
8669
|
+
if (participants.length <= maxDominantSpeakers) {
|
8670
|
+
return participants;
|
8671
|
+
}
|
8672
|
+
const participantsMap = participantsById(participants);
|
8673
|
+
// Only use the Max allowed dominant speakers that exist in participants
|
8674
|
+
const dominantSpeakerIds = Array.from(new Set(dominantSpeakers).values())
|
8675
|
+
.filter((id) => !!participantsMap[id])
|
8676
|
+
.slice(0, maxDominantSpeakers);
|
8677
|
+
const lastVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId);
|
8678
|
+
const newVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId).slice(0, maxDominantSpeakers);
|
8679
|
+
const newDominantSpeakerIds = dominantSpeakerIds.filter((id) => !newVisibleParticipantIds.includes(id));
|
8680
|
+
// Remove participants that are no longer dominant and replace them with new dominant speakers.
|
8681
|
+
for (let index = 0; index < maxDominantSpeakers; index++) {
|
8682
|
+
const newVisibleParticipantId = newVisibleParticipantIds[index];
|
8683
|
+
if (newVisibleParticipantId === undefined || !dominantSpeakerIds.includes(newVisibleParticipantId)) {
|
8684
|
+
const replacement = newDominantSpeakerIds.shift();
|
8685
|
+
if (!replacement) {
|
8686
|
+
break;
|
8687
|
+
}
|
8688
|
+
newVisibleParticipantIds[index] = replacement;
|
8689
|
+
}
|
8690
|
+
}
|
8691
|
+
const removedVisibleParticipantIds = lastVisibleParticipantIds.filter((p) => !newVisibleParticipantIds.includes(p));
|
8692
|
+
removedVisibleParticipantIds.forEach((p) => newVisibleParticipantIds.push(p));
|
8693
|
+
const newVisibleParticipantIdSet = new Set(newVisibleParticipantIds);
|
8694
|
+
const leftoverParticipants = participants.filter((p) => !newVisibleParticipantIdSet.has(p.userId));
|
8695
|
+
leftoverParticipants.forEach((p) => {
|
8696
|
+
newVisibleParticipantIds.push(p.userId);
|
8697
|
+
});
|
8698
|
+
// newVisibleParticipantIds can contain identifiers for participants that are no longer in the call. So we ignore those IDs.
|
8699
|
+
const newVisibleParticipants = newVisibleParticipantIds
|
8700
|
+
.map((participantId) => participantsMap[participantId])
|
8701
|
+
.filter((p) => !!p);
|
8702
|
+
return newVisibleParticipants;
|
8703
|
+
};
|
8704
|
+
const participantsById = (participants) => {
|
8705
|
+
const response = {};
|
8706
|
+
participants.forEach((p) => (response[p.userId] = p));
|
8707
|
+
return response;
|
8708
|
+
};
|
8709
|
+
|
8710
|
+
// Copyright (c) Microsoft Corporation.
|
8711
|
+
const DEFAULT_MAX_REMOTE_VIDEOSTREAMS = 4;
|
8712
|
+
const DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS = 6;
|
8713
|
+
/**
|
8714
|
+
* @private
|
8715
|
+
*/
|
8716
|
+
const useFloatingLocalVideoLayout = (props) => {
|
8717
|
+
var _a, _b;
|
8718
|
+
const visibleVideoParticipants = React.useRef([]);
|
8719
|
+
const visibleAudioParticipants = React.useRef([]);
|
8720
|
+
const { remoteParticipants, dominantSpeakers, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEOSTREAMS, maxAudioDominantSpeakers = DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS, isScreenShareActive = false } = props;
|
8721
|
+
visibleVideoParticipants.current = smartDominantSpeakerParticipants({
|
8722
|
+
participants: (_a = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; })) !== null && _a !== void 0 ? _a : [],
|
8723
|
+
dominantSpeakers,
|
8724
|
+
lastVisibleParticipants: visibleVideoParticipants.current,
|
8725
|
+
maxDominantSpeakers: maxRemoteVideoStreams
|
8726
|
+
}).slice(0, maxRemoteVideoStreams);
|
8727
|
+
const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map((p) => p.userId));
|
8728
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8729
|
+
const callingParticipants = remoteParticipants.filter((p) => p.state === ('Connecting' ));
|
8730
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8731
|
+
const callingParticipantsSet = new Set(callingParticipants.map((p) => p.userId));
|
8732
|
+
visibleAudioParticipants.current = smartDominantSpeakerParticipants({
|
8733
|
+
participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => !visibleVideoParticipantsSet.has(p.userId) &&
|
8734
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !callingParticipantsSet.has(p.userId))) !== null && _b !== void 0 ? _b : [],
|
8735
|
+
dominantSpeakers,
|
8736
|
+
lastVisibleParticipants: visibleAudioParticipants.current,
|
8737
|
+
maxDominantSpeakers: maxAudioDominantSpeakers
|
8738
|
+
});
|
8739
|
+
const getGridParticipants = React.useCallback(() => {
|
8740
|
+
if (isScreenShareActive) {
|
8741
|
+
return [];
|
8742
|
+
}
|
8743
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8744
|
+
return visibleVideoParticipants.current.length > 0
|
8745
|
+
? visibleVideoParticipants.current
|
8746
|
+
: visibleAudioParticipants.current.concat(callingParticipants);
|
8747
|
+
}, [
|
8748
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8749
|
+
isScreenShareActive
|
8750
|
+
]);
|
8751
|
+
const gridParticipants = getGridParticipants();
|
8752
|
+
const getHorizontalGalleryRemoteParticipants = React.useCallback(() => {
|
8753
|
+
if (isScreenShareActive) {
|
8754
|
+
// If screen sharing is active, assign video and audio participants as horizontal gallery participants
|
8755
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8756
|
+
return visibleVideoParticipants.current.concat(visibleAudioParticipants.current.concat(callingParticipants));
|
8757
|
+
}
|
8758
|
+
else {
|
8759
|
+
// If screen sharing is not active, then assign all video tiles as grid tiles.
|
8760
|
+
// If there are no video tiles, then assign audio tiles as grid tiles.
|
8761
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8762
|
+
return visibleVideoParticipants.current.length > 0
|
8763
|
+
? visibleAudioParticipants.current.concat(callingParticipants)
|
8764
|
+
: [];
|
8765
|
+
}
|
8766
|
+
}, [
|
8767
|
+
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8768
|
+
isScreenShareActive
|
8769
|
+
]);
|
8770
|
+
const horizontalGalleryParticipants = getHorizontalGalleryRemoteParticipants();
|
8771
|
+
return { gridParticipants, horizontalGalleryParticipants };
|
8772
|
+
};
|
8773
|
+
/**
|
8774
|
+
* @private
|
8775
|
+
*/
|
8776
|
+
const usePinnedParticipantLayout = (props) => {
|
8777
|
+
// map remote participants by userId
|
8778
|
+
const remoteParticipantMap = props.remoteParticipants.reduce((map, remoteParticipant) => {
|
8779
|
+
map[remoteParticipant.userId] = remoteParticipant;
|
8780
|
+
return map;
|
8781
|
+
}, {});
|
8782
|
+
// count pinned participants with video
|
8783
|
+
let pinnedParticipantsWithVideoOnCount = 0;
|
8784
|
+
// get pinned participants in the same order of pinned participant user ids using remoteParticipantMap
|
8785
|
+
const pinnedParticipants = [];
|
8786
|
+
props.pinnedParticipantUserIds.forEach((id) => {
|
8787
|
+
var _a;
|
8788
|
+
const pinnedParticipant = remoteParticipantMap[id];
|
8789
|
+
if (pinnedParticipant) {
|
8790
|
+
pinnedParticipants.push(pinnedParticipant);
|
8791
|
+
if ((_a = pinnedParticipant.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) {
|
8792
|
+
pinnedParticipantsWithVideoOnCount++;
|
8793
|
+
}
|
8794
|
+
}
|
8795
|
+
});
|
8796
|
+
// get unpinned participants by filtering all remote participants using a set of pinned participant user ids
|
8797
|
+
const pinnedParticipantUserIdSet = new Set(props.pinnedParticipantUserIds);
|
8798
|
+
const unpinnedParticipants = props.remoteParticipants.filter((p) => !pinnedParticipantUserIdSet.has(p.userId));
|
8799
|
+
const floatingLocalVideoLayoutProps = Object.assign(Object.assign({}, props), {
|
8800
|
+
// if there are pinned participants then we should only consider unpinned participants
|
8801
|
+
remoteParticipants: unpinnedParticipants,
|
8802
|
+
// if there is a maximum of remote video streams we need to subtract pinned participants with video
|
8803
|
+
maxRemoteVideoStreams: props.maxRemoteVideoStreams
|
8804
|
+
? props.maxRemoteVideoStreams - pinnedParticipantsWithVideoOnCount
|
8805
|
+
: undefined });
|
8806
|
+
const floatingLocalVideoLayout = useFloatingLocalVideoLayout(floatingLocalVideoLayoutProps);
|
8807
|
+
if (props.pinnedParticipantUserIds.length === 0) {
|
8808
|
+
return floatingLocalVideoLayout;
|
8809
|
+
}
|
8810
|
+
return {
|
8811
|
+
gridParticipants: props.isScreenShareActive ? [] : pinnedParticipants,
|
8812
|
+
horizontalGalleryParticipants: props.isScreenShareActive
|
8813
|
+
? pinnedParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants)
|
8814
|
+
: floatingLocalVideoLayout.gridParticipants.concat(floatingLocalVideoLayout.horizontalGalleryParticipants)
|
8815
|
+
};
|
8816
|
+
};
|
8817
|
+
|
8645
8818
|
// Copyright (c) Microsoft Corporation.
|
8646
8819
|
// Licensed under the MIT license.
|
8647
8820
|
/**
|
@@ -8791,14 +8964,84 @@ const calculateChildrenPerPage = (args) => {
|
|
8791
8964
|
};
|
8792
8965
|
|
8793
8966
|
// Copyright (c) Microsoft Corporation.
|
8967
|
+
/**
|
8968
|
+
* @private
|
8969
|
+
*/
|
8970
|
+
react.mergeStyles({ position: 'relative', width: '100%', height: '100%' });
|
8794
8971
|
/**
|
8795
8972
|
* Small floating modal width and height in rem for small screen
|
8796
8973
|
*/
|
8797
|
-
const SMALL_FLOATING_MODAL_SIZE_PX
|
8974
|
+
const SMALL_FLOATING_MODAL_SIZE_PX = { width: 64, height: 88 };
|
8798
8975
|
/**
|
8799
8976
|
* Large floating modal width and height in rem for large screen
|
8977
|
+
* Aspect ratio: 16:9
|
8978
|
+
*/
|
8979
|
+
const LARGE_FLOATING_MODAL_SIZE_PX = { width: 215, height: 120 };
|
8980
|
+
/**
|
8981
|
+
* @private
|
8982
|
+
* z-index to ensure that the local video tile is above the video gallery.
|
8800
8983
|
*/
|
8801
|
-
const
|
8984
|
+
const LOCAL_VIDEO_TILE_ZINDEX = 2;
|
8985
|
+
/**
|
8986
|
+
* @private
|
8987
|
+
*/
|
8988
|
+
const localVideoTileContainerStyle = (theme, isNarrow) => {
|
8989
|
+
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
|
8990
|
+
? { left: _pxToRem(localVideoTileOuterPaddingPX) }
|
8991
|
+
: { right: _pxToRem(localVideoTileOuterPaddingPX) }));
|
8992
|
+
};
|
8993
|
+
/**
|
8994
|
+
* @private
|
8995
|
+
*/
|
8996
|
+
const localVideoTileWithControlsContainerStyle = (theme, isNarrow) => {
|
8997
|
+
return react.concatStyleSets(localVideoTileContainerStyle(theme, isNarrow), {
|
8998
|
+
root: { boxShadow: theme.effects.elevation8 }
|
8999
|
+
});
|
9000
|
+
};
|
9001
|
+
/**
|
9002
|
+
* @private
|
9003
|
+
*/
|
9004
|
+
const floatingLocalVideoModalStyle = (theme, isNarrow) => {
|
9005
|
+
return react.concatStyleSets({
|
9006
|
+
main: localVideoTileContainerStyle(theme, isNarrow)
|
9007
|
+
}, {
|
9008
|
+
main: {
|
9009
|
+
boxShadow: theme.effects.elevation8,
|
9010
|
+
':focus-within': {
|
9011
|
+
boxShadow: theme.effects.elevation16,
|
9012
|
+
border: `${_pxToRem(2)} solid ${theme.palette.neutralPrimary}`
|
9013
|
+
}
|
9014
|
+
}
|
9015
|
+
}, localVideoModalStyles);
|
9016
|
+
};
|
9017
|
+
/**
|
9018
|
+
* Padding equal to the amount the modal should stay inside the bounds of the container.
|
9019
|
+
* i.e. if this is 8px, the modal should always be at least 8px inside the container at all times on all sides.
|
9020
|
+
* @private
|
9021
|
+
*/
|
9022
|
+
const localVideoTileOuterPaddingPX = 8;
|
9023
|
+
/**
|
9024
|
+
* @private
|
9025
|
+
*/
|
9026
|
+
const floatingLocalVideoTileStyle = {
|
9027
|
+
root: {
|
9028
|
+
position: 'absolute',
|
9029
|
+
zIndex: LOCAL_VIDEO_TILE_ZINDEX,
|
9030
|
+
height: '100%',
|
9031
|
+
width: '100%'
|
9032
|
+
}
|
9033
|
+
};
|
9034
|
+
/**
|
9035
|
+
* Styles for the local video tile modal when it is focused, will cause keyboard move icon to appear over video
|
9036
|
+
* @private
|
9037
|
+
*/
|
9038
|
+
const localVideoModalStyles = {
|
9039
|
+
keyboardMoveIconContainer: {
|
9040
|
+
zIndex: LOCAL_VIDEO_TILE_ZINDEX + 1 // zIndex to set the keyboard movement Icon above the other layers in the video tile.
|
9041
|
+
}
|
9042
|
+
};
|
9043
|
+
|
9044
|
+
// Copyright (c) Microsoft Corporation.
|
8802
9045
|
/**
|
8803
9046
|
* @private
|
8804
9047
|
*/
|
@@ -8809,8 +9052,8 @@ const horizontalGalleryContainerStyle = (shouldFloatLocalVideo, isNarrow) => {
|
|
8809
9052
|
: `${LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.height}rem`,
|
8810
9053
|
width: shouldFloatLocalVideo
|
8811
9054
|
? isNarrow
|
8812
|
-
? `calc(100% - ${_pxToRem(SMALL_FLOATING_MODAL_SIZE_PX
|
8813
|
-
: `calc(100% - ${_pxToRem(LARGE_FLOATING_MODAL_SIZE_PX
|
9055
|
+
? `calc(100% - ${_pxToRem(SMALL_FLOATING_MODAL_SIZE_PX.width)})`
|
9056
|
+
: `calc(100% - ${_pxToRem(LARGE_FLOATING_MODAL_SIZE_PX.width)})`
|
8814
9057
|
: '100%',
|
8815
9058
|
paddingRight: '0.5rem'
|
8816
9059
|
};
|
@@ -8854,132 +9097,20 @@ const LARGE_HORIZONTAL_GALLERY_TILE_STYLE = {
|
|
8854
9097
|
|
8855
9098
|
// Copyright (c) Microsoft Corporation.
|
8856
9099
|
/**
|
8857
|
-
* A ResponsiveHorizontalGallery styled for the @link
|
8858
|
-
|
8859
|
-
|
8860
|
-
|
8861
|
-
|
8862
|
-
const
|
8863
|
-
|
8864
|
-
|
8865
|
-
}
|
8866
|
-
|
8867
|
-
|
8868
|
-
|
8869
|
-
|
8870
|
-
|
8871
|
-
* @returns VideoGalleryRemoteParticipant[] {@link @azure/communication-react#VideoGalleryRemoteParticipant}
|
8872
|
-
*/
|
8873
|
-
const smartDominantSpeakerParticipants = (args) => {
|
8874
|
-
const { participants, dominantSpeakers = [], lastVisibleParticipants = [], maxDominantSpeakers } = args;
|
8875
|
-
// Don't apply any logic if total number of video streams is less than max dominant speakers.
|
8876
|
-
if (participants.length <= maxDominantSpeakers) {
|
8877
|
-
return participants;
|
8878
|
-
}
|
8879
|
-
const participantsMap = participantsById(participants);
|
8880
|
-
// Only use the Max allowed dominant speakers that exist in participants
|
8881
|
-
const dominantSpeakerIds = Array.from(new Set(dominantSpeakers).values())
|
8882
|
-
.filter((id) => !!participantsMap[id])
|
8883
|
-
.slice(0, maxDominantSpeakers);
|
8884
|
-
const lastVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId);
|
8885
|
-
const newVisibleParticipantIds = lastVisibleParticipants.map((p) => p.userId).slice(0, maxDominantSpeakers);
|
8886
|
-
const newDominantSpeakerIds = dominantSpeakerIds.filter((id) => !newVisibleParticipantIds.includes(id));
|
8887
|
-
// Remove participants that are no longer dominant and replace them with new dominant speakers.
|
8888
|
-
for (let index = 0; index < maxDominantSpeakers; index++) {
|
8889
|
-
const newVisibleParticipantId = newVisibleParticipantIds[index];
|
8890
|
-
if (newVisibleParticipantId === undefined || !dominantSpeakerIds.includes(newVisibleParticipantId)) {
|
8891
|
-
const replacement = newDominantSpeakerIds.shift();
|
8892
|
-
if (!replacement) {
|
8893
|
-
break;
|
8894
|
-
}
|
8895
|
-
newVisibleParticipantIds[index] = replacement;
|
8896
|
-
}
|
8897
|
-
}
|
8898
|
-
const removedVisibleParticipantIds = lastVisibleParticipantIds.filter((p) => !newVisibleParticipantIds.includes(p));
|
8899
|
-
removedVisibleParticipantIds.forEach((p) => newVisibleParticipantIds.push(p));
|
8900
|
-
const newVisibleParticipantIdSet = new Set(newVisibleParticipantIds);
|
8901
|
-
const leftoverParticipants = participants.filter((p) => !newVisibleParticipantIdSet.has(p.userId));
|
8902
|
-
leftoverParticipants.forEach((p) => {
|
8903
|
-
newVisibleParticipantIds.push(p.userId);
|
8904
|
-
});
|
8905
|
-
// newVisibleParticipantIds can contain identifiers for participants that are no longer in the call. So we ignore those IDs.
|
8906
|
-
const newVisibleParticipants = newVisibleParticipantIds
|
8907
|
-
.map((participantId) => participantsMap[participantId])
|
8908
|
-
.filter((p) => !!p);
|
8909
|
-
return newVisibleParticipants;
|
8910
|
-
};
|
8911
|
-
const participantsById = (participants) => {
|
8912
|
-
const response = {};
|
8913
|
-
participants.forEach((p) => (response[p.userId] = p));
|
8914
|
-
return response;
|
8915
|
-
};
|
8916
|
-
|
8917
|
-
// Copyright (c) Microsoft Corporation.
|
8918
|
-
const DEFAULT_MAX_REMOTE_VIDEOSTREAMS = 4;
|
8919
|
-
const DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS = 6;
|
8920
|
-
/**
|
8921
|
-
* @private
|
8922
|
-
*/
|
8923
|
-
const useFloatingLocalVideoLayout = (props) => {
|
8924
|
-
var _a, _b;
|
8925
|
-
const visibleVideoParticipants = React.useRef([]);
|
8926
|
-
const visibleAudioParticipants = React.useRef([]);
|
8927
|
-
const { remoteParticipants, dominantSpeakers, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEOSTREAMS, maxAudioDominantSpeakers = DEFAULT_MAX_AUDIO_DOMINANT_SPEAKERS, isScreenShareActive = false } = props;
|
8928
|
-
visibleVideoParticipants.current = smartDominantSpeakerParticipants({
|
8929
|
-
participants: (_a = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => { var _a; return (_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable; })) !== null && _a !== void 0 ? _a : [],
|
8930
|
-
dominantSpeakers,
|
8931
|
-
lastVisibleParticipants: visibleVideoParticipants.current,
|
8932
|
-
maxDominantSpeakers: maxRemoteVideoStreams
|
8933
|
-
}).slice(0, maxRemoteVideoStreams);
|
8934
|
-
const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map((p) => p.userId));
|
8935
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8936
|
-
const callingParticipants = remoteParticipants.filter((p) => p.state === ('Connecting' ));
|
8937
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8938
|
-
const callingParticipantsSet = new Set(callingParticipants.map((p) => p.userId));
|
8939
|
-
visibleAudioParticipants.current = smartDominantSpeakerParticipants({
|
8940
|
-
participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => !visibleVideoParticipantsSet.has(p.userId) &&
|
8941
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !callingParticipantsSet.has(p.userId))) !== null && _b !== void 0 ? _b : [],
|
8942
|
-
dominantSpeakers,
|
8943
|
-
lastVisibleParticipants: visibleAudioParticipants.current,
|
8944
|
-
maxDominantSpeakers: maxAudioDominantSpeakers
|
8945
|
-
});
|
8946
|
-
const getGridParticipants = React.useCallback(() => {
|
8947
|
-
if (isScreenShareActive) {
|
8948
|
-
return [];
|
8949
|
-
}
|
8950
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8951
|
-
return visibleVideoParticipants.current.length > 0
|
8952
|
-
? visibleVideoParticipants.current
|
8953
|
-
: visibleAudioParticipants.current.concat(callingParticipants);
|
8954
|
-
}, [
|
8955
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8956
|
-
isScreenShareActive
|
8957
|
-
]);
|
8958
|
-
const gridParticipants = getGridParticipants();
|
8959
|
-
const getHorizontalGalleryRemoteParticipants = React.useCallback(() => {
|
8960
|
-
if (isScreenShareActive) {
|
8961
|
-
// If screen sharing is active, assign video and audio participants as horizontal gallery participants
|
8962
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8963
|
-
return visibleVideoParticipants.current.concat(visibleAudioParticipants.current.concat(callingParticipants));
|
8964
|
-
}
|
8965
|
-
else {
|
8966
|
-
// If screen sharing is not active, then assign all video tiles as grid tiles.
|
8967
|
-
// If there are no video tiles, then assign audio tiles as grid tiles.
|
8968
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
|
8969
|
-
return visibleVideoParticipants.current.length > 0
|
8970
|
-
? visibleAudioParticipants.current.concat(callingParticipants)
|
8971
|
-
: [];
|
8972
|
-
}
|
8973
|
-
}, [
|
8974
|
-
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ callingParticipants,
|
8975
|
-
isScreenShareActive
|
8976
|
-
]);
|
8977
|
-
const horizontalGalleryParticipants = getHorizontalGalleryRemoteParticipants();
|
8978
|
-
return { gridParticipants, horizontalGalleryParticipants };
|
8979
|
-
};
|
8980
|
-
|
8981
|
-
// Copyright (c) Microsoft Corporation.
|
8982
|
-
/**
|
9100
|
+
* A ResponsiveHorizontalGallery styled for the {@link VideoGallery}
|
9101
|
+
*
|
9102
|
+
* @private
|
9103
|
+
*/
|
9104
|
+
const VideoGalleryResponsiveHorizontalGallery = (props) => {
|
9105
|
+
const { shouldFloatLocalVideo = false, isNarrow = false, horizontalGalleryElements, styles } = props;
|
9106
|
+
const containerStyles = React.useMemo(() => horizontalGalleryContainerStyle(shouldFloatLocalVideo, isNarrow), [shouldFloatLocalVideo, isNarrow]);
|
9107
|
+
const galleryStyles = React.useMemo(() => react.concatStyleSets(horizontalGalleryStyle(isNarrow), styles), [isNarrow, styles]);
|
9108
|
+
return (React__default['default'].createElement(react.Stack, { styles: { root: { paddingTop: '0.5rem' } } },
|
9109
|
+
React__default['default'].createElement(ResponsiveHorizontalGallery, { key: "responsive-horizontal-gallery", containerStyles: containerStyles, horizontalGalleryStyles: galleryStyles, childWidthRem: isNarrow ? SMALL_HORIZONTAL_GALLERY_TILE_SIZE_REM.width : LARGE_HORIZONTAL_GALLERY_TILE_SIZE_REM.width, buttonWidthRem: HORIZONTAL_GALLERY_BUTTON_WIDTH, gapWidthRem: HORIZONTAL_GALLERY_GAP }, horizontalGalleryElements)));
|
9110
|
+
};
|
9111
|
+
|
9112
|
+
// Copyright (c) Microsoft Corporation.
|
9113
|
+
/**
|
8983
9114
|
* DefaultLayout displays remote participants, local video component, and screen sharing component in
|
8984
9115
|
* a grid and horizontal gallery.
|
8985
9116
|
*
|
@@ -9015,83 +9146,6 @@ const DefaultLayout = (props) => {
|
|
9015
9146
|
horizontalGalleryTiles.length > 0 && (React__default['default'].createElement(VideoGalleryResponsiveHorizontalGallery, { isNarrow: isNarrow, horizontalGalleryElements: horizontalGalleryTiles, styles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery }))));
|
9016
9147
|
};
|
9017
9148
|
|
9018
|
-
// Copyright (c) Microsoft Corporation.
|
9019
|
-
/**
|
9020
|
-
* @private
|
9021
|
-
*/
|
9022
|
-
react.mergeStyles({ position: 'relative', width: '100%', height: '100%' });
|
9023
|
-
/**
|
9024
|
-
* Small floating modal width and height in rem for small screen
|
9025
|
-
*/
|
9026
|
-
const SMALL_FLOATING_MODAL_SIZE_PX = { width: 64, height: 88 };
|
9027
|
-
/**
|
9028
|
-
* Large floating modal width and height in rem for large screen
|
9029
|
-
*/
|
9030
|
-
const LARGE_FLOATING_MODAL_SIZE_PX = { width: 160, height: 120 };
|
9031
|
-
/**
|
9032
|
-
* @private
|
9033
|
-
* z-index to ensure that the local video tile is above the video gallery.
|
9034
|
-
*/
|
9035
|
-
const LOCAL_VIDEO_TILE_ZINDEX = 2;
|
9036
|
-
/**
|
9037
|
-
* @private
|
9038
|
-
*/
|
9039
|
-
const localVideoTileContainerStyle = (theme, isNarrow) => {
|
9040
|
-
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
|
9041
|
-
? { left: _pxToRem(localVideoTileOuterPaddingPX) }
|
9042
|
-
: { right: _pxToRem(localVideoTileOuterPaddingPX) }));
|
9043
|
-
};
|
9044
|
-
/**
|
9045
|
-
* @private
|
9046
|
-
*/
|
9047
|
-
const localVideoTileWithControlsContainerStyle = (theme, isNarrow) => {
|
9048
|
-
return react.concatStyleSets(localVideoTileContainerStyle(theme, isNarrow), {
|
9049
|
-
root: { boxShadow: theme.effects.elevation8 }
|
9050
|
-
});
|
9051
|
-
};
|
9052
|
-
/**
|
9053
|
-
* @private
|
9054
|
-
*/
|
9055
|
-
const floatingLocalVideoModalStyle = (theme, isNarrow) => {
|
9056
|
-
return react.concatStyleSets({
|
9057
|
-
main: localVideoTileContainerStyle(theme, isNarrow)
|
9058
|
-
}, {
|
9059
|
-
main: {
|
9060
|
-
boxShadow: theme.effects.elevation8,
|
9061
|
-
':focus-within': {
|
9062
|
-
boxShadow: theme.effects.elevation16,
|
9063
|
-
border: `${_pxToRem(2)} solid ${theme.palette.neutralPrimary}`
|
9064
|
-
}
|
9065
|
-
}
|
9066
|
-
}, localVideoModalStyles);
|
9067
|
-
};
|
9068
|
-
/**
|
9069
|
-
* Padding equal to the amount the modal should stay inside the bounds of the container.
|
9070
|
-
* i.e. if this is 8px, the modal should always be at least 8px inside the container at all times on all sides.
|
9071
|
-
* @private
|
9072
|
-
*/
|
9073
|
-
const localVideoTileOuterPaddingPX = 8;
|
9074
|
-
/**
|
9075
|
-
* @private
|
9076
|
-
*/
|
9077
|
-
const floatingLocalVideoTileStyle = {
|
9078
|
-
root: {
|
9079
|
-
position: 'absolute',
|
9080
|
-
zIndex: LOCAL_VIDEO_TILE_ZINDEX,
|
9081
|
-
height: '100%',
|
9082
|
-
width: '100%'
|
9083
|
-
}
|
9084
|
-
};
|
9085
|
-
/**
|
9086
|
-
* Styles for the local video tile modal when it is focused, will cause keyboard move icon to appear over video
|
9087
|
-
* @private
|
9088
|
-
*/
|
9089
|
-
const localVideoModalStyles = {
|
9090
|
-
keyboardMoveIconContainer: {
|
9091
|
-
zIndex: LOCAL_VIDEO_TILE_ZINDEX + 1 // zIndex to set the keyboard movement Icon above the other layers in the video tile.
|
9092
|
-
}
|
9093
|
-
};
|
9094
|
-
|
9095
9149
|
// Copyright (c) Microsoft Corporation.
|
9096
9150
|
const animationDuration = react.AnimationVariables.durationValue2;
|
9097
9151
|
const ZERO = { x: 0, y: 0 };
|
@@ -9876,6 +9930,56 @@ const FloatingLocalVideoLayout = (props) => {
|
|
9876
9930
|
React__default['default'].createElement(react.LayerHost, { id: layerHostId, className: react.mergeStyles(layerHostStyle) }))));
|
9877
9931
|
};
|
9878
9932
|
|
9933
|
+
// Copyright (c) Microsoft Corporation.
|
9934
|
+
/**
|
9935
|
+
* PinnedParticipantsLayout displays remote participants and a screen sharing component in
|
9936
|
+
* a grid and horizontal gallery while floating the local video
|
9937
|
+
*
|
9938
|
+
* @private
|
9939
|
+
*/
|
9940
|
+
const PinnedParticipantsLayout = (props) => {
|
9941
|
+
const { remoteParticipants = [], pinnedParticipants = [], dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, showCameraSwitcherInLocalPreview, parentWidth, parentHeight, isLocalVideoFloating } = props;
|
9942
|
+
const theme = useTheme();
|
9943
|
+
const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;
|
9944
|
+
const pinnedParticipantsLayout = usePinnedParticipantLayout({
|
9945
|
+
remoteParticipants,
|
9946
|
+
pinnedParticipantUserIds: pinnedParticipants,
|
9947
|
+
dominantSpeakers,
|
9948
|
+
maxRemoteVideoStreams,
|
9949
|
+
isScreenShareActive: !!screenShareComponent
|
9950
|
+
});
|
9951
|
+
let activeVideoStreams = 0;
|
9952
|
+
const shouldFloatLocalVideo = isLocalVideoFloating && remoteParticipants.length > 0;
|
9953
|
+
const gridTiles = pinnedParticipantsLayout.gridParticipants.map((p) => {
|
9954
|
+
var _a, _b;
|
9955
|
+
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9956
|
+
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9957
|
+
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9958
|
+
});
|
9959
|
+
if (localVideoComponent && !shouldFloatLocalVideo) {
|
9960
|
+
gridTiles.push(localVideoComponent);
|
9961
|
+
}
|
9962
|
+
const horizontalGalleryTiles = pinnedParticipantsLayout.horizontalGalleryParticipants.map((p) => {
|
9963
|
+
var _a, _b;
|
9964
|
+
return onRenderRemoteParticipant(p, maxRemoteVideoStreams && maxRemoteVideoStreams >= 0
|
9965
|
+
? ((_a = p.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable) && activeVideoStreams++ < maxRemoteVideoStreams
|
9966
|
+
: (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
|
9967
|
+
});
|
9968
|
+
const layerHostId = reactHooks.useId('layerhost');
|
9969
|
+
const wrappedLocalVideoComponent = localVideoComponent && shouldFloatLocalVideo ? (
|
9970
|
+
// When we use showCameraSwitcherInLocalPreview it disables dragging to allow keyboard navigation.
|
9971
|
+
showCameraSwitcherInLocalPreview ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(localVideoTileWithControlsContainerStyle(theme, isNarrow), {
|
9972
|
+
boxShadow: theme.effects.elevation8,
|
9973
|
+
zIndex: LOCAL_VIDEO_TILE_ZINDEX
|
9974
|
+
}) }, localVideoComponent)) : horizontalGalleryTiles.length > 0 ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(localVideoTileContainerStyle(theme, isNarrow)) }, localVideoComponent)) : (React__default['default'].createElement(FloatingLocalVideo, { localVideoComponent: localVideoComponent, layerHostId: layerHostId, isNarrow: isNarrow, parentWidth: parentWidth, parentHeight: parentHeight }))) : undefined;
|
9975
|
+
return (React__default['default'].createElement(react.Stack, { styles: rootLayoutStyle },
|
9976
|
+
wrappedLocalVideoComponent,
|
9977
|
+
React__default['default'].createElement(react.Stack, { horizontal: false, styles: innerLayoutStyle },
|
9978
|
+
screenShareComponent ? (screenShareComponent) : (React__default['default'].createElement(GridLayout, { key: "grid-layout", styles: styles === null || styles === void 0 ? void 0 : styles.gridLayout }, gridTiles)),
|
9979
|
+
horizontalGalleryTiles.length > 0 && (React__default['default'].createElement(VideoGalleryResponsiveHorizontalGallery, { isNarrow: isNarrow, shouldFloatLocalVideo: true, horizontalGalleryElements: horizontalGalleryTiles, styles: styles === null || styles === void 0 ? void 0 : styles.horizontalGallery })),
|
9980
|
+
React__default['default'].createElement(react.LayerHost, { id: layerHostId, className: react.mergeStyles(layerHostStyle) }))));
|
9981
|
+
};
|
9982
|
+
|
9879
9983
|
// Copyright (c) Microsoft Corporation.
|
9880
9984
|
/**
|
9881
9985
|
* @private
|
@@ -9889,7 +9993,7 @@ const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;
|
|
9889
9993
|
* @public
|
9890
9994
|
*/
|
9891
9995
|
const VideoGallery = (props) => {
|
9892
|
-
var _a, _b;
|
9996
|
+
var _a, _b, _c;
|
9893
9997
|
const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps } = props;
|
9894
9998
|
const ids = useIdentifiers();
|
9895
9999
|
const theme = useTheme();
|
@@ -9900,6 +10004,11 @@ const VideoGallery = (props) => {
|
|
9900
10004
|
const containerWidth = _useContainerWidth(containerRef);
|
9901
10005
|
const containerHeight = _useContainerHeight(containerRef);
|
9902
10006
|
const isNarrow = containerWidth ? isNarrowWidth(containerWidth) : false;
|
10007
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10008
|
+
const [pinnedParticipantsState, _] = React__default['default'].useState([]);
|
10009
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10010
|
+
// Use pinnedParticipants from props but if it is not defined use the maintained state of pinned participants
|
10011
|
+
const pinnedParticipants = (_a = props.pinnedParticipants) !== null && _a !== void 0 ? _a : pinnedParticipantsState;
|
9903
10012
|
/* @conditional-compile-remove(rooms) */
|
9904
10013
|
const permissions = _usePermissions();
|
9905
10014
|
/**
|
@@ -9960,13 +10069,50 @@ const VideoGallery = (props) => {
|
|
9960
10069
|
]);
|
9961
10070
|
const screenShareParticipant = remoteParticipants.find((participant) => { var _a; return (_a = participant.screenShareStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });
|
9962
10071
|
const localScreenShareStreamComponent = React__default['default'].createElement(LocalScreenShare, { localParticipant: localParticipant });
|
9963
|
-
const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (
|
10072
|
+
const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_b = screenShareParticipant.screenShareStream) === null || _b === void 0 ? void 0 : _b.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView, isReceiving: (_c = screenShareParticipant.screenShareStream) === null || _c === void 0 ? void 0 : _c.isReceiving })));
|
9964
10073
|
const screenShareComponent = remoteScreenShareComponent
|
9965
10074
|
? remoteScreenShareComponent
|
9966
10075
|
: localParticipant.isScreenSharingOn
|
9967
10076
|
? localScreenShareStreamComponent
|
9968
10077
|
: undefined;
|
9969
|
-
const
|
10078
|
+
const layoutProps = React.useMemo(() => ({
|
10079
|
+
remoteParticipants,
|
10080
|
+
/* @conditional-compile-remove(pinned-participants) */ pinnedParticipants,
|
10081
|
+
screenShareComponent,
|
10082
|
+
showCameraSwitcherInLocalPreview,
|
10083
|
+
maxRemoteVideoStreams,
|
10084
|
+
dominantSpeakers,
|
10085
|
+
styles,
|
10086
|
+
onRenderRemoteParticipant: onRenderRemoteVideoTile !== null && onRenderRemoteVideoTile !== void 0 ? onRenderRemoteVideoTile : defaultOnRenderVideoTile,
|
10087
|
+
localVideoComponent: localVideoTile,
|
10088
|
+
parentWidth: containerWidth,
|
10089
|
+
parentHeight: containerHeight,
|
10090
|
+
isLocalVideoFloating: layout === 'floatingLocalVideo'
|
10091
|
+
}), [
|
10092
|
+
remoteParticipants,
|
10093
|
+
screenShareComponent,
|
10094
|
+
showCameraSwitcherInLocalPreview,
|
10095
|
+
maxRemoteVideoStreams,
|
10096
|
+
dominantSpeakers,
|
10097
|
+
styles,
|
10098
|
+
localVideoTile,
|
10099
|
+
containerWidth,
|
10100
|
+
containerHeight,
|
10101
|
+
onRenderRemoteVideoTile,
|
10102
|
+
defaultOnRenderVideoTile,
|
10103
|
+
layout,
|
10104
|
+
/* @conditional-compile-remove(pinned-participants) */ pinnedParticipants
|
10105
|
+
]);
|
10106
|
+
const videoGalleryLayout = React.useMemo(() => {
|
10107
|
+
/* @conditional-compile-remove(pinned-participants) */
|
10108
|
+
if (layoutProps.pinnedParticipants.length > 0) {
|
10109
|
+
return React__default['default'].createElement(PinnedParticipantsLayout, Object.assign({}, layoutProps));
|
10110
|
+
}
|
10111
|
+
if (layout === 'floatingLocalVideo') {
|
10112
|
+
return React__default['default'].createElement(FloatingLocalVideoLayout, Object.assign({}, layoutProps));
|
10113
|
+
}
|
10114
|
+
return React__default['default'].createElement(DefaultLayout, Object.assign({}, layoutProps));
|
10115
|
+
}, [layout, layoutProps]);
|
9970
10116
|
return (React__default['default'].createElement("div", { "data-ui-id": ids.videoGallery, ref: containerRef, className: react.mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root) }, videoGalleryLayout));
|
9971
10117
|
};
|
9972
10118
|
|
@@ -10708,7 +10854,9 @@ const CameraAndMicrophoneDomainPermissions = (props) => {
|
|
10708
10854
|
const locale = useLocale$1().strings;
|
10709
10855
|
/* @conditional-compile-remove(call-readiness) */
|
10710
10856
|
const strings = useShallowMerge(props.type === 'denied'
|
10711
|
-
?
|
10857
|
+
? props.browserHint === 'safari'
|
10858
|
+
? locale.CameraAndMicrophoneDomainPermissionsDeniedSafari
|
10859
|
+
: locale.CameraAndMicrophoneDomainPermissionsDenied
|
10712
10860
|
: props.type === 'request'
|
10713
10861
|
? locale.CameraAndMicrophoneDomainPermissionsRequest
|
10714
10862
|
: locale.CameraAndMicrophoneDomainPermissionsCheck, props.strings);
|
@@ -10733,7 +10881,9 @@ const MicrophoneDomainPermissions = (props) => {
|
|
10733
10881
|
const locale = useLocale$1().strings;
|
10734
10882
|
/* @conditional-compile-remove(call-readiness) */
|
10735
10883
|
const strings = useShallowMerge(props.type === 'denied'
|
10736
|
-
?
|
10884
|
+
? props.browserHint === 'safari'
|
10885
|
+
? locale.MicrophoneDomainPermissionsDeniedSafari
|
10886
|
+
: locale.MicrophoneDomainPermissionsDenied
|
10737
10887
|
: props.type === 'request'
|
10738
10888
|
? locale.MicrophoneDomainPermissionsRequest
|
10739
10889
|
: locale.MicrophoneDomainPermissionsCheck, props.strings);
|
@@ -10754,7 +10904,9 @@ const CameraDomainPermissions = (props) => {
|
|
10754
10904
|
const locale = useLocale$1().strings;
|
10755
10905
|
/* @conditional-compile-remove(call-readiness) */
|
10756
10906
|
const strings = useShallowMerge(props.type === 'denied'
|
10757
|
-
?
|
10907
|
+
? props.browserHint === 'safari'
|
10908
|
+
? locale.CameraDomainPermissionsDeniedSafari
|
10909
|
+
: locale.CameraDomainPermissionsDenied
|
10758
10910
|
: props.type === 'request'
|
10759
10911
|
? locale.CameraDomainPermissionsRequest
|
10760
10912
|
: locale.CameraDomainPermissionsCheck, props.strings);
|
@@ -10780,6 +10932,7 @@ const ParticipantsButton = (props) => {
|
|
10780
10932
|
var _a, _b, _c, _d;
|
10781
10933
|
const { callInvitationURL, styles, onMuteAll, onRenderIcon, onRenderParticipantList, participants, myUserId, excludeMe, onRenderParticipant, onRenderAvatar, onRemoveParticipant, onFetchParticipantMenuItems, showParticipantOverflowTooltip } = props;
|
10782
10934
|
const disabled = props.disabled;
|
10935
|
+
const [copyInviteLinkAnnouncerStrings, setCopyInviteLinkAnnouncerStrings] = React.useState('');
|
10783
10936
|
const onRenderPeopleIcon = () => (React__default['default'].createElement(_HighContrastAwareIcon, { disabled: disabled, iconName: "ControlButtonParticipants" }));
|
10784
10937
|
const ids = useIdentifiers();
|
10785
10938
|
const onMuteAllCallback = React.useCallback(() => {
|
@@ -10810,6 +10963,19 @@ const ParticipantsButton = (props) => {
|
|
10810
10963
|
const localeStrings = useLocale$1().strings.participantsButton;
|
10811
10964
|
const strings = React.useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);
|
10812
10965
|
const participantCount = participants.length;
|
10966
|
+
/**
|
10967
|
+
* sets the announcement string for when the link is copied.
|
10968
|
+
*/
|
10969
|
+
const toggleAnnouncerString = React.useCallback(() => {
|
10970
|
+
setCopyInviteLinkAnnouncerStrings(strings.copyInviteLinkActionedAriaLabel);
|
10971
|
+
/**
|
10972
|
+
* Clears the announcer string after the user clicks the
|
10973
|
+
* copyInviteLink button allowing it to be re-announced.
|
10974
|
+
*/
|
10975
|
+
setTimeout(() => {
|
10976
|
+
setCopyInviteLinkAnnouncerStrings('');
|
10977
|
+
}, 3000);
|
10978
|
+
}, [strings.copyInviteLinkActionedAriaLabel]);
|
10813
10979
|
const generateDefaultParticipantsSubMenuProps = React.useCallback(() => {
|
10814
10980
|
var _a;
|
10815
10981
|
const items = [];
|
@@ -10889,7 +11055,10 @@ const ParticipantsButton = (props) => {
|
|
10889
11055
|
title: strings.copyInviteLinkButtonLabel,
|
10890
11056
|
itemProps: { styles: (_b = styles === null || styles === void 0 ? void 0 : styles.menuStyles) === null || _b === void 0 ? void 0 : _b.menuItemStyles },
|
10891
11057
|
iconProps: { iconName: 'Link' },
|
10892
|
-
onClick:
|
11058
|
+
onClick: () => {
|
11059
|
+
onCopyCallback();
|
11060
|
+
toggleAnnouncerString();
|
11061
|
+
}
|
10893
11062
|
});
|
10894
11063
|
}
|
10895
11064
|
return menuProps;
|
@@ -10904,9 +11073,12 @@ const ParticipantsButton = (props) => {
|
|
10904
11073
|
excludeMe,
|
10905
11074
|
ids.participantButtonPeopleMenuItem,
|
10906
11075
|
generateDefaultParticipantsSubMenuProps,
|
10907
|
-
onCopyCallback
|
11076
|
+
onCopyCallback,
|
11077
|
+
toggleAnnouncerString
|
10908
11078
|
]);
|
10909
|
-
return (React__default['default'].createElement(
|
11079
|
+
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
11080
|
+
React__default['default'].createElement(Announcer, { announcementString: copyInviteLinkAnnouncerStrings, ariaLive: 'polite' }),
|
11081
|
+
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
11082
|
};
|
10911
11083
|
|
10912
11084
|
// Copyright (c) Microsoft Corporation.
|
@@ -11810,7 +11982,7 @@ const continueAnywayButtonStyles = (theme) => {
|
|
11810
11982
|
// Copyright (c) Microsoft Corporation.
|
11811
11983
|
/* @conditional-compile-remove(unsupported-browser) */
|
11812
11984
|
const UnsupportedEnvironmentContainer = (props) => {
|
11813
|
-
const { onTroubleshootingClick, strings,
|
11985
|
+
const { onTroubleshootingClick, strings, onContinueAnywayClick } = props;
|
11814
11986
|
const theme = useTheme();
|
11815
11987
|
return (React__default['default'].createElement(react.Stack, { styles: containerStyles$2, tokens: { childrenGap: '2rem' } },
|
11816
11988
|
React__default['default'].createElement(react.Icon, { iconName: "UnsupportedEnvironmentWarning", "data-ui-id": "unsupported-environment-icon" }),
|
@@ -11818,7 +11990,7 @@ const UnsupportedEnvironmentContainer = (props) => {
|
|
11818
11990
|
React__default['default'].createElement(react.Text, { styles: mainTextStyles }, strings === null || strings === void 0 ? void 0 : strings.primaryText),
|
11819
11991
|
React__default['default'].createElement(react.Text, { styles: secondaryTextStyles }, strings === null || strings === void 0 ? void 0 : strings.secondaryText)),
|
11820
11992
|
onTroubleshootingClick && (React__default['default'].createElement(react.Link, { styles: linkTextStyles, onClick: onTroubleshootingClick, "data-ui-id": "unsupported-environment-link" }, strings === null || strings === void 0 ? void 0 : strings.moreHelpLinkText)),
|
11821
|
-
|
11993
|
+
onContinueAnywayClick && (React__default['default'].createElement(react.DefaultButton, { "data-ui-id": "allowUnsupportedBrowserButton", styles: continueAnywayButtonStyles(theme), onClick: onContinueAnywayClick }, strings === null || strings === void 0 ? void 0 : strings.continueAnywayButtonText))));
|
11822
11994
|
};
|
11823
11995
|
/**
|
11824
11996
|
* UI to display to the user that the environment they are using is not supported by calling application.
|
@@ -11849,8 +12021,8 @@ const UnsupportedBrowser = (props) => {
|
|
11849
12021
|
* @beta
|
11850
12022
|
*/
|
11851
12023
|
const UnsupportedBrowserVersion = (props) => {
|
11852
|
-
const { onTroubleshootingClick, strings,
|
11853
|
-
return (React__default['default'].createElement(UnsupportedEnvironment, { onTroubleshootingClick: onTroubleshootingClick, strings: strings,
|
12024
|
+
const { onTroubleshootingClick, strings, onContinueAnywayClick } = props;
|
12025
|
+
return (React__default['default'].createElement(UnsupportedEnvironment, { onTroubleshootingClick: onTroubleshootingClick, strings: strings, onContinueAnywayClick: onContinueAnywayClick }));
|
11854
12026
|
};
|
11855
12027
|
|
11856
12028
|
// Copyright (c) Microsoft Corporation.
|
@@ -12324,8 +12496,8 @@ const useSelector$4 = (selector, selectorProps) => {
|
|
12324
12496
|
*
|
12325
12497
|
* @public
|
12326
12498
|
*/
|
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;
|
12499
|
+
const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagnostics, getDeviceManager$1, getEnvironmentInfo], (latestErrors, diagnostics, deviceManager, environmentInfo) => {
|
12500
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
12329
12501
|
// The order in which the errors are returned is significant: The `ErrorBar` shows errors on the UI in that order.
|
12330
12502
|
// There are several options for the ordering:
|
12331
12503
|
// - Sorted by when the errors happened (latest first / oldest first).
|
@@ -12334,6 +12506,10 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
|
|
12334
12506
|
// 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
12507
|
// have timestamps for errors.
|
12336
12508
|
const activeErrorMessages = [];
|
12509
|
+
const isSafari = () => {
|
12510
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
12511
|
+
return (environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.environment.browser) === 'safari';
|
12512
|
+
};
|
12337
12513
|
// Errors reported via diagnostics are more reliable than from API method failures, so process those first.
|
12338
12514
|
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
12515
|
((_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 +12521,13 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
|
|
12345
12521
|
if (((_d = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.noMicrophoneDevicesEnumerated) === null || _d === void 0 ? void 0 : _d.value) === true) {
|
12346
12522
|
activeErrorMessages.push({ type: 'callNoMicrophoneFound' });
|
12347
12523
|
}
|
12348
|
-
if (((_e = deviceManager.deviceAccess) === null || _e === void 0 ? void 0 : _e.audio) === false) {
|
12524
|
+
if (((_e = deviceManager.deviceAccess) === null || _e === void 0 ? void 0 : _e.audio) === false && isSafari()) {
|
12525
|
+
activeErrorMessages.push({ type: 'callMicrophoneAccessDeniedSafari' });
|
12526
|
+
}
|
12527
|
+
if (((_f = deviceManager.deviceAccess) === null || _f === void 0 ? void 0 : _f.audio) === false && !isSafari()) {
|
12349
12528
|
activeErrorMessages.push({ type: 'callMicrophoneAccessDenied' });
|
12350
12529
|
}
|
12351
|
-
if (((
|
12530
|
+
if (((_g = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.microphonePermissionDenied) === null || _g === void 0 ? void 0 : _g.value) === true) {
|
12352
12531
|
activeErrorMessages.push({ type: 'callMacOsMicrophoneAccessDenied' });
|
12353
12532
|
}
|
12354
12533
|
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 +12552,21 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
|
|
12373
12552
|
activeErrorMessages.push({ type: 'callVideoRecoveredBySystem' });
|
12374
12553
|
}
|
12375
12554
|
}
|
12376
|
-
if (((
|
12555
|
+
if (((_h = deviceManager.deviceAccess) === null || _h === void 0 ? void 0 : _h.video) === false && isSafari()) {
|
12556
|
+
activeErrorMessages.push({ type: 'callCameraAccessDeniedSafari' });
|
12557
|
+
}
|
12558
|
+
else if (((_j = deviceManager.deviceAccess) === null || _j === void 0 ? void 0 : _j.video) === false) {
|
12377
12559
|
activeErrorMessages.push({ type: 'callCameraAccessDenied' });
|
12378
12560
|
}
|
12379
12561
|
else {
|
12380
|
-
if (((
|
12562
|
+
if (((_k = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraFreeze) === null || _k === void 0 ? void 0 : _k.value) === true) {
|
12381
12563
|
activeErrorMessages.push({ type: 'callCameraAlreadyInUse' });
|
12382
12564
|
}
|
12383
12565
|
}
|
12384
|
-
if (((
|
12566
|
+
if (((_l = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.cameraPermissionDenied) === null || _l === void 0 ? void 0 : _l.value) === true) {
|
12385
12567
|
activeErrorMessages.push({ type: 'callMacOsCameraAccessDenied' });
|
12386
12568
|
}
|
12387
|
-
if (((
|
12569
|
+
if (((_m = diagnostics === null || diagnostics === void 0 ? void 0 : diagnostics.media.latest.screenshareRecordingDisabled) === null || _m === void 0 ? void 0 : _m.value) === true) {
|
12388
12570
|
activeErrorMessages.push({ type: 'callMacOsScreenShareAccessDenied' });
|
12389
12571
|
}
|
12390
12572
|
// Prefer to show errors with privacy implications.
|
@@ -12393,7 +12575,7 @@ const errorBarSelector$1 = reselect.createSelector([getLatestErrors$1, getDiagno
|
|
12393
12575
|
appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.stopScreenSharing', 'stopScreenShareGeneric');
|
12394
12576
|
appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.startVideo', 'startVideoGeneric');
|
12395
12577
|
appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'Call.unmute', 'unmuteGeneric');
|
12396
|
-
if (((
|
12578
|
+
if (((_o = latestErrors['CallAgent.join']) === null || _o === void 0 ? void 0 : _o.message) === 'CallAgent.join: Invalid meeting link') {
|
12397
12579
|
appendActiveErrorIfDefined(activeErrorMessages, latestErrors, 'CallAgent.join', 'failedToJoinCallInvalidMeetingLink');
|
12398
12580
|
}
|
12399
12581
|
else {
|
@@ -15020,6 +15202,14 @@ const isValidIdentifier = (identifier) => {
|
|
15020
15202
|
communicationCommon.isMicrosoftTeamsUserIdentifier(identifier) ||
|
15021
15203
|
communicationCommon.isUnknownIdentifier(identifier));
|
15022
15204
|
};
|
15205
|
+
/**
|
15206
|
+
* Check if we are using safari browser
|
15207
|
+
* @private
|
15208
|
+
*/
|
15209
|
+
const _isSafari = (environmentInfo) => {
|
15210
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
15211
|
+
return (environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.environment.browser) === 'safari';
|
15212
|
+
};
|
15023
15213
|
|
15024
15214
|
// Copyright (c) Microsoft Corporation.
|
15025
15215
|
// Licensed under the MIT license.
|
@@ -16689,7 +16879,7 @@ const Microphone = (props) => {
|
|
16689
16879
|
: {};
|
16690
16880
|
const styles = React.useMemo(() => { var _a; return concatButtonBaseStyles((_a = props.styles) !== null && _a !== void 0 ? _a : {}); }, [props.styles]);
|
16691
16881
|
// tab focus on MicrophoneButton on page load
|
16692
|
-
return (React__default['default'].createElement(MicrophoneButton, Object.assign({ "data-ui-id": "call-composite-microphone-button" }, microphoneButtonProps, { showLabel: props.displayType !== 'compact', styles: styles }, microphoneButtonStrings, { enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disabled: microphoneButtonProps.disabled || props.disabled })));
|
16882
|
+
return (React__default['default'].createElement(MicrophoneButton, Object.assign({ autoFocus: true, "data-ui-id": "call-composite-microphone-button" }, microphoneButtonProps, { showLabel: props.displayType !== 'compact', styles: styles }, microphoneButtonStrings, { enableDeviceSelectionMenu: props.splitButtonsForDeviceSelection, disabled: microphoneButtonProps.disabled || props.disabled })));
|
16693
16883
|
};
|
16694
16884
|
|
16695
16885
|
// Copyright (c) Microsoft Corporation.
|
@@ -17120,14 +17310,6 @@ const bannerNotificationStyles = {
|
|
17120
17310
|
pointerEvents: 'auto' // to allow the dismissal or error and warning bars in the notification container
|
17121
17311
|
}
|
17122
17312
|
};
|
17123
|
-
/**
|
17124
|
-
* @private
|
17125
|
-
*/
|
17126
|
-
const callArrangementContainerStyles = {
|
17127
|
-
root: {
|
17128
|
-
flexDirection: 'column-reverse' // to allow first initial keyboard focus on ControlBar
|
17129
|
-
}
|
17130
|
-
};
|
17131
17313
|
|
17132
17314
|
// Copyright (c) Microsoft Corporation.
|
17133
17315
|
/**
|
@@ -17706,7 +17888,21 @@ function PeoplePaneAddPersonIconTrampoline() {
|
|
17706
17888
|
const AddPeopleButton = (props) => {
|
17707
17889
|
const { inviteLink, mobileView, strings, participantList } = props;
|
17708
17890
|
const theme = react.useTheme();
|
17891
|
+
const [copyInviteLinkAnnouncerStrings, setCopyInviteLinkAnnouncerStrings] = React.useState('');
|
17709
17892
|
React.useMemo(() => react.concatStyleSets(copyLinkButtonStyles, themedCopyLinkButtonStyles$1(mobileView, theme)), [mobileView, theme]);
|
17893
|
+
/**
|
17894
|
+
* sets the announcement string for when the link is copied.
|
17895
|
+
*/
|
17896
|
+
React.useCallback(() => {
|
17897
|
+
setCopyInviteLinkAnnouncerStrings(strings.copyInviteLinkActionedAriaLabel);
|
17898
|
+
/**
|
17899
|
+
* Clears the announcer string after the user clicks the
|
17900
|
+
* copyInviteLink button allowing it to be re-announced.
|
17901
|
+
*/
|
17902
|
+
setTimeout(() => {
|
17903
|
+
setCopyInviteLinkAnnouncerStrings('');
|
17904
|
+
}, 3000);
|
17905
|
+
}, [strings.copyInviteLinkActionedAriaLabel]);
|
17710
17906
|
/* @conditional-compile-remove(PSTN-calls) */
|
17711
17907
|
if (mobileView) {
|
17712
17908
|
return (React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink, onAddParticipant: props.onAddParticipant, alternateCallerId: props.alternateCallerId }));
|
@@ -17878,7 +18074,7 @@ const hiddenStyles = {
|
|
17878
18074
|
*/
|
17879
18075
|
const sidePaneStyles = {
|
17880
18076
|
root: {
|
17881
|
-
height: '
|
18077
|
+
height: 'auto',
|
17882
18078
|
padding: '0.5rem 0.25rem',
|
17883
18079
|
maxWidth: '21.5rem'
|
17884
18080
|
}
|
@@ -18109,29 +18305,29 @@ const CallArrangement = (props) => {
|
|
18109
18305
|
/* @conditional-compile-remove(rooms) */
|
18110
18306
|
// TODO: move this logic to the error bar selector once role is plumbed from the headless SDK
|
18111
18307
|
if (!rolePermissions.cameraButton && props.errorBarProps) {
|
18112
|
-
errorBarProps = Object.assign(Object.assign({}, props.errorBarProps), { activeErrorMessages: props.errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied') });
|
18308
|
+
errorBarProps = Object.assign(Object.assign({}, props.errorBarProps), { activeErrorMessages: props.errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari') });
|
18113
18309
|
}
|
18114
18310
|
return (React__default['default'].createElement("div", { ref: containerRef, className: react.mergeStyles(containerDivStyles) },
|
18115
18311
|
React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
|
18116
|
-
React__default['default'].createElement(react.Stack, { horizontal: true, grow: true
|
18312
|
+
React__default['default'].createElement(react.Stack, { horizontal: true, grow: true },
|
18117
18313
|
React__default['default'].createElement(react.Stack.Item, { styles: notificationsContainerStyles },
|
18118
18314
|
React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
|
18119
18315
|
React__default['default'].createElement(_ComplianceBanner, Object.assign({}, props.complianceBannerProps))),
|
18120
18316
|
errorBarProps !== false && (React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
|
18121
18317
|
React__default['default'].createElement(ErrorBar, Object.assign({}, errorBarProps)))),
|
18122
18318
|
canUnmute && !!props.mutedNotificationProps && React__default['default'].createElement(MutedNotification, Object.assign({}, props.mutedNotificationProps))),
|
18123
|
-
((_b = props.callControlProps) === null || _b === void 0 ? void 0 : _b.options) !== false &&
|
18124
|
-
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18125
|
-
!isMobileWithActivePane && (React__default['default'].createElement(react.Stack.Item, { className: callControlsContainerStyles },
|
18126
|
-
React__default['default'].createElement(CallControls, Object.assign({}, props.callControlProps, { containerWidth: containerWidth, containerHeight: containerHeight, isMobile: props.mobileView,
|
18127
|
-
/* @conditional-compile-remove(one-to-n-calling) */
|
18128
|
-
peopleButtonChecked: activePane === 'people',
|
18129
|
-
/* @conditional-compile-remove(one-to-n-calling) */
|
18130
|
-
onPeopleButtonClicked: togglePeoplePane })))),
|
18131
18319
|
React__default['default'].createElement(react.Stack.Item, { grow: true, style: callCompositeContainerFlex() },
|
18132
18320
|
React__default['default'].createElement(react.Stack.Item, { styles: callGalleryStyles, grow: true }, props.onRenderGalleryContent && (React__default['default'].createElement(react.Stack, { verticalFill: true, styles: mediaGalleryContainerStyles }, props.onRenderGalleryContent())))),
|
18133
18321
|
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18134
|
-
callPaneContent())
|
18322
|
+
callPaneContent()),
|
18323
|
+
((_b = props.callControlProps) === null || _b === void 0 ? void 0 : _b.options) !== false &&
|
18324
|
+
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18325
|
+
!isMobileWithActivePane && (React__default['default'].createElement(react.Stack.Item, { className: callControlsContainerStyles },
|
18326
|
+
React__default['default'].createElement(CallControls, Object.assign({}, props.callControlProps, { containerWidth: containerWidth, containerHeight: containerHeight, isMobile: props.mobileView,
|
18327
|
+
/* @conditional-compile-remove(one-to-n-calling) */
|
18328
|
+
peopleButtonChecked: activePane === 'people',
|
18329
|
+
/* @conditional-compile-remove(one-to-n-calling) */
|
18330
|
+
onPeopleButtonClicked: togglePeoplePane })))))));
|
18135
18331
|
};
|
18136
18332
|
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
18137
18333
|
const showShowPeopleTabHeaderButton$1 = (callControls) => {
|
@@ -19087,18 +19283,26 @@ const DRAWER_HIGH_Z_BAND = 99; // setting z index to 99 so that it sit above al
|
|
19087
19283
|
* @private
|
19088
19284
|
*/
|
19089
19285
|
const CallReadinessModal = (props) => {
|
19090
|
-
const { mobileView,
|
19286
|
+
const { mobileView, permissionsState,
|
19287
|
+
/* @conditional-compile-remove(unsupported-browser) */ environmentInfo, isPermissionsModalDismissed, setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick } = props;
|
19091
19288
|
const onLightDismissTriggered = () => {
|
19092
19289
|
// do nothing here
|
19093
19290
|
// only way to dismiss this drawer is clicking on allow access which will leads to device permission prompt
|
19094
19291
|
};
|
19292
|
+
// 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)
|
19293
|
+
const videoState = permissionsState.camera;
|
19294
|
+
const audioState = permissionsState.microphone;
|
19095
19295
|
const showModal = videoState === 'denied' || videoState === 'prompt' || audioState === 'denied' || audioState === 'prompt';
|
19296
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19297
|
+
const isSafari = _isSafari(environmentInfo);
|
19096
19298
|
const modal = !showModal
|
19097
19299
|
? undefined
|
19098
19300
|
: () => {
|
19099
19301
|
// if both video and audio permission are not set
|
19100
19302
|
if (videoState === 'prompt' && audioState === 'prompt') {
|
19101
|
-
return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19303
|
+
return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19304
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19305
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19102
19306
|
? () => {
|
19103
19307
|
onPermissionsTroubleshootingClick(permissionsState);
|
19104
19308
|
}
|
@@ -19106,7 +19310,9 @@ const CallReadinessModal = (props) => {
|
|
19106
19310
|
}
|
19107
19311
|
// if audio permission is set up but video is not
|
19108
19312
|
else if (videoState === 'prompt') {
|
19109
|
-
return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
|
19313
|
+
return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
|
19314
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19315
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19110
19316
|
? () => {
|
19111
19317
|
onPermissionsTroubleshootingClick(permissionsState);
|
19112
19318
|
}
|
@@ -19116,7 +19322,9 @@ const CallReadinessModal = (props) => {
|
|
19116
19322
|
}
|
19117
19323
|
// if video permission is set up but audio is not
|
19118
19324
|
else if (audioState === 'prompt') {
|
19119
|
-
return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
|
19325
|
+
return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
|
19326
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19327
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19120
19328
|
? () => {
|
19121
19329
|
onPermissionsTroubleshootingClick(permissionsState);
|
19122
19330
|
}
|
@@ -19124,7 +19332,9 @@ const CallReadinessModal = (props) => {
|
|
19124
19332
|
}
|
19125
19333
|
// if both video and audio are denied
|
19126
19334
|
else if (videoState === 'denied' && audioState === 'denied') {
|
19127
|
-
return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19335
|
+
return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19336
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19337
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19128
19338
|
? () => {
|
19129
19339
|
onPermissionsTroubleshootingClick(permissionsState);
|
19130
19340
|
}
|
@@ -19132,7 +19342,9 @@ const CallReadinessModal = (props) => {
|
|
19132
19342
|
}
|
19133
19343
|
// if only video is denied
|
19134
19344
|
else if (videoState === 'denied') {
|
19135
|
-
return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
|
19345
|
+
return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
|
19346
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19347
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19136
19348
|
? () => {
|
19137
19349
|
onPermissionsTroubleshootingClick(permissionsState);
|
19138
19350
|
}
|
@@ -19142,7 +19354,9 @@ const CallReadinessModal = (props) => {
|
|
19142
19354
|
}
|
19143
19355
|
// if only audio is denied
|
19144
19356
|
else {
|
19145
|
-
return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
|
19357
|
+
return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
|
19358
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19359
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19146
19360
|
? () => {
|
19147
19361
|
onPermissionsTroubleshootingClick(permissionsState);
|
19148
19362
|
}
|
@@ -19168,26 +19382,35 @@ const CallReadinessModal = (props) => {
|
|
19168
19382
|
* @private
|
19169
19383
|
*/
|
19170
19384
|
const CallReadinessModalFallBack = (props) => {
|
19171
|
-
const { mobileView,
|
19385
|
+
const { mobileView, checkPermissionModalShowing, permissionsState,
|
19386
|
+
/* @conditional-compile-remove(unsupported-browser) */ environmentInfo, isPermissionsModalDismissed, setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick } = props;
|
19172
19387
|
const onLightDismissTriggered = () => {
|
19173
19388
|
// do nothing here
|
19174
19389
|
// only way to dismiss this drawer is clicking on allow access which will leads to device permission prompt
|
19175
19390
|
};
|
19176
|
-
|
19177
|
-
|
19178
|
-
|
19391
|
+
const videoState = permissionsState.camera;
|
19392
|
+
const audioState = permissionsState.microphone;
|
19393
|
+
// When permissions are not set, do nothing here
|
19394
|
+
// When permissions are set to denied, show helper screen
|
19395
|
+
const showModal = videoState === 'denied' || audioState === 'denied';
|
19396
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19397
|
+
const isSafari = _isSafari(environmentInfo);
|
19179
19398
|
const modal = !showModal
|
19180
19399
|
? undefined
|
19181
19400
|
: () => {
|
19182
|
-
if (
|
19183
|
-
return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19401
|
+
if (videoState === 'denied' && audioState === 'denied') {
|
19402
|
+
return (React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19403
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19404
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19184
19405
|
? () => {
|
19185
19406
|
onPermissionsTroubleshootingClick(permissionsState);
|
19186
19407
|
}
|
19187
19408
|
: undefined, type: "denied" }));
|
19188
19409
|
}
|
19189
|
-
else if (
|
19190
|
-
return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
|
19410
|
+
else if (videoState === 'denied' && audioState === 'granted') {
|
19411
|
+
return (React__default['default'].createElement(CameraDomainPermissions, { appName: 'app',
|
19412
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19413
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19191
19414
|
? () => {
|
19192
19415
|
onPermissionsTroubleshootingClick(permissionsState);
|
19193
19416
|
}
|
@@ -19196,7 +19419,9 @@ const CallReadinessModalFallBack = (props) => {
|
|
19196
19419
|
}, type: "denied" }));
|
19197
19420
|
}
|
19198
19421
|
else {
|
19199
|
-
return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
|
19422
|
+
return (React__default['default'].createElement(MicrophoneDomainPermissions, { appName: 'app',
|
19423
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19424
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19200
19425
|
? () => {
|
19201
19426
|
onPermissionsTroubleshootingClick(permissionsState);
|
19202
19427
|
}
|
@@ -19205,10 +19430,10 @@ const CallReadinessModalFallBack = (props) => {
|
|
19205
19430
|
};
|
19206
19431
|
if (mobileView) {
|
19207
19432
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
19208
|
-
(checkPermissionModalShowing ||
|
19209
|
-
|
19210
|
-
|
19211
|
-
|
19433
|
+
(checkPermissionModalShowing || audioState === 'prompt' || videoState === 'prompt') && (React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) },
|
19434
|
+
React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19435
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19436
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19212
19437
|
? () => {
|
19213
19438
|
onPermissionsTroubleshootingClick(permissionsState);
|
19214
19439
|
}
|
@@ -19217,12 +19442,12 @@ const CallReadinessModalFallBack = (props) => {
|
|
19217
19442
|
}
|
19218
19443
|
else {
|
19219
19444
|
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: () => {
|
19445
|
+
(checkPermissionModalShowing || audioState === 'prompt' || videoState === 'prompt') && (React__default['default'].createElement(react.Modal, { isOpen: isPermissionsModalDismissed, isBlocking: false, onDismiss: () => {
|
19223
19446
|
setIsPermissionsModalDismissed(false);
|
19224
19447
|
}, overlay: { styles: { root: { background: 'rgba(0,0,0,0.9)' } } } },
|
19225
|
-
React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19448
|
+
React__default['default'].createElement(CameraAndMicrophoneDomainPermissions, { appName: 'app',
|
19449
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19450
|
+
browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
19226
19451
|
? () => {
|
19227
19452
|
onPermissionsTroubleshootingClick(permissionsState);
|
19228
19453
|
}
|
@@ -19257,13 +19482,15 @@ const ConfigurationPage = (props) => {
|
|
19257
19482
|
let errorBarProps = usePropsFor$1(ErrorBar);
|
19258
19483
|
const adapter = useAdapter();
|
19259
19484
|
const deviceState = adapter.getState().devices;
|
19485
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19486
|
+
const environmentInfo = adapter.getState().environmentInfo;
|
19260
19487
|
let disableStartCallButton = !microphonePermissionGranted || ((_a = deviceState.microphones) === null || _a === void 0 ? void 0 : _a.length) === 0;
|
19261
19488
|
/* @conditional-compile-remove(rooms) */
|
19262
19489
|
const rolePermissions = _usePermissions();
|
19263
19490
|
/* @conditional-compile-remove(rooms) */
|
19264
19491
|
// TODO: move this logic to the error bar selector once role is plumbed from the headless SDK
|
19265
19492
|
if (!rolePermissions.cameraButton) {
|
19266
|
-
errorBarProps = Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied') });
|
19493
|
+
errorBarProps = Object.assign(Object.assign({}, errorBarProps), { activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied' && e.type !== 'callCameraAccessDeniedSafari') });
|
19267
19494
|
}
|
19268
19495
|
/* @conditional-compile-remove(rooms) */
|
19269
19496
|
if (!rolePermissions.microphoneButton) {
|
@@ -19291,8 +19518,24 @@ const ConfigurationPage = (props) => {
|
|
19291
19518
|
/* @conditional-compile-remove(call-readiness) */
|
19292
19519
|
const permissionsState = {
|
19293
19520
|
// fall back to using cameraPermissionGranted and microphonePermissionGranted if permission API is not supported
|
19294
|
-
camera: videoState && videoState !== 'unsupported'
|
19295
|
-
|
19521
|
+
camera: videoState && videoState !== 'unsupported'
|
19522
|
+
? cameraPermissionGranted !== false
|
19523
|
+
? videoState
|
19524
|
+
: 'denied'
|
19525
|
+
: cameraPermissionGranted !== false
|
19526
|
+
? cameraPermissionGranted
|
19527
|
+
? 'granted'
|
19528
|
+
: 'prompt'
|
19529
|
+
: 'denied',
|
19530
|
+
microphone: audioState && audioState !== 'unsupported'
|
19531
|
+
? microphonePermissionGranted !== false
|
19532
|
+
? audioState
|
19533
|
+
: 'denied'
|
19534
|
+
: microphonePermissionGranted !== false
|
19535
|
+
? microphonePermissionGranted
|
19536
|
+
? 'granted'
|
19537
|
+
: 'prompt'
|
19538
|
+
: 'denied'
|
19296
19539
|
};
|
19297
19540
|
/* @conditional-compile-remove(call-readiness) */
|
19298
19541
|
const networkErrors = errorBarProps.activeErrorMessages.filter((message) => message.type === 'callNetworkQualityLow');
|
@@ -19331,13 +19574,17 @@ const ConfigurationPage = (props) => {
|
|
19331
19574
|
videoState &&
|
19332
19575
|
videoState !== 'unsupported' &&
|
19333
19576
|
audioState &&
|
19334
|
-
audioState !== 'unsupported' && (React__default['default'].createElement(CallReadinessModal, { mobileView: mobileView,
|
19577
|
+
audioState !== 'unsupported' && (React__default['default'].createElement(CallReadinessModal, { mobileView: mobileView,
|
19578
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19579
|
+
environmentInfo: environmentInfo, permissionsState: permissionsState, isPermissionsModalDismissed: isPermissionsModalDismissed, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
|
19335
19580
|
/* @conditional-compile-remove(call-readiness) */
|
19336
19581
|
// show the following screen if permission API is not availible (unsupported) and videoState, audioState is assigned values
|
19337
19582
|
callReadinessOptedIn &&
|
19338
19583
|
videoState &&
|
19339
19584
|
audioState &&
|
19340
|
-
(videoState === 'unsupported' || audioState === 'unsupported') && (React__default['default'].createElement(CallReadinessModalFallBack, { mobileView: mobileView,
|
19585
|
+
(videoState === 'unsupported' || audioState === 'unsupported') && (React__default['default'].createElement(CallReadinessModalFallBack, { mobileView: mobileView, checkPermissionModalShowing: forceShowingCheckPermissions, permissionsState: permissionsState, isPermissionsModalDismissed: isPermissionsModalDismissed,
|
19586
|
+
/* @conditional-compile-remove(unsupported-browser) */
|
19587
|
+
environmentInfo: environmentInfo, setIsPermissionsModalDismissed: setIsPermissionsModalDismissed, onPermissionsTroubleshootingClick: onPermissionsTroubleshootingClick })),
|
19341
19588
|
React__default['default'].createElement(react.Stack, { grow: true, horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalAlign: "center", tokens: mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop },
|
19342
19589
|
mobileWithPreview && (React__default['default'].createElement(react.Stack.Item, null,
|
19343
19590
|
title,
|
@@ -19779,7 +20026,7 @@ const UnsupportedBrowserPage = (props) => {
|
|
19779
20026
|
pageElement = (React__default['default'].createElement(UnsupportedBrowser, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserStrings }));
|
19780
20027
|
}
|
19781
20028
|
else if (!(environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowserVersion)) {
|
19782
|
-
pageElement = (React__default['default'].createElement(UnsupportedBrowserVersion, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserVersionStrings,
|
20029
|
+
pageElement = (React__default['default'].createElement(UnsupportedBrowserVersion, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserVersionStrings, onContinueAnywayClick: onContinueClick }));
|
19783
20030
|
}
|
19784
20031
|
else {
|
19785
20032
|
throw new Error('There was a problem with your environment info');
|
@@ -21122,50 +21369,6 @@ const DesktopMoreButton = (props) => {
|
|
21122
21369
|
strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: { items: moreButtonContextualMenuItems() } })));
|
21123
21370
|
};
|
21124
21371
|
|
21125
|
-
// Copyright (c) Microsoft Corporation.
|
21126
|
-
// Licensed under the MIT license.
|
21127
|
-
/**
|
21128
|
-
* @private
|
21129
|
-
*/
|
21130
|
-
const compositeOuterContainerStyles = {
|
21131
|
-
root: {
|
21132
|
-
width: '100%',
|
21133
|
-
// Create a new stacking context so that DrawerMenu can be positioned absolutely.
|
21134
|
-
position: 'relative'
|
21135
|
-
}
|
21136
|
-
};
|
21137
|
-
/** @private */
|
21138
|
-
const callCompositeContainerStyles = {
|
21139
|
-
root: {
|
21140
|
-
// Start a new stacking context so that any `position:absolute` elements
|
21141
|
-
// inside the call composite do not compete with its siblings.
|
21142
|
-
position: 'relative'
|
21143
|
-
}
|
21144
|
-
};
|
21145
|
-
/** @private */
|
21146
|
-
const controlBarContainerStyles = {
|
21147
|
-
root: {
|
21148
|
-
// Start a new stacking context so that any `position:absolute` elements
|
21149
|
-
// inside the control bar do not compete with its siblings.
|
21150
|
-
position: 'relative'
|
21151
|
-
}
|
21152
|
-
};
|
21153
|
-
/** @private */
|
21154
|
-
const hiddenAutoFocusButtonStyles = {
|
21155
|
-
root: {
|
21156
|
-
width: '0',
|
21157
|
-
height: '0',
|
21158
|
-
margin: '0',
|
21159
|
-
minHeight: '0',
|
21160
|
-
minWidth: '0',
|
21161
|
-
maxHeight: '0',
|
21162
|
-
maxWidth: '0',
|
21163
|
-
outline: 'none',
|
21164
|
-
padding: '0',
|
21165
|
-
position: 'absolute'
|
21166
|
-
}
|
21167
|
-
};
|
21168
|
-
|
21169
21372
|
// Copyright (c) Microsoft Corporation.
|
21170
21373
|
const inferCallWithChatControlOptions$1 = (mobileView, callWithChatControls) => {
|
21171
21374
|
if (callWithChatControls === false) {
|
@@ -21188,13 +21391,6 @@ const inferCallWithChatControlOptions$1 = (mobileView, callWithChatControls) =>
|
|
21188
21391
|
*/
|
21189
21392
|
const CallWithChatControlBar = (props) => {
|
21190
21393
|
var _a, _b;
|
21191
|
-
React.useEffect(() => {
|
21192
|
-
var _a;
|
21193
|
-
// On mount, button used for initial focus is hidden to prevent screen readers from announcing the initial focus
|
21194
|
-
if (document.querySelector('[data-ui-id=call-with-chat-autofocus-hidden-button]') === document.activeElement) {
|
21195
|
-
(_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.setAttribute('hidden', 'true');
|
21196
|
-
}
|
21197
|
-
}, []);
|
21198
21394
|
const theme = react.useTheme();
|
21199
21395
|
const callWithChatStrings = useCallWithChatCompositeStrings();
|
21200
21396
|
const options = inferCallWithChatControlOptions$1(props.mobileView, props.callControls);
|
@@ -21235,7 +21431,6 @@ const CallWithChatControlBar = (props) => {
|
|
21235
21431
|
React__default['default'].createElement(react.Stack.Item, { grow: true },
|
21236
21432
|
React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
|
21237
21433
|
React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
|
21238
|
-
React__default['default'].createElement(ControlBarButton, { autoFocus: true, ariaHidden: true, "data-ui-id": 'call-with-chat-autofocus-hidden-button', styles: hiddenAutoFocusButtonStyles, tabIndex: -1 }),
|
21239
21434
|
React__default['default'].createElement(react.Stack.Item, null,
|
21240
21435
|
React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: centerContainerStyles },
|
21241
21436
|
isEnabled$1(options.microphoneButton) && (React__default['default'].createElement(Microphone, { displayType: options.displayType, styles: commonButtonStyles, splitButtonsForDeviceSelection: !props.mobileView,
|
@@ -21342,6 +21537,35 @@ const getDesktopEndCallButtonStyles = (theme) => {
|
|
21342
21537
|
};
|
21343
21538
|
const isEnabled$1 = (option) => option !== false;
|
21344
21539
|
|
21540
|
+
// Copyright (c) Microsoft Corporation.
|
21541
|
+
// Licensed under the MIT license.
|
21542
|
+
/**
|
21543
|
+
* @private
|
21544
|
+
*/
|
21545
|
+
const compositeOuterContainerStyles = {
|
21546
|
+
root: {
|
21547
|
+
width: '100%',
|
21548
|
+
// Create a new stacking context so that DrawerMenu can be positioned absolutely.
|
21549
|
+
position: 'relative'
|
21550
|
+
}
|
21551
|
+
};
|
21552
|
+
/** @private */
|
21553
|
+
const callCompositeContainerStyles = {
|
21554
|
+
root: {
|
21555
|
+
// Start a new stacking context so that any `position:absolute` elements
|
21556
|
+
// inside the call composite do not compete with its siblings.
|
21557
|
+
position: 'relative'
|
21558
|
+
}
|
21559
|
+
};
|
21560
|
+
/** @private */
|
21561
|
+
const controlBarContainerStyles = {
|
21562
|
+
root: {
|
21563
|
+
// Start a new stacking context so that any `position:absolute` elements
|
21564
|
+
// inside the control bar do not compete with its siblings.
|
21565
|
+
position: 'relative'
|
21566
|
+
}
|
21567
|
+
};
|
21568
|
+
|
21345
21569
|
// Copyright (c) Microsoft Corporation.
|
21346
21570
|
// Licensed under the MIT license.
|
21347
21571
|
var __awaiter$3 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|