@azure/communication-react 1.3.3-alpha-202209210019.0 → 1.3.3-alpha-202209220018.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/communication-react.d.ts +39 -2
  2. package/dist/dist-cjs/communication-react/index.js +88 -25
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/react-components/src/components/DomainPermissions.js +9 -9
  7. package/dist/dist-esm/react-components/src/components/DomainPermissions.js.map +1 -1
  8. package/dist/dist-esm/react-components/src/components/styles/DomainPermissions.styles.d.ts +2 -2
  9. package/dist/dist-esm/react-components/src/components/styles/DomainPermissions.styles.js +6 -8
  10. package/dist/dist-esm/react-components/src/components/styles/DomainPermissions.styles.js.map +1 -1
  11. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +9 -9
  12. package/dist/dist-esm/react-components/src/theming/icons.d.ts +3 -1
  13. package/dist/dist-esm/react-components/src/theming/icons.js +24 -2
  14. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  15. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +27 -0
  16. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +29 -3
  17. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  18. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +1 -0
  19. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
  20. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.d.ts +2 -0
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +13 -2
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +6 -0
  24. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +8 -2
  25. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  26. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +3 -1
  27. package/package.json +9 -9
@@ -969,6 +969,11 @@ export declare type CallCompositeOptions = {
969
969
  * @defaultValue true
970
970
  */
971
971
  callControls?: boolean | CallControlOptions;
972
+ /**
973
+ * Device permission restrictions for your call.
974
+ * Require device permissions to be set or have them as optional or not required to start a call
975
+ */
976
+ devicePermissions?: DevicePermissionRestrictions;
972
977
  /**
973
978
  * Callback you may provide to supply users with further steps to troubleshoot why they have been
974
979
  * unable to grant your site the required permissions for the call.
@@ -2154,6 +2159,11 @@ export declare type CallWithChatCompositeOptions = {
2154
2159
  * @beta
2155
2160
  */
2156
2161
  fileSharing?: FileSharingOptions;
2162
+ /**
2163
+ * Device permission restrictions for your call.
2164
+ * Require device permissions to be set or have them as optional or not required to start a call
2165
+ */
2166
+ devicePermissions?: DevicePermissionRestrictions;
2157
2167
  /**
2158
2168
  * Callback you may provide to supply users with further steps to troubleshoot why they have been
2159
2169
  * unable to grant your site the required permissions for the call.
@@ -4034,7 +4044,9 @@ export declare const DEFAULT_COMPONENT_ICONS: {
4034
4044
  SendBoxSendHovered: JSX.Element;
4035
4045
  VideoTileMicOff: JSX.Element;
4036
4046
  BackSpace: JSX.Element;
4037
- iconBackdrop: JSX.Element;
4047
+ DomainPermissionsSparkle: JSX.Element;
4048
+ DomainPermissionCamera: JSX.Element;
4049
+ DomainPermissionMic: JSX.Element;
4038
4050
  UnsupportedBrowserWarning: JSX.Element;
4039
4051
  };
4040
4052
 
@@ -4124,7 +4136,9 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
4124
4136
  HoldCallButton: JSX.Element;
4125
4137
  ResumeCall: JSX.Element;
4126
4138
  BackSpace: JSX.Element;
4127
- iconBackdrop: JSX.Element;
4139
+ DomainPermissionsSparkle: JSX.Element;
4140
+ DomainPermissionCamera: JSX.Element;
4141
+ DomainPermissionMic: JSX.Element;
4128
4142
  UnsupportedBrowserWarning: JSX.Element;
4129
4143
  };
4130
4144
 
@@ -4183,6 +4197,29 @@ export declare type DeviceManagerState = {
4183
4197
  unparentedViews: LocalVideoStreamState[];
4184
4198
  };
4185
4199
 
4200
+ /**
4201
+ * Device Permission restrictions.
4202
+ * Be able to start a call depending on camera and microphone permission options.
4203
+ *
4204
+ * @beta
4205
+ */
4206
+ export declare interface DevicePermissionRestrictions {
4207
+ /**
4208
+ * Camera Permission prompts for your call.
4209
+ * 'required' - requires the permission to be allowed before permitting the user join the call.
4210
+ * 'optional' - permission can be disallowed and the user is still permitted to join the call.
4211
+ * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.
4212
+ */
4213
+ camera: 'required' | 'optional' | 'doNotPrompt';
4214
+ /**
4215
+ * Microphone permission prompts for your call.
4216
+ * 'required' - requires the permission to be allowed before permitting the user join the call.
4217
+ * 'optional' - permission can be disallowed and the user is still permitted to join the call.
4218
+ * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.
4219
+ */
4220
+ microphone: 'required' | 'optional' | 'doNotPrompt';
4221
+ }
4222
+
4186
4223
  /**
4187
4224
  * A button to open a menu that controls device options.
4188
4225
  *
@@ -192,7 +192,7 @@ const fromFlatCommunicationIdentifier = (id) => {
192
192
  // Copyright (c) Microsoft Corporation.
193
193
  // Licensed under the MIT license.
194
194
  // GENERATED FILE. DO NOT EDIT MANUALLY.
195
- var telemetryVersion = '1.3.3-alpha-202209210019.0';
195
+ var telemetryVersion = '1.3.3-alpha-202209220018.0';
196
196
 
197
197
  // Copyright (c) Microsoft Corporation.
198
198
  /**
@@ -978,7 +978,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
978
978
  wordBreak: 'break-word'
979
979
  });
980
980
 
981
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$d={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var DomainPermissions$1={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"More help"};var UnsupportedBrowser$1={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLink:"More help"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton,videoTile:videoTile,DomainPermissions:DomainPermissions$1,UnsupportedBrowser:UnsupportedBrowser$1};
981
+ var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$d={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var DomainPermissions$1={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"More help"};var UnsupportedBrowser$1={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLink:"More help"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton,videoTile:videoTile,DomainPermissions:DomainPermissions$1,UnsupportedBrowser:UnsupportedBrowser$1};
982
982
 
983
983
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};var typingIndicator$c={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$c={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait."};var messageStatusIndicator$c={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$c={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$c={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$c={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$c={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$c={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$c={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$c={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options"};var errorBar$c={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$c={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad$c={placeholderText:"Enter a number"};var HoldButton$d={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};var en_GB$1 = {participantItem:participantItem$c,typingIndicator:typingIndicator$c,sendBox:sendBox$c,messageStatusIndicator:messageStatusIndicator$c,endCallButton:endCallButton$c,cameraButton:cameraButton$c,microphoneButton:microphoneButton$c,devicesButton:devicesButton$c,participantsButton:participantsButton$c,screenShareButton:screenShareButton$c,messageThread:messageThread$c,errorBar:errorBar$c,videoGallery:videoGallery$c,dialpad:dialpad$c,HoldButton:HoldButton$d};
984
984
 
@@ -1944,6 +1944,23 @@ const MoreHorizontal18Regular = () => (
1944
1944
  // MoreHorizontal icons are 16px x 16px or 20px x 20px so scaling to get desired size
1945
1945
  React__default['default'].createElement("div", { className: react.mergeStyles({ transform: 'scale(0.9)' }) },
1946
1946
  React__default['default'].createElement(reactIcons.MoreHorizontal20Regular, null)));
1947
+ /* @conditional-compile-remove(call-readiness) */
1948
+ const DomainPermissionMic20Filled = () => {
1949
+ const theme = useTheme();
1950
+ return (React__default['default'].createElement(react.Stack, { horizontalAlign: 'center', styles: { root: { borderRadius: '100%', background: theme.palette.themeLighterAlt, padding: '2rem' } } },
1951
+ React__default['default'].createElement("div", { className: react.mergeStyles(scaledIconStyles(theme)) },
1952
+ React__default['default'].createElement(reactIcons.MicOn20Filled, null))));
1953
+ };
1954
+ /* @conditional-compile-remove(call-readiness) */
1955
+ const DomainPermissionCamera20Filled = () => {
1956
+ const theme = useTheme();
1957
+ return (React__default['default'].createElement(react.Stack, { horizontalAlign: 'center', styles: { root: { borderRadius: '100%', background: theme.palette.themeLighterAlt, padding: '2rem' } } },
1958
+ React__default['default'].createElement("div", { className: react.mergeStyles(scaledIconStyles(theme)) },
1959
+ React__default['default'].createElement(reactIcons.Video20Filled, null))));
1960
+ };
1961
+ /* @conditional-compile-remove(call-readiness) */
1962
+ const DomainPermissionSparkle20Filled = () => (React__default['default'].createElement("div", { className: react.mergeStyles({ transform: 'scale(2)' }) },
1963
+ React__default['default'].createElement(reactIcons.Sparkle20Filled, null)));
1947
1964
  /* @conditional-compile-remove(unsupported-browser) */
1948
1965
  const UnsupportedBrowserWarning = () => {
1949
1966
  const theme = useTheme();
@@ -2027,7 +2044,11 @@ const DEFAULT_COMPONENT_ICONS = {
2027
2044
  /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
2028
2045
  BackSpace: React__default['default'].createElement(reactIcons.Backspace20Regular, null),
2029
2046
  /* @conditional-compile-remove(call-readiness) */
2030
- iconBackdrop: React__default['default'].createElement(reactIcons.Circle24Filled, null),
2047
+ DomainPermissionsSparkle: React__default['default'].createElement(DomainPermissionSparkle20Filled, null),
2048
+ /* @conditional-compile-remove(call-readiness) */
2049
+ DomainPermissionCamera: React__default['default'].createElement(DomainPermissionCamera20Filled, null),
2050
+ /* @conditional-compile-remove(call-readiness) */
2051
+ DomainPermissionMic: React__default['default'].createElement(DomainPermissionMic20Filled, null),
2031
2052
  /* @conditional-compile-remove(unsupported-browser) */
2032
2053
  UnsupportedBrowserWarning: React__default['default'].createElement(UnsupportedBrowserWarning, null)
2033
2054
  };
@@ -2038,6 +2059,7 @@ const scaledIconStyles = (theme) => {
2038
2059
  display: 'flex',
2039
2060
  justifyContent: 'center',
2040
2061
  alignItems: 'center',
2062
+ lineHeight: '0.2rem',
2041
2063
  color: theme.palette.themePrimary,
2042
2064
  zIndex: 1
2043
2065
  };
@@ -7081,9 +7103,6 @@ const textContainerStyles = {
7081
7103
  */
7082
7104
  const iconPrimaryStyles = {
7083
7105
  root: {
7084
- position: 'absolute',
7085
- color: '#2B88D8',
7086
- transform: 'scale(2)',
7087
7106
  zIndex: 1,
7088
7107
  margin: 'auto'
7089
7108
  }
@@ -7091,11 +7110,12 @@ const iconPrimaryStyles = {
7091
7110
  /**
7092
7111
  * @internal
7093
7112
  */
7094
- const iconBackDropStyles = {
7095
- root: {
7096
- color: '#EFF6FC',
7097
- transform: 'scale(4)'
7098
- }
7113
+ const sparkleIconBackdropStyles = (theme) => {
7114
+ return {
7115
+ root: {
7116
+ color: theme.palette.themeLighterAlt
7117
+ }
7118
+ };
7099
7119
  };
7100
7120
  /**
7101
7121
  * @internal
@@ -7133,15 +7153,15 @@ const linkTextStyles$1 = {
7133
7153
  /* @conditional-compile-remove(call-readiness) */
7134
7154
  const DomainPermissionsContainer = (props) => {
7135
7155
  const { appName, onTroubleshootingClick, strings } = props;
7156
+ const theme = react.useTheme();
7136
7157
  return (React__default['default'].createElement(react.Stack, { style: { padding: '2rem', maxWidth: '25.375rem' } },
7137
- React__default['default'].createElement(react.Stack, { horizontal: true, style: { padding: '2rem 0' }, horizontalAlign: 'space-between' },
7158
+ React__default['default'].createElement(react.Stack, { horizontal: true, style: { paddingBottom: '1rem' }, horizontalAlign: 'space-between' },
7159
+ React__default['default'].createElement(react.Stack, { styles: iconContainerStyles, horizontalAlign: 'center' },
7160
+ React__default['default'].createElement(react.Icon, { styles: iconPrimaryStyles, iconName: 'DomainPermissionCamera' })),
7138
7161
  React__default['default'].createElement(react.Stack, { styles: iconContainerStyles, horizontalAlign: 'center' },
7139
- React__default['default'].createElement(react.Icon, { styles: iconPrimaryStyles, iconName: 'ControlButtonCameraOn' }),
7140
- React__default['default'].createElement(react.Icon, { styles: iconBackDropStyles, iconName: 'iconBackdrop' })),
7141
- React__default['default'].createElement(react.Icon, { styles: iconPrimaryStyles, iconName: 'Sparkle' }),
7162
+ React__default['default'].createElement(react.Icon, { styles: sparkleIconBackdropStyles(theme), iconName: 'DomainPermissionsSparkle' })),
7142
7163
  React__default['default'].createElement(react.Stack, { styles: iconContainerStyles, horizontalAlign: 'center' },
7143
- React__default['default'].createElement(react.Icon, { styles: iconPrimaryStyles, iconName: 'ControlButtonMicOn' }),
7144
- React__default['default'].createElement(react.Icon, { styles: iconBackDropStyles, iconName: 'iconBackdrop' }))),
7164
+ React__default['default'].createElement(react.Icon, { styles: iconPrimaryStyles, iconName: 'DomainPermissionMic' }))),
7145
7165
  React__default['default'].createElement(react.Stack, { styles: textContainerStyles },
7146
7166
  React__default['default'].createElement(react.Text, { styles: primaryTextStyles }, _formatString(strings.primaryText, { appName: appName })),
7147
7167
  React__default['default'].createElement(react.Text, { styles: secondaryTextStyles$2 }, strings.secondaryText),
@@ -7157,7 +7177,7 @@ const DomainPermissions = (props) => {
7157
7177
  /* @conditional-compile-remove(call-readiness) */
7158
7178
  const locale = useLocale$1().strings.DomainPermissions;
7159
7179
  /* @conditional-compile-remove(call-readiness) */
7160
- return React__default['default'].createElement(DomainPermissionsContainer, Object.assign({}, props, { strings: locale }));
7180
+ return React__default['default'].createElement(DomainPermissionsContainer, Object.assign({}, props, { strings: props.strings ? props.strings : locale }));
7161
7181
  };
7162
7182
 
7163
7183
  // Copyright (c) Microsoft Corporation.
@@ -17389,8 +17409,8 @@ const startCallButtonStyleMobile = react.mergeStyles({
17389
17409
  * @private
17390
17410
  */
17391
17411
  const ConfigurationPage = (props) => {
17392
- var _a;
17393
- const { startCallHandler, mobileView } = props;
17412
+ var _a, _b;
17413
+ const { startCallHandler, mobileView, /* @conditional-compile-remove(call-readiness) */ devicePermissions } = props;
17394
17414
  const options = useAdaptedSelector(getSelector$1(DevicesButton));
17395
17415
  const localDeviceSettingsHandlers = useHandlers();
17396
17416
  const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector$1(devicePermissionSelector);
@@ -17406,6 +17426,17 @@ const ConfigurationPage = (props) => {
17406
17426
  // because microphone device permission is not needed for the user's role
17407
17427
  disableStartCallButton = false;
17408
17428
  }
17429
+ /* @conditional-compile-remove(call-readiness) */
17430
+ // Overrides role permissions if CallCompositeOptions devicePermissions are set
17431
+ if (devicePermissions) {
17432
+ if (['doNotPrompt', 'optional'].includes(devicePermissions.camera) &&
17433
+ ['doNotPrompt', 'optional'].includes(devicePermissions.microphone)) {
17434
+ disableStartCallButton = false;
17435
+ }
17436
+ else if (devicePermissions.camera === 'required') {
17437
+ disableStartCallButton = !cameraPermissionGranted || ((_b = deviceState.cameras) === null || _b === void 0 ? void 0 : _b.length) === 0;
17438
+ }
17439
+ }
17409
17440
  const locale = useLocale();
17410
17441
  const title = (React__default['default'].createElement(react.Stack.Item, { className: mobileView ? titleContainerStyleMobile : titleContainerStyleDesktop }, locale.strings.call.configurationPageTitle));
17411
17442
  const callDescription = locale.strings.call.configurationPageCallDetails && (React__default['default'].createElement(react.Stack.Item, { className: mobileView ? callDetailsStyleMobile : callDetailsStyleDesktop }, locale.strings.call.configurationPageCallDetails));
@@ -17770,6 +17801,7 @@ var __awaiter$5 = (window && window.__awaiter) || function (thisArg, _arguments,
17770
17801
  });
17771
17802
  };
17772
17803
  const MainScreen = (props) => {
17804
+ var _a;
17773
17805
  const { callInvitationUrl, onRenderAvatar, onFetchAvatarPersonaData, onFetchParticipantMenuItems } = props;
17774
17806
  const page = useSelector$1(getPage);
17775
17807
  const adapter = useAdapter();
@@ -17788,7 +17820,9 @@ const MainScreen = (props) => {
17788
17820
  case 'configuration':
17789
17821
  pageElement = (React__default['default'].createElement(ConfigurationPage, { mobileView: props.mobileView, startCallHandler: () => {
17790
17822
  adapter.joinCall();
17791
- } }));
17823
+ },
17824
+ /* @conditional-compile-remove(call-readiness) */
17825
+ devicePermissions: (_a = props.options) === null || _a === void 0 ? void 0 : _a.devicePermissions }));
17792
17826
  break;
17793
17827
  case 'accessDeniedTeamsMeeting':
17794
17828
  pageElement = (React__default['default'].createElement(NoticePage, { iconName: "NoticePageAccessDeniedTeamsMeeting", title: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle, moreDetails: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails, dataUiId: 'access-denied-teams-meeting-page' }));
@@ -17852,12 +17886,33 @@ const CallComposite = (props) => {
17852
17886
  adapter.querySpeakers();
17853
17887
  return;
17854
17888
  }
17889
+ /* @conditional-compile-remove(call-readiness) */
17890
+ if (options === null || options === void 0 ? void 0 : options.devicePermissions) {
17891
+ const videoPermission = (options === null || options === void 0 ? void 0 : options.devicePermissions.camera) !== 'doNotPrompt';
17892
+ const audioPermission = (options === null || options === void 0 ? void 0 : options.devicePermissions.microphone) !== 'doNotPrompt';
17893
+ yield adapter.askDevicePermission({
17894
+ video: videoPermission,
17895
+ audio: audioPermission
17896
+ });
17897
+ if (videoPermission) {
17898
+ adapter.queryCameras();
17899
+ }
17900
+ if (audioPermission) {
17901
+ adapter.queryMicrophones();
17902
+ }
17903
+ adapter.querySpeakers();
17904
+ return;
17905
+ }
17855
17906
  yield adapter.askDevicePermission({ video: true, audio: true });
17856
17907
  adapter.queryCameras();
17857
17908
  adapter.queryMicrophones();
17858
17909
  adapter.querySpeakers();
17859
17910
  }))();
17860
- }, [adapter, /* @conditional-compile-remove(rooms) */ role]);
17911
+ }, [
17912
+ adapter,
17913
+ /* @conditional-compile-remove(rooms) */ role,
17914
+ /* @conditional-compile-remove(call-readiness) */ options === null || options === void 0 ? void 0 : options.devicePermissions
17915
+ ]);
17861
17916
  const mobileView = formFactor === 'mobile';
