@azure/communication-react 1.18.0-alpha-202407050014 → 1.18.0-alpha-202407060013

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 (107) hide show
  1. package/dist/communication-react.d.ts +117 -27
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-DeZQ3bKG.js → ChatMessageComponentAsRichTextEditBox-DMEk2o-G.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-DeZQ3bKG.js.map → ChatMessageComponentAsRichTextEditBox-DMEk2o-G.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-D63MoVhd.js → RichTextSendBoxWrapper-ByJFtf0Z.js} +2 -2
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-D63MoVhd.js.map → RichTextSendBoxWrapper-ByJFtf0Z.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-xFes8-H4.js → index-BPO9X27C.js} +832 -518
  7. package/dist/dist-cjs/communication-react/index-BPO9X27C.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/common.d.ts +13 -0
  10. package/dist/dist-esm/acs-ui-common/src/common.js.map +1 -1
  11. package/dist/dist-esm/acs-ui-common/src/dataConversion.d.ts +6 -0
  12. package/dist/dist-esm/acs-ui-common/src/dataConversion.js +17 -0
  13. package/dist/dist-esm/acs-ui-common/src/dataConversion.js.map +1 -0
  14. package/dist/dist-esm/acs-ui-common/src/index.d.ts +2 -0
  15. package/dist/dist-esm/acs-ui-common/src/index.js +2 -0
  16. package/dist/dist-esm/acs-ui-common/src/index.js.map +1 -1
  17. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  18. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  19. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +1 -1
  20. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  21. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.d.ts +3 -0
  22. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.js +15 -0
  23. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.js.map +1 -1
  24. package/dist/dist-esm/communication-react/src/index.d.ts +1 -0
  25. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/MessageStatusIndicatorInternal.js +1 -1
  27. package/dist/dist-esm/react-components/src/components/MessageStatusIndicatorInternal.js.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/NotificationStack.d.ts +58 -26
  29. package/dist/dist-esm/react-components/src/components/NotificationStack.js.map +1 -1
  30. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.d.ts +6 -0
  31. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js +27 -1
  32. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/UpdateContentPlugin.d.ts +1 -1
  34. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/UpdateContentPlugin.js +27 -1
  35. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/UpdateContentPlugin.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.d.ts +2 -1
  37. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +24 -12
  38. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.d.ts +2 -1
  40. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js +6 -2
  41. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js.map +1 -1
  42. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +16 -0
  43. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +73 -15
  44. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
  45. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +6 -3
  46. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -1
  47. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +4 -0
  48. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +15 -0
  49. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
  50. package/dist/dist-esm/react-components/src/components/utils.js +16 -1
  51. package/dist/dist-esm/react-components/src/components/utils.js.map +1 -1
  52. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +40 -0
  53. package/dist/dist-esm/react-components/src/theming/icons.d.ts +1 -0
  54. package/dist/dist-esm/react-components/src/theming/icons.js +4 -0
  55. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  56. package/dist/dist-esm/react-components/src/types/Attachment.d.ts +4 -0
  57. package/dist/dist-esm/react-components/src/types/Attachment.js.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +65 -13
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts +1 -0
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +8 -3
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.d.ts +1 -0
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +6 -2
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.d.ts +1 -0
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.js +3 -1
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/HoldPage.js.map +1 -1
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.d.ts +1 -0
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js +3 -1
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js.map +1 -1
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js +5 -1
  73. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js.map +1 -1
  74. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/TrackErrors.d.ts +6 -6
  75. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/TrackErrors.js +22 -20
  76. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/TrackErrors.js.map +1 -1
  77. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +47 -0
  78. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +104 -0
  79. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  80. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +5 -0
  81. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +22 -0
  82. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  83. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +13 -0
  84. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  85. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.d.ts +5 -0
  86. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js +16 -0
  87. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js.map +1 -1
  88. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +19 -2
  89. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  90. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +3 -0
  91. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +20 -0
  92. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.d.ts +9 -0
  94. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.js.map +1 -1
  95. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.d.ts +1 -1
  96. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.js.map +1 -1
  97. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useHandlers.js +4 -0
  98. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useHandlers.js.map +1 -1
  99. package/dist/dist-esm/react-composites/src/composites/ChatComposite/image-upload/useImageUpload.d.ts +12 -0
  100. package/dist/dist-esm/react-composites/src/composites/ChatComposite/image-upload/useImageUpload.js +129 -0
  101. package/dist/dist-esm/react-composites/src/composites/ChatComposite/image-upload/useImageUpload.js.map +1 -0
  102. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.d.ts +3 -0
  103. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js +1 -2
  104. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -1
  105. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +1 -0
  106. package/package.json +2 -2
  107. package/dist/dist-cjs/communication-react/index-xFes8-H4.js.map +0 -1
