@azure/communication-react 1.3.2-alpha-202208040020.0 → 1.3.2-alpha-202208090015.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 (119) hide show
  1. package/dist/communication-react.d.ts +91 -1
  2. package/dist/dist-cjs/communication-react/index.js +480 -194
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/common.d.ts +20 -0
  5. package/dist/dist-esm/acs-ui-common/src/common.d.ts.map +1 -0
  6. package/dist/dist-esm/acs-ui-common/src/common.js +26 -0
  7. package/dist/dist-esm/acs-ui-common/src/common.js.map +1 -0
  8. package/dist/dist-esm/acs-ui-common/src/index.d.ts +1 -0
  9. package/dist/dist-esm/acs-ui-common/src/index.d.ts.map +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/index.js +1 -0
  11. package/dist/dist-esm/acs-ui-common/src/index.js.map +1 -1
  12. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  13. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.d.ts +2 -2
  14. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.d.ts.map +1 -1
  15. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js +31 -5
  16. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js.map +1 -1
  17. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.d.ts.map +1 -1
  18. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.js +1 -1
  19. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.js.map +1 -1
  20. package/dist/dist-esm/communication-react/src/index.d.ts +1 -1
  21. package/dist/dist-esm/communication-react/src/index.d.ts.map +1 -1
  22. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.d.ts.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +14 -7
  25. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.d.ts +1 -1
  27. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.d.ts.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +2 -14
  29. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  30. package/dist/dist-esm/react-components/src/components/DevicesButton.js +1 -1
  31. package/dist/dist-esm/react-components/src/components/DevicesButton.js.map +1 -1
  32. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts +2 -0
  33. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts.map +1 -1
  34. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +9 -14
  35. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/FileCard.js +2 -1
  37. package/dist/dist-esm/react-components/src/components/FileCard.js.map +1 -1
  38. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +3 -1
  39. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts.map +1 -1
  40. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/ParticipantItem.js +1 -1
  42. package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
  43. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js +1 -1
  44. package/dist/dist-esm/react-components/src/components/ParticipantsButton.js.map +1 -1
  45. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +2 -1
  46. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts.map +1 -1
  47. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +8 -2
  48. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  49. package/dist/dist-esm/react-components/src/components/ResponsiveHorizontalGallery.js +1 -1
  50. package/dist/dist-esm/react-components/src/components/ResponsiveHorizontalGallery.js.map +1 -1
  51. package/dist/dist-esm/react-components/src/components/VideoTile.d.ts +16 -1
  52. package/dist/dist-esm/react-components/src/components/VideoTile.d.ts.map +1 -1
  53. package/dist/dist-esm/react-components/src/components/VideoTile.js +38 -6
  54. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  55. package/dist/dist-esm/react-components/src/components/index.d.ts +1 -0
  56. package/dist/dist-esm/react-components/src/components/index.d.ts.map +1 -1
  57. package/dist/dist-esm/react-components/src/components/index.js +0 -1
  58. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  59. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js +1 -1
  60. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js.map +1 -1
  61. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.d.ts +4 -0
  62. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.d.ts.map +1 -1
  63. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js +9 -0
  64. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  65. package/dist/dist-esm/react-components/src/components/utils/common.d.ts +0 -19
  66. package/dist/dist-esm/react-components/src/components/utils/common.d.ts.map +1 -1
  67. package/dist/dist-esm/react-components/src/components/utils/common.js +0 -23
  68. package/dist/dist-esm/react-components/src/components/utils/common.js.map +1 -1
  69. package/dist/dist-esm/react-components/src/components/utils/responsive.js +1 -1
  70. package/dist/dist-esm/react-components/src/components/utils/responsive.js.map +1 -1
  71. package/dist/dist-esm/react-components/src/index.d.ts +1 -1
  72. package/dist/dist-esm/react-components/src/index.d.ts.map +1 -1
  73. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +3 -0
  74. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts.map +1 -1
  75. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  76. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +7 -1
  77. package/dist/dist-esm/react-components/src/types/VideoGalleryParticipant.d.ts +10 -0
  78. package/dist/dist-esm/react-components/src/types/VideoGalleryParticipant.d.ts.map +1 -1
  79. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +24 -0
  80. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts.map +1 -1
  81. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ConvertContextualMenuItemToDrawerMenuItem.d.ts +11 -0
  82. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ConvertContextualMenuItemToDrawerMenuItem.d.ts.map +1 -0
  83. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ConvertContextualMenuItemToDrawerMenuItem.js +23 -0
  84. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ConvertContextualMenuItemToDrawerMenuItem.js.map +1 -0
  85. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts +24 -0
  86. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/Strings.d.ts.map +1 -1
  87. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.d.ts +13 -0
  88. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.d.ts.map +1 -0
  89. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js +36 -0
  90. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js.map +1 -0
  91. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.d.ts +17 -0
  92. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.d.ts.map +1 -0
  93. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +90 -0
  94. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -0
  95. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.d.ts +17 -0
  96. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.d.ts.map +1 -0
  97. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.js +32 -0
  98. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.js.map +1 -0
  99. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.d.ts +18 -0
  100. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.d.ts.map +1 -0
  101. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js +53 -0
  102. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js.map +1 -0
  103. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.d.ts +15 -0
  104. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.d.ts.map +1 -0
  105. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.js +54 -0
  106. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.js.map +1 -0
  107. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.d.ts.map +1 -1
  108. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +8 -38
  109. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  110. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +9 -0
  111. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts.map +1 -1
  112. package/dist/dist-esm/react-composites/src/composites/common/icons.js +9 -1
  113. package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
  114. package/dist/dist-esm/react-composites/src/composites/common/styles/PeoplePaneContent.styles.d.ts +5 -1
  115. package/dist/dist-esm/react-composites/src/composites/common/styles/PeoplePaneContent.styles.d.ts.map +1 -1
  116. package/dist/dist-esm/react-composites/src/composites/common/styles/PeoplePaneContent.styles.js +12 -1
  117. package/dist/dist-esm/react-composites/src/composites/common/styles/PeoplePaneContent.styles.js.map +1 -1
  118. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +14 -2
  119. package/package.json +8 -8
@@ -192,7 +192,7 @@ const fromFlatCommunicationIdentifier = (id) => {
192
192
  // Copyright (c) Microsoft Corporation.
193
193
  // Licensed under the MIT license.
194
194
  // GENERATED FILE. DO NOT EDIT MANUALLY.
195
- var telemetryVersion = '1.3.2-alpha-202208040020.0';
195
+ var telemetryVersion = '1.3.2-alpha-202208090015.0';
196
196
 
197
197
  // Copyright (c) Microsoft Corporation.
198
198
  /**
@@ -280,6 +280,32 @@ const createSafeReplacer = () => {
280
280
  };
281
281
  };
282
282
 
283
+ // Copyright (c) Microsoft Corporation.
284
+ // Licensed under the MIT license.
285
+ /**
286
+ * @internal
287
+ * Converts units of rem to units of pixels
288
+ * @param rem - units of rem
289
+ * @returns units of pixels
290
+ */
291
+ const _convertRemToPx = (rem) => {
292
+ return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);
293
+ };
294
+ /**
295
+ * @internal
296
+ * Disable dismiss on resize to work around a couple Fluent UI bugs
297
+ * - The Callout is dismissed whenever *any child of window (inclusive)* is resized. In practice, this
298
+ * happens when we change the VideoGallery layout, or even when the video stream element is internally resized
299
+ * by the headless SDK.
300
+ * - We also want to prevent dismiss when chat pane is scrolling especially a new message is added.
301
+ * A side effect of this workaround is that the context menu stays open when window is resized, and may
302
+ * get detached from original target visually. That bug is preferable to the bug when this value is not set -
303
+ * The Callout (frequently) gets dismissed automatically.
304
+ */
305
+ const _preventDismissOnEvent = (ev) => {
306
+ return ev.type === 'resize' || ev.type === 'scroll';
307
+ };
308
+
283
309
  // Copyright (c) Microsoft Corporation.
284
310
  // Licensed under the MIT license.
