@azure/communication-react 1.3.2-alpha-202208100014.0 → 1.3.3-alpha-202208160041.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 (142) hide show
  1. package/CHANGELOG.md +10 -5
  2. package/dist/communication-react.d.ts +47 -4
  3. package/dist/dist-cjs/communication-react/index.js +577 -124
  4. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.d.ts +1 -1
  7. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.d.ts.map +1 -1
  8. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js +2 -3
  9. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js.map +1 -1
  10. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.d.ts.map +1 -1
  11. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.js +2 -2
  12. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.js.map +1 -1
  13. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.d.ts.map +1 -1
  14. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js +1 -1
  15. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js.map +1 -1
  16. package/dist/dist-esm/communication-react/src/index.js +1 -1
  17. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/CameraButton.d.ts.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/CameraButton.js +3 -1
  20. package/dist/dist-esm/react-components/src/components/CameraButton.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts +3 -1
  22. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +5 -5
  24. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  25. package/dist/dist-esm/react-components/src/components/HoldButton.d.ts +1 -1
  26. package/dist/dist-esm/react-components/src/components/ParticipantItem.d.ts.map +1 -1
  27. package/dist/dist-esm/react-components/src/components/ParticipantItem.js +9 -4
  28. package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +1 -1
  30. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +3 -3
  32. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/StreamMedia.d.ts.map +1 -1
  34. package/dist/dist-esm/react-components/src/components/StreamMedia.js +1 -1
  35. package/dist/dist-esm/react-components/src/components/StreamMedia.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.js +1 -1
  37. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.js.map +1 -1
  38. package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/VideoGallery.js +46 -16
  40. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.d.ts +8 -0
  42. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.d.ts.map +1 -1
  43. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js +17 -0
  44. package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js.map +1 -1
  45. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +3 -0
  46. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts.map +1 -1
  47. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +5 -5
  49. package/dist/dist-esm/react-components/src/theming/icons.js +5 -5
  50. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  51. package/dist/dist-esm/react-components/src/types/OnRender.d.ts +3 -0
  52. package/dist/dist-esm/react-components/src/types/OnRender.d.ts.map +1 -1
  53. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +13 -0
  55. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  56. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +16 -0
  57. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +2 -1
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts.map +1 -1
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +10 -2
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +8 -2
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts.map +1 -1
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +2 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.d.ts.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +67 -1
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.d.ts +12 -0
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.d.ts.map +1 -0
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js +72 -0
  73. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/HoldPane.js.map +1 -0
  74. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.d.ts.map +1 -1
  75. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +4 -2
  76. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
  77. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.d.ts.map +1 -1
  78. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +26 -2
  79. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  80. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/People.d.ts.map +1 -1
  81. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/People.js +11 -1
  82. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/People.js.map +1 -1
  83. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.d.ts.map +1 -1
  84. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +4 -0
  85. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
  86. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.d.ts +15 -0
  87. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.d.ts.map +1 -0
  88. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.js +27 -0
  89. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.js.map +1 -0
  90. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js +2 -1
  91. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js.map +1 -1
  92. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.d.ts +32 -0
  93. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.d.ts.map +1 -0
  94. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js +73 -0
  95. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/HoldPane.styles.js.map +1 -0
  96. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/MediaGallery.styles.d.ts +40 -0
  97. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/MediaGallery.styles.d.ts.map +1 -0
  98. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/MediaGallery.styles.js +64 -0
  99. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/MediaGallery.styles.js.map +1 -0
  100. package/dist/dist-esm/react-composites/src/composites/CallComposite/types/CallControlOptions.d.ts +5 -0
  101. package/dist/dist-esm/react-composites/src/composites/CallComposite/types/CallControlOptions.d.ts.map +1 -1
  102. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts.map +1 -1
  103. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +5 -0
  104. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  105. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +4 -0
  106. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts.map +1 -1
  107. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  108. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.d.ts.map +1 -1
  109. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js +23 -6
  110. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js.map +1 -1
  111. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +2 -1
  112. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts.map +1 -1
  113. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +8 -0
  114. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  115. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +7 -1
  116. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts.map +1 -1
  117. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +2 -1
  118. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts.map +1 -1
  119. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +4 -0
  120. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  121. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +4 -4
  122. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -1
  123. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js +5 -5
  124. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js.map +1 -1
  125. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.d.ts +1 -1
  126. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.styles.js +1 -1
  127. package/dist/dist-esm/react-composites/src/composites/{CallWithChatComposite → common}/MoreButton.d.ts +0 -0
  128. package/dist/dist-esm/react-composites/src/composites/common/MoreButton.d.ts.map +1 -0
  129. package/dist/dist-esm/react-composites/src/composites/{CallWithChatComposite → common}/MoreButton.js +1 -1
  130. package/dist/dist-esm/react-composites/src/composites/common/MoreButton.js.map +1 -0
  131. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.d.ts +16 -0
  132. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.d.ts.map +1 -0
  133. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js +36 -0
  134. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js.map +1 -0
  135. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.d.ts +11 -0
  136. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.d.ts.map +1 -0
  137. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js +38 -0
  138. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.styles.js.map +1 -0
  139. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +5 -1
  140. package/package.json +8 -8
  141. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/MoreButton.d.ts.map +0 -1
  142. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/MoreButton.js.map +0 -1
@@ -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-202208100014.0';
195
+ var telemetryVersion = '1.3.3-alpha-202208160041.0';
196
196
 
197
197
  // Copyright (c) Microsoft Corporation.
198
198
  /**
@@ -405,7 +405,7 @@ var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments,
405
405
  *
406
406
  * @internal
407
407
  */
408
- const _isInCall = (callStatus) => !!callStatus && !['None', 'Disconnected', 'Connecting'].includes(callStatus);
408
+ const _isInCall = (callStatus) => !!callStatus && !['None', 'Disconnected', 'Connecting', 'LocalHold', 'RemoteHold', 'Ringing'].includes(callStatus);
409
409
  /**
410
410
  * Check if the call state represents being in the lobby or waiting to be admitted.
411
411
  *
@@ -759,7 +759,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
759
759
  yield (call === null || call === void 0 ? void 0 : call.addParticipant(participant));
760
760
  }
761
761
  });
762
- /* @conditional-compile-remove(dialpad) */
762
+ /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
763
763
  const onSendDtmfTone = (dtmfTone) => __awaiter$t(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
764
764
  return {
765
765
  onHangUp,
@@ -782,8 +782,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
782
782
  onStartLocalVideo,
783
783
  onDisposeRemoteStreamView,
784
784
  onDisposeLocalStreamView,
785
- /* @conditional-compile-remove(dialpad) */
786
- onSendDtmfTone
785
+ /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */ onSendDtmfTone
787
786
  };
788
787
  });
789
788
  /**
@@ -958,7 +957,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
958
957
  wordBreak: 'break-word'
959
958
  });
960
959
 
961
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On Hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$d={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var HoldButton$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};
960
+ var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On Hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$d={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On Hold"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton,videoTile:videoTile};
962
961
 
963
962
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};var typingIndicator$c={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$c={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait."};var messageStatusIndicator$c={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$c={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$c={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$c={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$c={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$c={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$c={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$c={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options"};var errorBar$c={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$c={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad$c={placeholderText:"Enter a number"};var HoldButton$d={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};var en_GB$1 = {participantItem:participantItem$c,typingIndicator:typingIndicator$c,sendBox:sendBox$c,messageStatusIndicator:messageStatusIndicator$c,endCallButton:endCallButton$c,cameraButton:cameraButton$c,microphoneButton:microphoneButton$c,devicesButton:devicesButton$c,participantsButton:participantsButton$c,screenShareButton:screenShareButton$c,messageThread:messageThread$c,errorBar:errorBar$c,videoGallery:videoGallery$c,dialpad:dialpad$c,HoldButton:HoldButton$d};
964
963
 
@@ -1939,13 +1938,13 @@ const DEFAULT_COMPONENT_ICONS = {
1939
1938
  ParticipantItemOptionsHovered: React__default['default'].createElement(reactIcons.MoreHorizontal20Filled, null),
1940
1939
  ParticipantItemScreenShareStart: React__default['default'].createElement(reactIcons.ShareScreenStart20Filled, null),
1941
1940
  /* @conditional-compile-remove(PSTN-calls) */
1942
- HoldCall: React__default['default'].createElement(reactIcons.Pause20Filled, null),
1941
+ HoldCall: React__default['default'].createElement(reactIcons.Pause20Regular, null),
1943
1942
  /* @conditional-compile-remove(PSTN-calls) */
1944
- ResumeCall: React__default['default'].createElement(reactIcons.Play20Filled, null),
1943
+ ResumeCall: React__default['default'].createElement(reactIcons.Play20Regular, null),
1945
1944
  SendBoxSend: React__default['default'].createElement(reactIcons.Send20Regular, null),
1946
1945
  SendBoxSendHovered: React__default['default'].createElement(reactIcons.Send20Filled, null),
1947
1946
  VideoTileMicOff: React__default['default'].createElement(reactIcons.MicOff16Filled, null),
1948
- /* @conditional-compile-remove(dialpad) */
1947
+ /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
1949
1948
  BackSpace: React__default['default'].createElement(reactIcons.Backspace20Regular, null)
1950
1949
  };
1951
1950
 
@@ -4316,7 +4315,7 @@ const StreamMedia = (props) => {
4316
4315
  };
4317
4316
  }, [videoStreamElement]);
4318
4317
  return (React__default['default'].createElement("div", { className: container() },
4319
- React__default['default'].createElement("div", { className: react.mergeStyles(isMirrored && pipEnabled ? invertedVideoInPipStyle(theme) : mediaContainer(theme), styles === null || styles === void 0 ? void 0 : styles.root), ref: containerEl }),
4318
+ React__default['default'].createElement("div", { "data-ui-id": "stream-media-container", className: react.mergeStyles(isMirrored && pipEnabled ? invertedVideoInPipStyle(theme) : mediaContainer(theme), styles === null || styles === void 0 ? void 0 : styles.root), ref: containerEl }),
4320
4319
  loadingState === 'loading' && (React__default['default'].createElement("div", { className: loadingSpinnerContainer() },
4321
4320
  React__default['default'].createElement(react.Spinner, { "data-ui-id": "stream-media-loading-spinner", styles: loadSpinnerStyles })))));
