@azure/communication-react 1.3.2-alpha-202208050016.0 → 1.3.2-alpha-202208100014.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 (72) hide show
  1. package/dist/communication-react.d.ts +28 -10
  2. package/dist/dist-cjs/communication-react/index.js +117 -87
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.d.ts.map +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js +1 -24
  7. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js.map +1 -1
  8. package/dist/dist-esm/communication-react/src/index.d.ts +2 -2
  9. package/dist/dist-esm/communication-react/src/index.d.ts.map +1 -1
  10. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  11. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.d.ts.map +1 -1
  12. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +14 -7
  13. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.d.ts +1 -1
  15. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.d.ts.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +2 -14
  17. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/FileCard.js +3 -2
  19. package/dist/dist-esm/react-components/src/components/FileCard.js.map +1 -1
  20. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +3 -1
  21. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts.map +1 -1
  22. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/ParticipantItem.d.ts +15 -0
  24. package/dist/dist-esm/react-components/src/components/ParticipantItem.d.ts.map +1 -1
  25. package/dist/dist-esm/react-components/src/components/ParticipantItem.js +24 -11
  26. package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
  27. package/dist/dist-esm/react-components/src/components/ParticipantList.d.ts.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/ParticipantList.js +4 -1
  29. package/dist/dist-esm/react-components/src/components/ParticipantList.js.map +1 -1
  30. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +2 -2
  31. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts.map +1 -1
  32. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/VideoTile.d.ts +2 -2
  34. package/dist/dist-esm/react-components/src/components/VideoTile.d.ts.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/VideoTile.js +2 -2
  36. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  37. package/dist/dist-esm/react-components/src/index.d.ts +1 -1
  38. package/dist/dist-esm/react-components/src/index.d.ts.map +1 -1
  39. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +5 -1
  40. package/dist/dist-esm/react-components/src/types/ParticipantListParticipant.d.ts +6 -1
  41. package/dist/dist-esm/react-components/src/types/ParticipantListParticipant.d.ts.map +1 -1
  42. package/dist/dist-esm/react-components/src/types/VideoGalleryParticipant.d.ts +2 -6
  43. package/dist/dist-esm/react-components/src/types/VideoGalleryParticipant.d.ts.map +1 -1
  44. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.d.ts.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js +13 -1
  46. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallPane.js.map +1 -1
  47. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.d.ts.map +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js +11 -1
  49. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatPane.js.map +1 -1
  50. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +3 -1
  51. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  52. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.d.ts +2 -0
  53. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.d.ts.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js +3 -1
  55. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js.map +1 -1
  56. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.d.ts +4 -0
  57. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.d.ts.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js +2 -2
  59. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleButton.js.map +1 -1
  60. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.d.ts +4 -0
  61. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.d.ts.map +1 -1
  62. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +16 -12
  63. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.d.ts +4 -0
  65. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.d.ts.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js +11 -4
  67. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.d.ts +4 -0
  69. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.d.ts.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +10 -2
  71. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  72. package/package.json +8 -8
@@ -1423,7 +1423,7 @@ export declare interface CallingTheme {
1423
1423
  */
1424
1424
  export declare type CallParticipantListParticipant = ParticipantListParticipant & {
1425
1425
  /** State of calling participant */
1426
- state: 'Idle' | 'Connecting' | 'Ringing' | 'Connected' | 'Hold' | 'InLobby' | 'EarlyMedia' | 'Disconnected';
1426
+ state: ParticipantState;
1427
1427
  /** Whether calling participant is screen sharing */
1428
1428
  isScreenSharing?: boolean;
1429
1429
  /** Whether calling participant is muted */
@@ -1924,6 +1924,8 @@ export declare interface CallWithChatClientState {
1924
1924
  devices: DeviceManagerState;
1925
1925
  /** State of whether the active call is a Teams interop call */
1926
1926
  isTeamsCall: boolean;
1927
+ /** alternateCallerId for PSTN call */
1928
+ alternateCallerId?: string | undefined;
1927
1929
  }
1928
1930
 
1929
1931
  /**
@@ -5432,8 +5434,10 @@ export declare interface MessageThreadStrings {
5432
5434
  failToSendTag?: string;
5433
5435
  /** String for LiveMessage introduction for the Chat Message */
5434
5436
  liveAuthorIntro: string;
5435
- /** String for aria text of message content */
5437
+ /** String for aria text of remote user's message content */
5436
5438
  messageContentAriaText: string;
5439
+ /** String for aria text of local user's message content */
5440
+ messageContentMineAriaText: string;
5437
5441
  /** String for warning on text limit exceeded in EditBox*/
5438
5442
  editBoxTextLimit: string;
5439
5443
  /** String for placeholder text in EditBox when there is no user input*/
@@ -5739,6 +5743,14 @@ export declare interface ParticipantItemProps {
5739
5743
  onClick?: (props?: ParticipantItemProps) => void;
5740
5744
  /** prop to determine if we should show tooltip for participants or not */
5741
5745
  showParticipantOverflowTooltip?: boolean;
5746
+ /**
5747
+ * Optional value to determine and display a participants connection status.
5748
+ * For example, `Connecting`, `Ringing` etc.
5749
+ * The actual text that is displayed is determined by the localized string
5750
+ * corresponding to the provided participant state.
5751
+ * For example, `strings.participantStateConnecting` will be used if `participantState` is `Connecting`.
5752
+ */
5753
+ participantState?: ParticipantState;
5742
5754
  }
5743
5755
 
5744
5756
  /**
@@ -5759,6 +5771,12 @@ export declare interface ParticipantItemStrings {
5759
5771
  mutedIconLabel: string;
5760
5772
  /** placeholder text for participants who does not have a display name*/
5761
5773
  displayNamePlaceholder?: string;
5774
+ /** String shown when `participantState` is `Connecting` */
5775
+ participantStateConnecting?: string;
5776
+ /** String shown when `participantState` is `Ringing` */
5777
+ participantStateRinging?: string;
5778
+ /** String shown when `participantState` is `Hold` */
5779
+ participantStateHold?: string;
5762
5780
  }
5763
5781
 
5764
5782
  /**
@@ -6056,6 +6074,12 @@ export declare type ParticipantsRemovedListener = (event: {
6056
6074
  removedBy: ChatParticipant;
6057
6075
  }) => void;
6058
6076
 
6077
+ /**
6078
+ * @public
6079
+ * The connection state of a call participant.
6080
+ */
6081
+ export declare type ParticipantState = 'Idle' | 'Connecting' | 'Ringing' | 'Connected' | 'Hold' | 'InLobby' | 'EarlyMedia' | 'Disconnected';
6082
+
6059
6083
  /**
6060
6084
  * An array of key value pairs that stores each sender's display name and last read message
6061
6085
  *
@@ -7106,15 +7130,9 @@ export declare interface VideoGalleryRemoteParticipant extends VideoGalleryParti
7106
7130
  * @beta
7107
7131
  * The connection state of the participant. For example, 'Hold', 'Connecting' etc.
7108
7132
  */
7109
- state?: VideoGalleryRemoteParticipantState;
7133
+ state?: ParticipantState;
7110
7134
  }
