@azure/communication-react 1.17.0-alpha-202405290014 → 1.17.0-alpha-202406010014

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 (120) hide show
  1. package/dist/communication-react.d.ts +25 -1
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-DnFVPZv-.js → ChatMessageComponentAsRichTextEditBox-SEDy46f4.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-DnFVPZv-.js.map → ChatMessageComponentAsRichTextEditBox-SEDy46f4.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-DfoveBvm.js → RichTextSendBoxWrapper-BHdu0XqK.js} +2 -2
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-DfoveBvm.js.map → RichTextSendBoxWrapper-BHdu0XqK.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-CYkd_Ir9.js → index-HwuTcEP-.js} +294 -146
  7. package/dist/dist-cjs/communication-react/index-HwuTcEP-.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  11. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.d.ts +1 -0
  12. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js +15 -3
  13. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js.map +1 -1
  14. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +5 -0
  15. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  16. package/dist/dist-esm/calling-stateful-client/src/CallContext.d.ts +2 -0
  17. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +11 -0
  18. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  19. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js +18 -6
  20. package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js.map +1 -1
  21. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.d.ts +1 -0
  22. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js +16 -0
  23. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js.map +1 -1
  24. package/dist/dist-esm/calling-stateful-client/src/Converter.js +3 -1
  25. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  26. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  27. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionsFlyout.js +10 -1
  28. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageActionsFlyout.js.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +7 -1
  30. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js +1 -5
  32. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/FluentChatMessageComponent.js +32 -20
  34. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/FluentChatMessageComponent.js.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js +2 -6
  36. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js.map +1 -1
  37. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js +1 -5
  38. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/ParticipantItem.js +1 -1
  40. package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/ParticipantList.d.ts +2 -0
  42. package/dist/dist-esm/react-components/src/components/ParticipantList.js.map +1 -1
  43. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +1 -0
  44. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +4 -2
  45. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +24 -4
  47. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/Table/RichTextInsertTablePane.js +5 -2
  49. package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/Table/RichTextInsertTablePane.js.map +1 -1
  50. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoEffectsItem.js +2 -2
  51. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoEffectsItem.js.map +1 -1
  52. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.d.ts +1 -0
  53. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js +20 -2
  54. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js.map +1 -1
  55. package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +4 -0
  56. package/dist/dist-esm/react-components/src/components/VideoGallery.js +7 -2
  57. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  58. package/dist/dist-esm/react-components/src/components/index.js +0 -3
  59. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  60. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.d.ts +1 -1
  61. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +11 -1
  62. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  63. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +10 -16
  64. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -1
  65. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js +1 -1
  66. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js.map +1 -1
  67. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  68. package/dist/dist-esm/react-components/src/theming/icons.d.ts +1 -0
  69. package/dist/dist-esm/react-components/src/theming/icons.js +3 -4
  70. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  71. package/dist/dist-esm/react-components/src/theming/v9ThemeShim.js +1 -1
  72. package/dist/dist-esm/react-components/src/theming/v9ThemeShim.js.map +1 -1
  73. package/dist/dist-esm/react-components/src/types/OnRender.d.ts +1 -1
  74. package/dist/dist-esm/react-components/src/types/OnRender.js.map +1 -1
  75. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +0 -2
  76. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  77. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  78. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +1 -0
  79. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +8 -2
  80. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  81. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +6 -0
  82. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  83. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +18 -4
  84. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  85. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +5 -1
  86. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  87. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.d.ts +2 -0
  88. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js +36 -2
  89. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js.map +1 -1
  90. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +5 -2
  91. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
  92. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/usePropsFor.d.ts +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/usePropsFor.js.map +1 -1
  94. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/SurveyPage.js +0 -8
  95. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/SurveyPage.js.map +1 -1
  96. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ThankYouForFeedbackPage.js +1 -9
  97. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ThankYouForFeedbackPage.js.map +1 -1
  98. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +1 -6
  99. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  100. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +1 -0
  101. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +6 -1
  102. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  103. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +4 -0
  104. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  105. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +1 -0
  106. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +6 -1
  107. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  108. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.js +1 -9
  109. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.js.map +1 -1
  110. package/dist/dist-esm/react-composites/src/composites/common/Survey.js +0 -19
  111. package/dist/dist-esm/react-composites/src/composites/common/Survey.js.map +1 -1
  112. package/dist/dist-esm/react-composites/src/composites/common/SurveyContent.js +1 -11
  113. package/dist/dist-esm/react-composites/src/composites/common/SurveyContent.js.map +1 -1
  114. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.js +1 -8
  115. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.js.map +1 -1
  116. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +1 -0
  117. package/dist/dist-esm/react-composites/src/composites/common/styles/Survey.styles.js +0 -4
  118. package/dist/dist-esm/react-composites/src/composites/common/styles/Survey.styles.js.map +1 -1
  119. package/package.json +6 -6
  120. package/dist/dist-cjs/communication-react/index-CYkd_Ir9.js.map +0 -1
@@ -174,7 +174,7 @@ function getDefaultExportFromCjs (x) {
174
174
  // Copyright (c) Microsoft Corporation.
175
175
  // Licensed under the MIT License.
176
176
  // GENERATED FILE. DO NOT EDIT MANUALLY.
177
- var telemetryVersion = '1.17.0-alpha-202405290014';
177
+ var telemetryVersion = '1.17.0-alpha-202406010014';
178
178
 
179
179
 
180
180
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -1100,7 +1100,6 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1100
1100
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1101
1101
  yield captionsFeature.setCaptionLanguage(language);
1102
1102
  });
1103
- /* @conditional-compile-remove(end-of-call-survey) */
1104
1103
  const onSubmitSurvey = (survey) => __awaiter$R(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.CallSurvey).submitSurvey(survey)); });
1105
1104
  /* @conditional-compile-remove(spotlight) */
1106
1105
  const onStartSpotlight = (userIds) => __awaiter$R(void 0, void 0, void 0, function* () {
@@ -1116,6 +1115,18 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1116
1115
  const onStopAllSpotlight = () => __awaiter$R(void 0, void 0, void 0, function* () {
1117
1116
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).stopAllSpotlight());
1118
1117
  });
1118
+ /* @conditional-compile-remove(soft-mute) */
1119
+ const onMuteParticipant = (userId) => __awaiter$R(void 0, void 0, void 0, function* () {
1120
+ if (call === null || call === void 0 ? void 0 : call.remoteParticipants) {
1121
+ call === null || call === void 0 ? void 0 : call.remoteParticipants.forEach((participant) => __awaiter$R(void 0, void 0, void 0, function* () {
1122
+ // Using toFlatCommunicationIdentifier to convert the CommunicationIdentifier to string
1123
+ // as _toCommunicationIdentifier(userId) comparison to participant.identifier did not work for this case
1124
+ if (toFlatCommunicationIdentifier(participant.identifier) === userId) {
1125
+ yield participant.mute();
1126
+ }
1127
+ }));
1128
+ }
1129
+ });
1119
1130
  /* @conditional-compile-remove(spotlight) */
1120
1131
  const canStartSpotlight = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Capabilities).capabilities.spotlightParticipant.isPresent;
1121
1132
  /* @conditional-compile-remove(spotlight) */
@@ -1181,7 +1192,6 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1181
1192
  onStopCaptions,
1182
1193
  onSetCaptionLanguage,
1183
1194
  onSetSpokenLanguage,
1184
- /* @conditional-compile-remove(end-of-call-survey) */
1185
1195
  onSubmitSurvey,
1186
1196
  /* @conditional-compile-remove(spotlight) */
1187
1197
  onStartSpotlight,
@@ -1196,7 +1206,9 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1196
1206
  /* @conditional-compile-remove(spotlight) */
1197
1207
  onStartRemoteSpotlight,
1198
1208
  /* @conditional-compile-remove(spotlight) */
1199
- onStopRemoteSpotlight
1209
+ onStopRemoteSpotlight,
1210
+ /* @conditional-compile-remove(soft-mute) */
1211
+ onMuteParticipant
1200
1212
  };
1201
1213
  });
1202
1214
 
@@ -1845,7 +1857,9 @@ function convertSdkCallToDeclarativeCall(call) {
1845
1857
  /* @conditional-compile-remove(hide-attendee-name) */
1846
1858
  hideAttendeeNames,
1847
1859
  /* @conditional-compile-remove(meeting-id) */
1848
- info: callInfo
1860
+ info: callInfo,
1861
+ /* @conditional-compile-remove(teams-meeting-conference) */
1862
+ teamsMeetingConference: undefined
1849
1863
  };
1850
1864
  }
1851
1865
  /**
@@ -2029,6 +2043,8 @@ let CallContext$2 = class CallContext {
2029
2043
  existingCall.captionsFeature.currentCaptionLanguage = call.captionsFeature.currentCaptionLanguage;
2030
2044
  /* @conditional-compile-remove(meeting-id) */
2031
2045
  existingCall.info = call.info;
2046
+ /* @conditional-compile-remove(teams-meeting-conference) */
2047
+ existingCall.teamsMeetingConference = call.teamsMeetingConference;
2032
2048
  }
2033
2049
  else {
2034
2050
  draft.calls[latestCallId] = call;
@@ -2339,6 +2355,15 @@ let CallContext$2 = class CallContext {
2339
2355
  }
2340
2356
  });
2341
2357
  }
2358
+ /* @conditional-compile-remove(teams-meeting-conference) */
2359
+ setTeamsMeetingConference(callId, teamsMeetingConferenceDetails) {
2360
+ this.modifyState((draft) => {
2361
+ const call = draft.calls[this._callIdHistory.latestCallId(callId)];
2362
+ if (call) {
2363
+ call.teamsMeetingConference = teamsMeetingConferenceDetails;
2364
+ }
2365
+ });
2366
+ }
2342
2367
  /* @conditional-compile-remove(spotlight) */