285
311
  /**
@@ -932,7 +958,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
932
958
  wordBreak: 'break-word'
933
959
  });
934
960
 
935
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};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}",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 a number",deleteButtonAriaLabel:"Delete"};var HoldButton$e={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};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$e};
961
+ var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};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$e={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};var videoTile={participantStateConnecting:"Connecting...",participantStateRinging:"Ringing...",participantStateHold:"On Hold"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,HoldButton:HoldButton$e,videoTile:videoTile};
936
962
 
937
963
  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};
938
964
 
@@ -2238,29 +2264,6 @@ const SendBoxErrors = (props) => {
2238
2264
  };
2239
2265
 
2240
2266
  // Copyright (c) Microsoft Corporation.
2241
- /**
2242
- * Converts units of rem to units of pixels
2243
- * @param rem - units of rem
2244
- * @returns units of pixels
2245
- */
2246
- const convertRemToPx = (rem) => {
2247
- return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);
2248
- };
2249
- /**
2250
- * Converts units of rem to units of pixels
2251
- * @private
2252
- * Disable dismiss on resize to work around a couple Fluent UI bugs
2253
- * - The Callout is dismissed whenever *any child of window (inclusive)* is resized. In practice, this
2254
- * happens when we change the VideoGallery layout, or even when the video stream element is internally resized
2255
- * by the headless SDK.
2256
- * - We also want to prevent dismiss when chat pane is scrolling especially a new message is added.
2257
- * A side effect of this workaround is that the context menu stays open when window is resized, and may
2258
- * get detached from original target visually. That bug is preferable to the bug when this value is not set -
2259
- * The Callout (frequently) gets dismissed automatically.
2260
- */
2261
- const preventDismissOnEvent = (ev) => {
2262
- return ev.type === 'resize' || ev.type === 'scroll';
2263
- };
2264
2267
  /**
2265
2268
  * Conditionally modify locale strings passed to the file card
2266
2269
  * @returns file upload card strings
@@ -2336,7 +2339,8 @@ const _FileCard = (props) => {
2336
2339
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
2337
2340
  React__default['default'].createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),
2338
2341
  React__default['default'].createElement(react.Stack, { className: containerClassName, onClick: () => {
2339
- props.actionHandler && props.actionHandler();
2342
+ var _a;
2343
+ (_a = props.actionHandler) === null || _a === void 0 ? void 0 : _a.call(props);
2340
2344
  } },
2341
2345
  React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center", className: fileInfoWrapperClassName },
2342
2346
  React__default['default'].createElement(react.Stack, null,
@@ -3332,25 +3336,13 @@ const ChatMessageContent = (props) => {
3332
3336
  const MessageContentAsRichTextHTML = (props) => {
3333
3337
  const htmlToReactParser = new htmlToReact.Parser();
3334
3338
  const liveAuthor = _formatString(props.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
3335
- const messageAriaText = props.message.content
3336
- ? _formatString(props.messageContentAriaText, {
3337
- author: `${props.message.senderDisplayName}`,
3338
- message: props.message.content
3339
- })
3340
- : undefined;
3341
- return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-text": messageAriaText },
3339
+ return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-text": props.messageContentAriaText },
3342
3340
  React__default['default'].createElement(reactAriaLive.LiveMessage, { message: `${props.message.mine ? '' : liveAuthor} ${extractContent(props.message.content || '')}`, "aria-live": "polite" }),
3343
3341
  htmlToReactParser.parse(props.message.content)));
3344
3342
  };
3345
3343
  const MessageContentAsText = (props) => {
3346
3344
  const liveAuthor = _formatString(props.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
3347
- const messageAriaText = props.message.content
3348
- ? _formatString(props.messageContentAriaText, {
3349
- author: `${props.message.senderDisplayName}`,
3350
- message: props.message.content
3351
- })
3352
- : undefined;
3353
- return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-label": messageAriaText },
3345
+ return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-label": props.messageContentAriaText },
3354
3346
  React__default['default'].createElement(reactAriaLive.LiveMessage, { message: `${props.message.mine ? '' : liveAuthor} ${props.message.content}`, "aria-live": "polite" }),
3355
3347
  React__default['default'].createElement(Linkify__default['default'], { componentDecorator: (decoratedHref, decoratedText, key) => {
3356
3348
  return (React__default['default'].createElement(react.Link, { target: "_blank", href: decoratedHref, key: key }, decoratedText));
@@ -3532,14 +3524,20 @@ const MessageBubble = (props) => {
3532
3524
  locale,
3533
3525
  fileDownloadHandler
3534
3526
  ]);
3535
- const messageContentRef = React.useRef(null);
3527
+ const messageContentAriaText = props.message.content
3528
+ ? props.message.mine
3529
+ ? _formatString(strings.messageContentMineAriaText, {
3530
+ message: props.message.content
3531
+ })
3532
+ : _formatString(strings.messageContentAriaText, {
3533
+ author: `${props.message.senderDisplayName}`,
3534
+ message: props.message.content
3535
+ })
3536
+ : undefined;
3536
3537
  const chatMessage = (React__default['default'].createElement(React__default['default'].Fragment, null,
3537
- React__default['default'].createElement("div", { ref: messageRef, tabIndex: 0, onFocus: () => {
3538
- var _a;
3539
- (_a = messageContentRef.current) === null || _a === void 0 ? void 0 : _a.focus();
3540
- } },
3541
- React__default['default'].createElement(reactNorthstar.Chat.Message, { "data-ui-id": "chat-composite-message", className: react.mergeStyles(messageContainerStyle), styles: messageContainerStyle, content: React__default['default'].createElement("div", { ref: messageContentRef, tabIndex: 0 },
3542
- React__default['default'].createElement(ChatMessageContent, { message: message, liveAuthorIntro: strings.liveAuthorIntro, messageContentAriaText: strings.messageContentAriaText }),
3538
+ React__default['default'].createElement("div", { ref: messageRef },
3539
+ React__default['default'].createElement(reactNorthstar.Chat.Message, { "data-ui-id": "chat-composite-message", className: react.mergeStyles(messageContainerStyle), styles: messageContainerStyle, content: React__default['default'].createElement("div", { tabIndex: 0 },
3540
+ React__default['default'].createElement(ChatMessageContent, { message: message, liveAuthorIntro: strings.liveAuthorIntro, messageContentAriaText: messageContentAriaText }),
3543
3541
  props.onRenderFileDownloads
3544
3542
  ? props.onRenderFileDownloads(userId, message)
3545
3543
  : defaultOnRenderFileDownloads()), author: React__default['default'].createElement(reactNorthstar.Text, { className: chatMessageDateStyle }, message.senderDisplayName), mine: message.mine, timestamp: React__default['default'].createElement(reactNorthstar.Text, { "data-ui-id": ids.messageTimestamp }, formattedTimestamp), details: messageStatus === 'failed' ? (React__default['default'].createElement("div", { className: chatMessageFailedTagStyle(theme) }, strings.failToSendTag)) : message.editedOn ? (React__default['default'].createElement("div", { className: chatMessageEditedTagStyle(theme) }, strings.editedTag)) : undefined, positionActionMenu: false, actionMenu: actionMenuProps, onTouchStart: () => setWasInteractionByTouch(true), onPointerDown: () => setWasInteractionByTouch(false), onKeyDown: () => setWasInteractionByTouch(false), onBlur: () => setWasInteractionByTouch(false), onClick: () => {
@@ -3665,7 +3663,7 @@ const NARROW_WIDTH_REM = 30;
3665
3663
  * @param containerWidthRem container width in rem
3666
3664
  * @returns boolean
3667
3665
  */
3668
- const isNarrowWidth = (containerWidthRem) => containerWidthRem <= convertRemToPx(NARROW_WIDTH_REM);
3666
+ const isNarrowWidth = (containerWidthRem) => containerWidthRem <= _convertRemToPx(NARROW_WIDTH_REM);
3669
3667
 
3670
3668
  /**
3671
3669
  * @private
@@ -4356,7 +4354,7 @@ const iconContainerStyle$1 = {
4356
4354
  /**
4357
4355
  * @private
4358
4356
  */
4359
- const iconStyles$2 = react.mergeStyles({
4357
+ const iconStyles$3 = react.mergeStyles({
4360
4358
  display: 'flex',
4361
4359
  lineHeight: 0,
4362
4360
  alignItems: 'center'
@@ -4402,7 +4400,7 @@ const ParticipantItem = (props) => {
4402
4400
  const contextualMenuStyle = React.useMemo(() => react.mergeStyles({ background: theme.palette.neutralLighterAlt }, styles === null || styles === void 0 ? void 0 : styles.menu), [theme.palette.neutralLighterAlt, styles === null || styles === void 0 ? void 0 : styles.menu]);
4403
4401
  const infoContainerStyle = React.useMemo(() => react.mergeStyles(iconContainerStyle$1, { color: theme.palette.neutralTertiary }, styles === null || styles === void 0 ? void 0 : styles.iconContainer), [theme.palette.neutralTertiary, styles === null || styles === void 0 ? void 0 : styles.iconContainer]);
4404
4402
  const menuButton = React.useMemo(() => (React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "end", className: react.mergeStyles(menuButtonContainerStyle), title: menuTitle, "data-ui-id": ids.participantItemMenuButton },
4405
- React__default['default'].createElement(react.Icon, { iconName: itemHovered ? 'ParticipantItemOptionsHovered' : 'ParticipantItemOptions', className: iconStyles$2 }))), [itemHovered, menuTitle, ids.participantItemMenuButton]);
4403
+ React__default['default'].createElement(react.Icon, { iconName: itemHovered ? 'ParticipantItemOptionsHovered' : 'ParticipantItemOptions', className: iconStyles$3 }))), [itemHovered, menuTitle, ids.participantItemMenuButton]);
4406
4404
  const onDismissMenu = () => {
4407
4405
  setItemHovered(false);
4408
4406
  setMenuHidden(true);
@@ -4419,7 +4417,7 @@ const ParticipantItem = (props) => {
4419
4417
  menuItems && menuItems.length > 0 && (React__default['default'].createElement(React__default['default'].Fragment, null,
4420
4418
  menuButton,
4421
4419
  React__default['default'].createElement(react.ContextualMenu, { items: menuItems, hidden: menuHidden, target: containerRef, onItemClick: onDismissMenu, onDismiss: onDismissMenu, directionalHint: react.DirectionalHint.bottomRightEdge, className: contextualMenuStyle, calloutProps: {
4422
- preventDismissOnEvent
4420
+ preventDismissOnEvent: _preventDismissOnEvent
4423
4421
  } })))));