7111
7135
 
7112
- /**
7113
- * @beta
7114
- * The connection state of the participant. For example, 'Hold', 'Connecting' etc.
7115
- */
7116
- export declare type VideoGalleryRemoteParticipantState = 'Connecting' | 'Ringing' | 'Connected' | 'Hold';
7117
-
7118
7136
  /**
7119
7137
  * Selector type for {@link VideoGallery} component.
7120
7138
  *
@@ -7292,7 +7310,7 @@ export declare interface VideoTileProps {
7292
7310
  * The call connection state of the participant.
7293
7311
  * For example, `Hold` means the participant is on hold.
7294
7312
  */
7295
- participantState?: VideoGalleryRemoteParticipantState;
7313
+ participantState?: ParticipantState;
7296
7314
  strings?: VideoTileStrings;
7297
7315
  }
7298
7316
 
@@ -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-202208050016.0';
195
+ var telemetryVersion = '1.3.2-alpha-202208100014.0';
196
196
 
197
197
  // Copyright (c) Microsoft Corporation.
198
198
  /**
@@ -958,7 +958,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
958
958
  wordBreak: 'break-word'
959
959
  });
960
960
 
961
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$d={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",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};
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};
962
962
 
963
963
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed Participant"};var typingIndicator$c={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$c={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait."};var messageStatusIndicator$c={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$c={label:"Leave",tooltipContent:"Leave Call"};var cameraButton$c={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$c={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$c={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose Camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose Audio Device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose Microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose Speaker"};var participantsButton$c={label:"People",tooltipContent:"Show Participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$c={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$c={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options"};var errorBar$c={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$c={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed Participant"};var dialpad$c={placeholderText:"Enter a number"};var HoldButton$d={onLabel:"Resume",offLabel:"Hold",toolTipOnContent:"Resume call",toolTipOffContent:"Hold call"};var en_GB$1 = {participantItem:participantItem$c,typingIndicator:typingIndicator$c,sendBox:sendBox$c,messageStatusIndicator:messageStatusIndicator$c,endCallButton:endCallButton$c,cameraButton:cameraButton$c,microphoneButton:microphoneButton$c,devicesButton:devicesButton$c,participantsButton:participantsButton$c,screenShareButton:screenShareButton$c,messageThread:messageThread$c,errorBar:errorBar$c,videoGallery:videoGallery$c,dialpad:dialpad$c,HoldButton:HoldButton$d};
964
964
 
@@ -2336,10 +2336,11 @@ const _FileCard = (props) => {
2336
2336
  height: _pxToRem(progressBarThicknessPx)
2337
2337
  }
2338
2338
  };
2339
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
2339
+ return (React__default['default'].createElement("div", { "data-is-focusable": true },
2340
2340
  React__default['default'].createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),
2341
2341
  React__default['default'].createElement(react.Stack, { className: containerClassName, onClick: () => {
2342
- props.actionHandler && props.actionHandler();
2342
+ var _a;
2343
+ (_a = props.actionHandler) === null || _a === void 0 ? void 0 : _a.call(props);
2343
2344
  } },
2344
2345
  React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center", className: fileInfoWrapperClassName },
2345
2346
  React__default['default'].createElement(react.Stack, null,
@@ -3335,25 +3336,13 @@ const ChatMessageContent = (props) => {
3335
3336
  const MessageContentAsRichTextHTML = (props) => {
3336
3337
  const htmlToReactParser = new htmlToReact.Parser();
3337
3338
  const liveAuthor = _formatString(props.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
3338
- const messageAriaText = props.message.content
3339
- ? _formatString(props.messageContentAriaText, {
3340
- author: `${props.message.senderDisplayName}`,
3341
- message: props.message.content
3342
- })
3343
- : undefined;
3344
- return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-text": messageAriaText },
3339
+ return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-text": props.messageContentAriaText },
3345
3340
  React__default['default'].createElement(reactAriaLive.LiveMessage, { message: `${props.message.mine ? '' : liveAuthor} ${extractContent(props.message.content || '')}`, "aria-live": "polite" }),
3346
3341
  htmlToReactParser.parse(props.message.content)));
3347
3342
  };
3348
3343
  const MessageContentAsText = (props) => {
3349
3344
  const liveAuthor = _formatString(props.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
3350
- const messageAriaText = props.message.content
3351
- ? _formatString(props.messageContentAriaText, {
3352
- author: `${props.message.senderDisplayName}`,
3353
- message: props.message.content
3354
- })
3355
- : undefined;
3356
- return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-label": messageAriaText },
3345
+ return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-label": props.messageContentAriaText },
3357
3346
  React__default['default'].createElement(reactAriaLive.LiveMessage, { message: `${props.message.mine ? '' : liveAuthor} ${props.message.content}`, "aria-live": "polite" }),
3358
3347
  React__default['default'].createElement(Linkify__default['default'], { componentDecorator: (decoratedHref, decoratedText, key) => {
3359
3348
  return (React__default['default'].createElement(react.Link, { target: "_blank", href: decoratedHref, key: key }, decoratedText));
@@ -3535,14 +3524,20 @@ const MessageBubble = (props) => {
3535
3524
  locale,
3536
3525
  fileDownloadHandler
3537
3526
  ]);
3538
- const messageContentRef = React.useRef(null);
3527
+ const messageContentAriaText = props.message.content
3528
+ ? props.message.mine
3529
+ ? _formatString(strings.messageContentMineAriaText, {
3530
+ message: props.message.content
3531
+ })
3532
+ : _formatString(strings.messageContentAriaText, {
3533
+ author: `${props.message.senderDisplayName}`,
3534
+ message: props.message.content
3535
+ })
3536
+ : undefined;
3539
3537
  const chatMessage = (React__default['default'].createElement(React__default['default'].Fragment, null,
3540
- React__default['default'].createElement("div", { ref: messageRef, tabIndex: 0, onFocus: () => {
3541
- var _a;
3542
- (_a = messageContentRef.current) === null || _a === void 0 ? void 0 : _a.focus();
3543
- } },
3544
- React__default['default'].createElement(reactNorthstar.Chat.Message, { "data-ui-id": "chat-composite-message", className: react.mergeStyles(messageContainerStyle), styles: messageContainerStyle, content: React__default['default'].createElement("div", { ref: messageContentRef, tabIndex: 0 },
3545
- React__default['default'].createElement(ChatMessageContent, { message: message, liveAuthorIntro: strings.liveAuthorIntro, messageContentAriaText: strings.messageContentAriaText }),
3538
+ React__default['default'].createElement("div", { ref: messageRef },
3539
+ React__default['default'].createElement(reactNorthstar.Chat.Message, { "data-ui-id": "chat-composite-message", className: react.mergeStyles(messageContainerStyle), styles: messageContainerStyle, content: React__default['default'].createElement("div", { tabIndex: 0 },
3540
+ React__default['default'].createElement(ChatMessageContent, { message: message, liveAuthorIntro: strings.liveAuthorIntro, messageContentAriaText: messageContentAriaText }),
3546
3541
  props.onRenderFileDownloads
3547
3542
  ? props.onRenderFileDownloads(userId, message)
3548
3543
  : defaultOnRenderFileDownloads()), author: React__default['default'].createElement(reactNorthstar.Text, { className: chatMessageDateStyle }, message.senderDisplayName), mine: message.mine, timestamp: React__default['default'].createElement(reactNorthstar.Text, { "data-ui-id": ids.messageTimestamp }, formattedTimestamp), details: messageStatus === 'failed' ? (React__default['default'].createElement("div", { className: chatMessageFailedTagStyle(theme) }, strings.failToSendTag)) : message.editedOn ? (React__default['default'].createElement("div", { className: chatMessageEditedTagStyle(theme) }, strings.editedTag)) : undefined, positionActionMenu: false, actionMenu: actionMenuProps, onTouchStart: () => setWasInteractionByTouch(true), onPointerDown: () => setWasInteractionByTouch(false), onKeyDown: () => setWasInteractionByTouch(false), onBlur: () => setWasInteractionByTouch(false), onClick: () => {
@@ -4380,7 +4375,6 @@ const meContainerStyle = {
4380
4375
  * @public
4381
4376
  */