4322
4321
  };
@@ -4342,6 +4341,23 @@ const participantItemContainerStyle = (options) => {
4342
4341
  const menuButtonContainerStyle = {
4343
4342
  width: '1.5rem'
4344
4343
  };
4344
+ /**
4345
+ * @private
4346
+ */
4347
+ const participantStateMaxWidth = '5rem';
4348
+ /**
4349
+ * @private
4350
+ */
4351
+ const participantStateStringStyles = {
4352
+ maxWidth: participantStateMaxWidth,
4353
+ overflow: 'hidden',
4354
+ textOverflow: 'ellipsis',
4355
+ whiteSpace: 'nowrap',
4356
+ lineHeight: 'normal',
4357
+ paddingLeft: '1rem',
4358
+ marginLeft: 'auto',
4359
+ marginRight: 0
4360
+ };
4345
4361
  /**
4346
4362
  * @private
4347
4363
  */
@@ -4375,7 +4391,9 @@ const meContainerStyle = {
4375
4391
  * @public
4376
4392
  */
4377
4393
  const ParticipantItem = (props) => {
4378
- const { userId, displayName, onRenderAvatar, menuItems, onRenderIcon, presence, styles, me, onClick, showParticipantOverflowTooltip } = props;
4394
+ const { userId, displayName, onRenderAvatar, menuItems, onRenderIcon, presence, styles, me, onClick, showParticipantOverflowTooltip
4395
+ /* @conditional-compile-remove(PSTN-calls) */
4396
+ } = props;
4379
4397
  const [itemHovered, setItemHovered] = React.useState(false);
4380
4398
  const [menuHidden, setMenuHidden] = React.useState(true);
4381
4399
  const containerRef = React.useRef(null);
@@ -4411,11 +4429,14 @@ const ParticipantItem = (props) => {
4411
4429
  onClick === null || onClick === void 0 ? void 0 : onClick(props);
4412
4430
  }
4413
4431
  }, tabIndex: 0 },
4414
- React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles({ width: `calc(100% - ${menuButtonContainerStyle.width})`, alignItems: 'center' }) },
4432
+ React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles({
4433
+ width: `calc(100% - ${!me && participantStateString ? participantStateMaxWidth : menuButtonContainerStyle.width})`,
4434
+ alignItems: 'center'
4435
+ }) },
4415
4436
  avatar,
4416
4437
  me && React__default['default'].createElement(react.Text, { className: meTextStyle }, strings.isMeText),
4417
4438
  React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(infoContainerStyle) }, onRenderIcon && onRenderIcon(props))),
4418
- !me && participantStateString ? (React__default['default'].createElement(react.Text, null, participantStateString)) : (React__default['default'].createElement("div", null, menuItems && menuItems.length > 0 && (React__default['default'].createElement(React__default['default'].Fragment, null,
4439
+ !me && participantStateString ? (React__default['default'].createElement(react.Text, { "data-ui-id": "participant-item-state-string", className: react.mergeStyles(participantStateStringStyles) }, participantStateString)) : (React__default['default'].createElement("div", null, menuItems && menuItems.length > 0 && (React__default['default'].createElement(React__default['default'].Fragment, null,
4419
4440
  menuButton,
4420
4441
  React__default['default'].createElement(react.ContextualMenu, { items: menuItems, hidden: menuHidden, target: containerRef, onItemClick: onDismissMenu, onDismiss: onDismissMenu, directionalHint: react.DirectionalHint.bottomRightEdge, className: contextualMenuStyle, calloutProps: {
4421
4442
  preventDismissOnEvent: _preventDismissOnEvent
@@ -4751,7 +4772,7 @@ const displayNameStyle = {
4751
4772
  /**
4752
4773
  * @private
4753
4774
  */
4754
- const participantStateStyle = {
4775
+ const participantStateStyle$1 = {
4755
4776
  textAlign: 'center',
4756
4777
  paddingTop: '0.5rem',
4757
4778
  fontWeight: 600,
@@ -4815,7 +4836,7 @@ const DefaultPlaceholder = (props) => {
4815
4836
  return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
4816
4837
  React__default['default'].createElement(react.Stack, { styles: defaultPersonaStyles },
4817
4838
  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 }),
4818
- participantStateString && React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStyle) }, participantStateString))));
4839
+ participantStateString && React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStyle$1) }, participantStateString))));
4819
4840
  };
4820
4841
  const defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };
4821
4842
  /**
@@ -4897,7 +4918,7 @@ const _RemoteVideoTile = React__default['default'].memo((props) => {
4897
4918
  isMuted, isSpeaking, isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, displayName, onRenderAvatar, showMuteIndicator,
4898
4919
  /* @conditional-compile-remove(one-to-n-calling) */
4899
4920
  /* @conditional-compile-remove(PSTN-calls) */
4900
- state } = props;
4921
+ participantState } = props;
4901
4922
  const remoteVideoStreamProps = React.useMemo(() => ({
4902
4923
  isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored,
4903
4924
  isScreenSharingOn,
@@ -4928,12 +4949,12 @@ const _RemoteVideoTile = React__default['default'].memo((props) => {
4928
4949
  // Returning `undefined` results in the placeholder with avatar being shown
4929
4950
  return undefined;
4930
4951
  }
4931
- return React__default['default'].createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isReceiving ? 'none' : 'loading' });
4952
+ return (React__default['default'].createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isReceiving === false ? 'loading' : 'none' }));
4932
4953
  }, [renderElement, isReceiving]);
4933
4954
  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,
4934
4955
  /* @conditional-compile-remove(one-to-n-calling) */
4935
4956
  /* @conditional-compile-remove(PSTN-calls) */
4936
- participantState: state }));
4957
+ participantState: participantState }));
4937
4958
  });
4938
4959
 
4939
4960
  // Copyright (c) Microsoft Corporation.
@@ -5361,7 +5382,7 @@ const RemoteScreenShare = React__default['default'].memo((props) => {
5361
5382
  participant: displayName
5362
5383
  })
5363
5384
  : '';
5364
- return (React__default['default'].createElement(VideoTile, { displayName: displayName, isMuted: isMuted, renderElement: renderElement ? (React__default['default'].createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isReceiving ? 'none' : 'loading' })) : undefined, onRenderPlaceholder: () => React__default['default'].createElement(LoadingSpinner, { loadingMessage: loadingMessage }) }));
5385
+ return (React__default['default'].createElement(VideoTile, { displayName: displayName, isMuted: isMuted, renderElement: renderElement ? (React__default['default'].createElement(StreamMedia, { videoStreamElement: renderElement, loadingState: isReceiving === false ? 'loading' : 'none' })) : undefined, onRenderPlaceholder: () => React__default['default'].createElement(LoadingSpinner, { loadingMessage: loadingMessage }) }));
5365
5386
  });