@@ -175,7 +175,7 @@ function getDefaultExportFromCjs (x) {
175
175
  // Copyright (c) Microsoft Corporation.
176
176
  // Licensed under the MIT License.
177
177
  // GENERATED FILE. DO NOT EDIT MANUALLY.
178
- var telemetryVersion = '1.18.0-alpha-202407050014';
178
+ var telemetryVersion = '1.18.0-alpha-202407060013';
179
179
 
180
180
 
181
181
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -343,6 +343,23 @@ function _getKeys(obj) {
343
343
  return Object.keys(obj);
344
344
  }
345
345
 
346
+ // Copyright (c) Microsoft Corporation.
347
+ // Licensed under the MIT License.
348
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
349
+ /**
350
+ * Convert a base64 string to a Blob.
351
+ * @internal
352
+ */
353
+ const _base64ToBlob = (dataURI) => {
354
+ const byteString = atob(dataURI.split(',')[1]);
355
+ const arrayBuffer = new ArrayBuffer(byteString.length);
356
+ const uint8Array = new Uint8Array(arrayBuffer);
357
+ for (let i = 0; i < byteString.length; i++) {
358
+ uint8Array[i] = byteString.charCodeAt(i);
359
+ }
360
+ return new Blob([arrayBuffer]);
361
+ };
362
+
346
363
  // Copyright (c) Microsoft Corporation.
347
364
  // Licensed under the MIT License.
348
365
  /**
@@ -512,7 +529,7 @@ const getSupportedSpokenLanguages = (state, props) => {
512
529
 
513
530
  // Copyright (c) Microsoft Corporation.
514
531
  // Licensed under the MIT License.
515
- var __awaiter$S = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
532
+ var __awaiter$T = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
516
533
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
517
534
  return new (P || (P = Promise))(function (resolve, reject) {
518
535
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -551,7 +568,7 @@ const _isPreviewOn = (deviceManager) => {
551
568
  *
552
569
  * @private
553
570
  */
554
- const disposeAllLocalPreviewViews = (callClient) => __awaiter$S(void 0, void 0, void 0, function* () {
571
+ const disposeAllLocalPreviewViews = (callClient) => __awaiter$T(void 0, void 0, void 0, function* () {
555
572
  const unparentedViews = callClient.getState().deviceManager.unparentedViews;
556
573
  for (const view of unparentedViews) {
557
574
  yield callClient.disposeView(undefined, undefined, view);
@@ -728,7 +745,7 @@ const holdButtonSelector = reselect__namespace.createSelector([getCallState], (c
728
745
 
729
746
  // Copyright (c) Microsoft Corporation.
730
747
  // Licensed under the MIT License.
731
- var __awaiter$R = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
748
+ var __awaiter$S = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
732
749
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
733
750
  return new (P || (P = Promise))(function (resolve, reject) {
734
751
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -749,7 +766,7 @@ const areStreamsEqual = (prevStream, newStream) => {
749
766
  * @private
750
767
  */
751
768
  const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager, call, options) => {
752
- const onStartLocalVideo = () => __awaiter$R(void 0, void 0, void 0, function* () {
769
+ const onStartLocalVideo = () => __awaiter$S(void 0, void 0, void 0, function* () {
753
770
  // Before the call object creates a stream, dispose of any local preview streams.
754
771
  // @TODO: is there any way to parent the unparented view to the call object instead
755
772
  // of disposing and creating a new stream?
@@ -769,7 +786,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
769
786
  yield call.startVideo(stream);
770
787
  }
771
788
  });
772
- const onStopLocalVideo = (stream) => __awaiter$R(void 0, void 0, void 0, function* () {
789
+ const onStopLocalVideo = (stream) => __awaiter$S(void 0, void 0, void 0, function* () {
773
790
  const callId = call === null || call === void 0 ? void 0 : call.id;
774
791
  if (!callId) {
775
792
  return;
@@ -778,7 +795,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
778
795
  yield call.stopVideo(stream);
779
796
  }
780
797
  });
781
- const onToggleCamera = (options) => __awaiter$R(void 0, void 0, void 0, function* () {
798
+ const onToggleCamera = (options) => __awaiter$S(void 0, void 0, void 0, function* () {
782
799
  const previewOn = _isPreviewOn(callClient.getState().deviceManager);
783
800
  // the disposal of the unparented views is to workaround: https://skype.visualstudio.com/SPOOL/_workitems/edit/3030558.
784
801
  // The root cause of the issue is caused by never transitioning the unparented view to the
@@ -835,19 +852,19 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
835
852
  }
836
853
  }
837
854
  });
838
- const onSelectMicrophone = (device) => __awaiter$R(void 0, void 0, void 0, function* () {
855
+ const onSelectMicrophone = (device) => __awaiter$S(void 0, void 0, void 0, function* () {
839
856
  if (!deviceManager) {
840
857
  return;
841
858
  }
842
859
  return deviceManager.selectMicrophone(device);
843
860
  });
844
- const onSelectSpeaker = (device) => __awaiter$R(void 0, void 0, void 0, function* () {
861
+ const onSelectSpeaker = (device) => __awaiter$S(void 0, void 0, void 0, function* () {
845
862
  if (!deviceManager) {
846
863
  return;
847
864
  }
848
865
  return deviceManager.selectSpeaker(device);
849
866
  });
850
- const onSelectCamera = (device, options) => __awaiter$R(void 0, void 0, void 0, function* () {
867
+ const onSelectCamera = (device, options) => __awaiter$S(void 0, void 0, void 0, function* () {
851
868
  if (!deviceManager) {
852
869
  return;
853
870
  }
@@ -877,9 +894,9 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
877
894
  }, options);
878
895
  }
879
896
  });
880
- const onRaiseHand = () => __awaiter$R(void 0, void 0, void 0, function* () { var _a; return yield ((_a = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _a === void 0 ? void 0 : _a.raiseHand()); });
881
- const onLowerHand = () => __awaiter$R(void 0, void 0, void 0, function* () { var _b; return yield ((_b = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _b === void 0 ? void 0 : _b.lowerHand()); });
882
- const onToggleRaiseHand = () => __awaiter$R(void 0, void 0, void 0, function* () {
897
+ const onRaiseHand = () => __awaiter$S(void 0, void 0, void 0, function* () { var _a; return yield ((_a = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _a === void 0 ? void 0 : _a.raiseHand()); });
898
+ const onLowerHand = () => __awaiter$S(void 0, void 0, void 0, function* () { var _b; return yield ((_b = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _b === void 0 ? void 0 : _b.lowerHand()); });
899
+ const onToggleRaiseHand = () => __awaiter$S(void 0, void 0, void 0, function* () {
883
900
  const raiseHandFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand);
884
901
  const localUserId = callClient.getState().userId;
885
902
  const isLocalRaisedHand = raiseHandFeature === null || raiseHandFeature === void 0 ? void 0 : raiseHandFeature.getRaisedHands().find((publishedState) => toFlatCommunicationIdentifier(publishedState.identifier) === toFlatCommunicationIdentifier(localUserId));
@@ -890,7 +907,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
890
907
  yield (raiseHandFeature === null || raiseHandFeature === void 0 ? void 0 : raiseHandFeature.raiseHand());
891
908
  }
892
909
  });
893
- const onReactionClick = (reaction) => __awaiter$R(void 0, void 0, void 0, function* () {
910
+ const onReactionClick = (reaction) => __awaiter$S(void 0, void 0, void 0, function* () {
894
911
  var _c;
895
912
  if (reaction === 'like' ||
896
913
  reaction === 'applause' ||
@@ -904,19 +921,19 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
904
921
  }
905
922
  return;
906
923
  });
907
- const onToggleMicrophone = () => __awaiter$R(void 0, void 0, void 0, function* () {
924
+ const onToggleMicrophone = () => __awaiter$S(void 0, void 0, void 0, function* () {
908
925
  if (!call || !(_isInCall(call.state) || _isInLobbyOrConnecting(call.state))) {
909
926
  throw new Error(`Please invoke onToggleMicrophone after call is started`);
910
927
  }
911
928
  return call.isMuted ? yield call.unmute() : yield call.mute();
912
929
  });
913
- const onStartScreenShare = () => __awaiter$R(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
914
- const onStopScreenShare = () => __awaiter$R(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
915
- const onToggleScreenShare = () => __awaiter$R(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
916
- const onHangUp = (forEveryone) => __awaiter$R(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
930
+ const onStartScreenShare = () => __awaiter$S(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
931
+ const onStopScreenShare = () => __awaiter$S(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
932
+ const onToggleScreenShare = () => __awaiter$S(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
933
+ const onHangUp = (forEveryone) => __awaiter$S(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
917
934
  /* @conditional-compile-remove(PSTN-calls) */
918
- const onToggleHold = () => __awaiter$R(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.state) === 'LocalHold' ? yield (call === null || call === void 0 ? void 0 : call.resume()) : yield (call === null || call === void 0 ? void 0 : call.hold()); });
919
- const onCreateLocalStreamView = (...args_1) => __awaiter$R(void 0, [...args_1], void 0, function* (options = { scalingMode: 'Crop', isMirrored: true }) {
935
+ const onToggleHold = () => __awaiter$S(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.state) === 'LocalHold' ? yield (call === null || call === void 0 ? void 0 : call.resume()) : yield (call === null || call === void 0 ? void 0 : call.hold()); });
936
+ const onCreateLocalStreamView = (...args_1) => __awaiter$S(void 0, [...args_1], void 0, function* (options = { scalingMode: 'Crop', isMirrored: true }) {
920
937
  var _d;
921
938
  if (!call || call.localVideoStreams.length === 0) {
922
939
  return;
@@ -932,7 +949,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
932
949
  const { view } = (_d = (yield callClient.createView(call.id, undefined, localStream, options))) !== null && _d !== void 0 ? _d : {};
933
950
  return view ? { view } : undefined;
934
951
  });
935
- const onCreateRemoteStreamView = (userId_1, ...args_2) => __awaiter$R(void 0, [userId_1, ...args_2], void 0, function* (userId, options = { scalingMode: 'Crop' }) {
952
+ const onCreateRemoteStreamView = (userId_1, ...args_2) => __awaiter$S(void 0, [userId_1, ...args_2], void 0, function* (userId, options = { scalingMode: 'Crop' }) {
936
953
  if (!call) {
937
954
  return;
938
955
  }
@@ -969,7 +986,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
969
986
  }
970
987
  return (createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view) ? { view: createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view } : undefined;
971
988
  });
972
- const onDisposeRemoteStreamView = (userId) => __awaiter$R(void 0, void 0, void 0, function* () {
989
+ const onDisposeRemoteStreamView = (userId) => __awaiter$S(void 0, void 0, void 0, function* () {
973
990
  if (!call) {
974
991
  return;
975
992
  }
@@ -990,7 +1007,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
990
1007
  callClient.disposeView(call.id, participant.identifier, screenShareStream);
991
1008
  }
992
1009
  });
993
- const onDisposeRemoteVideoStreamView = (userId) => __awaiter$R(void 0, void 0, void 0, function* () {
1010
+ const onDisposeRemoteVideoStreamView = (userId) => __awaiter$S(void 0, void 0, void 0, function* () {
994
1011
  if (!call) {
995
1012
  return;
996
1013
  }
@@ -1007,7 +1024,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1007
1024
  callClient.disposeView(call.id, participant.identifier, remoteVideoStream);
1008
1025
  }
1009
1026
  });
1010
- const onDisposeRemoteScreenShareStreamView = (userId) => __awaiter$R(void 0, void 0, void 0, function* () {
1027
+ const onDisposeRemoteScreenShareStreamView = (userId) => __awaiter$S(void 0, void 0, void 0, function* () {
1011
1028
  if (!call) {
1012
1029
  return;
1013
1030
  }
@@ -1024,7 +1041,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1024
1041
  callClient.disposeView(call.id, participant.identifier, screenShareStream);
1025
1042
  }
1026
1043
  });
1027
- const onDisposeLocalStreamView = () => __awaiter$R(void 0, void 0, void 0, function* () {
1044
+ const onDisposeLocalStreamView = () => __awaiter$S(void 0, void 0, void 0, function* () {
1028
1045
  // If the user is currently in a call, dispose of the local stream view attached to that call.
1029
1046
  const callState = call && callClient.getState().calls[call.id];
1030
1047
  const localStream = callState === null || callState === void 0 ? void 0 : callState.localVideoStreams.find((item) => item.mediaStreamType === 'Video');
@@ -1036,17 +1053,17 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1036
1053
  // TODO: we need to remember which LocalVideoStream was used for LocalPreview and dispose that one.
1037
1054
  yield disposeAllLocalPreviewViews(callClient);
1038
1055
  });
1039
- const onSendDtmfTone = (dtmfTone) => __awaiter$R(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
1056
+ const onSendDtmfTone = (dtmfTone) => __awaiter$S(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
1040
1057
  const notImplemented = () => {
1041
1058
  throw new Error('Not implemented, cannot call a method from an abstract object');
1042
1059
  };
1043
1060
  /* @conditional-compile-remove(call-readiness) */
1044
- const askDevicePermission = (constrain) => __awaiter$R(void 0, void 0, void 0, function* () {
1061
+ const askDevicePermission = (constrain) => __awaiter$S(void 0, void 0, void 0, function* () {
1045
1062
  if (deviceManager) {
1046
1063
  yield (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.askDevicePermission(constrain));
1047
1064
  }
1048
1065
  });
1049
- const onRemoveVideoBackgroundEffects = () => __awaiter$R(void 0, void 0, void 0, function* () {
1066
+ const onRemoveVideoBackgroundEffects = () => __awaiter$S(void 0, void 0, void 0, function* () {
1050
1067
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
1051
1068
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
1052
1069
  if (stream) {
@@ -1058,7 +1075,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1058
1075
  }
1059
1076
  }
1060
1077
  });
1061
- const onBlurVideoBackground = (backgroundBlurConfig) => __awaiter$R(void 0, void 0, void 0, function* () {
1078
+ const onBlurVideoBackground = (backgroundBlurConfig) => __awaiter$S(void 0, void 0, void 0, function* () {
1062
1079
  var _e;
1063
1080
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
1064
1081
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
@@ -1071,7 +1088,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1071
1088
  return createEffect && stream.feature(communicationCalling.Features.VideoEffects).startEffects(createEffect(backgroundBlurConfig));
1072
1089
  }
1073
1090
  });
1074
- const onReplaceVideoBackground = (backgroundReplacementConfig) => __awaiter$R(void 0, void 0, void 0, function* () {
1091
+ const onReplaceVideoBackground = (backgroundReplacementConfig) => __awaiter$S(void 0, void 0, void 0, function* () {
1075
1092
  var _f;
1076
1093
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
1077
1094
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
@@ -1084,38 +1101,38 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1084
1101
  return (createEffect && stream.feature(communicationCalling.Features.VideoEffects).startEffects(createEffect(backgroundReplacementConfig)));
1085
1102
  }
1086
1103
  });
1087
- const onStartCaptions = (options) => __awaiter$R(void 0, void 0, void 0, function* () {
1104
+ const onStartCaptions = (options) => __awaiter$S(void 0, void 0, void 0, function* () {
1088
1105
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1089
1106
  yield (captionsFeature === null || captionsFeature === void 0 ? void 0 : captionsFeature.startCaptions(options));
1090
1107
  });
1091
- const onStopCaptions = () => __awaiter$R(void 0, void 0, void 0, function* () {
1108
+ const onStopCaptions = () => __awaiter$S(void 0, void 0, void 0, function* () {
1092
1109
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1093
1110
  yield (captionsFeature === null || captionsFeature === void 0 ? void 0 : captionsFeature.stopCaptions());
1094
1111
  });
1095
- const onSetSpokenLanguage = (language) => __awaiter$R(void 0, void 0, void 0, function* () {
1112
+ const onSetSpokenLanguage = (language) => __awaiter$S(void 0, void 0, void 0, function* () {
1096
1113
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1097
1114
  yield (captionsFeature === null || captionsFeature === void 0 ? void 0 : captionsFeature.setSpokenLanguage(language));
1098
1115
  });
1099
- const onSetCaptionLanguage = (language) => __awaiter$R(void 0, void 0, void 0, function* () {
1116
+ const onSetCaptionLanguage = (language) => __awaiter$S(void 0, void 0, void 0, function* () {
1100
1117
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1101
1118
  yield captionsFeature.setCaptionLanguage(language);
1102
1119
  });
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)); });
1104
- const onStartSpotlight = (userIds) => __awaiter$R(void 0, void 0, void 0, function* () {
1120
+ const onSubmitSurvey = (survey) => __awaiter$S(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.CallSurvey).submitSurvey(survey)); });
1121
+ const onStartSpotlight = (userIds) => __awaiter$S(void 0, void 0, void 0, function* () {
1105
1122
  const participants = userIds === null || userIds === void 0 ? void 0 : userIds.map((userId) => _toCommunicationIdentifier(userId));
1106
1123
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).startSpotlight(participants));
1107
1124
  });
1108
- const onStopSpotlight = (userIds) => __awaiter$R(void 0, void 0, void 0, function* () {
1125
+ const onStopSpotlight = (userIds) => __awaiter$S(void 0, void 0, void 0, function* () {
1109
1126
  const participants = userIds === null || userIds === void 0 ? void 0 : userIds.map((userId) => _toCommunicationIdentifier(userId));
1110
1127
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).stopSpotlight(participants));
1111
1128
  });
1112
- const onStopAllSpotlight = () => __awaiter$R(void 0, void 0, void 0, function* () {
1129
+ const onStopAllSpotlight = () => __awaiter$S(void 0, void 0, void 0, function* () {
1113
1130
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).stopAllSpotlight());
1114
1131
  });
1115
1132
  /* @conditional-compile-remove(soft-mute) */
1116
- const onMuteParticipant = (userId) => __awaiter$R(void 0, void 0, void 0, function* () {
1133
+ const onMuteParticipant = (userId) => __awaiter$S(void 0, void 0, void 0, function* () {
1117
1134
  if (call === null || call === void 0 ? void 0 : call.remoteParticipants) {
1118
- call === null || call === void 0 ? void 0 : call.remoteParticipants.forEach((participant) => __awaiter$R(void 0, void 0, void 0, function* () {
1135
+ call === null || call === void 0 ? void 0 : call.remoteParticipants.forEach((participant) => __awaiter$S(void 0, void 0, void 0, function* () {
1119
1136
  // Using toFlatCommunicationIdentifier to convert the CommunicationIdentifier to string
1120
1137
  // as _toCommunicationIdentifier(userId) comparison to participant.identifier did not work for this case
1121
1138
  if (toFlatCommunicationIdentifier(participant.identifier) === userId) {
@@ -1125,27 +1142,27 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1125
1142
  }
1126
1143
  });
1127
1144
  /* @conditional-compile-remove(soft-mute) */
1128
- const onMuteAllRemoteParticipants = () => __awaiter$R(void 0, void 0, void 0, function* () {
1145
+ const onMuteAllRemoteParticipants = () => __awaiter$S(void 0, void 0, void 0, function* () {
1129
1146
  call === null || call === void 0 ? void 0 : call.muteAllRemoteParticipants();
1130
1147
  });
1131
1148
  const canStartSpotlight = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Capabilities).capabilities.spotlightParticipant.isPresent;
1132
1149
  const canRemoveSpotlight = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Capabilities).capabilities.removeParticipantsSpotlight.isPresent;
1133
1150
  const onStartLocalSpotlight = canStartSpotlight
1134
- ? () => __awaiter$R(void 0, void 0, void 0, function* () {
1151
+ ? () => __awaiter$S(void 0, void 0, void 0, function* () {
1135
1152
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).startSpotlight());
1136
1153
  })
1137
1154
  : undefined;
1138
- const onStopLocalSpotlight = () => __awaiter$R(void 0, void 0, void 0, function* () {
1155
+ const onStopLocalSpotlight = () => __awaiter$S(void 0, void 0, void 0, function* () {
1139
1156
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).stopSpotlight());
1140
1157
  });
1141
1158
  const onStartRemoteSpotlight = canStartSpotlight
1142
- ? (userIds) => __awaiter$R(void 0, void 0, void 0, function* () {
1159
+ ? (userIds) => __awaiter$S(void 0, void 0, void 0, function* () {
1143
1160
  const participants = userIds === null || userIds === void 0 ? void 0 : userIds.map((userId) => _toCommunicationIdentifier(userId));
1144
1161
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).startSpotlight(participants));
1145
1162
  })
1146
1163
  : undefined;
1147
1164
  const onStopRemoteSpotlight = canRemoveSpotlight
1148
- ? (userIds) => __awaiter$R(void 0, void 0, void 0, function* () {
1165
+ ? (userIds) => __awaiter$S(void 0, void 0, void 0, function* () {
1149
1166
  const participants = userIds === null || userIds === void 0 ? void 0 : userIds.map((userId) => _toCommunicationIdentifier(userId));
1150
1167
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).stopSpotlight(participants));
1151
1168
  })
@@ -1204,7 +1221,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1204
1221
 
1205
1222
  // Copyright (c) Microsoft Corporation.
1206
1223
  // Licensed under the MIT License.
1207
- var __awaiter$Q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1224
+ var __awaiter$R = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1208
1225
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1209
1226
  return new (P || (P = Promise))(function (resolve, reject) {
1210
1227
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1230,7 +1247,7 @@ const createDefaultCallingHandlers = memoizeOne((...args) => {
1230
1247
  return callAgent === null || callAgent === void 0 ? void 0 : callAgent.startCall(participants, options);
1231
1248
  },
1232
1249
  /* @conditional-compile-remove(PSTN-calls) */
1233
- onAddParticipant: (userId, options) => __awaiter$Q(void 0, void 0, void 0, function* () {
1250
+ onAddParticipant: (userId, options) => __awaiter$R(void 0, void 0, void 0, function* () {
1234
1251
  const participant = _toCommunicationIdentifier(userId);
1235
1252
  if (communicationCommon.isPhoneNumberIdentifier(participant)) {
1236
1253
  call === null || call === void 0 ? void 0 : call.addParticipant(participant, options);
@@ -1238,7 +1255,7 @@ const createDefaultCallingHandlers = memoizeOne((...args) => {
1238
1255
  else if (communicationCommon.isCommunicationUserIdentifier(participant) || communicationCommon.isMicrosoftTeamsUserIdentifier(participant)) {
1239
1256
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
1240
1257
  }
1241
- }), onRemoveParticipant: (userId) => __awaiter$Q(void 0, void 0, void 0, function* () {
1258
+ }), onRemoveParticipant: (userId) => __awaiter$R(void 0, void 0, void 0, function* () {
1242
1259
  const participant = _toCommunicationIdentifier(userId);
1243
1260
  yield (call === null || call === void 0 ? void 0 : call.removeParticipant(participant));
1244
1261
  }) });
@@ -1246,7 +1263,7 @@ const createDefaultCallingHandlers = memoizeOne((...args) => {
1246
1263
 
1247
1264
  // Copyright (c) Microsoft Corporation.
1248
1265
  // Licensed under the MIT License.
1249
- var __awaiter$P = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1266
+ var __awaiter$Q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1250
1267
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1251
1268
  return new (P || (P = Promise))(function (resolve, reject) {
1252
1269
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1277,7 +1294,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne((callClient, callAgent, dev
1277
1294
  return undefined;
1278
1295
  },
1279
1296
  /* @conditional-compile-remove(PSTN-calls) */
1280
- onAddParticipant: (userId, options) => __awaiter$P(void 0, void 0, void 0, function* () {
1297
+ onAddParticipant: (userId, options) => __awaiter$Q(void 0, void 0, void 0, function* () {
1281
1298
  const participant = _toCommunicationIdentifier(userId);
1282
1299
  /* @conditional-compile-remove(teams-identity-support) */
1283
1300
  const threadId = options === null || options === void 0 ? void 0 : options.threadId;
@@ -1293,7 +1310,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne((callClient, callAgent, dev
1293
1310
  }
1294
1311
  /* @conditional-compile-remove(teams-identity-support) */
1295
1312
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
1296
- }), onRemoveParticipant: (userId) => __awaiter$P(void 0, void 0, void 0, function* () {
1313
+ }), onRemoveParticipant: (userId) => __awaiter$Q(void 0, void 0, void 0, function* () {
1297
1314
  const participant = _toCommunicationIdentifier(userId);
1298
1315
  if (communicationCommon.isCommunicationUserIdentifier(participant)) {
1299
1316
  throw new Error('CommunicationIdentifier in Teams call is not supported!');
@@ -1526,7 +1543,7 @@ const getCaptionsSpeakerIdentifier = (captions) => {
1526
1543
 
1527
1544
  // Copyright (c) Microsoft Corporation.
1528
1545
  // Licensed under the MIT License.
1529
- var __awaiter$O = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1546
+ var __awaiter$P = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1530
1547
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1531
1548
  return new (P || (P = Promise))(function (resolve, reject) {
1532
1549
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1603,7 +1620,7 @@ class ProxyDeviceManager {
1603
1620
  console.info('Could not Unsubscribe to Permissions API Camera changed events, API is not supported by browser', e);
1604
1621
  }
1605
1622
  };
1606
- this.permissionsApiStateChangeHandler = () => __awaiter$O(this, void 0, void 0, function* () {
1623
+ this.permissionsApiStateChangeHandler = () => __awaiter$P(this, void 0, void 0, function* () {
1607
1624
  yield this.updateDevicePermissionState();
1608
1625
  });
1609
1626
  /**
@@ -1614,13 +1631,13 @@ class ProxyDeviceManager {
1614
1631
  this.selectCamera = (videoDeviceInfo) => {
1615
1632
  this._context.setDeviceManagerSelectedCamera(videoDeviceInfo);
1616
1633
  };
1617
- this.videoDevicesUpdated = () => __awaiter$O(this, void 0, void 0, function* () {
1634
+ this.videoDevicesUpdated = () => __awaiter$P(this, void 0, void 0, function* () {
1618
1635
  // Device Manager always has a camera with '' name if there are no real camera devices available.
1619
1636
  // We don't want to show that in the UI.
1620
1637
  const realCameras = (yield this._deviceManager.getCameras()).filter((c) => !!c.name);
1621
1638
  this._context.setDeviceManagerCameras(dedupeById(realCameras));
1622
1639
  });
1623
- this.audioDevicesUpdated = () => __awaiter$O(this, void 0, void 0, function* () {
1640
+ this.audioDevicesUpdated = () => __awaiter$P(this, void 0, void 0, function* () {
1624
1641
  this._context.setDeviceManagerMicrophones(dedupeById(yield this._deviceManager.getMicrophones()));
1625
1642
  this._context.setDeviceManagerSpeakers(dedupeById(yield this._deviceManager.getSpeakers()));
1626
1643
  });
@@ -1630,7 +1647,7 @@ class ProxyDeviceManager {
1630
1647
  this.selectedSpeakerChanged = () => {
1631
1648
  this._context.setDeviceManagerSelectedSpeaker(this._deviceManager.selectedSpeaker);
1632
1649
  };
1633
- this.updateDevicePermissionState = (sdkDeviceAccessState) => __awaiter$O(this, void 0, void 0, function* () {
1650
+ this.updateDevicePermissionState = (sdkDeviceAccessState) => __awaiter$P(this, void 0, void 0, function* () {
1634
1651
  let hasCameraPermission = !!(sdkDeviceAccessState === null || sdkDeviceAccessState === void 0 ? void 0 : sdkDeviceAccessState.video);
1635
1652
  let hasMicPermission = !!(sdkDeviceAccessState === null || sdkDeviceAccessState === void 0 ? void 0 : sdkDeviceAccessState.audio);
1636
1653
  // Supplement the SDK values with values from the Permissions API to get a better understanding of the device
@@ -1706,7 +1723,7 @@ class ProxyDeviceManager {
1706
1723
  }
1707
1724
  case 'askDevicePermission': {
1708
1725
  return this._context.withAsyncErrorTeedToState((...args) => {
1709
- return target.askDevicePermission(...args).then((deviceAccess) => __awaiter$O(this, void 0, void 0, function* () {
1726
+ return target.askDevicePermission(...args).then((deviceAccess) => __awaiter$P(this, void 0, void 0, function* () {
1710
1727
  yield this.updateDevicePermissionState(deviceAccess);
1711
1728
  return deviceAccess;
1712
1729
  }));
@@ -2083,7 +2100,7 @@ class CallIdHistory {
2083
2100
 
2084
2101
  // Copyright (c) Microsoft Corporation.
2085
2102
  // Licensed under the MIT License.
2086
- var __awaiter$N = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
2103
+ var __awaiter$O = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
2087
2104
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2088
2105
  return new (P || (P = Promise))(function (resolve, reject) {
2089
2106
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3011,7 +3028,7 @@ let CallContext$2 = class CallContext {
3011
3028
  * @throws CallError. Exceptions thrown from `f` are tagged with the failed `target.
3012
3029
  */
3013
3030
  withAsyncErrorTeedToState(action, target) {
3014
- return (...args) => __awaiter$N(this, void 0, void 0, function* () {
3031
+ return (...args) => __awaiter$O(this, void 0, void 0, function* () {
3015
3032
  try {
3016
3033
  return yield action(...args);
3017
3034
  }
@@ -3536,7 +3553,7 @@ function _logStreamEvent(eventName, streamLogInfo, error) {
3536
3553
 
3537
3554
  // Copyright (c) Microsoft Corporation.
3538
3555
  // Licensed under the MIT License.
3539
- var __awaiter$M = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3556
+ var __awaiter$N = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3540
3557
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3541
3558
  return new (P || (P = Promise))(function (resolve, reject) {
3542
3559
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3546,7 +3563,7 @@ var __awaiter$M = (window && window.__awaiter) || function (thisArg, _arguments,
3546
3563
  });
3547
3564
  };
3548
3565
  function createViewVideo(context, internalContext, callId, stream, participantId, options) {
3549
- return __awaiter$M(this, void 0, void 0, function* () {
3566
+ return __awaiter$N(this, void 0, void 0, function* () {
3550
3567
  // we can only have 3 types of createView
3551
3568
  let streamEventType;
3552
3569
  // we will reuse these for local as well but we need to make sure the remote stream is passed in like before.
@@ -3675,7 +3692,7 @@ function createViewVideo(context, internalContext, callId, stream, participantId
3675
3692
  });
3676
3693
  }
3677
3694
  function createViewUnparentedVideo(context, internalContext, stream, options) {
3678
- return __awaiter$M(this, void 0, void 0, function* () {
3695
+ return __awaiter$N(this, void 0, void 0, function* () {
3679
3696
  const renderInfo = internalContext.getUnparentedRenderInfo(stream);
3680
3697
  if (renderInfo && renderInfo.status === 'Rendered') {
3681
3698
  console.warn('Unparented LocalVideoStream is already rendered');
@@ -3844,7 +3861,7 @@ function createView(context, internalContext, callId, participantId, stream, opt
3844
3861
  // Render LocalVideoStream that is not part of a Call
3845
3862
  // Because it is not part of the call we don't tee errors to state naturally (e.g. via a Call Client function such as startVideo).
3846
3863
  // We do not have a startLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
3847
- return context.withAsyncErrorTeedToState(() => __awaiter$M(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
3864
+ return context.withAsyncErrorTeedToState(() => __awaiter$N(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
3848
3865
  }
3849
3866
  else {
3850
3867
  _logStreamEvent(EventNames.CREATE_STREAM_INVALID_PARAMS, { streamType });
@@ -4030,7 +4047,7 @@ class RecordingSubscriber {
4030
4047
 
4031
4048
  // Copyright (c) Microsoft Corporation.
4032
4049
  // Licensed under the MIT License.
4033
- var __awaiter$L = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4050
+ var __awaiter$M = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4034
4051
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4035
4052
  return new (P || (P = Promise))(function (resolve, reject) {
4036
4053
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4054,7 +4071,7 @@ class PPTLiveSubscriber {
4054
4071
  this._context.setCallPPTLiveActive(this._callIdRef.callId, this._pptLive.isActive);
4055
4072
  this.checkAndUpdatePPTLiveParticipant();
4056
4073
  };
4057
- this.checkAndUpdatePPTLiveParticipant = () => __awaiter$L(this, void 0, void 0, function* () {
4074
+ this.checkAndUpdatePPTLiveParticipant = () => __awaiter$M(this, void 0, void 0, function* () {
4058
4075
  if (this._pptLive.isActive) {
4059
4076
  // TODO: need to refactor if Web Calling SDK has this logic ready
4060
4077
  if (this._call.isScreenSharingOn) {
@@ -4567,7 +4584,7 @@ class CallSubscriber {
4567
4584
 
4568
4585
  // Copyright (c) Microsoft Corporation.
4569
4586
  // Licensed under the MIT License.
4570
- var __awaiter$K = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4587
+ var __awaiter$L = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4571
4588
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4572
4589
  return new (P || (P = Promise))(function (resolve, reject) {
4573
4590
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4587,14 +4604,14 @@ class ProxyIncomingCall {
4587
4604
  switch (prop) {
4588
4605
  case 'accept': {
4589
4606
  return this._context.withAsyncErrorTeedToState(function (...args) {
4590
- return __awaiter$K(this, void 0, void 0, function* () {
4607
+ return __awaiter$L(this, void 0, void 0, function* () {
4591
4608
  return yield target.accept(...args);
4592
4609
  });
4593
4610
  }, 'IncomingCall.accept');
4594
4611
  }
4595
4612
  case 'reject': {
4596
4613
  return this._context.withAsyncErrorTeedToState(function (...args) {
4597
- return __awaiter$K(this, void 0, void 0, function* () {
4614
+ return __awaiter$L(this, void 0, void 0, function* () {
4598
4615
  return yield target.reject(...args);
4599
4616
  });
4600
4617
  }, 'IncomingCall.reject');
@@ -4835,7 +4852,7 @@ const clearCallRelatedState = (context, internalContext) => {
4835
4852
 
4836
4853
  // Copyright (c) Microsoft Corporation.
4837
4854
  // Licensed under the MIT License.
4838
- var __awaiter$J = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4855
+ var __awaiter$K = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4839
4856
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4840
4857
  return new (P || (P = Promise))(function (resolve, reject) {
4841
4858
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4861,56 +4878,56 @@ class ProxyCallCommon {
4861
4878
  switch (prop) {
4862
4879
  case 'mute': {
4863
4880
  return this._context.withAsyncErrorTeedToState(function (...args) {
4864
- return __awaiter$J(this, void 0, void 0, function* () {
4881
+ return __awaiter$K(this, void 0, void 0, function* () {
4865
4882
  return yield target.mute(...args);
4866
4883
  });
4867
4884
  }, 'Call.mute');
4868
4885
  }
4869
4886
  case 'unmute': {
4870
4887
  return this._context.withAsyncErrorTeedToState(function (...args) {
4871
- return __awaiter$J(this, void 0, void 0, function* () {
4888
+ return __awaiter$K(this, void 0, void 0, function* () {
4872
4889
  return yield target.unmute(...args);
4873
4890
  });
4874
4891
  }, 'Call.unmute');
4875
4892
  }
4876
4893
  case 'startVideo': {
4877
4894
  return this._context.withAsyncErrorTeedToState(function (...args) {
4878
- return __awaiter$J(this, void 0, void 0, function* () {
4895
+ return __awaiter$K(this, void 0, void 0, function* () {
4879
4896
  return yield target.startVideo(...args);
4880
4897
  });
4881
4898
  }, 'Call.startVideo');
4882
4899
  }
4883
4900
  case 'stopVideo': {
4884
4901
  return this._context.withAsyncErrorTeedToState(function (...args) {
4885
- return __awaiter$J(this, void 0, void 0, function* () {
4902
+ return __awaiter$K(this, void 0, void 0, function* () {
4886
4903
  return yield target.stopVideo(...args);
4887
4904
  });
4888
4905
  }, 'Call.stopVideo');
4889
4906
  }
4890
4907
  case 'startScreenSharing': {
4891
4908
  return this._context.withAsyncErrorTeedToState(function (...args) {
4892
- return __awaiter$J(this, void 0, void 0, function* () {
4909
+ return __awaiter$K(this, void 0, void 0, function* () {
4893
4910
  return yield target.startScreenSharing(...args);
4894
4911
  });
4895
4912
  }, 'Call.startScreenSharing');
4896
4913
  }
4897
4914
  case 'stopScreenSharing': {
4898
4915
  return this._context.withAsyncErrorTeedToState(function (...args) {
4899
- return __awaiter$J(this, void 0, void 0, function* () {
4916
+ return __awaiter$K(this, void 0, void 0, function* () {
4900
4917
  return yield target.stopScreenSharing(...args);
4901
4918
  });
4902
4919
  }, 'Call.stopScreenSharing');
4903
4920
  }
4904
4921
  case 'hold': {
4905
4922
  return this._context.withAsyncErrorTeedToState(function (...args) {
4906
- return __awaiter$J(this, void 0, void 0, function* () {
4923
+ return __awaiter$K(this, void 0, void 0, function* () {
4907
4924
  return yield target.hold(...args);
4908
4925
  });
4909
4926
  }, 'Call.hold');
4910
4927
  }
4911
4928
  case 'resume': {
4912
4929
  return this._context.withAsyncErrorTeedToState(function (...args) {
4913
- return __awaiter$J(this, void 0, void 0, function* () {
4930
+ return __awaiter$K(this, void 0, void 0, function* () {
4914
4931
  return yield target.resume(...args);
4915
4932
  });
4916
4933
  }, 'Call.resume');
@@ -4978,7 +4995,7 @@ class ProxyTeamsCaptions {
4978
4995
  get(target, prop) {
4979
4996
  switch (prop) {
4980
4997
  case 'startCaptions':
4981
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
4998
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
4982
4999
  var _a, _b;
4983
5000
  this._context.setStartCaptionsInProgress(this._call.id, true);
4984
5001
  try {
@@ -4992,7 +5009,7 @@ class ProxyTeamsCaptions {
4992
5009
  }
4993
5010
  }), 'Call.feature');
4994
5011
  case 'stopCaptions':
4995
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5012
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
4996
5013
  const ret = yield target.stopCaptions(...args);
4997
5014
  this._context.setIsCaptionActive(this._call.id, false);
4998
5015
  this._context.setStartCaptionsInProgress(this._call.id, false);
@@ -5000,13 +5017,13 @@ class ProxyTeamsCaptions {
5000
5017
  return ret;
5001
5018
  }), 'Call.feature');
5002
5019
  case 'setSpokenLanguage':
5003
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5020
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
5004
5021
  const ret = yield target.setSpokenLanguage(...args);
5005
5022
  this._context.setSelectedSpokenLanguage(this._call.id, args[0]);
5006
5023
  return ret;
5007
5024
  }), 'Call.feature');
5008
5025
  case 'setCaptionLanguage':
5009
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5026
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
5010
5027
  const ret = yield target.setCaptionLanguage(...args);
5011
5028
  this._context.setSelectedCaptionLanguage(this._call.id, args[0]);
5012
5029
  return ret;
@@ -5028,7 +5045,7 @@ class ProxyCaptions {
5028
5045
  get(target, prop) {
5029
5046
  switch (prop) {
5030
5047
  case 'startCaptions':
5031
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5048
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
5032
5049
  var _a, _b;
5033
5050
  this._context.setStartCaptionsInProgress(this._call.id, true);
5034
5051
  try {
@@ -5042,7 +5059,7 @@ class ProxyCaptions {
5042
5059
  }
5043
5060
  }), 'Call.feature');
5044
5061
  case 'stopCaptions':
5045
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5062
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
5046
5063
  const ret = yield target.stopCaptions(...args);
5047
5064
  this._context.setIsCaptionActive(this._call.id, false);
5048
5065
  this._context.setStartCaptionsInProgress(this._call.id, false);
@@ -5050,7 +5067,7 @@ class ProxyCaptions {
5050
5067
  return ret;
5051
5068
  }), 'Call.feature');
5052
5069
  case 'setSpokenLanguage':
5053
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5070
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
5054
5071
  const ret = yield target.setSpokenLanguage(...args);
5055
5072
  this._context.setSelectedSpokenLanguage(this._call.id, args[0]);
5056
5073
  return ret;
@@ -5070,12 +5087,12 @@ class ProxySpotlightCallFeature {
5070
5087
  get(target, prop) {
5071
5088
  switch (prop) {
5072
5089
  case 'startSpotlight':
5073
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5090
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
5074
5091
  const ret = yield target.startSpotlight(...args);
5075
5092
  return ret;
5076
5093
  }), 'Call.feature');
5077
5094
  case 'stopSpotlight':
5078
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$J(this, void 0, void 0, function* () {
5095
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$K(this, void 0, void 0, function* () {
5079
5096
  const ret = yield target.stopSpotlight(...args);
5080
5097
  return ret;
5081
5098
  }), 'Call.feature');
@@ -5117,7 +5134,7 @@ class ProxyTransferCallFeature {
5117
5134
 
5118
5135
  // Copyright (c) Microsoft Corporation.
5119
5136
  // Licensed under the MIT License.
5120
- var __awaiter$I = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5137
+ var __awaiter$J = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5121
5138
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5122
5139
  return new (P || (P = Promise))(function (resolve, reject) {
5123
5140
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -5131,7 +5148,7 @@ class ProxyCall extends ProxyCallCommon {
5131
5148
  switch (prop) {
5132
5149
  case 'addParticipant': {
5133
5150
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
5134
- return __awaiter$I(this, void 0, void 0, function* () {
5151
+ return __awaiter$J(this, void 0, void 0, function* () {
5135
5152
  return yield target.addParticipant(...args);
5136
5153
  });
5137
5154
  }, 'Call.addParticipant');
@@ -5366,7 +5383,7 @@ class InternalCallContext {
5366
5383
 
5367
5384
  // Copyright (c) Microsoft Corporation.
5368
5385
  // Licensed under the MIT License.
5369
- var __awaiter$H = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5386
+ var __awaiter$I = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5370
5387
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5371
5388
  return new (P || (P = Promise))(function (resolve, reject) {
5372
5389
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -5382,7 +5399,7 @@ class ProxyTeamsCall extends ProxyCallCommon {
5382
5399
  /* @conditional-compile-remove(PSTN-calls) */
5383
5400
  case 'addParticipant': {
5384
5401
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
5385
- return __awaiter$H(this, void 0, void 0, function* () {
5402
+ return __awaiter$I(this, void 0, void 0, function* () {
5386
5403
  return yield target.addParticipant(...args);
5387
5404
  });
5388
5405
  }, 'TeamsCall.addParticipant');
@@ -5501,7 +5518,7 @@ const teamsCallAgentDeclaratify = (callAgent, context, internalContext) => {
5501
5518
 
5502
5519
  // Copyright (c) Microsoft Corporation.
5503
5520
  // Licensed under the MIT License.
5504
- var __awaiter$G = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5521
+ var __awaiter$H = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5505
5522
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5506
5523
  return new (P || (P = Promise))(function (resolve, reject) {
5507
5524
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -5523,7 +5540,7 @@ class ProxyVideoStreamRendererView {
5523
5540
  get(target, prop) {
5524
5541
  switch (prop) {
5525
5542
  case 'updateScalingMode': {
5526
- return (...args) => __awaiter$G(this, void 0, void 0, function* () {
5543
+ return (...args) => __awaiter$H(this, void 0, void 0, function* () {
5527
5544
  yield target.updateScalingMode(...args);
5528
5545
  this._context.setRemoteVideoStreamViewScalingMode(this._callId, this._participantId, this._streamId, args[0]);
5529
5546
  });
@@ -5544,7 +5561,7 @@ const videoStreamRendererViewDeclaratify = (view, context, callId, participantId
5544
5561
 
5545
5562
  // Copyright (c) Microsoft Corporation.
5546
5563
  // Licensed under the MIT License.
5547
- var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5564
+ var __awaiter$G = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
5548
5565
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5549
5566
  return new (P || (P = Promise))(function (resolve, reject) {
5550
5567
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -5566,7 +5583,7 @@ class ProxyCallClient {
5566
5583
  get(target, prop) {
5567
5584
  switch (prop) {
5568
5585
  case 'createCallAgent': {
5569
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$F(this, void 0, void 0, function* () {
5586
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$G(this, void 0, void 0, function* () {
5570
5587
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
5571
5588
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
5572
5589
  // callAgent if the createCallAgent succeeds.
@@ -5579,7 +5596,7 @@ class ProxyCallClient {
5579
5596
  }), 'CallClient.createCallAgent');
5580
5597
  }
5581
5598
  case 'createTeamsCallAgent': {
5582
- /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$F(this, void 0, void 0, function* () {
5599
+ /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$G(this, void 0, void 0, function* () {
5583
5600
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
5584
5601
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
5585
5602
  // callAgent if the createCallAgent succeeds.
@@ -5592,7 +5609,7 @@ class ProxyCallClient {
5592
5609
  }), 'CallClient.createTeamsCallAgent');
5593
5610
  }
5594
5611
  case 'getDeviceManager': {
5595
- return this._context.withAsyncErrorTeedToState(() => __awaiter$F(this, void 0, void 0, function* () {
5612
+ return this._context.withAsyncErrorTeedToState(() => __awaiter$G(this, void 0, void 0, function* () {
5596
5613
  // As of writing, the SDK always returns the same instance of DeviceManager so we keep a reference of
5597
5614
  // DeviceManager and if it does not change we return the cached DeclarativeDeviceManager. If it does not we'll
5598
5615
  // throw an error that indicate we need to fix this issue as our implementation has diverged from the SDK.
@@ -5621,7 +5638,7 @@ class ProxyCallClient {
5621
5638
  /**
5622
5639
  * add to this object if we want to proxy anything else off the DebugInfo feature object.
5623
5640
  */
5624
- return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$F(this, void 0, void 0, function* () {
5641
+ return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$G(this, void 0, void 0, function* () {
5625
5642
  const environmentInfo = yield feature.getEnvironmentInfo();
5626
5643
  this._context.setEnvironmentInfo(environmentInfo);
5627
5644
  return environmentInfo;
@@ -5682,7 +5699,7 @@ const createStatefulCallClientWithDeps = (callClient, context, internalContext)
5682
5699
  });
5683
5700
  Object.defineProperty(callClient, 'createView', {
5684
5701
  configurable: false,
5685
- value: (callId, participantId, stream, options) => __awaiter$F(void 0, void 0, void 0, function* () {
5702
+ value: (callId, participantId, stream, options) => __awaiter$G(void 0, void 0, void 0, function* () {
5686
5703
  const participantIdKind = participantId ? communicationCommon.getIdentifierKind(participantId) : undefined;
5687
5704
  const result = yield createView(context, internalContext, callId, participantIdKind, stream, options);
5688
5705
  // We only need to declaratify the VideoStreamRendererView object for remote participants. Because the updateScalingMode only needs to be called on remote participant stream views.
@@ -5915,7 +5932,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
5915
5932
  wordBreak: 'break-word'
5916
5933
  });
5917
5934
 
5918
- var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold",attendeeRole:"Attendee"};var ParticipantList$l={overflowParticipantCount:"+{overflowCount} more"};var typingIndicator$k={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",attachmentMoreMenu:"More Options"};var richTextSendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",richTextBoldTooltip:"Bold",richTextItalicTooltip:"Italic",richTextUnderlineTooltip:"Underline",richTextBulletListTooltip:"Bulleted list",richTextNumberListTooltip:"Numbered list",richTextIncreaseIndentTooltip:"Increase indent",richTextDecreaseIndentTooltip:"Decrease indent",richTextInsertTableTooltip:"Insert table",richTextFormatButtonTooltip:"Format",richTextInsertRowOrColumnMenu:"Insert",richTextInsertTableMenuTitle:"Insert {column} x {row} table",richTextInsertRowAboveMenu:"Insert above",richTextInsertRowBelowMenu:"Insert below",richTextInsertColumnLeftMenu:"Insert left",richTextInsertColumnRightMenu:"Insert right",richTextDeleteRowOrColumnMenu:"Delete",richTextDeleteColumnMenu:"Delete column",richTextDeleteRowMenu:"Delete row",richTextDeleteTableMenu:"Delete table",richTextToolbarMoreButtonAriaLabel:"More options",attachmentMoreMenu:"More Options"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageOverlay$k={downloadButtonLabel:"Download",dismissButtonAriaLabel:"Close"};var messageStatusIndicator$k={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$k={label:"Leave",tooltipContent:"Leave call",leaveOption:"Leave",endCallOption:"End call for everyone"};var cameraButton$k={onLabel:"Camera",offLabel:"Camera",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera",videoEffectsMenuItemTitle:"Effects"};var microphoneButton$k={onLabel:"Mic",offLabel:"Mic",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",microphonePrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$k={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$k={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$k={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var raiseHandButton$k={offLabel:"Raise",onLabel:"Lower",tooltipDisabledContent:"Raise Hand action is disabled",tooltipOnContent:"Lower Hand",tooltipOffContent:"Raise Hand"};var reactionButton$k={label:"React",ariaLabel:"React Button, Send a reaction",tooltipDisabledContent:"Reaction action is disabled",tooltipContent:"Send a reaction",likeReactionTooltipContent:"Like",heartReactionTooltipContent:"Love",laughReactionTooltipContent:"Laugh",applauseReactionTooltipContent:"Applause",surprisedReactionTooltipContent:"Surprised"};var messageThread$k={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{status} {author} said {message}",messageContentMineAriaText:"{status} You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Done",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadAttachment:"Download file",openAttachment:"Open file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",attachmentCardGroupMessage:"The message has {attachmentCount} attachment",messageDeletedAnnouncementAriaLabel:"The message is deleted",richTextBoldTooltip:"Bold",richTextItalicTooltip:"Italic",richTextUnderlineTooltip:"Underline",richTextBulletListTooltip:"Bulleted list",richTextNumberListTooltip:"Numbered list",richTextIncreaseIndentTooltip:"Increase indent",richTextDecreaseIndentTooltip:"Decrease indent",richTextInsertTableTooltip:"Insert table",richTextFormatButtonTooltip:"Format",richTextInsertRowOrColumnMenu:"Insert",richTextInsertTableMenuTitle:"Insert {column} x {row} table",richTextInsertRowAboveMenu:"Insert above",richTextInsertRowBelowMenu:"Insert below",richTextInsertColumnLeftMenu:"Insert left",richTextInsertColumnRightMenu:"Insert right",richTextDeleteRowOrColumnMenu:"Delete",richTextDeleteColumnMenu:"Delete column",richTextDeleteRowMenu:"Delete row",richTextDeleteTableMenu:"Delete table",richTextToolbarMoreButtonAriaLabel:"More options"};var errorBar$k={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"There was an issue starting screen share.",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network.",unableToStartVideoEffect:"Unable to apply video effect.",startSpotlightWhileMaxParticipantsAreSpotlighted:"Cannot start spotlight on participant(s) because the maximum number of participants are already spotlighted.",mutedByRemoteParticipant:"You were muted by another participant."};var notificationStack={callingNetworkFailure:{title:"Troubling connecting call",message:"You seem to be offline. Please check your network connection and try again.",closeButtonAriaLabel:"Close"},startVideoGeneric:{title:"Failed to start video.",closeButtonAriaLabel:"Close"},stopVideoGeneric:{title:"Failed to stop video.",closeButtonAriaLabel:"Close"},muteGeneric:{title:"Failed to mute microphone.",closeButtonAriaLabel:"Close"},unmuteGeneric:{title:"Failed to unmute microphone.",closeButtonAriaLabel:"Close"},speakingWhileMuted:{title:"You're muted.",closeButtonAriaLabel:"Close"},startScreenShareGeneric:{title:"There was an issue starting screen share.",closeButtonAriaLabel:"Close"},stopScreenShareGeneric:{title:"Failed to stop screen sharing.",closeButtonAriaLabel:"Close"},callNetworkQualityLow:{title:"Network quality is low.",closeButtonAriaLabel:"Close"},callNoSpeakerFound:{title:"No speakers or headphones found",message:"Connect an audio device to hear the call.",closeButtonAriaLabel:"Close"},callNoMicrophoneFound:{title:"No microphones found",message:"Connect an audio input device.",closeButtonAriaLabel:"Close"},callMicrophoneAccessDenied:{title:"Unable to access microphone",message:"Click the lock in the address bar to grant permission to this webpage.",closeButtonAriaLabel:"Close"},callMicrophoneAccessDeniedSafari:{title:"Unable to access microphone",message:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",closeButtonAriaLabel:"Close"},callMicrophoneMutedBySystem:{title:"You are muted by your system.",closeButtonAriaLabel:"Close"},callMicrophoneUnmutedBySystem:{title:"Your microphone recovered and you were unmuted by your system.",closeButtonAriaLabel:"Close"},callMacOsMicrophoneAccessDenied:{title:"Unable to access microphone",message:"Grant microphone permission in your macOS privacy settings.",closeButtonAriaLabel:"Close"},callLocalVideoFreeze:{title:"Network bandwidth is poor",message:"Your video may appear paused for others on the call.",closeButtonAriaLabel:"Close"},callCameraAccessDenied:{title:"Unable to access camera",message:"Click the lock in the address bar to grant permission to this webpage.",closeButtonAriaLabel:"Close"},callCameraAccessDeniedSafari:{title:"Unable to access camera",message:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",closeButtonAriaLabel:"Close"},callCameraAlreadyInUse:{title:"Unable to access camera",message:"It may already be in use by another application.",closeButtonAriaLabel:"Close"},callVideoStoppedBySystem:{title:"Your video has been stopped by your system.",closeButtonAriaLabel:"Close"},callVideoRecoveredBySystem:{title:"Your video has resumed.",closeButtonAriaLabel:"Close"},callMacOsCameraAccessDenied:{title:"MacOS is blocking access to your camera",message:"Update your privacy settings to allow this browser to access your camera.",closeButtonAriaLabel:"Close"},callMacOsScreenShareAccessDenied:{title:"MacOS is blocking screen sharing",message:"Update your privacy settings to allow this browser to record your screen.",closeButtonAriaLabel:"Close"},failedToJoinCallGeneric:{title:"Failed to join call.",closeButtonAriaLabel:"Close"},failedToJoinCallInvalidMeetingLink:{title:"Unable to join Meeting. Invalid Link.",closeButtonAriaLabel:"Close"},cameraFrozenForRemoteParticipants:{title:"Users in the call are having issues seeing your video",message:"Please check your devices and network.",closeButtonAriaLabel:"Close"},unableToStartVideoEffect:{title:"Unable to apply video effect.",closeButtonAriaLabel:"Close"},startSpotlightWhileMaxParticipantsAreSpotlighted:{title:"Cannot start spotlight on participant(s)",message:"The maximum number of participants are already spotlighted.",closeButtonAriaLabel:"Close"},mutedByRemoteParticipant:{title:"You were muted by another participant.",closeButtonAriaLabel:"Close"}};var videoGallery$k={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoMovementAriaLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}",startSpotlightVideoTileMenuLabel:"Spotlight for everyone",addSpotlightVideoTileMenuLabel:"Add spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopSpotlightVideoTileMenuLabel:"Stop spotlighting",stopSpotlightOnSelfVideoTileMenuLabel:"Exit spotlight",attendeeRole:"Attendee",muteParticipantMenuItemLabel:"Mute"};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",moreOptionsButtonAriaLabel:"More Options"};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 MeetingConferencePhoneInfo$k={meetingConferencePhoneInfoModalTitle:"Join call from your phone",meetingConferencePhoneInfoModalDialIn:"Dial number",meetingConferencePhoneInfoModalMeetingId:"Enter meeting ID",meetingConferencePhoneInfoModalWait:"Wait to be admitted by organizer",meetingConferencePhoneInfoModalNoPhoneAvailable:"No phone available",meetingConferencePhoneInfoModalTollGeoData:"{country}, {city}",meetingConferencePhoneInfoModalTollFree:"(Toll-free)",meetingConferencePhoneInfoModalToll:"(Toll)"};var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,richTextSendBox:richTextSendBox$k,mentionPopover:mentionPopover$k,imageOverlay:imageOverlay$k,messageStatusIndicator:messageStatusIndicator$k,endCallButton:endCallButton$k,cameraButton:cameraButton$k,microphoneButton:microphoneButton$k,devicesButton:devicesButton$k,participantsButton:participantsButton$k,screenShareButton:screenShareButton$k,raiseHandButton:raiseHandButton$k,reactionButton:reactionButton$k,messageThread:messageThread$k,errorBar:errorBar$k,notificationStack:notificationStack,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,MeetingConferencePhoneInfo:MeetingConferencePhoneInfo$k};
5935
+ var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold",attendeeRole:"Attendee"};var ParticipantList$l={overflowParticipantCount:"+{overflowCount} more"};var typingIndicator$k={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",attachmentMoreMenu:"More Options"};var richTextSendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",richTextBoldTooltip:"Bold",richTextItalicTooltip:"Italic",richTextUnderlineTooltip:"Underline",richTextBulletListTooltip:"Bulleted list",richTextNumberListTooltip:"Numbered list",richTextIncreaseIndentTooltip:"Increase indent",richTextDecreaseIndentTooltip:"Decrease indent",richTextInsertTableTooltip:"Insert table",richTextFormatButtonTooltip:"Format",richTextInsertRowOrColumnMenu:"Insert",richTextInsertTableMenuTitle:"Insert {column} x {row} table",richTextInsertRowAboveMenu:"Insert above",richTextInsertRowBelowMenu:"Insert below",richTextInsertColumnLeftMenu:"Insert left",richTextInsertColumnRightMenu:"Insert right",richTextDeleteRowOrColumnMenu:"Delete",richTextDeleteColumnMenu:"Delete column",richTextDeleteRowMenu:"Delete row",richTextDeleteTableMenu:"Delete table",richTextToolbarMoreButtonAriaLabel:"More options",attachmentMoreMenu:"More Options"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageOverlay$k={downloadButtonLabel:"Download",dismissButtonAriaLabel:"Close"};var messageStatusIndicator$k={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$k={label:"Leave",tooltipContent:"Leave call",leaveOption:"Leave",endCallOption:"End call for everyone"};var cameraButton$k={onLabel:"Camera",offLabel:"Camera",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera",videoEffectsMenuItemTitle:"Effects"};var microphoneButton$k={onLabel:"Mic",offLabel:"Mic",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",microphonePrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$k={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$k={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$k={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var raiseHandButton$k={offLabel:"Raise",onLabel:"Lower",tooltipDisabledContent:"Raise Hand action is disabled",tooltipOnContent:"Lower Hand",tooltipOffContent:"Raise Hand"};var reactionButton$k={label:"React",ariaLabel:"React Button, Send a reaction",tooltipDisabledContent:"Reaction action is disabled",tooltipContent:"Send a reaction",likeReactionTooltipContent:"Like",heartReactionTooltipContent:"Love",laughReactionTooltipContent:"Laugh",applauseReactionTooltipContent:"Applause",surprisedReactionTooltipContent:"Surprised"};var messageThread$k={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{status} {author} said {message}",messageContentMineAriaText:"{status} You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Done",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadAttachment:"Download file",openAttachment:"Open file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",attachmentCardGroupMessage:"The message has {attachmentCount} attachment",messageDeletedAnnouncementAriaLabel:"The message is deleted",richTextBoldTooltip:"Bold",richTextItalicTooltip:"Italic",richTextUnderlineTooltip:"Underline",richTextBulletListTooltip:"Bulleted list",richTextNumberListTooltip:"Numbered list",richTextIncreaseIndentTooltip:"Increase indent",richTextDecreaseIndentTooltip:"Decrease indent",richTextInsertTableTooltip:"Insert table",richTextFormatButtonTooltip:"Format",richTextInsertRowOrColumnMenu:"Insert",richTextInsertTableMenuTitle:"Insert {column} x {row} table",richTextInsertRowAboveMenu:"Insert above",richTextInsertRowBelowMenu:"Insert below",richTextInsertColumnLeftMenu:"Insert left",richTextInsertColumnRightMenu:"Insert right",richTextDeleteRowOrColumnMenu:"Delete",richTextDeleteColumnMenu:"Delete column",richTextDeleteRowMenu:"Delete row",richTextDeleteTableMenu:"Delete table",richTextToolbarMoreButtonAriaLabel:"More options"};var errorBar$k={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"There was an issue starting screen share.",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network.",unableToStartVideoEffect:"Unable to apply video effect.",startSpotlightWhileMaxParticipantsAreSpotlighted:"Cannot start spotlight on participant(s) because the maximum number of participants are already spotlighted.",mutedByRemoteParticipant:"You were muted by another participant."};var notificationStack={callingNetworkFailure:{title:"Troubling connecting call",message:"You seem to be offline. Please check your network connection and try again.",closeButtonAriaLabel:"Close"},startVideoGeneric:{title:"Failed to start video.",closeButtonAriaLabel:"Close"},stopVideoGeneric:{title:"Failed to stop video.",closeButtonAriaLabel:"Close"},muteGeneric:{title:"Failed to mute microphone.",closeButtonAriaLabel:"Close"},unmuteGeneric:{title:"Failed to unmute microphone.",closeButtonAriaLabel:"Close"},speakingWhileMuted:{title:"You're muted.",closeButtonAriaLabel:"Close"},startScreenShareGeneric:{title:"There was an issue starting screen share.",closeButtonAriaLabel:"Close"},stopScreenShareGeneric:{title:"Failed to stop screen sharing.",closeButtonAriaLabel:"Close"},callNetworkQualityLow:{title:"Network quality is low.",closeButtonAriaLabel:"Close"},callNoSpeakerFound:{title:"No speakers or headphones found",message:"Connect an audio device to hear the call.",closeButtonAriaLabel:"Close"},callNoMicrophoneFound:{title:"No microphones found",message:"Connect an audio input device.",closeButtonAriaLabel:"Close"},callMicrophoneAccessDenied:{title:"Unable to access microphone",message:"Click the lock in the address bar to grant permission to this webpage.",closeButtonAriaLabel:"Close"},callMicrophoneAccessDeniedSafari:{title:"Unable to access microphone",message:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",closeButtonAriaLabel:"Close"},callMicrophoneMutedBySystem:{title:"You are muted by your system.",closeButtonAriaLabel:"Close"},callMicrophoneUnmutedBySystem:{title:"Your microphone recovered and you were unmuted by your system.",closeButtonAriaLabel:"Close"},callMacOsMicrophoneAccessDenied:{title:"Unable to access microphone",message:"Grant microphone permission in your macOS privacy settings.",closeButtonAriaLabel:"Close"},callLocalVideoFreeze:{title:"Network bandwidth is poor",message:"Your video may appear paused for others on the call.",closeButtonAriaLabel:"Close"},callCameraAccessDenied:{title:"Unable to access camera",message:"Click the lock in the address bar to grant permission to this webpage.",closeButtonAriaLabel:"Close"},callCameraAccessDeniedSafari:{title:"Unable to access camera",message:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",closeButtonAriaLabel:"Close"},callCameraAlreadyInUse:{title:"Unable to access camera",message:"It may already be in use by another application.",closeButtonAriaLabel:"Close"},callVideoStoppedBySystem:{title:"Your video has been stopped by your system.",closeButtonAriaLabel:"Close"},callVideoRecoveredBySystem:{title:"Your video has resumed.",closeButtonAriaLabel:"Close"},callMacOsCameraAccessDenied:{title:"MacOS is blocking access to your camera",message:"Update your privacy settings to allow this browser to access your camera.",closeButtonAriaLabel:"Close"},callMacOsScreenShareAccessDenied:{title:"MacOS is blocking screen sharing",message:"Update your privacy settings to allow this browser to record your screen.",closeButtonAriaLabel:"Close"},failedToJoinCallGeneric:{title:"Failed to join call.",closeButtonAriaLabel:"Close"},failedToJoinCallInvalidMeetingLink:{title:"Unable to join Meeting. Invalid Link.",closeButtonAriaLabel:"Close"},cameraFrozenForRemoteParticipants:{title:"Users in the call are having issues seeing your video",message:"Please check your devices and network.",closeButtonAriaLabel:"Close"},unableToStartVideoEffect:{title:"Unable to apply video effect.",closeButtonAriaLabel:"Close"},startSpotlightWhileMaxParticipantsAreSpotlighted:{title:"Cannot start spotlight on participant(s)",message:"The maximum number of participants are already spotlighted.",closeButtonAriaLabel:"Close"},mutedByRemoteParticipant:{title:"You were muted by another participant.",closeButtonAriaLabel:"Close"},recordingStarted:{title:"Recording has started.",message:"By joining, you are giving consent for this meeting to be transcribed.",closeButtonAriaLabel:"Close"},transcriptionStarted:{title:"Transcription has started.",message:"By joining, you are giving consent for this meeting to be transcribed.",closeButtonAriaLabel:"Close"},recordingStopped:{title:"Recording is being saved.",message:"Recording has stopped.",closeButtonAriaLabel:"Close"},transcriptionStopped:{title:"Transcription is being saved.",message:"Transcription has stopped.",closeButtonAriaLabel:"Close"},recordingAndTranscriptionStarted:{title:"Recording and transcription have started.",message:"By joining, you are giving consent for this meeting to be transcribed.",closeButtonAriaLabel:"Close"},recordingAndTranscriptionStopped:{title:"Recording and transcription are being saved.",message:"Recording and transcription have stopped.",closeButtonAriaLabel:"Close"},recordingStoppedStillTranscribing:{title:"Recording has stopped.",message:"You are now only transcribing this meeting.",closeButtonAriaLabel:"Close"},transcriptionStoppedStillRecording:{title:"Transcription has stopped.",message:"You are now only recording this meeting.",closeButtonAriaLabel:"Close"}};var videoGallery$k={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoMovementAriaLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}",startSpotlightVideoTileMenuLabel:"Spotlight for everyone",addSpotlightVideoTileMenuLabel:"Add spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopSpotlightVideoTileMenuLabel:"Stop spotlighting",stopSpotlightOnSelfVideoTileMenuLabel:"Exit spotlight",attendeeRole:"Attendee",muteParticipantMenuItemLabel:"Mute"};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",moreOptionsButtonAriaLabel:"More Options"};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 MeetingConferencePhoneInfo$k={meetingConferencePhoneInfoModalTitle:"Join call from your phone",meetingConferencePhoneInfoModalDialIn:"Dial number",meetingConferencePhoneInfoModalMeetingId:"Enter meeting ID",meetingConferencePhoneInfoModalWait:"Wait to be admitted by organizer",meetingConferencePhoneInfoModalNoPhoneAvailable:"No phone available",meetingConferencePhoneInfoModalTollGeoData:"{country}, {city}",meetingConferencePhoneInfoModalTollFree:"(Toll-free)",meetingConferencePhoneInfoModalToll:"(Toll)"};var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,richTextSendBox:richTextSendBox$k,mentionPopover:mentionPopover$k,imageOverlay:imageOverlay$k,messageStatusIndicator:messageStatusIndicator$k,endCallButton:endCallButton$k,cameraButton:cameraButton$k,microphoneButton:microphoneButton$k,devicesButton:devicesButton$k,participantsButton:participantsButton$k,screenShareButton:screenShareButton$k,raiseHandButton:raiseHandButton$k,reactionButton:reactionButton$k,messageThread:messageThread$k,errorBar:errorBar$k,notificationStack:notificationStack,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,MeetingConferencePhoneInfo:MeetingConferencePhoneInfo$k};
5919
5936
 
5920
5937
  // Copyright (c) Microsoft Corporation.
5921
5938
  // Licensed under the MIT License.
@@ -6430,8 +6447,23 @@ const customNotificationIconName = {
6430
6447
  callMacOsCameraAccessDenied: 'ErrorBarCallMacOsCameraAccessDenied',
6431
6448
  /* @conditional-compile-remove(soft-mute) */
6432
6449
  mutedByRemoteParticipant: 'ErrorBarMutedByRemoteParticipant',
6450
+ speakingWhileMuted: 'ErrorBarCallMicrophoneMutedBySystem',
6451
+ /* @conditional-compile-remove(notifications) */
6452
+ recordingStarted: 'NotificationBarRecording',
6453
+ /* @conditional-compile-remove(notifications) */
6454
+ transcriptionStarted: 'NotificationBarRecording',
6433
6455
  /* @conditional-compile-remove(notifications) */
6434
- speakingWhileMuted: 'ErrorBarCallMicrophoneMutedBySystem'
6456
+ recordingStopped: 'NotificationBarRecording',
6457
+ /* @conditional-compile-remove(notifications) */
6458
+ transcriptionStopped: 'NotificationBarRecording',
6459
+ /* @conditional-compile-remove(notifications) */
6460
+ recordingAndTranscriptionStarted: 'NotificationBarRecording',
6461
+ /* @conditional-compile-remove(notifications) */
6462
+ recordingAndTranscriptionStopped: 'NotificationBarRecording',
6463
+ /* @conditional-compile-remove(notifications) */
6464
+ recordingStoppedStillTranscribing: 'NotificationBarRecording',
6465
+ /* @conditional-compile-remove(notifications) */
6466
+ transcriptionStoppedStillRecording: 'NotificationBarRecording'
6435
6467
  };
6436
6468
  /**
6437
6469
  * @private
@@ -7132,6 +7164,8 @@ const DEFAULT_COMPONENT_ICONS = {
7132
7164
  ErrorBarCallVideoStoppedBySystem: React.createElement(reactIcons.VideoProhibited16Filled, null),
7133
7165
  /* @conditional-compile-remove(soft-mute) */
7134
7166
  ErrorBarMutedByRemoteParticipant: React.createElement(reactIcons.MicOff16Regular, null),
7167
+ /* @conditional-compile-remove(notifications) */
7168
+ NotificationBarRecording: React.createElement(reactIcons.Record16Regular, null),
7135
7169
  HorizontalGalleryLeftButton: React.createElement(GalleryLeftButton, null),
7136
7170
  HorizontalGalleryRightButton: React.createElement(GalleryRightButton, null),
7137
7171
  MessageDelivered: React.createElement(reactIcons.CheckmarkCircle16Regular, null),
@@ -8363,7 +8397,7 @@ const _MentionPopover = (props) => {
8363
8397
 
8364
8398
  // Copyright (c) Microsoft Corporation.
8365
8399
  // Licensed under the MIT License.
8366
- var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
8400
+ var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
8367
8401
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8368
8402
  return new (P || (P = Promise))(function (resolve, reject) {
8369
8403
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -8549,7 +8583,7 @@ const TextFieldWithMention = (props) => {
8549
8583
  onSuggestionSelected,
8550
8584
  updateMentionSuggestions
8551
8585
  ]);
8552
- const debouncedQueryUpdate = useDebounce.useDebouncedCallback((query) => __awaiter$E(void 0, void 0, void 0, function* () {
8586
+ const debouncedQueryUpdate = useDebounce.useDebouncedCallback((query) => __awaiter$F(void 0, void 0, void 0, function* () {
8553
8587
  var _a;
8554
8588
  let suggestions = (_a = (yield (mentionLookupOptions === null || mentionLookupOptions === void 0 ? void 0 : mentionLookupOptions.onQueryUpdated(query)))) !== null && _a !== void 0 ? _a : [];
8555
8589
  suggestions = suggestions.filter((suggestion) => suggestion.displayText.trim() !== '');
@@ -8726,7 +8760,7 @@ const TextFieldWithMention = (props) => {
8726
8760
  });
8727
8761
  }
8728
8762
  }, [updateSelectionIndexesWithMentionIfNeeded, setSelectionStartValue, setSelectionEndValue]);
8729
- const handleOnChange = React.useCallback((_b) => __awaiter$E(void 0, [_b], void 0, function* ({ currentSelectionEnd, currentSelectionStart, currentTriggerStartIndex, event, htmlTextValue, inputTextValue, previousSelectionEnd, previousSelectionStart, tagsValue, updatedValue }) {
8763
+ const handleOnChange = React.useCallback((_b) => __awaiter$F(void 0, [_b], void 0, function* ({ currentSelectionEnd, currentSelectionStart, currentTriggerStartIndex, event, htmlTextValue, inputTextValue, previousSelectionEnd, previousSelectionStart, tagsValue, updatedValue }) {
8730
8764
  var _c;
8731
8765
  debouncedQueryUpdate.cancel();
8732
8766
  if (event.currentTarget === null) {
@@ -9235,7 +9269,7 @@ const ATTACHMENT_CARD_MIN_PROGRESS = 0.05;
9235
9269
 
9236
9270
  // Copyright (c) Microsoft Corporation.
9237
9271
  // Licensed under the MIT License.
9238
- var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
9272
+ var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
9239
9273
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9240
9274
  return new (P || (P = Promise))(function (resolve, reject) {
9241
9275
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -9317,7 +9351,7 @@ const MappedMenuItems = (menuActions, attachment, handleOnClickError) => {
9317
9351
  React.createElement(reactComponents.MenuTrigger, null,
9318
9352
  React.createElement(reactComponents.ToolbarButton, { "aria-label": localeStrings.attachmentMoreMenu, role: "button", icon: React.createElement(react.Icon, { iconName: "AttachmentMoreMenu" }) }))),
9319
9353
  React.createElement(reactComponents.MenuPopover, null,
9320
- React.createElement(reactComponents.MenuList, null, menuActions.map((menuItem, index) => (React.createElement(reactComponents.MenuItem, { "aria-label": menuItem.name, key: index, icon: menuItem.icon, onClick: () => __awaiter$D(void 0, void 0, void 0, function* () {
9354
+ React.createElement(reactComponents.MenuList, null, menuActions.map((menuItem, index) => (React.createElement(reactComponents.MenuItem, { "aria-label": menuItem.name, key: index, icon: menuItem.icon, onClick: () => __awaiter$E(void 0, void 0, void 0, function* () {
9321
9355
  try {
9322
9356
  yield menuItem.onClick(attachment);
9323
9357
  }
@@ -9474,6 +9508,21 @@ const hasIncompleteAttachmentUploads = (attachmentsWithProgress) => {
9474
9508
  const isAttachmentUploadCompleted = (attachmentsWithProgress) => {
9475
9509
  return !!(attachmentsWithProgress === null || attachmentsWithProgress === void 0 ? void 0 : attachmentsWithProgress.find((attachment) => !attachment.error));
9476
9510
  };
9511
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
9512
+ /**
9513
+ * @private
9514
+ */
9515
+ // Before sending the image, we need to add the image id we get back after uploading the images to the message content.
9516
+ const addUploadedImagesToMessage = (message, uploadInlineImages) => {
9517
+ const document = new DOMParser().parseFromString(message !== null && message !== void 0 ? message : '', 'text/html');
9518
+ document.querySelectorAll('img').forEach((img) => {
9519
+ var _a, _b;
9520
+ img.id = (_b = (_a = uploadInlineImages.find((imageUpload) => !imageUpload.error && imageUpload.url === img.src)) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : '';
9521
+ img.src = '';
9522
+ });
9523
+ const newMessage = document.body.innerHTML;
9524
+ return newMessage;
9525
+ };
9477
9526
  /**
9478
9527
  * @private
9479
9528
  */
@@ -10335,6 +10384,9 @@ const richTextEditorWrapperStyle = (theme, addTopOffset) => {
10335
10384
  verticalAlign: 'top'
10336
10385
  }
10337
10386
  }
10387
+ },
10388
+ '& img': {
10389
+ width: '119px'
10338
10390
  }
10339
10391
  });
10340
10392
  };
@@ -10533,7 +10585,7 @@ const insertTableMenuCellButtonStyles = (theme) => {
10533
10585
  return {
10534
10586
  width: '24px',
10535
10587
  height: '24px',
10536
- border: `solid 0.5px ${theme.palette.neutralSecondaryAlt}`,
10588
+ border: `solid 1px ${theme.palette.neutralSecondaryAlt}`,
10537
10589
  cursor: 'pointer',
10538
10590
  background: 'transparent'
10539
10591
  };
@@ -10544,7 +10596,7 @@ const insertTableMenuCellButtonStyles = (theme) => {
10544
10596
  const insertTableMenuCellButtonSelectedStyles = (theme) => {
10545
10597
  return {
10546
10598
  background: theme.palette.themePrimary,
10547
- border: `solid 0.5px ${theme.palette.themeLighterAlt}`
10599
+ border: `solid 1px ${theme.palette.themeLighterAlt}`
10548
10600
  };
10549
10601
  };
10550
10602
  /**
@@ -10562,7 +10614,7 @@ const insertTableMenuFocusZone = (theme) => {
10562
10614
  return react.mergeStyles({
10563
10615
  display: 'inline-grid',
10564
10616
  gridTemplateColumns: 'auto auto auto auto auto',
10565
- border: `solid 0.5px ${theme.palette.neutralSecondaryAlt}`
10617
+ border: `solid 1px ${theme.palette.neutralSecondaryAlt}`
10566
10618
  });
10567
10619
  };
10568
10620
  /**
@@ -10670,6 +10722,8 @@ class CopyPastePlugin {
10670
10722
  dispose() { }
10671
10723
  onPluginEvent(event) {
10672
10724
  handleBeforePasteEvent(event, /* @conditional-compile-remove(rich-text-editor-image-upload) */ this.onPaste);
10725
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
10726
+ handleInlineImage(event, this.onUploadInlineImage);
10673
10727
  if (this.editor !== null && !this.editor.isDisposed()) {
10674
10728
  // scroll the editor to the correct position after pasting content
10675
10729
  scrollToBottomAfterContentPaste(event);
@@ -10685,6 +10739,29 @@ const handleBeforePasteEvent = (event,
10685
10739
  return;
10686
10740
  }
10687
10741
  };
10742
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
10743
+ /**
10744
+ * @internal
10745
+ * Exported only for unit testing
10746
+ */
10747
+ const handleInlineImage = (event, onUploadInlineImage) => {
10748
+ if (event.eventType === PluginEventType.BeforePaste && event.pasteType === 'normal' && onUploadInlineImage) {
10749
+ event.fragment.querySelectorAll('img').forEach((image) => {
10750
+ const clipboardImage = event.clipboardData.image;
10751
+ const fileName = (clipboardImage === null || clipboardImage === void 0 ? void 0 : clipboardImage.name) || (clipboardImage === null || clipboardImage === void 0 ? void 0 : clipboardImage.type.replace('/', '.')) || 'image.png';
10752
+ // If the image src is an external url, call the onUploadInlineImage callback with the url.
10753
+ let imageUrl = image.src;
10754
+ if (image.src.startsWith('data:image/')) {
10755
+ const blobImage = _base64ToBlob(image.src);
10756
+ imageUrl = URL.createObjectURL(blobImage);
10757
+ }
10758
+ onUploadInlineImage(imageUrl, fileName);
10759
+ image.src = imageUrl;
10760
+ image.alt = image.alt || 'image';
10761
+ image.style.width = '119px'; // TODO: find a way to get the original width and height of the image
10762
+ });
10763
+ }
10764
+ };
10688
10765
  /**
10689
10766
  * Update the scroll position of the editor after pasting content to ensure the content is visible.
10690
10767
  * @param event - The plugin event.
@@ -10759,6 +10836,11 @@ var UpdateEvent;
10759
10836
  UpdateEvent["UserInput"] = "UserInput";
10760
10837
  UpdateEvent["Blur"] = "Blur";
10761
10838
  })(UpdateEvent || (UpdateEvent = {}));
10839
+ var Keys;
10840
+ (function (Keys) {
10841
+ Keys[Keys["BACKSPACE"] = 8] = "BACKSPACE";
10842
+ Keys[Keys["DELETE"] = 46] = "DELETE";
10843
+ })(Keys || (Keys = {}));
10762
10844
  /**
10763
10845
  * A plugin to handle content update
10764
10846
  */
@@ -10796,9 +10878,11 @@ class UpdateContentPlugin {
10796
10878
  }
10797
10879
  }
10798
10880
  onPluginEvent(event) {
10881
+ var _a;
10799
10882
  if (this.onUpdate === null) {
10800
10883
  return;
10801
10884
  }
10885
+ let imageSrcArray;
10802
10886
  switch (event.eventType) {
10803
10887
  case PluginEventType.EditorReady:
10804
10888
  this.onUpdate(UpdateEvent.Init);
@@ -10807,7 +10891,26 @@ class UpdateContentPlugin {
10807
10891
  this.onUpdate(UpdateEvent.Dispose);
10808
10892
  break;
10809
10893
  case PluginEventType.ContentChanged:
10810
- this.onUpdate(UpdateEvent.ContentChanged);
10894
+ if (event.source.toLowerCase() === 'cut' ||
10895
+ (event.source.toLowerCase() === 'keyboard' && (event.data === Keys.BACKSPACE || event.data === Keys.DELETE))) {
10896
+ (_a = event.contentModel) === null || _a === void 0 ? void 0 : _a.blocks.map((block) => {
10897
+ if (block.blockType === 'Paragraph') {
10898
+ const segments = block.segments;
10899
+ segments.map((segment) => {
10900
+ if (segment.segmentType === 'Image') {
10901
+ if (!imageSrcArray) {
10902
+ imageSrcArray = [];
10903
+ }
10904
+ imageSrcArray === null || imageSrcArray === void 0 ? void 0 : imageSrcArray.push(segment.src);
10905
+ }
10906
+ });
10907
+ }
10908
+ });
10909
+ }
10910
+ else {
10911
+ imageSrcArray = undefined;
10912
+ }
10913
+ this.onUpdate(UpdateEvent.ContentChanged, imageSrcArray);
10811
10914
  break;
10812
10915
  case PluginEventType.Input:
10813
10916
  this.onUpdate(UpdateEvent.UserInput);
@@ -11443,7 +11546,9 @@ class PlaceholderPlugin extends roosterjsContentModelPlugins.WatermarkPlugin {
11443
11546
  const RichTextEditor = React.forwardRef((props, ref) => {
11444
11547
  const { initialContent, onChange, placeholderText, strings, showRichTextEditorFormatting, autoFocus, onKeyDown, onContentModelUpdate, contentModel,
11445
11548
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
11446
- onPaste } = props;
11549
+ onPaste,
11550
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11551
+ onUploadInlineImage } = props;
11447
11552
  const editor = React.useRef(null);
11448
11553
  const editorDiv = React.useRef(null);
11449
11554
  const theme = useTheme();
@@ -11457,15 +11562,18 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11457
11562
  },
11458
11563
  setEmptyContent() {
11459
11564
  if (editor.current) {
11460
- editor.current.formatContentModel;
11461
11565
  // remove all content from the editor and update the model
11462
11566
  // ContentChanged event will be sent by RoosterJS automatically
11463
11567
  editor.current.formatContentModel((model) => {
11464
- model.blocks = [];
11568
+ // Create a new empty paragraph with selection marker
11569
+ // this is needed for correct processing of images after the content is deleted
11570
+ const block = roosterjsContentModelDom.createParagraph(true);
11571
+ setSelectionAfterLastSegment(model, block);
11572
+ model.blocks = [block];
11465
11573
  return true;
11466
11574
  });
11467
11575
  //reset content model
11468
- onContentModelUpdate && onContentModelUpdate(undefined);
11576
+ onContentModelUpdate && onContentModelUpdate(editor.current.getContentModelCopy('disconnected'));
11469
11577
  }
11470
11578
  },
11471
11579
  getPlainContent() {
@@ -11508,9 +11616,12 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11508
11616
  const updatePlugin = React.useMemo(() => {
11509
11617
  return new UpdateContentPlugin();
11510
11618
  }, []);
11619
+ const copyPastePlugin = React.useMemo(() => {
11620
+ return new CopyPastePlugin();
11621
+ }, []);
11511
11622
  React.useEffect(() => {
11512
11623
  // don't set callback in plugin constructor to update callback without plugin recreation
11513
- updatePlugin.onUpdate = (event) => {
11624
+ updatePlugin.onUpdate = (event, imageSrcArray) => {
11514
11625
  if (editor.current === null) {
11515
11626
  return;
11516
11627
  }
@@ -11518,10 +11629,14 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11518
11629
  onContentModelUpdate && onContentModelUpdate(editor.current.getContentModelCopy('disconnected'));
11519
11630
  }
11520
11631
  else {
11521
- onChange && onChange(roosterjsContentModelCore.exportContent(editor.current));
11632
+ onChange && onChange(roosterjsContentModelCore.exportContent(editor.current), imageSrcArray);
11522
11633
  }
11523
11634
  };
11524
11635
  }, [onChange, onContentModelUpdate, updatePlugin]);
11636
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11637
+ React.useEffect(() => {
11638
+ copyPastePlugin.onUploadInlineImage = onUploadInlineImage;
11639
+ }, [copyPastePlugin, onUploadInlineImage]);
11525
11640
  const keyboardInputPlugin = React.useMemo(() => {
11526
11641
  return new KeyboardInputPlugin();
11527
11642
  }, []);
@@ -11545,9 +11660,6 @@ const RichTextEditor = React.forwardRef((props, ref) => {
11545
11660
  const onContextMenuDismiss = React.useCallback(() => {
11546
11661
  setContextMenuProps(null);
11547
11662
  }, []);
11548
- const copyPastePlugin = React.useMemo(() => {
11549
- return new CopyPastePlugin();
11550
- }, []);
11551
11663
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
11552
11664
  React.useEffect(() => {
11553
11665
  copyPastePlugin.onPaste = onPaste;
@@ -11645,13 +11757,16 @@ const createEditorInitialModel = (initialContent, contentModel) => {
11645
11757
  lastBlock = roosterjsContentModelDom.createParagraph(true);
11646
11758
  initialModel.blocks.push(lastBlock);
11647
11759
  }
11648
- const marker = roosterjsContentModelDom.createSelectionMarker();
11649
- lastBlock.segments.push(marker);
11650
- roosterjsContentModelDom.setSelection(initialModel, marker);
11760
+ setSelectionAfterLastSegment(initialModel, lastBlock);
11651
11761
  }
11652
11762
  return initialModel;
11653
11763
  }
11654
11764
  };
11765
+ const setSelectionAfterLastSegment = (model, block) => {
11766
+ const marker = roosterjsContentModelDom.createSelectionMarker();
11767
+ block.segments.push(marker);
11768
+ roosterjsContentModelDom.setSelection(model, marker);
11769
+ };
11655
11770
 
11656
11771
  // Copyright (c) Microsoft Corporation.
11657
11772
  // Licensed under the MIT License.
@@ -11695,7 +11810,9 @@ const RichTextInputBoxComponent = (props) => {
11695
11810
  /* @conditional-compile-remove(file-sharing-acs) */
11696
11811
  onRenderAttachmentUploads,
11697
11812
  /* @conditional-compile-remove(file-sharing-acs) */
11698
- hasAttachments, richTextEditorStyleProps, isHorizontalLayoutDisabled = false, autoFocus, onTyping } = props;
11813
+ hasAttachments, richTextEditorStyleProps, isHorizontalLayoutDisabled = false, autoFocus, onTyping,
11814
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11815
+ onUploadInlineImage } = props;
11699
11816
  const theme = useTheme();
11700
11817
  // undefined is used to indicate that the rich text editor toolbar state wasn't changed yet
11701
11818
  const [showRichTextEditorFormatting, setShowRichTextEditorFormatting] = React.useState(undefined);
@@ -11768,7 +11885,9 @@ const RichTextInputBoxComponent = (props) => {
11768
11885
  React.createElement(react.Stack.Item, { className: inputBoxRichTextStackItemStyle },
11769
11886
  React.createElement(RichTextEditor, { contentModel: contentModel, initialContent: initialContent, placeholderText: placeholderText, onChange: onChange, onKeyDown: onKeyDown, ref: editorComponentRef, strings: strings, showRichTextEditorFormatting: showRichTextEditorFormatting === true, styles: richTextEditorStyle, autoFocus: autoFocus, onContentModelUpdate: onContentModelUpdate,
11770
11887
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
11771
- onPaste: props.onPaste })), /* @conditional-compile-remove(file-sharing-acs) */
11888
+ onPaste: props.onPaste,
11889
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11890
+ onUploadInlineImage: onUploadInlineImage })), /* @conditional-compile-remove(file-sharing-acs) */
11772
11891
  onRenderAttachmentUploads && onRenderAttachmentUploads()),
11773
11892
  actionButtons)));
11774
11893
  };
@@ -11853,7 +11972,13 @@ const RichTextSendBox = (props) => {
11853
11972
  /* @conditional-compile-remove(file-sharing-acs) */
11854
11973
  onCancelAttachmentUpload,
11855
11974
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
11856
- onPaste } = props;
11975
+ onPaste,
11976
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11977
+ onUploadInlineImage,
11978
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11979
+ imageUploadsInProgress,
11980
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11981
+ onCancelInlineImageUpload } = props;
11857
11982
  const theme = useTheme();
11858
11983
  const locale = useLocale$1();
11859
11984
  const localeStrings = React.useMemo(() => {
@@ -11878,6 +12003,22 @@ const RichTextSendBox = (props) => {
11878
12003
  setContentValueOverflow(isMessageTooLong(newValue.length));
11879
12004
  setContentValue(newValue);
11880
12005
  }, []);
12006
+ const onChangeHandler = React.useCallback((newValue,
12007
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageSrcArray) => {
12008
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12009
+ if (imageSrcArray && imageUploadsInProgress && (imageUploadsInProgress === null || imageUploadsInProgress === void 0 ? void 0 : imageUploadsInProgress.length) > 0) {
12010
+ imageUploadsInProgress === null || imageUploadsInProgress === void 0 ? void 0 : imageUploadsInProgress.map((uploadImage) => {
12011
+ if (uploadImage.url && imageSrcArray && !(imageSrcArray === null || imageSrcArray === void 0 ? void 0 : imageSrcArray.includes(uploadImage.url))) {
12012
+ onCancelInlineImageUpload === null || onCancelInlineImageUpload === void 0 ? void 0 : onCancelInlineImageUpload(uploadImage.id);
12013
+ }
12014
+ });
12015
+ }
12016
+ setContent(newValue);
12017
+ }, [
12018
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ onCancelInlineImageUpload,
12019
+ setContent,
12020
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageUploadsInProgress
12021
+ ]);
11881
12022
  const hasContent = React.useMemo(() => {
11882
12023
  var _a;
11883
12024
  // get plain text content from the editor to check if the message is empty
@@ -11886,16 +12027,24 @@ const RichTextSendBox = (props) => {
11886
12027
  return sanitizeText(contentValue !== null && contentValue !== void 0 ? contentValue : '').length > 0 && sanitizeText(plainTextContent !== null && plainTextContent !== void 0 ? plainTextContent : '').length > 0;
11887
12028
  }, [contentValue]);
11888
12029
  /* @conditional-compile-remove(file-sharing-acs) */
11889
- const toAttachmentMetadata = React.useCallback((attachmentsWithProgress) => {
12030
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12031
+ const toAttachmentMetadata = React.useCallback((attachmentsWithProgress,
12032
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ attachmentType) => {
11890
12033
  return attachmentsWithProgress === null || attachmentsWithProgress === void 0 ? void 0 : attachmentsWithProgress.filter((attachment) => {
11891
12034
  var _a;
11892
12035
  return !('error' in attachment) && !((_a = attachment.error) === null || _a === void 0 ? void 0 : _a.message);
11893
12036
  }).map((attachment) => {
11894
- var _a;
12037
+ let url = attachment.url || '';
12038
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12039
+ if (attachmentType === 'image') {
12040
+ url = '';
12041
+ }
11895
12042
  return {
11896
12043
  id: attachment.id,
11897
12044
  name: attachment.name,
11898
- url: (_a = attachment.url) !== null && _a !== void 0 ? _a : ''
12045
+ url,
12046
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12047
+ attachmentType: attachmentType
11899
12048
  };
11900
12049
  });
11901
12050
  }, []);
@@ -11908,19 +12057,35 @@ const RichTextSendBox = (props) => {
11908
12057
  /* @conditional-compile-remove(file-sharing-acs) */
11909
12058
  setAttachmentUploadsPendingError(undefined);
11910
12059
  /* @conditional-compile-remove(file-sharing-acs) */
11911
- if (hasIncompleteAttachmentUploads(attachments)) {
12060
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12061
+ if (
12062
+ /* @conditional-compile-remove(file-sharing-acs) */ hasIncompleteAttachmentUploads(attachments) ||
12063
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ hasIncompleteAttachmentUploads(imageUploadsInProgress)) {
11912
12064
  setAttachmentUploadsPendingError({ message: strings.attachmentUploadsPendingError, timestamp: Date.now() });
11913
12065
  return;
11914
12066
  }
11915
- const message = contentValue;
12067
+ let message = contentValue;
11916
12068
  // we don't want to send empty messages including spaces, newlines, tabs
11917
12069
  // Message can be empty if there is a valid attachment upload
11918
- if (hasContent || /* @conditional-compile-remove(file-sharing-acs) */ isAttachmentUploadCompleted(attachments)) {
12070
+ if (hasContent ||
12071
+ /* @conditional-compile-remove(file-sharing-acs) */ isAttachmentUploadCompleted(attachments) ||
12072
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ isAttachmentUploadCompleted(imageUploadsInProgress)) {
12073
+ /* @conditional-compile-remove(file-sharing-acs) */
12074
+ let attachmentArray = toAttachmentMetadata(attachments);
12075
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12076
+ if (imageUploadsInProgress) {
12077
+ const imageArray = toAttachmentMetadata(imageUploadsInProgress, 'image');
12078
+ if (imageArray) {
12079
+ message = addUploadedImagesToMessage(message, imageUploadsInProgress);
12080
+ attachmentArray = attachmentArray === null || attachmentArray === void 0 ? void 0 : attachmentArray.concat(imageArray);
12081
+ }
12082
+ }
11919
12083
  onSendMessage(message,
11920
12084
  /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */
11921
12085
  {
11922
12086
  /* @conditional-compile-remove(file-sharing-acs) */
11923
- attachments: toAttachmentMetadata(attachments),
12087
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12088
+ attachments: attachmentArray,
11924
12089
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
11925
12090
  type: 'html'
11926
12091
  });
@@ -11933,29 +12098,37 @@ const RichTextSendBox = (props) => {
11933
12098
  contentValueOverflow,
11934
12099
  /* @conditional-compile-remove(file-sharing-acs) */
11935
12100
  attachments,
12101
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12102
+ imageUploadsInProgress,
11936
12103
  contentValue,
11937
12104
  hasContent,
11938
12105
  /* @conditional-compile-remove(file-sharing-acs) */
12106
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
11939
12107
  strings.attachmentUploadsPendingError,
11940
- onSendMessage,
11941
12108
  /* @conditional-compile-remove(file-sharing-acs) */
11942
- toAttachmentMetadata
12109
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12110
+ toAttachmentMetadata,
12111
+ onSendMessage
11943
12112
  ]);
11944
12113
  const hasErrorMessage = React.useMemo(() => {
11945
- var _a;
12114
+ var _a, _b;
11946
12115
  return (!!systemMessage ||
11947
12116
  !!contentTooLongMessage ||
11948
12117
  /* @conditional-compile-remove(file-sharing-acs) */
11949
12118
  !!attachmentUploadsPendingError ||
11950
12119
  /* @conditional-compile-remove(file-sharing-acs) */
11951
- !!((_a = attachments === null || attachments === void 0 ? void 0 : attachments.filter((attachmentUpload) => attachmentUpload.error).pop()) === null || _a === void 0 ? void 0 : _a.error));
12120
+ !!((_a = attachments === null || attachments === void 0 ? void 0 : attachments.filter((attachmentUpload) => attachmentUpload.error).pop()) === null || _a === void 0 ? void 0 : _a.error) ||
12121
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12122
+ !!((_b = imageUploadsInProgress === null || imageUploadsInProgress === void 0 ? void 0 : imageUploadsInProgress.filter((image) => image.error).pop()) === null || _b === void 0 ? void 0 : _b.error));
11952
12123
  }, [
11953
12124
  /* @conditional-compile-remove(file-sharing-acs) */
11954
12125
  attachments,
11955
12126
  contentTooLongMessage,
11956
12127
  /* @conditional-compile-remove(file-sharing-acs) */
11957
12128
  attachmentUploadsPendingError,
11958
- systemMessage
12129
+ systemMessage,
12130
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12131
+ imageUploadsInProgress
11959
12132
  ]);
11960
12133
  const onRenderSendIcon = React.useCallback((isHover) => {
11961
12134
  return (React.createElement(react.Icon, { iconName: isHover && hasContent ? 'SendBoxSendHovered' : 'SendBoxSend', className: sendIconStyle({
@@ -12034,13 +12207,15 @@ const RichTextSendBox = (props) => {
12034
12207
  }, [attachments]);
12035
12208
  return (React.createElement(react.Stack, null,
12036
12209
  React.createElement(RichTextSendBoxErrors, Object.assign({}, sendBoxErrorsProps)),
12037
- React.createElement(RichTextInputBoxComponent, { placeholderText: strings.placeholderText, autoFocus: autoFocus, onChange: setContent, onEnterKeyDown: sendMessageOnClick, onTyping: onTyping, editorComponentRef: editorComponentRef, strings: strings, disabled: disabled, actionComponents: sendButton, richTextEditorStyleProps: sendBoxRichTextEditorStyle,
12210
+ React.createElement(RichTextInputBoxComponent, { placeholderText: strings.placeholderText, autoFocus: autoFocus, onChange: onChangeHandler, onEnterKeyDown: sendMessageOnClick, onTyping: onTyping, editorComponentRef: editorComponentRef, strings: strings, disabled: disabled, actionComponents: sendButton, richTextEditorStyleProps: sendBoxRichTextEditorStyle,
12038
12211
  /* @conditional-compile-remove(file-sharing-acs) */
12039
12212
  onRenderAttachmentUploads: onRenderAttachmentUploads,
12040
12213
  /* @conditional-compile-remove(file-sharing-acs) */
12041
12214
  hasAttachments: hasAttachmentUploads,
12042
12215
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
12043
- onPaste: onPaste })));
12216
+ onPaste: onPaste,
12217
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
12218
+ onUploadInlineImage: onUploadInlineImage })));
12044
12219
  };
12045
12220
 
12046
12221
  // Copyright (c) Microsoft Corporation.
@@ -12698,7 +12873,7 @@ const MessageStatusIndicatorInternal = (props) => {
12698
12873
  switch (status) {
12699
12874
  case 'failed':
12700
12875
  return (React.createElement(react.TooltipHost, { content: strings.failedToSendTooltipText, "data-ui-id": "chat-composite-message-tooltip", calloutProps: Object.assign({}, calloutProps), styles: hostStyles$1 },
12701
- React.createElement(MemoMessageStatusIcon, { shouldAnnounce: shouldAnnounce, iconName: "MessageFailed", iconClassName: react.mergeStyles(MessageStatusIndicatorErrorIconStyle, { color: theme.palette.redDark }, styles === null || styles === void 0 ? void 0 : styles.root), ariaLabel: strings.failedToSendAriaLabel })));
12876
+ React.createElement(MemoMessageStatusIcon, { shouldAnnounce: shouldAnnounce, iconName: "MessageFailed", iconClassName: react.mergeStyles(MessageStatusIndicatorErrorIconStyle, { color: isDarkThemed(theme) ? theme.semanticColors.errorText : theme.palette.redDark }, styles === null || styles === void 0 ? void 0 : styles.root), ariaLabel: strings.failedToSendAriaLabel })));
12702
12877
  case 'sending':
12703
12878
  return (React.createElement(react.TooltipHost, { content: strings.sendingTooltipText, "data-ui-id": "chat-composite-message-tooltip", calloutProps: Object.assign({}, calloutProps), styles: hostStyles$1 },
12704
12879
  React.createElement(MemoMessageStatusIcon, { shouldAnnounce: shouldAnnounce, iconName: "MessageSending", iconClassName: react.mergeStyles(MessageStatusIndicatorIconStyle, { color: theme.palette.themePrimary }, styles === null || styles === void 0 ? void 0 : styles.root), ariaLabel: strings.sendingAriaLabel })));
@@ -13986,7 +14161,7 @@ class _ErrorBoundary extends React.Component {
13986
14161
  // Copyright (c) Microsoft Corporation.
13987
14162
  // Licensed under the MIT License.
13988
14163
  /* @conditional-compile-remove(rich-text-editor) */
13989
- const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DeZQ3bKG.js'); }));
14164
+ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DMEk2o-G.js'); }));
13990
14165
  /**
13991
14166
  * @private
13992
14167
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -13994,7 +14169,7 @@ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve()
13994
14169
  *
13995
14170
  * @conditional-compile-remove(rich-text-editor)
13996
14171
  */
13997
- const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DeZQ3bKG.js'); });
14172
+ const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-DMEk2o-G.js'); });
13998
14173
  /**
13999
14174
  * @private
14000
14175
  */
@@ -14017,7 +14192,7 @@ const ChatMessageComponentAsEditBoxPicker = (props) => {
14017
14192
 
14018
14193
  // Copyright (c) Microsoft Corporation.
14019
14194
  // Licensed under the MIT License.
14020
- var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14195
+ var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14021
14196
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14022
14197
  return new (P || (P = Promise))(function (resolve, reject) {
14023
14198
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -14062,7 +14237,7 @@ const ChatMyMessageComponent = (props) => {
14062
14237
  function (text,
14063
14238
  /* @conditional-compile-remove(file-sharing-acs) */
14064
14239
  attachments) {
14065
- return __awaiter$C(this, void 0, void 0, function* () {
14240
+ return __awaiter$D(this, void 0, void 0, function* () {
14066
14241
  /* @conditional-compile-remove(file-sharing-acs) */
14067
14242
  if (`attachments` in message && attachments) {
14068
14243
  message.attachments = attachments;
@@ -14470,7 +14645,7 @@ const fluentChatComponent = (props) => {
14470
14645
 
14471
14646
  // Copyright (c) Microsoft Corporation.
14472
14647
  // Licensed under the MIT License.
14473
- var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14648
+ var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14474
14649
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14475
14650
  return new (P || (P = Promise))(function (resolve, reject) {
14476
14651
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -14666,7 +14841,7 @@ const MessageThreadWrapper = (props) => {
14666
14841
  loadChatMessageComponentAsRichTextEditBox();
14667
14842
  }
14668
14843
  }, [richTextEditorOptions]);
14669
- const onDeleteMessageCallback = React.useCallback((messageId) => __awaiter$B(void 0, void 0, void 0, function* () {
14844
+ const onDeleteMessageCallback = React.useCallback((messageId) => __awaiter$C(void 0, void 0, void 0, function* () {
14670
14845
  if (!onDeleteMessage) {
14671
14846
  return;
14672
14847
  }
@@ -14747,7 +14922,7 @@ const MessageThreadWrapper = (props) => {
14747
14922
  */
14748
14923
  const clientHeight = (_a = chatThreadRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight;
14749
14924
  // we try to only send those message status if user is scrolled to the bottom.
14750
- const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$B(void 0, void 0, void 0, function* () {
14925
+ const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$C(void 0, void 0, void 0, function* () {
14751
14926
  if (!isAtBottomOfScrollRef.current ||
14752
14927
  !document.hasFocus() ||
14753
14928
  !messagesRef.current ||
@@ -14798,7 +14973,7 @@ const MessageThreadWrapper = (props) => {
14798
14973
  setIsAtBottomOfScrollRef(atBottom);
14799
14974
  }, [scrollToBottom, sendMessageStatusIfAtBottom]);
14800
14975
  // Infinite scrolling + threadInitialize function
14801
- const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$B(void 0, void 0, void 0, function* () {
14976
+ const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$C(void 0, void 0, void 0, function* () {
14802
14977
  if (!isLoadingChatMessagesRef.current) {
14803
14978
  if (onLoadPreviousChatMessages) {
14804
14979
  isLoadingChatMessagesRef.current = true;
@@ -17828,7 +18003,7 @@ const localVideoTileContainerStyles = {
17828
18003
 
17829
18004
  // Copyright (c) Microsoft Corporation.
17830
18005
  // Licensed under the MIT License.
17831
- var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18006
+ var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17832
18007
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17833
18008
  return new (P || (P = Promise))(function (resolve, reject) {
17834
18009
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -17845,7 +18020,7 @@ const LocalVideoCameraCycleButton = (props) => {
17845
18020
  const { cameras, selectedCamera, onSelectCamera, label, ariaDescription, size } = props;
17846
18021
  const theme = react.useTheme();
17847
18022
  const [waitForCamera, setWaitForCamera] = React.useState(false);
17848
- const onChangeCameraClick = React.useCallback((device) => __awaiter$A(void 0, void 0, void 0, function* () {
18023
+ const onChangeCameraClick = React.useCallback((device) => __awaiter$B(void 0, void 0, void 0, function* () {
17849
18024
  // Throttle changing camera to prevent too many callbacks
17850
18025
  if (onSelectCamera) {
17851
18026
  setWaitForCamera(true);
@@ -20618,7 +20793,7 @@ const DevicesButton = (props) => {
20618
20793
 
20619
20794
  // Copyright (c) Microsoft Corporation.
20620
20795
  // Licensed under the MIT License.
20621
- var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20796
+ var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20622
20797
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20623
20798
  return new (P || (P = Promise))(function (resolve, reject) {
20624
20799
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -20656,7 +20831,7 @@ const CameraButton = (props) => {
20656
20831
  const toggleAnnouncerString = React.useCallback((isCameraOn) => {
20657
20832
  setAnnouncerString(!isCameraOn ? strings.cameraActionTurnedOffAnnouncement : strings.cameraActionTurnedOnAnnouncement);
20658
20833
  }, [strings.cameraActionTurnedOffAnnouncement, strings.cameraActionTurnedOnAnnouncement]);
20659
- const onToggleClick = React.useCallback(() => __awaiter$z(void 0, void 0, void 0, function* () {
20834
+ const onToggleClick = React.useCallback(() => __awaiter$A(void 0, void 0, void 0, function* () {
20660
20835
  // Throttle click on camera, need to await onToggleCamera then allow another click
20661
20836
  if (onToggleCamera) {
20662
20837
  setWaitForCamera(true);
@@ -20670,7 +20845,7 @@ const CameraButton = (props) => {
20670
20845
  }
20671
20846
  }
20672
20847
  }), [cameraOn, localVideoViewOptions, onToggleCamera, toggleAnnouncerString]);
20673
- const onChangeCameraClick = React.useCallback((device) => __awaiter$z(void 0, void 0, void 0, function* () {
20848
+ const onChangeCameraClick = React.useCallback((device) => __awaiter$A(void 0, void 0, void 0, function* () {
20674
20849
  // Throttle changing camera to prevent too many callbacks
20675
20850
  if (onSelectCamera) {
20676
20851
  setWaitForCamera(true);
@@ -20891,7 +21066,7 @@ const menupButtonPadding = {
20891
21066
 
20892
21067
  // Copyright (c) Microsoft Corporation.
20893
21068
  // Licensed under the MIT License.
20894
- var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21069
+ var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20895
21070
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20896
21071
  return new (P || (P = Promise))(function (resolve, reject) {
20897
21072
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -20932,7 +21107,7 @@ const MicrophoneButton = (props) => {
20932
21107
  const toggleAnnouncerString = React.useCallback((isMicOn) => {
20933
21108
  setAnnouncerString(!isMicOn ? strings.microphoneActionTurnedOffAnnouncement : strings.microphoneActionTurnedOnAnnouncement);
20934
21109
  }, [strings.microphoneActionTurnedOffAnnouncement, strings.microphoneActionTurnedOnAnnouncement]);
20935
- const onToggleClick = React.useCallback(() => __awaiter$y(void 0, void 0, void 0, function* () {
21110
+ const onToggleClick = React.useCallback(() => __awaiter$z(void 0, void 0, void 0, function* () {
20936
21111
  if (onToggleMicrophone) {
20937
21112
  try {
20938
21113
  yield onToggleMicrophone();
@@ -21563,247 +21738,6 @@ const secondaryTileFloatingStyles = {
21563
21738
  right: '0.125rem'
21564
21739
  };
21565
21740
 
21566
- // Copyright (c) Microsoft Corporation.
21567
- // Licensed under the MIT License.
21568
- /**
21569
- * Return different conditions based on the current and previous state of recording and transcribing
21570
- *
21571
- * @param callRecordState - The current call record state: on, off, stopped
21572
- * @param callTranscribeState - The current call transcribe state: on, off, stopped
21573
- *
21574
- * @remarks - The stopped state means: previously on but currently off
21575
- *
21576
- * @private
21577
- */
21578
- const computeVariant = (callRecordState, callTranscribeState) => {
21579
- if (callRecordState === 'on' && callTranscribeState === 'on') {
21580
- return 'RECORDING_AND_TRANSCRIPTION_STARTED';
21581
- }
21582
- else if (callRecordState === 'on' && callTranscribeState === 'off') {
21583
- return 'RECORDING_STARTED';
21584
- }
21585
- else if (callRecordState === 'off' && callTranscribeState === 'on') {
21586
- return 'TRANSCRIPTION_STARTED';
21587
- }
21588
- else if (callRecordState === 'on' && callTranscribeState === 'stopped') {
21589
- return 'TRANSCRIPTION_STOPPED_STILL_RECORDING';
21590
- }
21591
- else if (callRecordState === 'stopped' && callTranscribeState === 'on') {
21592
- return 'RECORDING_STOPPED_STILL_TRANSCRIBING';
21593
- }
21594
- else if (callRecordState === 'off' && callTranscribeState === 'stopped') {
21595
- return 'TRANSCRIPTION_STOPPED';
21596
- }
21597
- else if (callRecordState === 'stopped' && callTranscribeState === 'off') {
21598
- return 'RECORDING_STOPPED';
21599
- }
21600
- else if (callRecordState === 'stopped' && callTranscribeState === 'stopped') {
21601
- return 'RECORDING_AND_TRANSCRIPTION_STOPPED';
21602
- }
21603
- else {
21604
- return 'NO_STATE';
21605
- }
21606
- };
21607
-
21608
- // Copyright (c) Microsoft Corporation.
21609
- // Licensed under the MIT License.
21610
- /** @private */
21611
- function BannerMessage(props) {
21612
- const { variant, strings } = props;
21613
- switch (variant) {
21614
- case 'TRANSCRIPTION_STOPPED_STILL_RECORDING':
21615
- return (React.createElement(React.Fragment, null,
21616
- React.createElement("b", null, strings.complianceBannerTranscriptionStopped),
21617
- ` ${strings.complianceBannerNowOnlyRecording}`,
21618
- React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
21619
- case 'RECORDING_STOPPED_STILL_TRANSCRIBING':
21620
- return (React.createElement(React.Fragment, null,
21621
- React.createElement("b", null, strings.complianceBannerRecordingStopped),
21622
- ` ${strings.complianceBannerNowOnlyTranscription}`,
21623
- React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
21624
- case 'RECORDING_AND_TRANSCRIPTION_STOPPED':
21625
- return (React.createElement(React.Fragment, null,
21626
- React.createElement("b", null, strings.complianceBannerRecordingAndTranscriptionSaved),
21627
- ` ${strings.complianceBannerRecordingAndTranscriptionStopped}`,
21628
- React.createElement(LearnMore, { linkText: strings.learnMore })));
21629
- case 'RECORDING_AND_TRANSCRIPTION_STARTED':
21630
- return (React.createElement(React.Fragment, null,
21631
- React.createElement("b", null, strings.complianceBannerRecordingAndTranscriptionStarted),
21632
- ` ${strings.complianceBannerTranscriptionConsent}`,
21633
- React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
21634
- case 'TRANSCRIPTION_STARTED':
21635
- return (React.createElement(React.Fragment, null,
21636
- React.createElement("b", null, strings.complianceBannerTranscriptionStarted),
21637
- ` ${strings.complianceBannerTranscriptionConsent}`,
21638
- React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
21639
- case 'RECORDING_STOPPED':
21640
- return (React.createElement(React.Fragment, null,
21641
- React.createElement("b", null, strings.complianceBannerRecordingSaving),
21642
- ` ${strings.complianceBannerRecordingStopped}`,
21643
- React.createElement(LearnMore, { linkText: strings.learnMore })));
21644
- case 'RECORDING_STARTED':
21645
- return (React.createElement(React.Fragment, null,
21646
- React.createElement("b", null, strings.complianceBannerRecordingStarted),
21647
- ` ${strings.complianceBannerTranscriptionConsent}`,
21648
- React.createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
21649
- case 'TRANSCRIPTION_STOPPED':
21650
- return (React.createElement(React.Fragment, null,
21651
- React.createElement("b", null, strings.complianceBannerTranscriptionSaving),
21652
- ` ${strings.complianceBannerTranscriptionStopped}`,
21653
- React.createElement(LearnMore, { linkText: strings.learnMore })));
21654
- }
21655
- return React.createElement(React.Fragment, null);
21656
- }
21657
- function PrivacyPolicy(props) {
21658
- return (React.createElement(react.Link, { href: "https://privacy.microsoft.com/privacystatement#mainnoticetoendusersmodule", target: "_blank", underline: true }, props.linkText));
21659
- }
21660
- function LearnMore(props) {
21661
- return (React.createElement(react.Link, { href: "https://support.microsoft.com/office/record-a-meeting-in-teams-34dfbe7f-b07d-4a27-b4c6-de62f1348c24", target: "_blank", underline: true }, props.linkText));
21662
- }
21663
-
21664
- // Copyright (c) Microsoft Corporation.
21665
- // Licensed under the MIT License.
21666
- const BANNER_OVERWRITE_DELAY_MS = 3000;
21667
- /**
21668
- * Shows a {@link BannerMessage} in a {@link MessageBar} tracking `variant` internally.
21669
- *
21670
- * This component delays and combines frequent updates to `variant` such that:
21671
- * - Updates that happen within {@link BANNER_OVERWRITE_DELAY_MS} are delayed.
21672
- * - Once {@link BANNER_OVERWRITE_DELAY_MS} has passed since the last update, the _latest_ pending update is shown.
21673
- *
21674
- * This ensures that there is enough time for the user to see a banner message before it is overwritten.
21675
- * In case of multiple delayed messages, the user always sees the final message as it reflects the final state
21676
- * of recording and transcription.
21677
- *
21678
- * @private
21679
- */
21680
- function DelayedUpdateBanner(props) {
21681
- const { variant, lastUpdated: variantLastUpdated } = props.variant;
21682
- // Tracks the variant that is currently visible in the UI.
21683
- const [visible, setVisible] = React.useState({
21684
- variant,
21685
- lastUpdated: Date.now()
21686
- });
21687
- const pendingUpdateHandle = React.useRef(null);
21688
- if (variant !== visible.variant && variantLastUpdated > visible.lastUpdated) {
21689
- // Always clear pending updates.
21690
- // We'll either update now, or schedule an update for later.
21691
- if (pendingUpdateHandle.current) {
21692
- clearTimeout(pendingUpdateHandle.current);
21693
- }
21694
- const now = Date.now();
21695
- const timeToNextUpdate = BANNER_OVERWRITE_DELAY_MS - (now - visible.lastUpdated);
21696
- if (variant === 'NO_STATE' || timeToNextUpdate <= 0) {
21697
- setVisible({
21698
- variant,
21699
- lastUpdated: now
21700
- });
21701
- }
21702
- else {
21703
- pendingUpdateHandle.current = setTimeout(() => {
21704
- // Set the actual update time, not the computed time when the update should happen.
21705
- // The actual update might be later than we planned.
21706
- setVisible({
21707
- variant,
21708
- lastUpdated: Date.now()
21709
- });
21710
- }, timeToNextUpdate);
21711
- }
21712
- }
21713
- if (visible.variant === 'NO_STATE') {
21714
- return React.createElement(React.Fragment, null);
21715
- }
21716
- return (React.createElement(react.MessageBar, { messageBarType: react.MessageBarType.warning, onDismiss: () => {
21717
- // when closing the banner, change variant to nostate and change stopped state to off state.
21718
- // Reason: on banner close, going back to the default state.
21719
- setVisible({
21720
- variant: 'NO_STATE',
21721
- lastUpdated: Date.now()
21722
- });
21723
- props.onDismiss();
21724
- }, dismissButtonAriaLabel: props.strings.close },
21725
- React.createElement(BannerMessage, { variant: visible.variant, strings: props.strings })));
21726
- }
21727
-
21728
- // Copyright (c) Microsoft Corporation.
21729
- // Licensed under the MIT License.
21730
- /**
21731
- * A component that displays banners to notify the user when call recording and
21732
- * transcription is enabled or disabled in a call.
21733
- *
21734
- * This component implements a state machine that tracks the changes to call
21735
- * recording and transcription state and shows the corresponding message.
21736
- *
21737
- * @internal
21738
- */
21739
- const _ComplianceBanner = (props) => {
21740
- const cachedProps = React.useRef({
21741
- latestBooleanState: {
21742
- callTranscribeState: false,
21743
- callRecordState: false
21744
- },
21745
- latestStringState: {
21746
- callTranscribeState: 'off',
21747
- callRecordState: 'off'
21748
- },
21749
- lastUpdated: Date.now()
21750
- });
21751
- // Only update cached props and variant if there is _some_ change in the latest props.
21752
- // This ensures that state machine is only updated if there is an actual change in the props.
21753
- const shouldUpdateCached = props.callRecordState !== cachedProps.current.latestBooleanState.callRecordState ||
21754
- props.callTranscribeState !== cachedProps.current.latestBooleanState.callTranscribeState;
21755
- // The following three operations must be performed in this exact order:
21756
- // [1]: Update cached state to transition the state machine.
21757
- if (shouldUpdateCached) {
21758
- cachedProps.current = {
21759
- latestBooleanState: props,
21760
- latestStringState: {
21761
- callRecordState: determineStates(cachedProps.current.latestStringState.callRecordState, props.callRecordState),
21762
- callTranscribeState: determineStates(cachedProps.current.latestStringState.callTranscribeState, props.callTranscribeState)
21763
- },
21764
- lastUpdated: Date.now()
21765
- };
21766
- }
21767
- // [2]: Compute the variant, using the transitioned state machine.
21768
- const variant = computeVariant(cachedProps.current.latestStringState.callRecordState, cachedProps.current.latestStringState.callTranscribeState);
21769
- // [3]: Transition the state machine again to deal with some end-states.
21770
- if (shouldUpdateCached &&
21771
- cachedProps.current.latestStringState.callRecordState === 'stopped' &&
21772
- cachedProps.current.latestStringState.callTranscribeState === 'stopped') {
21773
- // When both states are stopped, after displaying message "RECORDING_AND_TRANSCRIPTION_STOPPED", change both states to off (going back to the default state).
21774
- cachedProps.current.latestStringState.callRecordState = 'off';
21775
- cachedProps.current.latestStringState.callTranscribeState = 'off';
21776
- }
21777
- return (React.createElement(DelayedUpdateBanner, { variant: {
21778
- variant,
21779
- lastUpdated: cachedProps.current.lastUpdated
21780
- }, strings: props.strings, onDismiss: () => {
21781
- if (cachedProps.current.latestStringState.callRecordState === 'stopped') {
21782
- cachedProps.current.latestStringState.callRecordState = 'off';
21783
- }
21784
- if (cachedProps.current.latestStringState.callTranscribeState === 'stopped') {
21785
- cachedProps.current.latestStringState.callTranscribeState = 'off';
21786
- }
21787
- } }));
21788
- };
21789
- function determineStates(previous, current) {
21790
- // if current state is on, then return on
21791
- if (current) {
21792
- return 'on';
21793
- }
21794
- // if current state is off
21795
- else {
21796
- // if previous state is on and current state is off, return stopped (on -> off)
21797
- if (previous === 'on') {
21798
- return 'stopped';
21799
- }
21800
- // otherwise remain previous state unchanged
21801
- else {
21802
- return previous;
21803
- }
21804
- }
21805
- }
21806
-
21807
21741
  // Copyright (c) Microsoft Corporation.
21808
21742
  // Licensed under the MIT License.
21809
21743
  /**
@@ -22035,7 +21969,7 @@ const dtmfFrequencies = {
22035
21969
 
22036
21970
  // Copyright (c) Microsoft Corporation.
22037
21971
  // Licensed under the MIT License.
22038
- var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21972
+ var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22039
21973
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22040
21974
  return new (P || (P = Promise))(function (resolve, reject) {
22041
21975
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -22079,10 +22013,10 @@ const DialpadButton = (props) => {
22079
22013
  const [buttonPressed, setButtonPressed] = React.useState(false);
22080
22014
  const dtmfToneSound = React.useRef(new Tone(dtmfToneAudioContext, dtmfFrequencies[digit].f1, dtmfFrequencies[digit].f2));
22081
22015
  const useLongPressProps = React.useMemo(() => ({
22082
- onClick: () => __awaiter$x(void 0, void 0, void 0, function* () {
22016
+ onClick: () => __awaiter$y(void 0, void 0, void 0, function* () {
22083
22017
  onClick(digit, index);
22084
22018
  }),
22085
- onLongPress: () => __awaiter$x(void 0, void 0, void 0, function* () {
22019
+ onLongPress: () => __awaiter$y(void 0, void 0, void 0, function* () {
22086
22020
  onLongPress(digit, index);
22087
22021
  }),
22088
22022
  touchEventsOnly: longPressTrigger === 'touch'
@@ -23233,7 +23167,7 @@ const _spokenLanguageToCaptionLanguage = {
23233
23167
 
23234
23168
  // Copyright (c) Microsoft Corporation.
23235
23169
  // Licensed under the MIT License.
23236
- var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
23170
+ var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
23237
23171
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23238
23172
  return new (P || (P = Promise))(function (resolve, reject) {
23239
23173
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -23272,7 +23206,7 @@ const _CaptionsSettingsModal = (props) => {
23272
23206
  onDismissCaptionsSettings();
23273
23207
  }
23274
23208
  }, [onDismissCaptionsSettings]);
23275
- const onConfirm = React.useCallback(() => __awaiter$w(void 0, void 0, void 0, function* () {
23209
+ const onConfirm = React.useCallback(() => __awaiter$x(void 0, void 0, void 0, function* () {
23276
23210
  const spokenLanguageCode = selectedSpokenLanguage.key;
23277
23211
  const captionLanguageCode = selectedCaptionLanguage.key;
23278
23212
  if (isCaptionsFeatureActive) {
@@ -24682,7 +24616,7 @@ const findConditionalCompiledSelector = (component) => {
24682
24616
 
24683
24617
  // Copyright (c) Microsoft Corporation.
24684
24618
  // Licensed under the MIT License.
24685
- var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
24619
+ var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
24686
24620
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
24687
24621
  return new (P || (P = Promise))(function (resolve, reject) {
24688
24622
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -24708,12 +24642,13 @@ const createDefaultChatHandlers = memoizeOne((chatClient, chatThreadClient) => {
24708
24642
  // due to a bug in babel, we can't use arrow function here
24709
24643
  // affecting conditional-compile-remove(attachment-upload)
24710
24644
  onSendMessage: function (content, options) {
24711
- return __awaiter$v(this, void 0, void 0, function* () {
24645
+ return __awaiter$w(this, void 0, void 0, function* () {
24712
24646
  const sendMessageRequest = {
24713
24647
  content,
24714
24648
  senderDisplayName: chatClient.getState().displayName
24715
24649
  };
24716
24650
  /* @conditional-compile-remove(file-sharing-acs) */
24651
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
24717
24652
  if (options &&
24718
24653
  'attachments' in options &&
24719
24654
  options.attachments &&
@@ -24729,12 +24664,26 @@ const createDefaultChatHandlers = memoizeOne((chatClient, chatThreadClient) => {
24729
24664
  yield chatThreadClient.sendMessage(sendMessageRequest, options);
24730
24665
  });
24731
24666
  },
24667
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
24668
+ onUploadImage: function (image, imageFilename) {
24669
+ return __awaiter$w(this, void 0, void 0, function* () {
24670
+ const imageResult = yield chatThreadClient.uploadImage(image, imageFilename);
24671
+ return imageResult;
24672
+ });
24673
+ },
24674
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
24675
+ onDeleteImage: function (imageId) {
24676
+ return __awaiter$w(this, void 0, void 0, function* () {
24677
+ yield chatThreadClient.deleteImage(imageId);
24678
+ return;
24679
+ });
24680
+ },
24732
24681
  // due to a bug in babel, we can't use arrow function here
24733
24682
  // affecting conditional-compile-remove(attachment-upload)
24734
24683
  onUpdateMessage: function (messageId, content,
24735
24684
  /* @conditional-compile-remove(file-sharing-acs) */
24736
24685
  options) {
24737
- return __awaiter$v(this, void 0, void 0, function* () {
24686
+ return __awaiter$w(this, void 0, void 0, function* () {
24738
24687
  const updateMessageOptions = {
24739
24688
  content,
24740
24689
  /* @conditional-compile-remove(file-sharing-acs) */
@@ -24743,23 +24692,23 @@ const createDefaultChatHandlers = memoizeOne((chatClient, chatThreadClient) => {
24743
24692
  yield chatThreadClient.updateMessage(messageId, updateMessageOptions);
24744
24693
  });
24745
24694
  },
24746
- onDeleteMessage: (messageId) => __awaiter$v(void 0, void 0, void 0, function* () {
24695
+ onDeleteMessage: (messageId) => __awaiter$w(void 0, void 0, void 0, function* () {
24747
24696
  yield chatThreadClient.deleteMessage(messageId);
24748
24697
  }),
24749
24698
  // This handler is designed for chatThread to consume
24750
- onMessageSeen: (chatMessageId) => __awaiter$v(void 0, void 0, void 0, function* () {
24699
+ onMessageSeen: (chatMessageId) => __awaiter$w(void 0, void 0, void 0, function* () {
24751
24700
  yield chatThreadClient.sendReadReceipt({ chatMessageId });
24752
24701
  }),
24753
- onTyping: () => __awaiter$v(void 0, void 0, void 0, function* () {
24702
+ onTyping: () => __awaiter$w(void 0, void 0, void 0, function* () {
24754
24703
  yield chatThreadClient.sendTypingNotification();
24755
24704
  }),
24756
- onRemoveParticipant: (userId) => __awaiter$v(void 0, void 0, void 0, function* () {
24705
+ onRemoveParticipant: (userId) => __awaiter$w(void 0, void 0, void 0, function* () {
24757
24706
  yield chatThreadClient.removeParticipant(fromFlatCommunicationIdentifier(userId));
24758
24707
  }),
24759
- updateThreadTopicName: (topicName) => __awaiter$v(void 0, void 0, void 0, function* () {
24708
+ updateThreadTopicName: (topicName) => __awaiter$w(void 0, void 0, void 0, function* () {
24760
24709
  yield chatThreadClient.updateTopic(topicName);
24761
24710
  }),
24762
- onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$v(void 0, void 0, void 0, function* () {
24711
+ onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$w(void 0, void 0, void 0, function* () {
24763
24712
  var _a, _b, _c;
24764
24713
  if (messageIterator === undefined) {
24765
24714
  // Lazy definition so that errors in the method call are reported correctly.
@@ -25669,7 +25618,7 @@ const Constants = {
25669
25618
  */
25670
25619
  const chatStatefulLogger = logger.createClientLogger('communication-react:chat-stateful');
25671
25620
 
25672
- var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25621
+ var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25673
25622
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25674
25623
  return new (P || (P = Promise))(function (resolve, reject) {
25675
25624
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -25711,7 +25660,7 @@ class ResourceDownloadQueue {
25711
25660
  this._messagesNeedingResourceRetrieval.push(copy);
25712
25661
  }
25713
25662
  startQueue(threadId, operation, options) {
25714
- return __awaiter$u(this, void 0, void 0, function* () {
25663
+ return __awaiter$v(this, void 0, void 0, function* () {
25715
25664
  if (this.isActive) {
25716
25665
  return;
25717
25666
  }
@@ -25747,7 +25696,7 @@ class ResourceDownloadQueue {
25747
25696
  }
25748
25697
  }
25749
25698
  downloadSingleUrl(message, resourceUrl, operation) {
25750
- return __awaiter$u(this, void 0, void 0, function* () {
25699
+ return __awaiter$v(this, void 0, void 0, function* () {
25751
25700
  const response = { sourceUrl: '' };
25752
25701
  try {
25753
25702
  const abortController = new AbortController();
@@ -25763,7 +25712,7 @@ class ResourceDownloadQueue {
25763
25712
  });
25764
25713
  }
25765
25714
  downloadAllPreviewUrls(message, operation) {
25766
- return __awaiter$u(this, void 0, void 0, function* () {
25715
+ return __awaiter$v(this, void 0, void 0, function* () {
25767
25716
  var _a;
25768
25717
  const attachments = (_a = message.content) === null || _a === void 0 ? void 0 : _a.attachments;
25769
25718
  if (message.type === 'html' && attachments) {
@@ -25790,7 +25739,7 @@ class ResourceDownloadQueue {
25790
25739
  });
25791
25740
  }
25792
25741
  downloadResource(operation, url, abortController) {
25793
- return __awaiter$u(this, void 0, void 0, function* () {
25742
+ return __awaiter$v(this, void 0, void 0, function* () {
25794
25743
  this._requestsToCancel[url] = { src: url, abortController };
25795
25744
  const blobUrl = yield operation(url, { credential: this._credential, endpoint: this._endpoint }, { abortController });
25796
25745
  delete this._requestsToCancel[url];
@@ -25801,9 +25750,9 @@ class ResourceDownloadQueue {
25801
25750
  /**
25802
25751
  * @private
25803
25752
  */
25804
- const fetchImageSource = (src, authentication, options) => __awaiter$u(void 0, void 0, void 0, function* () {
25753
+ const fetchImageSource = (src, authentication, options) => __awaiter$v(void 0, void 0, void 0, function* () {
25805
25754
  function fetchWithAuthentication(url, token, options) {
25806
- return __awaiter$u(this, void 0, void 0, function* () {
25755
+ return __awaiter$v(this, void 0, void 0, function* () {
25807
25756
  const headers = new Headers();
25808
25757
  headers.append('Authorization', `Bearer ${token}`);
25809
25758
  return yield fetchWithTimeout(url, {
@@ -25814,7 +25763,7 @@ const fetchImageSource = (src, authentication, options) => __awaiter$u(void 0, v
25814
25763
  });
25815
25764
  }
25816
25765
  function fetchWithTimeout(resource, options) {
25817
- return __awaiter$u(this, void 0, void 0, function* () {
25766
+ return __awaiter$v(this, void 0, void 0, function* () {
25818
25767
  // default timeout is 30 seconds
25819
25768
  const { timeout = 30000, abortController } = options;
25820
25769
  const id = setTimeout(() => {
@@ -25838,7 +25787,7 @@ const fetchImageSource = (src, authentication, options) => __awaiter$u(void 0, v
25838
25787
 
25839
25788
  // Copyright (c) Microsoft Corporation.
25840
25789
  // Licensed under the MIT License.
25841
- var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25790
+ var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25842
25791
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25843
25792
  return new (P || (P = Promise))(function (resolve, reject) {
25844
25793
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -25914,7 +25863,7 @@ let ChatContext$1 = class ChatContext {
25914
25863
  // Any item in queue should be removed.
25915
25864
  }
25916
25865
  downloadResourceToCache(threadId, messageId, resourceUrl) {
25917
- return __awaiter$t(this, void 0, void 0, function* () {
25866
+ return __awaiter$u(this, void 0, void 0, function* () {
25918
25867
  var _a;
25919
25868
  let message = (_a = this.getState().threads[threadId]) === null || _a === void 0 ? void 0 : _a.chatMessages[messageId];
25920
25869
  if (message && this._fullsizeImageQueue) {
@@ -26193,7 +26142,7 @@ let ChatContext$1 = class ChatContext {
26193
26142
  * @throws ChatError. Exceptions thrown from `f` are tagged with the failed `target.
26194
26143
  */
26195
26144
  withAsyncErrorTeedToState(f, target) {
26196
- return (...args) => __awaiter$t(this, void 0, void 0, function* () {
26145
+ return (...args) => __awaiter$u(this, void 0, void 0, function* () {
26197
26146
  try {
26198
26147
  return yield f(...args);
26199
26148
  }
@@ -26300,7 +26249,7 @@ const convertChatMessage = (message, status = 'delivered', clientMessageId) => {
26300
26249
 
26301
26250
  // Copyright (c) Microsoft Corporation.
26302
26251
  // Licensed under the MIT License.
26303
- var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26252
+ var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26304
26253
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26305
26254
  return new (P || (P = Promise))(function (resolve, reject) {
26306
26255
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -26390,7 +26339,7 @@ class EventSubscriber {
26390
26339
  };
26391
26340
  // This is a temporary fix that no participant message is received for onChatMessageReceived event, which should be handled by JS SDK.
26392
26341
  // Without the temporary fix, there are missing 'participant joined' and 'participant left' system messages in the chat thread.
26393
- this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$s(this, void 0, void 0, function* () {
26342
+ this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$t(this, void 0, void 0, function* () {
26394
26343
  var _a, e_1, _b, _c;
26395
26344
  try {
26396
26345
  for (var _d = true, _e = __asyncValues$1(this.chatClient
@@ -26484,7 +26433,7 @@ class EventSubscriber {
26484
26433
 
26485
26434
  // Copyright (c) Microsoft Corporation.
26486
26435
  // Licensed under the MIT License.
26487
- var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26436
+ var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26488
26437
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26489
26438
  return new (P || (P = Promise))(function (resolve, reject) {
26490
26439
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -26506,7 +26455,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
26506
26455
  const threadsIterator = iteratorCreator(...args);
26507
26456
  return {
26508
26457
  next() {
26509
- return __awaiter$r(this, void 0, void 0, function* () {
26458
+ return __awaiter$s(this, void 0, void 0, function* () {
26510
26459
  const result = yield threadsIterator.next();
26511
26460
  if (!result.done && result.value) {
26512
26461
  decorateFn(result.value, context);
@@ -26521,7 +26470,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
26521
26470
  const pages = threadsIterator.byPage(settings);
26522
26471
  return {
26523
26472
  next() {
26524
- return __awaiter$r(this, void 0, void 0, function* () {
26473
+ return __awaiter$s(this, void 0, void 0, function* () {
26525
26474
  const result = yield pages.next();
26526
26475
  const page = result.value;
26527
26476
  if (!result.done && result.value) {
@@ -26608,7 +26557,7 @@ const createDecoratedListParticipants = (chatThreadClient, context) => {
26608
26557
 
26609
26558
  // Copyright (c) Microsoft Corporation.
26610
26559
  // Licensed under the MIT License.
26611
- var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26560
+ var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26612
26561
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26613
26562
  return new (P || (P = Promise))(function (resolve, reject) {
26614
26563
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -26627,14 +26576,14 @@ class ProxyChatThreadClient {
26627
26576
  return createDecoratedListMessages(chatThreadClient, this._context);
26628
26577
  }
26629
26578
  case 'getMessage': {
26630
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26579
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26631
26580
  const message = yield chatThreadClient.getMessage(...args);
26632
26581
  this._context.setChatMessage(chatThreadClient.threadId, convertChatMessage(message));
26633
26582
  return message;
26634
26583
  }), 'ChatThreadClient.getMessage');
26635
26584
  }
26636
26585
  case 'sendMessage': {
26637
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26586
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26638
26587
  var _a;
26639
26588
  // Retry logic?
26640
26589
  const [request, options] = args;
@@ -26675,7 +26624,7 @@ class ProxyChatThreadClient {
26675
26624
  }), 'ChatThreadClient.sendMessage');
26676
26625
  }
26677
26626
  case 'addParticipants': {
26678
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26627
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26679
26628
  const result = yield chatThreadClient.addParticipants(...args);
26680
26629
  const [addRequest] = args;
26681
26630
  const participantsToAdd = addRequest.participants;
@@ -26684,7 +26633,7 @@ class ProxyChatThreadClient {
26684
26633
  }), 'ChatThreadClient.addParticipants');
26685
26634
  }
26686
26635
  case 'deleteMessage': {
26687
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26636
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26688
26637
  // DeleteMessage is able to either delete local one(for failed message) or synced message
26689
26638
  const [messageId] = args;
26690
26639
  if (this._context.deleteLocalMessage(chatThreadClient.threadId, messageId)) {
@@ -26702,12 +26651,12 @@ class ProxyChatThreadClient {
26702
26651
  return createDecoratedListReadReceipts(chatThreadClient, this._context);
26703
26652
  }
26704
26653
  case 'sendTypingNotification': {
26705
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26654
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26706
26655
  return yield chatThreadClient.sendTypingNotification(...args);
26707
26656
  }), 'ChatThreadClient.sendTypingNotification');
26708
26657
  }
26709
26658
  case 'removeParticipant': {
26710
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26659
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26711
26660
  const result = yield chatThreadClient.removeParticipant(...args);
26712
26661
  const [removeIdentifier] = args;
26713
26662
  this._context.deleteParticipant(chatThreadClient.threadId, communicationCommon.getIdentifierKind(removeIdentifier));
@@ -26715,7 +26664,7 @@ class ProxyChatThreadClient {
26715
26664
  }), 'ChatThreadClient.removeParticipant');
26716
26665
  }
26717
26666
  case 'updateMessage': {
26718
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26667
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26719
26668
  const result = yield chatThreadClient.updateMessage(...args);
26720
26669
  const [messageId, updateOption] = args;
26721
26670
  this._context.updateChatMessageContent(chatThreadClient.threadId, messageId, updateOption === null || updateOption === void 0 ? void 0 : updateOption.content);
@@ -26723,7 +26672,7 @@ class ProxyChatThreadClient {
26723
26672
  }), 'ChatThreadClient.updateMessage');
26724
26673
  }
26725
26674
  case 'updateTopic': {
26726
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26675
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26727
26676
  const result = yield chatThreadClient.updateTopic(...args);
26728
26677
  const [topic] = args;
26729
26678
  this._context.updateThreadTopic(chatThreadClient.threadId, topic);
@@ -26731,7 +26680,7 @@ class ProxyChatThreadClient {
26731
26680
  }), 'ChatThreadClient.updateTopic');
26732
26681
  }
26733
26682
  case 'getProperties': {
26734
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$q(this, void 0, void 0, function* () {
26683
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$r(this, void 0, void 0, function* () {
26735
26684
  const result = yield chatThreadClient.getProperties(...args);
26736
26685
  this._context.updateThread(chatThreadClient.threadId, result);
26737
26686
  return result;
@@ -26769,7 +26718,7 @@ const createDecoratedListThreads = (chatClient, context) => {
26769
26718
 
26770
26719
  // Copyright (c) Microsoft Corporation.
26771
26720
  // Licensed under the MIT License.
26772
- var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26721
+ var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26773
26722
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26774
26723
  return new (P || (P = Promise))(function (resolve, reject) {
26775
26724
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -26788,7 +26737,7 @@ const proxyChatClient = {
26788
26737
  switch (prop) {
26789
26738
  case 'createChatThread': {
26790
26739
  return context.withAsyncErrorTeedToState(function (...args) {
26791
- return __awaiter$p(this, void 0, void 0, function* () {
26740
+ return __awaiter$q(this, void 0, void 0, function* () {
26792
26741
  const result = yield chatClient.createChatThread(...args);
26793
26742
  const thread = result.chatThread;
26794
26743
  if (thread) {
@@ -26801,7 +26750,7 @@ const proxyChatClient = {
26801
26750
  }
26802
26751
  case 'deleteChatThread': {
26803
26752
  return context.withAsyncErrorTeedToState(function (...args) {
26804
- return __awaiter$p(this, void 0, void 0, function* () {
26753
+ return __awaiter$q(this, void 0, void 0, function* () {
26805
26754
  const result = yield chatClient.deleteChatThread(...args);
26806
26755
  context.deleteThread(args[0]);
26807
26756
  return result;
@@ -26821,7 +26770,7 @@ const proxyChatClient = {
26821
26770
  }
26822
26771
  case 'startRealtimeNotifications': {
26823
26772
  return context.withAsyncErrorTeedToState(function (...args) {
26824
- return __awaiter$p(this, void 0, void 0, function* () {
26773
+ return __awaiter$q(this, void 0, void 0, function* () {
26825
26774
  const ret = yield chatClient.startRealtimeNotifications(...args);
26826
26775
  if (!receiver.eventSubscriber) {
26827
26776
  receiver.eventSubscriber = new EventSubscriber(chatClient, context);
@@ -26832,7 +26781,7 @@ const proxyChatClient = {
26832
26781
  }
26833
26782
  case 'stopRealtimeNotifications': {
26834
26783
  return context.withAsyncErrorTeedToState(function (...args) {
26835
- return __awaiter$p(this, void 0, void 0, function* () {
26784
+ return __awaiter$q(this, void 0, void 0, function* () {
26836
26785
  const ret = yield chatClient.stopRealtimeNotifications(...args);
26837
26786
  if (receiver.eventSubscriber) {
26838
26787
  receiver.eventSubscriber.unsubscribe();
@@ -26935,7 +26884,7 @@ const CHAT_CONTAINER_MIN_WIDTH_REM = 17.5;
26935
26884
 
26936
26885
  // Copyright (c) Microsoft Corporation.
26937
26886
  // Licensed under the MIT License.
26938
- var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26887
+ var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26939
26888
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26940
26889
  return new (P || (P = Promise))(function (resolve, reject) {
26941
26890
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -27031,6 +26980,10 @@ class AzureCommunicationChatAdapter {
27031
26980
  this.dispose = this.dispose.bind(this);
27032
26981
  this.fetchInitialData = this.fetchInitialData.bind(this);
27033
26982
  this.sendMessage = this.sendMessage.bind(this);
26983
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
26984
+ this.uploadImage = this.uploadImage.bind(this);
26985
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
26986
+ this.deleteImage = this.deleteImage.bind(this);
27034
26987
  this.sendReadReceipt = this.sendReadReceipt.bind(this);
27035
26988
  this.sendTypingIndicator = this.sendTypingIndicator.bind(this);
27036
26989
  this.updateMessage = this.updateMessage.bind(this);
@@ -27048,9 +27001,9 @@ class AzureCommunicationChatAdapter {
27048
27001
  this.chatClient.dispose();
27049
27002
  }
27050
27003
  fetchInitialData() {
27051
- return __awaiter$o(this, void 0, void 0, function* () {
27004
+ return __awaiter$p(this, void 0, void 0, function* () {
27052
27005
  // If get properties fails we dont want to try to get the participants after.
27053
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27006
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27054
27007
  var _a, e_1, _b, _c;
27055
27008
  yield this.chatThreadClient.getProperties();
27056
27009
  try {
@@ -27086,50 +27039,66 @@ class AzureCommunicationChatAdapter {
27086
27039
  this.context.offStateChange(handler);
27087
27040
  }
27088
27041
  sendMessage(content, options) {
27089
- return __awaiter$o(this, void 0, void 0, function* () {
27090
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27042
+ return __awaiter$p(this, void 0, void 0, function* () {
27043
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27091
27044
  return yield this.handlers.onSendMessage(content, options);
27092
27045
  }));
27093
27046
  });
27094
27047
  }
27048
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
27049
+ uploadImage(image, imageFilename) {
27050
+ return __awaiter$p(this, void 0, void 0, function* () {
27051
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27052
+ return yield this.handlers.onUploadImage(image, imageFilename);
27053
+ }));
27054
+ });
27055
+ }
27056
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
27057
+ deleteImage(imageId) {
27058
+ return __awaiter$p(this, void 0, void 0, function* () {
27059
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27060
+ return yield this.handlers.onDeleteImage(imageId);
27061
+ }));
27062
+ });
27063
+ }
27095
27064
  sendReadReceipt(chatMessageId) {
27096
- return __awaiter$o(this, void 0, void 0, function* () {
27097
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27065
+ return __awaiter$p(this, void 0, void 0, function* () {
27066
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27098
27067
  yield this.handlers.onMessageSeen(chatMessageId);
27099
27068
  }));
27100
27069
  });
27101
27070
  }
27102
27071
  sendTypingIndicator() {
27103
- return __awaiter$o(this, void 0, void 0, function* () {
27104
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27072
+ return __awaiter$p(this, void 0, void 0, function* () {
27073
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27105
27074
  yield this.handlers.onTyping();
27106
27075
  }));
27107
27076
  });
27108
27077
  }
27109
27078
  removeParticipant(userId) {
27110
- return __awaiter$o(this, void 0, void 0, function* () {
27111
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27079
+ return __awaiter$p(this, void 0, void 0, function* () {
27080
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27112
27081
  yield this.handlers.onRemoveParticipant(userId);
27113
27082
  }));
27114
27083
  });
27115
27084
  }
27116
27085
  setTopic(topicName) {
27117
- return __awaiter$o(this, void 0, void 0, function* () {
27118
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27086
+ return __awaiter$p(this, void 0, void 0, function* () {
27087
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27119
27088
  yield this.handlers.updateThreadTopicName(topicName);
27120
27089
  }));
27121
27090
  });
27122
27091
  }
27123
27092
  loadPreviousChatMessages(messagesToLoad) {
27124
- return __awaiter$o(this, void 0, void 0, function* () {
27125
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27093
+ return __awaiter$p(this, void 0, void 0, function* () {
27094
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27126
27095
  return yield this.handlers.onLoadPreviousChatMessages(messagesToLoad);
27127
27096
  }));
27128
27097
  });
27129
27098
  }
27130
27099
  updateMessage(messageId, content, options) {
27131
- return __awaiter$o(this, void 0, void 0, function* () {
27132
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27100
+ return __awaiter$p(this, void 0, void 0, function* () {
27101
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27133
27102
  var _a;
27134
27103
  /* @conditional-compile-remove(file-sharing-acs) */
27135
27104
  const messageOptions = {};
@@ -27160,14 +27129,14 @@ class AzureCommunicationChatAdapter {
27160
27129
  });
27161
27130
  }
27162
27131
  deleteMessage(messageId) {
27163
- return __awaiter$o(this, void 0, void 0, function* () {
27164
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$o(this, void 0, void 0, function* () {
27132
+ return __awaiter$p(this, void 0, void 0, function* () {
27133
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$p(this, void 0, void 0, function* () {
27165
27134
  return yield this.handlers.onDeleteMessage(messageId);
27166
27135
  }));
27167
27136
  });
27168
27137
  }
27169
27138
  downloadResourceToCache(resourceDetails) {
27170
- return __awaiter$o(this, void 0, void 0, function* () {
27139
+ return __awaiter$p(this, void 0, void 0, function* () {
27171
27140
  this.chatClient.downloadResourceToCache(resourceDetails.threadId, resourceDetails.messageId, resourceDetails.resourceUrl);
27172
27141
  });
27173
27142
  }
@@ -27246,7 +27215,7 @@ class AzureCommunicationChatAdapter {
27246
27215
  this.emitter.off(event, listener);
27247
27216
  }
27248
27217
  asyncTeeErrorToEventEmitter(f) {
27249
- return __awaiter$o(this, void 0, void 0, function* () {
27218
+ return __awaiter$p(this, void 0, void 0, function* () {
27250
27219
  try {
27251
27220
  return yield f();
27252
27221
  }
@@ -27296,7 +27265,7 @@ const convertEventType = (type) => {
27296
27265
  *
27297
27266
  * @public
27298
27267
  */
27299
- const createAzureCommunicationChatAdapter = (_a) => __awaiter$o(void 0, [_a], void 0, function* ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) {
27268
+ const createAzureCommunicationChatAdapter = (_a) => __awaiter$p(void 0, [_a], void 0, function* ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) {
27300
27269
  return _createAzureCommunicationChatAdapterInner(endpointUrl, userId, displayName, credential, threadId);
27301
27270
  });
27302
27271
  /**
@@ -27304,7 +27273,7 @@ const createAzureCommunicationChatAdapter = (_a) => __awaiter$o(void 0, [_a], vo
27304
27273
  *
27305
27274
  * @internal
27306
27275
  */
27307
- const _createAzureCommunicationChatAdapterInner = (endpoint_1, userId_1, displayName_1, credential_1, threadId_1, ...args_1) => __awaiter$o(void 0, [endpoint_1, userId_1, displayName_1, credential_1, threadId_1, ...args_1], void 0, function* (endpoint, userId, displayName, credential, threadId, telemetryImplementationHint = 'Chat') {
27276
+ const _createAzureCommunicationChatAdapterInner = (endpoint_1, userId_1, displayName_1, credential_1, threadId_1, ...args_1) => __awaiter$p(void 0, [endpoint_1, userId_1, displayName_1, credential_1, threadId_1, ...args_1], void 0, function* (endpoint, userId, displayName, credential, threadId, telemetryImplementationHint = 'Chat') {
27308
27277
  if (!_isValidIdentifier(userId)) {
27309
27278
  throw new Error('Provided userId is invalid. Please provide valid identifier object.');
27310
27279
  }
@@ -27324,7 +27293,7 @@ const _createAzureCommunicationChatAdapterInner = (endpoint_1, userId_1, display
27324
27293
  * ThreadId is a promise to allow for lazy initialization of the adapter.
27325
27294
  * @internal
27326
27295
  */
27327
- const _createLazyAzureCommunicationChatAdapterInner = (endpoint_2, userId_2, displayName_2, credential_2, threadId_2, ...args_2) => __awaiter$o(void 0, [endpoint_2, userId_2, displayName_2, credential_2, threadId_2, ...args_2], void 0, function* (endpoint, userId, displayName, credential, threadId, telemetryImplementationHint = 'Chat') {
27296
+ const _createLazyAzureCommunicationChatAdapterInner = (endpoint_2, userId_2, displayName_2, credential_2, threadId_2, ...args_2) => __awaiter$p(void 0, [endpoint_2, userId_2, displayName_2, credential_2, threadId_2, ...args_2], void 0, function* (endpoint, userId, displayName, credential, threadId, telemetryImplementationHint = 'Chat') {
27328
27297
  if (!_isValidIdentifier(userId)) {
27329
27298
  throw new Error('Provided userId is invalid. Please provide valid identifier object.');
27330
27299
  }
@@ -27334,7 +27303,7 @@ const _createLazyAzureCommunicationChatAdapterInner = (endpoint_2, userId_2, dis
27334
27303
  endpoint,
27335
27304
  credential
27336
27305
  }, undefined, telemetryImplementationHint);
27337
- return threadId.then((threadId) => __awaiter$o(void 0, void 0, void 0, function* () {
27306
+ return threadId.then((threadId) => __awaiter$p(void 0, void 0, void 0, function* () {
27338
27307
  if (UNSUPPORTED_CHAT_THREAD_TYPE.some((t) => threadId.includes(t))) {
27339
27308
  console.error(`Invalid Chat ThreadId: ${threadId}. Please note with Teams Channel Meetings, only Calling is supported and Chat is not currently supported. Read more: ${TEAMS_LIMITATION_LEARN_MORE}.`);
27340
27309
  }
@@ -27395,7 +27364,7 @@ beforeDispose) => {
27395
27364
  if (!credential || !displayName || !endpoint || !threadId || !userId) {
27396
27365
  return;
27397
27366
  }
27398
- (() => __awaiter$o(void 0, void 0, void 0, function* () {
27367
+ (() => __awaiter$p(void 0, void 0, void 0, function* () {
27399
27368
  if (adapterRef.current) {
27400
27369
  // Dispose the old adapter when a new one is created.
27401
27370
  //
@@ -27427,7 +27396,7 @@ beforeDispose) => {
27427
27396
  // Dispose any existing adapter when the component unmounts.
27428
27397
  React.useEffect(() => {
27429
27398
  return () => {
27430
- (() => __awaiter$o(void 0, void 0, void 0, function* () {
27399
+ (() => __awaiter$p(void 0, void 0, void 0, function* () {
27431
27400
  if (adapterRef.current) {
27432
27401
  if (beforeDisposeRef.current) {
27433
27402
  yield beforeDisposeRef.current(adapterRef.current);
@@ -27449,7 +27418,7 @@ beforeDispose) => {
27449
27418
  * @public
27450
27419
  */
27451
27420
  function createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient) {
27452
- return __awaiter$o(this, void 0, void 0, function* () {
27421
+ return __awaiter$p(this, void 0, void 0, function* () {
27453
27422
  return new AzureCommunicationChatAdapter(chatClient, chatThreadClient);
27454
27423
  });
27455
27424
  }
@@ -27830,7 +27799,7 @@ const sendboxContainerStyles = {
27830
27799
 
27831
27800
  // Copyright (c) Microsoft Corporation.
27832
27801
  // Licensed under the MIT License.
27833
- var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
27802
+ var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
27834
27803
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27835
27804
  return new (P || (P = Promise))(function (resolve, reject) {
27836
27805
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -27851,7 +27820,7 @@ const AvatarPersona = (props) => {
27851
27820
  const { userId, dataProvider, text, imageUrl, imageInitials, initialsColor, initialsTextColor, showOverflowTooltip } = props;
27852
27821
  const [data, setData] = React.useState();
27853
27822
  React.useEffect(() => {
27854
- (() => __awaiter$n(void 0, void 0, void 0, function* () {
27823
+ (() => __awaiter$o(void 0, void 0, void 0, function* () {
27855
27824
  if (dataProvider && userId) {
27856
27825
  const newData = yield dataProvider(userId);
27857
27826
  if (avatarDeepDifferenceCheck(data, newData)) {
@@ -28120,6 +28089,10 @@ const createCompositeHandlers$1 = memoizeOne((adapter) => ({
28120
28089
  }
28121
28090
  return adapter.sendMessage(content, options);
28122
28091
  },
28092
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28093
+ onUploadImage: adapter.uploadImage,
28094
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28095
+ onDeleteImage: adapter.deleteImage,
28123
28096
  onLoadPreviousChatMessages: adapter.loadPreviousChatMessages,
28124
28097
  onMessageSeen: adapter.sendReadReceipt,
28125
28098
  onTyping: adapter.sendTypingIndicator,
@@ -28399,7 +28372,7 @@ const AttachmentDownloadErrorBar = (props) => {
28399
28372
  /**
28400
28373
  * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading
28401
28374
  */
28402
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-D63MoVhd.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
28375
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-ByJFtf0Z.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
28403
28376
  /**
28404
28377
  * @private
28405
28378
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -28407,14 +28380,13 @@ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function
28407
28380
  *
28408
28381
  /* @conditional-compile-remove(rich-text-editor-composite-support)
28409
28382
  */
28410
- const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-D63MoVhd.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
28383
+ const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-ByJFtf0Z.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
28411
28384
  /**
28412
28385
  * @private
28413
28386
  */
28414
28387
  const SendBoxPicker = (props) => {
28415
- const {
28416
28388
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
28417
- richTextEditorOptions } = props;
28389
+ const { richTextEditorOptions } = props;
28418
28390
  const sendBoxProps = usePropsFor$2(SendBox);
28419
28391
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
28420
28392
  const isRichTextEditorEnabled = React.useMemo(() => {
@@ -28430,6 +28402,127 @@ const SendBoxPicker = (props) => {
28430
28402
  return sendBox;
28431
28403
  };
28432
28404
 
28405
+ // Copyright (c) Microsoft Corporation.
28406
+ // Licensed under the MIT License.
28407
+ var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
28408
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
28409
+ return new (P || (P = Promise))(function (resolve, reject) {
28410
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
28411
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
28412
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
28413
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28414
+ });
28415
+ };
28416
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28417
+ const fetchBlobData = (resource, options) => __awaiter$n(void 0, void 0, void 0, function* () {
28418
+ // default timeout is 30 seconds
28419
+ const { timeout = 30000, abortController } = options;
28420
+ const id = setTimeout(() => {
28421
+ abortController.abort();
28422
+ }, timeout);
28423
+ const response = yield fetch(resource, Object.assign(Object.assign({}, options), { signal: abortController.signal }));
28424
+ clearTimeout(id);
28425
+ return response;
28426
+ });
28427
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28428
+ const getInlineImageData = (image) => __awaiter$n(void 0, void 0, void 0, function* () {
28429
+ const blobImage = undefined;
28430
+ if (image.startsWith('blob') || image.startsWith('http')) {
28431
+ const res = yield fetchBlobData(image, { abortController: new AbortController() });
28432
+ const blobImage = yield res.blob();
28433
+ return blobImage;
28434
+ }
28435
+ return blobImage;
28436
+ });
28437
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28438
+ /**
28439
+ * @private
28440
+ */
28441
+ const useImageUpload = () => {
28442
+ const MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;
28443
+ const adapter = useAdapter$1();
28444
+ const [inlineImageUploads, handleInlineImageUploadAction] = React.useReducer(AttachmentUploadReducer, []);
28445
+ const inlineImageUploadHandler = React.useCallback((uploadTasks) => __awaiter$n(void 0, void 0, void 0, function* () {
28446
+ var _a, _b, _c, _d, _e;
28447
+ for (const task of uploadTasks) {
28448
+ const uploadTask = task;
28449
+ const image = uploadTask.image;
28450
+ if (!image) {
28451
+ uploadTask.notifyUploadFailed(`Image data for "${(_a = task.metadata) === null || _a === void 0 ? void 0 : _a.name}" is not provided.`);
28452
+ continue;
28453
+ }
28454
+ if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {
28455
+ uploadTask.notifyUploadFailed(`"${(_b = task.metadata) === null || _b === void 0 ? void 0 : _b.name}" is too big. Select a file under ${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}MB.`);
28456
+ continue;
28457
+ }
28458
+ const SUPPORTED_FILES = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];
28459
+ const imageExtension = (_d = (_c = task.metadata) === null || _c === void 0 ? void 0 : _c.name.split('.').pop()) !== null && _d !== void 0 ? _d : '';
28460
+ if (!SUPPORTED_FILES.includes(imageExtension)) {
28461
+ uploadTask.notifyUploadFailed(`Uploading ".${imageExtension}" image is not allowed.`);
28462
+ continue;
28463
+ }
28464
+ try {
28465
+ const response = yield adapter.uploadImage(image, (_e = task.metadata) === null || _e === void 0 ? void 0 : _e.name);
28466
+ uploadTask.notifyUploadCompleted(response.id, task.metadata.url || '');
28467
+ }
28468
+ catch (error) {
28469
+ console.error(error);
28470
+ uploadTask.notifyUploadFailed('Unable to upload inline image. Please try again later.');
28471
+ }
28472
+ }
28473
+ }), [adapter]);
28474
+ const onUploadInlineImage = React.useCallback((image, fileName) => __awaiter$n(void 0, void 0, void 0, function* () {
28475
+ if (!image) {
28476
+ return;
28477
+ }
28478
+ const imageData = yield getInlineImageData(image);
28479
+ if (!imageData) {
28480
+ return;
28481
+ }
28482
+ const taskId = nanoid.nanoid();
28483
+ const uploadTask = {
28484
+ image: imageData,
28485
+ taskId,
28486
+ metadata: {
28487
+ id: taskId,
28488
+ name: fileName,
28489
+ url: image,
28490
+ progress: 0
28491
+ },
28492
+ notifyUploadProgressChanged: (value) => {
28493
+ handleInlineImageUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });
28494
+ },
28495
+ notifyUploadCompleted: (id, url) => {
28496
+ handleInlineImageUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });
28497
+ },
28498
+ notifyUploadFailed: (message) => {
28499
+ handleInlineImageUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });
28500
+ // remove the failed upload task when error banner is auto dismissed after 10 seconds
28501
+ // so the banner won't be shown again on UI re-rendering.
28502
+ setTimeout(() => {
28503
+ handleInlineImageUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });
28504
+ }, 10 * 1000);
28505
+ }
28506
+ };
28507
+ const newUploads = [uploadTask];
28508
+ handleInlineImageUploadAction({ type: AttachmentUploadActionType.Set, newUploads });
28509
+ inlineImageUploadHandler(newUploads);
28510
+ }), [inlineImageUploadHandler]);
28511
+ const onCancelInlineImageUploadHandler = React.useCallback((imageId) => {
28512
+ const imageUpload = inlineImageUploads.find((upload) => upload.metadata.id === imageId);
28513
+ const uploadId = imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.id;
28514
+ if (!uploadId) {
28515
+ return;
28516
+ }
28517
+ handleInlineImageUploadAction({ type: AttachmentUploadActionType.Remove, id: uploadId });
28518
+ // TODO: remove local blob
28519
+ if ((imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.progress) === 1) {
28520
+ adapter.deleteImage(imageId);
28521
+ }
28522
+ }, [adapter, inlineImageUploads]);
28523
+ return [inlineImageUploads, handleInlineImageUploadAction, onUploadInlineImage, onCancelInlineImageUploadHandler];
28524
+ };
28525
+
28433
28526
  // Copyright (c) Microsoft Corporation.
28434
28527
  // Licensed under the MIT License.
28435
28528
  var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
@@ -28458,6 +28551,8 @@ const ChatScreen = (props) => {
28458
28551
  const [uploads, handleUploadAction] = React.useReducer(AttachmentUploadReducer, []);
28459
28552
  const adapter = useAdapter$1();
28460
28553
  const theme = useTheme();
28554
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28555
+ const [inlineImageUploads, handleInlineImageUploadAction, onUploadInlineImage, onCancelInlineImageUploadHandler] = useImageUpload();
28461
28556
  React.useEffect(() => {
28462
28557
  // Initial data should be always fetched by the composite(or external caller) instead of the adapter
28463
28558
  const fetchData = () => __awaiter$m(void 0, void 0, void 0, function* () {
@@ -28691,6 +28786,10 @@ const ChatScreen = (props) => {
28691
28786
  const attachments = React.useMemo(() => {
28692
28787
  return uploads === null || uploads === void 0 ? void 0 : uploads.map((v) => v.metadata);
28693
28788
  }, [uploads]);
28789
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28790
+ const imageUploadsInProgress = React.useMemo(() => {
28791
+ return inlineImageUploads === null || inlineImageUploads === void 0 ? void 0 : inlineImageUploads.map((v) => v.metadata);
28792
+ }, [inlineImageUploads]);
28694
28793
  const onSendMessageHandler = React.useCallback(function (content,
28695
28794
  /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */ options) {
28696
28795
  return __awaiter$m(this, void 0, void 0, function* () {
@@ -28699,6 +28798,8 @@ const ChatScreen = (props) => {
28699
28798
  const attachments = (_a = options === null || options === void 0 ? void 0 : options.attachments) !== null && _a !== void 0 ? _a : [];
28700
28799
  /* @conditional-compile-remove(file-sharing-acs) */
28701
28800
  handleUploadAction({ type: AttachmentUploadActionType.Clear });
28801
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28802
+ handleInlineImageUploadAction({ type: AttachmentUploadActionType.Clear });
28702
28803
  /* @conditional-compile-remove(file-sharing-acs) */
28703
28804
  yield adapter.sendMessage(content, {
28704
28805
  attachments: attachments,
@@ -28708,7 +28809,7 @@ const ChatScreen = (props) => {
28708
28809
  /* @conditional-compile-remove(file-sharing-acs) */
28709
28810
  return;
28710
28811
  });
28711
- }, [adapter]);
28812
+ }, [adapter, /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleInlineImageUploadAction]);
28712
28813
  /* @conditional-compile-remove(file-sharing-acs) */
28713
28814
  const onCancelUploadHandler = React.useCallback((id) => {
28714
28815
  var _a, _b;
@@ -28767,7 +28868,13 @@ const ChatScreen = (props) => {
28767
28868
  onCancelAttachmentUpload: onCancelUploadHandler,
28768
28869
  // we need to overwrite onSendMessage for SendBox because we need to clear attachment state
28769
28870
  // when submit button is clicked
28770
- onSendMessage: onSendMessageHandler })),
28871
+ onSendMessage: onSendMessageHandler,
28872
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28873
+ onUploadInlineImage: onUploadInlineImage,
28874
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28875
+ imageUploadsInProgress: imageUploadsInProgress,
28876
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
28877
+ onCancelInlineImageUpload: onCancelInlineImageUploadHandler })),
28771
28878
  formFactor !== 'mobile' && (
28772
28879
  /* @conditional-compile-remove(file-sharing-acs) */
28773
28880
  React.createElement(AttachmentButton, null))))),
@@ -28918,44 +29025,46 @@ const adaptCompositeState = (compositeState) => {
28918
29025
  // Copyright (c) Microsoft Corporation.
28919
29026
  // Licensed under the MIT License.
28920
29027
  /**
28921
- * Take the set of active errors, and filter to only those that are newer than previously dismissed errors or have never been dismissed.
29028
+ * Take the set of active notifications, and filter to only those that are newer than previously dismissed notifications or have never been dismissed.
28922
29029
  *
28923
29030
  * @private
28924
29031
  */
28925
- const filterLatestErrors = (activeErrors, trackedErrors) => {
28926
- const filteredErrors = activeErrors.filter((activeError) => {
28927
- const trackedError = trackedErrors[activeError.type];
28928
- return (!trackedError || !trackedError.lastDismissedAt || trackedError.lastDismissedAt < trackedError.mostRecentlyActive);
29032
+ const filterLatestNotifications = (activeNotifications, trackedNotifications) => {
29033
+ const filteredNotifications = activeNotifications.filter((activeNotification) => {
29034
+ const trackedNotification = trackedNotifications[activeNotification.type];
29035
+ return (!trackedNotification ||
29036
+ !trackedNotification.lastDismissedAt ||
29037
+ trackedNotification.lastDismissedAt < trackedNotification.mostRecentlyActive);
28929
29038
  });
28930
- return filteredErrors;
29039
+ return filteredNotifications;
28931
29040
  };
28932
29041
  /**
28933
- * Maintain a record of the most recently active error for each error type.
29042
+ * Maintain a record of the most recently active notification for each notification type.
28934
29043
  *
28935
29044
  * @private
28936
29045
  */
28937
- const updateTrackedErrorsWithActiveErrors = (existingTrackedErrors, activeErrors) => {
29046
+ const updateTrackedNotificationsWithActiveNotifications = (existingTrackedNotifications, activeNotifications) => {
28938
29047
  var _a, _b;
28939
- const trackedErrors = {};
28940
- // Only care about active errors. If errors are no longer active we do not track that they have been previously dismissed.
28941
- for (const activeError of activeErrors) {
28942
- const existingTrackedError = existingTrackedErrors[activeError.type];
28943
- trackedErrors[activeError.type] = {
28944
- mostRecentlyActive: (_b = (_a = activeError.timestamp) !== null && _a !== void 0 ? _a : existingTrackedError === null || existingTrackedError === void 0 ? void 0 : existingTrackedError.mostRecentlyActive) !== null && _b !== void 0 ? _b : new Date(Date.now()),
28945
- lastDismissedAt: existingTrackedError === null || existingTrackedError === void 0 ? void 0 : existingTrackedError.lastDismissedAt
29048
+ const trackedNotifications = {};
29049
+ // Only care about active notifications. If notifications are no longer active we do not track that they have been previously dismissed.
29050
+ for (const activeNotification of activeNotifications) {
29051
+ const existingTrackedNotification = existingTrackedNotifications[activeNotification.type];
29052
+ trackedNotifications[activeNotification.type] = {
29053
+ mostRecentlyActive: (_b = (_a = activeNotification.timestamp) !== null && _a !== void 0 ? _a : existingTrackedNotification === null || existingTrackedNotification === void 0 ? void 0 : existingTrackedNotification.mostRecentlyActive) !== null && _b !== void 0 ? _b : new Date(Date.now()),
29054
+ lastDismissedAt: existingTrackedNotification === null || existingTrackedNotification === void 0 ? void 0 : existingTrackedNotification.lastDismissedAt
28946
29055
  };
28947
29056
  }
28948
- return trackedErrors;
29057
+ return trackedNotifications;
28949
29058
  };
28950
29059
  /**
28951
- * Create a record for when the error was most recently dismissed for tracking dismissed errors.
29060
+ * Create a record for when the notification was most recently dismissed for tracking dismissed notifications.
28952
29061
  *
28953
29062
  * @private
28954
29063
  */
28955
- const trackErrorAsDismissed = (errorType, trackedErrors) => {
29064
+ const trackNotificationAsDismissed = (notificationType, trackedNotifications) => {
28956
29065
  const now = new Date(Date.now());
28957
- const existingError = trackedErrors[errorType];
28958
- return Object.assign(Object.assign({}, trackedErrors), { [errorType]: Object.assign(Object.assign({}, (existingError || {})), { lastDismissedAt: now }) });
29066
+ const existingNotification = trackedNotifications[notificationType];
29067
+ return Object.assign(Object.assign({}, trackedNotifications), { [notificationType]: Object.assign(Object.assign({}, (existingNotification || {})), { lastDismissedAt: now }) });
28959
29068
  };
28960
29069
 
28961
29070
  // Copyright (c) Microsoft Corporation.
@@ -29451,6 +29560,110 @@ const getSelectedCameraFromAdapterState = (state) => state.devices.selectedCamer
29451
29560
  const getLocatorOrTargetCallees = (locatorOrTargetCallees) => {
29452
29561
  return !!Array.isArray(locatorOrTargetCallees);
29453
29562
  };
29563
+ /* @conditional-compile-remove(notifications) */
29564
+ /**
29565
+ * Return different conditions based on the current and previous state of recording and transcribing
29566
+ *
29567
+ * @param callRecordState - The current call record state: on, off, stopped
29568
+ * @param callTranscribeState - The current call transcribe state: on, off, stopped
29569
+ *
29570
+ * @remarks - The stopped state means: previously on but currently off
29571
+ *
29572
+ * @private
29573
+ */
29574
+ const computeVariant = (callRecordState, callTranscribeState) => {
29575
+ if (callRecordState === 'on' && callTranscribeState === 'on') {
29576
+ return 'recordingAndTranscriptionStarted';
29577
+ }
29578
+ else if (callRecordState === 'on' && callTranscribeState === 'off') {
29579
+ return 'recordingStarted';
29580
+ }
29581
+ else if (callRecordState === 'off' && callTranscribeState === 'on') {
29582
+ return 'transcriptionStarted';
29583
+ }
29584
+ else if (callRecordState === 'on' && callTranscribeState === 'stopped') {
29585
+ return 'transcriptionStoppedStillRecording';
29586
+ }
29587
+ else if (callRecordState === 'stopped' && callTranscribeState === 'on') {
29588
+ return 'recordingStoppedStillTranscribing';
29589
+ }
29590
+ else if (callRecordState === 'off' && callTranscribeState === 'stopped') {
29591
+ return 'transcriptionStopped';
29592
+ }
29593
+ else if (callRecordState === 'stopped' && callTranscribeState === 'off') {
29594
+ return 'recordingStopped';
29595
+ }
29596
+ else if (callRecordState === 'stopped' && callTranscribeState === 'stopped') {
29597
+ return 'recordingAndTranscriptionStopped';
29598
+ }
29599
+ else {
29600
+ return 'noState';
29601
+ }
29602
+ };
29603
+ /* @conditional-compile-remove(notifications) */
29604
+ /**
29605
+ * @private
29606
+ */
29607
+ function determineStates(previous, current) {
29608
+ // if current state is on, then return on
29609
+ if (current) {
29610
+ return 'on';
29611
+ }
29612
+ // if current state is off
29613
+ else {
29614
+ // if previous state is on and current state is off, return stopped (on -> off)
29615
+ if (previous === 'on') {
29616
+ return 'stopped';
29617
+ }
29618
+ // otherwise remain previous state unchanged
29619
+ else {
29620
+ return previous;
29621
+ }
29622
+ }
29623
+ }
29624
+ /* @conditional-compile-remove(notifications) */
29625
+ /**
29626
+ * Compute compliance notification based on latest compliance state and cached props.
29627
+ * @private
29628
+ */
29629
+ function computeComplianceNotification(complianceProps, cachedProps) {
29630
+ // Only update cached props and variant if there is _some_ change in the latest props.
29631
+ // This ensures that state machine is only updated if there is an actual change in the props.
29632
+ const shouldUpdateCached = complianceProps.callRecordState !== cachedProps.current.latestBooleanState.callRecordState ||
29633
+ complianceProps.callTranscribeState !== cachedProps.current.latestBooleanState.callTranscribeState;
29634
+ // The following three operations must be performed in this exact order:
29635
+ // [1]: Update cached state to transition the state machine.
29636
+ if (shouldUpdateCached) {
29637
+ cachedProps.current = {
29638
+ latestBooleanState: complianceProps,
29639
+ latestStringState: {
29640
+ callRecordState: determineStates(cachedProps.current.latestStringState.callRecordState, complianceProps.callRecordState),
29641
+ callTranscribeState: determineStates(cachedProps.current.latestStringState.callTranscribeState, complianceProps.callTranscribeState)
29642
+ },
29643
+ lastUpdated: Date.now()
29644
+ };
29645
+ }
29646
+ // [2]: Compute the variant, using the transitioned state machine.
29647
+ const variant = computeVariant(cachedProps.current.latestStringState.callRecordState, cachedProps.current.latestStringState.callTranscribeState);
29648
+ // [3]: Transition the state machine again to deal with some end-states.
29649
+ if (!shouldUpdateCached &&
29650
+ cachedProps.current.latestStringState.callRecordState === 'stopped' &&
29651
+ cachedProps.current.latestStringState.callTranscribeState === 'stopped') {
29652
+ // When both states are stopped, after displaying message "RECORDING_AND_TRANSCRIPTION_STOPPED", change both states to off (going back to the default state).
29653
+ cachedProps.current.latestStringState.callRecordState = 'off';
29654
+ cachedProps.current.latestStringState.callTranscribeState = 'off';
29655
+ }
29656
+ // If the variant is not 'noState', then show the notification.
29657
+ if (variant !== 'noState') {
29658
+ return {
29659
+ type: variant,
29660
+ timestamp: new Date(Date.now())
29661
+ };
29662
+ }
29663
+ else {
29664
+ return undefined;
29665
+ }
29666
+ }
29454
29667
 
29455
29668
  // Copyright (c) Microsoft Corporation.
29456
29669
  // Licensed under the MIT License.
@@ -34597,6 +34810,10 @@ const CallArrangement = (props) => {
34597
34810
  /* @conditional-compile-remove(notifications) */
34598
34811
  return React.createElement(React.Fragment, null);
34599
34812
  };
34813
+ const complianceBannerTrampoline = () => {
34814
+ /* @conditional-compile-remove(notifications) */
34815
+ return React.createElement(React.Fragment, null);
34816
+ };
34600
34817
  return (React.createElement("div", { ref: containerRef, className: react.mergeStyles(containerDivStyles), id: props.id },
34601
34818
  React.createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
34602
34819
  React.createElement(react.Stack, { reversed: true, horizontal: verticalControlBar, grow: true, styles: callArrangementContainerStyles(verticalControlBar) },
@@ -34627,11 +34844,10 @@ const CallArrangement = (props) => {
34627
34844
  React.createElement(react.Stack.Item, { styles: callGalleryStyles, grow: true },
34628
34845
  React.createElement(react.Stack, { verticalFill: true, styles: mediaGalleryContainerStyles$1 },
34629
34846
  React.createElement(react.Stack.Item, { styles: notificationsContainerStyles },
34630
- React.createElement(react.Stack, { styles: bannerNotificationStyles },
34631
- React.createElement(_ComplianceBanner, Object.assign({}, props.complianceBannerProps))),
34847
+ complianceBannerTrampoline(),
34632
34848
  errorNotificationTrampoline(),
34633
34849
  /* @conditional-compile-remove(notifications) */ props.latestNotifications && (React.createElement(react.Stack, { styles: notificationStackStyles, horizontalAlign: "center", verticalAlign: "center" },
34634
- React.createElement(NotificationStack, { activeNotifications: props.latestNotifications }))),
34850
+ React.createElement(NotificationStack, { activeNotifications: props.latestNotifications, onDismissNotification: props.onDismissNotification }))),
34635
34851
  props.capabilitiesChangedNotificationBarProps &&
34636
34852
  props.capabilitiesChangedNotificationBarProps.capabilitiesChangedNotifications.length > 0 && (React.createElement(react.Stack, { styles: bannerNotificationStyles },
34637
34853
  React.createElement(CapabilitiesChangedNotificationBar, Object.assign({}, props.capabilitiesChangedNotificationBarProps, { capabilitiesChangedNotifications: filteredCapabilitesChangedNotifications !== null && filteredCapabilitesChangedNotifications !== void 0 ? filteredCapabilitesChangedNotifications : [] })))),
@@ -35147,7 +35363,9 @@ const CallPage = (props) => {
35147
35363
  var _a, _b;
35148
35364
  const { callInvitationURL, onFetchAvatarPersonaData, onFetchParticipantMenuItems, options, mobileView, galleryLayout = 'floatingLocalVideo', onUserSetGalleryLayoutChange, userSetOverflowGalleryPosition = 'Responsive', onSetUserSetOverflowGalleryPosition, onCloseChatPane, pinnedParticipants, setPinnedParticipants, compositeAudioContext, disableAutoShowDtmfDialer = false,
35149
35365
  /* @conditional-compile-remove(notifications) */
35150
- latestNotifications } = props;
35366
+ latestNotifications,
35367
+ /* @conditional-compile-remove(notifications) */
35368
+ onDismissNotification } = props;
35151
35369
  // To use useProps to get these states, we need to create another file wrapping Call,
35152
35370
  // It seems unnecessary in this case, so we get the updated states using this approach.
35153
35371
  const { callStatus } = useSelector$1(callStatusSelector);
@@ -35187,7 +35405,9 @@ const CallPage = (props) => {
35187
35405
  }, onFetchAvatarPersonaData: onFetchAvatarPersonaData, mobileView: mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => _isInCall(callStatus) ? (isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (onRenderGalleryContentTrampoline()) : (React.createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps, {
35188
35406
  /* /* @conditional-compile-remove(teams-meeting-conference) */ isMobile: mobileView })))) : (React.createElement(React.Fragment, null)), updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: onCloseChatPane, dataUiId: 'call-page', latestErrors: props.latestErrors,
35189
35407
  /* @conditional-compile-remove(notifications) */
35190
- latestNotifications: latestNotifications, onDismissError: props.onDismissError, onUserSetOverflowGalleryPositionChange: onSetUserSetOverflowGalleryPosition, onUserSetGalleryLayoutChange: onUserSetGalleryLayoutChange, userSetGalleryLayout: galleryLayout, capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps, onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent), dtmfDialerPresent: dtmfDialerPresent, setIsPromptOpen: setIsPromptOpen, setPromptProps: setPromptProps, hideSpotlightButtons: (_b = options === null || options === void 0 ? void 0 : options.spotlight) === null || _b === void 0 ? void 0 : _b.hideSpotlightButtons, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants }),
35408
+ latestNotifications: latestNotifications, onDismissError: props.onDismissError,
35409
+ /* @conditional-compile-remove(notifications) */
35410
+ onDismissNotification: onDismissNotification, onUserSetOverflowGalleryPositionChange: onSetUserSetOverflowGalleryPosition, onUserSetGalleryLayoutChange: onUserSetGalleryLayoutChange, userSetGalleryLayout: galleryLayout, capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps, onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent), dtmfDialerPresent: dtmfDialerPresent, setIsPromptOpen: setIsPromptOpen, setPromptProps: setPromptProps, hideSpotlightButtons: (_b = options === null || options === void 0 ? void 0 : options.spotlight) === null || _b === void 0 ? void 0 : _b.hideSpotlightButtons, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants }),
35191
35411
  React.createElement(Prompt, Object.assign({ isOpen: isPromptOpen, onDismiss: () => setIsPromptOpen(false) }, promptProps))));
35192
35412
  };
35193
35413
  /**
@@ -36600,7 +36820,9 @@ const LobbyPage = (props) => {
36600
36820
  increaseFlyoutItemSize: props.mobileView
36601
36821
  }, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => (React.createElement(LobbyTile, Object.assign({}, lobbyProps, { showLocalVideoCameraCycleButton: props.mobileView, overlayProps: overlayProps(strings, inLobby, Object.values(participants)) }))), dataUiId: 'lobby-page', updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: props.latestErrors, onDismissError: props.onDismissError,
36602
36822
  /* @conditional-compile-remove(notifications) */
36603
- latestNotifications: props.latestNotifications }));
36823
+ latestNotifications: props.latestNotifications,
36824
+ /* @conditional-compile-remove(notifications) */
36825
+ onDismissNotification: props.onDismissNotification }));
36604
36826
  };
36605
36827
  const overlayProps = (strings, inLobby, remoteParticipants) => {
36606
36828
  /**
@@ -36750,7 +36972,11 @@ const TransferPage = (props) => {
36750
36972
  increaseFlyoutItemSize: props.mobileView
36751
36973
  }, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => (React.createElement(TransferTile, { userId: transferTileParticipant ? toFlatCommunicationIdentifier(transferTileParticipant === null || transferTileParticipant === void 0 ? void 0 : transferTileParticipant.identifier) : undefined, displayName: transferParticipantDisplayName, initialsName: transferParticipantDisplayName, statusText: pageSubject === 'transferTarget'
36752
36974
  ? strings.transferPageTransferTargetText
36753
- : strings.transferPageTransferorText, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData })), dataUiId: 'transfer-page', updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: props.latestErrors, onDismissError: props.onDismissError })));
36975
+ : strings.transferPageTransferorText, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData })), dataUiId: 'transfer-page', updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: props.latestErrors, onDismissError: props.onDismissError,
36976
+ /* @conditional-compile-remove(notifications) */
36977
+ onDismissNotification: props.onDismissNotification,
36978
+ /* @conditional-compile-remove(notifications) */
36979
+ latestNotifications: props.latestNotifications })));
36754
36980
  };
36755
36981
  const TransferTile = (props) => {
36756
36982
  const { displayName, initialsName, userId, onFetchAvatarPersonaData, statusText } = props;
@@ -36975,7 +37201,9 @@ const HoldPage = (props) => {
36975
37201
  increaseFlyoutItemSize: props.mobileView
36976
37202
  }, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => React.createElement(HoldPane, null), dataUiId: 'hold-page', updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: props.latestErrors,
36977
37203
  /* @conditional-compile-remove(notifications) */
36978
- latestNotifications: props.latestNotifications, onDismissError: props.onDismissError }));
37204
+ latestNotifications: props.latestNotifications, onDismissError: props.onDismissError,
37205
+ /* @conditional-compile-remove(notifications) */
37206
+ onDismissNotification: props.onDismissNotification }));
36979
37207
  };
36980
37208
 
36981
37209
  // Copyright (c) Microsoft Corporation.
@@ -37471,23 +37699,63 @@ const MainScreen = (props) => {
37471
37699
  /* @conditional-compile-remove(notifications) */
37472
37700
  const activeInCallErrors = usePropsFor$1(NotificationStack).activeErrorMessages;
37473
37701
  /* @conditional-compile-remove(notifications) */
37474
- const activeNotifications = usePropsFor$1(NotificationStack).activeNotifications;
37702
+ const activeNotificationsFromSelector = usePropsFor$1(NotificationStack).activeNotifications;
37703
+ /* @conditional-compile-remove(notifications) */
37704
+ const complianceProps = useSelector$1(complianceBannerSelector);
37705
+ /* @conditional-compile-remove(notifications) */
37706
+ const cachedProps = React.useRef({
37707
+ latestBooleanState: {
37708
+ callTranscribeState: false,
37709
+ callRecordState: false
37710
+ },
37711
+ latestStringState: {
37712
+ callTranscribeState: 'off',
37713
+ callRecordState: 'off'
37714
+ },
37715
+ lastUpdated: Date.now()
37716
+ });
37717
+ /* @conditional-compile-remove(notifications) */
37718
+ const complianceNotification = React.useMemo(() => {
37719
+ return computeComplianceNotification(complianceProps, cachedProps);
37720
+ }, [complianceProps, cachedProps]);
37475
37721
  const [trackedErrors, setTrackedErrors] = React.useState({});
37476
37722
  /* @conditional-compile-remove(notifications) */
37477
37723
  const [trackedInCallErrors, setTrackedInCallErrors] = React.useState({});
37724
+ /* @conditional-compile-remove(notifications) */
37725
+ const [trackedNotifications, setTrackedNotifications] = React.useState({});
37726
+ /* @conditional-compile-remove(notifications) */
37727
+ const [activeNotifications, setActiveNotifications] = React.useState(activeNotificationsFromSelector);
37728
+ /* @conditional-compile-remove(notifications) */
37478
37729
  React.useEffect(() => {
37479
- setTrackedErrors((prev) => updateTrackedErrorsWithActiveErrors(prev, activeErrors));
37730
+ if (complianceNotification) {
37731
+ setActiveNotifications([...activeNotificationsFromSelector, complianceNotification]);
37732
+ }
37733
+ }, [complianceNotification, activeNotificationsFromSelector]);
37734
+ React.useEffect(() => {
37735
+ setTrackedErrors((prev) => updateTrackedNotificationsWithActiveNotifications(prev, activeErrors));
37480
37736
  /* @conditional-compile-remove(notifications) */
37481
- setTrackedInCallErrors((prev) => updateTrackedErrorsWithActiveErrors(prev, activeInCallErrors));
37482
- }, [activeErrors, /* @conditional-compile-remove(notifications) */ activeInCallErrors]);
37737
+ setTrackedInCallErrors((prev) => updateTrackedNotificationsWithActiveNotifications(prev, activeInCallErrors));
37738
+ /* @conditional-compile-remove(notifications) */
37739
+ setTrackedNotifications((prev) => updateTrackedNotificationsWithActiveNotifications(prev, activeNotifications));
37740
+ }, [
37741
+ activeErrors,
37742
+ /* @conditional-compile-remove(notifications) */ activeInCallErrors,
37743
+ /* @conditional-compile-remove(notifications) */ activeNotifications
37744
+ ]);
37483
37745
  const onDismissError = React.useCallback((error) => {
37484
- setTrackedErrors((prev) => trackErrorAsDismissed(error.type, prev));
37746
+ setTrackedErrors((prev) => trackNotificationAsDismissed(error.type, prev));
37485
37747
  /* @conditional-compile-remove(notifications) */
37486
- setTrackedInCallErrors((prev) => trackErrorAsDismissed(error.type, prev));
37748
+ setTrackedInCallErrors((prev) => trackNotificationAsDismissed(error.type, prev));
37749
+ }, []);
37750
+ /* @conditional-compile-remove(notifications) */
37751
+ const onDismissNotification = React.useCallback((notification) => {
37752
+ setTrackedNotifications((prev) => trackNotificationAsDismissed(notification.type, prev));
37487
37753
  }, []);
37488
- const latestErrors = React.useMemo(() => filterLatestErrors(activeErrors, trackedErrors), [activeErrors, trackedErrors]);
37754
+ const latestErrors = React.useMemo(() => filterLatestNotifications(activeErrors, trackedErrors), [activeErrors, trackedErrors]);
37755
+ /* @conditional-compile-remove(notifications) */
37756
+ const latestInCallErrors = React.useMemo(() => filterLatestNotifications(activeInCallErrors, trackedInCallErrors), [activeInCallErrors, trackedInCallErrors]);
37489
37757
  /* @conditional-compile-remove(notifications) */
37490
- const latestInCallErrors = React.useMemo(() => filterLatestErrors(activeInCallErrors, trackedInCallErrors), [activeInCallErrors, trackedInCallErrors]);
37758
+ const latestNotifications = React.useMemo(() => filterLatestNotifications(activeNotifications, trackedNotifications), [activeNotifications, trackedNotifications]);
37491
37759
  const callees = useSelector$1(getTargetCallees);
37492
37760
  const locale = useLocale();
37493
37761
  const palette = useTheme().palette;
@@ -37552,23 +37820,31 @@ const MainScreen = (props) => {
37552
37820
  case 'lobby':
37553
37821
  pageElement = (React.createElement(LobbyPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: getLatestErrorsTrampoline(),
37554
37822
  /* @conditional-compile-remove(notifications) */
37555
- latestNotifications: activeNotifications, onDismissError: onDismissError, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps }));
37823
+ latestNotifications: latestNotifications, onDismissError: onDismissError,
37824
+ /* @conditional-compile-remove(notifications) */
37825
+ onDismissNotification: onDismissNotification, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps }));
37556
37826
  break;
37557
37827
  case 'transferring':
37558
37828
  pageElement = (React.createElement(TransferPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onFetchAvatarPersonaData: onFetchAvatarPersonaData, latestErrors: getLatestErrorsTrampoline(),
37559
37829
  /* @conditional-compile-remove(notifications) */
37560
- latestNotifications: activeNotifications, onDismissError: onDismissError, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps }));
37830
+ latestNotifications: latestNotifications, onDismissError: onDismissError,
37831
+ /* @conditional-compile-remove(notifications) */
37832
+ onDismissNotification: onDismissNotification, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps }));
37561
37833
  break;
37562
37834
  case 'call':
37563
37835
  pageElement = (React.createElement(CallPage, { callInvitationURL: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: props.onCloseChatPane, latestErrors: getLatestErrorsTrampoline(),
37564
37836
  /* @conditional-compile-remove(notifications) */
37565
- latestNotifications: activeNotifications, onDismissError: onDismissError, galleryLayout: userSetGalleryLayout, onUserSetGalleryLayoutChange: setUserSetGalleryLayout, onSetUserSetOverflowGalleryPosition: setUserSetOverflowGalleryPosition, userSetOverflowGalleryPosition: userSetOverflowGalleryPosition, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants, compositeAudioContext: compositeAudioContext, disableAutoShowDtmfDialer: (_q = props.options) === null || _q === void 0 ? void 0 : _q.disableAutoShowDtmfDialer }));
37837
+ latestNotifications: latestNotifications, onDismissError: onDismissError,
37838
+ /* @conditional-compile-remove(notifications) */
37839
+ onDismissNotification: onDismissNotification, galleryLayout: userSetGalleryLayout, onUserSetGalleryLayoutChange: setUserSetGalleryLayout, onSetUserSetOverflowGalleryPosition: setUserSetOverflowGalleryPosition, userSetOverflowGalleryPosition: userSetOverflowGalleryPosition, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants, compositeAudioContext: compositeAudioContext, disableAutoShowDtmfDialer: (_q = props.options) === null || _q === void 0 ? void 0 : _q.disableAutoShowDtmfDialer }));
37566
37840
  break;
37567
37841
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
37568
37842
  case 'hold':
37569
37843
  pageElement = (React.createElement(React.Fragment, null, React.createElement(HoldPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: getLatestErrorsTrampoline(),
37570
37844
  /* @conditional-compile-remove(notifications) */
37571
- latestNotifications: activeNotifications, onDismissError: onDismissError, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps })));
37845
+ latestNotifications: latestNotifications, onDismissError: onDismissError,
37846
+ /* @conditional-compile-remove(notifications) */
37847
+ onDismissNotification: onDismissNotification, capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps })));
37572
37848
  break;
37573
37849
  }
37574
37850
  useEndedCallConsoleErrors(endedCall);
@@ -39573,7 +39849,23 @@ class CallWithChatBackedChatAdapter {
39573
39849
  yield this.callWithChatAdapter.sendMessage(content, /* @conditional-compile-remove(file-sharing-acs) */ options);
39574
39850
  });
39575
39851
  };
39852
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
39853
+ this.uploadImageHandler = function (image, fileName) {
39854
+ return __awaiter$3(this, void 0, void 0, function* () {
39855
+ return yield this.callWithChatAdapter.uploadImage(image, fileName);
39856
+ });
39857
+ };
39858
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
39859
+ this.deleteImageHandler = function (imageId) {
39860
+ return __awaiter$3(this, void 0, void 0, function* () {
39861
+ return yield this.callWithChatAdapter.deleteImage(imageId);
39862
+ });
39863
+ };
39576
39864
  this.sendMessage = this.sendMessageHandler.bind(this);
39865
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
39866
+ this.uploadImage = this.uploadImageHandler.bind(this);
39867
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
39868
+ this.deleteImage = this.deleteImageHandler.bind(this);
39577
39869
  this.sendReadReceipt = (chatMessageId) => __awaiter$3(this, void 0, void 0, function* () { return yield this.callWithChatAdapter.sendReadReceipt(chatMessageId); });
39578
39870
  this.sendTypingIndicator = () => __awaiter$3(this, void 0, void 0, function* () { return yield this.callWithChatAdapter.sendTypingIndicator(); });
39579
39871
  this.removeParticipant = (userId) => __awaiter$3(this, void 0, void 0, function* () { return yield this.callWithChatAdapter.removeParticipant(userId); });
@@ -40210,6 +40502,10 @@ class AzureCommunicationCallWithChatAdapter {
40210
40502
  this.disposeScreenShareStreamView.bind(this);
40211
40503
  this.fetchInitialData.bind(this);
40212
40504
  this.sendMessage.bind(this);
40505
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
40506
+ this.uploadImage.bind(this);
40507
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
40508
+ this.deleteImage.bind(this);
40213
40509
  this.sendReadReceipt.bind(this);
40214
40510
  this.sendTypingIndicator.bind(this);
40215
40511
  this.loadPreviousChatMessages.bind(this);
@@ -40443,6 +40739,24 @@ class AzureCommunicationCallWithChatAdapter {
40443
40739
  });
40444
40740
  });
40445
40741
  }
40742
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
40743
+ /** Upload a chat image. */
40744
+ uploadImage(image, imageFileName) {
40745
+ return __awaiter$2(this, void 0, void 0, function* () {
40746
+ return yield this.executeWithResolvedChatAdapter((adapter) => {
40747
+ return adapter.uploadImage(image, imageFileName);
40748
+ });
40749
+ });
40750
+ }
40751
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
40752
+ /** Delete a chat image. */
40753
+ deleteImage(imageId) {
40754
+ return __awaiter$2(this, void 0, void 0, function* () {
40755
+ return yield this.executeWithResolvedChatAdapter((adapter) => {
40756
+ return adapter.deleteImage(imageId);
40757
+ });
40758
+ });
40759
+ }
40446
40760
  /** Send a chat read receipt. */
40447
40761
  sendReadReceipt(chatMessageId) {
40448
40762
  return __awaiter$2(this, void 0, void 0, function* () {
@@ -41658,4 +41972,4 @@ exports.useTeamsCall = useTeamsCall;
41658
41972
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
41659
41973
  exports.useTeamsCallAgent = useTeamsCallAgent;
41660
41974
  exports.useTheme = useTheme;
41661
- //# sourceMappingURL=index-xFes8-H4.js.map
41975
+ //# sourceMappingURL=index-BPO9X27C.js.map