4382
4377
  const ParticipantItem = (props) => {
4383
- var _a, _b, _c, _d;
4384
4378
  const { userId, displayName, onRenderAvatar, menuItems, onRenderIcon, presence, styles, me, onClick, showParticipantOverflowTooltip } = props;
4385
4379
  const [itemHovered, setItemHovered] = React.useState(false);
4386
4380
  const [menuHidden, setMenuHidden] = React.useState(true);
@@ -4388,8 +4382,7 @@ const ParticipantItem = (props) => {
4388
4382
  const theme = useTheme();
4389
4383
  const localeStrings = useLocale$1().strings.participantItem;
4390
4384
  const ids = useIdentifiers();
4391
- const isMeText = (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.isMeText) !== null && _b !== void 0 ? _b : localeStrings.isMeText;
4392
- const menuTitle = (_d = (_c = props.strings) === null || _c === void 0 ? void 0 : _c.menuTitle) !== null && _d !== void 0 ? _d : localeStrings.menuTitle;
4385
+ const strings = Object.assign(Object.assign({}, localeStrings), props.strings);
4393
4386
  const avatarOptions = {
4394
4387
  text: displayName,
4395
4388
  size: react.PersonaSize.size32,
@@ -4404,26 +4397,40 @@ const ParticipantItem = (props) => {
4404
4397
  const meTextStyle = React.useMemo(() => react.mergeStyles(meContainerStyle, { color: theme.palette.neutralTertiary }, styles === null || styles === void 0 ? void 0 : styles.me), [theme.palette.neutralTertiary, styles === null || styles === void 0 ? void 0 : styles.me]);
4405
4398
  const contextualMenuStyle = React.useMemo(() => react.mergeStyles({ background: theme.palette.neutralLighterAlt }, styles === null || styles === void 0 ? void 0 : styles.menu), [theme.palette.neutralLighterAlt, styles === null || styles === void 0 ? void 0 : styles.menu]);
4406
4399
  const infoContainerStyle = React.useMemo(() => react.mergeStyles(iconContainerStyle$1, { color: theme.palette.neutralTertiary }, styles === null || styles === void 0 ? void 0 : styles.iconContainer), [theme.palette.neutralTertiary, styles === null || styles === void 0 ? void 0 : styles.iconContainer]);
4407
- const menuButton = React.useMemo(() => (React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "end", className: react.mergeStyles(menuButtonContainerStyle), title: menuTitle, "data-ui-id": ids.participantItemMenuButton },
4408
- React__default['default'].createElement(react.Icon, { iconName: itemHovered ? 'ParticipantItemOptionsHovered' : 'ParticipantItemOptions', className: iconStyles$3 }))), [itemHovered, menuTitle, ids.participantItemMenuButton]);
4400
+ const menuButton = React.useMemo(() => (React__default['default'].createElement(react.Stack, { horizontal: true, horizontalAlign: "end", className: react.mergeStyles(menuButtonContainerStyle), title: strings.menuTitle, "data-ui-id": ids.participantItemMenuButton },
4401
+ React__default['default'].createElement(react.Icon, { iconName: itemHovered ? 'ParticipantItemOptionsHovered' : 'ParticipantItemOptions', className: iconStyles$3 }))), [itemHovered, strings.menuTitle, ids.participantItemMenuButton]);
4409
4402
  const onDismissMenu = () => {
4410
4403
  setItemHovered(false);
4411
4404
  setMenuHidden(true);
4412
4405
  };
4406
+ const participantStateString = participantStateStringTrampoline(props, strings);
4413
4407
  return (React__default['default'].createElement("div", { ref: containerRef, role: 'menuitem', "data-is-focusable": true, className: react.mergeStyles(participantItemContainerStyle({ localparticipant: me, clickable: !!menuItems }), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onClick: () => {
4414
- setItemHovered(true);
4415
- setMenuHidden(false);
4416
- onClick === null || onClick === void 0 ? void 0 : onClick(props);
4408
+ if (!participantStateString) {
4409
+ setItemHovered(true);
4410
+ setMenuHidden(false);
4411
+ onClick === null || onClick === void 0 ? void 0 : onClick(props);
4412
+ }
4417
4413
  }, tabIndex: 0 },
4418
4414
  React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles({ width: `calc(100% - ${menuButtonContainerStyle.width})`, alignItems: 'center' }) },
4419
4415
  avatar,
4420
- me && React__default['default'].createElement(react.Text, { className: meTextStyle }, isMeText),
4416
+ me && React__default['default'].createElement(react.Text, { className: meTextStyle }, strings.isMeText),
4421
4417
  React__default['default'].createElement(react.Stack, { horizontal: true, className: react.mergeStyles(infoContainerStyle) }, onRenderIcon && onRenderIcon(props))),
4422
- menuItems && menuItems.length > 0 && (React__default['default'].createElement(React__default['default'].Fragment, null,
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,
4423
4419
  menuButton,
4424
4420
  React__default['default'].createElement(react.ContextualMenu, { items: menuItems, hidden: menuHidden, target: containerRef, onItemClick: onDismissMenu, onDismiss: onDismissMenu, directionalHint: react.DirectionalHint.bottomRightEdge, className: contextualMenuStyle, calloutProps: {
4425
4421
  preventDismissOnEvent: _preventDismissOnEvent
4426
- } })))));
4422
+ } })))))));
4423
+ };
4424
+ const participantStateStringTrampoline = (props, strings) => {
4425
+ /* @conditional-compile-remove(one-to-n-calling) */
4426
+ /* @conditional-compile-remove(PSTN-calls) */
4427
+ return props.participantState === 'Idle' || props.participantState === 'Connecting'
4428
+ ? strings === null || strings === void 0 ? void 0 : strings.participantStateConnecting
4429
+ : props.participantState === 'EarlyMedia' || props.participantState === 'Ringing'
4430
+ ? strings === null || strings === void 0 ? void 0 : strings.participantStateRinging
4431
+ : props.participantState === 'Hold'
4432
+ ? strings === null || strings === void 0 ? void 0 : strings.participantStateHold
4433
+ : undefined;
4427
4434
  };