5366
5387
  const LoadingSpinner = (props) => {
5367
5388
  return (React__default['default'].createElement(react.Stack, { verticalAlign: "center", className: loadingStyle },
@@ -6139,7 +6160,7 @@ const modalMaxDragPosition = { x: localVideoTileOuterPaddingPX, y: localVideoTil
6139
6160
  * @public
6140
6161
  */
6141
6162
  const VideoGallery = (props) => {
6142
- var _a, _b, _c, _d;
6163
+ var _a, _b, _c, _d, _e;
6143
6164
  const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps } = props;
6144
6165
  const ids = useIdentifiers();
6145
6166
  const theme = useTheme();
@@ -6153,6 +6174,8 @@ const VideoGallery = (props) => {
6153
6174
  const isNarrow = containerWidth ? isNarrowWidth(containerWidth) : false;
6154
6175
  const visibleVideoParticipants = React.useRef([]);
6155
6176
  const visibleAudioParticipants = React.useRef([]);
6177
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
6178
+ const visibleCallingParticipants = React.useRef([]);
6156
6179
  const modalWidth = isNarrow ? SMALL_FLOATING_MODAL_SIZE_PX.width : LARGE_FLOATING_MODAL_SIZE_PX.width;
6157
6180
  const modalHeight = isNarrow ? SMALL_FLOATING_MODAL_SIZE_PX.height : LARGE_FLOATING_MODAL_SIZE_PX.height;
6158
6181
  // The minimum drag position is the top left of the video gallery. i.e. the modal (PiP) should not be able
@@ -6171,10 +6194,20 @@ const VideoGallery = (props) => {
6171
6194
  lastVisibleParticipants: visibleVideoParticipants.current,
6172
6195
  maxDominantSpeakers: maxRemoteVideoStreams
6173
6196
  }).slice(0, maxRemoteVideoStreams);
6197
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
6198
+ visibleCallingParticipants.current = smartDominantSpeakerParticipants({
6199
+ participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => p.state === ('Connecting' ))) !== null && _b !== void 0 ? _b : [],
6200
+ dominantSpeakers,
6201
+ lastVisibleParticipants: visibleCallingParticipants.current,
6202
+ maxDominantSpeakers: 0
6203
+ });
6174
6204
  // This set will be used to filter out participants already in visibleVideoParticipants
6175
6205
  const visibleVideoParticipantsSet = new Set(visibleVideoParticipants.current.map((p) => p.userId));
6206
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
6207
+ const visibleCallingParticipantsSet = new Set(visibleCallingParticipants.current.map((p) => p.userId));
6176
6208
  visibleAudioParticipants.current = smartDominantSpeakerParticipants({
6177
- participants: (_b = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => !visibleVideoParticipantsSet.has(p.userId))) !== null && _b !== void 0 ? _b : [],
6209
+ participants: (_c = remoteParticipants === null || remoteParticipants === void 0 ? void 0 : remoteParticipants.filter((p) => !visibleVideoParticipantsSet.has(p.userId) &&
6210
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ !visibleCallingParticipantsSet.has(p.userId))) !== null && _c !== void 0 ? _c : [],
6178
6211
  dominantSpeakers,
6179
6212
  lastVisibleParticipants: visibleAudioParticipants.current,
6180
6213
  maxDominantSpeakers: MAX_AUDIO_DOMINANT_SPEAKERS
@@ -6215,7 +6248,9 @@ const VideoGallery = (props) => {
6215
6248
  ]);
6216
6249
  const defaultOnRenderVideoTile = React.useCallback((participant, isVideoParticipant) => {
6217
6250
  const remoteVideoStream = participant.videoStream;
6218
- return (React__default['default'].createElement(_RemoteVideoTile, Object.assign({ key: participant.userId }, participant, { onCreateRemoteStreamView: isVideoParticipant ? onCreateRemoteStreamView : undefined, onDisposeRemoteStreamView: isVideoParticipant ? onDisposeRemoteStreamView : undefined, isAvailable: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isAvailable : false, isReceiving: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isReceiving : false, renderElement: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.renderElement : undefined, remoteVideoViewOptions: isVideoParticipant ? remoteVideoViewOptions : undefined, onRenderAvatar: onRenderAvatar, showMuteIndicator: showMuteIndicator })));
6251
+ return (React__default['default'].createElement(_RemoteVideoTile, Object.assign({ key: participant.userId }, participant, { onCreateRemoteStreamView: isVideoParticipant ? onCreateRemoteStreamView : undefined, onDisposeRemoteStreamView: isVideoParticipant ? onDisposeRemoteStreamView : undefined, isAvailable: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isAvailable : false, isReceiving: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.isReceiving : false, renderElement: isVideoParticipant ? remoteVideoStream === null || remoteVideoStream === void 0 ? void 0 : remoteVideoStream.renderElement : undefined, remoteVideoViewOptions: isVideoParticipant ? remoteVideoViewOptions : undefined, onRenderAvatar: onRenderAvatar, showMuteIndicator: showMuteIndicator,
6252
+ /* @conditional-compile-remove(PSTN-calls) */
6253
+ participantState: participant.state })));
6219
6254
  }, [onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, onRenderAvatar, showMuteIndicator]);
6220
6255
  const videoTiles = onRenderRemoteVideoTile
6221
6256
  ? visibleVideoParticipants.current.map((participant) => onRenderRemoteVideoTile(participant))
@@ -6227,25 +6262,38 @@ const VideoGallery = (props) => {
6227
6262
  : visibleAudioParticipants.current.map((participant) => {
6228
6263
  return defaultOnRenderVideoTile(participant, false);
6229
6264
  });
6265
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
6266
+ const callingTiles = onRenderRemoteVideoTile
6267
+ ? visibleCallingParticipants.current.map((participant) => onRenderRemoteVideoTile(participant))
6268
+ : visibleCallingParticipants.current.map((participant) => {
6269
+ return defaultOnRenderVideoTile(participant, false);
6270
+ });
6230
6271
  const screenShareParticipant = remoteParticipants.find((participant) => { var _a; return (_a = participant.screenShareStream) === null || _a === void 0 ? void 0 : _a.isAvailable; });
6231
6272
  const screenShareActive = screenShareParticipant || (localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.isScreenSharingOn);
6232
- let gridTiles = [];
6233
- let horizontalGalleryTiles = [];
6234
- if (screenShareActive) {
6235
- // If screen sharing is active, assign video and audio participants as horizontal gallery participants
6236
- horizontalGalleryTiles = videoTiles.concat(audioTiles);
6237
- }
6238
- else {
6239
- // If screen sharing is not active, then assign all video tiles as grid tiles.
6240
- // If there are no video tiles, then assign audio tiles as grid tiles.
6241
- gridTiles = videoTiles.length > 0 ? videoTiles : audioTiles;
6242
- horizontalGalleryTiles = videoTiles.length > 0 ? audioTiles : [];
6243
- }
6273
+ const createGridTiles = () => {
6274
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
6275
+ return videoTiles.length > 0 ? videoTiles : audioTiles.concat(callingTiles);
6276
+ };
6277
+ const gridTiles = createGridTiles();
6278
+ const createHorizontalGalleryTiles = () => {
6279
+ if (screenShareActive) {
6280
+ // If screen sharing is active, assign video and audio participants as horizontal gallery participants
6281
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
6282
+ return videoTiles.concat(audioTiles.concat(callingTiles));
6283
+ }
6284
+ else {
6285
+ // If screen sharing is not active, then assign all video tiles as grid tiles.
6286
+ // If there are no video tiles, then assign audio tiles as grid tiles.
6287
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
6288
+ return videoTiles.length > 0 ? audioTiles.concat(callingTiles) : [];
6289
+ }
6290
+ };
6291
+ const horizontalGalleryTiles = createHorizontalGalleryTiles();
6244
6292
  if (!shouldFloatLocalVideo && localParticipant) {
6245
6293
  gridTiles.push(localVideoTile);
6246
6294
  }
6247
6295
  const localScreenShareStreamComponent = React__default['default'].createElement(LocalScreenShare, { localParticipant: localParticipant });
6248
- const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_c = screenShareParticipant.screenShareStream) === null || _c === void 0 ? void 0 : _c.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView, isReceiving: (_d = screenShareParticipant.screenShareStream) === null || _d === void 0 ? void 0 : _d.isReceiving })));
6296
+ const remoteScreenShareComponent = screenShareParticipant && (React__default['default'].createElement(RemoteScreenShare, Object.assign({}, screenShareParticipant, { renderElement: (_d = screenShareParticipant.screenShareStream) === null || _d === void 0 ? void 0 : _d.renderElement, onCreateRemoteStreamView: onCreateRemoteStreamView, onDisposeRemoteStreamView: onDisposeRemoteStreamView, isReceiving: (_e = screenShareParticipant.screenShareStream) === null || _e === void 0 ? void 0 : _e.isReceiving })));
6249
6297
  const horizontalGalleryPresent = horizontalGalleryTiles && horizontalGalleryTiles.length > 0;
6250
6298
  const layerHostId = reactHooks.useId('layerhost');