4424
4422
  };
4425
4423
 
@@ -4443,7 +4441,7 @@ const participantListItemStyle = {
4443
4441
  /**
4444
4442
  * @private
4445
4443
  */
4446
- const iconStyles$1 = react.mergeStyles({
4444
+ const iconStyles$2 = react.mergeStyles({
4447
4445
  display: 'flex',
4448
4446
  lineHeight: 0,
4449
4447
  alignItems: 'center'
@@ -4464,8 +4462,8 @@ const onRenderParticipantDefault = (participant, strings, myUserId, onRenderAvat
4464
4462
  const menuItems = createParticipantMenuItems && createParticipantMenuItems(participant);
4465
4463
  const onRenderIcon = (callingParticipant === null || callingParticipant === void 0 ? void 0 : callingParticipant.isScreenSharing) || (callingParticipant === null || callingParticipant === void 0 ? void 0 : callingParticipant.isMuted)
4466
4464
  ? () => (React__default['default'].createElement(react.Stack, { horizontal: true, tokens: { childrenGap: '0.5rem' } },
4467
- callingParticipant.isScreenSharing && (React__default['default'].createElement(react.Icon, { iconName: "ParticipantItemScreenShareStart", className: iconStyles$1, ariaLabel: strings.sharingIconLabel })),
4468
- callingParticipant.isMuted && (React__default['default'].createElement(react.Icon, { iconName: "ParticipantItemMicOff", className: iconStyles$1, ariaLabel: strings.mutedIconLabel }))))
4465
+ callingParticipant.isScreenSharing && (React__default['default'].createElement(react.Icon, { iconName: "ParticipantItemScreenShareStart", className: iconStyles$2, ariaLabel: strings.sharingIconLabel })),
4466
+ callingParticipant.isMuted && (React__default['default'].createElement(react.Icon, { iconName: "ParticipantItemMicOff", className: iconStyles$2, ariaLabel: strings.mutedIconLabel }))))
4469
4467
  : () => null;
4470
4468
  const displayName = !participant.displayName ? strings.displayNamePlaceholder : participant.displayName;
4471
4469
  return (React__default['default'].createElement(ParticipantItem, { styles: styles, key: participant.userId, userId: participant.userId, displayName: displayName, me: myUserId ? participant.userId === myUserId : false, menuItems: menuItems, presence: presence, onRenderIcon: onRenderIcon, onRenderAvatar: onRenderAvatar, onClick: () => onParticipantClick === null || onParticipantClick === void 0 ? void 0 : onParticipantClick(participant), showParticipantOverflowTooltip: showParticipantOverflowTooltip }));
@@ -4735,6 +4733,15 @@ const displayNameStyle = {
4735
4733
  textOverflow: 'ellipsis',
4736
4734
  maxWidth: '100%'
4737
4735
  };
4736
+ /**
4737
+ * @private
4738
+ */
4739
+ const participantStateStyle = {
4740
+ textAlign: 'center',
4741
+ paddingTop: '0.5rem',
4742
+ fontWeight: 600,
4743
+ fontSize: '0.75rem'
4744
+ };
4738
4745
  /**
4739
4746
  * @private
4740
4747
  */
@@ -4774,9 +4781,26 @@ const DEFAULT_PERSONA_MAX_SIZE_PX = 100;
4774
4781
  // Coin min size is set PersonaSize.size32
4775
4782
  const DEFAULT_PERSONA_MIN_SIZE_PX = 32;
4776
4783
  const DefaultPlaceholder = (props) => {
4777
- const { text, noVideoAvailableAriaLabel, coinSize, styles, hidePersonaDetails } = props;
4784
+ const { text, noVideoAvailableAriaLabel, coinSize, hidePersonaDetails, participantState, strings } = props;
4785
+ const participantStateString = React__default['default'].useMemo(() => {
4786
+ if (!strings) {
4787
+ return;
4788
+ }
4789
+ if (participantState === 'Connecting') {
4790
+ return strings === null || strings === void 0 ? void 0 : strings.participantStateConnecting;
4791
+ }
4792
+ else if (participantState === 'Ringing') {
4793
+ return strings === null || strings === void 0 ? void 0 : strings.participantStateRinging;
4794
+ }
4795
+ else if (participantState === 'Hold') {
4796
+ return strings === null || strings === void 0 ? void 0 : strings.participantStateHold;
4797
+ }
4798
+ return;
4799
+ }, [participantState, strings]);
4778
4800
  return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
4779
- React__default['default'].createElement(react.Persona, { styles: styles, coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: "white", "aria-label": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false })));
4801
+ React__default['default'].createElement(react.Stack, { styles: defaultPersonaStyles },
4802
+ React__default['default'].createElement(react.Persona, { coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: "white", "aria-label": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false }),
4803
+ participantStateString && React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStyle) }, participantStateString))));
4780
4804
  };
4781
4805
  const defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };
4782
4806
  /**
@@ -4787,7 +4811,13 @@ const defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };
4787
4811
  * @public
4788
4812
  */
4789
4813
  const VideoTile = (props) => {
4790
- const { children, displayName, initialsName, isMirrored, isMuted, onRenderPlaceholder, renderElement, showLabel = true, showMuteIndicator = true, styles, userId, noVideoAvailableAriaLabel, isSpeaking, personaMinSize = DEFAULT_PERSONA_MIN_SIZE_PX, personaMaxSize = DEFAULT_PERSONA_MAX_SIZE_PX } = props;
4814
+ const { children, displayName, initialsName, isMirrored, isMuted, onRenderPlaceholder, renderElement, showLabel = true, showMuteIndicator = true, styles, userId, noVideoAvailableAriaLabel, isSpeaking, personaMinSize = DEFAULT_PERSONA_MIN_SIZE_PX, personaMaxSize = DEFAULT_PERSONA_MAX_SIZE_PX,
4815
+ /* @conditional-compile-remove(one-to-n-calling) */
4816
+ /* @conditional-compile-remove(PSTN-calls) */
4817
+ participantState } = props;
4818
+ /* @conditional-compile-remove(one-to-n-calling) */
4819
+ // @conditional-compile-remove(PSTN-calls)
4820
+ const strings = Object.assign(Object.assign({}, useLocale$1().strings.videoTile), props.strings);
4791
4821
  const [personaSize, setPersonaSize] = React.useState(100);
4792
4822
  const videoTileRef = React.useRef(null);
4793
4823
  const theme = useTheme();
@@ -4810,7 +4840,10 @@ const VideoTile = (props) => {
4810
4840
  noVideoAvailableAriaLabel,
4811
4841
  coinSize: personaSize,
4812
4842
  styles: defaultPersonaStyles,
4813
- hidePersonaDetails: true
4843
+ hidePersonaDetails: true,
4844
+ /* @conditional-compile-remove(one-to-n-calling) */
4845
+ /* @conditional-compile-remove(PSTN-calls) */
4846
+ participantState: participantState
4814
4847
  };
4815
4848
  const videoHintWithBorderRadius = react.mergeStyles(videoHint, { borderRadius: theme.effects.roundedCorner4 });
4816
4849
  const tileInfoStyle = React.useMemo(() => react.mergeStyles(isVideoRendered ? videoHintWithBorderRadius : disabledVideoHint, getVideoTileOverrideColor(isVideoRendered, theme, 'neutralPrimary'), styles === null || styles === void 0 ? void 0 : styles.displayNameContainer), [isVideoRendered, videoHintWithBorderRadius, theme, styles === null || styles === void 0 ? void 0 : styles.displayNameContainer]);
@@ -4824,7 +4857,10 @@ const VideoTile = (props) => {
4824
4857
  borderRadius: theme.effects.roundedCorner4,
4825
4858
  border: `0.25rem solid ${isSpeaking ? theme.palette.themePrimary : 'transparent'}`
4826
4859
  }) }),
