@azure/communication-react 1.14.1-alpha-202403280012 → 1.14.1-alpha-202403290012

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 (83) hide show
  1. package/dist/communication-react.d.ts +134 -61
  2. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-D3ER8Kz9.js → RichTextSendBoxWrapper-CH6WvEGZ.js} +4 -4
  3. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-D3ER8Kz9.js.map → RichTextSendBoxWrapper-CH6WvEGZ.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{index-BI61bnOi.js → index-qxnuqL7s.js} +291 -207
  5. package/dist/dist-cjs/communication-react/index-qxnuqL7s.js.map +1 -0
  6. package/dist/dist-cjs/communication-react/index.js +3 -3
  7. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  8. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  9. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +1 -2
  10. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  11. package/dist/dist-esm/communication-react/src/index.d.ts +1 -1
  12. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  13. package/dist/dist-esm/react-components/src/components/AttachmentCard.d.ts +11 -15
  14. package/dist/dist-esm/react-components/src/components/AttachmentCard.js +25 -41
  15. package/dist/dist-esm/react-components/src/components/AttachmentCard.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/AttachmentDownloadCards.d.ts +18 -11
  17. package/dist/dist-esm/react-components/src/components/AttachmentDownloadCards.js +74 -62
  18. package/dist/dist-esm/react-components/src/components/AttachmentDownloadCards.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/AttachmentUploadCards.js +37 -4
  20. package/dist/dist-esm/react-components/src/components/AttachmentUploadCards.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.d.ts +6 -3
  22. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.d.ts +5 -5
  24. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js +7 -7
  25. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/FluentChatMessageComponent.js +13 -18
  27. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/FluentChatMessageComponent.js.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.d.ts +9 -9
  29. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js.map +1 -1
  30. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.d.ts +9 -9
  31. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js +10 -10
  32. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js +12 -10
  34. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +10 -9
  36. package/dist/dist-esm/react-components/src/components/MessageThread.js +6 -3
  37. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  38. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -2
  39. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  40. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.d.ts +1 -1
  41. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js +1 -1
  42. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js.map +1 -1
  43. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.d.ts +10 -2
  44. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js +20 -14
  45. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +1 -0
  47. package/dist/dist-esm/react-components/src/theming/icons.d.ts +3 -2
  48. package/dist/dist-esm/react-components/src/theming/icons.js +5 -3
  49. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  50. package/dist/dist-esm/react-components/src/types/Attachment.d.ts +97 -37
  51. package/dist/dist-esm/react-components/src/types/Attachment.js.map +1 -1
  52. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +3 -3
  53. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js +2 -2
  55. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js.map +1 -1
  56. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +1 -1
  57. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +32 -17
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalDeviceSettings.styles.d.ts +5 -1
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalDeviceSettings.styles.js +12 -0
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalDeviceSettings.styles.js.map +1 -1
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.d.ts +2 -14
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js +14 -10
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js.map +1 -1
  65. package/dist/dist-esm/react-composites/src/composites/ChatComposite/AttachmentDownloadErrorBar.d.ts +15 -0
  66. package/dist/dist-esm/react-composites/src/composites/ChatComposite/{FileDownloadErrorBar.js → AttachmentDownloadErrorBar.js} +5 -5
  67. package/dist/dist-esm/react-composites/src/composites/ChatComposite/AttachmentDownloadErrorBar.js.map +1 -0
  68. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.d.ts +4 -5
  69. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +10 -7
  70. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  71. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.js +1 -1
  72. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.js.map +1 -1
  73. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/index.d.ts +2 -0
  74. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/index.js.map +1 -1
  75. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.d.ts +1 -1
  76. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.js.map +1 -1
  77. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +11 -2
  78. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  79. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +3 -2
  80. package/package.json +1 -1
  81. package/dist/dist-cjs/communication-react/index-BI61bnOi.js.map +0 -1
  82. package/dist/dist-esm/react-composites/src/composites/ChatComposite/FileDownloadErrorBar.d.ts +0 -15
  83. package/dist/dist-esm/react-composites/src/composites/ChatComposite/FileDownloadErrorBar.js.map +0 -1
@@ -176,7 +176,7 @@ function getDefaultExportFromCjs (x) {
176
176
  // Copyright (c) Microsoft Corporation.
177
177
  // Licensed under the MIT License.
178
178
  // GENERATED FILE. DO NOT EDIT MANUALLY.
179
- var telemetryVersion = '1.14.1-alpha-202403280012';
179
+ var telemetryVersion = '1.14.1-alpha-202403290012';
180
180
 
181
181
 
182
182
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -5631,7 +5631,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
5631
5631
  wordBreak: 'break-word'
5632
5632
  });
5633
5633
 