6251
6299
  return (React__default['default'].createElement("div", { "data-ui-id": ids.videoGallery, ref: containerRef, className: react.mergeStyles(videoGalleryOuterDivStyle, styles === null || styles === void 0 ? void 0 : styles.root) },
@@ -6725,7 +6773,9 @@ const CameraButton = (props) => {
6725
6773
  const [announcerString, setAnnouncerString] = React.useState(undefined);
6726
6774
  let disabled = props.disabled || waitForCamera;
6727
6775
  /* @conditional-compile-remove(rooms) */
6728
- disabled = disabled || !_usePermissions().cameraButton;
6776
+ const permissions = _usePermissions();
6777
+ /* @conditional-compile-remove(rooms) */
6778
+ disabled = disabled || !permissions.cameraButton;
6729
6779
  const onRenderCameraOnIcon = () => (React__default['default'].createElement(HighContrastAwareIcon, { disabled: disabled, iconName: "ControlButtonCameraOn" }));
6730
6780
  const onRenderCameraOffIcon = () => (React__default['default'].createElement(HighContrastAwareIcon, { disabled: disabled, iconName: "ControlButtonCameraOff" }));
6731
6781
  if (waitForCamera && strings.tooltipVideoLoadingContent) {
@@ -7770,7 +7820,7 @@ const DialpadContainer = (props) => {
7770
7820
  var _a, _b;
7771
7821
  const theme = react.useTheme();
7772
7822
  const [textValue, setTextValue] = React.useState('');
7773
- const { onSendDtmfTone, onClickDialpadButton, onDisplayDialpadInput, onChange } = props;
7823
+ const { onSendDtmfTone, onClickDialpadButton, onDisplayDialpadInput, onChange, showDeleteButton = true } = props;
7774
7824
  const sanitizeInput = (input) => {
7775
7825
  // remove non-valid characters from input: letters,special characters excluding +, *,#
7776
7826
  return input.replace(/[^\d*#+]/g, '');
@@ -7805,7 +7855,7 @@ const DialpadContainer = (props) => {
7805
7855
  onChange(onDisplayDialpadInput ? onDisplayDialpadInput(modifiedInput) : formatPhoneNumber(modifiedInput));
7806
7856
  }
7807
7857
  };
7808
- return (React__default['default'].createElement("div", { className: react.mergeStyles(containerStyles$1(theme), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root), "data-test-id": "dialpadContainer" },
7858
+ return (React__default['default'].createElement("div", { className: react.mergeStyles(containerStyles$1(theme), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root), "data-test-id": "dialpadContainer", "data-ui-id": "dialpadContainer" },
7809
7859
  React__default['default'].createElement(react.TextField, { styles: react.concatStyleSets(textFieldStyles(theme), (_b = props.styles) === null || _b === void 0 ? void 0 : _b.textField), value: onDisplayDialpadInput ? onDisplayDialpadInput(textValue) : formatPhoneNumber(textValue),
7810
7860
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7811
7861
  onChange: (e) => {
@@ -7817,7 +7867,7 @@ const DialpadContainer = (props) => {
7817
7867
  }
7818
7868
  }, placeholder: props.strings.placeholderText, "data-test-id": "dialpad-input", onRenderSuffix: () => {
7819
7869
  var _a;
7820
- return (React__default['default'].createElement(React__default['default'].Fragment, null, textValue.length !== 0 && (React__default['default'].createElement(react.IconButton, { ariaLabel: props.strings.deleteButtonAriaLabel, onClick: deleteNumbers, styles: react.concatStyleSets(iconButtonStyles(theme), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.deleteIcon), iconProps: { iconName: 'BackSpace' } }))));
7870
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, showDeleteButton && textValue.length !== 0 && (React__default['default'].createElement(react.IconButton, { ariaLabel: props.strings.deleteButtonAriaLabel, onClick: deleteNumbers, styles: react.concatStyleSets(iconButtonStyles(theme), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.deleteIcon), iconProps: { iconName: 'BackSpace' } }))));
7821
7871
  } }),
7822
7872
  React__default['default'].createElement(react.FocusZone, null, dialPadButtonsDefault.map((rows, rowIndex) => {
7823
7873
  return (React__default['default'].createElement(react.Stack, { horizontal: true, key: `row_${rowIndex}`, horizontalAlign: "stretch" }, rows.map((button, columnIndex) => (React__default['default'].createElement(DialpadButton, { key: `button_${columnIndex}`,
@@ -7848,10 +7898,10 @@ const DialpadContainer = (props) => {
7848
7898
  * @beta
7849
7899
  */
7850
7900
  const Dialpad = (props) => {
7851
- /* @conditional-compile-remove(dialpad) */
7901
+ /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
7852
7902
  const localeStrings = useLocale$1().strings.dialpad;
7853
7903
  const dialpadLocaleStringsTrampoline = () => {
7854
- /* @conditional-compile-remove(dialpad) */
7904
+ /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
7855
7905
  return localeStrings;
7856
7906
  };
7857
7907
  const strings = Object.assign(Object.assign({}, dialpadLocaleStringsTrampoline()), props.strings);
@@ -8284,7 +8334,7 @@ const getSelector$1 = (component) => {
8284
8334
  return findSelector$1(component);
8285
8335
  };
8286
8336
  const findSelector$1 = (component) => {
8287
- /* @conditional-compile-remove(dialpad) */
8337
+ /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
8288
8338
  // Dialpad only has handlers currently and doesn't require any props from the stateful layer so return the emptySelector
8289
8339
  if (component === Dialpad) {
8290
8340
  return emptySelector;
@@ -12613,7 +12663,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
12613
12663
  */
12614
12664
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
12615
12665
 
12616
- 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};
12666
+ var call$d={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",peopleButtonLabel:"People",peoplePaneTitle:"People",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",soundLabel:"Sound",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close Dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumeCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold"};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};
12617
12667
 
12618
12668
  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};
12619
12669
 
@@ -14346,6 +14396,10 @@ const getCallCompositePage = (call, previousCall) => {
14346
14396
  else if (_isInCall(call === null || call === void 0 ? void 0 : call.state)) {
14347
14397
  return 'call';
14348
14398
  }
14399
+ else if ((call === null || call === void 0 ? void 0 : call.state) === 'LocalHold') {
14400
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
14401
+ return 'hold';
14402
+ }
14349
14403
  else {
14350
14404
  // When the call object has been constructed after clicking , but before 'connecting' has been
14351
14405
  // set on the call object, we continue to show the configuration screen.
@@ -14412,6 +14466,10 @@ const createCompositeHandlers = memoizeOne__default['default']((adapter) => ({
14412
14466
  onAddParticipant: (participant, options) => __awaiter$9(void 0, void 0, void 0, function* () {
14413
14467
  return yield adapter.addParticipant(participant, options);
14414
14468
  }),
14469
+ /* @conditional-compile-remove(PSTN-calls) */
14470
+ onSendDtmfTone: (dtmfTone) => __awaiter$9(void 0, void 0, void 0, function* () {
14471
+ yield adapter.sendDtmfTone(dtmfTone);
14472
+ }),
14415
14473
  onRemoveParticipant: (userId) => __awaiter$9(void 0, void 0, void 0, function* () {
14416
14474
  yield adapter.removeParticipant(userId);
14417
14475
  }),
@@ -14770,6 +14828,12 @@ const icon$2 = () => React__default['default'].createElement(CallCompositeIcon,
14770
14828
  /** @beta */
14771
14829
  const People = (props) => {
14772
14830
  const { strings, onRenderOnIcon, onRenderOffIcon, onClick } = props;
14831
+ /* @conditional-compile-remove(rooms) */
14832
+ let disabled = props.disabled;
14833
+ /* @conditional-compile-remove(rooms) */
14834
+ const permissions = _usePermissions();
14835
+ /* @conditional-compile-remove(rooms) */
14836
+ disabled = disabled || !permissions.participantList;
14773
14837
  const theme = useTheme();
14774
14838
  const styles = React.useMemo(() => {
14775
14839
  var _a;
@@ -14779,7 +14843,125 @@ const People = (props) => {
14779
14843
  }
14780
14844
  }, (_a = props.styles) !== null && _a !== void 0 ? _a : {}, controlButtonBaseStyle);
14781
14845
  }, [props.styles, theme.palette.neutralLight]);
14782
- return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { "data-ui-id": "call-composite-participants-button", strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon$2, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon$2, onClick: onClick, styles: styles })));
14846
+ return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { "data-ui-id": "call-composite-participants-button", strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon$2, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon$2, onClick: onClick, styles: styles,
14847
+ /* @conditional-compile-remove(rooms) */
14848
+ disabled: disabled })));
14849
+ };
14850
+
14851
+ // Copyright (c) Microsoft Corporation.
14852
+ const icon$1 = () => React__default['default'].createElement(reactIcons.MoreHorizontal20Filled, { key: 'chatOnIconKey', primaryFill: "currentColor" });
14853
+ /**
14854
+ * @private
14855
+ */
14856
+ const MoreButton = (props) => {
14857
+ return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { labelKey: 'optionsButtonLabelKey', showLabel: props.showLabel, onRenderOnIcon: icon$1, onRenderOffIcon: icon$1, onClick: props.onClick, "data-ui-id": 'call-with-chat-composite-more-button' })));
14858
+ };
14859
+
14860
+ // Copyright (c) Microsoft Corporation.
14861
+ // Licensed under the MIT license.
14862
+ /**
14863
+ * @private
14864
+ */
14865
+ const themeddialpadModalStyle$1 = (theme) => ({
14866
+ main: {
14867
+ borderRadius: theme.effects.roundedCorner6,
14868
+ padding: '1rem'
14869
+ }
14870
+ });
14871
+ /**
14872
+ * @private
14873
+ */
14874
+ const themedDialpadStyle$1 = (isMobile, theme) => ({
14875
+ root: {
14876
+ padding: 0,
14877
+ marginLeft: 0,
14878
+ marginRight: 0,
14879
+ maxWidth: '100%'
14880
+ },
14881
+ textField: {
14882
+ root: {
14883
+ borderBottom: `1px solid ${theme.palette.neutralTertiaryAlt}`
14884
+ },
14885
+ field: {
14886
+ backgroundColor: theme.palette.white,
14887
+ fontSize: theme.fonts.large.fontSize,
14888
+ padding: '1.063rem 0.5rem',
14889
+ textAlign: 'center',
14890
+ paddingTop: 0
14891
+ }
14892
+ },
14893
+ primaryContent: {
14894
+ color: theme.palette.themeDarkAlt
14895
+ }
14896
+ });
14897
+
14898
+ // Copyright (c) Microsoft Corporation.
14899
+ // Licensed under the MIT license.
14900
+ /**
14901
+ * @private
14902
+ */
14903
+ const compositeOuterContainerStyles = {
14904
+ root: {
14905
+ width: '100%',
14906
+ // Create a new stacking context so that DrawerMenu can be positioned absolutely.
14907
+ position: 'relative'
14908
+ }
14909
+ };
14910
+ /** @private */
14911
+ const callCompositeContainerStyles = {
14912
+ root: {
14913
+ // Start a new stacking context so that any `position:absolute` elements
14914
+ // inside the call composite do not compete with its siblings.
14915
+ position: 'relative'
14916
+ }
14917
+ };
14918
+ /** @private */
14919
+ const controlBarContainerStyles$1 = {
14920
+ root: {
14921
+ // Start a new stacking context so that any `position:absolute` elements
14922
+ // inside the control bar do not compete with its siblings.
14923
+ position: 'relative'
14924
+ }
14925
+ };
14926
+ /** @private */
14927
+ const drawerContainerStyles$1 = {
14928
+ root: {
14929
+ position: 'absolute',
14930
+ top: 0,
14931
+ left: 0,
14932
+ width: '100%',
14933
+ height: '100%',
14934
+ // Any zIndex > 0 will work because this is the only absolutely
14935
+ // positioned element in the container.
14936
+ zIndex: 1
14937
+ }
14938
+ };
14939
+
14940
+ // Copyright (c) Microsoft Corporation.
14941
+ /** @private */
14942
+ const SendDtmfDialpad = (props) => {
14943
+ const dialpadProps = usePropsFor$1(Dialpad);
14944
+ const { strings, isMobile, showDialpad, onDismissDialpad } = props;
14945
+ const theme = react.useTheme();
14946
+ const onDismissTriggered = () => {
14947
+ onDismissDialpad();
14948
+ };
14949
+ const dialpadModalStyle = React.useMemo(() => themeddialpadModalStyle$1(theme), [theme]);
14950
+ const dialpadStyle = React.useMemo(() => themedDialpadStyle$1(isMobile, theme), [theme, isMobile]);
14951
+ const dialpadStrings = {
14952
+ placeholderText: ''
14953
+ };
14954
+ if (isMobile) {
14955
+ return (React__default['default'].createElement(react.Stack, null, showDialpad && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles$1 },
14956
+ React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onDismissTriggered },
14957
+ React__default['default'].createElement(react.Stack, { style: { padding: '1rem' } },
14958
+ React__default['default'].createElement(Dialpad, Object.assign({ styles: dialpadStyle }, dialpadProps, { showDeleteButton: false }))))))));
14959
+ }
14960
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Modal, { titleAriaId: strings.dialpadModalAriaLabel, isOpen: showDialpad, onDismiss: onDismissTriggered, isBlocking: true, styles: dialpadModalStyle },
14961
+ React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "end", verticalAlign: "center" },
14962
+ React__default['default'].createElement(react.IconButton, { iconProps: { iconName: 'Cancel' }, ariaLabel: strings.dialpadCloseModalButtonAriaLabel, onClick: onDismissTriggered, style: { color: theme.palette.black } })),
14963
+ React__default['default'].createElement(react.Stack, null,
14964
+ React__default['default'].createElement(Dialpad, Object.assign({ styles: dialpadStyle }, dialpadProps, { showDeleteButton: false, strings: dialpadStrings }))))));
14783
14965
  };
14784
14966
 
14785
14967
  // Copyright (c) Microsoft Corporation.
@@ -14798,6 +14980,51 @@ const CallControls = (props) => {
14798
14980
  tooltipOffContent: localeStrings.strings.callWithChat.peopleButtonTooltipOpen,
14799
14981
  tooltipOnContent: localeStrings.strings.callWithChat.peopleButtonTooltipClose
14800
14982
  }), [localeStrings]);
14983
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
14984
+ const moreButtonStrings = React.useMemo(() => ({
14985
+ label: localeStrings.strings.call.moreButtonCallingLabel,
14986
+ tooltipOffContent: localeStrings.strings.callWithChat.moreDrawerButtonTooltip
14987
+ }), [localeStrings]);
14988
+ /* @conditional-compile-remove(PSTN-calls) */
14989
+ const dialpadStrings = React.useMemo(() => ({
14990
+ dialpadModalAriaLabel: localeStrings.strings.call.dialpadModalAriaLabel,
14991
+ dialpadCloseModalButtonAriaLabel: localeStrings.strings.call.dialpadCloseModalButtonAriaLabel
14992
+ }), [localeStrings]);
14993
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
14994
+ const holdButtonProps = usePropsFor$1(HoldButton);
14995
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */
14996
+ const moreButtonContextualMenuItems = () => {
14997
+ const items = [];
14998
+ if (props.isMobile && props.onPeopleButtonClicked) {
14999
+ items.push({
15000
+ key: 'peopleButtonKey',
15001
+ text: localeStrings.component.strings.participantsButton.label,
15002
+ onClick: () => {
15003
+ if (props.onPeopleButtonClicked) {
15004
+ props.onPeopleButtonClicked();
15005
+ }
15006
+ },
15007
+ iconProps: { iconName: 'ControlButtonParticipants', styles: { root: { lineHeight: 0 } } },
15008
+ itemProps: {
15009
+ styles: buttonFlyoutIncreasedSizeStyles
15010
+ }
15011
+ });
15012
+ }
15013
+ items.push({
15014
+ key: 'holdButtonKey',
15015
+ text: localeStrings.component.strings.holdButton.tooltipOffContent,
15016
+ onClick: () => {
15017
+ holdButtonProps.onToggleHold();
15018
+ },
15019
+ iconProps: { iconName: 'HoldCall', styles: { root: { lineHeight: 0 } } },
15020
+ itemProps: {
15021
+ styles: buttonFlyoutIncreasedSizeStyles
15022
+ }
15023
+ });
15024
+ return items;
15025
+ };
15026
+ /* @conditional-compile-remove(PSTN-calls) */
15027
+ const [showDialpad, setShowDialpad] = React.useState(false);
14801
15028
  const theme = react.useTheme();
14802
15029
  /* @conditional-compile-remove(control-bar-button-injection) */
14803
15030
  const customButtons = React.useMemo(() => generateCustomControlBarButtons(onFetchCustomButtonPropsTrampoline$1(options), options === null || options === void 0 ? void 0 : options.displayType), [options]);
@@ -14805,16 +15032,25 @@ const CallControls = (props) => {
14805
15032
  if (props.options === false) {
14806
15033
  return React__default['default'].createElement(React__default['default'].Fragment, null);
14807
15034
  }
15035
+ /* @conditional-compile-remove(PSTN-calls) */
15036
+ const onDismissDialpad = () => {
15037
+ setShowDialpad(false);
15038
+ };
14808
15039
  return (React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
15040
+ /* @conditional-compile-remove(PSTN-calls) */
15041
+ React__default['default'].createElement(SendDtmfDialpad, { isMobile: !!props.isMobile, strings: dialpadStrings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad }),
14809
15042
  React__default['default'].createElement(react.Stack.Item, null,
14810
15043
  React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: controlBarStyles(theme.semanticColors.bodyBackground) },
14811
15044
  isEnabled$2(options === null || options === void 0 ? void 0 : options.microphoneButton) && React__default['default'].createElement(Microphone, { displayType: options === null || options === void 0 ? void 0 : options.displayType }),
14812
15045
  isEnabled$2(options === null || options === void 0 ? void 0 : options.cameraButton) && React__default['default'].createElement(Camera, { displayType: options === null || options === void 0 ? void 0 : options.displayType }),
14813
15046
  isEnabled$2(options === null || options === void 0 ? void 0 : options.screenShareButton) && (React__default['default'].createElement(ScreenShare, { option: options === null || options === void 0 ? void 0 : options.screenShareButton, displayType: options === null || options === void 0 ? void 0 : options.displayType })),
14814
- isEnabled$2(options === null || options === void 0 ? void 0 : options.participantsButton) && (React__default['default'].createElement(Participants, { option: options === null || options === void 0 ? void 0 : options.participantsButton, callInvitationURL: props.callInvitationURL, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, isMobile: props.isMobile })) && (
15047
+ isEnabled$2(options === null || options === void 0 ? void 0 : options.participantsButton) &&
15048
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */ !props.isMobile && (React__default['default'].createElement(Participants, { option: options === null || options === void 0 ? void 0 : options.participantsButton, callInvitationURL: props.callInvitationURL, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize, isMobile: props.isMobile })) && (
14815
15049
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */
14816
15050
  React__default['default'].createElement(People, { checked: props.peopleButtonChecked, showLabel: (options === null || options === void 0 ? void 0 : options.displayType) !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-with-chat-composite-people-button", disabled: isDisabled(options === null || options === void 0 ? void 0 : options.participantsButton), strings: peopleButtonStrings })),
14817
15051
  isEnabled$2(options === null || options === void 0 ? void 0 : options.devicesButton) && (React__default['default'].createElement(Devices, { displayType: options === null || options === void 0 ? void 0 : options.displayType, increaseFlyoutItemSize: props.increaseFlyoutItemSize })),
15052
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */
15053
+ isEnabled$2(options === null || options === void 0 ? void 0 : options.moreButton) && (React__default['default'].createElement(MoreButton, { strings: moreButtonStrings, menuIconProps: { hidden: true }, menuProps: { items: moreButtonContextualMenuItems() }, showLabel: !props.isMobile })),
14818
15054
  customButtons['primary'],
14819
15055
  isEnabled$2(options === null || options === void 0 ? void 0 : options.endCallButton) && React__default['default'].createElement(EndCall, { displayType: options === null || options === void 0 ? void 0 : options.displayType })))));
14820
15056
  };
@@ -14841,7 +15077,7 @@ const callStatusSelector = reselect.createSelector([getCallStatus, getIsScreenSh
14841
15077
  // Copyright (c) Microsoft Corporation.
14842
15078
  // Licensed under the MIT license.
14843
15079
  /** @private */
14844
- const controlBarContainerStyles$1 = {
15080
+ const controlBarContainerStyles = {
14845
15081
  paddingTop: '0.25rem',
14846
15082
  paddingBottom: '0.25rem',
14847
15083
  // @TODO: this should be exposed through a custom CallComposite Theme API that extends the fluent theme with semantic values
@@ -14860,7 +15096,7 @@ const NOTIFICATION_CONTAINER_Z_INDEX = Math.max(CONTROL_BAR_Z_INDEX, VIDEO_GALLE
14860
15096
  /**
14861
15097
  * @private
14862
15098
  */
14863
- const callControlsContainerStyles = react.mergeStyles(controlBarContainerStyles$1, {
15099
+ const callControlsContainerStyles = react.mergeStyles(controlBarContainerStyles, {
14864
15100
  zIndex: CONTROL_BAR_Z_INDEX
14865
15101
  });
14866
15102
  const containerStyle$2 = {
@@ -15285,7 +15521,7 @@ const iconStyles = {
15285
15521
  /**
15286
15522
  * @private
15287
15523
  */
15288
- const themedDialpadModelStyle = (theme) => ({
15524
+ const themeddialpadModalStyle = (theme) => ({
15289
15525
  main: {
15290
15526
  borderRadius: theme.effects.roundedCorner6,
15291
15527
  padding: '1rem'
@@ -15334,48 +15570,6 @@ const themedCallButtonStyle = (theme) => ({
15334
15570
  }
15335
15571
  });
15336
15572
 
15337
- // Copyright (c) Microsoft Corporation.
15338
- // Licensed under the MIT license.
15339
- /**
15340
- * @private
15341
- */
15342
- const compositeOuterContainerStyles = {
15343
- root: {
15344
- width: '100%',
15345
- // Create a new stacking context so that DrawerMenu can be positioned absolutely.
15346
- position: 'relative'
15347
- }
15348
- };
15349
- /** @private */
15350
- const callCompositeContainerStyles = {
15351
- root: {
15352
- // Start a new stacking context so that any `position:absolute` elements
15353
- // inside the call composite do not compete with its siblings.
15354
- position: 'relative'
15355
- }
15356
- };
15357
- /** @private */
15358
- const controlBarContainerStyles = {
15359
- root: {
15360
- // Start a new stacking context so that any `position:absolute` elements
15361
- // inside the control bar do not compete with its siblings.
15362
- position: 'relative'
15363
- }
15364
- };
15365
- /** @private */
15366
- const drawerContainerStyles$1 = {
15367
- root: {
15368
- position: 'absolute',
15369
- top: 0,
15370
- left: 0,
15371
- width: '100%',
15372
- height: '100%',
15373
- // Any zIndex > 0 will work because this is the only absolutely
15374
- // positioned element in the container.
15375
- zIndex: 1
15376
- }
15377
- };
15378
-
15379
15573
  // Copyright (c) Microsoft Corporation.
15380
15574
  /** @private */
15381
15575
  const CallingDialpad = (props) => {
@@ -15397,7 +15591,7 @@ const CallingDialpad = (props) => {
15397
15591
  onDismissTriggered();
15398
15592
  }
15399
15593
  };
15400
- const dialpadModelStyle = React.useMemo(() => themedDialpadModelStyle(theme), [theme]);
15594
+ const dialpadModalStyle = React.useMemo(() => themeddialpadModalStyle(theme), [theme]);
15401
15595
  const dialpadStyle = React.useMemo(() => themedDialpadStyle(isMobile, theme), [theme, isMobile]);
15402
15596
  const callButtonStyle = React.useMemo(() => themedCallButtonStyle(theme), [theme]);
15403
15597
  const dialpadComponent = () => {
@@ -15408,12 +15602,12 @@ const CallingDialpad = (props) => {
15408
15602
  if (isMobile) {
15409
15603
  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 },
15410
15604
  React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onDismissTriggered },
15411
- React__default['default'].createElement(react.Stack, { style: { padding: '16px' } }, dialpadComponent()))))));
15605
+ React__default['default'].createElement(react.Stack, { style: { padding: '1rem' } }, dialpadComponent()))))));
15412
15606
  }
15413
- 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" },
15607
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Modal, { titleAriaId: strings.dialpadModalAriaLabel, isOpen: showDialpad, onDismiss: onDismissTriggered, isBlocking: true, styles: dialpadModalStyle, "data-ui-id": "call-with-chat-composite-dialpad" },
15414
15608
  React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center" },
15415
15609
  React__default['default'].createElement(react.Text, null, strings.dialpadModalTitle),
15416
- React__default['default'].createElement(react.IconButton, { iconProps: { iconName: 'Cancel' }, ariaLabel: strings.dialpadCloseModalButtonAriaLabel, onClick: onDismissTriggered, style: { color: 'black' } })),
15610
+ React__default['default'].createElement(react.IconButton, { iconProps: { iconName: 'Cancel' }, ariaLabel: strings.dialpadCloseModalButtonAriaLabel, onClick: onDismissTriggered, style: { color: theme.palette.black } })),
15417
15611
  React__default['default'].createElement(react.Stack, null, dialpadComponent()))));
15418
15612
  };
15419
15613
  function DialpadStartCallIconTrampoline() {
@@ -15484,7 +15678,7 @@ const AddPeopleDropdown = (props) => {
15484
15678
  itemProps: { styles: copyLinkButtonStylesThemed },
15485
15679
  iconProps: { iconName: PeoplePaneOpenDialpadIconNameTrampoline(), style: iconStyles },
15486
15680
  onClick: () => setShowDialpad(true),
15487
- 'data-ui-id': 'call-with-chat-composite-dial-phone-number-button'
15681
+ 'data-ui-id': 'call-dial-phone-number-button'
15488
15682
  });
15489
15683
  }
15490
15684
  return menuProps;
@@ -15509,15 +15703,15 @@ const AddPeopleDropdown = (props) => {
15509
15703
  if (mobileView) {
15510
15704
  return (React__default['default'].createElement(react.Stack, null,
15511
15705
  React__default['default'].createElement(react.Stack.Item, { styles: copyLinkButtonContainerStyles },
15512
- 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" })),
15513
- addPeopleDrawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles, "data-ui-id": "call-with-chat-composite-add-people-dropdown" },
15706
+ React__default['default'].createElement(react.PrimaryButton, { onClick: setDrawerMenuItemsForAddPeople, styles: copyLinkButtonStylesThemed, onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, "data-ui-id": "call-add-people-button" })),
15707
+ addPeopleDrawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles, "data-ui-id": "call-add-people-dropdown" },
15514
15708
  React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setAddPeopleDrawerMenuItems([]), items: addPeopleDrawerMenuItems }))),