4827
- isVideoRendered ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles, isMirrored && { transform: 'scaleX(-1)' }, styles === null || styles === void 0 ? void 0 : styles.videoContainer) }, renderElement)) : (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles) }, onRenderPlaceholder ? (onRenderPlaceholder(userId !== null && userId !== void 0 ? userId : '', placeholderOptions, DefaultPlaceholder)) : (React__default['default'].createElement(DefaultPlaceholder, Object.assign({}, placeholderOptions))))),
4860
+ isVideoRendered ? (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles, isMirrored && { transform: 'scaleX(-1)' }, styles === null || styles === void 0 ? void 0 : styles.videoContainer) }, renderElement)) : (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(videoContainerStyles) }, onRenderPlaceholder ? (onRenderPlaceholder(userId !== null && userId !== void 0 ? userId : '', placeholderOptions, DefaultPlaceholder)) : (React__default['default'].createElement(DefaultPlaceholder, Object.assign({}, placeholderOptions, {
4861
+ /* @conditional-compile-remove(one-to-n-calling) */
4862
+ // @conditional-compile-remove(PSTN-calls)
4863
+ strings: strings }))))),
4828
4864
  showLabel && (displayName || (showMuteIndicator && isMuted)) && (React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoContainerStyle },
4829
4865
  React__default['default'].createElement(react.Stack, { horizontal: true, className: tileInfoStyle },
4830
4866
  displayName && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(displayNameStyle), title: displayName }, displayName)),
@@ -4843,7 +4879,10 @@ const VideoTile = (props) => {
4843
4879
  */
4844
4880
  const _RemoteVideoTile = React__default['default'].memo((props) => {
4845
4881
  const { isAvailable, isReceiving = true, // default to true to prevent any breaking change
4846
- isMuted, isSpeaking, isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, displayName, onRenderAvatar, showMuteIndicator } = props;
4882
+ isMuted, isSpeaking, isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, displayName, onRenderAvatar, showMuteIndicator,
4883
+ /* @conditional-compile-remove(one-to-n-calling) */
4884
+ /* @conditional-compile-remove(PSTN-calls) */
4885
+ state } = props;
4847
4886
  const remoteVideoStreamProps = React.useMemo(() => ({
4848
4887
  isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored,
4849
4888
  isScreenSharingOn,
@@ -4876,7 +4915,10 @@ const _RemoteVideoTile = React__default['default'].memo((props) => {
4876
4915
  }
4877
4916
  return React__default['default'].createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isReceiving ? 'none' : 'loading' });
4878
4917
  }, [renderElement, isReceiving]);
4879
- return (React__default['default'].createElement(VideoTile, { key: userId, userId: userId, renderElement: renderVideoStreamElement, displayName: displayName, onRenderPlaceholder: onRenderAvatar, isMuted: isMuted, isSpeaking: isSpeaking, showMuteIndicator: showMuteIndicator, showLabel: props.showLabel, personaMinSize: props.personaMinSize }));
4918
+ return (React__default['default'].createElement(VideoTile, { key: userId, userId: userId, renderElement: renderVideoStreamElement, displayName: displayName, onRenderPlaceholder: onRenderAvatar, isMuted: isMuted, isSpeaking: isSpeaking, showMuteIndicator: showMuteIndicator, showLabel: props.showLabel, personaMinSize: props.personaMinSize,
4919
+ /* @conditional-compile-remove(one-to-n-calling) */
4920
+ /* @conditional-compile-remove(PSTN-calls) */
4921
+ participantState: state }));
4880
4922
  });
4881
4923
 
4882
4924
  // Copyright (c) Microsoft Corporation.
@@ -4996,8 +5038,8 @@ const ResponsiveHorizontalGallery = (props) => {
4996
5038
  */
4997
5039
  const calculateChildrenPerPage = (args) => {
4998
5040
  const { numberOfChildren, containerWidth, buttonWidthRem, childWidthRem, gapWidthRem } = args;
4999
- const childWidth = convertRemToPx(childWidthRem);
5000
- const gapWidth = convertRemToPx(gapWidthRem);
5041
+ const childWidth = _convertRemToPx(childWidthRem);
5042
+ const gapWidth = _convertRemToPx(gapWidthRem);
5001
5043
  /** First check how many children can fit in containerWidth.
5002
5044
  * __________________________________
5003
5045
  * | || |
@@ -5011,7 +5053,7 @@ const calculateChildrenPerPage = (args) => {
5011
5053
  if (numberOfChildren <= numberOfChildrenInContainer) {
5012
5054
  return numberOfChildrenInContainer;
5013
5055
  }
5014
- const buttonWidth = convertRemToPx(buttonWidthRem);
5056
+ const buttonWidth = _convertRemToPx(buttonWidthRem);
5015
5057
  /** We know we need to paginate. So we need to subtract the buttonWidth twice and gapWidth twice from
5016
5058
  * containerWidth to compute childrenSpace
5017
5059
  * <-----------containerWidth--------->
@@ -6518,7 +6560,7 @@ const generateDefaultDeviceMenuProps = (props, strings, isSelectCamAllowed = tru
6518
6560
  maxWidth: '95%'
6519
6561
  }
6520
6562
  },
6521
- preventDismissOnEvent
6563
+ preventDismissOnEvent: _preventDismissOnEvent
6522
6564
  }
6523
6565
  };
6524
6566
  const menuItemStyles = react.merge(buttonFlyoutItemStyles, (_b = (_a = props.styles) === null || _a === void 0 ? void 0 : _a.menuItemStyles) !== null && _b !== void 0 ? _b : {});
@@ -6958,7 +7000,7 @@ const ParticipantsButton = (props) => {
6958
7000
  styles: react.merge(participantsButtonMenuPropsStyle, styles === null || styles === void 0 ? void 0 : styles.menuStyles),
6959
7001
  items: [],
6960
7002
  calloutProps: {
6961
- preventDismissOnEvent
7003
+ preventDismissOnEvent: _preventDismissOnEvent
6962
7004
  }
6963
7005
  };
6964
7006
  if (participantCount > 0) {
@@ -6987,7 +7029,7 @@ const ParticipantsButton = (props) => {
6987
7029
  },
6988
7030
  // Disable dismiss on resize to work around a couple Fluent UI bugs
6989
7031
  // See reasoning in the props for the parent menu.
6990
- preventDismissOnEvent
7032
+ preventDismissOnEvent: _preventDismissOnEvent
6991
7033
  }
6992
7034
  },
6993
7035
  'data-ui-id': ids.participantButtonPeopleMenuItem
@@ -7156,7 +7198,7 @@ const DrawerMenuItem = (props) => {
7156
7198
  } }, props.secondaryText))),
7157
7199
  secondaryIcon && React__default['default'].createElement(react.Stack.Item, null, secondaryIcon)));
7158
7200
  };
7159
- const MenuItemIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({ className: react.mergeStyles(iconStyles) }, props)));
7201
+ const MenuItemIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({ className: react.mergeStyles(iconStyles$1) }, props)));
7160
7202
  const menuItemChildrenGap = { childrenGap: '0.5rem' };
7161
7203
  const drawerMenuItemRootStyles = (hoverBackground, fontSize) => (Object.assign(Object.assign({}, fontSize), { height: '3rem', lineHeight: '3rem', padding: '0rem 0.75rem', cursor: 'pointer', ':hover, :focus': {
7162
7204
  background: hoverBackground
@@ -7176,7 +7218,7 @@ const drawerMenuItemTextStyles = {
7176
7218
  whiteSpace: 'nowrap'
7177
7219
  }
7178
7220
  };
7179
- const iconStyles = {
7221
+ const iconStyles$1 = {
7180
7222
  // Vertically center icons in the menu item. Using line-height does not work for centering fluent SVG icons.
7181
7223
  display: 'flex',
7182
7224
  alignItems: 'center',
@@ -7571,7 +7613,7 @@ const buttonStyles = (theme) => ({
7571
7613
  const primaryContentStyles = (theme) => {
7572
7614
  return {
7573
7615
  fontSize: '1.25rem',
7574
- fontWeight: 600,
7616
+ fontWeight: theme.fonts.medium.fontWeight,
7575
7617
  color: `${theme.palette.neutralPrimary}`
7576
7618
  };
7577
7619
  };
@@ -7667,7 +7709,6 @@ const formatPhoneNumber = (phoneNumber) => {
7667
7709
  };
7668
7710
 
7669
7711
  // Copyright (c) Microsoft Corporation.
7670
- /* @conditional-compile-remove(dialpad) */
7671
7712
  const DialpadButton = (props) => {
7672
7713
  var _a, _b, _c, _d;
7673
7714
  const theme = react.useTheme();
@@ -7678,7 +7719,6 @@ const DialpadButton = (props) => {
7678
7719
  React__default['default'].createElement(react.Text, { className: react.mergeStyles(primaryContentStyles(theme), (_b = props.styles) === null || _b === void 0 ? void 0 : _b.primaryContent) }, props.primaryContent),
7679
7720
  React__default['default'].createElement(react.Text, { className: react.mergeStyles(secondaryContentStyles(theme), (_c = props.styles) === null || _c === void 0 ? void 0 : _c.secondaryContent) }, (_d = props.secondaryContent) !== null && _d !== void 0 ? _d : ' '))));
7680
7721
  };