4428
4435
 
4429
4436
  // Copyright (c) Microsoft Corporation.
@@ -4471,7 +4478,10 @@ const onRenderParticipantDefault = (participant, strings, myUserId, onRenderAvat
4471
4478
  callingParticipant.isMuted && (React__default['default'].createElement(react.Icon, { iconName: "ParticipantItemMicOff", className: iconStyles$2, ariaLabel: strings.mutedIconLabel }))))
4472
4479
  : () => null;
4473
4480
  const displayName = !participant.displayName ? strings.displayNamePlaceholder : participant.displayName;
4474
- return (React__default['default'].createElement(ParticipantItem, { styles: styles, key: participant.userId, userId: participant.userId, displayName: displayName, me: myUserId ? participant.userId === myUserId : false, menuItems: menuItems, presence: presence, onRenderIcon: onRenderIcon, onRenderAvatar: onRenderAvatar, onClick: () => onParticipantClick === null || onParticipantClick === void 0 ? void 0 : onParticipantClick(participant), showParticipantOverflowTooltip: showParticipantOverflowTooltip }));
4481
+ return (React__default['default'].createElement(ParticipantItem, { styles: styles, key: participant.userId, userId: participant.userId, displayName: displayName, me: myUserId ? participant.userId === myUserId : false, menuItems: menuItems, presence: presence, onRenderIcon: onRenderIcon, onRenderAvatar: onRenderAvatar, onClick: () => onParticipantClick === null || onParticipantClick === void 0 ? void 0 : onParticipantClick(participant), showParticipantOverflowTooltip: showParticipantOverflowTooltip,
4482
+ /* @conditional-compile-remove(one-to-n-calling) */
4483
+ /* @conditional-compile-remove(PSTN-calls) */
4484
+ participantState: callingParticipant.state }));
4475
4485
  };