5634
- var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold",attendeeRole:"Attendee"};var ParticipantList$l={overflowParticipantCount:"+{overflowCount} more"};var typingIndicator$k={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$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var richTextSendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",boldTooltip:"Bold",italicTooltip:"Italic",underlineTooltip:"Underline",bulletListTooltip:"Bulleted list",numberListTooltip:"Numbered list",increaseIndentTooltip:"Increase indent",decreaseIndentTooltip:"Decrease indent",insertTableTooltip:"Insert table",richTextFormatButtonTooltip:"Format",insertRowOrColumnMenu:"Insert",insertTableMenuTitle:"Insert {column} x {row} table",insertRowAboveMenu:"Insert above",insertRowBelowMenu:"Insert below",insertColumnLeftMenu:"Insert left",insertColumnRightMenu:"Insert right",deleteRowOrColumnMenu:"Delete",deleteColumnMenu:"Delete column",deleteRowMenu:"Delete row",deleteTableMenu:"Delete table"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageOverlay$k={downloadButtonLabel:"Download",dismissButtonAriaLabel:"Close"};var messageStatusIndicator$k={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$k={label:"Leave",tooltipContent:"Leave call"};var cameraButton$k={onLabel:"Camera",offLabel:"Camera",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",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera",videoEffectsMenuItemTitle:"Effects"};var microphoneButton$k={onLabel:"Mic",offLabel:"Mic",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",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",microphonePrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$k={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$k={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$k={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var raiseHandButton$k={offLabel:"Raise",onLabel:"Lower",tooltipDisabledContent:"Raise Hand action is disabled",tooltipOnContent:"Lower Hand",tooltipOffContent:"Raise Hand"};var reactionButton$k={label:"React",ariaLabel:"React Button, Send a reaction",tooltipDisabledContent:"Reaction action is disabled",tooltipContent:"Send a reaction",likeReactionTooltipContent:"Like",heartReactionTooltipContent:"Love",laughReactionTooltipContent:"Laugh",applauseReactionTooltipContent:"Applause",surprisedReactionTooltipContent:"Surprised"};var messageThread$k={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:"Done",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadAttachment:"Download file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",attachmentCardGroupMessage:"The message has {attachmentCount} attachment",messageDeletedAnnouncementAriaLabel:"The message is deleted"};var errorBar$k={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:"There was an issue starting screen share.",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network.",unableToStartVideoEffect:"Unable to apply video effect.",startSpotlightWhileMaxParticipantsAreSpotlighted:"Cannot start spotlight on participant(s) because the maximum number of participants are already spotlighted."};var videoGallery$k={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}",startSpotlightVideoTileMenuLabel:"Spotlight for everyone",addSpotlightVideoTileMenuLabel:"Add spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopSpotlightVideoTileMenuLabel:"Stop spotlighting",stopSpotlightOnSelfVideoTileMenuLabel:"Exit spotlight",attendeeRole:"Attendee"};var dialpad$k={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$k={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$k={participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneSitePermissionsRequest$k={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraSitePermissionsRequest$k={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneSitePermissionsRequest$k={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneSitePermissionsCheck$k={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraSitePermissionsCheck$k={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneSitePermissionsCheck$k={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneSitePermissionsDenied$k={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraAndMicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera and microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraSitePermissionsDenied$k={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneSitePermissionsDenied$k={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var CameraSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$l={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$l={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$l={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$k={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$k={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var verticalGallery$k={leftNavButtonAriaLabel:"previous page",rightNavButtonAriaLabel:"next page"};var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,richTextSendBox:richTextSendBox$k,mentionPopover:mentionPopover$k,imageOverlay:imageOverlay$k,messageStatusIndicator:messageStatusIndicator$k,endCallButton:endCallButton$k,cameraButton:cameraButton$k,microphoneButton:microphoneButton$k,devicesButton:devicesButton$k,participantsButton:participantsButton$k,screenShareButton:screenShareButton$k,raiseHandButton:raiseHandButton$k,reactionButton:reactionButton$k,messageThread:messageThread$k,errorBar:errorBar$k,videoGallery:videoGallery$k,dialpad:dialpad$k,holdButton:holdButton$k,videoTile:videoTile$k,CameraAndMicrophoneSitePermissionsRequest:CameraAndMicrophoneSitePermissionsRequest$k,CameraSitePermissionsRequest:CameraSitePermissionsRequest$k,MicrophoneSitePermissionsRequest:MicrophoneSitePermissionsRequest$k,CameraAndMicrophoneSitePermissionsCheck:CameraAndMicrophoneSitePermissionsCheck$k,CameraSitePermissionsCheck:CameraSitePermissionsCheck$k,MicrophoneSitePermissionsCheck:MicrophoneSitePermissionsCheck$k,CameraAndMicrophoneSitePermissionsDenied:CameraAndMicrophoneSitePermissionsDenied$k,CameraAndMicrophoneSitePermissionsDeniedSafari:CameraAndMicrophoneSitePermissionsDeniedSafari$k,CameraSitePermissionsDenied:CameraSitePermissionsDenied$k,MicrophoneSitePermissionsDenied:MicrophoneSitePermissionsDenied$k,CameraSitePermissionsDeniedSafari:CameraSitePermissionsDeniedSafari$k,MicrophoneSitePermissionsDeniedSafari:MicrophoneSitePermissionsDeniedSafari$k,UnsupportedBrowser:UnsupportedBrowser$l,UnsupportedBrowserVersion:UnsupportedBrowserVersion$l,UnsupportedOperatingSystem:UnsupportedOperatingSystem$l,BrowserPermissionDenied:BrowserPermissionDenied$k,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$k,verticalGallery:verticalGallery$k};
5634
+ var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold",attendeeRole:"Attendee"};var ParticipantList$l={overflowParticipantCount:"+{overflowCount} more"};var typingIndicator$k={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$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var richTextSendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",boldTooltip:"Bold",italicTooltip:"Italic",underlineTooltip:"Underline",bulletListTooltip:"Bulleted list",numberListTooltip:"Numbered list",increaseIndentTooltip:"Increase indent",decreaseIndentTooltip:"Decrease indent",insertTableTooltip:"Insert table",richTextFormatButtonTooltip:"Format",insertRowOrColumnMenu:"Insert",insertTableMenuTitle:"Insert {column} x {row} table",insertRowAboveMenu:"Insert above",insertRowBelowMenu:"Insert below",insertColumnLeftMenu:"Insert left",insertColumnRightMenu:"Insert right",deleteRowOrColumnMenu:"Delete",deleteColumnMenu:"Delete column",deleteRowMenu:"Delete row",deleteTableMenu:"Delete table"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageOverlay$k={downloadButtonLabel:"Download",dismissButtonAriaLabel:"Close"};var messageStatusIndicator$k={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$k={label:"Leave",tooltipContent:"Leave call"};var cameraButton$k={onLabel:"Camera",offLabel:"Camera",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",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera",videoEffectsMenuItemTitle:"Effects"};var microphoneButton$k={onLabel:"Mic",offLabel:"Mic",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",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",microphonePrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$k={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$k={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$k={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var raiseHandButton$k={offLabel:"Raise",onLabel:"Lower",tooltipDisabledContent:"Raise Hand action is disabled",tooltipOnContent:"Lower Hand",tooltipOffContent:"Raise Hand"};var reactionButton$k={label:"React",ariaLabel:"React Button, Send a reaction",tooltipDisabledContent:"Reaction action is disabled",tooltipContent:"Send a reaction",likeReactionTooltipContent:"Like",heartReactionTooltipContent:"Love",laughReactionTooltipContent:"Laugh",applauseReactionTooltipContent:"Applause",surprisedReactionTooltipContent:"Surprised"};var messageThread$k={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:"Done",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadAttachment:"Download file",openAttachment:"Open file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",attachmentCardGroupMessage:"The message has {attachmentCount} attachment",messageDeletedAnnouncementAriaLabel:"The message is deleted"};var errorBar$k={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:"There was an issue starting screen share.",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network.",unableToStartVideoEffect:"Unable to apply video effect.",startSpotlightWhileMaxParticipantsAreSpotlighted:"Cannot start spotlight on participant(s) because the maximum number of participants are already spotlighted."};var videoGallery$k={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}",startSpotlightVideoTileMenuLabel:"Spotlight for everyone",addSpotlightVideoTileMenuLabel:"Add spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopSpotlightVideoTileMenuLabel:"Stop spotlighting",stopSpotlightOnSelfVideoTileMenuLabel:"Exit spotlight",attendeeRole:"Attendee"};var dialpad$k={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$k={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$k={participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneSitePermissionsRequest$k={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraSitePermissionsRequest$k={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneSitePermissionsRequest$k={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneSitePermissionsCheck$k={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraSitePermissionsCheck$k={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneSitePermissionsCheck$k={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneSitePermissionsDenied$k={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraAndMicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera and microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraSitePermissionsDenied$k={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneSitePermissionsDenied$k={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var CameraSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$l={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$l={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$l={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$k={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$k={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var verticalGallery$k={leftNavButtonAriaLabel:"previous page",rightNavButtonAriaLabel:"next page"};var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,richTextSendBox:richTextSendBox$k,mentionPopover:mentionPopover$k,imageOverlay:imageOverlay$k,messageStatusIndicator:messageStatusIndicator$k,endCallButton:endCallButton$k,cameraButton:cameraButton$k,microphoneButton:microphoneButton$k,devicesButton:devicesButton$k,participantsButton:participantsButton$k,screenShareButton:screenShareButton$k,raiseHandButton:raiseHandButton$k,reactionButton:reactionButton$k,messageThread:messageThread$k,errorBar:errorBar$k,videoGallery:videoGallery$k,dialpad:dialpad$k,holdButton:holdButton$k,videoTile:videoTile$k,CameraAndMicrophoneSitePermissionsRequest:CameraAndMicrophoneSitePermissionsRequest$k,CameraSitePermissionsRequest:CameraSitePermissionsRequest$k,MicrophoneSitePermissionsRequest:MicrophoneSitePermissionsRequest$k,CameraAndMicrophoneSitePermissionsCheck:CameraAndMicrophoneSitePermissionsCheck$k,CameraSitePermissionsCheck:CameraSitePermissionsCheck$k,MicrophoneSitePermissionsCheck:MicrophoneSitePermissionsCheck$k,CameraAndMicrophoneSitePermissionsDenied:CameraAndMicrophoneSitePermissionsDenied$k,CameraAndMicrophoneSitePermissionsDeniedSafari:CameraAndMicrophoneSitePermissionsDeniedSafari$k,CameraSitePermissionsDenied:CameraSitePermissionsDenied$k,MicrophoneSitePermissionsDenied:MicrophoneSitePermissionsDenied$k,CameraSitePermissionsDeniedSafari:CameraSitePermissionsDeniedSafari$k,MicrophoneSitePermissionsDeniedSafari:MicrophoneSitePermissionsDeniedSafari$k,UnsupportedBrowser:UnsupportedBrowser$l,UnsupportedBrowserVersion:UnsupportedBrowserVersion$l,UnsupportedOperatingSystem:UnsupportedOperatingSystem$l,BrowserPermissionDenied:BrowserPermissionDenied$k,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$k,verticalGallery:verticalGallery$k};
5635
5635
 
5636
5636
  // Copyright (c) Microsoft Corporation.
5637
5637
  // Licensed under the MIT License.
@@ -6708,9 +6708,11 @@ const DEFAULT_COMPONENT_ICONS = {
6708
6708
  /* @conditional-compile-remove(reaction) */
6709
6709
  ReactionButtonIcon: React.createElement(reactIcons.Emoji20Regular, null),
6710
6710
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
6711
- CancelFileUpload: React.createElement(reactIcons.Dismiss16Regular, null),
6711
+ CancelAttachmentUpload: React.createElement(reactIcons.Dismiss16Regular, null),
6712
6712
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
6713
- DownloadFile: React.createElement(reactIcons.ArrowDownload16Regular, null),
6713
+ DownloadAttachment: React.createElement(reactIcons.ArrowDownload20Regular, null),
6714
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
6715
+ OpenAttachment: React.createElement(reactIcons.Open20Regular, null),
6714
6716
  /* @conditional-compile-remove(data-loss-prevention) */
6715
6717
  DataLossPreventionProhibited: React.createElement(DataLossPreventionProhibited16Regular, null),
6716
6718
  EditBoxCancel: React.createElement(reactIcons.Dismiss20Regular, null),
@@ -8789,7 +8791,7 @@ const useAttachmentCardStyles = reactComponents.makeStyles({
8789
8791
  /**
8790
8792
  * @private
8791
8793
  */
8792
- const fileNameContainerClassName = react.mergeStyles({
8794
+ const attachmentNameContainerClassName = react.mergeStyles({
8793
8795
  marginTop: _pxToRem(5),
8794
8796
  width: '5.75rem',
8795
8797
  overflow: 'hidden',
@@ -8801,6 +8803,15 @@ const fileNameContainerClassName = react.mergeStyles({
8801
8803
 
8802
8804
  // Copyright (c) Microsoft Corporation.
8803
8805
  // Licensed under the MIT License.
8806
+ var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
8807
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8808
+ return new (P || (P = Promise))(function (resolve, reject) {
8809
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8810
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8811
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8812
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8813
+ });
8814
+ };
8804
8815
  /**
8805
8816
  * @internal
8806
8817
  * A component for displaying an attachment card with attachment icon and progress bar.
@@ -8809,36 +8820,8 @@ const fileNameContainerClassName = react.mergeStyles({
8809
8820
  */
8810
8821
  const _AttachmentCard = (props) => {
8811
8822
  var _a, _b, _c, _d;
8812
- const { attachmentName, attachmentExtension, progress, actionIcon, actionHandler } = props;
8823
+ const { attachment, progress, menuActions, onActionHandlerFailed } = props;
8813
8824
  const attachmentCardStyles = useAttachmentCardStyles();
8814
- // default/placeholder before actual code implemented
8815
- const menuActions = React.useMemo(() => {
8816
- return [
8817
- {
8818
- name: actionIcon && (actionIcon === null || actionIcon === void 0 ? void 0 : actionIcon.props.ariaLabel),
8819
- icon: actionIcon !== null && actionIcon !== void 0 ? actionIcon : React.createElement(React.Fragment, null),
8820
- onClick: (attachment) => {
8821
- if (attachment) {
8822
- actionHandler === null || actionHandler === void 0 ? void 0 : actionHandler();
8823
- }
8824
- }
8825
- }
8826
- ];
8827
- }, [actionIcon, actionHandler]);
8828
- // placeholder before refactoring the props
8829
- const attachment = React.useMemo(() => {
8830
- return {
8831
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8832
- id: 'attachmentId',
8833
- extension: attachmentExtension,
8834
- name: attachmentName,
8835
- url: 'https://localhost' // placeholder not used
8836
- };
8837
- }, [attachmentExtension, attachmentName]);
8838
- // placeholder before refactoring the props
8839
- const onDownloadErrorMessage = React.useCallback((errorMessage) => {
8840
- console.log(errorMessage);
8841
- }, []);
8842
8825
  const isUploadComplete = React.useMemo(() => {
8843
8826
  return progress !== undefined && progress > 0 && progress < 1;
8844
8827
  }, [progress]);
@@ -8849,24 +8832,27 @@ const _AttachmentCard = (props) => {
8849
8832
  const showProgressIndicator = progress !== undefined && progress > 0 && progress < 1;
8850
8833
  React.useEffect(() => {
8851
8834
  if (showProgressIndicator) {
8852
- setAnnouncerString(`${uploadStartedString} ${attachmentName}`);
8835
+ setAnnouncerString(`${uploadStartedString} ${attachment.name}`);
8853
8836
  }
8854
8837
  else if (progress === 1) {
8855
- setAnnouncerString(`${attachmentName} ${uploadCompletedString}`);
8838
+ setAnnouncerString(`${attachment.name} ${uploadCompletedString}`);
8856
8839
  }
8857
8840
  else {
8858
8841
  setAnnouncerString(undefined);
8859
8842
  }
8860
- }, [progress, showProgressIndicator, attachmentName, uploadStartedString, uploadCompletedString]);
8843
+ }, [progress, showProgressIndicator, attachment.name, uploadStartedString, uploadCompletedString]);
8861
8844
  return (React.createElement("div", { "data-is-focusable": true },
8862
8845
  React.createElement(Announcer$1, { announcementString: announcerString, ariaLive: 'polite' }),
8863
8846
  React.createElement(reactComponents.Card, { className: attachmentCardStyles.root, size: "small", role: "listitem" },
8864
- React.createElement(reactComponents.CardHeader, { image: React.createElement(react.Icon, { "data-ui-id": 'filetype-icon', iconName: reactFileTypeIcons.getFileTypeIconProps({
8865
- extension: attachmentExtension,
8847
+ React.createElement(reactComponents.CardHeader, { image: React.createElement(react.Icon, { "data-ui-id": 'attachmenttype-icon', iconName: reactFileTypeIcons.getFileTypeIconProps({
8848
+ extension: React.useMemo(() => {
8849
+ var _a, _b;
8850
+ return (_b = (_a = attachment.extension) !== null && _a !== void 0 ? _a : attachment.name.split('.').pop()) !== null && _b !== void 0 ? _b : '';
8851
+ }, [attachment]),
8866
8852
  size: 24,
8867
8853
  imageFileType: 'svg'
8868
- }).iconName }), header: React.createElement("div", { className: fileNameContainerClassName },
8869
- React.createElement(reactComponents.Text, { title: attachmentName }, attachmentName)), action: getMenuItems(menuActions, attachment, onDownloadErrorMessage) })),
8854
+ }).iconName }), header: React.createElement("div", { className: attachmentNameContainerClassName },
8855
+ React.createElement(reactComponents.Text, { title: attachment.name }, attachment.name)), action: getMenuItems(menuActions, attachment, onActionHandlerFailed) })),
8870
8856
  isUploadComplete ? (React.createElement(reactComponents.CardFooter, null,
8871
8857
  React.createElement(reactComponents.ProgressBar, { thickness: "medium", value: progress, shape: "rounded" }))) : (React.createElement(React.Fragment, null, " "))));
8872
8858
  };
@@ -8886,14 +8872,14 @@ const getMenuItems = (menuActions, attachment, handleOnClickError) => {
8886
8872
  React.createElement(reactComponents.MenuTrigger, null,
8887
8873
  React.createElement(reactComponents.ToolbarButton, { "aria-label": "More", icon: React.createElement(reactIcons.MoreHorizontal24Filled, null) })),
8888
8874
  React.createElement(reactComponents.MenuPopover, null,
8889
- React.createElement(reactComponents.MenuList, null, menuActions.map((menuItem, index) => (React.createElement(reactComponents.MenuItem, { key: index, icon: menuItem.icon, onClick: () => {
8875
+ React.createElement(reactComponents.MenuList, null, menuActions.map((menuItem, index) => (React.createElement(reactComponents.MenuItem, { key: index, icon: menuItem.icon, onClick: () => __awaiter$C(void 0, void 0, void 0, function* () {
8890
8876
  try {
8891
- menuItem.onClick(attachment);
8877
+ yield menuItem.onClick(attachment);
8892
8878
  }
8893
8879
  catch (e) {
8894
8880
  handleOnClickError === null || handleOnClickError === void 0 ? void 0 : handleOnClickError(e.message);
8895
8881
  }
8896
- } }, menuItem.name))))))));
8882
+ }) }, menuItem.name))))))));
8897
8883
  };
8898
8884
 
8899
8885
  // Copyright (c) Microsoft Corporation.
@@ -8935,16 +8921,48 @@ const actionIconStyle = { height: '1rem' };
8935
8921
  * @internal
8936
8922
  */
8937
8923
  const _AttachmentUploadCards = (props) => {
8924
+ var _a;
8938
8925
  const attachments = props.activeFileUploads;
8926
+ const localeStrings = useLocaleAttachmentCardStringsTrampoline();
8927
+ const removeFileButtonString = React.useMemo(() => () => {
8928
+ var _a, _b;
8929
+ return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeAttachment) !== null && _b !== void 0 ? _b : localeStrings.removeAttachment;
8930
+ }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeAttachment, localeStrings.removeAttachment]);
8939
8931
  if (!attachments || attachments.length === 0) {
8940
8932
  return React.createElement(React.Fragment, null);
8941
8933
  }
8942
8934
  return (React.createElement(_AttachmentCardGroup, null, attachments &&
8943
8935
  attachments
8944
8936
  .filter((attachment) => !attachment.error)
8945
- .map((attachment) => (React.createElement(_AttachmentCard, { attachmentName: attachment.filename, progress: attachment.progress, key: attachment.id, attachmentExtension: extension(attachment.filename), actionIcon: React.createElement(react.Icon, { iconName: "CancelFileUpload", className: react.mergeStyles(actionIconStyle) }), actionHandler: () => {
8946
- props.onCancelFileUpload && props.onCancelFileUpload(attachment.id);
8947
- }, strings: props.strings })))));
8937
+ .map((attachment) => {
8938
+ var _a, _b, _c, _d;
8939
+ return (React.createElement(_AttachmentCard
8940
+ // temp converter before upload is refactored
8941
+ , {
8942
+ // temp converter before upload is refactored
8943
+ attachment: {
8944
+ id: attachment.id,
8945
+ name: attachment.filename,
8946
+ extension: extension(attachment.filename),
8947
+ progress: attachment.progress,
8948
+ uploadStatus: attachment.error
8949
+ ? {
8950
+ message: (_a = attachment.error) === null || _a === void 0 ? void 0 : _a.message,
8951
+ timestamp: (_b = attachment.error) === null || _b === void 0 ? void 0 : _b.timestamp
8952
+ }
8953
+ : undefined
8954
+ }, progress: attachment.progress, key: attachment.id, menuActions: [
8955
+ {
8956
+ name: (_d = (_c = props.strings) === null || _c === void 0 ? void 0 : _c.removeAttachment) !== null && _d !== void 0 ? _d : 'Remove',
8957
+ icon: (React.createElement("div", { "aria-label": removeFileButtonString() },
8958
+ React.createElement(react.Icon, { iconName: "CancelAttachmentUpload", className: react.mergeStyles(actionIconStyle) }))),
8959
+ onClick: () => {
8960
+ props.onCancelFileUpload && props.onCancelFileUpload(attachment.id);
8961
+ return Promise.resolve();
8962
+ }
8963
+ }
8964
+ ], strings: props.strings }));
8965
+ })));
8948
8966
  };
8949
8967
 
8950
8968
  // Copyright (c) Microsoft Corporation.
@@ -12081,15 +12099,6 @@ const processHtmlToReact = (props) => {
12081
12099
 
12082
12100
  // Copyright (c) Microsoft Corporation.
12083
12101
  // Licensed under the MIT License.
12084
- var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
12085
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12086
- return new (P || (P = Promise))(function (resolve, reject) {
12087
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12088
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12089
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12090
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12091
- });
12092
- };
12093
12102
  const attachmentDownloadCardsStyle = {
12094
12103
  marginTop: '0.25rem'
12095
12104
  };
@@ -12098,66 +12107,94 @@ const attachmentDownloadCardsStyle = {
12098
12107
  */
12099
12108
  const _AttachmentDownloadCards = (props) => {
12100
12109
  var _a, _b;
12101
- const { userId, fileMetadata } = props;
12102
- const [showSpinner, setShowSpinner] = React.useState(false);
12110
+ const { attachments, message } = props;
12103
12111
  const localeStrings = useLocaleStringsTrampoline();
12112
+ const getMenuActions = React.useCallback((attachment, localeStrings, message, action) => {
12113
+ const defaultMenuActions = getDefaultMenuActions(localeStrings, message);
12114
+ try {
12115
+ const actions = action === null || action === void 0 ? void 0 : action(attachment, message);
12116
+ if (actions && actions.length > 0) {
12117
+ return actions;
12118
+ }
12119
+ else {
12120
+ return defaultMenuActions;
12121
+ }
12122
+ }
12123
+ catch (error) {
12124
+ return defaultMenuActions;
12125
+ }
12126
+ }, []);
12104
12127
  const downloadAttachmentButtonString = React.useMemo(() => () => {
12105
12128
  var _a, _b;
12106
12129
  return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadAttachment) !== null && _b !== void 0 ? _b : localeStrings.downloadAttachment;
12107
12130
  }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadAttachment, localeStrings.downloadAttachment]);
12108
- const isShowDownloadIcon = React.useCallback((attachment) => {
12109
- var _a;
12110
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12111
- return ((_a = attachment.payload) === null || _a === void 0 ? void 0 : _a.teamsFileAttachment) !== 'true';
12112
- }, []);
12113
12131
  const attachmentCardGroupDescription = React.useMemo(() => () => {
12114
12132
  var _a, _b, _c;
12115
- const fileGroupLocaleString = (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.attachmentCardGroupMessage) !== null && _b !== void 0 ? _b : localeStrings.attachmentCardGroupMessage;
12133
+ const attachmentGroupLocaleString = (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.attachmentCardGroupMessage) !== null && _b !== void 0 ? _b : localeStrings.attachmentCardGroupMessage;
12116
12134
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12117
- return _formatString(fileGroupLocaleString, {
12118
- attachmentCount: `${(_c = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.length) !== null && _c !== void 0 ? _c : 0}`
12135
+ return _formatString(attachmentGroupLocaleString, {
12136
+ attachmentCount: `${(_c = attachments === null || attachments === void 0 ? void 0 : attachments.length) !== null && _c !== void 0 ? _c : 0}`
12119
12137
  });
12120
- }, [(_b = props.strings) === null || _b === void 0 ? void 0 : _b.attachmentCardGroupMessage, localeStrings.attachmentCardGroupMessage, fileMetadata]);
12121
- const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$C(void 0, void 0, void 0, function* () {
12122
- if (!props.downloadHandler) {
12123
- window.open(file.url, '_blank', 'noopener,noreferrer');
12124
- }
12125
- else {
12126
- setShowSpinner(true);
12127
- try {
12128
- const response = yield props.downloadHandler(userId, file);
12129
- setShowSpinner(false);
12130
- if (response instanceof URL) {
12131
- window.open(response.toString(), '_blank', 'noopener,noreferrer');
12132
- }
12133
- else {
12134
- props.onDownloadErrorMessage && props.onDownloadErrorMessage(response.errorMessage);
12135
- }
12136
- }
12137
- finally {
12138
- setShowSpinner(false);
12139
- }
12140
- }
12141
- }), [props]);
12142
- if (!fileMetadata || fileMetadata.length === 0 || !fileMetadata) {
12138
+ }, [(_b = props.strings) === null || _b === void 0 ? void 0 : _b.attachmentCardGroupMessage, localeStrings.attachmentCardGroupMessage, attachments]);
12139
+ if (!attachments || attachments.length === 0 || !attachments) {
12143
12140
  return React.createElement(React.Fragment, null);
12144
12141
  }
12145
- return (React.createElement("div", { style: attachmentDownloadCardsStyle, "data-ui-id": "file-download-card-group" },
12146
- React.createElement(_AttachmentCardGroup, { ariaLabel: attachmentCardGroupDescription() }, fileMetadata &&
12147
- fileMetadata.map((attachment) => (React.createElement(react.TooltipHost, { content: downloadAttachmentButtonString(), key: attachment.name },
12148
- React.createElement(_AttachmentCard, { attachmentName: attachment.name, key: attachment.name, attachmentExtension: attachment.extension, actionIcon: showSpinner ? (React.createElement(react.Spinner, { size: react.SpinnerSize.medium, "aria-live": 'polite', role: 'status' })) : isShowDownloadIcon(attachment) ? (React.createElement(DownloadIconTrampoline, null)) : (React.createElement(reactIcons.Open20Regular, null)), actionHandler: () => fileDownloadHandler(userId, attachment) })))))));
12142
+ return (React.createElement("div", { style: attachmentDownloadCardsStyle, "data-ui-id": "attachment-download-card-group" },
12143
+ React.createElement(_AttachmentCardGroup, { ariaLabel: attachmentCardGroupDescription() }, attachments &&
12144
+ attachments.map((attachment) => (React.createElement(react.TooltipHost, { content: downloadAttachmentButtonString(), key: attachment.name },
12145
+ React.createElement(_AttachmentCard, { attachment: attachment, key: attachment.id, menuActions: getMenuActions(attachment, localeStrings, message, props.actionsForAttachment), onActionHandlerFailed: props.onActionHandlerFailed })))))));
12149
12146
  };
12150
12147
  /**
12151
12148
  * @private
12152
12149
  */
12153
- const DownloadIconTrampoline = () => {
12154
- // @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload)
12155
- return React.createElement(reactIcons.ArrowDownload20Regular, { "data-ui-id": 'file-download-card-download-icon' });
12156
- };
12157
12150
  const useLocaleStringsTrampoline = () => {
12158
12151
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12159
12152
  return useLocale$1().strings.messageThread;
12160
12153
  };
12154
+ /**
12155
+ * @private
12156
+ */
12157
+ const getDefaultMenuActions = (locale, chatMessage) => {
12158
+ var _a;
12159
+ // if message is sent by a Teams user, we need to use a different icon ("open")
12160
+ if ((_a = chatMessage === null || chatMessage === void 0 ? void 0 : chatMessage.senderId) === null || _a === void 0 ? void 0 : _a.includes('8:orgid:')) {
12161
+ return [
12162
+ Object.assign(Object.assign({}, defaultAttachmentMenuAction), { name: locale.openAttachment, icon: React.createElement(react.Icon, { iconName: "OpenAttachment" }) })
12163
+ ];
12164
+ }
12165
+ // otherwise, use the default icon ("download")
12166
+ return [
12167
+ Object.assign(Object.assign({}, defaultAttachmentMenuAction), { name: locale.downloadAttachment })
12168
+ ];
12169
+ };
12170
+ /**
12171
+ * @beta
12172
+ *
12173
+ * The default menu action for downloading attachments. This action will open the attachment's URL in a new tab.
12174
+ */
12175
+ const defaultAttachmentMenuAction = {
12176
+ /**
12177
+ *
12178
+ * name is used for aria-label only when there's one button. For multiple buttons, it's used as a label.
12179
+ * by default it's an unlocalized string when this is used as a imported constant,
12180
+ * but you can overwrite it with your own localized string.
12181
+ *
12182
+ * i.e. defaultAttachmentMenuAction.name = localize('Download');
12183
+ *
12184
+ * when no action is provided, the UI library will overwrite this name
12185
+ * with a localized string this string when it's used in the UI.
12186
+ */
12187
+ name: 'Download',
12188
+ // this is the icon shown on the right of the attachment card
12189
+ icon: React.createElement(react.Icon, { iconName: "DownloadAttachment", "data-ui-id": "attachment-download-card-download-icon" }),
12190
+ // this is the action that runs when the icon is clicked
12191
+ onClick: (attachment) => {
12192
+ return new Promise((resolve) => {
12193
+ window.open(attachment.url, '_blank', 'noopener,noreferrer');
12194
+ resolve();
12195
+ });
12196
+ }
12197
+ };
12161
12198
 
12162
12199
  // Copyright (c) Microsoft Corporation.
12163
12200
  // Licensed under the MIT License.
@@ -12252,12 +12289,18 @@ const getFluentUIAttachedValue = (messageAttachedStatus) => {
12252
12289
  * Get the message bubble content for the message.
12253
12290
  */
12254
12291
  function getMessageBubbleContent(message, strings, userId, inlineImageOptions,
12255
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12256
- onRenderFileDownloads,
12257
12292
  /* @conditional-compile-remove(mention) */
12258
12293
  mentionDisplayOptions,
12259
12294
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12260
- fileDownloadHandler) {
12295
+ /**
12296
+ * Optional callback to render message attachments in the message component.
12297
+ */
12298
+ onRenderAttachmentDownloads,
12299
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12300
+ /**
12301
+ * Optional callback to define custom actions for attachments.
12302
+ */
12303
+ actionsForAttachment) {
12261
12304
  /* @conditional-compile-remove(data-loss-prevention) */
12262
12305
  if (message.messageType === 'blocked') {
12263
12306
  return (React.createElement("div", { tabIndex: 0 },
@@ -12267,27 +12310,27 @@ fileDownloadHandler) {
12267
12310
  React.createElement(ChatMessageContent, { message: message, strings: strings,
12268
12311
  /* @conditional-compile-remove(mention) */
12269
12312
  mentionDisplayOptions: mentionDisplayOptions, inlineImageOptions: inlineImageOptions }),
12270
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads
12271
- ? onRenderFileDownloads(userId, message)
12272
- : defaultOnRenderFileDownloads(userId, message, strings,
12273
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ fileDownloadHandler)));
12313
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderAttachmentDownloads
12314
+ ? onRenderAttachmentDownloads(userId, message)
12315
+ : defaultOnRenderAttachmentDownloads(message, strings,
12316
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12317
+ actionsForAttachment)));
12274
12318
  }
12275
12319
  /**
12276
- * Default component for rendering file downloads.
12320
+ * Default component for rendering attachment downloads.
12277
12321
  */
12278
12322
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12279
- const defaultOnRenderFileDownloads = (userId, message, strings,
12280
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12281
- fileDownloadHandler) => {
12323
+ const defaultOnRenderAttachmentDownloads = (message, strings, actionsForAttachment) => {
12282
12324
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12283
- return (React.createElement(_AttachmentDownloadCards, { userId: userId,
12325
+ return (React.createElement(_AttachmentDownloadCards, { message: message,
12284
12326
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12285
- fileMetadata: message.files || [],
12327
+ attachments: message.files || [],
12286
12328
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12287
- downloadHandler: fileDownloadHandler,
12329
+ actionsForAttachment: actionsForAttachment,
12288
12330
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12289
12331
  strings: {
12290
12332
  downloadAttachment: strings.downloadAttachment,
12333
+ openAttachment: strings.openAttachment,
12291
12334
  attachmentCardGroupMessage: strings.attachmentCardGroupMessage
12292
12335
  } }));
12293
12336
  };
@@ -12328,13 +12371,13 @@ const MessageBubble$1 = (props) => {
12328
12371
  const ids = useIdentifiers();
12329
12372
  const theme = useTheme();
12330
12373
  const locale = useLocale$1();
12331
- const { userId, message, onRemoveClick, onResendClick, disableEditing, showDate, messageContainerStyle, strings, onEditClick, remoteParticipantsCount = 0, onRenderAvatar, showMessageStatus, messageStatus,
12374
+ const { userId, message, onRemoveClick, onResendClick, disableEditing, showDate, messageContainerStyle, strings, onEditClick, remoteParticipantsCount = 0, onRenderAvatar, showMessageStatus, messageStatus, inlineImageOptions,
12375
+ /* @conditional-compile-remove(mention) */
12376
+ mentionDisplayOptions, onDisplayDateTimeString,
12332
12377
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12333
- fileDownloadHandler, inlineImageOptions,
12378
+ onRenderAttachmentDownloads,
12334
12379
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12335
- onRenderFileDownloads,
12336
- /* @conditional-compile-remove(mention) */
12337
- mentionDisplayOptions, onDisplayDateTimeString } = props;
12380
+ actionsForAttachment } = props;
12338
12381
  const formattedTimestamp = React.useMemo(() => {
12339
12382
  const defaultTimeStamp = message.createdOn
12340
12383
  ? generateDefaultTimestamp(message.createdOn, showDate, strings)
@@ -12387,18 +12430,18 @@ const MessageBubble$1 = (props) => {
12387
12430
  }, [message, messageStatus, strings.editedTag, strings.failToSendTag, theme]);
12388
12431
  const getContent = React.useCallback(() => {
12389
12432
  return getMessageBubbleContent(message, strings, userId, inlineImageOptions,
12390
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12391
- onRenderFileDownloads,
12392
12433
  /* @conditional-compile-remove(mention) */
12393
12434
  mentionDisplayOptions,
12394
12435
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12395
- fileDownloadHandler);
12436
+ onRenderAttachmentDownloads,
12437
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12438
+ actionsForAttachment);
12396
12439
  }, [
12397
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ fileDownloadHandler,
12440
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ actionsForAttachment,
12398
12441
  inlineImageOptions,
12399
12442
  /* @conditional-compile-remove(mention) */ mentionDisplayOptions,
12400
12443
  message,
12401
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads,
12444
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderAttachmentDownloads,
12402
12445
  strings,
12403
12446
  userId
12404
12447
  ]);
@@ -12536,17 +12579,18 @@ const FluentChatMyMessageComponent = (props) => {
12536
12579
  /* @conditional-compile-remove(date-time-customization) */
12537
12580
  onDisplayDateTimeString, inlineImageOptions,
12538
12581
  /* @conditional-compile-remove(mention) */
12539
- mentionOptions,
12582
+ mentionOptions, userId, defaultStatusRenderer, statusToRender,
12540
12583
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12541
- fileDownloadHandler, userId,
12584
+ actionsForAttachment,
12542
12585
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12543
- onRenderFileDownloads, defaultStatusRenderer, statusToRender } = props;
12586
+ onRenderAttachmentDownloads } = props;
12544
12587
  const chatMessageRenderStyles = useChatMessageRenderStyles();
12545
- const onRenderFileDownloadsMemo = React.useMemo(() => {
12588
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12589
+ const onRenderAttachmentDownloadsMemo = React.useMemo(() => {
12546
12590
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12547
- return onRenderFileDownloads;
12591
+ return onRenderAttachmentDownloads;
12548
12592
  }, [
12549
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads
12593
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderAttachmentDownloads
12550
12594
  ]);
12551
12595
  // To rerender the defaultChatMessageRenderer if app running across days(every new day chat time stamp
12552
12596
  // needs to be regenerated), the dependency on "new Date().toDateString()"" is added.
@@ -12555,7 +12599,7 @@ const FluentChatMyMessageComponent = (props) => {
12555
12599
  /* @conditional-compile-remove(data-loss-prevention) */ messageProps.message.messageType === 'blocked') {
12556
12600
  return (React.createElement(ChatMyMessageComponent, Object.assign({}, messageProps, {
12557
12601
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12558
- onRenderFileDownloads: onRenderFileDownloadsMemo,
12602
+ onRenderAttachmentDownloads: onRenderAttachmentDownloadsMemo,
12559
12603
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12560
12604
  strings: messageProps.strings, message: messageProps.message, userId: userId, remoteParticipantsCount: participantCount ? participantCount - 1 : 0, shouldOverlapAvatarAndMessage: shouldOverlapAvatarAndMessage, onRenderAvatar: onRenderAvatar, showMessageStatus: showMessageStatus, messageStatus: messageProps.message.status, onActionButtonClick: onActionButtonClick,
12561
12605
  /* @conditional-compile-remove(date-time-customization) */
@@ -12563,13 +12607,12 @@ const FluentChatMyMessageComponent = (props) => {
12563
12607
  /* @conditional-compile-remove(mention) */
12564
12608
  mentionOptions: mentionOptions,
12565
12609
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12566
- fileDownloadHandler: fileDownloadHandler })));
12610
+ actionsForAttachment: actionsForAttachment })));
12567
12611
  }
12568
12612
  return React.createElement(React.Fragment, null);
12569
12613
  }, [
12570
12614
  onActionButtonClick,
12571
12615
  onRenderAvatar,
12572
- onRenderFileDownloadsMemo,
12573
12616
  participantCount,
12574
12617
  shouldOverlapAvatarAndMessage,
12575
12618
  showMessageStatus,
@@ -12580,7 +12623,9 @@ const FluentChatMyMessageComponent = (props) => {
12580
12623
  /* @conditional-compile-remove(mention) */
12581
12624
  mentionOptions,
12582
12625
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12583
- fileDownloadHandler,
12626
+ onRenderAttachmentDownloadsMemo,
12627
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12628
+ actionsForAttachment,
12584
12629
  // eslint-disable-next-line react-hooks/exhaustive-deps
12585
12630
  new Date().toDateString()
12586
12631
  ]);
@@ -12646,9 +12691,9 @@ const MessageBubble = (props) => {
12646
12691
  const locale = useLocale$1();
12647
12692
  const { userId, message, showDate, messageContainerStyle, strings,
12648
12693
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12649
- fileDownloadHandler, inlineImageOptions, shouldOverlapAvatarAndMessage,
12694
+ onRenderAttachmentDownloads, inlineImageOptions, shouldOverlapAvatarAndMessage,
12650
12695
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12651
- onRenderFileDownloads,
12696
+ actionsForAttachment,
12652
12697
  /* @conditional-compile-remove(mention) */
12653
12698
  mentionDisplayOptions, onDisplayDateTimeString } = props;
12654
12699
  const formattedTimestamp = React.useMemo(() => {
@@ -12665,18 +12710,18 @@ const MessageBubble = (props) => {
12665
12710
  }, [strings.editedTag, theme, message]);
12666
12711
  const getContent = React.useCallback(() => {
12667
12712
  return getMessageBubbleContent(message, strings, userId, inlineImageOptions,
12668
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12669
- onRenderFileDownloads,
12670
12713
  /* @conditional-compile-remove(mention) */
12671
12714
  mentionDisplayOptions,
12672
12715
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12673
- fileDownloadHandler);
12716
+ onRenderAttachmentDownloads,
12717
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12718
+ actionsForAttachment);
12674
12719
  }, [
12675
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ fileDownloadHandler,
12720
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ actionsForAttachment,
12676
12721
  inlineImageOptions,
12677
12722
  /* @conditional-compile-remove(mention) */ mentionDisplayOptions,
12678
12723
  message,
12679
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads,
12724
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderAttachmentDownloads,
12680
12725
  strings,
12681
12726
  userId
12682
12727
  ]);
@@ -12727,18 +12772,16 @@ const FluentChatMessageComponent = (props) => {
12727
12772
  /* @conditional-compile-remove(date-time-customization) */
12728
12773
  onDisplayDateTimeString, inlineImageOptions,
12729
12774
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12730
- fileDownloadHandler, userId,
12775
+ actionsForAttachment, userId,
12731
12776
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12732
- onRenderFileDownloads,
12777
+ onRenderAttachmentDownloads,
12733
12778
  /* @conditional-compile-remove(mention) */
12734
12779
  mentionOptions } = props;
12735
12780
  const chatMessageRenderStyles = useChatMessageRenderStyles();
12736
- const onRenderFileDownloadsMemo = React.useMemo(() => {
12737
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12738
- return onRenderFileDownloads;
12739
- }, [
12740
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads
12741
- ]);
12781
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12782
+ const onRenderAttachmentDownloadsMemo = React.useMemo(() => {
12783
+ return onRenderAttachmentDownloads;
12784
+ }, [onRenderAttachmentDownloads]);
12742
12785
  // To rerender the defaultChatMessageRenderer if app running across days(every new day chat time stamp
12743
12786
  // needs to be regenerated), the dependency on "new Date().toDateString()"" is added.
12744
12787
  const defaultChatMessageRenderer = React.useCallback((messageProps) => {
@@ -12746,30 +12789,27 @@ const FluentChatMessageComponent = (props) => {
12746
12789
  /* @conditional-compile-remove(data-loss-prevention) */ messageProps.message.messageType === 'blocked') {
12747
12790
  return (React.createElement(ChatMessageComponentAsMessageBubble, Object.assign({}, messageProps, {
12748
12791
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12749
- onRenderFileDownloads: onRenderFileDownloadsMemo,
12750
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12751
- strings: messageProps.strings, message: messageProps.message, userId: userId, shouldOverlapAvatarAndMessage: shouldOverlapAvatarAndMessage,
12792
+ onRenderAttachmentDownloads: onRenderAttachmentDownloadsMemo, strings: messageProps.strings, message: messageProps.message, userId: userId, shouldOverlapAvatarAndMessage: shouldOverlapAvatarAndMessage,
12752
12793
  /* @conditional-compile-remove(date-time-customization) */
12753
12794
  onDisplayDateTimeString: onDisplayDateTimeString, inlineImageOptions: inlineImageOptions,
12754
12795
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12755
- fileDownloadHandler: fileDownloadHandler,
12796
+ actionsForAttachment: actionsForAttachment,
12756
12797
  /* @conditional-compile-remove(mention) */
12757
12798
  mentionDisplayOptions: mentionOptions === null || mentionOptions === void 0 ? void 0 : mentionOptions.displayOptions })));
12758
12799
  }
12759
12800
  return React.createElement(React.Fragment, null);
12760
12801
  }, [
12761
- onRenderFileDownloadsMemo,
12762
- shouldOverlapAvatarAndMessage,
12802
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12803
+ onRenderAttachmentDownloadsMemo,
12763
12804
  userId,
12805
+ shouldOverlapAvatarAndMessage,
12764
12806
  /* @conditional-compile-remove(date-time-customization) */
12765
12807
  onDisplayDateTimeString,
12766
12808
  inlineImageOptions,
12767
12809
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12768
- fileDownloadHandler,
12810
+ actionsForAttachment,
12769
12811
  /* @conditional-compile-remove(mention) */
12770
- mentionOptions,
12771
- // eslint-disable-next-line react-hooks/exhaustive-deps
12772
- new Date().toDateString()
12812
+ mentionOptions === null || mentionOptions === void 0 ? void 0 : mentionOptions.displayOptions
12773
12813
  ]);
12774
12814
  const messageRenderer = React.useCallback((messageProps) => {
12775
12815
  return onRenderMessage === undefined
@@ -13039,7 +13079,9 @@ const MessageThreadWrapper = (props) => {
13039
13079
  /* @conditional-compile-remove(mention) */
13040
13080
  mentionOptions, inlineImageOptions,
13041
13081
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
13042
- onRenderFileDownloads } = props;
13082
+ attachmentOptions,
13083
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
13084
+ onRenderAttachmentDownloads } = props;
13043
13085
  // We need this state to wait for one tick and scroll to bottom after messages have been initialized.
13044
13086
  // Otherwise chatScrollDivRef.current.clientHeight is wrong if we scroll to bottom before messages are initialized.
13045
13087
  const [chatMessagesInitialized, setChatMessagesInitialized] = React.useState(false);
@@ -13373,15 +13415,16 @@ const MessageThreadWrapper = (props) => {
13373
13415
  className: reactComponents.mergeClasses(classes.root, react.mergeStyles(styles === null || styles === void 0 ? void 0 : styles.chatContainer)), ref: chatScrollDivRef, style: Object.assign({}, createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.chatContainer)) },
13374
13416
  latestDeletedMessageId && (React.createElement(Announcer$1, { key: latestDeletedMessageId, announcementString: deletedMessageAriaLabel, ariaLive: 'polite' })),
13375
13417
  messagesToDisplay.map((message) => {
13418
+ var _a;
13376
13419
  return (React.createElement(MemoChatMessageComponentWrapper, Object.assign({}, message, { userId: userId, key: message.key, styles: styles, shouldOverlapAvatarAndMessage: isNarrow, strings: strings, onRenderAvatar: onRenderAvatar, onRenderMessage: onRenderMessage, onRenderMessageStatus: onRenderMessageStatus, defaultStatusRenderer: defaultStatusRenderer, onActionButtonClick: onActionButtonClickMemo, readCount: readCountForHoveredIndicator, participantCount: participantCount,
13377
13420
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
13378
- fileDownloadHandler: props.fileDownloadHandler, inlineImageOptions: inlineImageOptions,
13421
+ actionsForAttachment: (_a = attachmentOptions === null || attachmentOptions === void 0 ? void 0 : attachmentOptions.downloadOptions) === null || _a === void 0 ? void 0 : _a.actionsForAttachment, inlineImageOptions: inlineImageOptions,
13379
13422
  /* @conditional-compile-remove(date-time-customization) */
13380
13423
  onDisplayDateTimeString: onDisplayDateTimeString,
13381
13424
  /* @conditional-compile-remove(mention) */
13382
13425
  mentionOptions: mentionOptions,
13383
13426
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
13384
- onRenderFileDownloads: onRenderFileDownloads })));
13427
+ onRenderAttachmentDownloads: onRenderAttachmentDownloads })));
13385
13428
  }))))));