2343
2368
  setParticipantSpotlighted(callId, spotlightedParticipant) {
2344
2369
  this.modifyState((draft) => {
@@ -4171,6 +4196,8 @@ class CallSubscriber {
4171
4196
  this.subscribe = () => {
4172
4197
  this._call.on('stateChanged', this.stateChanged);
4173
4198
  this._call.on('stateChanged', this.initCaptionSubscriber);
4199
+ /* @conditional-compile-remove(teams-meeting-conference) */
4200
+ this._call.on('stateChanged', this.initTeamsMeetingConference);
4174
4201
  /* @conditional-compile-remove(local-recording-notification) */
4175
4202
  this._call.on('stateChanged', this.initLocalRecordingNotificationSubscriber);
4176
4203
  this._call.on('idChanged', this.idChanged);
@@ -4198,6 +4225,8 @@ class CallSubscriber {
4198
4225
  this._call.off('stateChanged', this.initCaptionSubscriber);
4199
4226
  /* @conditional-compile-remove(local-recording-notification) */
4200
4227
  this._call.off('stateChanged', this.initLocalRecordingNotificationSubscriber);
4228
+ /* @conditional-compile-remove(teams-meeting-conference) */
4229
+ this._call.off('stateChanged', this.initTeamsMeetingConference);
4201
4230
  this._call.off('idChanged', this.idChanged);
4202
4231
  this._call.off('isScreenSharingOnChanged', this.isScreenSharingOnChanged);
4203
4232
  this._call.off('remoteParticipantsUpdated', this.remoteParticipantsUpdated);
@@ -4241,6 +4270,18 @@ class CallSubscriber {
4241
4270
  this._call.off('stateChanged', this.initCaptionSubscriber);
4242
4271
  }
4243
4272
  };
4273
+ /* @conditional-compile-remove(teams-meeting-conference) */
4274
+ this.initTeamsMeetingConference = () => {
4275
+ if (this._call.state === 'Connected' && this._call.kind === 'TeamsCall') {
4276
+ this._call
4277
+ .feature(communicationCalling.Features.TeamsMeetingAudioConferencing)
4278
+ .getTeamsMeetingAudioConferencingDetails()
4279
+ .then((teamsMeetingConferenceDetails) => {
4280
+ this._context.setTeamsMeetingConference(this._callIdRef.callId, teamsMeetingConferenceDetails);
4281
+ });
4282
+ this._call.off('stateChanged', this.initTeamsMeetingConference);
4283
+ }
4284
+ };
4244
4285
  /* @conditional-compile-remove(local-recording-notification) */
4245
4286
  this.initLocalRecordingNotificationSubscriber = () => {
4246
4287
  // Subscribe to LocalRecordingFeature as it is only available in interop scenarios
@@ -4768,9 +4809,15 @@ class ProxyTeamsCaptions {
4768
4809
  return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
4769
4810
  var _a, _b;
4770
4811
  this._context.setStartCaptionsInProgress(this._call.id, true);
4771
- const ret = yield target.startCaptions(...args);
4772
- this._context.setSelectedSpokenLanguage(this._call.id, (_b = (_a = args[0]) === null || _a === void 0 ? void 0 : _a.spokenLanguage) !== null && _b !== void 0 ? _b : 'en-us');
4773
- return ret;
4812
+ try {
4813
+ const ret = yield target.startCaptions(...args);
4814
+ this._context.setSelectedSpokenLanguage(this._call.id, (_b = (_a = args[0]) === null || _a === void 0 ? void 0 : _a.spokenLanguage) !== null && _b !== void 0 ? _b : 'en-us');
4815
+ return ret;
4816
+ }
4817
+ catch (e) {
4818
+ this._context.setStartCaptionsInProgress(this._call.id, false);
4819
+ throw e;
4820
+ }
4774
4821
  }), 'Call.feature');
4775
4822
  case 'stopCaptions':
4776
4823
  return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
@@ -4812,9 +4859,15 @@ class ProxyCaptions {
4812
4859
  return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
4813
4860
  var _a, _b;
4814
4861
  this._context.setStartCaptionsInProgress(this._call.id, true);
4815
- const ret = yield target.startCaptions(...args);
4816
- this._context.setSelectedSpokenLanguage(this._call.id, (_b = (_a = args[0]) === null || _a === void 0 ? void 0 : _a.spokenLanguage) !== null && _b !== void 0 ? _b : 'en-us');
4817
- return ret;
4862
+ try {
4863
+ const ret = yield target.startCaptions(...args);
4864
+ this._context.setSelectedSpokenLanguage(this._call.id, (_b = (_a = args[0]) === null || _a === void 0 ? void 0 : _a.spokenLanguage) !== null && _b !== void 0 ? _b : 'en-us');
4865
+ return ret;
4866
+ }
4867
+ catch (e) {
4868
+ this._context.setStartCaptionsInProgress(this._call.id, false);
4869
+ throw e;
4870
+ }
4818
4871
  }), 'Call.feature');
4819
4872
  case 'stopCaptions':
4820
4873
  return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
@@ -6873,9 +6926,7 @@ const DEFAULT_COMPONENT_ICONS = {
6873
6926
  ContextMenuMicIcon: React.createElement(reactIcons.Mic20Regular, null),
6874
6927
  ContextMenuSpeakerIcon: React.createElement(reactIcons.Speaker220Regular, null),
6875
6928
  ContextMenuRemoveParticipant: React.createElement(reactIcons.PersonDelete20Regular, null),
6876
- /* @conditional-compile-remove(end-of-call-survey) */
6877
6929
  SurveyStarIcon: React.createElement(reactIcons.Star28Regular, null),
6878
- /* @conditional-compile-remove(end-of-call-survey) */
6879
6930
  SurveyStarIconFilled: React.createElement(reactIcons.Star28Filled, null),
6880
6931
  /* @conditional-compile-remove(spotlight) */
6881
6932
  StartSpotlightContextualMenuItem: React.createElement(reactIcons.VideoPersonStar20Filled, null),
@@ -6910,7 +6961,9 @@ const DEFAULT_COMPONENT_ICONS = {
6910
6961
  /* @conditional-compile-remove(rich-text-editor) */
6911
6962
  RichTextTableInsertMenuIcon: React.createElement(reactIcons.TableAdd20Regular, null),
6912
6963
  /* @conditional-compile-remove(rich-text-editor) */
6913
- RichTextTableDeleteMenuIcon: React.createElement(reactIcons.TableDismiss20Regular, null)
6964
+ RichTextTableDeleteMenuIcon: React.createElement(reactIcons.TableDismiss20Regular, null),
6965
+ /* @conditional-compile-remove(soft-mute) */
6966
+ ContextualMenuMicMutedIcon: React.createElement(reactIcons.MicOff20Regular, null)
6914
6967
  };
6915
6968
 
6916
6969
  // Copyright (c) Microsoft Corporation.
@@ -9499,7 +9552,7 @@ const mapBorderRadiusTokens = (effects) => {
9499
9552
  */
9500
9553
  const createV9Theme = (themeV8, baseThemeV9) => {
9501
9554
  const baseTheme = baseThemeV9 !== null && baseThemeV9 !== void 0 ? baseThemeV9 : reactComponents.webLightTheme;
9502
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, baseTheme), mapAliasColors(themeV8.palette, themeV8.isInverted)), mapShadowTokens(themeV8.effects)), mapBorderRadiusTokens(themeV8.effects)), { colorBrandBackground2: themeV8.palette.themeLight, colorBrandBackground2Hover: themeV8.palette.themeLight, colorBrandBackground2Pressed: themeV8.palette.themeLight, colorStatusWarningBackground3: '#D83B01', errorText: themeV8.semanticColors.errorText, colorNeutralStroke1Selected: themeV8.palette.neutralQuaternary, colorNeutralForeground2: themeV8.palette.neutralSecondary, colorBrandForegroundLink: themeV8.palette.themePrimary, colorBrandForegroundLinkHover: themeV8.palette.themeDarker, colorNeutralBackground1Selected: themeV8.palette.neutralQuaternaryAlt,
9555
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, baseTheme), mapAliasColors(themeV8.palette, themeV8.isInverted)), mapShadowTokens(themeV8.effects)), mapBorderRadiusTokens(themeV8.effects)), { colorBrandBackground2: themeV8.palette.themeLight, colorBrandBackground2Hover: themeV8.palette.themeLight, colorBrandBackground2Pressed: themeV8.palette.themeLight, colorStatusWarningBackground3: '#D83B01', errorText: themeV8.semanticColors.errorText, colorNeutralStroke1Selected: themeV8.palette.neutralQuaternary, colorNeutralForeground2: themeV8.palette.neutralSecondary, colorBrandForegroundLink: themeV8.palette.themePrimary, colorBrandForegroundLinkHover: themeV8.palette.themeDarker, colorNeutralBackground1Selected: themeV8.palette.neutralQuaternaryAlt, colorNeutralStroke2: themeV8.palette.neutralTertiaryAlt,
9503
9556
  // Fix for an issue with black borders for iOS that are added with 'after' selector
9504
9557
  colorStrokeFocus2: 'transparent' });
9505
9558
  };