17862
17917
  /* @conditional-compile-remove(one-to-n-calling) */
17863
17918
  const modalLayerHostId = reactHooks.useId('modalLayerhost');
@@ -17877,7 +17932,9 @@ const CallComposite = (props) => {
17877
17932
  // the Modal because the draggable bounds thinks it has no space and will always return to its initial position after dragging.
17878
17933
  // Additionally, this layer host cannot be in the Call Arrangement as it needs to be rendered before useMinMaxDragPosition() in
17879
17934
  // common/utils useRef is called.
17880
- // Warning: this is fragile and works because the call arrangement page is only rendered after the call has connected and thus this LayerHost will be guaranteed to have rendered (and subsequently mounted in the DOM). This ensures the DOM element will be available before the call to `document.getElementById(modalLayerHostId)` is made.
17935
+ // Warning: this is fragile and works because the call arrangement page is only rendered after the call has connected and thus this
17936
+ // LayerHost will be guaranteed to have rendered (and subsequently mounted in the DOM). This ensures the DOM element will be available
17937
+ // before the call to `document.getElementById(modalLayerHostId)` is made.
17881
17938
  /* @conditional-compile-remove(one-to-n-calling) */
17882
17939
  mobileView && React__default['default'].createElement(react.LayerHost, { id: modalLayerHostId, className: react.mergeStyles(modalLayerHostStyle) })))));