13386
13429
  };
13387
13430
  const MemoChatMessageComponentWrapper = React.memo((obj) => {
@@ -23261,8 +23304,7 @@ const extractTeamsAttachmentsMetadata = (attachments) => {
23261
23304
  id: attachment.id,
23262
23305
  name: (_a = attachment.name) !== null && _a !== void 0 ? _a : '',
23263
23306
  extension: contentType !== null && contentType !== void 0 ? contentType : '',
23264
- url: extractAttachmentUrl(attachment),
23265
- payload: { teamsFileAttachment: 'true' }
23307
+ url: extractAttachmentUrl(attachment)
23266
23308
  });
23267
23309
  }
23268
23310
  });
@@ -25259,7 +25301,7 @@ const FileUploadButton = (props) => {
25259
25301
  } },
25260
25302
  React.createElement(react.IconButton, { className: iconButtonClassName, ariaLabel: uploadFileButtonStringTrampoline() },
25261
25303
  React.createElement(SendBoxAttachFileIconTrampoline, null))),
25262
- React.createElement("input", { ref: inputRef, hidden: true, multiple: multiple, accept: accept, type: "file", onClick: (e) => {
25304
+ React.createElement("input", { ref: inputRef, hidden: true, multiple: multiple !== null && multiple !== void 0 ? multiple : true, accept: accept !== null && accept !== void 0 ? accept : '*', type: "file", onClick: (e) => {
25263
25305
  // To ensure that `onChange` is fired even if the same file is picked again.
25264
25306
  e.currentTarget.value = '';
25265
25307
  }, onChange: (e) => {
@@ -26646,14 +26688,14 @@ const ChatScreenPeoplePane = (props) => {
26646
26688
  /**
26647
26689
  * @private
26648
26690
  */
26649
- const FileDownloadErrorBar = (props) => {
26650
- const { fileDownloadErrorMessage, onDismissDownloadErrorMessage } = props;
26691
+ const AttachmentDownloadErrorBar = (props) => {
26692
+ const { attachmentDownloadErrorMessage, onDismissDownloadErrorMessage } = props;
26651
26693
  const messageBarIconProps = { iconName: 'ProtectedDocument' };
26652
- if (fileDownloadErrorMessage !== '') {
26694
+ if (attachmentDownloadErrorMessage !== '') {
26653
26695
  return (React.createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center" },
26654
26696
  React.createElement(react.MessageBar, { messageBarType: react.MessageBarType.warning, onDismiss: () => {
26655
26697
  onDismissDownloadErrorMessage();
26656
- }, messageBarIconProps: messageBarIconProps }, fileDownloadErrorMessage)));
26698
+ }, messageBarIconProps: messageBarIconProps }, attachmentDownloadErrorMessage)));
26657
26699
  }
26658
26700
  else {
26659
26701
  return React.createElement(React.Fragment, null);
@@ -26696,7 +26738,7 @@ const useSelector$2 = (selector, selectorProps) => {
26696
26738
  // Copyright (c) Microsoft Corporation.
26697
26739
  // Licensed under the MIT License.
26698
26740
  /* @conditional-compile-remove(rich-text-editor) */
26699
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-D3ER8Kz9.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
26741
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-CH6WvEGZ.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
26700
26742
  /**
26701
26743
  * @private
26702
26744
  */
@@ -26815,9 +26857,11 @@ const ChatScreen = (props) => {
26815
26857
  fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.uploadHandler(userId, fileUploads);
26816
26858
  }, [adapter, fileSharing, userId]);
26817
26859
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26818
- const onRenderFileDownloads = React.useCallback((userId, message) => (React.createElement(_AttachmentDownloadCards, { userId: userId, fileMetadata: message.files || [], downloadHandler: fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.downloadHandler, onDownloadErrorMessage: (errorMessage) => {
26860
+ const onRenderAttachmentDownloads = React.useCallback((userId, message) => (React.createElement(_AttachmentDownloadCards, { attachments: message.files, message: message,
26861
+ // temp walkaround until upload is refactored
26862
+ actionsForAttachment: fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.actionsForAttachment, onActionHandlerFailed: (errorMessage) => {
26819
26863
  setDownloadErrorMessage(errorMessage);
26820
- } })), [fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.downloadHandler]);
26864
+ } })), [fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.actionsForAttachment]);
26821
26865
  const onInlineImageClicked = React.useCallback((attachmentId, messageId) => {
26822
26866
  var _a, _b;
26823
26867
  const message = adapter.getState().thread.chatMessages[messageId];
@@ -26906,10 +26950,11 @@ const ChatScreen = (props) => {
26906
26950
  }
26907
26951
  }, [overlayImageItem === null || overlayImageItem === void 0 ? void 0 : overlayImageItem.attachmentId]);
26908
26952
  const AttachFileButton = React.useCallback(() => {
26953
+ var _a, _b;
26909
26954
  if (!(fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.uploadHandler)) {
26910
26955
  return null;
26911
26956
  }
26912
- return (React.createElement(FileUploadButtonWrapper, { accept: fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.accept, multiple: fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.multiple, onChange: fileUploadButtonOnChange }));
26957
+ return (React.createElement(FileUploadButtonWrapper, { accept: (_a = fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.accept) !== null && _a !== void 0 ? _a : '*', multiple: (_b = fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.multiple) !== null && _b !== void 0 ? _b : true, onChange: fileUploadButtonOnChange }));
26913
26958
  }, [fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.accept, fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.multiple, fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.uploadHandler, fileUploadButtonOnChange]);
26914
26959
  return (React.createElement(react.Stack, { className: chatContainer, grow: true },
26915
26960
  (options === null || options === void 0 ? void 0 : options.topic) !== false && React.createElement(ChatHeader, Object.assign({}, headerProps)),
@@ -26917,12 +26962,12 @@ const ChatScreen = (props) => {
26917
26962
  React.createElement(react.Stack, { className: chatWrapper, grow: true },
26918
26963
  (options === null || options === void 0 ? void 0 : options.errorBar) !== false && React.createElement(ErrorBar, Object.assign({}, errorBarProps)),
26919
26964
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26920
- React.createElement(FileDownloadErrorBar, { onDismissDownloadErrorMessage: React.useCallback(() => {
26965
+ React.createElement(AttachmentDownloadErrorBar, { onDismissDownloadErrorMessage: React.useCallback(() => {
26921
26966
  setDownloadErrorMessage('');
26922
- }, []), fileDownloadErrorMessage: downloadErrorMessage || '' }),
26967
+ }, []), attachmentDownloadErrorMessage: downloadErrorMessage || '' }),
26923
26968
  React.createElement(MessageThread, Object.assign({}, messageThreadProps, { onRenderAvatar: onRenderAvatarCallback, onRenderMessage: onRenderMessage,
26924
26969
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26925
- onRenderFileDownloads: onRenderFileDownloads, inlineImageOptions: inlineImageOptions, numberOfChatMessagesToReload: defaultNumberOfChatMessagesToReload, styles: messageThreadStyles })),
26970
+ onRenderAttachmentDownloads: onRenderAttachmentDownloads, inlineImageOptions: inlineImageOptions, numberOfChatMessagesToReload: defaultNumberOfChatMessagesToReload, styles: messageThreadStyles })),
26926
26971
  React.createElement(react.Stack, { className: react.mergeStyles(sendboxContainerStyles) },
26927
26972
  React.createElement("div", { className: react.mergeStyles(typingIndicatorContainerStyles) }, onRenderTypingIndicator ? (onRenderTypingIndicator(typingIndicatorProps.typingUsers)) : (React.createElement(TypingIndicator, Object.assign({}, typingIndicatorProps, { styles: typingIndicatorStyles })))),
26928
26973
  React.createElement(react.Stack, { horizontal: formFactor === 'mobile' },
@@ -30960,7 +31005,6 @@ var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments,
30960
31005
  * @private
30961
31006
  */
30962
31007
  const PeoplePaneContent = (props) => {
30963
- var _a, _b;
30964
31008
  const { inviteLink, onFetchParticipantMenuItems, setDrawerMenuItems,
30965
31009
  /* @conditional-compile-remove(spotlight) */ participantListHeadingMoreButtonProps } = props;
30966
31010
  const adapter = useAdapter();
@@ -30981,7 +31025,7 @@ const PeoplePaneContent = (props) => {
30981
31025
  /* @conditional-compile-remove(PSTN-calls) */
30982
31026
  const alternateCallerId = adapter.getState().alternateCallerId;
30983
31027
  const participantListDefaultProps = usePropsFor$1(ParticipantList$k);
30984
- const removeButtonAllowed = (_b = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.capabilities.removeParticipant.isPresent;
31028
+ const removeButtonAllowed = canRemoveParticipants(adapter);
30985
31029
  const setDrawerMenuItemsForParticipant = React.useMemo(() => {
30986
31030
  return (participant) => {
30987
31031
  if (participant) {
@@ -31063,6 +31107,16 @@ const createDefaultContextualMenuItems = (participant, strings, onRemoveParticip
31063
31107
  }
31064
31108
  return menuItems;
31065
31109
  };
31110
+ const canRemoveParticipants = (adapter) => {
31111
+ var _a;
31112
+ // TODO: We should be using the removeParticipant capability here but there is an SDK bug for Rooms where a
31113
+ // Presenter's removeParticipant capability is {isPresent: false, reason: 'CapabilityNotApplicableForTheCallType'}.
31114
+ // But a Presenter in Rooms should be able to remove participants according to the following documentation
31115
+ // https://learn.microsoft.com/en-us/azure/communication-services/concepts/rooms/room-concept#predefined-participant-roles-and-permissions
31116
+ const role = (_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.role;
31117
+ const canRemove = role === 'Presenter' || role === 'Unknown' || role === undefined;
31118
+ return canRemove;
31119
+ };
31066
31120
 
31067
31121
  // Copyright (c) Microsoft Corporation.
31068
31122
  // Licensed under the MIT License.
@@ -32914,6 +32968,18 @@ const optionIconStyles = react.mergeStyles({
32914
32968
  marginRight: '8px',
32915
32969
  verticalAlign: 'text-top'
32916
32970
  });
32971
+ /**
32972
+ * @private
32973
+ */
32974
+ const deviceSelectionContainerStyles = {
32975
+ root: {
32976
+ /**
32977
+ * this is to move the device selection container above the larger border
32978
+ * container that is occluding messages
32979
+ */
32980
+ zIndex: 1
32981
+ }
32982
+ };
32917
32983
 
32918
32984
  // Copyright (c) Microsoft Corporation.
32919
32985
  // Licensed under the MIT License.
@@ -33014,7 +33080,7 @@ const configurationSectionStyle = {
33014
33080
  */
33015
33081
  const selectionContainerStyle = (theme, noSpeakerDropdownShown) => react.mergeStyles({
33016
33082
  width: '100%',
33017
- height: noSpeakerDropdownShown ? 'auto' : `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,
33083
+ minHeight: noSpeakerDropdownShown ? 'auto' : `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,
33018
33084
  padding: '1rem',
33019
33085
  borderRadius: theme.effects.roundedCorner6,
33020
33086
  border: `0.0625rem solid ${theme.palette.neutralLight}`,
@@ -33144,7 +33210,7 @@ const cameraAndVideoEffectsContainerStyleDesktop = {
33144
33210
  /**
33145
33211
  * @private
33146
33212
  */
33147
- const effectsButtonStyles = (theme) => {
33213
+ const effectsButtonStyles = (theme, disabled) => {
33148
33214
  return {
33149
33215
  root: {
33150
33216
  background: 'transparent',
@@ -33152,26 +33218,41 @@ const effectsButtonStyles = (theme) => {
33152
33218
  color: theme.palette.themePrimary,
33153
33219
  // Top and bottom padding needs to be 5px to match the label padding
33154
33220
  padding: '5px 0.25rem',
33155
- ':hover, :focus': {
33156
- color: theme.palette.themePrimary
33157
- },
33221
+ ':hover, :focus': disabled
33222
+ ? {}
33223
+ : {
33224
+ color: theme.palette.themePrimary
33225
+ },
33158
33226
  svg: {
33159
33227
  height: '1rem',
33160
33228
  width: '1rem'
33161
33229
  }
33162
33230
  },
33163
- rootChecked: {
33164
- color: theme.palette.themePrimary
33165
- },
33166
- rootHovered: {
33167
- color: theme.palette.themePrimary
33168
- },
33169
- rootPressed: {
33170
- color: theme.palette.themePrimary
33171
- },
33172
- rootFocused: {
33173
- color: theme.palette.themePrimary
33174
- }
33231
+ labelHovered: disabled
33232
+ ? {}
33233
+ : {
33234
+ color: theme.palette.themePrimary
33235
+ },
33236
+ rootChecked: disabled
33237
+ ? {}
33238
+ : {
33239
+ color: theme.palette.themePrimary
33240
+ },
33241
+ rootHovered: disabled
33242
+ ? {}
33243
+ : {
33244
+ color: theme.palette.themePrimary
33245
+ },
33246
+ rootPressed: disabled
33247
+ ? {}
33248
+ : {
33249
+ color: theme.palette.themePrimary
33250
+ },
33251
+ rootFocused: disabled
33252
+ ? {}
33253
+ : {
33254
+ color: theme.palette.themePrimary
33255
+ }
33175
33256
  };
33176
33257
  };
33177
33258
  /** @private */
@@ -33341,11 +33422,11 @@ const LocalDeviceSettings = (props) => {
33341
33422
  }
33342
33423
  return speakerDropdown;
33343
33424
  };
33344
- return (React.createElement(react.Stack, { "data-ui-id": "call-composite-device-settings", tokens: mainStackTokens },
33425
+ return (React.createElement(react.Stack, { "data-ui-id": "call-composite-device-settings", tokens: mainStackTokens, styles: deviceSelectionContainerStyles },
33345
33426
  roleCanUseCamera && (React.createElement(react.Stack, null,
33346
33427
  React.createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", styles: cameraAndVideoEffectsContainerStyleDesktop },
33347
33428
  React.createElement(react.Label, { id: 'call-composite-local-camera-settings-label', className: react.mergeStyles(dropDownStyles(theme).label), disabled: !cameraPermissionGranted }, cameraLabel),
33348
- onResolveVideoEffectDependency && (React.createElement(react.DefaultButton, { iconProps: { iconName: 'ConfigurationScreenVideoEffectsButton' }, styles: effectsButtonStyles(theme), onClick: props.onClickVideoEffects, "data-ui-id": 'call-config-video-effects-button' }, locale.strings.call.configurationPageVideoEffectsButtonLabel))),
33429
+ onResolveVideoEffectDependency && (React.createElement(react.DefaultButton, { iconProps: { iconName: 'ConfigurationScreenVideoEffectsButton' }, styles: effectsButtonStyles(theme, !cameraPermissionGranted), onClick: props.onClickVideoEffects, disabled: !cameraPermissionGranted, "data-ui-id": 'call-config-video-effects-button' }, locale.strings.call.configurationPageVideoEffectsButtonLabel))),
33349
33430
  React.createElement(ConfigurationPageCameraDropdown, { cameraGrantedDropdown: cameraGrantedDropdown, cameraPermissionGranted: cameraPermissionGranted !== null && cameraPermissionGranted !== void 0 ? cameraPermissionGranted : false,
33350
33431
  /* @conditional-compile-remove(call-readiness) */
33351
33432
  dropdownProps: dropdownProps,
@@ -33484,18 +33565,21 @@ const localPreviewTileStyle = {
33484
33565
  /**
33485
33566
  * @private
33486
33567
  */
33487
- const localPreviewButtonStyle = {
33488
- root: {
33489
- '@media (forced-colors: active)': {
33490
- ':focus': {
33491
- border: '1px solid !important' // we need bang important to override fluents colours
33492
- },
33493
- ':focus::after': {
33494
- border: 'unset !important', // we need bang important to override fluents colours
33495
- outline: 'unset !important'
33568
+ const localPreviewButtonStyle = (isMobile) => {
33569
+ return {
33570
+ root: {
33571
+ minWidth: !isMobile ? _pxToRem(75) : 'unset', // we only want to enforce this for desktop views
33572
+ '@media (forced-colors: active)': {
33573
+ ':focus': {
33574
+ border: '1px solid !important' // we need bang important to override fluents colours
33575
+ },
33576
+ ':focus::after': {
33577
+ border: 'unset !important', // we need bang important to override fluents colours
33578
+ outline: 'unset !important'
33579
+ }
33496
33580
  }
33497
33581
  }
33498
- }
33582
+ };
33499
33583
  };
33500
33584
 
33501
33585
  // Copyright (c) Microsoft Corporation.
@@ -33556,7 +33640,7 @@ const LocalPreview = (props) => {
33556
33640
  React.createElement(ControlBar, { layout: "floatingBottom" },
33557
33641
  React.createElement(MicrophoneButton, { "data-ui-id": "call-composite-local-device-settings-microphone-button", checked: isLocalMicrophoneEnabled, onToggleMicrophone: onToggleMic, disabled: !microphonePermissionGranted || !hasMicrophones, showLabel: true,
33558
33642
  // disable tooltip as it obscures list of devices on mobile
33559
- strings: props.mobileView ? { tooltipOnContent: '', tooltipOffContent: '', tooltipDisabledContent: '' } : {}, styles: localPreviewButtonStyle }),
33643
+ strings: props.mobileView ? { tooltipOnContent: '', tooltipOffContent: '', tooltipDisabledContent: '' } : {}, styles: localPreviewButtonStyle(props.mobileView) }),
33560
33644
  React.createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-camera-button" }, cameraButtonProps, { showLabel: true, disabled: !cameraPermissionGranted || !hasCameras,
33561
33645
  // disable tooltip as it obscures list of devices on mobile
33562
33646
  strings: props.mobileView
@@ -33566,7 +33650,7 @@ const LocalPreview = (props) => {
33566
33650
  tooltipDisabledContent: '',
33567
33651
  tooltipVideoLoadingContent: ''
33568
33652
  }
33569
- : {}, styles: localPreviewButtonStyle })),
33653
+ : {}, styles: localPreviewButtonStyle(props.mobileView) })),
33570
33654
  props.showDevicesButton && (React.createElement(DevicesButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-options-button" }, devicesButtonProps, {
33571
33655
  // disable button whilst all other buttons are disabled
33572
33656
  disabled: (!microphonePermissionGranted && !cameraPermissionGranted && hasNoSpeakers) || hasNoDevices, showLabel: true,
@@ -39251,4 +39335,4 @@ exports.useTeamsCall = useTeamsCall;
39251
39335
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
39252
39336
  exports.useTeamsCallAgent = useTeamsCallAgent;
39253
39337
  exports.useTheme = useTheme;
39254
- //# sourceMappingURL=index-BI61bnOi.js.map
39338
+ //# sourceMappingURL=index-qxnuqL7s.js.map