7681
- /* @conditional-compile-remove(dialpad) */
7682
7722
  const dialPadButtonsDefault = [
7683
7723
  [
7684
7724
  { primaryContent: '1' },
@@ -7697,7 +7737,6 @@ const dialPadButtonsDefault = [
7697
7737
  ],
7698
7738
  [{ primaryContent: '*' }, { primaryContent: '0', secondaryContent: '+' }, { primaryContent: '#' }]
7699
7739
  ];
7700
- /* @conditional-compile-remove(dialpad) */
7701
7740
  const DtmfTones = [
7702
7741
  'Num1',
7703
7742
  'Num2',
@@ -7712,7 +7751,6 @@ const DtmfTones = [
7712
7751
  'Num0',
7713
7752
  'Pound'
7714
7753
  ];
7715
- /* @conditional-compile-remove(dialpad) */
7716
7754
  const DialpadContainer = (props) => {
7717
7755
  var _a, _b;
7718
7756
  const theme = react.useTheme();
@@ -7797,11 +7835,12 @@ const DialpadContainer = (props) => {
7797
7835
  const Dialpad = (props) => {
7798
7836
  /* @conditional-compile-remove(dialpad) */
7799
7837
  const localeStrings = useLocale$1().strings.dialpad;
7800
- /* @conditional-compile-remove(dialpad) */
7801
- const strings = Object.assign(Object.assign({}, localeStrings), props.strings);
7802
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
7803
- /* @conditional-compile-remove(dialpad) */
7804
- React__default['default'].createElement(DialpadContainer, Object.assign({ strings: strings }, props))));
7838
+ const dialpadLocaleStringsTrampoline = () => {
7839
+ /* @conditional-compile-remove(dialpad) */
7840
+ return localeStrings;
7841
+ };
7842
+ const strings = Object.assign(Object.assign({}, dialpadLocaleStringsTrampoline()), props.strings);
7843
+ return React__default['default'].createElement(DialpadContainer, Object.assign({ strings: strings }, props));
7805
7844
  };
7806
7845
 
7807
7846
  // Copyright (c) Microsoft Corporation.
@@ -7849,15 +7888,15 @@ const _videoGalleryRemoteParticipantsMemo = (remoteParticipants) => {
7849
7888
  return participant.state !== 'InLobby';
7850
7889
  })
7851
7890
  .map((participant) => {
7852
- return memoizedFn(toFlatCommunicationIdentifier(participant.identifier), participant.isMuted, checkIsSpeaking(participant), participant.videoStreams, participant.displayName);
7891
+ return memoizedFn(toFlatCommunicationIdentifier(participant.identifier), participant.isMuted, checkIsSpeaking(participant), participant.videoStreams, participant.state, participant.displayName);
7853
7892
  });
7854
7893
  });
7855
7894
  };