15515
15709
  alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: true, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId }))));
15516
15710
  }
15517
15711
  return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Stack, null,
15518
15712
  alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: false, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId })),
15519
15713
  React__default['default'].createElement(react.Stack, { styles: copyLinkButtonStackStyles },
15520
- 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" })))));
15714
+ React__default['default'].createElement(react.DefaultButton, { onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, menuProps: defaultMenuProps, styles: copyLinkButtonStylesThemed, "data-ui-id": "call-add-people-button" })))));
15521
15715
  };
15522
15716
  function PeoplePaneOpenDialpadIconNameTrampoline() {
15523
15717
  /* @conditional-compile-remove(PSTN-calls) */
@@ -15923,8 +16117,9 @@ const CallArrangement = (props) => {
15923
16117
  };
15924
16118
  /* @conditional-compile-remove(one-to-n-calling) */
15925
16119
  const callPaneContent = () => {
16120
+ var _a;
15926
16121
  if (adapter && callStatus === 'Connected') {
15927
- return (React__default['default'].createElement(CallPane, { callAdapter: adapter, onClose: closePane, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onPeopleButtonClicked: showShowPeopleTabHeaderButton$1(props.callControlProps.options) ? selectPeople : undefined, modalLayerHostId: props.modalLayerHostId, activePane: activePane, mobileView: props.mobileView, inviteLink: props.callControlProps.callInvitationURL }));
16122
+ return (React__default['default'].createElement(CallPane, { callAdapter: adapter, onClose: closePane, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: (_a = props.callControlProps) === null || _a === void 0 ? void 0 : _a.onFetchParticipantMenuItems, onPeopleButtonClicked: showShowPeopleTabHeaderButton$1(props.callControlProps.options) ? selectPeople : undefined, modalLayerHostId: props.modalLayerHostId, activePane: activePane, mobileView: props.mobileView, inviteLink: props.callControlProps.callInvitationURL }));
15928
16123
  }
15929
16124
  return React__default['default'].createElement(React__default['default'].Fragment, null);
15930
16125
  };
@@ -15971,6 +16166,61 @@ const localVideoCameraCycleButtonSelector = reselect.createSelector([getDeviceMa
15971
16166
  };
15972
16167
  });