17883
17940
  };
@@ -19692,7 +19749,11 @@ const CallWithChatScreen = (props) => {
19692
19749
  React__default['default'].createElement(react.Stack.Item, { grow: true, styles: callCompositeContainerStyles,
19693
19750
  // Perf: Instead of removing the video gallery from DOM, we hide it to prevent re-renders.
19694
19751
  style: callCompositeContainerCSS },
19695
- React__default['default'].createElement(CallComposite, Object.assign({}, props, { formFactor: formFactor, options: { callControls: false }, adapter: callAdapter, fluentTheme: fluentTheme }))),
19752
+ React__default['default'].createElement(CallComposite, Object.assign({}, props, { formFactor: formFactor, options: {
19753
+ callControls: false,
19754
+ /* @conditional-compile-remove(call-readiness) */
19755
+ devicePermissions: props.devicePermissions
19756
+ }, adapter: callAdapter, fluentTheme: fluentTheme }))),
19696
19757
  chatProps.adapter && callAdapter && hasJoinedCall && (React__default['default'].createElement(CallWithChatPane, { chatCompositeProps: chatProps, inviteLink: props.joinInvitationURL, onClose: closePane, chatAdapter: chatProps.adapter, callAdapter: callAdapter, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, onChatButtonClicked: showShowChatTabHeaderButton(props.callControls) ? selectChat : undefined, onPeopleButtonClicked: showShowPeopleTabHeaderButton(props.callControls) ? selectPeople : undefined, modalLayerHostId: modalLayerHostId, mobileView: mobileView, activePane: activePane,
19697
19758
  /* @conditional-compile-remove(file-sharing) */
19698
19759
  fileSharing: props.fileSharing, rtl: props.rtl, callControls: typeof props.callControls !== 'boolean' ? props.callControls : undefined }))),