4476
4486
  const getParticipantsForDefaultRender = (participants, excludeMe, myUserId) => {
4477
4487
  if (!excludeMe || !myUserId) {
@@ -4791,10 +4801,10 @@ const DefaultPlaceholder = (props) => {
4791
4801
  if (!strings) {
4792
4802
  return;
4793
4803
  }
4794
- if (participantState === 'Connecting') {
4804
+ if (participantState === 'Idle' || participantState === 'Connecting') {
4795
4805
  return strings === null || strings === void 0 ? void 0 : strings.participantStateConnecting;
4796
4806
  }
4797
- else if (participantState === 'Ringing') {
4807
+ else if (participantState === 'EarlyMedia' || participantState === 'Ringing') {
4798
4808
  return strings === null || strings === void 0 ? void 0 : strings.participantStateRinging;
4799
4809
  }
4800
4810
  else if (participantState === 'Hold') {
@@ -7931,7 +7941,7 @@ const convertRemoteParticipantToVideoGalleryRemoteParticipant = (userId, isMuted
7931
7941
  isScreenSharingOn: screenShareStream !== undefined && screenShareStream.isAvailable,
7932
7942
  /* @conditional-compile-remove(one-to-n-calling) */
7933
7943
  /* @conditional-compile-remove(PSTN-calls) */
7934
- state: convertRemoteParticipantStateToVideoGalleryRemoteParticipantState(state)
7944
+ state
7935
7945
  };
7936
7946
  };
7937
7947
  const convertRemoteVideoStreamToVideoGalleryStream = (stream) => {
@@ -7945,29 +7955,6 @@ const convertRemoteVideoStreamToVideoGalleryStream = (stream) => {
7945
7955
  renderElement: (_b = stream.view) === null || _b === void 0 ? void 0 : _b.target
7946
7956
  };
7947
7957
  };
7948
- /* @conditional-compile-remove(one-to-n-calling) */
7949
- /* @conditional-compile-remove(PSTN-calls) */
7950
- /**
7951
- * We convert the Communication Participant states to simpler states that can be used with VideoTiles/VideoGallery.
7952
- */
7953
- const convertRemoteParticipantStateToVideoGalleryRemoteParticipantState = (state) => {
7954
- // `Idle` is the first state of the participant.
7955
- if (state === 'Idle' || state === 'Connecting') {
7956
- return 'Connecting';
7957
- }
7958
- // `EarlyMedia` is a state when the media is played before a participant connects to the call.
7959
- // It occurs immediately after the `Connecting` state.
7960
- if (state === 'EarlyMedia' || state === 'Ringing') {
7961
- return 'Ringing';
7962
- }
7963
- if (state === 'Hold') {
7964
- return 'Hold';
7965
- }
7966
- if (state === 'Connected') {
7967
- return 'Connected';
7968
- }
7969
- return;
7970
- };
7971
7958
 
7972
7959
  // Copyright (c) Microsoft Corporation.
7973
7960
  /**
@@ -15392,7 +15379,7 @@ const drawerContainerStyles$1 = {
15392
15379
  // Copyright (c) Microsoft Corporation.
15393
15380
  /** @private */
15394
15381
  const CallingDialpad = (props) => {
15395
- const { strings, isMobile, showDialpad, onDismissDialpad } = props;
15382
+ const { strings, isMobile, showDialpad, onDismissDialpad, onAddParticipant, alternateCallerId } = props;
15396
15383
  const [textFieldInput, setTextFieldInput] = React.useState('');
15397
15384
  const theme = react.useTheme();
15398
15385
  const onDismissTriggered = () => {
@@ -15400,15 +15387,22 @@ const CallingDialpad = (props) => {
15400
15387
  onDismissDialpad();
15401
15388
  };
15402
15389
  const onClickCall = () => {
15403
- //place holder for adding calling functionality
15404
- console.log(textFieldInput);
15390
+ if (onAddParticipant) {
15391
+ /**
15392
+ * Format the phone number in dialpad textfield to make sure the phone number is in E.164 format.
15393
+ * We assume the input number always include countrycode
15394
+ */
15395
+ const phoneNumber = { phoneNumber: '+' + textFieldInput.replace(/\D/g, '').replaceAll(' ', '') };
15396
+ onAddParticipant(phoneNumber, { alternateCallerId: { phoneNumber: alternateCallerId } });
15397
+ onDismissTriggered();
15398
+ }
15405
15399
  };
15406
15400
  const dialpadModelStyle = React.useMemo(() => themedDialpadModelStyle(theme), [theme]);
15407
15401
  const dialpadStyle = React.useMemo(() => themedDialpadStyle(isMobile, theme), [theme, isMobile]);
15408
15402
  const callButtonStyle = React.useMemo(() => themedCallButtonStyle(theme), [theme]);
15409
15403
  const dialpadComponent = () => {
15410
15404
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
15411
- React__default['default'].createElement(Dialpad, { onChange: setTextFieldInput, styles: dialpadStyle }),
15405
+ React__default['default'].createElement(Dialpad, { styles: dialpadStyle, onChange: setTextFieldInput }),
15412
15406
  React__default['default'].createElement(react.PrimaryButton, { text: strings.dialpadStartCallButtonLabel, onRenderIcon: () => DialpadStartCallIconTrampoline(), onClick: onClickCall, styles: callButtonStyle, disabled: textFieldInput === '' })));
15413
15407
  };
15414
15408
  if (isMobile) {
@@ -15460,7 +15454,7 @@ const drawerContainerStyles = {
15460
15454
  /** @private */
15461
15455
  const AddPeopleDropdown = (props) => {
15462
15456
  const theme = react.useTheme();
15463
- const { inviteLink, strings, mobileView } = props;
15457
+ const { inviteLink, strings, mobileView, onAddParticipant, alternateCallerId } = props;
15464
15458
  const [showDialpad, setShowDialpad] = React.useState(false);
15465
15459
  const menuStyleThemed = React.useMemo(() => themedMenuStyle(theme), [theme]);
15466
15460
  const copyLinkButtonStylesThemed = React.useMemo(() => themedCopyLinkButtonStyles(theme, mobileView), [mobileView, theme]);
@@ -15482,21 +15476,25 @@ const AddPeopleDropdown = (props) => {
15482
15476
  onClick: () => copy__default['default'](inviteLink)
15483
15477
  });
15484
15478
  }
15485
- menuProps.items.push({
15486
- key: 'DialpadKey',
15487
- text: strings.openDialpadButtonLabel,
15488
- itemProps: { styles: copyLinkButtonStylesThemed },
15489
- iconProps: { iconName: PeoplePaneOpenDialpadIconNameTrampoline(), style: iconStyles },
15490
- onClick: () => setShowDialpad(true),
15491
- 'data-ui-id': 'call-with-chat-composite-dial-phone-number-button'
15492
- });
15479
+ // only show the dialpad option when alternateCallerId is set
15480
+ if (alternateCallerId) {
15481
+ menuProps.items.push({
15482
+ key: 'DialpadKey',
15483
+ text: strings.openDialpadButtonLabel,
15484
+ itemProps: { styles: copyLinkButtonStylesThemed },
15485
+ iconProps: { iconName: PeoplePaneOpenDialpadIconNameTrampoline(), style: iconStyles },
15486
+ onClick: () => setShowDialpad(true),
15487
+ 'data-ui-id': 'call-with-chat-composite-dial-phone-number-button'
15488
+ });
15489
+ }
15493
15490
  return menuProps;
15494
15491
  }, [
15495
15492
  strings.copyInviteLinkButtonLabel,
15496
15493
  strings.openDialpadButtonLabel,
15497
15494
  copyLinkButtonStylesThemed,
15498
15495
  inviteLink,
15499
- menuStyleThemed
15496
+ menuStyleThemed,
15497
+ alternateCallerId
15500
15498
  ]);
15501
15499
  const onDismissDialpad = () => {
15502
15500
  setShowDialpad(false);
@@ -15514,10 +15512,10 @@ const AddPeopleDropdown = (props) => {
15514
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" })),
15515
15513
  addPeopleDrawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles, "data-ui-id": "call-with-chat-composite-add-people-dropdown" },
15516
15514
  React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setAddPeopleDrawerMenuItems([]), items: addPeopleDrawerMenuItems }))),
15517
- React__default['default'].createElement(CallingDialpad, { isMobile: true, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad })));
15515
+ alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: true, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId }))));
15518
15516
  }