7856
- const memoizedAllConvertRemoteParticipant = memoizeFnAll((userId, isMuted, isSpeaking, videoStreams, displayName) => {
7857
- return convertRemoteParticipantToVideoGalleryRemoteParticipant(userId, isMuted, isSpeaking, videoStreams, displayName);
7895
+ const memoizedAllConvertRemoteParticipant = memoizeFnAll((userId, isMuted, isSpeaking, videoStreams, state, displayName) => {
7896
+ return convertRemoteParticipantToVideoGalleryRemoteParticipant(userId, isMuted, isSpeaking, videoStreams, state, displayName);
7858
7897
  });
7859
7898
  /** @private */
7860
- const convertRemoteParticipantToVideoGalleryRemoteParticipant = (userId, isMuted, isSpeaking, videoStreams, displayName) => {
7899
+ const convertRemoteParticipantToVideoGalleryRemoteParticipant = (userId, isMuted, isSpeaking, videoStreams, state, displayName) => {
7861
7900
  const rawVideoStreamsArray = Object.values(videoStreams);
7862
7901
  let videoStream = undefined;
7863
7902
  let screenShareStream = undefined;
@@ -7884,7 +7923,10 @@ const convertRemoteParticipantToVideoGalleryRemoteParticipant = (userId, isMuted
7884
7923
  isSpeaking,
7885
7924
  videoStream,
7886
7925
  screenShareStream,
7887
- isScreenSharingOn: screenShareStream !== undefined && screenShareStream.isAvailable
7926
+ isScreenSharingOn: screenShareStream !== undefined && screenShareStream.isAvailable,
7927
+ /* @conditional-compile-remove(one-to-n-calling) */
7928
+ /* @conditional-compile-remove(PSTN-calls) */
7929
+ state: convertRemoteParticipantStateToVideoGalleryRemoteParticipantState(state)
7888
7930
  };
7889
7931
  };
7890
7932
  const convertRemoteVideoStreamToVideoGalleryStream = (stream) => {
@@ -7898,6 +7940,29 @@ const convertRemoteVideoStreamToVideoGalleryStream = (stream) => {
7898
7940
  renderElement: (_b = stream.view) === null || _b === void 0 ? void 0 : _b.target
7899
7941
  };
7900
7942
  };
7943
+ /* @conditional-compile-remove(one-to-n-calling) */
7944
+ /* @conditional-compile-remove(PSTN-calls) */
7945
+ /**
7946
+ * We convert the Communication Participant states to simpler states that can be used with VideoTiles/VideoGallery.
7947
+ */
7948
+ const convertRemoteParticipantStateToVideoGalleryRemoteParticipantState = (state) => {
7949
+ // `Idle` is the first state of the participant.
7950
+ if (state === 'Idle' || state === 'Connecting') {
7951
+ return 'Connecting';
7952
+ }
7953
+ // `EarlyMedia` is a state when the media is played before a participant connects to the call.
7954
+ // It occurs immediately after the `Connecting` state.
7955
+ if (state === 'EarlyMedia' || state === 'Ringing') {
7956
+ return 'Ringing';
7957
+ }
7958
+ if (state === 'Hold') {
7959
+ return 'Hold';
7960
+ }
7961
+ if (state === 'Connected') {
7962
+ return 'Connected';
7963
+ }
7964
+ return;
7965
+ };
7901
7966
 
7902
7967
  // Copyright (c) Microsoft Corporation.
7903
7968
  /**
@@ -7924,7 +7989,7 @@ const videoGallerySelector = reselect.createSelector([
7924
7989
  const noRemoteParticipants = [];
7925
7990
  return {
7926
7991
  screenShareParticipant: screenShareRemoteParticipant
7927
- ? convertRemoteParticipantToVideoGalleryRemoteParticipant(toFlatCommunicationIdentifier(screenShareRemoteParticipant.identifier), screenShareRemoteParticipant.isMuted, checkIsSpeaking(screenShareRemoteParticipant), screenShareRemoteParticipant.videoStreams, screenShareRemoteParticipant.displayName)
7992
+ ? convertRemoteParticipantToVideoGalleryRemoteParticipant(toFlatCommunicationIdentifier(screenShareRemoteParticipant.identifier), screenShareRemoteParticipant.isMuted, checkIsSpeaking(screenShareRemoteParticipant), screenShareRemoteParticipant.videoStreams, screenShareRemoteParticipant.state, screenShareRemoteParticipant.displayName)
7928
7993
  : undefined,
7929
7994
  localParticipant: {
7930
7995
  userId: identifier,
@@ -12517,7 +12582,13 @@ const COMPOSITE_ONLY_ICONS = {
12517
12582
  NoticePageLeftCall: React__default['default'].createElement(reactIcons.CallEnd20Filled, null),
12518
12583
  NoticePageRemovedFromCall: React__default['default'].createElement(reactIcons.Info20Filled, null),
12519
12584
  /* @conditional-compile-remove(file-sharing) */
12520
- SendBoxAttachFile: React__default['default'].createElement(reactIcons.Attach20Regular, null)
12585
+ SendBoxAttachFile: React__default['default'].createElement(reactIcons.Attach20Regular, null),
12586
+ /* @conditional-compile-remove(PSTN-calls) */
12587
+ PeoplePaneAddPerson: React__default['default'].createElement(reactIcons.PersonAdd20Regular, null),
12588
+ /* @conditional-compile-remove(PSTN-calls) */
12589
+ PeoplePaneOpenDialpad: React__default['default'].createElement(reactIcons.Dialpad20Regular, null),
12590
+ /* @conditional-compile-remove(PSTN-calls) */
12591
+ DialpadStartCall: React__default['default'].createElement(reactIcons.Call20Regular, null)
12521
12592
  };
12522
12593
  /**
12523
12594
  * The default set of icons that are available to used in the Composites.
@@ -12550,7 +12621,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
12550
12621
  */
12551
12622
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
12552
12623
 
12553
- var call$d={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",peopleButtonLabel:"People",peoplePaneTitle:"People",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",soundLabel:"Sound",startCallButtonLabel:"Start call"};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
12624
+ var call$d={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",peopleButtonLabel:"People",peoplePaneTitle:"People",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",soundLabel:"Sound",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close Dialpad"};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close Dialpad"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
12554
12625
 
12555
12626
  var call$c={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",defaultPlaceHolder:"Select an option",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",soundLabel:"Sound",startCallButtonLabel:"Start call",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby."};var chat$c={chatListHeader:"In this chat"};var callWithChat$c={peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",chatButtonLabel:"Chat",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipOpen:"Show chat",chatButtonTooltipClose:"Hide chat",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",peoplePaneTitle:"People",peoplePaneSubTitle:"In this call",chatPaneTitle:"Chat",chatButtonNewMessageNotificationLabel:"New Message",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",copyInviteLinkButtonLabel:"Copy invite link",dismissSidePaneButton:"Close",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back"};var en_GB = {call:call$c,chat:chat$c,callWithChat:callWithChat$c};
12556
12627
 
@@ -15155,8 +15226,324 @@ const copyLinkButtonStyles = {
15155
15226
  /**
15156
15227
  * @private
15157
15228
  */
15158
- const linkIconStyles = { marginRight: '0.5rem' };
15229
+ const themedCopyLinkButtonStyles$1 = (mobileView, theme) => ({
15230
+ root: {
15231
+ minHeight: mobileView ? '3rem' : '2.5rem',
15232
+ borderRadius: mobileView ? theme.effects.roundedCorner6 : theme.effects.roundedCorner4
15233
+ }
15234
+ });
15235
+
15236
+ // Copyright (c) Microsoft Corporation.
15237
+ // Licensed under the MIT license.
15238
+ /**
15239
+ * Convert IContextualMenuItem to _DrawerMenuItemProps
15240
+ * @param contextualMenu - IContextualMenuItem to convert
15241
+ * @param onDrawerMenuItemClick - callback to call when converted DrawerMenuItem is clicked
15242
+ * @returns DrawerMenuItem
15243
+ * @private
15244
+ */
15245
+ const convertContextualMenuItemToDrawerMenuItem = (contextualMenu, onDrawerMenuItemClick) => {
15246
+ return {
15247
+ itemKey: contextualMenu.key,
15248
+ onItemClick: () => {
15249
+ var _a;
15250
+ (_a = contextualMenu.onClick) === null || _a === void 0 ? void 0 : _a.call(contextualMenu);
15251
+ onDrawerMenuItemClick();
15252
+ },
15253
+ iconProps: contextualMenu.iconProps,
15254
+ text: contextualMenu.text,
15255
+ disabled: contextualMenu.disabled
15256
+ };
15257
+ };
15258
+
15259
+ // Copyright (c) Microsoft Corporation.
15260
+ // Licensed under the MIT license.
15261
+ /**
15262
+ * @private
15263
+ */
15264
+ const themedCopyLinkButtonStyles = (theme, mobileView) => ({
15265
+ root: {
15266
+ minHeight: mobileView ? '3rem' : '2.5rem',
15267
+ borderRadius: mobileView ? theme.effects.roundedCorner6 : theme.effects.roundedCorner4,
15268
+ width: '100%'
15269
+ },
15270
+ textContainer: {
15271
+ display: 'contents'
15272
+ }
15273
+ });
15274
+ /**
15275
+ * @private
15276
+ */
15277
+ const themedMenuStyle = (theme) => ({
15278
+ root: {
15279
+ borderRadius: theme.effects.roundedCorner6
15280
+ }
15281
+ });
15282
+ /**
15283
+ * @private
15284
+ */
15285
+ const iconStyles = {
15286
+ // overwrite default line height which results in icons having different size
15287
+ lineHeight: '0',
15288
+ width: '1.125rem'
15289
+ };
15290
+
15291
+ // Copyright (c) Microsoft Corporation.
15292
+ // Licensed under the MIT license.
15293
+ /**
15294
+ * @private
15295
+ */
15296
+ const themedDialpadModelStyle = (theme) => ({
15297
+ main: {
15298
+ borderRadius: theme.effects.roundedCorner6,
15299
+ padding: '1rem'
15300
+ }
15301
+ });
15302
+ /**
15303
+ * @private
15304
+ */
15305
+ const themedDialpadStyle = (isMobile, theme) => ({
15306
+ root: {
15307
+ padding: 0,
15308
+ marginLeft: 0,
15309
+ marginRight: 0,
15310
+ maxWidth: '100%'
15311
+ },
15312
+ textField: {
15313
+ root: {
15314
+ borderBottom: `1px solid ${theme.palette.neutralTertiaryAlt}`
15315
+ },
15316
+ field: {
15317
+ backgroundColor: theme.palette.white,
15318
+ fontSize: theme.fonts.large.fontSize,
15319
+ padding: '1.063rem 0.5rem',
15320
+ textAlign: isMobile ? 'center' : 'left',
15321
+ paddingTop: 0
15322
+ }
15323
+ },
15324
+ primaryContent: {
15325
+ color: theme.palette.themeDarkAlt
15326
+ }
15327
+ });
15328
+ /**
15329
+ * @private
15330
+ */
15331
+ const themedCallButtonStyle = (theme) => ({
15332
+ root: {
15333
+ fontWeight: theme.fonts.medium.fontWeight,
15334
+ fontSize: theme.fonts.medium.fontSize,
15335
+ width: '100%',
15336
+ height: '2.5rem',
15337
+ borderRadius: 3,
15338
+ padding: '0.625rem'
15339
+ },
15340
+ textContainer: {
15341
+ display: 'contents'
15342
+ }
15343
+ });
15159
15344
 
15345
+ // Copyright (c) Microsoft Corporation.
15346
+ // Licensed under the MIT license.
15347
+ /**
15348
+ * @private
15349
+ */
15350
+ const compositeOuterContainerStyles = {
15351
+ root: {
15352
+ width: '100%',
15353
+ // Create a new stacking context so that DrawerMenu can be positioned absolutely.
15354
+ position: 'relative'
15355
+ }
15356
+ };
15357
+ /** @private */
15358
+ const callCompositeContainerStyles = {
15359
+ root: {
15360
+ // Start a new stacking context so that any `position:absolute` elements
15361
+ // inside the call composite do not compete with its siblings.
15362
+ position: 'relative'
15363
+ }
15364
+ };
15365
+ /** @private */
15366
+ const controlBarContainerStyles = {
15367
+ root: {
15368
+ // Start a new stacking context so that any `position:absolute` elements
15369
+ // inside the control bar do not compete with its siblings.
15370
+ position: 'relative'
15371
+ }
15372
+ };
15373
+ /** @private */
15374
+ const drawerContainerStyles$1 = {
15375
+ root: {
15376
+ position: 'absolute',
15377
+ top: 0,
15378
+ left: 0,
15379
+ width: '100%',
15380
+ height: '100%',
15381
+ // Any zIndex > 0 will work because this is the only absolutely
15382
+ // positioned element in the container.
15383
+ zIndex: 1
15384
+ }
15385
+ };
15386
+
15387
+ // Copyright (c) Microsoft Corporation.
15388
+ /** @private */
15389
+ const CallingDialpad = (props) => {
15390
+ const { strings, isMobile, showDialpad, onDismissDialpad } = props;
15391
+ const [textFieldInput, setTextFieldInput] = React.useState('');
15392
+ const theme = react.useTheme();
15393
+ const onDismissTriggered = () => {
15394
+ setTextFieldInput('');
15395
+ onDismissDialpad();
15396
+ };
15397
+ const onClickCall = () => {
15398
+ //place holder for adding calling functionality
15399
+ console.log(textFieldInput);
15400
+ };
15401
+ const dialpadModelStyle = React.useMemo(() => themedDialpadModelStyle(theme), [theme]);
15402
+ const dialpadStyle = React.useMemo(() => themedDialpadStyle(isMobile, theme), [theme, isMobile]);
15403
+ const callButtonStyle = React.useMemo(() => themedCallButtonStyle(theme), [theme]);
15404
+ const dialpadComponent = () => {
15405
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
15406
+ React__default['default'].createElement(Dialpad, { onChange: setTextFieldInput, styles: dialpadStyle }),
15407
+ React__default['default'].createElement(react.PrimaryButton, { text: strings.dialpadStartCallButtonLabel, onRenderIcon: () => DialpadStartCallIconTrampoline(), onClick: onClickCall, styles: callButtonStyle, disabled: textFieldInput === '' })));
15408
+ };
15409
+ if (isMobile) {
15410
+ return (React__default['default'].createElement(react.Stack, { "data-ui-id": "call-with-chat-composite-dialpad" }, showDialpad && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles$1 },
15411
+ React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onDismissTriggered },
15412
+ React__default['default'].createElement(react.Stack, { style: { padding: '16px' } }, dialpadComponent()))))));
15413
+ }
15414
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Modal, { titleAriaId: strings.dialpadModalAriaLabel, isOpen: showDialpad, onDismiss: onDismissTriggered, isBlocking: true, styles: dialpadModelStyle, "data-ui-id": "call-with-chat-composite-dialpad" },
15415
+ React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center" },
15416
+ React__default['default'].createElement(react.Text, null, strings.dialpadModalTitle),
15417
+ React__default['default'].createElement(react.IconButton, { iconProps: { iconName: 'Cancel' }, ariaLabel: strings.dialpadCloseModalButtonAriaLabel, onClick: onDismissTriggered, style: { color: 'black' } })),
15418
+ React__default['default'].createElement(react.Stack, null, dialpadComponent()))));
15419
+ };
15420
+ function DialpadStartCallIconTrampoline() {
15421
+ /* @conditional-compile-remove(PSTN-calls) */
15422
+ return React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "DialpadStartCall" });
15423
+ }
15424
+
15425
+ // Copyright (c) Microsoft Corporation.
15426
+ const mainScreenContainerStyle = {
15427
+ height: '100%',
15428
+ width: '100%'
15429
+ };
15430
+ /**
15431
+ * @private
15432
+ */
15433
+ const mainScreenContainerStyleDesktop = react.mergeStyles(Object.assign(Object.assign({}, mainScreenContainerStyle), { minWidth: '30rem', minHeight: '22rem' // max height of min-height of composite pages (Configuration page)
15434
+ }));
15435
+ /**
15436
+ * @private
15437
+ */
15438
+ const mainScreenContainerStyleMobile = react.mergeStyles(Object.assign(Object.assign({}, mainScreenContainerStyle), { minWidth: '17.5rem', minHeight: '13rem' // max height of min-height of composite pages (Configuration page & Call page)
15439
+ }));
15440
+ /** @private */
15441
+ const drawerContainerStyles = {
15442
+ root: {
15443
+ position: 'absolute',
15444
+ top: 0,
15445
+ left: 0,
15446
+ width: '100%',
15447
+ height: '100%',
15448
+ // Any zIndex > 0 will work because this is the only absolutely
15449
+ // positioned element in the container.
15450
+ zIndex: 1
15451
+ }
15452
+ };
15453
+
15454
+ // Copyright (c) Microsoft Corporation.
15455
+ /** @private */
15456
+ const AddPeopleDropdown = (props) => {
15457
+ const theme = react.useTheme();
15458
+ const { inviteLink, strings, mobileView } = props;
15459
+ const [showDialpad, setShowDialpad] = React.useState(false);
15460
+ const menuStyleThemed = React.useMemo(() => themedMenuStyle(theme), [theme]);
15461
+ const copyLinkButtonStylesThemed = React.useMemo(() => themedCopyLinkButtonStyles(theme, mobileView), [mobileView, theme]);
15462
+ const defaultMenuProps = React.useMemo(() => {
15463
+ const menuProps = {
15464
+ styles: menuStyleThemed,
15465
+ items: [],
15466
+ useTargetWidth: true,
15467
+ calloutProps: {
15468
+ preventDismissOnEvent: _preventDismissOnEvent
15469
+ }
15470
+ };
15471
+ if (inviteLink) {
15472
+ menuProps.items.push({
15473
+ key: 'InviteLinkKey',
15474
+ text: strings.copyInviteLinkButtonLabel,
15475
+ itemProps: { styles: copyLinkButtonStylesThemed },
15476
+ iconProps: { iconName: 'Link', style: iconStyles },
15477
+ onClick: () => copy__default['default'](inviteLink)
15478
+ });
15479
+ }
15480
+ menuProps.items.push({
15481
+ key: 'DialpadKey',
15482
+ text: strings.openDialpadButtonLabel,
15483
+ itemProps: { styles: copyLinkButtonStylesThemed },
15484
+ iconProps: { iconName: PeoplePaneOpenDialpadIconNameTrampoline(), style: iconStyles },
15485
+ onClick: () => setShowDialpad(true),
15486
+ 'data-ui-id': 'call-with-chat-composite-dial-phone-number-button'
15487
+ });
15488
+ return menuProps;
15489
+ }, [
15490
+ strings.copyInviteLinkButtonLabel,
15491
+ strings.openDialpadButtonLabel,
15492
+ copyLinkButtonStylesThemed,
15493
+ inviteLink,
15494
+ menuStyleThemed
15495
+ ]);
15496
+ const onDismissDialpad = () => {
15497
+ setShowDialpad(false);
15498
+ };
15499
+ const [addPeopleDrawerMenuItems, setAddPeopleDrawerMenuItems] = React.useState([]);
15500
+ const setDrawerMenuItemsForAddPeople = React.useMemo(() => {
15501
+ return () => {
15502
+ const drawerMenuItems = defaultMenuProps.items.map((contextualMenu) => convertContextualMenuItemToDrawerMenuItem(contextualMenu, () => setAddPeopleDrawerMenuItems([])));
15503
+ setAddPeopleDrawerMenuItems(drawerMenuItems);
15504
+ };
15505
+ }, [defaultMenuProps, setAddPeopleDrawerMenuItems]);
15506
+ if (mobileView) {
15507
+ return (React__default['default'].createElement(react.Stack, null,
15508
+ React__default['default'].createElement(react.Stack.Item, { styles: copyLinkButtonContainerStyles },
15509
+ React__default['default'].createElement(react.PrimaryButton, { onClick: setDrawerMenuItemsForAddPeople, styles: copyLinkButtonStylesThemed, onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, "data-ui-id": "call-with-chat-composite-add-people-button" })),
15510
+ addPeopleDrawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles, "data-ui-id": "call-with-chat-composite-add-people-dropdown" },
15511
+ React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setAddPeopleDrawerMenuItems([]), items: addPeopleDrawerMenuItems }))),
15512
+ React__default['default'].createElement(CallingDialpad, { isMobile: true, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad })));
15513
+ }
15514
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Stack, null,
15515
+ React__default['default'].createElement(CallingDialpad, { isMobile: false, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad }),
15516
+ React__default['default'].createElement(react.Stack, { styles: copyLinkButtonStackStyles },
15517
+ React__default['default'].createElement(react.DefaultButton, { onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, menuProps: defaultMenuProps, styles: copyLinkButtonStylesThemed, "data-ui-id": "call-with-chat-composite-add-people-button" })))));
15518
+ };
15519
+ function PeoplePaneOpenDialpadIconNameTrampoline() {
15520
+ /* @conditional-compile-remove(PSTN-calls) */
15521
+ return 'PeoplePaneOpenDialpad';
15522
+ }
15523
+ function PeoplePaneAddPersonIconTrampoline() {
15524
+ /* @conditional-compile-remove(PSTN-calls) */
15525
+ return React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "PeoplePaneAddPerson" });
15526
+ }
15527
+
15528
+ // Copyright (c) Microsoft Corporation.
15529
+ /** @private */
15530
+ const AddPeopleButton = (props) => {
15531
+ const { inviteLink, mobileView, strings, participantList } = props;
15532
+ const theme = react.useTheme();
15533
+ React.useMemo(() => react.concatStyleSets(copyLinkButtonStyles, themedCopyLinkButtonStyles$1(mobileView, theme)), [mobileView, theme]);
15534
+ /* @conditional-compile-remove(PSTN-calls) */
15535
+ if (mobileView) {
15536
+ return React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink });
15537
+ }
15538
+ else {
15539
+ return (React__default['default'].createElement(react.Stack, { tokens: peoplePaneContainerTokens },
15540
+ React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink }),
15541
+ participantList));
15542
+ }
15543
+ };
15544
+
15545
+ // Copyright (c) Microsoft Corporation.
15546
+ // Licensed under the MIT license.
15160
15547
  var __awaiter$8 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15161
