@azure/communication-react 1.11.0-alpha-202312030013 → 1.11.0-alpha-202312060012
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.
- package/dist/communication-react.d.ts +2 -0
- package/dist/dist-cjs/communication-react/index.js +184 -38
- package/dist/dist-cjs/communication-react/index.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/chat-stateful-client/src/ChatContext.js +1 -1
- package/dist/dist-esm/chat-stateful-client/src/ChatContext.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +2 -0
- package/dist/dist-esm/react-components/src/components/MessageThread.js +49 -4
- package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js +1 -2
- package/dist/dist-esm/react-components/src/components/styles/ParticipantItem.styles.js.map +1 -1
- package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +2 -1
- package/dist/dist-esm/react-components/src/theming/themes.js +4 -2
- package/dist/dist-esm/react-components/src/theming/themes.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SvgWithWordWrapping.d.ts +12 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SvgWithWordWrapping.js +85 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SvgWithWordWrapping.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +5 -3
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +6 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +33 -14
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js.map +1 -1
- package/package.json +4 -4
@@ -7856,6 +7856,8 @@ export declare interface MessageThreadStrings {
|
|
7856
7856
|
editBoxSubmitButton: string;
|
7857
7857
|
/** String for action menu indicating there are more options */
|
7858
7858
|
actionMenuMoreOptions?: string;
|
7859
|
+
/** Aria label to announce when a message is deleted */
|
7860
|
+
messageDeletedAnnouncementAriaLabel: string;
|
7859
7861
|
/** String for download file button in file card */
|
7860
7862
|
downloadFile: string;
|
7861
7863
|
/** String for policy violation message removal */
|
@@ -8,7 +8,7 @@ var communicationCalling = require('@azure/communication-calling');
|
|
8
8
|
var memoizeOne = require('memoize-one');
|
9
9
|
var logger = require('@azure/logger');
|
10
10
|
var EventEmitter = require('events');
|
11
|
-
var
|
11
|
+
var immer = require('immer');
|
12
12
|
var React = require('react');
|
13
13
|
var react = require('@fluentui/react');
|
14
14
|
var reactIcons = require('@fluentui/react-icons');
|
@@ -53,7 +53,6 @@ function _interopNamespace(e) {
|
|
53
53
|
var reselect__namespace = /*#__PURE__*/_interopNamespace(reselect);
|
54
54
|
var memoizeOne__default = /*#__PURE__*/_interopDefaultLegacy(memoizeOne);
|
55
55
|
var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
|
56
|
-
var produce__default = /*#__PURE__*/_interopDefaultLegacy(produce);
|
57
56
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
58
57
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
59
58
|
var Linkify__default = /*#__PURE__*/_interopDefaultLegacy(Linkify);
|
@@ -177,7 +176,7 @@ const _isValidIdentifier = (identifier) => {
|
|
177
176
|
// Copyright (c) Microsoft Corporation.
|
178
177
|
// Licensed under the MIT License.
|
179
178
|
// GENERATED FILE. DO NOT EDIT MANUALLY.
|
180
|
-
var telemetryVersion = '1.11.0-alpha-
|
179
|
+
var telemetryVersion = '1.11.0-alpha-202312060012';
|
181
180
|
|
182
181
|
// Copyright (c) Microsoft Corporation.
|
183
182
|
/**
|
@@ -1778,9 +1777,9 @@ var __awaiter$H = (window && window.__awaiter) || function (thisArg, _arguments,
|
|
1778
1777
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
1779
1778
|
});
|
1780
1779
|
};
|
1781
|
-
|
1780
|
+
immer.enableMapSet();
|
1782
1781
|
// Needed to generate state diff for verbose logging.
|
1783
|
-
|
1782
|
+
immer.enablePatches();
|
1784
1783
|
// TODO: How can we make this configurable?
|
1785
1784
|
/**
|
1786
1785
|
* @private
|
@@ -1835,7 +1834,7 @@ class CallContext$2 {
|
|
1835
1834
|
}
|
1836
1835
|
modifyState(modifier) {
|
1837
1836
|
const priorState = this._state;
|
1838
|
-
this._state =
|
1837
|
+
this._state = immer.produce(this._state, modifier, (patches) => {
|
1839
1838
|
if (logger.getLogLevel() === 'verbose') {
|
1840
1839
|
// Log to `info` because AzureLogger.verbose() doesn't show up in console.
|
1841
1840
|
this._logger.info(`State change: ${_safeJSONStringify(patches)}`);
|
@@ -5066,7 +5065,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
|
|
5066
5065
|
wordBreak: 'break-word'
|
5067
5066
|
});
|
5068
5067
|
|
5069
|
-
var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold"};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",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageGallery$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 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",downloadFile:"Download file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",fileCardGroupMessage:"The message has {fileCount} attachment"};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."};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}"};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 AttendeeRole$k="Attendee";var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,mentionPopover:mentionPopover$k,imageGallery:imageGallery$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,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,AttendeeRole:AttendeeRole$k};
|
5068
|
+
var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold"};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",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageGallery$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 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",downloadFile:"Download file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",fileCardGroupMessage:"The message has {fileCount} 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."};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}"};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 AttendeeRole$k="Attendee";var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,mentionPopover:mentionPopover$k,imageGallery:imageGallery$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,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,AttendeeRole:AttendeeRole$k};
|
5070
5069
|
|
5071
5070
|
// Copyright (c) Microsoft Corporation.
|
5072
5071
|
/**
|
@@ -5867,7 +5866,8 @@ const lightTheme = {
|
|
5867
5866
|
neutralPrimary: '#323130',
|
5868
5867
|
neutralDark: '#201f1e',
|
5869
5868
|
black: '#000000',
|
5870
|
-
white: '#ffffff'
|
5869
|
+
white: '#ffffff',
|
5870
|
+
whiteTranslucent40: 'rgba(255, 255, 255, 0.4)'
|
5871
5871
|
},
|
5872
5872
|
callingPalette: {
|
5873
5873
|
callRed: '#a42e43',
|
@@ -5917,7 +5917,8 @@ const darkTheme = {
|
|
5917
5917
|
neutralPrimary: '#ffffff',
|
5918
5918
|
neutralDark: '#f4f4f4',
|
5919
5919
|
black: '#f8f8f8',
|
5920
|
-
white: '#252423'
|
5920
|
+
white: '#252423',
|
5921
|
+
whiteTranslucent40: 'rgba(0, 0, 0, 0.4)'
|
5921
5922
|
},
|
5922
5923
|
callingPalette: {
|
5923
5924
|
callRed: '#c4314b',
|
@@ -11128,6 +11129,28 @@ const MessageThreadWrapper = (props) => {
|
|
11128
11129
|
});
|
11129
11130
|
}
|
11130
11131
|
}), [onFetchAttachments]);
|
11132
|
+
const localeStrings = useLocale$1().strings.messageThread;
|
11133
|
+
const strings = React.useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);
|
11134
|
+
// id for the latest deleted message
|
11135
|
+
const [latestDeletedMessageId, setLatestDeletedMessageId] = React.useState(undefined);
|
11136
|
+
// this value is used to check if a message is deleted for the previous value of messages array
|
11137
|
+
const previousMessagesRef = React.useRef([]);
|
11138
|
+
// an aria label for Narrator to notify when a message is deleted
|
11139
|
+
const [deletedMessageAriaLabel, setDeletedMessageAriaLabel] = React.useState(undefined);
|
11140
|
+
const onDeleteMessageCallback = React.useCallback((messageId) => __awaiter$v(void 0, void 0, void 0, function* () {
|
11141
|
+
if (!onDeleteMessage) {
|
11142
|
+
return;
|
11143
|
+
}
|
11144
|
+
try {
|
11145
|
+
yield onDeleteMessage(messageId);
|
11146
|
+
// reset deleted message label in case if there was a value already (messages are deleted 1 after another)
|
11147
|
+
setDeletedMessageAriaLabel(undefined);
|
11148
|
+
setLatestDeletedMessageId(messageId);
|
11149
|
+
}
|
11150
|
+
catch (e) {
|
11151
|
+
console.log('onDeleteMessage failed: messageId', messageId, 'error', e);
|
11152
|
+
}
|
11153
|
+
}), [onDeleteMessage]);
|
11131
11154
|
const isAllChatMessagesLoadedRef = React.useRef(false);
|
11132
11155
|
// isAllChatMessagesLoadedRef needs to be updated every time when a new adapter is set in order to display correct data
|
11133
11156
|
// onLoadPreviousChatMessages is updated when a new adapter is set
|
@@ -11148,6 +11171,29 @@ const MessageThreadWrapper = (props) => {
|
|
11148
11171
|
const messages = React.useMemo(() => {
|
11149
11172
|
return newMessages;
|
11150
11173
|
}, [newMessages]);
|
11174
|
+
React.useEffect(() => {
|
11175
|
+
if (latestDeletedMessageId === undefined) {
|
11176
|
+
setDeletedMessageAriaLabel(undefined);
|
11177
|
+
}
|
11178
|
+
else {
|
11179
|
+
if (!previousMessagesRef.current.find((message) => message.messageId === latestDeletedMessageId)) {
|
11180
|
+
// the message is deleted in previousMessagesRef
|
11181
|
+
// no need to update deletedMessageAriaLabel
|
11182
|
+
setDeletedMessageAriaLabel(undefined);
|
11183
|
+
}
|
11184
|
+
else if (!messages.find((message) => message.messageId === latestDeletedMessageId)) {
|
11185
|
+
// the message is deleted in messages array but still exists in previousMessagesRef
|
11186
|
+
// update deletedMessageAriaLabel
|
11187
|
+
setDeletedMessageAriaLabel(strings.messageDeletedAnnouncementAriaLabel);
|
11188
|
+
}
|
11189
|
+
else {
|
11190
|
+
// the message exists in both arrays
|
11191
|
+
// no need to update deletedMessageAriaLabel
|
11192
|
+
setDeletedMessageAriaLabel(undefined);
|
11193
|
+
}
|
11194
|
+
}
|
11195
|
+
previousMessagesRef.current = messages;
|
11196
|
+
}, [latestDeletedMessageId, messages, strings.messageDeletedAnnouncementAriaLabel]);
|
11151
11197
|
const messagesRef = React.useRef(messages);
|
11152
11198
|
const setMessagesRef = (messagesWithAttachedValue) => {
|
11153
11199
|
messagesRef.current = messagesWithAttachedValue;
|
@@ -11334,8 +11380,6 @@ const MessageThreadWrapper = (props) => {
|
|
11334
11380
|
setMessageReadBy(getParticipantsWhoHaveReadMessage(message, readReceiptsBySenderIdRef.current));
|
11335
11381
|
}
|
11336
11382
|
}, []);
|
11337
|
-
const localeStrings = useLocale$1().strings.messageThread;
|
11338
|
-
const strings = React.useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);
|
11339
11383
|
const defaultStatusRenderer = React.useCallback((message, participantCount, readCount, status) => {
|
11340
11384
|
const onToggleToolTip = (isToggled) => {
|
11341
11385
|
if (isToggled && readReceiptsBySenderIdRef.current) {
|
@@ -11353,7 +11397,7 @@ const MessageThreadWrapper = (props) => {
|
|
11353
11397
|
const messagesToDisplay = React.useMemo(() => {
|
11354
11398
|
return memoizeAllMessages((memoizedMessageFn) => {
|
11355
11399
|
return messages.map((message, index) => {
|
11356
|
-
return memoizedMessageFn(message, showMessageDate, showMessageStatus, strings, index, onUpdateMessage, onCancelEditMessage,
|
11400
|
+
return memoizedMessageFn(message, showMessageDate, showMessageStatus, strings, index, onUpdateMessage, onCancelEditMessage, onDeleteMessageCallback, onSendMessage, props.disableEditing, lastDeliveredChatMessage, lastSeenChatMessage, lastSendingChatMessage);
|
11357
11401
|
});
|
11358
11402
|
});
|
11359
11403
|
}, [
|
@@ -11362,7 +11406,7 @@ const MessageThreadWrapper = (props) => {
|
|
11362
11406
|
lastSendingChatMessage,
|
11363
11407
|
messages,
|
11364
11408
|
onCancelEditMessage,
|
11365
|
-
|
11409
|
+
onDeleteMessageCallback,
|
11366
11410
|
onSendMessage,
|
11367
11411
|
onUpdateMessage,
|
11368
11412
|
props.disableEditing,
|
@@ -11375,6 +11419,7 @@ const MessageThreadWrapper = (props) => {
|
|
11375
11419
|
existsNewChatMessage && !disableJumpToNewMessageButton && (React__default["default"].createElement("div", { className: react.mergeStyles(newMessageButtonContainerStyle, styles === null || styles === void 0 ? void 0 : styles.newMessageButtonContainer) }, onRenderJumpToNewMessageButton ? (onRenderJumpToNewMessageButton({ text: strings.newMessagesIndicator, onClick: scrollToBottom })) : (React__default["default"].createElement(DefaultJumpToNewMessageButton, { text: strings.newMessagesIndicator, onClick: scrollToBottom })))),
|
11376
11420
|
React__default["default"].createElement(LiveAnnouncer, null,
|
11377
11421
|
React__default["default"].createElement(FluentV9ThemeProvider, { v8Theme: theme },
|
11422
|
+
React__default["default"].createElement(Announcer$1, { announcementString: deletedMessageAriaLabel, ariaLive: 'assertive' }),
|
11378
11423
|
React__default["default"].createElement(reactChat.Chat
|
11379
11424
|
// styles?.chatContainer used in className and style prop as style prop can't handle CSS selectors
|
11380
11425
|
, {
|
@@ -11544,8 +11589,7 @@ const participantStateStringStyles$1 = {
|
|
11544
11589
|
textOverflow: 'ellipsis',
|
11545
11590
|
whiteSpace: 'nowrap',
|
11546
11591
|
lineHeight: 'normal',
|
11547
|
-
|
11548
|
-
marginLeft: 'auto',
|
11592
|
+
marginLeft: '0.5rem',
|
11549
11593
|
marginRight: 0
|
11550
11594
|
};
|
11551
11595
|
/**
|
@@ -20244,9 +20288,9 @@ var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments,
|
|
20244
20288
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
20245
20289
|
});
|
20246
20290
|
};
|
20247
|
-
|
20291
|
+
immer.enableMapSet();
|
20248
20292
|
// Needed to generate state diff for verbose logging.
|
20249
|
-
|
20293
|
+
immer.enablePatches();
|
20250
20294
|
/**
|
20251
20295
|
* @private
|
20252
20296
|
*/
|
@@ -20271,7 +20315,7 @@ class ChatContext$1 {
|
|
20271
20315
|
}
|
20272
20316
|
modifyState(modifier) {
|
20273
20317
|
const priorState = this._state;
|
20274
|
-
this._state =
|
20318
|
+
this._state = immer.produce(this._state, modifier, (patches) => {
|
20275
20319
|
if (logger.getLogLevel() === 'verbose') {
|
20276
20320
|
// Log to `info` because AzureLogger.verbose() doesn't show up in console.
|
20277
20321
|
this._logger.info(`State change: ${_safeJSONStringify(patches)}`);
|
@@ -21482,18 +21526,18 @@ class FileUploadContext {
|
|
21482
21526
|
}
|
21483
21527
|
addFileUploads(fileUploads) {
|
21484
21528
|
const fileUploadsMap = convertObservableFileUploadToFileUploadsUiState(fileUploads);
|
21485
|
-
this.chatContext.setState(
|
21529
|
+
this.chatContext.setState(immer.produce(this.chatContext.getState(), (draft) => {
|
21486
21530
|
draft.fileUploads = draft.fileUploads || {};
|
21487
21531
|
draft.fileUploads = Object.assign(Object.assign({}, draft.fileUploads), fileUploadsMap);
|
21488
21532
|
}));
|
21489
21533
|
}
|
21490
21534
|
clearFileUploads() {
|
21491
|
-
this.chatContext.setState(
|
21535
|
+
this.chatContext.setState(immer.produce(this.chatContext.getState(), (draft) => {
|
21492
21536
|
draft.fileUploads = {};
|
21493
21537
|
}));
|
21494
21538
|
}
|
21495
21539
|
updateFileUpload(id, data) {
|
21496
|
-
this.chatContext.setState(
|
21540
|
+
this.chatContext.setState(immer.produce(this.chatContext.getState(), (draft) => {
|
21497
21541
|
var _a, _b;
|
21498
21542
|
if ((_a = draft.fileUploads) === null || _a === void 0 ? void 0 : _a[id]) {
|
21499
21543
|
draft.fileUploads[id] = Object.assign(Object.assign({}, (_b = draft.fileUploads) === null || _b === void 0 ? void 0 : _b[id]), data);
|
@@ -21501,7 +21545,7 @@ class FileUploadContext {
|
|
21501
21545
|
}));
|
21502
21546
|
}
|
21503
21547
|
deleteFileUploads(ids) {
|
21504
|
-
this.chatContext.setState(
|
21548
|
+
this.chatContext.setState(immer.produce(this.chatContext.getState(), (draft) => {
|
21505
21549
|
ids.forEach((id) => {
|
21506
21550
|
var _a;
|
21507
21551
|
(_a = draft === null || draft === void 0 ? void 0 : draft.fileUploads) === null || _a === void 0 ? true : delete _a[id];
|
@@ -28285,7 +28329,6 @@ const CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM = 20.625;
|
|
28285
28329
|
/** @private */
|
28286
28330
|
const CONFIGURATION_PAGE_SECTION_HEIGHT_REM = 13.625;
|
28287
28331
|
const LOGO_HEIGHT_REM = 3;
|
28288
|
-
const LOGO_MARGIN_BOTTOM_REM = 1;
|
28289
28332
|
/**
|
28290
28333
|
* @private
|
28291
28334
|
*/
|
@@ -28296,6 +28339,12 @@ const configurationStackTokensDesktop = {
|
|
28296
28339
|
* @private
|
28297
28340
|
*/
|
28298
28341
|
const configurationStackTokensMobile = {
|
28342
|
+
childrenGap: '0.5rem'
|
28343
|
+
};
|
28344
|
+
/**
|
28345
|
+
* @private
|
28346
|
+
*/
|
28347
|
+
const deviceConfigurationStackTokens = {
|
28299
28348
|
childrenGap: '1.5rem'
|
28300
28349
|
};
|
28301
28350
|
/** @private */
|
@@ -28303,7 +28352,7 @@ const configurationContainerStyle = (desktop, backgroundImageUrl) => ({
|
|
28303
28352
|
root: {
|
28304
28353
|
height: '100%',
|
28305
28354
|
width: '100%',
|
28306
|
-
padding: '2rem 1rem 2rem 1rem',
|
28355
|
+
padding: desktop ? '2rem 1rem 2rem 1rem' : '1rem 1rem 2rem 1rem',
|
28307
28356
|
minWidth: desktop
|
28308
28357
|
? '25rem' // sum of min-width from children + ChildrenGap * (nb of children - 1) + padding * 2 = (11 + 11) + (2 * 1) + 0.5 * 2
|
28309
28358
|
: '16rem',
|
@@ -28356,20 +28405,36 @@ const selectionContainerStyle = (theme) => react.mergeStyles({
|
|
28356
28405
|
/**
|
28357
28406
|
* @private
|
28358
28407
|
*/
|
28359
|
-
const titleContainerStyleDesktop = react.mergeStyles({
|
28360
|
-
fontSize: '1.
|
28361
|
-
lineHeight: '
|
28408
|
+
const titleContainerStyleDesktop = (theme) => react.mergeStyles({
|
28409
|
+
fontSize: '1.2rem',
|
28410
|
+
lineHeight: '1rem',
|
28362
28411
|
fontWeight: 600
|
28363
|
-
});
|
28412
|
+
}, configurationPageTextDecoration(theme));
|
28364
28413
|
/**
|
28365
28414
|
* @private
|
28366
28415
|
*/
|
28367
|
-
const titleContainerStyleMobile = react.mergeStyles({
|
28416
|
+
const titleContainerStyleMobile = (theme) => react.mergeStyles({
|
28368
28417
|
fontSize: '1.0625rem',
|
28369
28418
|
lineHeight: '1.375rem',
|
28370
28419
|
fontWeight: 600,
|
28371
28420
|
textAlign: 'center'
|
28372
|
-
});
|
28421
|
+
}, configurationPageTextDecoration(theme));
|
28422
|
+
/**
|
28423
|
+
* Ensure configuration page text is legible on top of a background image.
|
28424
|
+
* @private
|
28425
|
+
*/
|
28426
|
+
const configurationPageTextDecoration = (theme) => {
|
28427
|
+
return {
|
28428
|
+
textShadow: `0px 0px 8px ${theme.palette.whiteTranslucent40}`,
|
28429
|
+
fill: theme.semanticColors.bodyText,
|
28430
|
+
stroke: theme.palette.whiteTranslucent40,
|
28431
|
+
paintOrder: 'stroke fill',
|
28432
|
+
strokeWidth: _pxToRem(1.5),
|
28433
|
+
text: {
|
28434
|
+
letterSpacing: '-0.02rem' // cope with extra width due to stroke width
|
28435
|
+
}
|
28436
|
+
};
|
28437
|
+
};
|
28373
28438
|
/**
|
28374
28439
|
* @private
|
28375
28440
|
*/
|
@@ -28382,8 +28447,7 @@ const callDetailsContainerStyles = {
|
|
28382
28447
|
};
|
28383
28448
|
const callDetailsStyle = {
|
28384
28449
|
fontSize: '0.9375',
|
28385
|
-
lineHeight: '1.25rem'
|
28386
|
-
marginTop: '0.25rem'
|
28450
|
+
lineHeight: '1.25rem'
|
28387
28451
|
};
|
28388
28452
|
/**
|
28389
28453
|
* @private
|
@@ -28392,7 +28456,7 @@ const callDetailsStyleDesktop = react.mergeStyles(Object.assign({}, callDetailsS
|
|
28392
28456
|
/**
|
28393
28457
|
* @private
|
28394
28458
|
*/
|
28395
|
-
const callDetailsStyleMobile = react.mergeStyles(Object.assign(Object.assign({}, callDetailsStyle), { textAlign: 'center' }));
|
28459
|
+
const callDetailsStyleMobile = react.mergeStyles(Object.assign(Object.assign({}, callDetailsStyle), { marginBottom: '0.5rem', textAlign: 'center' }));
|
28396
28460
|
/**
|
28397
28461
|
* @private
|
28398
28462
|
*/
|
@@ -28478,7 +28542,7 @@ const configurationCenteredContent = (fillsHeight, hasLogo) => react.mergeStyles
|
|
28478
28542
|
// in and not shift the content. To exclude the logo, we subtract the logo height
|
28479
28543
|
// and margin from the actual height. This allows the flex box's natural centering
|
28480
28544
|
// to appropriately center the content.
|
28481
|
-
height: `calc(100% - ${!fillsHeight && hasLogo ? `${LOGO_HEIGHT_REM
|
28545
|
+
height: `calc(100% - ${!fillsHeight && hasLogo ? `${LOGO_HEIGHT_REM}rem` : '0rem'})`
|
28482
28546
|
});
|
28483
28547
|
/** @private */
|
28484
28548
|
const panelStyles = {
|
@@ -28508,8 +28572,7 @@ const logoStyles = (shape) => ({
|
|
28508
28572
|
root: {
|
28509
28573
|
overflow: 'initial',
|
28510
28574
|
display: 'flex',
|
28511
|
-
justifyContent: 'center'
|
28512
|
-
marginBottom: `${LOGO_MARGIN_BOTTOM_REM}rem`
|
28575
|
+
justifyContent: 'center'
|
28513
28576
|
},
|
28514
28577
|
image: {
|
28515
28578
|
borderRadius: shape === 'circle' ? '100%' : undefined,
|
@@ -29054,6 +29117,88 @@ const CallReadinessModalFallBack = (props) => {
|
|
29054
29117
|
}
|
29055
29118
|
};
|
29056
29119
|
|
29120
|
+
// Copyright (c) Microsoft Corporation.
|
29121
|
+
/**
|
29122
|
+
* An SVG element component that wraps inner text to fit the width of the SVG.
|
29123
|
+
* @private
|
29124
|
+
*/
|
29125
|
+
const SvgWithWordWrapping = (props) => {
|
29126
|
+
const { width, text, lineHeightPx, bufferHeightPx } = props;
|
29127
|
+
const svgRef = React.useRef(null);
|
29128
|
+
const calculationTextElement = React.useRef(null);
|
29129
|
+
const visibleTextElement = React.useRef(null);
|
29130
|
+
const [height, setHeight] = React.useState(0);
|
29131
|
+
// useLayoutEffect ensures that the calculationTextElement is rendered before being used for calculations.
|
29132
|
+
// Using useLayoutEffect over useEffect ensures we do not get a layout shift when the visibleTextElement is rendered
|
29133
|
+
// and the height is updated. This is because useLayoutEffect runs synchronously after DOM mutations but
|
29134
|
+
// before the browser has a chance to paint. See https://reactjs.org/docs/hooks-reference.html#uselayouteffect
|
29135
|
+
// for more details.
|
29136
|
+
React.useLayoutEffect(() => {
|
29137
|
+
if (text && calculationTextElement.current && visibleTextElement.current) {
|
29138
|
+
const numLines = convertTextToWrappedText(calculationTextElement.current, visibleTextElement.current, width, lineHeightPx);
|
29139
|
+
setHeight(numLines * lineHeightPx);
|
29140
|
+
}
|
29141
|
+
}, [width, lineHeightPx, text]);
|
29142
|
+
return (React__default["default"].createElement("svg", { width: width, height: height + bufferHeightPx, ref: svgRef, xmlns: "http://www.w3.org/2000/svg" },
|
29143
|
+
React__default["default"].createElement("text", { height: 0, ref: calculationTextElement, style: { visibility: 'hidden' } }, text),
|
29144
|
+
React__default["default"].createElement("text", { ref: visibleTextElement, x: "0", y: bufferHeightPx / 4, role: "heading", "aria-level": 1 })));
|
29145
|
+
};
|
29146
|
+
/**
|
29147
|
+
* Wrap text in tspan elements to fit the width of the SVG
|
29148
|
+
* @param baseTextElement The text element to create the wrapped text from.
|
29149
|
+
* @param outputTextElement The text element to insert the wrapped text into.
|
29150
|
+
* @param maxWidth The maximum width of the text element.
|
29151
|
+
* @param lineHeightPx The height of each line in pixels.
|
29152
|
+
* @returns The number of lines of text.
|
29153
|
+
*/
|
29154
|
+
const convertTextToWrappedText = (inputTextElement, outputTextElement, maxWidth, lineHeightPx) => {
|
29155
|
+
var _a, _b;
|
29156
|
+
const words = (_b = (_a = inputTextElement.textContent) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
|
29157
|
+
if (words.length === 0 || words[0] === '') {
|
29158
|
+
throw new Error('Text element must contain text');
|
29159
|
+
}
|
29160
|
+
// The current line being built.
|
29161
|
+
let line = '';
|
29162
|
+
// Running total of the number of lines.
|
29163
|
+
let numLines = 0;
|
29164
|
+
// First, clear the output text element.
|
29165
|
+
outputTextElement.textContent = '';
|
29166
|
+
// Iterate through each word and create a tspan element for each line.
|
29167
|
+
for (let i = 0; i < words.length; i++) {
|
29168
|
+
const testLine = line + words[i] + ' ';
|
29169
|
+
const testWidth = inputTextElement.getSubStringLength(0, testLine.length);
|
29170
|
+
if (testWidth > maxWidth && i > 0) {
|
29171
|
+
const newLine = constructTSpanLine(line, lineHeightPx);
|
29172
|
+
outputTextElement.appendChild(newLine);
|
29173
|
+
line = words[i] + ' ';
|
29174
|
+
numLines++;
|
29175
|
+
}
|
29176
|
+
else {
|
29177
|
+
line = testLine;
|
29178
|
+
}
|
29179
|
+
}
|
29180
|
+
// Add the last line.
|
29181
|
+
const newLine = constructTSpanLine(line, lineHeightPx);
|
29182
|
+
outputTextElement.appendChild(newLine);
|
29183
|
+
numLines++;
|
29184
|
+
// Return the number of lines to calculate the height of the SVG.
|
29185
|
+
return numLines;
|
29186
|
+
};
|
29187
|
+
/**
|
29188
|
+
* Create a tspan element for a line of text, with text set to be centered.
|
29189
|
+
* @param line The line of text.
|
29190
|
+
* @param lineHeightPx The height of each line in pixels.
|
29191
|
+
* @returns The tspan element.
|
29192
|
+
*/
|
29193
|
+
const constructTSpanLine = (line, lineHeightPx) => {
|
29194
|
+
const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');
|
29195
|
+
tspan.textContent = line;
|
29196
|
+
tspan.setAttribute('x', '50%');
|
29197
|
+
tspan.setAttribute('dy', _pxToRem(lineHeightPx));
|
29198
|
+
tspan.setAttribute('text-anchor', 'middle');
|
29199
|
+
return tspan;
|
29200
|
+
};
|
29201
|
+
|
29057
29202
|
// Copyright (c) Microsoft Corporation.
|
29058
29203
|
// Licensed under the MIT License.
|
29059
29204
|
var __awaiter$9 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
|
@@ -29123,7 +29268,8 @@ const ConfigurationPage = (props) => {
|
|
29123
29268
|
}
|
29124
29269
|
}
|
29125
29270
|
const locale = useLocale();
|
29126
|
-
const title = (React__default["default"].createElement(react.Stack.Item, { className: mobileView ? titleContainerStyleMobile : titleContainerStyleDesktop
|
29271
|
+
const title = locale.strings.call.configurationPageTitle.length > 0 ? (React__default["default"].createElement(react.Stack.Item, { className: mobileView ? titleContainerStyleMobile(theme) : titleContainerStyleDesktop(theme) },
|
29272
|
+
React__default["default"].createElement(SvgWithWordWrapping, { width: mobileView ? 325 : 445, lineHeightPx: 16 * 1.5, bufferHeightPx: 16, text: locale.strings.call.configurationPageTitle }))) : (React__default["default"].createElement(React__default["default"].Fragment, null));
|
29127
29273
|
const callDescription = locale.strings.call.configurationPageCallDetails && (React__default["default"].createElement(react.Stack.Item, { className: mobileView ? callDetailsStyleMobile : callDetailsStyleDesktop }, locale.strings.call.configurationPageCallDetails));
|
29128
29274
|
let mobileWithPreview = mobileView;
|
29129
29275
|
/* @conditional-compile-remove(rooms) */
|
@@ -29222,7 +29368,7 @@ const ConfigurationPage = (props) => {
|
|
29222
29368
|
logo: props.logo }),
|
29223
29369
|
title,
|
29224
29370
|
callDescription),
|
29225
|
-
React__default["default"].createElement(react.Stack, { horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalFill: mobileWithPreview, tokens:
|
29371
|
+
React__default["default"].createElement(react.Stack, { horizontal: !mobileWithPreview, horizontalAlign: mobileWithPreview ? 'stretch' : 'center', verticalFill: mobileWithPreview, tokens: deviceConfigurationStackTokens },
|
29226
29372
|
localPreviewTrampoline(mobileWithPreview,
|
29227
29373
|
/* @conditional-compile-remove(rooms) */ !!(role === 'Consumer')),
|
29228
29374
|
React__default["default"].createElement(react.Stack, { styles: mobileView ? undefined : configurationSectionStyle },
|