15519
15517
  return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Stack, null,
15520
- React__default['default'].createElement(CallingDialpad, { isMobile: false, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad }),
15518
+ alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: false, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId })),
15521
15519
  React__default['default'].createElement(react.Stack, { styles: copyLinkButtonStackStyles },
15522
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" })))));
15523
15521
  };
@@ -15538,11 +15536,11 @@ const AddPeopleButton = (props) => {
15538
15536
  React.useMemo(() => react.concatStyleSets(copyLinkButtonStyles, themedCopyLinkButtonStyles$1(mobileView, theme)), [mobileView, theme]);
15539
15537
  /* @conditional-compile-remove(PSTN-calls) */
15540
15538
  if (mobileView) {
15541
- return React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink });
15539
+ return (React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink, onAddParticipant: props.onAddParticipant, alternateCallerId: props.alternateCallerId }));
15542
15540
  }
15543
15541
  else {
15544
15542
  return (React__default['default'].createElement(react.Stack, { tokens: peoplePaneContainerTokens },
15545
- React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink }),
15543
+ React__default['default'].createElement(AddPeopleDropdown, { strings: strings, mobileView: mobileView, inviteLink: inviteLink, onAddParticipant: props.onAddParticipant, alternateCallerId: props.alternateCallerId }),
15546
15544
  participantList));