15548
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15162
15549
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -15199,23 +15586,12 @@ const PeoplePaneContent = (props) => {
15199
15586
  onParticipantClick: props.mobileView ? setDrawerMenuItemsForParticipant : undefined });
15200
15587
  }, [participantListDefaultProps, props.mobileView, setDrawerMenuItemsForParticipant, onRemoveParticipant]);
15201
15588
  const participantList = (React__default['default'].createElement(ParticipantListWithHeading, { isMobile: props.mobileView, participantListProps: participantListProps, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, title: props.strings.peoplePaneSubTitle }));
15202
- const theme = react.useTheme();
15203
- const copyLinkButtonStylesThemed = React.useMemo(() => react.concatStyleSets(copyLinkButtonStyles, {
15204
- root: {
15205
- minHeight: props.mobileView ? '3rem' : '2.5rem',
15206
- borderRadius: props.mobileView ? theme.effects.roundedCorner6 : theme.effects.roundedCorner4
15207
- }
15208
- }), [props.mobileView, theme.effects.roundedCorner6, theme.effects.roundedCorner4]);
15209
15589
  if (props.mobileView) {
15210
15590
  return (React__default['default'].createElement(react.Stack, { verticalFill: true, styles: peoplePaneContainerStyle, tokens: peoplePaneContainerTokens },
15211
15591
  React__default['default'].createElement(react.Stack.Item, { grow: true, styles: participantListContainerStyles }, participantList),
15212
- inviteLink && (React__default['default'].createElement(react.Stack.Item, { styles: copyLinkButtonContainerStyles },
15213
- React__default['default'].createElement(react.PrimaryButton, { onClick: () => copy__default['default'](inviteLink), styles: copyLinkButtonStylesThemed, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "Link", style: linkIconStyles }), text: strings.copyInviteLinkButtonLabel })))));
15592
+ React__default['default'].createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings })));
15214
15593
  }