15973
16168
 
16169
+ // Copyright (c) Microsoft Corporation.
16170
+ const videoBaseStyle = react.mergeStyles({
16171
+ border: 0
16172
+ });
16173
+ /**
16174
+ * @private
16175
+ */
16176
+ react.mergeStyles(videoBaseStyle, {
16177
+ width: '100%',
16178
+ height: '100%'
16179
+ });
16180
+ /**
16181
+ * @private
16182
+ */
16183
+ react.mergeStyles(videoBaseStyle, {
16184
+ width: '100%',
16185
+ height: 0,
16186
+ position: 'relative',
16187
+ paddingTop: '56.25%' /* default to 16:9 Aspect Ratio for now*/
16188
+ });
16189
+ /**
16190
+ * @private
16191
+ */
16192
+ react.mergeStyles({
16193
+ position: 'absolute',
16194
+ top: 0,
16195
+ left: 0,
16196
+ width: '100%',
16197
+ height: '100%'
16198
+ });
16199
+ /**
16200
+ * @private
16201
+ */
16202
+ react.mergeStyles({
16203
+ height: '100%',
16204
+ width: '15%'
16205
+ });
16206
+ /**
16207
+ * @private
16208
+ */
16209
+ react.mergeStyles({
16210
+ height: '100%',
16211
+ width: '85%',
16212
+ position: 'relative'
16213
+ });
16214
+ /**
16215
+ * @private
16216
+ */
16217
+ const participantStateStyle = {
16218
+ textAlign: 'center',
16219
+ paddingTop: '0.5rem',
16220
+ fontWeight: 400,
16221
+ fontSize: '0.75rem'
16222
+ };
16223
+
15974
16224
  // Copyright (c) Microsoft Corporation.
15975
16225
  const VideoGalleryStyles = {
15976
16226
  root: {
@@ -15996,8 +16246,26 @@ const MediaGallery = (props) => {
15996
16246
  const cameraSwitcherProps = React.useMemo(() => {
15997
16247
  return Object.assign(Object.assign({}, cameraSwitcherCallback), cameraSwitcherCameras);
15998
16248
  }, [cameraSwitcherCallback, cameraSwitcherCameras]);
15999
- const onRenderAvatar = React.useCallback((userId, options) => (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
16000
- React__default['default'].createElement(AvatarPersona, Object.assign({ userId: userId }, options, { dataProvider: props.onFetchAvatarPersonaData })))), [props.onFetchAvatarPersonaData]);
16249
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
16250
+ const locale = useLocale().component;
16251
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
16252
+ const videoTileStrings = locale.strings.videoTile;
16253
+ const onRenderAvatar = React.useCallback((userId, options) => {
16254
+ return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ position: 'absolute', height: '100%', width: '100%' }) },
16255
+ React__default['default'].createElement(react.Stack, { styles: { root: { margin: 'auto', maxHeight: '100%' } } },
16256
+ React__default['default'].createElement(AvatarPersona, Object.assign({ userId: userId }, options, { dataProvider: props.onFetchAvatarPersonaData })),
16257
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
16258
+ (options === null || options === void 0 ? void 0 : options.participantState) === 'Ringing' && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStyle) }, videoTileStrings.participantStateConnecting)),
16259
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
16260
+ (options === null || options === void 0 ? void 0 : options.participantState) === 'Connecting' && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStyle) }, videoTileStrings.participantStateRinging)),
16261
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
16262
+ (options === null || options === void 0 ? void 0 : options.participantState) === 'Hold' && (React__default['default'].createElement(react.Text, { className: react.mergeStyles(participantStateStyle) }, videoTileStrings.participantStateHold)))));
16263
+ }, [
16264
+ props.onFetchAvatarPersonaData,
16265
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */ videoTileStrings.participantStateConnecting,
16266
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */ videoTileStrings.participantStateRinging,
16267
+ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */ videoTileStrings.participantStateHold
16268
+ ]);
16001
16269
  useLocalVideoStartTrigger(!!props.isVideoStreamOn);
16002
16270
  const VideoGalleryMemoized = React.useMemo(() => {
16003
16271
  return (React__default['default'].createElement(VideoGallery, Object.assign({}, videoGalleryProps, { localVideoViewOptions: localVideoViewOptions$2, remoteVideoViewOptions: remoteVideoViewOptions, styles: VideoGalleryStyles, layout: "floatingLocalVideo", showCameraSwitcherInLocalPreview: props.isMobile, localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: onRenderAvatar })));
@@ -16362,9 +16630,11 @@ const LocalDeviceSettings = (props) => {
16362
16630
  let isSelectCamEnabled = props.cameraPermissionGranted;
16363
16631
  let isSelectMicEnabled = props.microphonePermissionGranted;
16364
16632
  /* @conditional-compile-remove(rooms) */
16365
- isSelectCamEnabled = isSelectCamEnabled && _usePermissions().cameraButton;
16633
+ const permissions = _usePermissions();
16634
+ /* @conditional-compile-remove(rooms) */
16635
+ isSelectCamEnabled = isSelectCamEnabled && permissions.cameraButton;
16366
16636
  /* @conditional-compile-remove(rooms) */
16367
- isSelectMicEnabled = isSelectMicEnabled && _usePermissions().microphoneButton;
16637
+ isSelectMicEnabled = isSelectMicEnabled && permissions.microphoneButton;
16368
16638
  // TODO: speaker permission is tied to microphone permission (when you request 'audio' permission using the SDK) its
16369
16639
  // actually granting access to query both microphone and speaker. However the browser popup asks you explicity for
16370
16640
  // 'microphone'. This needs investigation on how we want to handle this and maybe needs follow up with SDK team.
@@ -16802,7 +17072,8 @@ const LobbyPage = (props) => {
16802
17072
  modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => React__default['default'].createElement(LobbyTile, Object.assign({}, lobbyProps, { overlayProps: overlayProps(strings, inLobby) })), dataUiId: 'lobby-page' }));
16803
17073
  };