15547
15545
  }
15548
15546
  };
@@ -15594,9 +15592,17 @@ const PeoplePaneContent = (props) => {
15594
15592
  if (props.mobileView) {
15595
15593
  return (React__default['default'].createElement(react.Stack, { verticalFill: true, styles: peoplePaneContainerStyle, tokens: peoplePaneContainerTokens },
15596
15594
  React__default['default'].createElement(react.Stack.Item, { grow: true, styles: participantListContainerStyles }, participantList),
15597
- React__default['default'].createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings })));
15595
+ React__default['default'].createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings,
15596
+ /* @conditional-compile-remove(PSTN-calls) */
15597
+ onAddParticipant: props.onAddParticipant,
15598
+ /* @conditional-compile-remove(PSTN-calls) */
15599
+ alternateCallerId: props.alternateCallerId })));
15598
15600
  }
15599
- return (React__default['default'].createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings }));
15601
+ return (React__default['default'].createElement(AddPeopleButton, { inviteLink: inviteLink, mobileView: props.mobileView, participantList: participantList, strings: strings,
15602
+ /* @conditional-compile-remove(PSTN-calls) */
15603
+ onAddParticipant: props.onAddParticipant,
15604
+ /* @conditional-compile-remove(PSTN-calls) */
15605
+ alternateCallerId: props.alternateCallerId }));
15600
15606
  };
15601
15607
  /**
15602
15608
  * Create default contextual menu items for particant
@@ -15800,9 +15806,15 @@ const CallPane = (props) => {
15800
15806
  const removeParticipantFromCall = (participantId) => __awaiter$7(void 0, void 0, void 0, function* () {
15801
15807
  yield props.callAdapter.removeParticipant(participantId);
15802
15808
  });
15809
+ /* @conditional-compile-remove(PSTN-calls) */
15810
+ const addParticipantToCall = (participant, options) => __awaiter$7(void 0, void 0, void 0, function* () {
15811
+ yield props.callAdapter.addParticipant(participant, options);
15812
+ });
15803
15813
  const minMaxDragPosition = useMinMaxDragPosition(props.modalLayerHostId, props.rtl);
15804
15814
  const pipStyles = React.useMemo(() => getPipStyles(theme), [theme]);
15805
15815
  const dataUiId = props.activePane === 'people' ? 'call-composite-people-pane' : '';