@@ -9983,10 +10036,10 @@ const richTextEditorWrapperStyle = (theme, addTopOffset) => {
9983
10036
  tableLayout: 'auto',
9984
10037
  '& tr': {
9985
10038
  background: 'transparent',
9986
- border: `1px solid ${theme.palette.neutralLight}`,
10039
+ border: `1px solid ${theme.palette.neutralTertiaryAlt}`,
9987
10040
  '& td': {
9988
10041
  background: 'transparent',
9989
- border: `1px solid ${theme.palette.neutralLight}`,
10042
+ border: `1px solid ${theme.palette.neutralTertiaryAlt}`,
9990
10043
  wordBreak: 'normal',
9991
10044
  padding: '0.125rem 0.25rem',
9992
10045
  verticalAlign: 'top'
@@ -10177,14 +10230,11 @@ const sendBoxRichTextEditorStyle = (isExpanded) => {
10177
10230
  */
10178
10231
  const insertTableMenuCellButtonStyles = (theme) => {
10179
10232
  return {
10180
- width: '1rem',
10181
- height: '1rem',
10182
- border: `solid 0.0625rem ${theme.palette.neutralTertiaryAlt}`,
10183
- display: 'inline-block',
10233
+ width: '16px',
10234
+ height: '16px',
10235
+ border: `solid 1px ${theme.palette.neutralTertiaryAlt}`,
10184
10236
  cursor: 'pointer',
10185
- background: 'transparent',
10186
- // include border into width value as the parent element has fixed width
10187
- boxSizing: 'border-box'
10237
+ background: 'transparent'
10188
10238
  };
10189
10239
  };
10190
10240
  /**
@@ -10199,7 +10249,7 @@ const insertTableMenuCellButtonSelectedStyles = (theme) => {
10199
10249
  * @private
10200
10250
  */
10201
10251
  const insertTableMenuTablePane = react.mergeStyles({
10202
- padding: '0.5rem 0.625rem 0.75rem 0.625rem',
10252
+ padding: '8px 10px 12px 10px',
10203
10253
  boxSizing: 'content-box',
10204
10254
  minWidth: 'auto'
10205
10255
  });
@@ -10208,12 +10258,9 @@ const insertTableMenuTablePane = react.mergeStyles({
10208
10258
  */
10209
10259
  const insertTableMenuFocusZone = (theme) => {
10210
10260
  return react.mergeStyles({
10211
- lineHeight: '12px',
10212
- // fixed width is required to show columns in a grid correctly
10213
- width: '5rem',
10214
- border: `solid 0.0625rem ${theme.palette.neutralTertiaryAlt}`,
10215
- // don't include border into width value as otherwise it may be broken when zoom value is changed
10216
- boxSizing: 'content-box'
10261
+ display: 'inline-grid',
10262
+ gridTemplateColumns: 'auto auto auto auto auto',
10263
+ border: `solid 1px ${theme.palette.neutralTertiaryAlt}`
10217
10264
  });
10218
10265
  };
10219
10266
  /**
@@ -10599,6 +10646,9 @@ const RichTextInsertTablePane = (props) => {
10599
10646
  const onMouseEnter = React.useCallback((e) => {
10600
10647
  updateSize(e.target);
10601
10648
  }, [updateSize]);
10649
+ const onTouchStart = React.useCallback((e) => {
10650
+ updateSize(e.target);
10651
+ }, [updateSize]);
10602
10652
  const onClickButton = React.useCallback(() => {
10603
10653
  onClick(createKey(formatRowColumnText(row), formatRowColumnText(column)));
10604
10654
  }, [row, column, onClick]);
@@ -10609,11 +10659,11 @@ const RichTextInsertTablePane = (props) => {
10609
10659
  for (let j = 0; j < maxColumnsNumber; j++) {
10610
10660
  const key = `cell_${i}_${j}`;
10611
10661
  const isSelected = j <= column && i <= row;
10612
- items.push(React.createElement("button", { className: react.mergeStyles(insertTableMenuCellButtonStyles(theme), isSelected ? insertTableMenuCellButtonSelectedStyles(theme) : undefined), onClick: onClickButton, key: key, id: key, "data-column": j, "data-row": i, "data-is-focusable": true, onMouseEnter: onMouseEnter, "aria-label": formatText((_a = item.text) !== null && _a !== void 0 ? _a : '', formatRowColumnText(i), formatRowColumnText(j)), "data-testid": key }));
10662
+ items.push(React.createElement("button", { className: react.mergeStyles(insertTableMenuCellButtonStyles(theme), isSelected ? insertTableMenuCellButtonSelectedStyles(theme) : undefined), onClick: onClickButton, key: key, id: key, "data-column": j, "data-row": i, "data-is-focusable": true, onMouseEnter: onMouseEnter, onTouchStart: onTouchStart, "aria-label": formatText((_a = item.text) !== null && _a !== void 0 ? _a : '', formatRowColumnText(i), formatRowColumnText(j)), "data-testid": key }));
10613
10663
  }
10614
10664
  }
10615
10665
  return items;
10616
- }, [maxRowsNumber, maxColumnsNumber, column, row, theme, onClickButton, onMouseEnter, item.text]);
10666
+ }, [maxRowsNumber, maxColumnsNumber, column, row, theme, onClickButton, onMouseEnter, onTouchStart, item.text]);
10617
10667
  const text = React.useMemo(() => {
10618
10668
  var _a;
10619
10669
  return formatText((_a = item.text) !== null && _a !== void 0 ? _a : '', formatRowColumnText(row), formatRowColumnText(column));
@@ -11073,6 +11123,7 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11073
11123
  const editorDiv = React.useRef(null);
11074
11124
  const theme = useTheme();
11075
11125
  const [contextMenuProps, setContextMenuProps] = React.useState(null);
11126
+ const tableCellSelectionLightThemeBackgroundColor = React.useRef(undefined);
11076
11127
  React.useImperativeHandle(ref, () => {
11077
11128
  return {
11078
11129
  focus() {
@@ -11112,6 +11163,16 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11112
11163
  var _a;
11113
11164
  (_a = editor.current) === null || _a === void 0 ? void 0 : _a.setDarkModeState(isDarkThemedValue);
11114
11165
  }, [isDarkThemedValue]);
11166
+ // remember light color to correctly set it in the dark theme
11167
+ React.useEffect(() => {
11168
+ var _a, _b, _c;
11169
+ // focus to update selection color for table, otherwise the existing selection color for table won't be updated
11170
+ (_a = editor.current) === null || _a === void 0 ? void 0 : _a.focus();
11171
+ if (!isDarkThemedValue) {
11172
+ tableCellSelectionLightThemeBackgroundColor.current =
11173
+ (_c = (_b = lightTheme.palette) === null || _b === void 0 ? void 0 : _b.neutralLight) !== null && _c !== void 0 ? _c : theme.palette.neutralLight;
11174
+ }
11175
+ }, [theme.palette.neutralLight, isDarkThemedValue]);
11115
11176
  const placeholderPlugin = React.useMemo(() => {
11116
11177
  return new PlaceholderPlugin('');
11117
11178
  }, []);
@@ -11163,6 +11224,13 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11163
11224
  const onContextMenuDismiss = React.useCallback(() => {
11164
11225
  setContextMenuProps(null);
11165
11226
  }, []);
11227
+ const getDarkColor = React.useCallback((lightColor, _baseLValue, colorType) => {
11228
+ var _a, _b;
11229
+ if (lightColor === tableCellSelectionLightThemeBackgroundColor.current && colorType === 'background') {
11230
+ return (_b = (_a = darkTheme.palette) === null || _a === void 0 ? void 0 : _a.neutralLight) !== null && _b !== void 0 ? _b : theme.palette.neutralLight;
11231
+ }
11232
+ return lightColor;
11233
+ }, [theme.palette.neutralLight]);
11166
11234
  const plugins = React.useMemo(() => {
11167
11235
  const contentEdit = new roosterjsContentModelPlugins.EditPlugin();
11168
11236
  // AutoFormatPlugin previously was a part of the edit plugin
@@ -11195,7 +11263,7 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11195
11263
  tableContextMenuPlugin
11196
11264
  ]);
11197
11265
  React.useEffect(() => {
11198
- var _a;
11266
+ var _a, _b;
11199
11267
  const initialModel = createEditorInitialModel(initialContent, contentModel);
11200
11268
  if (editorDiv.current) {
11201
11269
  editor.current = new roosterjsContentModelCore.Editor(editorDiv.current, {
@@ -11204,6 +11272,7 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11204
11272
  doNotAdjustEditorColor: true,
11205
11273
  // TODO: confirm the color during inline images implementation
11206
11274
  imageSelectionBorderColor: 'blue',
11275
+ tableCellSelectionBackgroundColor: ((_a = lightTheme.palette) === null || _a === void 0 ? void 0 : _a.neutralLight) && theme.palette.neutralLight,
11207
11276
  plugins: plugins,
11208
11277
  initialModel: initialModel,
11209
11278
  defaultModelToDomOptions: {
@@ -11212,11 +11281,12 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11212
11281
  border: borderApplier,
11213
11282
  dataset: dataSetApplier
11214
11283
  }
11215
- }
11284
+ },
11285
+ getDarkColor: getDarkColor
11216
11286
  });
11217
11287
  }
11218
11288
  if (autoFocus === 'sendBoxTextField') {
11219
- (_a = editor.current) === null || _a === void 0 ? void 0 : _a.focus();
11289
+ (_b = editor.current) === null || _b === void 0 ? void 0 : _b.focus();
11220
11290
  }
11221
11291
  return () => {
11222
11292
  if (editor.current) {
@@ -11792,6 +11862,10 @@ const useChatMessageRenderStyles = reactComponents.makeStyles({
11792
11862
  marginLeft: `${AVATAR_MARGIN_LEFT}rem`,
11793
11863
  marginTop: '0'
11794
11864
  },
11865
+ bodyHiddenAvatar: {
11866
+ marginLeft: 0,
11867
+ marginTop: 0
11868
+ },
11795
11869
  bodyWithAvatar: {
11796
11870
  marginLeft: `0`,
11797
11871
  marginTop: '0.75rem'
@@ -11922,7 +11996,13 @@ const useChatMessageStyles = reactComponents.makeStyles({
11922
11996
  */
11923
11997
  const useChatMessageCommonStyles = reactComponents.makeStyles({
11924
11998
  body: {
11925
- '& table': Object.assign(Object.assign({ backgroundColor: reactComponents.tokens.colorBrandBackgroundInverted }, reactComponents.shorthands.borderColor(reactComponents.tokens.colorNeutralStroke1Selected)), { borderCollapse: 'collapse', tableLayout: 'auto', width: '100%', '& tr': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke1Selected}`)), { '& td': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke1Selected}`)), { wordBreak: 'normal', paddingTop: '0px', paddingRight: '5px' }) }) })
11999
+ '& table': {
12000
+ backgroundColor: reactComponents.tokens.colorBrandBackgroundInverted,
12001
+ borderCollapse: 'collapse',
12002
+ tableLayout: 'auto',
12003
+ width: '100%',
12004
+ '& tr': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke2}`)), { '& td': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke2}`)), { wordBreak: 'normal', paddingTop: '0px', paddingRight: '5px' }) })
12005
+ }
11926
12006
  },
11927
12007
  failed: {
11928
12008
  //TODO: can we reuse a theme color here?
@@ -12633,7 +12713,16 @@ const ChatMessageActionFlyout = (props) => {
12633
12713
  key: person.displayName,
12634
12714
  text: person.displayName,
12635
12715
  itemProps: { styles: props.increaseFlyoutItemSize ? menuItemIncreasedSizeStyles : undefined },
12636
- onRenderIcon: () => { var _a; return onRenderAvatar ? onRenderAvatar((_a = person.id) !== null && _a !== void 0 ? _a : '', personaOptions) : React.createElement(react.Persona, Object.assign({}, personaOptions)); },
12716
+ onRenderIcon: () => {
12717
+ var _a;
12718
+ if (onRenderAvatar) {
12719
+ const rendered = onRenderAvatar((_a = person.id) !== null && _a !== void 0 ? _a : '', personaOptions);
12720
+ if (rendered) {
12721
+ return rendered;
12722
+ }
12723
+ }
12724
+ return React.createElement(react.Persona, Object.assign({}, personaOptions));
12725
+ },
12637
12726
  iconProps: {
12638
12727
  styles: menuIconStyleSet
12639
12728
  }
@@ -12959,6 +13048,13 @@ const processHtmlToReact = (props) => {
12959
13048
  ? props.inlineImageOptions.onRenderInlineImage(inlineImageProps, defaultOnRenderInlineImage)
12960
13049
  : defaultOnRenderInlineImage(inlineImageProps);
12961
13050
  }
13051
+ // Transform links to open in new tab
13052
+ if (domNode.name === 'a' && React.isValidElement(reactNode)) {
13053
+ return React.cloneElement(reactNode, {
13054
+ target: '_blank',
13055
+ rel: 'noreferrer noopener'
13056
+ });
13057
+ }
12962
13058
  }
12963
13059
  // Pass through the original node
12964
13060
  return reactNode;
@@ -13197,7 +13293,7 @@ actionsForAttachment) {
13197
13293
  return (React.createElement("div", { tabIndex: 0 },
13198
13294
  React.createElement(BlockedMessageContent, { message: message, strings: strings })));
13199
13295
  }