@@ -19729,7 +19790,9 @@ const CallWithChatScreen = (props) => {
19729
19790
  const CallWithChatComposite = (props) => {
19730
19791
  const { adapter, fluentTheme, rtl, formFactor, joinInvitationURL, options } = props;
19731
19792
  return (React__default['default'].createElement(BaseProvider, { fluentTheme: fluentTheme, rtl: rtl, locale: props.locale, icons: props.icons },
19732
- React__default['default'].createElement(CallWithChatScreen, Object.assign({}, props, { callWithChatAdapter: adapter, formFactor: formFactor, callControls: options === null || options === void 0 ? void 0 : options.callControls, joinInvitationURL: joinInvitationURL, fluentTheme: fluentTheme,
19793
+ React__default['default'].createElement(CallWithChatScreen, Object.assign({}, props, {
19794
+ /* @conditional-compile-remove(call-readiness) */
19795
+ devicePermissions: options === null || options === void 0 ? void 0 : options.devicePermissions, callWithChatAdapter: adapter, formFactor: formFactor, callControls: options === null || options === void 0 ? void 0 : options.callControls, joinInvitationURL: joinInvitationURL, fluentTheme: fluentTheme,
19733
19796
  /* @conditional-compile-remove(file-sharing) */
19734
19797
  fileSharing: options === null || options === void 0 ? void 0 : options.fileSharing }))));
19735
19798
  };