15816
+ /* @conditional-compile-remove(PSTN-calls) */
15817
+ const alternateCallerId = useAdapter().getState().alternateCallerId;
15806
15818
  return (React__default['default'].createElement(react.Stack, { verticalFill: true, grow: true, styles: paneStyles, "data-ui-id": dataUiId, tokens: props.mobileView ? {} : sidePaneTokens },
15807
15819
  header,
15808
15820
  React__default['default'].createElement(react.Stack.Item, { verticalFill: true, grow: true, styles: paneBodyContainer },
@@ -15810,7 +15822,11 @@ const CallPane = (props) => {
15810
15822
  React__default['default'].createElement(react.Stack.Item, { verticalFill: true, styles: scrollableContainerContents },
15811
15823
  React__default['default'].createElement(react.Stack, { styles: props.activePane === 'people' ? availableSpaceStyles : hiddenStyles },
15812
15824
  React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
15813
- React__default['default'].createElement(PeoplePaneContent, Object.assign({}, props, { onRemoveParticipant: removeParticipantFromCall, setDrawerMenuItems: setDrawerMenuItems, strings: strings }))))))),
15825
+ React__default['default'].createElement(PeoplePaneContent, Object.assign({}, props, { onRemoveParticipant: removeParticipantFromCall,
15826
+ /* @conditional-compile-remove(PSTN-calls) */
15827
+ onAddParticipant: addParticipantToCall, setDrawerMenuItems: setDrawerMenuItems, strings: strings,
15828
+ /* @conditional-compile-remove(PSTN-calls) */
15829
+ alternateCallerId: alternateCallerId }))))))),
15814
15830
  props.mobileView && (React__default['default'].createElement(ModalLocalAndRemotePIP, { callAdapter: props.callAdapter, modalLayerHostId: props.modalLayerHostId, hidden: hidden, styles: pipStyles, minDragPosition: minMaxDragPosition.minDragPosition, maxDragPosition: minMaxDragPosition.maxDragPosition })),
15815
15831
  drawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles },
15816
15832
  React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setDrawerMenuItems([]), items: drawerMenuItems })))));
@@ -18138,7 +18154,9 @@ function callAdapterStateFromCallWithChatAdapterState(callWithChatAdapterState)
18138
18154
  call: callWithChatAdapterState.call,
18139
18155
  devices: callWithChatAdapterState.devices,
18140
18156
  isTeamsCall: callWithChatAdapterState.isTeamsCall,
18141
- latestErrors: callWithChatAdapterState.latestCallErrors
18157
+ latestErrors: callWithChatAdapterState.latestCallErrors,
18158
+ /* @conditional-compile-remove(PSTN-calls) */
18159
+ alternateCallerId: callWithChatAdapterState.alternateCallerId
18142
18160
  };
18143
18161
  }
18144
18162
 
@@ -18411,6 +18429,8 @@ const CallWithChatPane = (props) => {
18411
18429
  const paneStyles = hidden ? hiddenStyles : props.mobileView ? availableSpaceStyles : sidePaneStyles;
18412
18430
  const callWithChatStrings = useCallWithChatCompositeStrings();
18413
18431
  const theme = useTheme();
18432
+ /* @conditional-compile-remove(PSTN-calls) */
18433
+ const alternateCallerId = props.callAdapter.getState().alternateCallerId;
18414
18434
  const header = props.activePane === 'none' ? null : props.mobileView ? (React__default['default'].createElement(TabHeader, Object.assign({}, props, { strings: callWithChatStrings, activeTab: props.activePane }))) : (React__default['default'].createElement(SidePaneHeader, Object.assign({}, props, { strings: callWithChatStrings, headingText: props.activePane === 'chat'
18415
18435
  ? callWithChatStrings.chatPaneTitle
18416
18436
  : props.activePane === 'people'
@@ -18431,8 +18451,16 @@ const CallWithChatPane = (props) => {
18431
18451
  yield props.callAdapter.removeParticipant(participantId);
18432
18452
  yield props.chatAdapter.removeParticipant(participantId);
18433
18453
  });
18454
+ /* @conditional-compile-remove(PSTN-calls) */
18455
+ const addParticipantToCall = (participant, options) => __awaiter$1(void 0, void 0, void 0, function* () {
18456
+ yield props.callAdapter.addParticipant(participant, options);
18457
+ });
18434
18458
  const peopleContent = (React__default['default'].createElement(CallAdapterProvider, { adapter: props.callAdapter },
18435
- React__default['default'].createElement(PeoplePaneContent, Object.assign({}, props, { onRemoveParticipant: removeParticipantFromCallWithChat, setDrawerMenuItems: setDrawerMenuItems, strings: callWithChatStrings }))));
18459
+ React__default['default'].createElement(PeoplePaneContent, Object.assign({}, props, { onRemoveParticipant: removeParticipantFromCallWithChat, setDrawerMenuItems: setDrawerMenuItems, strings: callWithChatStrings,
18460
+ /* @conditional-compile-remove(PSTN-calls) */
18461
+ onAddParticipant: addParticipantToCall,
18462
+ /* @conditional-compile-remove(PSTN-calls) */
18463
+ alternateCallerId: alternateCallerId }))));
18436
18464
  const minMaxDragPosition = useMinMaxDragPosition(props.modalLayerHostId, props.rtl);
18437
18465
  const pipStyles = React.useMemo(() => getPipStyles(theme), [theme]);
18438
18466
  const dataUiId = props.activePane === 'chat'
@@ -18620,7 +18648,9 @@ function callWithChatAdapterStateFromBackingStates(callAdapter, chatAdapter) {
18620
18648
  latestCallErrors: callAdapterState.latestErrors,
18621
18649
  latestChatErrors: chatAdapterState.latestErrors,
18622
18650
  /* @conditional-compile-remove(file-sharing) */
18623
- fileUploads: chatAdapterState.fileUploads
18651
+ fileUploads: chatAdapterState.fileUploads,
18652
+ /* @conditional-compile-remove(PSTN-calls) */
18653
+ alternateCallerId: callAdapterState.alternateCallerId
18624
18654
  };
18625
18655
  }
18626
18656
  /**