16804
17074
  const disableLobbyPageControls = (callControlOptions) => {
16805
- let newOptions = callControlOptions;
17075
+ // Ensure we clone the prop if it is an object to ensure we do not mutate the original prop.
17076
+ let newOptions = callControlOptions instanceof Object ? Object.assign({}, callControlOptions) : callControlOptions;
16806
17077
  if (newOptions !== false) {
16807
17078
  if (newOptions === true || newOptions === undefined) {
16808
17079
  newOptions = {
@@ -16833,6 +17104,154 @@ const overlayPropsWaitingToBeAdmitted = (strings) => ({
16833
17104
  overlayIcon: React__default['default'].createElement(CallCompositeIcon, { iconName: "LobbyScreenWaitingToBeAdmitted" })
16834
17105
  });
16835
17106
 
17107
+ // Copyright (c) Microsoft Corporation.
17108
+ /**
17109
+ * styles for hold pane resume button
17110
+ *
17111
+ * @private
17112
+ */
17113
+ const resumeButtonStyles = {
17114
+ root: {
17115
+ borderRadius: _pxToRem(4),
17116
+ padding: `${_pxToRem(6)} ${_pxToRem(20)} `
17117
+ },
17118
+ label: {
17119
+ fontWeight: 400,
17120
+ display: 'flex',
17121
+ fontSize: _pxToRem(14)
17122
+ }
17123
+ };
17124
+ /**
17125
+ * styles for hold pane main text
17126
+ *
17127
+ * @private
17128
+ */
17129
+ const holdPaneLabelStyles = {
17130
+ root: {
17131
+ color: '#FFFFFF',
17132
+ fontWeight: 600,
17133
+ fontHeight: _pxToRem(22),
17134
+ fontSize: _pxToRem(16),
17135
+ margin: '1rem auto 0.5rem'
17136
+ }
17137
+ };
17138
+ /**
17139
+ * styles for hold pane timer
17140
+ *
17141
+ * @private
17142
+ */
17143
+ const holdPaneTimerStyles = {
17144
+ root: {
17145
+ color: '#FFFFFF',
17146
+ fontWeight: 600,
17147
+ fontSize: _pxToRem(20),
17148
+ lineHeight: _pxToRem(28),
17149
+ margin: 'auto'
17150
+ }
17151
+ };
17152
+ /**
17153
+ * styles for hold pane container
17154
+ *
17155
+ * @private
17156
+ */
17157
+ const paneStyles = {
17158
+ root: {
17159
+ width: '100%',
17160
+ height: '100%',
17161
+ background: 'rgba(0, 0, 0, 0.5)'
17162
+ }
17163
+ };
17164
+ /**
17165
+ * styles for the hold pane content container
17166
+ *
17167
+ * @private
17168
+ */
17169
+ const holdPaneContentStyles = {
17170
+ root: {
17171
+ display: 'flex',
17172
+ margin: 'auto',
17173
+ flexDirection: 'column',
17174
+ justifyContent: 'center'
17175
+ }
17176
+ };
17177
+
17178
+ // Copyright (c) Microsoft Corporation.
17179
+ /**
17180
+ * Hold pane to display when the user places themselves on hold
17181
+ *
17182
+ * @beta
17183
+ */
17184
+ const HoldPane = () => {
17185
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
17186
+ const holdButtonProps = usePropsFor$1(HoldButton);
17187
+ const locale = useLocale();
17188
+ const strings = stringsTrampoline(locale);
17189
+ const [time, setTime] = React.useState(0);
17190
+ const elapsedTime = getReadableTime(time);
17191
+ const startTime = React.useRef(performance.now());
17192
+ React__default['default'].useEffect(() => {
17193
+ const interval = setInterval(() => {
17194
+ setTime(performance.now() - startTime.current);
17195
+ }, 10);
17196
+ return () => {
17197
+ clearInterval(interval);
17198
+ };
17199
+ }, [startTime]);
17200
+ return (React__default['default'].createElement(react.Stack, { styles: paneStyles },
17201
+ React__default['default'].createElement(react.Stack, { horizontal: true, styles: holdPaneContentStyles },
17202
+ React__default['default'].createElement(react.Text, { styles: holdPaneTimerStyles }, elapsedTime),
17203
+ React__default['default'].createElement(react.Text, { styles: holdPaneLabelStyles }, strings.holdScreenLabel),
17204
+ React__default['default'].createElement(react.PrimaryButton, { text: strings.resumeCallButtonLabel, ariaLabel: strings.resumeCallButtonAriaLabel, styles: resumeButtonStyles, onClick: () => {
17205
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
17206
+ holdButtonProps.onToggleHold();
17207
+ } }))));
17208
+ };
17209
+ const getMinutes = (time) => {
17210
+ return Math.floor(getSeconds(time) / 60);
17211
+ };
17212
+ const getSeconds = (time) => {
17213
+ return Math.floor(time / 1000);
17214
+ };
17215
+ const getHours = (time) => {
17216
+ return Math.floor(getMinutes(time) / 60);
17217
+ };
17218
+ /**
17219
+ * @internal
17220
+ */
17221
+ const getReadableTime = (time) => {
17222
+ const hours = getHours(time);
17223
+ const readableMinutes = ('0' + (getMinutes(time) % 60)).slice(-2);
17224
+ const readableSeconds = ('0' + (getSeconds(time) % 60)).slice(-2);
17225
+ return `${hours > 0 ? hours + ':' : ''}${readableMinutes}:${readableSeconds}`;
17226
+ };
17227
+ const stringsTrampoline = (locale) => {
17228
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
17229
+ return {
17230
+ holdScreenLabel: locale.strings.call.holdScreenLabel,
17231
+ resumeCallButtonLabel: locale.strings.call.resumeCallButtonLabel,
17232
+ resumeCallButtonAriaLabel: locale.strings.call.resumeCallButtonAriaLabel
17233
+ };
17234
+ };
17235
+
17236
+ // Copyright (c) Microsoft Corporation.
17237
+ /**
17238
+ * @beta
17239
+ */
17240
+ const HoldPage = (props) => {
17241
+ var _a, _b, _c;
17242
+ const errorBarProps = usePropsFor$1(ErrorBar);
17243
+ const strings = useLocale().strings.call;
17244
+ const callControlOptions = props.mobileView
17245
+ ? reduceCallControlsForMobile((_a = props.options) === null || _a === void 0 ? void 0 : _a.callControls)
17246
+ : (_b = props.options) === null || _b === void 0 ? void 0 : _b.callControls;
17247
+ return (React__default['default'].createElement(CallArrangement, { complianceBannerProps: { strings }, errorBarProps: ((_c = props.options) === null || _c === void 0 ? void 0 : _c.errorBar) !== false && Object.assign({}, errorBarProps), callControlProps: {
17248
+ options: callControlOptions,
17249
+ increaseFlyoutItemSize: props.mobileView
17250
+ }, mobileView: props.mobileView,
17251
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
17252
+ modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => React__default['default'].createElement(HoldPane, null), dataUiId: 'hold-page' }));
17253
+ };
17254
+
16836
17255
  // Copyright (c) Microsoft Corporation.
16837
17256
  // Licensed under the MIT license.
16838
17257
  var __awaiter$5 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -16878,6 +17297,11 @@ const MainScreen = (props) => {
16878
17297
  /* @conditional-compile-remove(one-to-n-calling) */
16879
17298
  modalLayerHostId: props.modalLayerHostId, options: props.options }));
16880
17299
  break;
17300
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
17301
+ case holdPageTrampoline():
17302
+ pageElement = (React__default['default'].createElement(React__default['default'].Fragment, null,
17303
+ /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ React__default['default'].createElement(HoldPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options })));
17304
+ break;
16881
17305
  default:
16882
17306
  throw new Error('Invalid call composite page');
16883
17307
  }
@@ -16933,6 +17357,11 @@ const CallComposite = (props) => {
16933
17357
  /* @conditional-compile-remove(one-to-n-calling) */
16934
17358
  mobileView && React__default['default'].createElement(react.LayerHost, { id: modalLayerHostId, className: react.mergeStyles(modalLayerHostStyle) })))));
16935
17359
  };
17360
+ const holdPageTrampoline = () => {
17361
+ /* @conditional-compile-remove(one-to-n-calling) */
17362
+ /* @conditional-compile-remove(PSTN-calls) */
17363
+ return 'hold';
17364
+ };
16936
17365
 
16937
17366
  /**
16938
17367
  * @private
@@ -17167,6 +17596,8 @@ class AzureCommunicationCallAdapter {
17167
17596
  this.holdCall.bind(this);
17168
17597
  /* @conditional-compile-remove(PSTN-calls) */
17169
17598
  this.resumeCall.bind(this);
17599
+ /* @conditional-compile-remove(PSTN-calls) */
17600
+ this.sendDtmfTone.bind(this);
17170
17601
  }
17171
17602
  dispose() {
17172
17603
  this.resetDiagnosticsForwarder();
@@ -17224,9 +17655,9 @@ class AzureCommunicationCallAdapter {
17224
17655
  });
17225
17656
  }
17226
17657
  _joinCall(audioOptions, videoOptions) {
17227
- const isTeamsMeeting = !('groupId' in this.locator);
17658
+ const isTeamsMeeting = 'teamsLink' in this.locator;
17228
17659
  /* @conditional-compile-remove(rooms) */
17229
- const isRoomsCall = !('roomId' in this.locator);
17660
+ const isRoomsCall = 'roomId' in this.locator;
17230
17661
  if (isTeamsMeeting) {
17231
17662
  return this.callAgent.join(this.locator, {
17232
17663
  audioOptions,
@@ -17426,6 +17857,12 @@ class AzureCommunicationCallAdapter {
17426
17857
  }
17427
17858
  });
17428
17859
  }
17860
+ /* @conditional-compile-remove(PSTN-calls) */
17861
+ sendDtmfTone(dtmfTone) {
17862
+ return __awaiter$4(this, void 0, void 0, function* () {
17863
+ this.handlers.onSendDtmfTone(dtmfTone);
17864
+ });
17865
+ }
17429
17866
  getState() {
17430
17867
  return this.context.getState();
17431
17868
  }
@@ -17666,7 +18103,7 @@ const isOutboundCall = (callLocator) => {
17666
18103
  };
17667
18104
 
17668
18105
  // Copyright (c) Microsoft Corporation.
17669
- const icon$1 = () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: 'ControlBarPeopleButton' });
18106
+ const icon = () => React__default['default'].createElement(CallWithChatCompositeIcon, { iconName: 'ControlBarPeopleButton' });
17670
18107
  /**
17671
18108
  * @private
17672
18109
  */