13200
- return (React.createElement("div", { tabIndex: 0, className: "ui-chat__message__content" },
13296
+ return (React.createElement("div", { className: "ui-chat__message__content" },
13201
13297
  React.createElement(ChatMessageContent, { message: message, strings: strings,
13202
13298
  /* @conditional-compile-remove(mention) */
13203
13299
  mentionDisplayOptions: mentionDisplayOptions, inlineImageOptions: inlineImageOptions }),
@@ -13375,12 +13471,8 @@ const MessageBubble$1 = (props) => {
13375
13471
  // react onFocus is called even when nested component receives focus (i.e. it bubbles)
13376
13472
  // so when focus moves within actionMenu, the `focus` state in chatMessage remains true, and keeps actionMenu visible
13377
13473
  setFocused(true);
13378
- },
13379
- // make body not focusable to remove repetitions from narrators.
13380
- // inner components are already focusable
13381
- role: 'none',
13382
- tabIndex: -1
13383
- }, "data-ui-id": "chat-composite-message", author: React.createElement(react.Text, { className: chatMessageDateStyle, tabIndex: 0 }, message.senderDisplayName), timestamp: React.createElement(react.Text, { className: chatMessageDateStyle, "data-ui-id": ids.messageTimestamp, tabIndex: 0 }, formattedTimestamp), details: getMessageDetails(), actions: {
13474
+ }
13475
+ }, "data-ui-id": "chat-composite-message", author: React.createElement(react.Text, { className: chatMessageDateStyle }, message.senderDisplayName), timestamp: React.createElement(react.Text, { className: chatMessageDateStyle, "data-ui-id": ids.messageTimestamp }, formattedTimestamp), details: getMessageDetails(), actions: {
13384
13476
  children: actionMenuProps === null || actionMenuProps === void 0 ? void 0 : actionMenuProps.children,
13385
13477
  className: reactComponents.mergeClasses(chatMyMessageStyles.menu,
13386
13478
  // Make actions menu visible when the message is focused or the flyout is shown
@@ -13539,7 +13631,7 @@ class _ErrorBoundary extends React.Component {
13539
13631
  // Copyright (c) Microsoft Corporation.
13540
13632
  // Licensed under the MIT License.
13541
13633
  /* @conditional-compile-remove(rich-text-editor) */
13542
- const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DnFVPZv-.js'); }));
13634
+ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-SEDy46f4.js'); }));
13543
13635
  /**
13544
13636
  * @private
13545
13637
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -13547,7 +13639,7 @@ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve()
13547
13639
  *
13548
13640
  * @conditional-compile-remove(rich-text-editor)
13549
13641
  */
13550
- const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DnFVPZv-.js'); });
13642
+ const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-SEDy46f4.js'); });
13551
13643
  /**
13552
13644
  * @private
13553
13645
  */
@@ -13741,11 +13833,7 @@ const FluentChatMyMessageComponent = (props) => {
13741
13833
  }, [chatMessageRenderStyles.rootCommon, chatMessageRenderStyles.rootMyMessage, styles === null || styles === void 0 ? void 0 : styles.myChatItemMessageContainer]);
13742
13834
  const myMessageBodyProps = React.useMemo(() => {
13743
13835
  return {
13744
- className: reactComponents.mergeClasses(chatMessageRenderStyles.bodyCommon, chatMessageRenderStyles.bodyMyMessage),
13745
- // make body not focusable to remove repetitions from narrators.
13746
- // inner components are already focusable
13747
- tabIndex: -1,
13748
- role: 'none'
13836
+ className: reactComponents.mergeClasses(chatMessageRenderStyles.bodyCommon, chatMessageRenderStyles.bodyMyMessage)
13749
13837
  };
13750
13838
  }, [chatMessageRenderStyles.bodyCommon, chatMessageRenderStyles.bodyMyMessage]);
13751
13839
  const myMessageStatusIcon = React.useMemo(() => {
@@ -13838,11 +13926,7 @@ const MessageBubble = (props) => {
13838
13926
  const chatMessage = (React.createElement(React.Fragment, null,
13839
13927
  React.createElement("div", { key: props.message.messageId },
13840
13928
  React.createElement(reactChat.ChatMessage, { attached: attached, key: props.message.messageId, root: {
13841
- className: chatMessageStyles.root,
13842
- // make body not focusable to remove repetitions from narrators.
13843
- // inner components are already focusable
13844
- tabIndex: -1,
13845
- role: 'none'
13929
+ className: chatMessageStyles.root
13846
13930
  }, author: React.createElement(react.Text, { className: chatMessageAuthorStyle }, message.senderDisplayName), body: {
13847
13931
  className: chatItemMessageContainerClassName,
13848
13932
  style: Object.assign({}, createStyleFromV8Style(messageContainerStyle))
@@ -13920,36 +14004,48 @@ const FluentChatMessageComponent = (props) => {
13920
14004
  const messageRootProps = React.useMemo(() => {
13921
14005
  return { className: reactComponents.mergeClasses(chatMessageRenderStyles.rootMessage, chatMessageRenderStyles.rootCommon) };
13922
14006
  }, [chatMessageRenderStyles.rootCommon, chatMessageRenderStyles.rootMessage]);
14007
+ const avatar = React.useMemo(() => {
14008
+ const chatAvatarStyle = shouldShowAvatar ? gutterWithAvatar : gutterWithHiddenAvatar;
14009
+ const personaOptions = {
14010
+ hidePersonaDetails: true,
14011
+ size: react.PersonaSize.size32,
14012
+ text: message.senderDisplayName,
14013
+ showOverflowTooltip: false
14014
+ };
14015
+ let renderedAvatar;
14016
+ if (onRenderAvatar) {
14017
+ const avatarComponent = onRenderAvatar === null || onRenderAvatar === void 0 ? void 0 : onRenderAvatar(message.senderId, personaOptions);
14018
+ if (!avatarComponent) {
14019
+ return undefined;
14020
+ }
14021
+ else {
14022
+ renderedAvatar = avatarComponent;
14023
+ }
14024
+ }
14025
+ return (React.createElement("div", { className: react.mergeStyles(chatAvatarStyle) }, renderedAvatar ? renderedAvatar : React.createElement(react.Persona, Object.assign({}, personaOptions))));
14026
+ }, [message.senderDisplayName, message.senderId, onRenderAvatar, shouldShowAvatar]);
13923
14027
  const messageBodyProps = React.useMemo(() => {
13924
14028
  return {
13925
14029
  // chatItemMessageContainer used in className and style prop as style prop can't handle CSS selectors
13926
- className: reactComponents.mergeClasses(chatMessageRenderStyles.bodyCommon, !shouldShowAvatar ? chatMessageRenderStyles.bodyWithoutAvatar : chatMessageRenderStyles.bodyWithAvatar, shouldOverlapAvatarAndMessage ? chatMessageRenderStyles.avatarOverlap : chatMessageRenderStyles.avatarNoOverlap, react.mergeStyles(styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer)),
13927
- style: (styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) !== undefined ? createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) : {},
13928
- // make body not focusable to remove repetitions from narrators.
13929
- // inner components are already focusable
13930
- tabIndex: -1,
13931
- role: 'none'
14030
+ className: reactComponents.mergeClasses(chatMessageRenderStyles.bodyCommon, !shouldShowAvatar
14031
+ ? avatar
14032
+ ? chatMessageRenderStyles.bodyWithoutAvatar
14033
+ : chatMessageRenderStyles.bodyHiddenAvatar
14034
+ : chatMessageRenderStyles.bodyWithAvatar, shouldOverlapAvatarAndMessage ? chatMessageRenderStyles.avatarOverlap : chatMessageRenderStyles.avatarNoOverlap, react.mergeStyles(styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer)),
14035
+ style: (styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) !== undefined ? createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) : {}
13932
14036
  };
13933
14037
  }, [
13934
- chatMessageRenderStyles.avatarNoOverlap,
13935
- chatMessageRenderStyles.avatarOverlap,
13936
14038
  chatMessageRenderStyles.bodyCommon,
13937
- chatMessageRenderStyles.bodyWithAvatar,
13938
14039
  chatMessageRenderStyles.bodyWithoutAvatar,
13939
- shouldOverlapAvatarAndMessage,
14040
+ chatMessageRenderStyles.bodyHiddenAvatar,
14041
+ chatMessageRenderStyles.bodyWithAvatar,
14042
+ chatMessageRenderStyles.avatarOverlap,
14043
+ chatMessageRenderStyles.avatarNoOverlap,
13940
14044
  shouldShowAvatar,
14045
+ avatar,
14046
+ shouldOverlapAvatarAndMessage,
13941
14047
  styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer
13942
14048
  ]);
13943
- const avatar = React.useMemo(() => {
13944
- const chatAvatarStyle = shouldShowAvatar ? gutterWithAvatar : gutterWithHiddenAvatar;
13945
- const personaOptions = {
13946
- hidePersonaDetails: true,
13947
- size: react.PersonaSize.size32,
13948
- text: message.senderDisplayName,
13949
- showOverflowTooltip: false
13950
- };
13951
- return (React.createElement("div", { className: react.mergeStyles(chatAvatarStyle) }, onRenderAvatar ? onRenderAvatar === null || onRenderAvatar === void 0 ? void 0 : onRenderAvatar(message.senderId, personaOptions) : React.createElement(react.Persona, Object.assign({}, personaOptions))));
13952
- }, [message.senderDisplayName, message.senderId, onRenderAvatar, shouldShowAvatar]);
13953
14049
  // Fluent UI message components are used here as for default message renderer,
13954
14050
  // timestamp and author name should be shown but they aren't shown for custom renderer.
13955
14051
  // More investigations are needed to check if this can be simplified with states.
@@ -14771,7 +14867,7 @@ const ParticipantItem = (props) => {
14771
14867
  };
14772
14868
  const menuButton = React.useMemo(() => (React.createElement(react.Stack, { horizontal: true, horizontalAlign: "end", className: react.mergeStyles(menuButtonContainerStyle, { color: theme.palette.neutralPrimary }), title: strings.menuTitle, "data-ui-id": ids.participantItemMenuButton },
14773
14869
  React.createElement(react.Icon, { iconName: "ParticipantItemOptionsHovered", className: react.mergeStyles(iconStyles$3, !showMenuIcon ? displayNoneStyle : {}) }))), [theme.palette.neutralPrimary, strings.menuTitle, ids.participantItemMenuButton, showMenuIcon]);
14774
- return (React.createElement("div", { ref: containerRef, role: 'menuitem', "data-is-focusable": true, "data-ui-id": "participant-item", className: react.mergeStyles(participantItemContainerStyle({ clickable: !!menuItems && menuItems.length > 0 }), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onClick: () => {
14870
+ return (React.createElement("div", { ref: containerRef, role: 'menuitem', "aria-disabled": (menuItems && menuItems.length > 0) || props.onClick ? false : true, "data-is-focusable": true, "data-ui-id": "participant-item", className: react.mergeStyles(participantItemContainerStyle({ clickable: !!menuItems && menuItems.length > 0 }), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onClick: () => {
14775
14871
  if (!participantStateString) {
14776
14872
  setItemHovered(true);
14777
14873
  setMenuHidden(false);
@@ -15743,7 +15839,8 @@ const useVideoTileContextualMenuProps = (props) => {
15743
15839
  /* @conditional-compile-remove(spotlight) */ onStartSpotlight,
15744
15840
  /* @conditional-compile-remove(spotlight) */ onStopSpotlight,
15745
15841
  /* @conditional-compile-remove(spotlight) */ maxParticipantsToSpotlight,
15746
- /* @conditional-compile-remove(spotlight) */ myUserId } = props;
15842
+ /* @conditional-compile-remove(spotlight) */ myUserId,
15843
+ /* @conditional-compile-remove(soft-mute) */ onMuteParticipant } = props;
15747
15844
  const scalingMode = React.useMemo(() => {
15748
15845
  var _a;
15749
15846
  return (_a = props.participant.videoStream) === null || _a === void 0 ? void 0 : _a.scalingMode;
@@ -15837,6 +15934,21 @@ const useVideoTileContextualMenuProps = (props) => {
15837
15934
  });
15838
15935
  }
15839
15936
  }
15937
+ /* @conditional-compile-remove(soft-mute) */
15938
+ if (onMuteParticipant) {
15939
+ items.push({
15940
+ key: 'mute',
15941
+ text: 'Mute',
15942
+ iconProps: {
15943
+ iconName: 'ContextualMenuMicMutedIcon',
15944
+ styles: { root: { lineHeight: 0 } }
15945
+ },
15946
+ onClick: () => onMuteParticipant(participant.userId),
15947
+ 'data-ui-id': 'video-tile-mute-participant',
15948
+ ariaLabel: 'Mute',
15949
+ disabled: participant.isMuted
15950
+ });
15951
+ }
15840
15952
  if (scalingMode) {
15841
15953
  if (scalingMode === 'Crop' && (strings === null || strings === void 0 ? void 0 : strings.fitRemoteParticipantToFrame)) {
15842
15954
  items.push({
@@ -15892,7 +16004,9 @@ const useVideoTileContextualMenuProps = (props) => {
15892
16004
  /* @conditional-compile-remove(spotlight) */ onStartSpotlight,
15893
16005
  /* @conditional-compile-remove(spotlight) */ onStopSpotlight,
15894
16006
  /* @conditional-compile-remove(spotlight) */ maxParticipantsToSpotlight,
15895
- /* @conditional-compile-remove(spotlight) */ myUserId
16007
+ /* @conditional-compile-remove(spotlight) */ myUserId,
16008
+ /* @conditional-compile-remove(soft-mute) */ onMuteParticipant,
16009
+ /* @conditional-compile-remove(soft-mute) */ participant.isMuted
15896
16010
  ]);
15897
16011
  return contextualMenuProps;
15898
16012
  };
@@ -17082,7 +17196,8 @@ const _RemoteVideoTile = React.memo((props) => {
17082
17196
  /* @conditional-compile-remove(spotlight) */ isSpotlighted,
17083
17197
  /* @conditional-compile-remove(spotlight) */ onStartSpotlight,
17084
17198
  /* @conditional-compile-remove(spotlight) */ onStopSpotlight,
17085
- /* @conditional-compile-remove(spotlight) */ maxParticipantsToSpotlight, onUpdateScalingMode, disablePinMenuItem, toggleAnnouncerString, strings, reactionResources, streamId } = props;
17199
+ /* @conditional-compile-remove(spotlight) */ maxParticipantsToSpotlight,
17200
+ /* @conditional-compile-remove(soft-mute) */ onMuteParticipant, onUpdateScalingMode, disablePinMenuItem, toggleAnnouncerString, strings, reactionResources, streamId } = props;
17086
17201
  const remoteVideoStreamProps = React.useMemo(() => ({
17087
17202
  isMirrored: remoteVideoViewOptions === null || remoteVideoViewOptions === void 0 ? void 0 : remoteVideoViewOptions.isMirrored,
17088
17203
  isScreenSharingOn,
@@ -17122,7 +17237,8 @@ const _RemoteVideoTile = React.memo((props) => {
17122
17237
  /* @conditional-compile-remove(spotlight) */ isSpotlighted,
17123
17238
  /* @conditional-compile-remove(spotlight) */ onStartSpotlight,
17124
17239
  /* @conditional-compile-remove(spotlight) */ onStopSpotlight,
17125
- /* @conditional-compile-remove(spotlight) */ maxParticipantsToSpotlight
17240
+ /* @conditional-compile-remove(spotlight) */ maxParticipantsToSpotlight,
17241
+ /* @conditional-compile-remove(soft-mute) */ onMuteParticipant
17126
17242
  });
17127
17243
  const videoTileContextualMenuProps = React.useMemo(() => {
17128
17244
  if (menuKind !== 'contextual' || !contextualMenuProps) {
@@ -19562,7 +19678,9 @@ const VideoGallery = (props) => {
19562
19678
  /* @conditional-compile-remove(spotlight) */
19563
19679
  onStopRemoteSpotlight,
19564
19680
  /* @conditional-compile-remove(spotlight) */
19565
- maxParticipantsToSpotlight, reactionResources, videoTilesOptions } = props;
19681
+ maxParticipantsToSpotlight, reactionResources, videoTilesOptions,
19682
+ /* @conditional-compile-remove(soft-mute) */
19683
+ onMuteParticipant } = props;
19566
19684
  const ids = useIdentifiers();
19567
19685
  const theme = useTheme();
19568
19686
  const localeStrings = useLocale$1().strings.videoGallery;
@@ -19734,7 +19852,9 @@ const VideoGallery = (props) => {
19734
19852
  /* @conditional-compile-remove(spotlight) */
19735
19853
  onStopSpotlight: onStopRemoteSpotlight,
19736
19854
  /* @conditional-compile-remove(spotlight) */
19737
- maxParticipantsToSpotlight: maxParticipantsToSpotlight, reactionResources: reactionResources }));
19855
+ maxParticipantsToSpotlight: maxParticipantsToSpotlight, reactionResources: reactionResources,
19856
+ /* @conditional-compile-remove(soft-mute) */
19857
+ onMuteParticipant: onMuteParticipant }));
19738
19858
  }, [
19739
19859
  onCreateRemoteStreamView,
19740
19860
  onDisposeRemoteVideoStreamView,
@@ -19755,6 +19875,7 @@ const VideoGallery = (props) => {
19755
19875
  /* @conditional-compile-remove(spotlight) */ onStartRemoteSpotlight,
19756
19876
  /* @conditional-compile-remove(spotlight) */ onStopRemoteSpotlight,
19757
19877
  /* @conditional-compile-remove(spotlight) */ maxParticipantsToSpotlight,
19878
+ /* @conditional-compile-remove(soft-mute) */ onMuteParticipant,
19758
19879
  reactionResources,
19759
19880
  videoTilesOptions
19760
19881
  ]);
@@ -22471,7 +22592,7 @@ const videoEffectsItemContainerStyles = (args) => {
22471
22592
  * @internal
22472
22593
  */
22473
22594
  const _VideoEffectsItem = (props) => {
22474
- var _a, _b, _c, _d, _e, _f, _g;
22595
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
22475
22596
  const theme = react.useTheme();
22476
22597
  const isSelected = (_a = props.isSelected) !== null && _a !== void 0 ? _a : false;
22477
22598
  const disabled = (_b = props.disabled) !== null && _b !== void 0 ? _b : false;
@@ -22486,7 +22607,7 @@ const _VideoEffectsItem = (props) => {
22486
22607
  }), [backgroundImage, disabled, isSelected, theme]);
22487
22608
  return (React.createElement(react.TooltipHost, Object.assign({}, props.tooltipProps),
22488
22609
  React.createElement(react.Stack, { key: props.itemKey, className: react.mergeStyles((_f = props.styles) === null || _f === void 0 ? void 0 : _f.root), verticalAlign: "center", horizontalAlign: "center", "data-ui-id": `video-effects-item` },
22489
- React.createElement(react.DefaultButton, { styles: containerStyles(), onClick: disabled ? undefined : () => { var _a; return (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, props.itemKey); }, componentRef: props.componentRef, "aria-label": (_g = props.ariaLabel) !== null && _g !== void 0 ? _g : props.itemKey, "aria-disabled": props.disabled },
22610
+ React.createElement(react.DefaultButton, { styles: containerStyles(), onClick: disabled ? undefined : () => { var _a; return (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, props.itemKey); }, componentRef: props.componentRef, ariaLabel: (_j = (_g = props.ariaLabel) !== null && _g !== void 0 ? _g : (_h = props.tooltipProps) === null || _h === void 0 ? void 0 : _h.content) !== null && _j !== void 0 ? _j : props.itemKey, "aria-disabled": props.disabled },
22490
22611
  React.createElement(react.Stack, { horizontalAlign: 'center' },
22491
22612
  props.iconProps && (React.createElement(react.Stack.Item, { className: iconContainerStyles },
22492
22613
  React.createElement(react.Icon, Object.assign({}, props.iconProps)))),
@@ -27823,7 +27944,7 @@ const AttachmentDownloadErrorBar = (props) => {
27823
27944
  /**
27824
27945
  * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading
27825
27946
  */
27826
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-DfoveBvm.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
27947
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-BHdu0XqK.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
27827
27948
  /**
27828
27949
  * @private
27829
27950
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -27831,7 +27952,7 @@ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function
27831
27952
  *
27832
27953
  /* @conditional-compile-remove(rich-text-editor-composite-support)
27833
27954
  */
27834
- const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-DfoveBvm.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
27955
+ const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-BHdu0XqK.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
27835
27956
  /**
27836
27957
  * @private
27837
27958
  */
@@ -28982,7 +29103,6 @@ const createCompositeHandlers = memoizeOne((adapter, capabilities) => {
28982
29103
  onSetCaptionLanguage: (language) => __awaiter$k(void 0, void 0, void 0, function* () {
28983
29104
  yield adapter.setCaptionLanguage(language);
28984
29105
  }),
28985
- /* @conditional-compile-remove(end-of-call-survey) */
28986
29106
  onSubmitSurvey: (survey) => __awaiter$k(void 0, void 0, void 0, function* () {
28987
29107
  return yield adapter.submitSurvey(survey);
28988
29108
  }),
@@ -29019,7 +29139,11 @@ const createCompositeHandlers = memoizeOne((adapter, capabilities) => {
29019
29139
  ? (userIds) => __awaiter$k(void 0, void 0, void 0, function* () {
29020
29140
  yield adapter.stopSpotlight(userIds);
29021
29141
  })
29022
- : undefined
29142
+ : undefined,
29143
+ /* @conditional-compile-remove(soft-mute) */
29144
+ onMuteParticipant: (userId) => __awaiter$k(void 0, void 0, void 0, function* () {
29145
+ yield adapter.muteParticipant(userId);
29146
+ })
29023
29147
  };
29024
29148
  });
29025
29149
 
@@ -32526,13 +32650,17 @@ const usePeoplePane = (props) => {
32526
32650
  /* @conditional-compile-remove(spotlight) */
32527
32651
  onStopAllSpotlight,
32528
32652
  /* @conditional-compile-remove(spotlight) */
32529
- maxParticipantsToSpotlight } = props;
32653
+ maxParticipantsToSpotlight,
32654
+ /* @conditional-compile-remove(soft-mute) */
32655
+ onMuteParticipant } = props;
32530
32656
  const closePane = React.useCallback(() => {
32531
32657
  var _a;
32532
32658
  updateSidePaneRenderer(undefined);
32533
32659
  (_a = peopleButtonRef === null || peopleButtonRef === void 0 ? void 0 : peopleButtonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
32534
32660
  }, [peopleButtonRef, updateSidePaneRenderer]);
32535
32661
  const localeStrings = useLocale().strings.call;
32662
+ /* @conditional-compile-remove(soft-mute) */
32663
+ const remoteParticipants = useSelector$1(getRemoteParticipants);
32536
32664
  /* @conditional-compile-remove(spotlight) */
32537
32665
  const sidePaneHeaderMenuProps = React.useMemo(() => {
32538
32666
  const menuItems = [];
@@ -32552,11 +32680,15 @@ const usePeoplePane = (props) => {
32552
32680
  };
32553
32681
  }, [onStopAllSpotlight, spotlightedParticipantUserIds, localeStrings.stopAllSpotlightMenuLabel]);
32554
32682
  const onRenderHeader = React.useCallback(() => (React.createElement(SidePaneHeader, { onClose: closePane, headingText: localeStrings.peoplePaneTitle, dismissSidePaneButtonAriaLabel: localeStrings.dismissSidePaneButtonLabel, mobileView: mobileView !== null && mobileView !== void 0 ? mobileView : false })), [mobileView, closePane, localeStrings]);
32555
- /* @conditional-compile-remove(spotlight) */
32683
+ /* @conditional-compile-remove(spotlight) */ /* @conditional-compile-remove(soft-mute) */
32556
32684
  const onFetchParticipantMenuItemsForCallComposite = React.useCallback((participantId, myUserId, defaultMenuItems) => {
32685
+ var _a;
32557
32686
  const _defaultMenuItems = defaultMenuItems !== null && defaultMenuItems !== void 0 ? defaultMenuItems : [];
32687
+ /* @conditional-compile-remove(spotlight) */
32558
32688
  const isSpotlighted = spotlightedParticipantUserIds === null || spotlightedParticipantUserIds === void 0 ? void 0 : spotlightedParticipantUserIds.find((p) => p === participantId);
32689
+ /* @conditional-compile-remove(spotlight) */
32559
32690
  const isMe = myUserId === participantId;
32691
+ /* @conditional-compile-remove(spotlight) */
32560
32692
  if (isSpotlighted) {
32561
32693
  const stopSpotlightMenuText = isMe
32562
32694
  ? localeStrings.stopSpotlightOnSelfMenuLabel
@@ -32612,6 +32744,24 @@ const usePeoplePane = (props) => {
32612
32744
  });
32613
32745
  }
32614
32746
  }
32747
+ /* @conditional-compile-remove(soft-mute) */
32748
+ if (onMuteParticipant && !isMe) {
32749
+ const isMuted = remoteParticipants && ((_a = remoteParticipants[participantId]) === null || _a === void 0 ? void 0 : _a.isMuted);
32750
+ _defaultMenuItems.push({
32751
+ key: 'mute',
32752
+ text: 'Mute',
32753
+ iconProps: {
32754
+ iconName: 'ContextualMenuMicMutedIcon',
32755
+ styles: { root: { lineHeight: 0 } }
32756
+ },
32757
+ onClick: () => {
32758
+ onMuteParticipant(participantId);
32759
+ },
32760
+ 'data-ui-id': 'participant-item-mute-participant',
32761
+ ariaLabel: 'Mute',
32762
+ disabled: isMuted
32763
+ });
32764
+ }
32615
32765
  return onFetchParticipantMenuItems
32616
32766
  ? onFetchParticipantMenuItems(participantId, myUserId, _defaultMenuItems)
32617
32767
  : _defaultMenuItems;
@@ -32622,6 +32772,10 @@ const usePeoplePane = (props) => {
32622
32772
  onStartRemoteSpotlight,
32623
32773
  onStopRemoteSpotlight,
32624
32774
  onFetchParticipantMenuItems,
32775
+ /* @conditional-compile-remove(soft-mute) */
32776
+ onMuteParticipant,
32777
+ /* @conditional-compile-remove(soft-mute) */
32778
+ remoteParticipants,
32625
32779
  localeStrings.stopSpotlightMenuLabel,
32626
32780
  localeStrings.stopSpotlightOnSelfMenuLabel,
32627
32781
  localeStrings.addSpotlightMenuLabel,
@@ -33450,22 +33604,36 @@ const CallArrangement = (props) => {
33450
33604
  setParticipantActioned
33451
33605
  ]);
33452
33606
  const locale = useLocale();
33607
+ const role = (_b = adapter.getState().call) === null || _b === void 0 ? void 0 : _b.role;
33453
33608
  /* @conditional-compile-remove(spotlight) */
33454
33609
  const videoGalleryProps = usePropsFor$1(VideoGallery);
33455
33610
  /* @conditional-compile-remove(spotlight) */
33456
33611
  const { setPromptProps, setIsPromptOpen, hideSpotlightButtons } = props;
33457
33612
  /* @conditional-compile-remove(spotlight) */
33458
- const { onStartLocalSpotlight, onStopLocalSpotlight, onStartRemoteSpotlight, onStopRemoteSpotlight, spotlightedParticipants, maxParticipantsToSpotlight, localParticipant } = videoGalleryProps;
33613
+ const { onStartLocalSpotlight, onStopLocalSpotlight, onStartRemoteSpotlight, onStopRemoteSpotlight,
33614
+ /* @conditional-compile-remove(soft-mute) */
33615
+ onMuteParticipant, spotlightedParticipants, maxParticipantsToSpotlight, localParticipant } = videoGalleryProps;
33459
33616
  /* @conditional-compile-remove(spotlight) */
33460
33617
  const { onStartLocalSpotlightWithPrompt, onStopLocalSpotlightWithPrompt } = useLocalSpotlightCallbacksWithPrompt(onStartLocalSpotlight, onStopLocalSpotlight, setIsPromptOpen, setPromptProps);
33461
33618
  /* @conditional-compile-remove(spotlight) */
33462
33619
  const { onStartRemoteSpotlightWithPrompt, onStopRemoteSpotlightWithPrompt } = useRemoteSpotlightCallbacksWithPrompt(onStartRemoteSpotlight, onStopRemoteSpotlight, setIsPromptOpen, setPromptProps);
33463
33620
  /* @conditional-compile-remove(spotlight) */
33464
- const canRemoveSpotlight = (_c = (_b = adapter.getState().call) === null || _b === void 0 ? void 0 : _b.capabilitiesFeature) === null || _c === void 0 ? void 0 : _c.capabilities.removeParticipantsSpotlight.isPresent;
33621
+ const canRemoveSpotlight = (_d = (_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.capabilitiesFeature) === null || _d === void 0 ? void 0 : _d.capabilities.removeParticipantsSpotlight.isPresent;
33465
33622
  /* @conditional-compile-remove(spotlight) */
33466
33623
  const stopAllSpotlight = React.useMemo(() => (canRemoveSpotlight ? () => adapter.stopAllSpotlight() : undefined), [canRemoveSpotlight, adapter]);
33467
33624
  /* @conditional-compile-remove(spotlight) */
33468
33625
  const { stopAllSpotlightWithPrompt } = useStopAllSpotlightCallbackWithPrompt(stopAllSpotlight, setIsPromptOpen, setPromptProps);
33626
+ const onMuteParticipantPeoplePaneProps = React.useMemo(() => {
33627
+ /* @conditional-compile-remove(soft-mute) */
33628
+ return {
33629
+ onMuteParticipant: ['Unknown', 'Organizer', 'Presenter', 'Co-organizer'].includes(role !== null && role !== void 0 ? role : '')
33630
+ ? onMuteParticipant
33631
+ : undefined
33632
+ };
33633
+ }, [
33634
+ /* @conditional-compile-remove(soft-mute) */ onMuteParticipant,
33635
+ /* @conditional-compile-remove(soft-mute) */ role
33636
+ ]);
33469
33637
  const spotlightPeoplePaneProps = React.useMemo(() => {
33470
33638
  /* @conditional-compile-remove(spotlight) */
33471
33639
  return {
@@ -33487,7 +33655,7 @@ const CallArrangement = (props) => {
33487
33655
  /* @conditional-compile-remove(spotlight) */ stopAllSpotlightWithPrompt,
33488
33656
  /* @conditional-compile-remove(spotlight) */ spotlightedParticipants
33489
33657
  ]);
33490
- const { isPeoplePaneOpen, openPeoplePane, closePeoplePane } = usePeoplePane(Object.assign(Object.assign({}, peoplePaneProps), spotlightPeoplePaneProps));
33658
+ const { isPeoplePaneOpen, openPeoplePane, closePeoplePane } = usePeoplePane(Object.assign(Object.assign(Object.assign({}, peoplePaneProps), spotlightPeoplePaneProps), onMuteParticipantPeoplePaneProps));
33491
33659
  const togglePeoplePane = React.useCallback(() => {
33492
33660
  if (isPeoplePaneOpen) {
33493
33661
  closePeoplePane();
@@ -33538,7 +33706,6 @@ const CallArrangement = (props) => {
33538
33706
  togglePeoplePane();
33539
33707
  }, [togglePeoplePane]);
33540
33708
  const drawerContainerStylesValue = React.useMemo(() => drawerContainerStyles(DRAWER_Z_INDEX), []);
33541
- const role = (_d = adapter.getState().call) === null || _d === void 0 ? void 0 : _d.role;
33542
33709
  const canUnmute = role !== 'Consumer' ? true : false;
33543
33710
  let filteredLatestErrors = props.errorBarProps !== false ? props.latestErrors : [];
33544
33711
  const isCameraOn = useSelector$1(localVideoSelector).isAvailable;
@@ -33746,7 +33913,11 @@ const MediaGallery = (props) => {
33746
33913
  /* @conditional-compile-remove(spotlight) */
33747
33914
  onStartRemoteSpotlight: hideSpotlightButtons ? undefined : onStartRemoteSpotlightWithPrompt,
33748
33915
  /* @conditional-compile-remove(spotlight) */
33749
- onStopRemoteSpotlight: hideSpotlightButtons ? undefined : onStopRemoteSpotlightWithPrompt })));
33916
+ onStopRemoteSpotlight: hideSpotlightButtons ? undefined : onStopRemoteSpotlightWithPrompt,
33917
+ /* @conditional-compile-remove(soft-mute) */
33918
+ onMuteParticipant: ['Unknown', 'Organizer', 'Presenter', 'Co-organizer'].includes(userRole !== null && userRole !== void 0 ? userRole : '')
33919
+ ? videoGalleryProps.onMuteParticipant
33920
+ : undefined })));
33750
33921
  }, [
33751
33922
  videoGalleryProps,
33752
33923
  props.isMobile,
@@ -36101,13 +36272,9 @@ const useEndedCallConsoleErrors = (endedCall) => {
36101
36272
  // Copyright (c) Microsoft Corporation.
36102
36273
  // Licensed under the MIT License.
36103
36274
  /** @private */
36104
- const StarSurvey = (
36105
- /* @conditional-compile-remove(end-of-call-survey) */ props) => {
36106
- /* @conditional-compile-remove(end-of-call-survey) */
36275
+ const StarSurvey = (props) => {
36107
36276
  const { onStarRatingSelected } = props;
36108
- /* @conditional-compile-remove(end-of-call-survey) */
36109
36277
  const strings = useLocale().strings.call;
36110
- /* @conditional-compile-remove(end-of-call-survey) */
36111
36278
  const StarSurveyStrings = {
36112
36279
  starSurveyHelperText: strings.starSurveyHelperText,
36113
36280
  starSurveyOneStarText: strings.starSurveyOneStarText,
@@ -36117,24 +36284,19 @@ const StarSurvey = (
36117
36284
  starSurveyFiveStarText: strings.starSurveyFiveStarText,
36118
36285
  starRatingAriaLabel: strings.starRatingAriaLabel
36119
36286
  };
36120
- /* @conditional-compile-remove(end-of-call-survey) */
36121
36287
  return React.createElement(_StarSurvey, { strings: StarSurveyStrings, onStarRatingSelected: onStarRatingSelected });
36122
36288
  };
36123
36289
 
36124
36290
  // Copyright (c) Microsoft Corporation.
36125
36291
  // Licensed under the MIT License.
36126
36292
  /** @private */
36127
- const TagsSurvey = (
36128
- /* @conditional-compile-remove(end-of-call-survey) */ props) => {
36129
- /* @conditional-compile-remove(end-of-call-survey) */
36293
+ const TagsSurvey = (props) => {
36130
36294
  const strings = useLocale().strings.call;
36131
- /* @conditional-compile-remove(end-of-call-survey) */
36132
36295
  const tagsSurveyStrings = {
36133
36296
  tagsSurveyQuestion: strings.tagsSurveyQuestion,
36134
36297
  tagsSurveyHelperText: strings.tagsSurveyHelperText,
36135
36298
  tagsSurveyTextFieldDefaultText: strings.tagsSurveyTextFieldDefaultText
36136
36299
  };
36137
- /* @conditional-compile-remove(end-of-call-survey) */
36138
36300
  return (React.createElement(_TagsSurvey, { callIssuesToTag: strings.surveyIssues, categoryHeadings: strings.surveyIssuesHeadingStrings, onConfirm: props.onConfirm, strings: tagsSurveyStrings, showFreeFormTextField: props.showFreeFormTextField }));
36139
36301
  };
36140
36302
 
@@ -36143,11 +36305,8 @@ const TagsSurvey = (
36143
36305
  /**
36144
36306
  * @private
36145
36307
  */
36146
- const SurveyContent = (
36147
- /* @conditional-compile-remove(end-of-call-survey) */ props) => {
36148
- /* @conditional-compile-remove(end-of-call-survey) */
36308
+ const SurveyContent = (props) => {
36149
36309
  const [showTagsSurvey, setShowTagsSurvey] = React.useState(false);
36150
- /* @conditional-compile-remove(end-of-call-survey) */
36151
36310
  const onStarRatingSelected = (ratings) => {
36152
36311
  if (ratings < 5) {
36153
36312
  setShowTagsSurvey(true);
@@ -36158,7 +36317,6 @@ const SurveyContent = (
36158
36317
  }
36159
36318
  props.setRatings(ratings);
36160
36319
  };
36161
- /* @conditional-compile-remove(end-of-call-survey) */
36162
36320
  const onIssuesSelected = (selectedTags, improvementSuggestions) => {
36163
36321
  props.setIssuesSelected(selectedTags);
36164
36322
  props.setShowSubmitFeedbackButton(true);
@@ -36166,7 +36324,6 @@ const SurveyContent = (
36166
36324
  props.setImprovementSuggestions(improvementSuggestions);
36167
36325
  }
36168
36326
  };
36169
- /* @conditional-compile-remove(end-of-call-survey) */
36170
36327
  return (React.createElement(react.Stack, { "data-ui-id": "call-composite-survey" },
36171
36328
  React.createElement(StarSurvey, { onStarRatingSelected: onStarRatingSelected }),
36172
36329
  showTagsSurvey && (React.createElement(TagsSurvey, { onConfirm: onIssuesSelected, showFreeFormTextField: !(props.setImprovementSuggestions === undefined) }))));
@@ -36178,11 +36335,8 @@ const SurveyContent = (
36178
36335
  * Page shown after the survey is submitted.
36179
36336
  * @private
36180
36337
  */
36181
- function ThankYouForFeedbackPage(
36182
- /* @conditional-compile-remove(end-of-call-survey) */ props) {
36183
- /* @conditional-compile-remove(end-of-call-survey) */
36338
+ function ThankYouForFeedbackPage(props) {
36184
36339
  const strings = useLocale().strings.call;
36185
- /* @conditional-compile-remove(end-of-call-survey) */
36186
36340
  return (React.createElement(react.Stack, { verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": 'thank-you-page', "aria-atomic": true },
36187
36341
  React.createElement(react.Stack, { className: react.mergeStyles(containerStyle), tokens: containerItemGap },
36188
36342
  props.iconName && React.createElement(CallCompositeIcon, { iconName: props.iconName }),
@@ -36191,8 +36345,6 @@ function ThankYouForFeedbackPage(
36191
36345
 
36192
36346
  // Copyright (c) Microsoft Corporation.
36193
36347
  // Licensed under the MIT License.
36194
- /* @conditional-compile-remove(end-of-call-survey) */
36195
- /* @conditional-compile-remove(end-of-call-survey) */
36196
36348
  /**
36197
36349
  * @private
36198
36350
  */
@@ -36202,7 +36354,6 @@ const questionTextStyle = (theme) => react.mergeStyles({
36202
36354
  lineHeight: _pxToRem(20),
36203
36355
  color: theme.palette.neutralPrimary
36204
36356
  });
36205
- /* @conditional-compile-remove(end-of-call-survey) */
36206
36357
  /**
36207
36358
  * @private
36208
36359
  */
@@ -36235,27 +36386,16 @@ var __awaiter$8 = (window && window.__awaiter) || function (thisArg, _arguments,
36235
36386
  };
36236
36387
  /** @private */
36237
36388
  const Survey = (props) => {
36238
- /* @conditional-compile-remove(end-of-call-survey) */
36239
36389
  const { onSubmitSurvey, onSurveySubmittedCustom, onSurveyClosed, iconName, title, moreDetails, disableStartCallButton, isMobile } = props;
36240
- /* @conditional-compile-remove(end-of-call-survey) */
36241
36390
  const strings = useLocale().strings.call;
36242
- /* @conditional-compile-remove(end-of-call-survey) */
36243
36391
  const [ratings, setRatings] = React.useState(0);
36244
- /* @conditional-compile-remove(end-of-call-survey) */
36245
36392
  const [issuesSelected, setIssuesSelected] = React.useState();
36246
- /* @conditional-compile-remove(end-of-call-survey) */
36247
36393
  const [showSubmitFeedbackButton, setShowSubmitFeedbackButton] = React.useState(false);
36248
- /* @conditional-compile-remove(end-of-call-survey) */
36249
36394
  const [improvementSuggestions, setImprovementSuggestions] = React.useState({});
36250
- /* @conditional-compile-remove(end-of-call-survey) */
36251
36395
  const [showDefaultAfterSubmitScreen, setShowDefaultAfterSubmitScreen] = React.useState(false);
36252
- /* @conditional-compile-remove(end-of-call-survey) */
36253
36396
  const [showDefaultAfterDismissedScreen, setShowDefaultAfterDismissedScreen] = React.useState(false);
36254
- /* @conditional-compile-remove(end-of-call-survey) */
36255
36397
  const [submitButtonDisabled, setSubmitButtonDisabled] = React.useState(false);
36256
- /* @conditional-compile-remove(end-of-call-survey) */
36257
36398
  const theme = react.useTheme();
36258
- /* @conditional-compile-remove(end-of-call-survey) */
36259
36399
  return (React.createElement(React.Fragment, null,
36260
36400
  showDefaultAfterSubmitScreen && React.createElement(ThankYouForFeedbackPage, { iconName: iconName }),
36261
36401
  showDefaultAfterDismissedScreen && (React.createElement(NoticePage, { iconName: iconName, title: title, moreDetails: moreDetails, dataUiId: 'left-call-page', disableStartCallButton: disableStartCallButton })),
@@ -36344,9 +36484,7 @@ const Survey = (props) => {
36344
36484
  */
36345
36485
  function SurveyPage(props) {
36346
36486
  var _a, _b;
36347
- /* @conditional-compile-remove(end-of-call-survey) */
36348
36487
  const handlers = useHandlers();
36349
- /* @conditional-compile-remove(end-of-call-survey) */
36350
36488
  return (React.createElement(react.Stack, { verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": props.dataUiId, "aria-atomic": true },
36351
36489
  React.createElement(react.Stack, { className: react.mergeStyles(containerStyle$1), tokens: containerItemGap },
36352
36490
  React.createElement(Survey, Object.assign({}, handlers, props, { onSurveySubmittedCustom: (_a = props.surveyOptions) === null || _a === void 0 ? void 0 : _a.onSurveySubmitted, onSurveyClosed: (_b = props.surveyOptions) === null || _b === void 0 ? void 0 : _b.onSurveyClosed, isMobile: props.mobileView })))));
@@ -36486,7 +36624,6 @@ const MainScreen = (props) => {
36486
36624
  }
36487
36625
  case 'leftCall': {
36488
36626
  const { title, moreDetails, disableStartCallButton, iconName } = getEndedCallPageProps(locale, endedCall);
36489
- /* @conditional-compile-remove(end-of-call-survey) */
36490
36627
  if (!((_o = (_m = props.options) === null || _m === void 0 ? void 0 : _m.surveyOptions) === null || _o === void 0 ? void 0 : _o.disableSurvey)) {
36491
36628
  pageElement = (React.createElement(SurveyPage, { dataUiId: 'left-call-page', surveyOptions: (_p = props.options) === null || _p === void 0 ? void 0 : _p.surveyOptions, iconName: iconName, title: title, moreDetails: moreDetails, disableStartCallButton: disableStartCallButton, mobileView: props.mobileView }));
36492
36629
  break;
@@ -37129,7 +37266,6 @@ class AzureCommunicationCallAdapter {
37129
37266
  this.startVideoBackgroundEffect.bind(this);
37130
37267
  this.stopVideoBackgroundEffects.bind(this);
37131
37268
  this.updateBackgroundPickerImages.bind(this);
37132
- /* @conditional-compile-remove(end-of-call-survey) */
37133
37269
  this.submitSurvey.bind(this);
37134
37270
  /* @conditional-compile-remove(spotlight) */
37135
37271
  this.startSpotlight.bind(this);
@@ -37137,6 +37273,8 @@ class AzureCommunicationCallAdapter {
37137
37273
  this.stopSpotlight.bind(this);
37138
37274
  /* @conditional-compile-remove(spotlight) */
37139
37275
  this.stopAllSpotlight.bind(this);
37276
+ /* @conditional-compile-remove(soft-mute) */
37277
+ this.muteParticipant.bind(this);
37140
37278
  }
37141
37279
  dispose() {
37142
37280
  this.resetDiagnosticsForwarder();
@@ -37588,12 +37726,17 @@ class AzureCommunicationCallAdapter {
37588
37726
  this.handlers.onSetSpokenLanguage(language);
37589
37727
  });
37590
37728
  }
37591
- /* @conditional-compile-remove(end-of-call-survey) */
37592
37729
  submitSurvey(survey) {
37593
37730
  return __awaiter$5(this, void 0, void 0, function* () {
37594
37731
  return this.handlers.onSubmitSurvey(survey);
37595
37732
  });
37596
37733
  }
37734
+ /* @conditional-compile-remove(soft-mute) */
37735
+ muteParticipant(userId) {
37736
+ return __awaiter$5(this, void 0, void 0, function* () {
37737
+ this.handlers.onMuteParticipant(userId);
37738
+ });
37739
+ }
37597
37740
  /* @conditional-compile-remove(spotlight) */
37598
37741
  startSpotlight(userIds) {
37599
37742
  return __awaiter$5(this, void 0, void 0, function* () {
@@ -38370,7 +38513,6 @@ class CallWithChatBackedCallAdapter {
38370
38513
  updateSelectedVideoBackgroundEffect(selectedVideoBackground) {
38371
38514
  return this.callWithChatAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);
38372
38515
  }
38373
- /* @conditional-compile-remove(end-of-call-survey) */
38374
38516
  submitSurvey(survey) {
38375
38517
  return __awaiter$4(this, void 0, void 0, function* () {
38376
38518
  return this.callWithChatAdapter.submitSurvey(survey);
@@ -38394,6 +38536,12 @@ class CallWithChatBackedCallAdapter {
38394
38536
  return this.callWithChatAdapter.stopAllSpotlight();
38395
38537
  });
38396
38538
  }
38539
+ /* @conditional-compile-remove(soft-mute) */
38540
+ muteParticipant(userId) {
38541
+ return __awaiter$4(this, void 0, void 0, function* () {
38542
+ return this.callWithChatAdapter.muteParticipant(userId);
38543
+ });
38544
+ }
38397
38545
  }
38398
38546
  function callAdapterStateFromCallWithChatAdapterState(callWithChatAdapterState) {
38399
38547
  return {
@@ -38707,7 +38855,6 @@ const validNewChatMessage = (message) => !!message.senderDisplayName && (message
38707
38855
  // Licensed under the MIT License.
38708
38856
  const CallWithChatScreen = (props) => {
38709
38857
  const { callWithChatAdapter, fluentTheme, formFactor = 'desktop' } = props;
38710
- /* @conditional-compile-remove(end-of-call-survey) */
38711
38858
  const { surveyOptions } = props;
38712
38859
  const mobileView = formFactor === 'mobile';
38713
38860
  if (!callWithChatAdapter) {
@@ -38822,7 +38969,6 @@ const CallWithChatScreen = (props) => {
38822
38969
  remoteVideoTileMenuOptions: props.remoteVideoTileMenuOptions,
38823
38970
  galleryOptions: props.galleryOptions,
38824
38971
  localVideoTile: props.localVideoTile,
38825
- /* @conditional-compile-remove(end-of-call-survey) */
38826
38972
  surveyOptions: surveyOptions,
38827
38973
  branding: {
38828
38974
  logo: props.logo,
@@ -38847,7 +38993,6 @@ const CallWithChatScreen = (props) => {
38847
38993
  props.galleryOptions,
38848
38994
  props.localVideoTile,
38849
38995
  props.remoteVideoTileMenuOptions,
38850
- /* @conditional-compile-remove(end-of-call-survey) */
38851
38996
  surveyOptions,
38852
38997
  props.logo,
38853
38998
  props.backgroundImage,
@@ -38917,9 +39062,7 @@ const CallWithChatComposite = (props) => {
38917
39062
  /* @conditional-compile-remove(call-readiness) */
38918
39063
  deviceChecks: options === null || options === void 0 ? void 0 : options.deviceChecks, callWithChatAdapter: adapter, formFactor: formFactor, callControls: options === null || options === void 0 ? void 0 : options.callControls, joinInvitationURL: joinInvitationURL, fluentTheme: fluentTheme, remoteVideoTileMenuOptions: options === null || options === void 0 ? void 0 : options.remoteVideoTileMenuOptions,
38919
39064
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
38920
- attachmentOptions: options === null || options === void 0 ? void 0 : options.attachmentOptions, localVideoTile: options === null || options === void 0 ? void 0 : options.localVideoTile, galleryOptions: options === null || options === void 0 ? void 0 : options.galleryOptions, logo: (_a = options === null || options === void 0 ? void 0 : options.branding) === null || _a === void 0 ? void 0 : _a.logo, backgroundImage: (_b = options === null || options === void 0 ? void 0 : options.branding) === null || _b === void 0 ? void 0 : _b.backgroundImage,
38921
- /* @conditional-compile-remove(end-of-call-survey) */
38922
- surveyOptions: options === null || options === void 0 ? void 0 : options.surveyOptions,
39065
+ attachmentOptions: options === null || options === void 0 ? void 0 : options.attachmentOptions, localVideoTile: options === null || options === void 0 ? void 0 : options.localVideoTile, galleryOptions: options === null || options === void 0 ? void 0 : options.galleryOptions, logo: (_a = options === null || options === void 0 ? void 0 : options.branding) === null || _a === void 0 ? void 0 : _a.logo, backgroundImage: (_b = options === null || options === void 0 ? void 0 : options.branding) === null || _b === void 0 ? void 0 : _b.backgroundImage, surveyOptions: options === null || options === void 0 ? void 0 : options.surveyOptions,
38923
39066
  /* @conditional-compile-remove(spotlight) */
38924
39067
  spotlight: options === null || options === void 0 ? void 0 : options.spotlight }))));
38925
39068
  };
@@ -39452,7 +39595,6 @@ class AzureCommunicationCallWithChatAdapter {
39452
39595
  updateSelectedVideoBackgroundEffect(selectedVideoBackground) {
39453
39596
  return this.callAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);
39454
39597
  }
39455
- /* @conditional-compile-remove(end-of-call-survey) */
39456
39598
  submitSurvey(survey) {
39457
39599
  return __awaiter$2(this, void 0, void 0, function* () {
39458
39600
  return this.callAdapter.submitSurvey(survey);
@@ -39476,6 +39618,12 @@ class AzureCommunicationCallWithChatAdapter {
39476
39618
  return this.callAdapter.stopAllSpotlight();
39477
39619
  });
39478
39620
  }
39621
+ /* @conditional-compile-remove(soft-mute) */
39622
+ muteParticipant(userId) {
39623
+ return __awaiter$2(this, void 0, void 0, function* () {
39624
+ return this.callAdapter.muteParticipant(userId);
39625
+ });
39626
+ }
39479
39627
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
39480
39628
  on(event, listener) {
39481
39629
  switch (event) {
@@ -40539,4 +40687,4 @@ exports.useTeamsCall = useTeamsCall;
40539
40687
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
40540
40688
  exports.useTeamsCallAgent = useTeamsCallAgent;
40541
40689
  exports.useTheme = useTheme;
40542
- //# sourceMappingURL=index-CYkd_Ir9.js.map
40690
+ //# sourceMappingURL=index-HwuTcEP-.js.map