15215
- return (React__default['default'].createElement(react.Stack, { tokens: peoplePaneContainerTokens },
15216
- inviteLink && (React__default['default'].createElement(react.Stack, { styles: copyLinkButtonStackStyles },
15217
- React__default['default'].createElement(react.DefaultButton, { text: strings.copyInviteLinkButtonLabel, onRenderIcon: () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: "Link", style: linkIconStyles }), onClick: () => copy__default['default'](inviteLink), styles: copyLinkButtonStylesThemed }))),
15218
- participantList));
15594
+ return (React__default['default'].createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings }));
15219
15595
  };
15220
15596
  /**
15221
15597
  * Create default contextual menu items for particant
@@ -15244,54 +15620,6 @@ const createDefaultContextualMenuItems = (participant, strings, onRemoveParticip
15244
15620
  }
15245
15621
  return menuItems;
15246
15622
  };
15247
- /**
15248
- * Convert IContextualMenuItem to _DrawerMenuItemProps
15249
- * @param contextualMenu - IContextualMenuItem to convert
15250
- * @param onDrawerMenuItemClick - callback to call when converted DrawerMenuItem is clicked
15251
- * @returns DrawerMenuItem
15252
- */
15253
- const convertContextualMenuItemToDrawerMenuItem = (contextualMenu, onDrawerMenuItemClick) => {
15254
- return {
15255
- itemKey: contextualMenu.key,
15256
- onItemClick: () => {
15257
- var _a;
15258
- (_a = contextualMenu.onClick) === null || _a === void 0 ? void 0 : _a.call(contextualMenu);
15259
- onDrawerMenuItemClick();
15260
- },
15261
- iconProps: contextualMenu.iconProps,
15262
- text: contextualMenu.text,
15263
- disabled: contextualMenu.disabled
15264
- };
15265
- };
15266
-
15267
- // Copyright (c) Microsoft Corporation.
15268
- const mainScreenContainerStyle = {
15269
- height: '100%',
15270
- width: '100%'
15271
- };
15272
- /**
15273
- * @private
15274
- */
15275
- const mainScreenContainerStyleDesktop = react.mergeStyles(Object.assign(Object.assign({}, mainScreenContainerStyle), { minWidth: '30rem', minHeight: '22rem' // max height of min-height of composite pages (Configuration page)
15276
- }));
15277
- /**
15278
- * @private
15279
- */
15280
- const mainScreenContainerStyleMobile = react.mergeStyles(Object.assign(Object.assign({}, mainScreenContainerStyle), { minWidth: '17.5rem', minHeight: '13rem' // max height of min-height of composite pages (Configuration page & Call page)
15281
- }));
15282
- /** @private */
15283
- const drawerContainerStyles$1 = {
15284
- root: {
15285
- position: 'absolute',
15286
- top: 0,
15287
- left: 0,
15288
- width: '100%',
15289
- height: '100%',
15290
- // Any zIndex > 0 will work because this is the only absolutely
15291
- // positioned element in the container.
15292
- zIndex: 1
15293
- }
15294
- };
15295
15623
 
15296
15624
  // Copyright (c) Microsoft Corporation.
15297
15625
  /**
@@ -15479,7 +15807,7 @@ const CallPane = (props) => {
15479
15807
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
15480
15808
  React__default['default'].createElement(PeoplePaneContent, Object.assign({}, props, { onRemoveParticipant: removeParticipantFromCall, setDrawerMenuItems: setDrawerMenuItems, strings: strings }))))))),
15481
15809
  props.mobileView && (React__default['default'].createElement(ModalLocalAndRemotePIP, { callAdapter: props.callAdapter, modalLayerHostId: props.modalLayerHostId, hidden: hidden, styles: pipStyles, minDragPosition: minMaxDragPosition.minDragPosition, maxDragPosition: minMaxDragPosition.maxDragPosition })),
15482
- drawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles$1 },
15810
+ drawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles },
15483
15811
  React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setDrawerMenuItems([]), items: drawerMenuItems })))));
15484
15812
  };
15485
15813
 
@@ -17698,48 +18026,6 @@ const getDesktopEndCallButtonStyles = (theme) => {
17698
18026
  };
17699
18027
  const isEnabled$1 = (option) => option !== false;
17700
18028
 
17701
- // Copyright (c) Microsoft Corporation.
17702
- // Licensed under the MIT license.
17703
- /**
17704
- * @private
17705
- */
17706
- const compositeOuterContainerStyles = {
17707
- root: {
17708
- width: '100%',
17709
- // Create a new stacking context so that DrawerMenu can be positioned absolutely.
17710
- position: 'relative'
17711
- }
17712
- };
17713
- /** @private */
17714
- const callCompositeContainerStyles = {
17715
- root: {
17716
- // Start a new stacking context so that any `position:absolute` elements
17717
- // inside the call composite do not compete with its siblings.
17718
- position: 'relative'
17719
- }
17720
- };
17721
- /** @private */
17722
- const controlBarContainerStyles = {
17723
- root: {
17724
- // Start a new stacking context so that any `position:absolute` elements
17725
- // inside the control bar do not compete with its siblings.
17726
- position: 'relative'
17727
- }
17728
- };
17729
- /** @private */
17730
- const drawerContainerStyles = {
17731
- root: {
17732
- position: 'absolute',
17733
- top: 0,
17734
- left: 0,
17735
- width: '100%',
17736
- height: '100%',
17737
- // Any zIndex > 0 will work because this is the only absolutely
17738
- // positioned element in the container.
17739
- zIndex: 1
17740
- }
17741
- };
17742
-
17743
18029
  // Copyright (c) Microsoft Corporation.
17744
18030
  // Licensed under the MIT license.
17745
18031
  var __awaiter$3 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -18157,7 +18443,7 @@ const CallWithChatPane = (props) => {
18157
18443
  React__default['default'].createElement(react.Stack, { styles: props.activePane === 'chat' ? availableSpaceStyles : hiddenStyles }, chatContent),
18158
18444
  React__default['default'].createElement(react.Stack, { styles: props.activePane === 'people' ? availableSpaceStyles : hiddenStyles }, peopleContent)))),
18159
18445
  props.mobileView && (React__default['default'].createElement(ModalLocalAndRemotePIP, { callAdapter: props.callAdapter, modalLayerHostId: props.modalLayerHostId, hidden: hidden, styles: pipStyles, minDragPosition: minMaxDragPosition.minDragPosition, maxDragPosition: minMaxDragPosition.maxDragPosition })),
18160
- drawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles },
18446
+ drawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles$1 },
18161
18447
  React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setDrawerMenuItems([]), items: drawerMenuItems })))));
18162
18448
  };
18163
18449
 
@@ -18270,7 +18556,7 @@ const CallWithChatScreen = (props) => {
18270
18556
  React__default['default'].createElement(CallWithChatControlBar, { callAdapter: callAdapter, chatAdapter: chatProps.adapter, chatButtonChecked: activePane === 'chat', onChatButtonClicked: toggleChat, peopleButtonChecked: activePane === 'people', onPeopleButtonClicked: togglePeople, onMoreButtonClicked: onMoreButtonClicked, mobileView: mobileView, disableButtonsForLobbyPage: isInLobbyOrConnecting, callControls: props.callControls, containerHeight: containerHeight, containerWidth: containerWidth })))),
18271
18557
  showControlBar && showDrawer && (React__default['default'].createElement(ChatAdapterProvider, { adapter: chatProps.adapter },
18272
18558
  React__default['default'].createElement(CallAdapterProvider, { adapter: callAdapter },
18273
- React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles },
18559
+ React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles$1 },
18274
18560
  React__default['default'].createElement(PreparedMoreDrawer, { callControls: props.callControls, onLightDismiss: closeDrawer, onPeopleButtonClicked: onMoreDrawerPeopleClicked }))))),
18275
18561
  // This layer host is for ModalLocalAndRemotePIP in CallWithChatPane. This LayerHost cannot be inside the CallWithChatPane
18276
18562
  // because when the CallWithChatPane is hidden, ie. style property display is 'none', it takes up no space. This causes problems when dragging