@@ -17681,7 +18118,7 @@ const PeopleButton = (props) => {
17681
18118
  }
17682
18119
  }, (_a = props.styles) !== null && _a !== void 0 ? _a : {});
17683
18120
  }, [props.styles, theme.palette.neutralLight]);
17684
- return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon$1, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon$1, onClick: onClick, styles: styles })));
18121
+ return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon, onClick: onClick, styles: styles })));
17685
18122
  };
17686
18123
 
17687
18124
  // Copyright (c) Microsoft Corporation.
@@ -17817,15 +18254,6 @@ const chatNotificationContainerStyles = {
17817
18254
  }
17818
18255
  };
17819
18256
 
17820
- // Copyright (c) Microsoft Corporation.
17821
- const icon = () => React__default['default'].createElement(reactIcons.MoreHorizontal20Filled, { key: 'chatOnIconKey', primaryFill: "currentColor" });
17822
- /**
17823
- * @private
17824
- */
17825
- const MoreButton = (props) => {
17826
- return (React__default['default'].createElement(ControlBarButton, Object.assign({}, props, { labelKey: 'optionsButtonLabelKey', showLabel: false, onRenderOnIcon: icon, onRenderOffIcon: icon, onClick: props.onClick, "data-ui-id": 'call-with-chat-composite-more-button' })));
17827
- };
17828
-
17829
18257
  // Copyright (c) Microsoft Corporation.
17830
18258
  /**
17831
18259
  * Max number of Custom Buttons in primary and secondary ControlBar
@@ -17909,7 +18337,7 @@ const inferCallWithChatControlOptions$1 = (mobileView, callWithChatControls) =>
17909
18337
  * @private
17910
18338
  */
17911
18339
  const CallWithChatControlBar = (props) => {
17912
- var _a, _b;
18340
+ var _a, _b, _c;
17913
18341
  const theme = react.useTheme();
17914
18342
  const callWithChatStrings = useCallWithChatCompositeStrings();
17915
18343
  const options = inferCallWithChatControlOptions$1(props.mobileView, props.callControls);
@@ -17941,14 +18369,27 @@ const CallWithChatControlBar = (props) => {
17941
18369
  const endCallButtonStyles = React.useMemo(() => (!props.mobileView ? getDesktopEndCallButtonStyles(theme) : undefined), [props.mobileView, theme]);
17942
18370
  /* @conditional-compile-remove(control-bar-button-injection) */
17943
18371
  const customButtons = React.useMemo(() => generateCustomCallWithChatControlBarButton(onFetchCustomButtonPropsTrampoline(options !== false ? options : undefined), options !== false ? options === null || options === void 0 ? void 0 : options.displayType : undefined), [options]);
18372
+ /* @conditional-compile-remove(PSTN-calls) */
18373
+ const dialpadStrings = React.useMemo(() => ({
18374
+ dialpadModalAriaLabel: callWithChatStrings.dialpadModalAriaLabel,
18375
+ dialpadCloseModalButtonAriaLabel: callWithChatStrings.dialpadCloseModalButtonAriaLabel
18376
+ }), [callWithChatStrings]);
18377
+ /* @conditional-compile-remove(PSTN-calls) */
18378
+ const [showDialpad, setShowDialpad] = React.useState(false);
17944
18379
  // when options is false then we want to hide the whole control bar.
17945
18380
  if (options === false) {
17946
18381
  return React__default['default'].createElement(React__default['default'].Fragment, null);
17947
18382
  }
17948
18383
  const chatButton = (React__default['default'].createElement(ChatButtonWithUnreadMessagesBadge, { chatAdapter: props.chatAdapter, checked: props.chatButtonChecked, showLabel: options.displayType !== 'compact', isChatPaneVisible: props.chatButtonChecked, onClick: props.onChatButtonClicked, disabled: props.disableButtonsForLobbyPage, strings: chatButtonStrings, styles: commonButtonStyles, newMessageLabel: callWithChatStrings.chatButtonNewMessageNotificationLabel }));
17949
- return (React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(callControlsContainerStyles, controlBarContainerStyles$1) },
18384
+ /* @conditional-compile-remove(PSTN-calls) */
18385
+ const onDismissDialpad = () => {
18386
+ setShowDialpad(false);
18387
+ };
18388
+ return (React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(callControlsContainerStyles, controlBarContainerStyles) },
17950
18389
  React__default['default'].createElement(react.Stack.Item, { grow: true },
17951
18390
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
18391
+ /* @conditional-compile-remove(PSTN-calls) */
18392
+ React__default['default'].createElement(SendDtmfDialpad, { isMobile: (_a = props.mobileView) !== null && _a !== void 0 ? _a : false, strings: dialpadStrings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad }),
17952
18393
  React__default['default'].createElement(react.Stack, { horizontalAlign: "center" },
17953
18394
  React__default['default'].createElement(react.Stack.Item, null,
17954
18395
  React__default['default'].createElement(ControlBar, { layout: "horizontal", styles: centerContainerStyles },
@@ -17957,8 +18398,8 @@ const CallWithChatControlBar = (props) => {
17957
18398
  props.mobileView && isEnabled$1(options === null || options === void 0 ? void 0 : options.chatButton) && chatButton,
17958
18399
  isEnabled$1(options.screenShareButton) && (React__default['default'].createElement(ScreenShare, { option: options.screenShareButton, displayType: options.displayType, styles: screenShareButtonStyles })),
17959
18400
  /* @conditional-compile-remove(control-bar-button-injection) */
17960
- (_a = customButtons['primary']) === null || _a === void 0 ? void 0 :
17961
- _a.props.children.slice(0, props.mobileView
18401
+ (_b = customButtons['primary']) === null || _b === void 0 ? void 0 :
18402
+ _b.props.children.slice(0, props.mobileView
17962
18403
  ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS
17963
18404
  : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS).map((element) => {
17964
18405
  return (React__default['default'].createElement(element.type, Object.assign({}, element.props, { key: element.props.strings.label, styles: commonButtonStyles, displayType: options.displayType, showLabel: options.displayType !== 'compact' })));
@@ -17967,8 +18408,8 @@ const CallWithChatControlBar = (props) => {
17967
18408
  React__default['default'].createElement(EndCall, { displayType: "compact", styles: endCallButtonStyles })))))),
17968
18409
  !props.mobileView && (React__default['default'].createElement(react.Stack, { horizontal: true, className: !props.mobileView ? react.mergeStyles(desktopButtonContainerStyle) : undefined },
17969
18410
  /* @conditional-compile-remove(control-bar-button-injection) */
17970
- (_b = customButtons['secondary']) === null || _b === void 0 ? void 0 :
17971
- _b.props.children.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS).map((element) => {
18411
+ (_c = customButtons['secondary']) === null || _c === void 0 ? void 0 :
18412
+ _c.props.children.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS).map((element) => {
17972
18413
  return (React__default['default'].createElement(element.type, Object.assign({}, element.props, { key: element.props.key, styles: commonButtonStyles, displayType: options.displayType, showLabel: options.displayType !== 'compact' })));
17973
18414
  }),
17974
18415
  isEnabled$1(options === null || options === void 0 ? void 0 : options.peopleButton) && (React__default['default'].createElement(PeopleButton, { checked: props.peopleButtonChecked, showLabel: options.displayType !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "call-with-chat-composite-people-button", disabled: props.disableButtonsForLobbyPage, strings: peopleButtonStrings, styles: commonButtonStyles })),
@@ -18142,6 +18583,10 @@ class CallWithChatBackedCallAdapter {
18142
18583
  this.addParticipant = (participant, options) => __awaiter$3(this, void 0, void 0, function* () {
18143
18584
  yield this.callWithChatAdapter.addParticipant(participant, options);
18144
18585
  });
18586
+ /* @conditional-compile-remove(PSTN-calls) */
18587
+ this.sendDtmfTone = (dtmfTone) => __awaiter$3(this, void 0, void 0, function* () {
18588
+ yield this.callWithChatAdapter.sendDtmfTone(dtmfTone);
18589
+ });
18145
18590
  this.callWithChatAdapter = callWithChatAdapter;
18146
18591
  }
18147
18592
  }
@@ -18585,7 +19030,7 @@ const CallWithChatScreen = (props) => {
18585
19030
  /* @conditional-compile-remove(file-sharing) */
18586
19031
  fileSharing: props.fileSharing, rtl: props.rtl }))),
18587
19032
  showControlBar && !isMobileWithActivePane && (React__default['default'].createElement(ChatAdapterProvider, { adapter: chatProps.adapter },
18588
- React__default['default'].createElement(react.Stack.Item, { styles: controlBarContainerStyles },
19033
+ React__default['default'].createElement(react.Stack.Item, { styles: controlBarContainerStyles$1 },
18589
19034
  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 })))),
18590
19035
  showControlBar && showDrawer && (React__default['default'].createElement(ChatAdapterProvider, { adapter: chatProps.adapter },
18591
19036
  React__default['default'].createElement(CallAdapterProvider, { adapter: callAdapter },
@@ -18831,6 +19276,8 @@ class AzureCommunicationCallWithChatAdapter {
18831
19276
  this.resumeCall.bind(this);
18832
19277
  /* @conditional-compile-remove(PSTN-calls) */
18833
19278
  this.addParticipant.bind(this);
19279
+ /* @conditional-compile-remove(PSTN-calls) */
19280
+ this.sendDtmfTone.bind(this);
18834
19281
  }
18835
19282
  /** Join existing Call. */
18836
19283
  joinCall(microphoneOn) {
@@ -19027,6 +19474,12 @@ class AzureCommunicationCallWithChatAdapter {
19027
19474
  return yield this.callAdapter.addParticipant(participant, options);
19028
19475
  });
19029
19476
  }
19477
+ /* @conditional-compile-remove(PSTN-calls) */
19478
+ sendDtmfTone(dtmfTone) {
19479
+ return __awaiter(this, void 0, void 0, function* () {
19480
+ return yield this.callAdapter.sendDtmfTone(dtmfTone);
19481
+ });
19482
+ }
19030
19483
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19031
19484
  on(event, listener) {
19032
19485
  switch (event) {