@azure/communication-react 1.5.1-alpha-202303290014 → 1.5.1-alpha-202303310013

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 (65) hide show
  1. package/dist/communication-react.d.ts +57 -4
  2. package/dist/dist-cjs/communication-react/index.js +764 -402
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +29 -2
  7. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  8. package/dist/dist-esm/chat-component-bindings/src/utils/constants.d.ts +4 -0
  9. package/dist/dist-esm/chat-component-bindings/src/utils/constants.js +4 -0
  10. package/dist/dist-esm/chat-component-bindings/src/utils/constants.js.map +1 -1
  11. package/dist/dist-esm/chat-component-bindings/src/utils/updateMessagesWithAttached.js +32 -26
  12. package/dist/dist-esm/chat-component-bindings/src/utils/updateMessagesWithAttached.js.map +1 -1
  13. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js +6 -1
  14. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js.map +1 -1
  15. package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.d.ts +1 -0
  16. package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.js.map +1 -1
  17. package/dist/dist-esm/communication-react/src/index.d.ts +1 -0
  18. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.d.ts +2 -1
  20. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js +11 -13
  21. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js.map +1 -1
  22. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.d.ts +2 -1
  23. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +34 -20
  24. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  25. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.d.ts +11 -2
  26. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +47 -9
  27. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +10 -3
  29. package/dist/dist-esm/react-components/src/components/MessageThread.js +57 -36
  30. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.d.ts +5 -0
  32. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +28 -0
  33. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  34. package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.d.ts +6 -4
  35. package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.js +1 -1
  36. package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.js.map +1 -1
  37. package/dist/dist-esm/react-components/src/index.d.ts +1 -0
  38. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +3 -1
  40. package/dist/dist-esm/react-components/src/theming/icons.d.ts +1 -0
  41. package/dist/dist-esm/react-components/src/theming/icons.js +8 -0
  42. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  43. package/dist/dist-esm/react-components/src/types/ChatMessage.d.ts +20 -1
  44. package/dist/dist-esm/react-components/src/types/ChatMessage.js.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +20 -0
  46. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  47. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +9 -7
  48. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  49. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +19 -1
  50. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  51. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +5 -1
  52. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +20 -0
  53. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +1 -1
  55. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  56. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.js +2 -1
  57. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/styles/CallWithChatCompositeStyles.js.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.d.ts +2 -0
  59. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js +61 -3
  60. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js.map +1 -1
  61. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +5 -0
  62. package/dist/dist-esm/react-composites/src/composites/common/icons.js +7 -1
  63. package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +5 -0
  65. package/package.json +8 -8
@@ -162,7 +162,7 @@ const _toCommunicationIdentifier = (id) => {
162
162
  // Copyright (c) Microsoft Corporation.
163
163
  // Licensed under the MIT license.
164
164
  // GENERATED FILE. DO NOT EDIT MANUALLY.
165
- var telemetryVersion = '1.5.1-alpha-202303290014';
165
+ var telemetryVersion = '1.5.1-alpha-202303310013';
166
166
 
167
167
  // Copyright (c) Microsoft Corporation.
168
168
  /**
@@ -378,7 +378,7 @@ const getEnvironmentInfo = (state) => {
378
378
 
379
379
  // Copyright (c) Microsoft Corporation.
380
380
  // Licensed under the MIT license.
381
- var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
381
+ var __awaiter$G = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
382
382
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
383
383
  return new (P || (P = Promise))(function (resolve, reject) {
384
384
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -416,7 +416,7 @@ const _isPreviewOn = (deviceManager) => {
416
416
  *
417
417
  * @private
418
418
  */
419
- const disposeAllLocalPreviewViews = (callClient) => __awaiter$F(void 0, void 0, void 0, function* () {
419
+ const disposeAllLocalPreviewViews = (callClient) => __awaiter$G(void 0, void 0, void 0, function* () {
420
420
  const unparentedViews = callClient.getState().deviceManager.unparentedViews;
421
421
  for (const view of unparentedViews) {
422
422
  yield callClient.disposeView(undefined, undefined, view);
@@ -549,7 +549,7 @@ const holdButtonSelector = reselect__namespace.createSelector([getCallState], (c
549
549
 
550
550
  // Copyright (c) Microsoft Corporation.
551
551
  // Licensed under the MIT license.
552
- var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
552
+ var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
553
553
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
554
554
  return new (P || (P = Promise))(function (resolve, reject) {
555
555
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -570,7 +570,7 @@ const areStreamsEqual = (prevStream, newStream) => {
570
570
  * @private
571
571
  */
572
572
  const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callClient, deviceManager, call) => {
573
- const onStartLocalVideo = () => __awaiter$E(void 0, void 0, void 0, function* () {
573
+ const onStartLocalVideo = () => __awaiter$F(void 0, void 0, void 0, function* () {
574
574
  // Before the call object creates a stream, dispose of any local preview streams.
575
575
  // @TODO: is there any way to parent the unparented view to the call object instead
576
576
  // of disposing and creating a new stream?
@@ -590,7 +590,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
590
590
  yield call.startVideo(stream);
591
591
  }
592
592
  });
593
- const onStopLocalVideo = (stream) => __awaiter$E(void 0, void 0, void 0, function* () {
593
+ const onStopLocalVideo = (stream) => __awaiter$F(void 0, void 0, void 0, function* () {
594
594
  const callId = call === null || call === void 0 ? void 0 : call.id;
595
595
  if (!callId) {
596
596
  return;
@@ -599,7 +599,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
599
599
  yield call.stopVideo(stream);
600
600
  }
601
601
  });
602
- const onToggleCamera = (options) => __awaiter$E(void 0, void 0, void 0, function* () {
602
+ const onToggleCamera = (options) => __awaiter$F(void 0, void 0, void 0, function* () {
603
603
  const previewOn = _isPreviewOn(callClient.getState().deviceManager);
604
604
  if (previewOn && call && call.state === 'Connecting') {
605
605
  // This is to workaround: https://skype.visualstudio.com/SPOOL/_workitems/edit/3030558.
@@ -647,19 +647,19 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
647
647
  }
648
648
  }
649
649
  });
650
- const onSelectMicrophone = (device) => __awaiter$E(void 0, void 0, void 0, function* () {
650
+ const onSelectMicrophone = (device) => __awaiter$F(void 0, void 0, void 0, function* () {
651
651
  if (!deviceManager) {
652
652
  return;
653
653
  }
654
654
  return deviceManager.selectMicrophone(device);
655
655
  });
656
- const onSelectSpeaker = (device) => __awaiter$E(void 0, void 0, void 0, function* () {
656
+ const onSelectSpeaker = (device) => __awaiter$F(void 0, void 0, void 0, function* () {
657
657
  if (!deviceManager) {
658
658
  return;
659
659
  }
660
660
  return deviceManager.selectSpeaker(device);
661
661
  });
662
- const onSelectCamera = (device, options) => __awaiter$E(void 0, void 0, void 0, function* () {
662
+ const onSelectCamera = (device, options) => __awaiter$F(void 0, void 0, void 0, function* () {
663
663
  if (!deviceManager) {
664
664
  return;
665
665
  }
@@ -682,19 +682,19 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
682
682
  }, options);
683
683
  }
684
684
  });
685
- const onToggleMicrophone = () => __awaiter$E(void 0, void 0, void 0, function* () {
685
+ const onToggleMicrophone = () => __awaiter$F(void 0, void 0, void 0, function* () {
686
686
  if (!call || !_isInCall(call.state)) {
687
687
  throw new Error(`Please invoke onToggleMicrophone after call is started`);
688
688
  }
689
689
  return call.isMuted ? yield call.unmute() : yield call.mute();
690
690
  });
691
- const onStartScreenShare = () => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
692
- const onStopScreenShare = () => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
693
- const onToggleScreenShare = () => __awaiter$E(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
694
- const onHangUp = (forEveryone) => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
691
+ const onStartScreenShare = () => __awaiter$F(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
692
+ const onStopScreenShare = () => __awaiter$F(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
693
+ const onToggleScreenShare = () => __awaiter$F(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
694
+ const onHangUp = (forEveryone) => __awaiter$F(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
695
695
  /* @conditional-compile-remove(PSTN-calls) */
696
- const onToggleHold = () => __awaiter$E(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()); });
697
- const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$E(void 0, void 0, void 0, function* () {
696
+ const onToggleHold = () => __awaiter$F(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()); });
697
+ const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$F(void 0, void 0, void 0, function* () {
698
698
  var _a;
699
699
  if (!call || call.localVideoStreams.length === 0) {
700
700
  return;
@@ -710,7 +710,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
710
710
  const { view } = (_a = (yield callClient.createView(call.id, undefined, localStream, options))) !== null && _a !== void 0 ? _a : {};
711
711
  return view ? { view } : undefined;
712
712
  });
713
- const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$E(void 0, void 0, void 0, function* () {
713
+ const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$F(void 0, void 0, void 0, function* () {
714
714
  if (!call) {
715
715
  return;
716
716
  }
@@ -741,7 +741,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
741
741
  }
742
742
  return (createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view) ? { view: createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view } : undefined;
743
743
  });
744
- const onDisposeRemoteStreamView = (userId) => __awaiter$E(void 0, void 0, void 0, function* () {
744
+ const onDisposeRemoteStreamView = (userId) => __awaiter$F(void 0, void 0, void 0, function* () {
745
745
  if (!call) {
746
746
  return;
747
747
  }
@@ -762,7 +762,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
762
762
  callClient.disposeView(call.id, participant.identifier, screenShareStream);
763
763
  }
764
764
  });
765
- const onDisposeLocalStreamView = () => __awaiter$E(void 0, void 0, void 0, function* () {
765
+ const onDisposeLocalStreamView = () => __awaiter$F(void 0, void 0, void 0, function* () {
766
766
  // If the user is currently in a call, dispose of the local stream view attached to that call.
767
767
  const callState = call && callClient.getState().calls[call.id];
768
768
  const localStream = callState === null || callState === void 0 ? void 0 : callState.localVideoStreams.find((item) => item.mediaStreamType === 'Video');
@@ -775,18 +775,18 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
775
775
  yield disposeAllLocalPreviewViews(callClient);
776
776
  });
777
777
  /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
778
- const onSendDtmfTone = (dtmfTone) => __awaiter$E(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
778
+ const onSendDtmfTone = (dtmfTone) => __awaiter$F(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
779
779
  const notImplemented = () => {
780
780
  throw new Error('Not implemented, cannot call a method from an abstract object');
781
781
  };
782
782
  /* @conditional-compile-remove(call-readiness) */
783
- const askDevicePermission = (constrain) => __awaiter$E(void 0, void 0, void 0, function* () {
783
+ const askDevicePermission = (constrain) => __awaiter$F(void 0, void 0, void 0, function* () {
784
784
  if (deviceManager) {
785
785
  yield (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.askDevicePermission(constrain));
786
786
  }
787
787
  });
788
788
  /* @conditional-compile-remove(video-background-effects) */
789
- const onRemoveVideoBackgroundEffects = () => __awaiter$E(void 0, void 0, void 0, function* () {
789
+ const onRemoveVideoBackgroundEffects = () => __awaiter$F(void 0, void 0, void 0, function* () {
790
790
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
791
791
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
792
792
  if (stream) {
@@ -794,7 +794,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
794
794
  }
795
795
  });
796
796
  /* @conditional-compile-remove(video-background-effects) */
797
- const onBlurVideoBackground = (bgBlurConfig) => __awaiter$E(void 0, void 0, void 0, function* () {
797
+ const onBlurVideoBackground = (bgBlurConfig) => __awaiter$F(void 0, void 0, void 0, function* () {
798
798
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
799
799
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
800
800
  if (stream) {
@@ -802,7 +802,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
802
802
  }
803
803
  });
804
804
  /* @conditional-compile-remove(video-background-effects) */
805
- const onReplaceVideoBackground = (bgReplacementConfig) => __awaiter$E(void 0, void 0, void 0, function* () {
805
+ const onReplaceVideoBackground = (bgReplacementConfig) => __awaiter$F(void 0, void 0, void 0, function* () {
806
806
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
807
807
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
808
808
  if (stream) {
@@ -844,7 +844,7 @@ const createDefaultCommonCallingHandlers = memoizeOne__default['default']((callC
844
844
 
845
845
  // Copyright (c) Microsoft Corporation.
846
846
  // Licensed under the MIT license.
847
- var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
847
+ var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
848
848
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
849
849
  return new (P || (P = Promise))(function (resolve, reject) {
850
850
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -871,7 +871,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
871
871
  return callAgent ? callAgent.startCall(participants, options) : undefined;
872
872
  },
873
873
  /* @conditional-compile-remove(PSTN-calls) */
874
- onAddParticipant: (userId, options) => __awaiter$D(void 0, void 0, void 0, function* () {
874
+ onAddParticipant: (userId, options) => __awaiter$E(void 0, void 0, void 0, function* () {
875
875
  const participant = _toCommunicationIdentifier(userId);
876
876
  if (communicationCommon.isPhoneNumberIdentifier(participant)) {
877
877
  call === null || call === void 0 ? void 0 : call.addParticipant(participant, options);
@@ -879,7 +879,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
879
879
  else if (communicationCommon.isCommunicationUserIdentifier(participant) || communicationCommon.isMicrosoftTeamsUserIdentifier(participant)) {
880
880
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
881
881
  }
882
- }), onRemoveParticipant: (userId) => __awaiter$D(void 0, void 0, void 0, function* () {
882
+ }), onRemoveParticipant: (userId) => __awaiter$E(void 0, void 0, void 0, function* () {
883
883
  const participant = _toCommunicationIdentifier(userId);
884
884
  yield (call === null || call === void 0 ? void 0 : call.removeParticipant(participant));
885
885
  }) });
@@ -887,7 +887,7 @@ const createDefaultCallingHandlers = memoizeOne__default['default']((callClient,
887
887
 
888
888
  // Copyright (c) Microsoft Corporation.
889
889
  // Licensed under the MIT license.
890
- var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
890
+ var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
891
891
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
892
892
  return new (P || (P = Promise))(function (resolve, reject) {
893
893
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -919,7 +919,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
919
919
  },
920
920
  /* @conditional-compile-remove(teams-identity-support) */
921
921
  /* @conditional-compile-remove(PSTN-calls) */
922
- onAddParticipant: (userId, options) => __awaiter$C(void 0, void 0, void 0, function* () {
922
+ onAddParticipant: (userId, options) => __awaiter$D(void 0, void 0, void 0, function* () {
923
923
  const participant = _toCommunicationIdentifier(userId);
924
924
  /* @conditional-compile-remove(teams-identity-support) */
925
925
  const threadId = options === null || options === void 0 ? void 0 : options.threadId;
@@ -932,7 +932,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
932
932
  }
933
933
  /* @conditional-compile-remove(teams-identity-support) */
934
934
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
935
- }), onRemoveParticipant: (userId) => __awaiter$C(void 0, void 0, void 0, function* () {
935
+ }), onRemoveParticipant: (userId) => __awaiter$D(void 0, void 0, void 0, function* () {
936
936
  const participant = _toCommunicationIdentifier(userId);
937
937
  if (communicationCommon.isCommunicationUserIdentifier(participant)) {
938
938
  throw new Error('CommunicationIdentifier in Teams call is not supported!');
@@ -944,7 +944,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne__default['default']((callCl
944
944
 
945
945
  // Copyright (c) Microsoft Corporation.
946
946
  // Licensed under the MIT license.
947
- var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
947
+ var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
948
948
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
949
949
  return new (P || (P = Promise))(function (resolve, reject) {
950
950
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -993,13 +993,13 @@ class ProxyDeviceManager {
993
993
  this.selectCamera = (videoDeviceInfo) => {
994
994
  this._context.setDeviceManagerSelectedCamera(videoDeviceInfo);
995
995
  };
996
- this.videoDevicesUpdated = () => __awaiter$B(this, void 0, void 0, function* () {
996
+ this.videoDevicesUpdated = () => __awaiter$C(this, void 0, void 0, function* () {
997
997
  // Device Manager always has a camera with '' name if there are no real camera devices available.
998
998
  // We don't want to show that in the UI.
999
999
  const realCameras = (yield this._deviceManager.getCameras()).filter((c) => !!c.name);
1000
1000
  this._context.setDeviceManagerCameras(dedupeById(realCameras));
1001
1001
  });
1002
- this.audioDevicesUpdated = () => __awaiter$B(this, void 0, void 0, function* () {
1002
+ this.audioDevicesUpdated = () => __awaiter$C(this, void 0, void 0, function* () {
1003
1003
  this._context.setDeviceManagerMicrophones(dedupeById(yield this._deviceManager.getMicrophones()));
1004
1004
  this._context.setDeviceManagerSpeakers(dedupeById(yield this._deviceManager.getSpeakers()));
1005
1005
  });
@@ -1202,7 +1202,7 @@ class CallIdHistory {
1202
1202
 
1203
1203
  // Copyright (c) Microsoft Corporation.
1204
1204
  // Licensed under the MIT license.
1205
- var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1205
+ var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1206
1206
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1207
1207
  return new (P || (P = Promise))(function (resolve, reject) {
1208
1208
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1786,7 +1786,7 @@ class CallContext$2 {
1786
1786
  * @throws CallError. Exceptions thrown from `f` are tagged with the failed `target.
1787
1787
  */
1788
1788
  withAsyncErrorTeedToState(action, target) {
1789
- return (...args) => __awaiter$A(this, void 0, void 0, function* () {
1789
+ return (...args) => __awaiter$B(this, void 0, void 0, function* () {
1790
1790
  try {
1791
1791
  return yield action(...args);
1792
1792
  }
@@ -2313,7 +2313,7 @@ function _logStreamEvent(eventName, streamLogInfo, error) {
2313
2313
 
2314
2314
  // Copyright (c) Microsoft Corporation.
2315
2315
  // Licensed under the MIT license.
2316
- var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
2316
+ var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
2317
2317
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2318
2318
  return new (P || (P = Promise))(function (resolve, reject) {
2319
2319
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -2323,7 +2323,7 @@ var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments,
2323
2323
  });
2324
2324
  };
2325
2325
  function createViewVideo(context, internalContext, callId, stream, participantId, options) {
2326
- return __awaiter$z(this, void 0, void 0, function* () {
2326
+ return __awaiter$A(this, void 0, void 0, function* () {
2327
2327
  // we can only have 3 types of createView
2328
2328
  let streamEventType;
2329
2329
  // we will reuse these for local as well but we need to make sure the remote stream is passed in like before.
@@ -2445,7 +2445,7 @@ function createViewVideo(context, internalContext, callId, stream, participantId
2445
2445
  });
2446
2446
  }
2447
2447
  function createViewUnparentedVideo(context, internalContext, stream, options) {
2448
- return __awaiter$z(this, void 0, void 0, function* () {
2448
+ return __awaiter$A(this, void 0, void 0, function* () {
2449
2449
  const renderInfo = internalContext.getUnparentedRenderInfo(stream);
2450
2450
  if (renderInfo && renderInfo.status === 'Rendered') {
2451
2451
  console.warn('Unparented LocalVideoStream is already rendered');
@@ -2613,7 +2613,7 @@ function createView(context, internalContext, callId, participantId, stream, opt
2613
2613
  // Render LocalVideoStream that is not part of a Call
2614
2614
  // 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).
2615
2615
  // We do not have a startLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
2616
- return context.withAsyncErrorTeedToState(() => __awaiter$z(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
2616
+ return context.withAsyncErrorTeedToState(() => __awaiter$A(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
2617
2617
  }
2618
2618
  else {
2619
2619
  _logStreamEvent(EventNames.CREATE_STREAM_INVALID_PARAMS, { streamType });
@@ -3047,7 +3047,7 @@ class CallSubscriber {
3047
3047
 
3048
3048
  // Copyright (c) Microsoft Corporation.
3049
3049
  // Licensed under the MIT license.
3050
- var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3050
+ var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3051
3051
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3052
3052
  return new (P || (P = Promise))(function (resolve, reject) {
3053
3053
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3067,14 +3067,14 @@ class ProxyIncomingCall {
3067
3067
  switch (prop) {
3068
3068
  case 'accept': {
3069
3069
  return this._context.withAsyncErrorTeedToState(function (...args) {
3070
- return __awaiter$y(this, void 0, void 0, function* () {
3070
+ return __awaiter$z(this, void 0, void 0, function* () {
3071
3071
  return yield target.accept(...args);
3072
3072
  });
3073
3073
  }, 'IncomingCall.accept');
3074
3074
  }
3075
3075
  case 'reject': {
3076
3076
  return this._context.withAsyncErrorTeedToState(function (...args) {
3077
- return __awaiter$y(this, void 0, void 0, function* () {
3077
+ return __awaiter$z(this, void 0, void 0, function* () {
3078
3078
  return yield target.reject(...args);
3079
3079
  });
3080
3080
  }, 'IncomingCall.reject');
@@ -3311,7 +3311,7 @@ const clearCallRelatedState = (context, internalContext) => {
3311
3311
 
3312
3312
  // Copyright (c) Microsoft Corporation.
3313
3313
  // Licensed under the MIT license.
3314
- var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3314
+ var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3315
3315
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3316
3316
  return new (P || (P = Promise))(function (resolve, reject) {
3317
3317
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3337,56 +3337,56 @@ class ProxyCallCommon {
3337
3337
  switch (prop) {
3338
3338
  case 'mute': {
3339
3339
  return this._context.withAsyncErrorTeedToState(function (...args) {
3340
- return __awaiter$x(this, void 0, void 0, function* () {
3340
+ return __awaiter$y(this, void 0, void 0, function* () {
3341
3341
  return yield target.mute(...args);
3342
3342
  });
3343
3343
  }, 'Call.mute');
3344
3344
  }
3345
3345
  case 'unmute': {
3346
3346
  return this._context.withAsyncErrorTeedToState(function (...args) {
3347
- return __awaiter$x(this, void 0, void 0, function* () {
3347
+ return __awaiter$y(this, void 0, void 0, function* () {
3348
3348
  return yield target.unmute(...args);
3349
3349
  });
3350
3350
  }, 'Call.unmute');
3351
3351
  }
3352
3352
  case 'startVideo': {
3353
3353
  return this._context.withAsyncErrorTeedToState(function (...args) {
3354
- return __awaiter$x(this, void 0, void 0, function* () {
3354
+ return __awaiter$y(this, void 0, void 0, function* () {
3355
3355
  return yield target.startVideo(...args);
3356
3356
  });
3357
3357
  }, 'Call.startVideo');
3358
3358
  }
3359
3359
  case 'stopVideo': {
3360
3360
  return this._context.withAsyncErrorTeedToState(function (...args) {
3361
- return __awaiter$x(this, void 0, void 0, function* () {
3361
+ return __awaiter$y(this, void 0, void 0, function* () {
3362
3362
  return yield target.stopVideo(...args);
3363
3363
  });
3364
3364
  }, 'Call.stopVideo');
3365
3365
  }
3366
3366
  case 'startScreenSharing': {
3367
3367
  return this._context.withAsyncErrorTeedToState(function (...args) {
3368
- return __awaiter$x(this, void 0, void 0, function* () {
3368
+ return __awaiter$y(this, void 0, void 0, function* () {
3369
3369
  return yield target.startScreenSharing(...args);
3370
3370
  });
3371
3371
  }, 'Call.startScreenSharing');
3372
3372
  }
3373
3373
  case 'stopScreenSharing': {
3374
3374
  return this._context.withAsyncErrorTeedToState(function (...args) {
3375
- return __awaiter$x(this, void 0, void 0, function* () {
3375
+ return __awaiter$y(this, void 0, void 0, function* () {
3376
3376
  return yield target.stopScreenSharing(...args);
3377
3377
  });
3378
3378
  }, 'Call.stopScreenSharing');
3379
3379
  }
3380
3380
  case 'hold': {
3381
3381
  return this._context.withAsyncErrorTeedToState(function (...args) {
3382
- return __awaiter$x(this, void 0, void 0, function* () {
3382
+ return __awaiter$y(this, void 0, void 0, function* () {
3383
3383
  return yield target.hold(...args);
3384
3384
  });
3385
3385
  }, 'Call.hold');
3386
3386
  }
3387
3387
  case 'resume': {
3388
3388
  return this._context.withAsyncErrorTeedToState(function (...args) {
3389
- return __awaiter$x(this, void 0, void 0, function* () {
3389
+ return __awaiter$y(this, void 0, void 0, function* () {
3390
3390
  return yield target.resume(...args);
3391
3391
  });
3392
3392
  }, 'Call.resume');
@@ -3399,7 +3399,7 @@ class ProxyCallCommon {
3399
3399
 
3400
3400
  // Copyright (c) Microsoft Corporation.
3401
3401
  // Licensed under the MIT license.
3402
- var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3402
+ var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3403
3403
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3404
3404
  return new (P || (P = Promise))(function (resolve, reject) {
3405
3405
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3413,7 +3413,7 @@ class ProxyCall extends ProxyCallCommon {
3413
3413
  switch (prop) {
3414
3414
  case 'addParticipant': {
3415
3415
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
3416
- return __awaiter$w(this, void 0, void 0, function* () {
3416
+ return __awaiter$x(this, void 0, void 0, function* () {
3417
3417
  return yield target.addParticipant(...args);
3418
3418
  });
3419
3419
  }, 'Call.addParticipant');
@@ -3634,7 +3634,7 @@ class InternalCallContext {
3634
3634
 
3635
3635
  // Copyright (c) Microsoft Corporation.
3636
3636
  // Licensed under the MIT license.
3637
- var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3637
+ var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3638
3638
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3639
3639
  return new (P || (P = Promise))(function (resolve, reject) {
3640
3640
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3649,7 +3649,7 @@ class ProxyTeamsCall extends ProxyCallCommon {
3649
3649
  switch (prop) {
3650
3650
  case 'addParticipant': {
3651
3651
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
3652
- return __awaiter$v(this, void 0, void 0, function* () {
3652
+ return __awaiter$w(this, void 0, void 0, function* () {
3653
3653
  return yield target.addParticipant(...args);
3654
3654
  });
3655
3655
  }, 'TeamsCall.addParticipant');
@@ -3764,7 +3764,7 @@ const teamsCallAgentDeclaratify = (callAgent, context, internalContext) => {
3764
3764
 
3765
3765
  // Copyright (c) Microsoft Corporation.
3766
3766
  // Licensed under the MIT license.
3767
- var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3767
+ var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3768
3768
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3769
3769
  return new (P || (P = Promise))(function (resolve, reject) {
3770
3770
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3786,7 +3786,7 @@ class ProxyVideoStreamRendererView {
3786
3786
  get(target, prop) {
3787
3787
  switch (prop) {
3788
3788
  case 'updateScalingMode': {
3789
- return (...args) => __awaiter$u(this, void 0, void 0, function* () {
3789
+ return (...args) => __awaiter$v(this, void 0, void 0, function* () {
3790
3790
  yield target.updateScalingMode(...args);
3791
3791
  this._context.setRemoteVideoStreamViewScalingMode(this._callId, this._participantId, this._streamId, args[0]);
3792
3792
  });
@@ -3807,7 +3807,7 @@ const videoStreamRendererViewDeclaratify = (view, context, callId, participantId
3807
3807
 
3808
3808
  // Copyright (c) Microsoft Corporation.
3809
3809
  // Licensed under the MIT license.
3810
- var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3810
+ var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3811
3811
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3812
3812
  return new (P || (P = Promise))(function (resolve, reject) {
3813
3813
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3829,7 +3829,7 @@ class ProxyCallClient {
3829
3829
  get(target, prop) {
3830
3830
  switch (prop) {
3831
3831
  case 'createCallAgent': {
3832
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$t(this, void 0, void 0, function* () {
3832
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$u(this, void 0, void 0, function* () {
3833
3833
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
3834
3834
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
3835
3835
  // callAgent if the createCallAgent succeeds.
@@ -3842,7 +3842,7 @@ class ProxyCallClient {
3842
3842
  }), 'CallClient.createCallAgent');
3843
3843
  }
3844
3844
  case 'createTeamsCallAgent': {
3845
- /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$t(this, void 0, void 0, function* () {
3845
+ /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$u(this, void 0, void 0, function* () {
3846
3846
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
3847
3847
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
3848
3848
  // callAgent if the createCallAgent succeeds.
@@ -3855,7 +3855,7 @@ class ProxyCallClient {
3855
3855
  }), 'CallClient.createTeamsCallAgent');
3856
3856
  }
3857
3857
  case 'getDeviceManager': {
3858
- return this._context.withAsyncErrorTeedToState(() => __awaiter$t(this, void 0, void 0, function* () {
3858
+ return this._context.withAsyncErrorTeedToState(() => __awaiter$u(this, void 0, void 0, function* () {
3859
3859
  // As of writing, the SDK always returns the same instance of DeviceManager so we keep a reference of
3860
3860
  // DeviceManager and if it does not change we return the cached DeclarativeDeviceManager. If it does not we'll
3861
3861
  // throw an error that indicate we need to fix this issue as our implementation has diverged from the SDK.
@@ -3884,7 +3884,7 @@ class ProxyCallClient {
3884
3884
  /**
3885
3885
  * add to this object if we want to proxy anything else off the DebugInfo feature object.
3886
3886
  */
3887
- return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$t(this, void 0, void 0, function* () {
3887
+ return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$u(this, void 0, void 0, function* () {
3888
3888
  const environmentInfo = yield feature.getEnvironmentInfo();
3889
3889
  this._context.setEnvironmentInfo(environmentInfo);
3890
3890
  return environmentInfo;
@@ -3937,7 +3937,7 @@ const createStatefulCallClientWithDeps = (callClient, context, internalContext)
3937
3937
  });
3938
3938
  Object.defineProperty(callClient, 'createView', {
3939
3939
  configurable: false,
3940
- value: (callId, participantId, stream, options) => __awaiter$t(void 0, void 0, void 0, function* () {
3940
+ value: (callId, participantId, stream, options) => __awaiter$u(void 0, void 0, void 0, function* () {
3941
3941
  const participantIdKind = participantId ? communicationCommon.getIdentifierKind(participantId) : undefined;
3942
3942
  const result = yield createView(context, internalContext, callId, participantIdKind, stream, options);
3943
3943
  // We only need to declaratify the VideoStreamRendererView object for remote participants. Because the updateScalingMode only needs to be called on remote participant stream views.
@@ -4166,7 +4166,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
4166
4166
  wordBreak: 'break-word'
4167
4167
  });
4168
4168
 
4169
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",micPrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$d={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",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.",startScreenSharingGeneric:"There was an issue starting screen share.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneSitePermissionsRequest={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={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={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={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={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={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={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={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={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={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={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={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$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$1={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$1={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$d={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$d={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$1={leftNavButtonAriaLabel:"previous page",rightNavButtonAriaLabel:"next page"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton$d,videoTile:videoTile$d,CameraAndMicrophoneSitePermissionsRequest:CameraAndMicrophoneSitePermissionsRequest,CameraSitePermissionsRequest:CameraSitePermissionsRequest,MicrophoneSitePermissionsRequest:MicrophoneSitePermissionsRequest,CameraAndMicrophoneSitePermissionsCheck:CameraAndMicrophoneSitePermissionsCheck,CameraSitePermissionsCheck:CameraSitePermissionsCheck,MicrophoneSitePermissionsCheck:MicrophoneSitePermissionsCheck,CameraAndMicrophoneSitePermissionsDenied:CameraAndMicrophoneSitePermissionsDenied,CameraAndMicrophoneSitePermissionsDeniedSafari:CameraAndMicrophoneSitePermissionsDeniedSafari,CameraSitePermissionsDenied:CameraSitePermissionsDenied,MicrophoneSitePermissionsDenied:MicrophoneSitePermissionsDenied,CameraSitePermissionsDeniedSafari:CameraSitePermissionsDeniedSafari,MicrophoneSitePermissionsDeniedSafari:MicrophoneSitePermissionsDeniedSafari,UnsupportedBrowser:UnsupportedBrowser$e,UnsupportedBrowserVersion:UnsupportedBrowserVersion$1,UnsupportedOperatingSystem:UnsupportedOperatingSystem$1,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d,VerticalGallery:VerticalGallery$1};
4169
+ var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",micPrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$d={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",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.",startScreenSharingGeneric:"There was an issue starting screen share.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneSitePermissionsRequest={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={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={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={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={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={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={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={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={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={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={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={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$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$1={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$1={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$d={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$d={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$1={leftNavButtonAriaLabel:"previous page",rightNavButtonAriaLabel:"next page"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton$d,videoTile:videoTile$d,CameraAndMicrophoneSitePermissionsRequest:CameraAndMicrophoneSitePermissionsRequest,CameraSitePermissionsRequest:CameraSitePermissionsRequest,MicrophoneSitePermissionsRequest:MicrophoneSitePermissionsRequest,CameraAndMicrophoneSitePermissionsCheck:CameraAndMicrophoneSitePermissionsCheck,CameraSitePermissionsCheck:CameraSitePermissionsCheck,MicrophoneSitePermissionsCheck:MicrophoneSitePermissionsCheck,CameraAndMicrophoneSitePermissionsDenied:CameraAndMicrophoneSitePermissionsDenied,CameraAndMicrophoneSitePermissionsDeniedSafari:CameraAndMicrophoneSitePermissionsDeniedSafari,CameraSitePermissionsDenied:CameraSitePermissionsDenied,MicrophoneSitePermissionsDenied:MicrophoneSitePermissionsDenied,CameraSitePermissionsDeniedSafari:CameraSitePermissionsDeniedSafari,MicrophoneSitePermissionsDeniedSafari:MicrophoneSitePermissionsDeniedSafari,UnsupportedBrowser:UnsupportedBrowser$e,UnsupportedBrowserVersion:UnsupportedBrowserVersion$1,UnsupportedOperatingSystem:UnsupportedOperatingSystem$1,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d,VerticalGallery:VerticalGallery$1};
4170
4170
 
4171
4171
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$c={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$c={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$c={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$c={label:"Leave",tooltipContent:"Leave call"};var cameraButton$c={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$c={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$c={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$c={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$c={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$c={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$c={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$c={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant"};var dialpad$c={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$c={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$c={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var SitePermissions$c={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:"Allow Access"};var UnsupportedBrowser$d={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLink:"More help"};var BrowserPermissionDenied$c={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$c={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 en_GB$1 = {participantItem:participantItem$c,typingIndicator:typingIndicator$c,sendBox:sendBox$c,messageStatusIndicator:messageStatusIndicator$c,endCallButton:endCallButton$c,cameraButton:cameraButton$c,microphoneButton:microphoneButton$c,devicesButton:devicesButton$c,participantsButton:participantsButton$c,screenShareButton:screenShareButton$c,messageThread:messageThread$c,errorBar:errorBar$c,videoGallery:videoGallery$c,dialpad:dialpad$c,holdButton:holdButton$c,videoTile:videoTile$c,SitePermissions:SitePermissions$c,UnsupportedBrowser:UnsupportedBrowser$d,BrowserPermissionDenied:BrowserPermissionDenied$c,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$c};
4172
4172
 
@@ -4676,6 +4676,25 @@ const customIconName = {
4676
4676
  const isValidString = (string) => {
4677
4677
  return !!string && string.length > 0;
4678
4678
  };
4679
+ /**
4680
+ * Chunk an array into rows of a given size.
4681
+ * @private
4682
+ */
4683
+ function chunk(options, itemsPerRow) {
4684
+ const rows = [];
4685
+ let currentRow = [];
4686
+ for (const option of options) {
4687
+ currentRow.push(option);
4688
+ if (currentRow.length === itemsPerRow) {
4689
+ rows.push(currentRow);
4690
+ currentRow = [];
4691
+ }
4692
+ }
4693
+ if (currentRow.length > 0) {
4694
+ rows.push(currentRow);
4695
+ }
4696
+ return rows;
4697
+ }
4679
4698
 
4680
4699
  // Copyright (c) Microsoft Corporation.
4681
4700
  /**
@@ -5233,6 +5252,10 @@ const BrowserPermissionDenied20Filled = () => {
5233
5252
  React__default['default'].createElement("div", { className: react.mergeStyles(scaledIconStyles(theme)) },
5234
5253
  React__default['default'].createElement(reactIcons.Important20Filled, null))));
5235
5254
  };
5255
+ /* @conditional-compile-remove(data-loss-prevention) */
5256
+ const DataLossPreventionProhibited16Regular = () => {
5257
+ return React__default['default'].createElement(reactIcons.Prohibited16Regular, null);
5258
+ };
5236
5259
  /**
5237
5260
  * The default set of icons that are available to use in the UI components.
5238
5261
  *
@@ -5257,6 +5280,8 @@ const DEFAULT_COMPONENT_ICONS = {
5257
5280
  CancelFileUpload: React__default['default'].createElement(reactIcons.Dismiss16Regular, null),
5258
5281
  /* @conditional-compile-remove(file-sharing) */
5259
5282
  DownloadFile: React__default['default'].createElement(reactIcons.ArrowDownload16Regular, null),
5283
+ /* @conditional-compile-remove(data-loss-prevention) */
5284
+ DataLossPreventionProhibited: React__default['default'].createElement(DataLossPreventionProhibited16Regular, null),
5260
5285
  EditBoxCancel: React__default['default'].createElement(reactIcons.Dismiss20Regular, null),
5261
5286
  EditBoxSubmit: React__default['default'].createElement(reactIcons.Checkmark20Regular, null),
5262
5287
  ErrorBarCallCameraAccessDenied: React__default['default'].createElement(reactIcons.VideoProhibited16Filled, null),
@@ -6172,6 +6197,34 @@ const defaultChatMessageContainer = (theme) => ({
6172
6197
  // This makes message bubble show border in high contrast mode making each message distinguishable
6173
6198
  border: '1px solid transparent'
6174
6199
  });
6200
+ /**
6201
+ * @private
6202
+ * @conditional-compile-remove(data-loss-prevention)
6203
+ */
6204
+ const defaultBlockedMessageStyleContainer = (theme) => ({
6205
+ maxWidth: '100%',
6206
+ minWidth: `${CHAT_MESSAGE_CONTAINER_MIN_WIDTH_REM}rem`,
6207
+ marginRight: '0rem',
6208
+ color: theme.palette.neutralSecondary,
6209
+ '& i': {
6210
+ paddingTop: '0.25rem'
6211
+ },
6212
+ '& p': {
6213
+ // Deal with awkward padding seen in messages from Teams.
6214
+ // For more info see https://github.com/Azure/communication-ui-library/pull/1507
6215
+ marginBlock: '0.125rem',
6216
+ paddingRight: '0.75rem',
6217
+ fontStyle: 'italic'
6218
+ },
6219
+ '& a': {
6220
+ marginBlock: '0.125rem',
6221
+ fontStyle: 'normal',
6222
+ color: theme.palette.themePrimary,
6223
+ textDecoration: 'none'
6224
+ },
6225
+ // This makes message bubble show border in high contrast mode making each message distinguishable
6226
+ border: '1px solid transparent'
6227
+ });
6175
6228
  /**
6176
6229
  * @private
6177
6230
  */
@@ -6744,20 +6797,44 @@ const ChatMessageContent = (props) => {
6744
6797
  return React__default['default'].createElement(React__default['default'].Fragment, null);
6745
6798
  }
6746
6799
  };
6800
+ const MessageContentWithLiveAria = (props) => {
6801
+ return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-label": props.ariaLabel },
6802
+ React__default['default'].createElement(reactAriaLive.LiveMessage, { message: props.liveMessage, "aria-live": "polite" }),
6803
+ props.content));
6804
+ };
6747
6805
  const MessageContentAsRichTextHTML = (props) => {
6748
6806
  const htmlToReactParser = new htmlToReact.Parser();
6749
- const liveAuthor = _formatString(props.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
6750
- return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-label": props.messageContentAriaText },
6751
- React__default['default'].createElement(reactAriaLive.LiveMessage, { message: `${props.message.mine ? '' : liveAuthor} ${extractContent(props.message.content || '')}`, "aria-live": "polite" }),
6752
- htmlToReactParser.parse(props.message.content)));
6807
+ const liveAuthor = _formatString(props.strings.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
6808
+ return (React__default['default'].createElement(MessageContentWithLiveAria, { message: props.message, liveMessage: `${props.message.mine ? '' : liveAuthor} ${extractContent(props.message.content || '')}`, ariaLabel: messageContentAriaText(props), content: htmlToReactParser.parse(props.message.content) }));
6753
6809
  };
6754
6810
  const MessageContentAsText = (props) => {
6755
- const liveAuthor = _formatString(props.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
6756
- return (React__default['default'].createElement("div", { "data-ui-status": props.message.status, role: "text", "aria-label": props.messageContentAriaText },
6757
- React__default['default'].createElement(reactAriaLive.LiveMessage, { message: `${props.message.mine ? '' : liveAuthor} ${props.message.content}`, "aria-live": "polite" }),
6758
- React__default['default'].createElement(Linkify__default['default'], { componentDecorator: (decoratedHref, decoratedText, key) => {
6811
+ const liveAuthor = _formatString(props.strings.liveAuthorIntro, { author: `${props.message.senderDisplayName}` });
6812
+ return (React__default['default'].createElement(MessageContentWithLiveAria, { message: props.message, liveMessage: `${props.message.mine ? '' : liveAuthor} ${extractContent(props.message.content || '')}`, ariaLabel: messageContentAriaText(props), content: React__default['default'].createElement(Linkify__default['default'], { componentDecorator: (decoratedHref, decoratedText, key) => {
6759
6813
  return (React__default['default'].createElement(react.Link, { target: "_blank", href: decoratedHref, key: key }, decoratedText));
6760
- } }, props.message.content)));
6814
+ } }, props.message.content) }));
6815
+ };
6816
+ /* @conditional-compile-remove(data-loss-prevention) */
6817
+ /**
6818
+ * @private
6819
+ */
6820
+ const BlockedMessageContent = (props) => {
6821
+ var _a;
6822
+ const Icon = React__default['default'].createElement(react.FontIcon, { iconName: 'DataLossPreventionProhibited' });
6823
+ const blockedMessage = props.message.warningText === false
6824
+ ? ''
6825
+ : props.message.warningText === '' || props.message.warningText === undefined
6826
+ ? props.strings.blockedWarningText
6827
+ : props.message.warningText;
6828
+ const blockedMessageLink = props.message.link;
6829
+ const blockedMessageLinkText = blockedMessageLink
6830
+ ? (_a = props.message.linkText) !== null && _a !== void 0 ? _a : props.strings.blockedWarningLinkText
6831
+ : '';
6832
+ const liveAuthor = props.message.mine || props.message.senderDisplayName === undefined ? '' : props.message.senderDisplayName;
6833
+ const liveBlockedWarningText = `${liveAuthor} ${blockedMessage} ${blockedMessageLinkText}`;
6834
+ return (React__default['default'].createElement(MessageContentWithLiveAria, { message: props.message, liveMessage: liveBlockedWarningText, ariaLabel: liveBlockedWarningText, content: React__default['default'].createElement(react.Stack, { horizontal: true, wrap: true },
6835
+ Icon,
6836
+ blockedMessage && React__default['default'].createElement("p", null, blockedMessage),
6837
+ blockedMessageLink && (React__default['default'].createElement(react.Link, { target: '_blank', href: blockedMessageLink }, blockedMessageLinkText))) }));
6761
6838
  };
6762
6839
  // https://stackoverflow.com/questions/28899298/extract-the-text-out-of-html-string-using-javascript
6763
6840
  const extractContent = (s) => {
@@ -6765,6 +6842,18 @@ const extractContent = (s) => {
6765
6842
  span.innerHTML = s;
6766
6843
  return span.textContent || span.innerText;
6767
6844
  };
6845
+ const messageContentAriaText = (props) => {
6846
+ return props.message.content
6847
+ ? props.message.mine
6848
+ ? _formatString(props.strings.messageContentMineAriaText, {
6849
+ message: props.message.content
6850
+ })
6851
+ : _formatString(props.strings.messageContentAriaText, {
6852
+ author: `${props.message.senderDisplayName}`,
6853
+ message: props.message.content
6854
+ })
6855
+ : undefined;
6856
+ };
6768
6857
 
6769
6858
  // Copyright (c) Microsoft Corporation.
6770
6859
  /**
@@ -6798,7 +6887,7 @@ const chatMessageActionMenuProps = (menuProps) => {
6798
6887
  return actionMenuProps;
6799
6888
  };
6800
6889
 
6801
- var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
6890
+ var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
6802
6891
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6803
6892
  return new (P || (P = Promise))(function (resolve, reject) {
6804
6893
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -6823,7 +6912,7 @@ const _FileDownloadCards = (props) => {
6823
6912
  var _a, _b;
6824
6913
  return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile) !== null && _b !== void 0 ? _b : localeStrings.downloadFile;
6825
6914
  }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadFile, localeStrings.downloadFile]);
6826
- const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$s(void 0, void 0, void 0, function* () {
6915
+ const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$t(void 0, void 0, void 0, function* () {
6827
6916
  if (!props.downloadHandler) {
6828
6917
  window.open(file.url, '_blank', 'noopener,noreferrer');
6829
6918
  }
@@ -6900,7 +6989,10 @@ const MessageBubble = (props) => {
6900
6989
  const messageRef = React.useRef(null);
6901
6990
  const messageActionButtonRef = React.useRef(null);
6902
6991
  const [chatMessageActionFlyoutTarget, setChatMessageActionFlyoutTarget] = React.useState(undefined);
6903
- const chatActionsEnabled = !disableEditing && message.status !== 'sending' && !!message.mine;
6992
+ const chatActionsEnabled = !disableEditing &&
6993
+ message.status !== 'sending' &&
6994
+ !!message.mine &&
6995
+ /* @conditional-compile-remove(data-loss-prevention) */ message.messageType !== 'blocked';
6904
6996
  const [messageReadBy, setMessageReadBy] = React.useState([]);
6905
6997
  const actionMenuProps = wasInteractionByTouch
6906
6998
  ? undefined
@@ -6911,8 +7003,10 @@ const MessageBubble = (props) => {
6911
7003
  // Force show the action button while the flyout is open (otherwise this will dismiss when the pointer is hovered over the flyout)
6912
7004
  forceShow: chatMessageActionFlyoutTarget === messageActionButtonRef,
6913
7005
  onActionButtonClick: () => {
6914
- props.onActionButtonClick(message, setMessageReadBy);
6915
- setChatMessageActionFlyoutTarget(messageActionButtonRef);
7006
+ if (message.messageType === 'chat') {
7007
+ props.onActionButtonClick(message, setMessageReadBy);
7008
+ setChatMessageActionFlyoutTarget(messageActionButtonRef);
7009
+ }
6916
7010
  },
6917
7011
  theme
6918
7012
  });
@@ -6935,23 +7029,29 @@ const MessageBubble = (props) => {
6935
7029
  locale,
6936
7030
  fileDownloadHandler
6937
7031
  ]);
6938
- const messageContentAriaText = props.message.content
6939
- ? props.message.mine
6940
- ? _formatString(strings.messageContentMineAriaText, {
6941
- message: props.message.content
6942
- })
6943
- : _formatString(strings.messageContentAriaText, {
6944
- author: `${props.message.senderDisplayName}`,
6945
- message: props.message.content
6946
- })
6947
- : undefined;
7032
+ const editedOn = 'editedOn' in message ? message.editedOn : undefined;
7033
+ const getMessageDetails = React.useCallback(() => {
7034
+ if (messageStatus === 'failed') {
7035
+ return React__default['default'].createElement("div", { className: chatMessageFailedTagStyle(theme) }, strings.failToSendTag);
7036
+ }
7037
+ else if (message.messageType === 'chat' && editedOn) {
7038
+ return React__default['default'].createElement("div", { className: chatMessageEditedTagStyle(theme) }, strings.editedTag);
7039
+ }
7040
+ return undefined;
7041
+ }, [editedOn, message.messageType, messageStatus, strings.editedTag, strings.failToSendTag, theme]);
7042
+ const getContent = React.useCallback(() => {
7043
+ /* @conditional-compile-remove(data-loss-prevention) */
7044
+ if (message.messageType === 'blocked') {
7045
+ return (React__default['default'].createElement("div", { tabIndex: 0 },
7046
+ React__default['default'].createElement(BlockedMessageContent, { message: message, strings: strings })));
7047
+ }
7048
+ return (React__default['default'].createElement("div", { tabIndex: 0 },
7049
+ React__default['default'].createElement(ChatMessageContent, { message: message, strings: strings }),
7050
+ props.onRenderFileDownloads ? props.onRenderFileDownloads(userId, message) : defaultOnRenderFileDownloads()));
7051
+ }, [defaultOnRenderFileDownloads, message, props, strings, userId]);
6948
7052
  const chatMessage = (React__default['default'].createElement(React__default['default'].Fragment, null,
6949
7053
  React__default['default'].createElement("div", { ref: messageRef },
6950
- React__default['default'].createElement(reactNorthstar.Chat.Message, { "data-ui-id": "chat-composite-message", className: react.mergeStyles(messageContainerStyle), styles: messageContainerStyle, content: React__default['default'].createElement("div", { tabIndex: 0 },
6951
- React__default['default'].createElement(ChatMessageContent, { message: message, liveAuthorIntro: strings.liveAuthorIntro, messageContentAriaText: messageContentAriaText }),
6952
- props.onRenderFileDownloads
6953
- ? props.onRenderFileDownloads(userId, message)
6954
- : defaultOnRenderFileDownloads()), author: React__default['default'].createElement(reactNorthstar.Text, { className: chatMessageDateStyle }, message.senderDisplayName), mine: message.mine, timestamp: React__default['default'].createElement(reactNorthstar.Text, { "data-ui-id": ids.messageTimestamp }, formattedTimestamp), details: messageStatus === 'failed' ? (React__default['default'].createElement("div", { className: chatMessageFailedTagStyle(theme) }, strings.failToSendTag)) : message.editedOn ? (React__default['default'].createElement("div", { className: chatMessageEditedTagStyle(theme) }, strings.editedTag)) : undefined, positionActionMenu: false, actionMenu: actionMenuProps, onTouchStart: () => setWasInteractionByTouch(true), onPointerDown: () => setWasInteractionByTouch(false), onKeyDown: () => setWasInteractionByTouch(false), onBlur: () => setWasInteractionByTouch(false), onClick: () => {
7054
+ React__default['default'].createElement(reactNorthstar.Chat.Message, { "data-ui-id": "chat-composite-message", className: react.mergeStyles(messageContainerStyle), styles: messageContainerStyle, content: getContent(), author: React__default['default'].createElement(reactNorthstar.Text, { className: chatMessageDateStyle }, message.senderDisplayName), mine: message.mine, timestamp: React__default['default'].createElement(reactNorthstar.Text, { "data-ui-id": ids.messageTimestamp }, formattedTimestamp), details: getMessageDetails(), positionActionMenu: false, actionMenu: actionMenuProps, onTouchStart: () => setWasInteractionByTouch(true), onPointerDown: () => setWasInteractionByTouch(false), onKeyDown: () => setWasInteractionByTouch(false), onBlur: () => setWasInteractionByTouch(false), onClick: () => {
6955
7055
  if (!wasInteractionByTouch) {
6956
7056
  return;
6957
7057
  }
@@ -6961,7 +7061,9 @@ const MessageBubble = (props) => {
6961
7061
  // In doing so here we set the target of the flyout to be the message and
6962
7062
  // not the 3-dot menu button to position the flyout correctly.
6963
7063
  setChatMessageActionFlyoutTarget(messageRef);
6964
- props.onActionButtonClick(message, setMessageReadBy);
7064
+ if (message.messageType === 'chat') {
7065
+ props.onActionButtonClick(message, setMessageReadBy);
7066
+ }
6965
7067
  } })),
6966
7068
  chatActionsEnabled && (React__default['default'].createElement(ChatMessageActionFlyout, { hidden: !chatMessageActionFlyoutTarget, target: chatMessageActionFlyoutTarget, increaseFlyoutItemSize: wasInteractionByTouch, onDismiss: onActionFlyoutDismiss, onEditClick: onEditClick, onRemoveClick: onRemoveClick, onResendClick: onResendClick, strings: strings, messageReadBy: messageReadBy, messageStatus: messageStatus !== null && messageStatus !== void 0 ? messageStatus : 'failed', remoteParticipantsCount: remoteParticipantsCount, onRenderAvatar: onRenderAvatar, showMessageStatus: showMessageStatus }))));
6967
7069
  return chatMessage;
@@ -6971,7 +7073,7 @@ const ChatMessageComponentAsMessageBubble = React__default['default'].memo(Messa
6971
7073
 
6972
7074
  // Copyright (c) Microsoft Corporation.
6973
7075
  // Licensed under the MIT license.
6974
- var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7076
+ var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
6975
7077
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6976
7078
  return new (P || (P = Promise))(function (resolve, reject) {
6977
7079
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -6987,28 +7089,26 @@ const ChatMessageComponent = (props) => {
6987
7089
  const [isEditing, setIsEditing] = React.useState(false);
6988
7090
  const onEditClick = React.useCallback(() => setIsEditing(true), [setIsEditing]);
6989
7091
  const { onDeleteMessage, onSendMessage, message } = props;
7092
+ const clientMessageId = 'clientMessageId' in message ? message.clientMessageId : undefined;
7093
+ const content = 'content' in message ? message.content : undefined;
6990
7094
  const onRemoveClick = React.useCallback(() => {
6991
7095
  if (onDeleteMessage && message.messageId) {
6992
7096
  onDeleteMessage(message.messageId);
6993
7097
  }
6994
7098
  // when fail to send, message does not have message id, delete message using clientmessageid
6995
- else if (onDeleteMessage && message.clientMessageId) {
6996
- onDeleteMessage(message.clientMessageId);
7099
+ else if (onDeleteMessage && message.messageType === 'chat' && clientMessageId) {
7100
+ onDeleteMessage(clientMessageId);
6997
7101
  }
6998
- }, [message.messageId, message.clientMessageId, onDeleteMessage]);
7102
+ }, [onDeleteMessage, message.messageId, message.messageType, clientMessageId]);
6999
7103
  const onResendClick = React.useCallback(() => {
7000
- var _a;
7001
- onDeleteMessage && message.clientMessageId && onDeleteMessage(message.clientMessageId);
7002
- onSendMessage && onSendMessage((_a = message.content) !== null && _a !== void 0 ? _a : '');
7003
- }, [message.clientMessageId, message.content, onSendMessage, onDeleteMessage]);
7004
- if (props.message.messageType !== 'chat') {
7005
- return React__default['default'].createElement(React__default['default'].Fragment, null);
7006
- }
7007
- else if (isEditing) {
7008
- return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$r(void 0, void 0, void 0, function* () {
7104
+ onDeleteMessage && clientMessageId && onDeleteMessage(clientMessageId);
7105
+ onSendMessage && onSendMessage(content !== undefined ? content : '');
7106
+ }, [clientMessageId, content, onSendMessage, onDeleteMessage]);
7107
+ if (isEditing && message.messageType === 'chat') {
7108
+ return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$s(void 0, void 0, void 0, function* () {
7009
7109
  props.onUpdateMessage &&
7010
- props.message.messageId &&
7011
- (yield props.onUpdateMessage(props.message.messageId, text, metadata, options));
7110
+ message.messageId &&
7111
+ (yield props.onUpdateMessage(message.messageId, text, metadata, options));
7012
7112
  setIsEditing(false);
7013
7113
  }), onCancel: () => {
7014
7114
  setIsEditing(false);
@@ -7097,7 +7197,7 @@ const isShortHeight = (containerHeightRem) => containerHeightRem <= _convertRemT
7097
7197
  *
7098
7198
  * if MessageId of B is larger than message Id of A, then B is created after A
7099
7199
  * if the last read message is created after the message A is sent, then user should have read message A as well */
7100
- const getParticipantsWhoHaveReadMessage = (message, readReceiptsBySenderId) => {
7200
+ var getParticipantsWhoHaveReadMessage = (message, readReceiptsBySenderId) => {
7101
7201
  return (Object.entries(readReceiptsBySenderId)
7102
7202
  // Filter to only read receipts that match the message OR the participant has read a different message after this message has been created
7103
7203
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -7111,7 +7211,7 @@ const getParticipantsWhoHaveReadMessage = (message, readReceiptsBySenderId) => {
7111
7211
 
7112
7212
  // Copyright (c) Microsoft Corporation.
7113
7213
  // Licensed under the MIT license.
7114
- var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7214
+ var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7115
7215
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7116
7216
  return new (P || (P = Promise))(function (resolve, reject) {
7117
7217
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -7207,7 +7307,7 @@ const DefaultSystemMessage = (props) => {
7207
7307
  return React__default['default'].createElement(React__default['default'].Fragment, null);
7208
7308
  };
7209
7309
  const memoizeAllMessages = memoizeFnAll((_messageKey, message, showMessageDate, showMessageStatus, onRenderAvatar, shouldOverlapAvatarAndMessage, styles, onRenderMessageStatus, defaultStatusRenderer, defaultChatMessageRenderer, strings, theme, _attached, statusToRender, participantCount, readCount, onRenderMessage, onUpdateMessage, onDeleteMessage, onSendMessage, disableEditing) => {
7210
- var _a, _b, _c, _d, _e, _f, _g;
7310
+ var _a, _b, _c, _d, _e, _f, _g, _h;
7211
7311
  const messageProps = {
7212
7312
  message,
7213
7313
  strings,
@@ -7217,40 +7317,54 @@ const memoizeAllMessages = memoizeFnAll((_messageKey, message, showMessageDate,
7217
7317
  onSendMessage,
7218
7318
  disableEditing
7219
7319
  };
7320
+ const chatMessageItemProps = (message, messageProps) => {
7321
+ var _a, _b, _c;
7322
+ const chatMessageComponent = onRenderMessage === undefined
7323
+ ? defaultChatMessageRenderer(messageProps)
7324
+ : onRenderMessage(messageProps, defaultChatMessageRenderer);
7325
+ const personaOptions = {
7326
+ hidePersonaDetails: true,
7327
+ size: react.PersonaSize.size32,
7328
+ text: message.senderDisplayName,
7329
+ showOverflowTooltip: false
7330
+ };
7331
+ const chatItemMessageStyle = (message.mine ? styles === null || styles === void 0 ? void 0 : styles.myChatItemMessageContainer : styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) ||
7332
+ defaultChatItemMessageContainer(shouldOverlapAvatarAndMessage);
7333
+ const chatGutterStyles = message.attached === 'top' || message.attached === false ? gutterWithAvatar : gutterWithHiddenAvatar;
7334
+ return {
7335
+ gutter: {
7336
+ styles: chatGutterStyles,
7337
+ content: message.mine ? ('') : onRenderAvatar ? (onRenderAvatar((_a = message.senderId) !== null && _a !== void 0 ? _a : '', personaOptions)) : (React__default['default'].createElement(react.Persona, Object.assign({}, personaOptions)))
7338
+ },
7339
+ contentPosition: message.mine ? 'end' : 'start',
7340
+ message: {
7341
+ styles: chatItemMessageStyle,
7342
+ content: (React__default['default'].createElement(reactNorthstar.Flex, { hAlign: message.mine ? 'end' : undefined, vAlign: "end" },
7343
+ chatMessageComponent,
7344
+ React__default['default'].createElement("div", { className: react.mergeStyles(messageStatusContainerStyle((_b = message.mine) !== null && _b !== void 0 ? _b : false), (styles === null || styles === void 0 ? void 0 : styles.messageStatusContainer) ? styles.messageStatusContainer((_c = message.mine) !== null && _c !== void 0 ? _c : false) : '') }, showMessageStatus && statusToRender ? (onRenderMessageStatus ? (onRenderMessageStatus({ status: statusToRender })) : (defaultStatusRenderer(message, statusToRender, participantCount !== null && participantCount !== void 0 ? participantCount : 0, readCount !== null && readCount !== void 0 ? readCount : 0))) : (React__default['default'].createElement("div", { className: react.mergeStyles(noMessageStatusStyle) })))))
7345
+ },
7346
+ attached: message.attached,
7347
+ key: _messageKey
7348
+ };
7349
+ };
7350
+ /* @conditional-compile-remove(data-loss-prevention) */
7351
+ // Similar logic as switch statement case 'chat', if statement for conditional compile (merge logic to switch case when stablize)
7352
+ if (message.messageType === 'blocked') {
7353
+ const myChatMessageStyle = message.status === 'failed'
7354
+ ? (_b = (_a = styles === null || styles === void 0 ? void 0 : styles.failedMyChatMessageContainer) !== null && _a !== void 0 ? _a : styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _b !== void 0 ? _b : FailedMyChatMessageContainer
7355
+ : (_c = styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _c !== void 0 ? _c : defaultBlockedMessageStyleContainer(theme);
7356
+ const blockedMessageStyle = (_d = styles === null || styles === void 0 ? void 0 : styles.blockedMessageContainer) !== null && _d !== void 0 ? _d : defaultBlockedMessageStyleContainer(theme);
7357
+ messageProps.messageContainerStyle = message.mine ? myChatMessageStyle : blockedMessageStyle;
7358
+ return chatMessageItemProps(message, messageProps);
7359
+ }
7220
7360
  switch (message.messageType) {
7221
7361
  case 'chat': {
7222
7362
  const myChatMessageStyle = message.status === 'failed'
7223
- ? (_b = (_a = styles === null || styles === void 0 ? void 0 : styles.failedMyChatMessageContainer) !== null && _a !== void 0 ? _a : styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _b !== void 0 ? _b : FailedMyChatMessageContainer
7224
- : (_c = styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _c !== void 0 ? _c : defaultMyChatMessageContainer;
7225
- const chatMessageStyle = (_d = styles === null || styles === void 0 ? void 0 : styles.chatMessageContainer) !== null && _d !== void 0 ? _d : defaultChatMessageContainer(theme);
7363
+ ? (_f = (_e = styles === null || styles === void 0 ? void 0 : styles.failedMyChatMessageContainer) !== null && _e !== void 0 ? _e : styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _f !== void 0 ? _f : FailedMyChatMessageContainer
7364
+ : (_g = styles === null || styles === void 0 ? void 0 : styles.myChatMessageContainer) !== null && _g !== void 0 ? _g : defaultMyChatMessageContainer;
7365
+ const chatMessageStyle = (_h = styles === null || styles === void 0 ? void 0 : styles.chatMessageContainer) !== null && _h !== void 0 ? _h : defaultChatMessageContainer(theme);
7226
7366
  messageProps.messageContainerStyle = message.mine ? myChatMessageStyle : chatMessageStyle;
7227
- const chatMessageComponent = onRenderMessage === undefined
7228
- ? defaultChatMessageRenderer(messageProps)
7229
- : onRenderMessage(messageProps, defaultChatMessageRenderer);
7230
- const personaOptions = {
7231
- hidePersonaDetails: true,
7232
- size: react.PersonaSize.size32,
7233
- text: message.senderDisplayName,
7234
- showOverflowTooltip: false
7235
- };
7236
- const chatItemMessageStyle = (message.mine ? styles === null || styles === void 0 ? void 0 : styles.myChatItemMessageContainer : styles === null || styles === void 0 ? void 0 : styles.chatItemMessageContainer) ||
7237
- defaultChatItemMessageContainer(shouldOverlapAvatarAndMessage);
7238
- const chatGutterStyles = message.attached === 'top' || message.attached === false ? gutterWithAvatar : gutterWithHiddenAvatar;
7239
- return {
7240
- gutter: {
7241
- styles: chatGutterStyles,
7242
- content: message.mine ? ('') : onRenderAvatar ? (onRenderAvatar((_e = message.senderId) !== null && _e !== void 0 ? _e : '', personaOptions)) : (React__default['default'].createElement(react.Persona, Object.assign({}, personaOptions)))
7243
- },
7244
- contentPosition: message.mine ? 'end' : 'start',
7245
- message: {
7246
- styles: chatItemMessageStyle,
7247
- content: (React__default['default'].createElement(reactNorthstar.Flex, { hAlign: message.mine ? 'end' : undefined, vAlign: "end" },
7248
- chatMessageComponent,
7249
- React__default['default'].createElement("div", { className: react.mergeStyles(messageStatusContainerStyle((_f = message.mine) !== null && _f !== void 0 ? _f : false), (styles === null || styles === void 0 ? void 0 : styles.messageStatusContainer) ? styles.messageStatusContainer((_g = message.mine) !== null && _g !== void 0 ? _g : false) : '') }, showMessageStatus && statusToRender ? (onRenderMessageStatus ? (onRenderMessageStatus({ status: statusToRender })) : (defaultStatusRenderer(message, statusToRender, participantCount !== null && participantCount !== void 0 ? participantCount : 0, readCount !== null && readCount !== void 0 ? readCount : 0))) : (React__default['default'].createElement("div", { className: react.mergeStyles(noMessageStatusStyle) })))))
7250
- },
7251
- attached: message.attached,
7252
- key: _messageKey
7253
- };
7367
+ return chatMessageItemProps(message, messageProps);
7254
7368
  }
7255
7369
  case 'system': {
7256
7370
  messageProps.messageContainerStyle = styles === null || styles === void 0 ? void 0 : styles.systemMessageContainer;
@@ -7346,7 +7460,7 @@ const MessageThread = (props) => {
7346
7460
  setChatMessagesInitialized(chatMessagesInitialized);
7347
7461
  };
7348
7462
  // we try to only send those message status if user is scrolled to the bottom.
7349
- const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$q(void 0, void 0, void 0, function* () {
7463
+ const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$r(void 0, void 0, void 0, function* () {
7350
7464
  if (!isAtBottomOfScrollRef.current ||
7351
7465
  !document.hasFocus() ||
7352
7466
  !messagesRef.current ||
@@ -7397,7 +7511,7 @@ const MessageThread = (props) => {
7397
7511
  setIsAtBottomOfScrollRef(atBottom);
7398
7512
  }, [scrollToBottom, sendMessageStatusIfAtBottom]);
7399
7513
  // Infinite scrolling + threadInitialize function
7400
- const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$q(void 0, void 0, void 0, function* () {
7514
+ const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$r(void 0, void 0, void 0, function* () {
7401
7515
  if (!isLoadingChatMessagesRef.current) {
7402
7516
  if (onLoadPreviousChatMessages) {
7403
7517
  isLoadingChatMessagesRef.current = true;
@@ -7515,7 +7629,8 @@ const MessageThread = (props) => {
7515
7629
  const strings = React.useMemo(() => (Object.assign(Object.assign({}, localeStrings), props.strings)), [localeStrings, props.strings]);
7516
7630
  // To rerender the defaultChatMessageRenderer if app running across days(every new day chat time stamp need to be regenerated)
7517
7631
  const defaultChatMessageRenderer = React.useCallback((messageProps) => {
7518
- if (messageProps.message.messageType === 'chat') {
7632
+ if (messageProps.message.messageType === 'chat' ||
7633
+ /* @conditional-compile-remove(data-loss-prevention) */ messageProps.message.messageType === 'blocked') {
7519
7634
  return (React__default['default'].createElement(ChatMessageComponent, Object.assign({}, messageProps, { onRenderFileDownloads: onRenderFileDownloads,
7520
7635
  /* @conditional-compile-remove(file-sharing) */
7521
7636
  strings: strings, message: messageProps.message, userId: props.userId, remoteParticipantsCount: participantCount ? participantCount - 1 : 0, inlineAcceptRejectEditButtons: !isNarrow, onRenderAvatar: onRenderAvatar, showMessageStatus: showMessageStatus, messageStatus: messageProps.message.status, onActionButtonClick: onActionButtonClickMemo,
@@ -7554,8 +7669,9 @@ const MessageThread = (props) => {
7554
7669
  return messages.map((message, index) => {
7555
7670
  let key = message.messageId;
7556
7671
  let statusToRender = undefined;
7557
- if (message.messageType === 'chat') {
7558
- if (!message.messageId || message.messageId === '') {
7672
+ if (message.messageType === 'chat' ||
7673
+ /* @conditional-compile-remove(data-loss-prevention) */ message.messageType === 'blocked') {
7674
+ if ((!message.messageId || message.messageId === '') && 'clientMessageId' in message) {
7559
7675
  key = message.clientMessageId;
7560
7676
  }
7561
7677
  if (showMessageStatus && message.mine) {
@@ -7581,7 +7697,10 @@ const MessageThread = (props) => {
7581
7697
  return memoizedMessageFn(key !== null && key !== void 0 ? key : 'id_' + index, message, showMessageDate, showMessageStatus, onRenderAvatar, isNarrow, styles, onRenderMessageStatus, defaultStatusRenderer, defaultChatMessageRenderer, strings, theme,
7582
7698
  // Temporary solution to make sure we re-render if attach attribute is changed.
7583
7699
  // The proper fix should be in selector.
7584
- message.messageType === 'chat' ? message.attached : undefined, statusToRender, participantCount, readCountForHoveredIndicator, onRenderMessage, onUpdateMessage, onDeleteMessage, onSendMessage, props.disableEditing);
7700
+ message.messageType === 'chat' ||
7701
+ /* @conditional-compile-remove(data-loss-prevention) */ message.messageType === 'blocked'
7702
+ ? message.attached
7703
+ : undefined, statusToRender, participantCount, readCountForHoveredIndicator, onRenderMessage, onUpdateMessage, onDeleteMessage, onSendMessage, props.disableEditing);
7585
7704
  });
7586
7705
  }), [
7587
7706
  messages,
@@ -11718,7 +11837,7 @@ const DevicesButton = (props) => {
11718
11837
 
11719
11838
  // Copyright (c) Microsoft Corporation.
11720
11839
  // Licensed under the MIT license.
11721
- var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
11840
+ var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
11722
11841
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11723
11842
  return new (P || (P = Promise))(function (resolve, reject) {
11724
11843
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -11756,7 +11875,7 @@ const CameraButton = (props) => {
11756
11875
  const toggleAnnouncerString = React.useCallback((isCameraOn) => {
11757
11876
  setAnnouncerString(!isCameraOn ? strings.cameraActionTurnedOffAnnouncement : strings.cameraActionTurnedOnAnnouncement);
11758
11877
  }, [strings.cameraActionTurnedOffAnnouncement, strings.cameraActionTurnedOnAnnouncement]);
11759
- const onToggleClick = React.useCallback(() => __awaiter$p(void 0, void 0, void 0, function* () {
11878
+ const onToggleClick = React.useCallback(() => __awaiter$q(void 0, void 0, void 0, function* () {
11760
11879
  // Throttle click on camera, need to await onToggleCamera then allow another click
11761
11880
  if (onToggleCamera) {
11762
11881
  setWaitForCamera(true);
@@ -11921,7 +12040,7 @@ const lightThemeCallButtonStyles = {
11921
12040
 
11922
12041
  // Copyright (c) Microsoft Corporation.
11923
12042
  // Licensed under the MIT license.
11924
- var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
12043
+ var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
11925
12044
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11926
12045
  return new (P || (P = Promise))(function (resolve, reject) {
11927
12046
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -11962,7 +12081,7 @@ const MicrophoneButton = (props) => {
11962
12081
  const toggleAnnouncerString = React.useCallback((isMicOn) => {
11963
12082
  setAnnouncerString(!isMicOn ? strings.microphoneActionTurnedOffAnnouncement : strings.microphoneActionTurnedOnAnnouncement);
11964
12083
  }, [strings.microphoneActionTurnedOffAnnouncement, strings.microphoneActionTurnedOnAnnouncement]);
11965
- const onToggleClick = React.useCallback(() => __awaiter$o(void 0, void 0, void 0, function* () {
12084
+ const onToggleClick = React.useCallback(() => __awaiter$p(void 0, void 0, void 0, function* () {
11966
12085
  if (onToggleMicrophone) {
11967
12086
  try {
11968
12087
  yield onToggleMicrophone();
@@ -12850,7 +12969,7 @@ const formatPhoneNumber = (phoneNumber) => {
12850
12969
 
12851
12970
  // Copyright (c) Microsoft Corporation.
12852
12971
  // Licensed under the MIT license.
12853
- var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
12972
+ var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
12854
12973
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12855
12974
  return new (P || (P = Promise))(function (resolve, reject) {
12856
12975
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -12892,10 +13011,10 @@ const DialpadButton = (props) => {
12892
13011
  const theme = react.useTheme();
12893
13012
  const { digit, index, onClick, onLongPress, isMobile = false } = props;
12894
13013
  const useLongPressProps = React__default['default'].useMemo(() => ({
12895
- onClick: () => __awaiter$n(void 0, void 0, void 0, function* () {
13014
+ onClick: () => __awaiter$o(void 0, void 0, void 0, function* () {
12896
13015
  onClick(digit, index);
12897
13016
  }),
12898
- onLongPress: () => __awaiter$n(void 0, void 0, void 0, function* () {
13017
+ onLongPress: () => __awaiter$o(void 0, void 0, void 0, function* () {
12899
13018
  onLongPress(digit, index);
12900
13019
  }),
12901
13020
  touchEventsOnly: isMobile
@@ -13280,6 +13399,121 @@ const _DevicePermissionDropdown = (props) => {
13280
13399
  }, options: options !== null && options !== void 0 ? options : [], styles: styles }));
13281
13400
  };
13282
13401
 
13402
+ // Copyright (c) Microsoft Corporation.
13403
+ /**
13404
+ * A component for displaying a Video Background Effect Option.
13405
+ *
13406
+ * @internal
13407
+ */
13408
+ const _VideoEffectsItem = (props) => {
13409
+ var _a, _b, _c, _d, _e, _f;
13410
+ const theme = react.useTheme();
13411
+ const isSelected = (_a = props.isSelected) !== null && _a !== void 0 ? _a : false;
13412
+ const disabled = (_b = props.disabled) !== null && _b !== void 0 ? _b : false;
13413
+ const backgroundImage = (_c = props.backgroundProps) === null || _c === void 0 ? void 0 : _c.url;
13414
+ const containerStyles = React.useCallback(() => videoEffectsItemContainerStyles({
13415
+ theme,
13416
+ isSelected,
13417
+ disabled,
13418
+ backgroundImage,
13419
+ backgroundPosition,
13420
+ backgroundSize
13421
+ }), [backgroundImage, disabled, isSelected, theme]);
13422
+ return (React__default['default'].createElement(react.TooltipHost, Object.assign({}, props.tooltipProps),
13423
+ React__default['default'].createElement(react.Stack, { key: props.key, className: react.mergeStyles((_d = props.styles) === null || _d === void 0 ? void 0 : _d.root), verticalAlign: "center", horizontalAlign: "center", styles: containerStyles, onClick: disabled ? undefined : () => { var _a; return (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, props.key); }, onKeyDown: disabled
13424
+ ? undefined
13425
+ : (e) => {
13426
+ var _a;
13427
+ if (e.key === 'Enter' || e.key === ' ') {
13428
+ (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, props.key);
13429
+ }
13430
+ }, tabIndex: props.disabled ? -1 : 0, "aria-label": props.ariaLabel, "aria-disabled": props.disabled, role: "button" },
13431
+ props.iconProps && (React__default['default'].createElement(react.Stack.Item, { styles: { root: (_e = props.styles) === null || _e === void 0 ? void 0 : _e.iconContainer } },
13432
+ React__default['default'].createElement(react.Icon, Object.assign({}, props.iconProps)))),
13433
+ props.title && (React__default['default'].createElement(react.Stack.Item, { styles: { root: (_f = props.styles) === null || _f === void 0 ? void 0 : _f.textContainer } },
13434
+ React__default['default'].createElement(react.Text, { variant: "small" }, props.title))))));
13435
+ };
13436
+ const backgroundPosition = 'center';
13437
+ const backgroundSize = 'cover';
13438
+ const videoEffectsItemContainerStyles = (args) => {
13439
+ const borderDefaultThickness = '1px';
13440
+ const borderActiveThickness = '2px';
13441
+ return {
13442
+ root: {
13443
+ background: args.disabled ? args.theme.palette.neutralQuaternaryAlt : undefined,
13444
+ backgroundImage: args.backgroundImage ? `url(${args.backgroundImage})` : undefined,
13445
+ backgroundPosition: args.backgroundPosition,
13446
+ backgroundSize: args.backgroundSize,
13447
+ borderRadius: '0.25rem',
13448
+ color: args.theme.palette.neutralPrimary,
13449
+ cursor: args.disabled ? 'default' : 'pointer',
13450
+ height: '3.375rem',
13451
+ position: 'relative',
13452
+ width: '4.83rem',
13453
+ // Use :after to display a border element. This is used to prevent the background image
13454
+ // resizing when the border thichkness is changed. We also want the border to be inside
13455
+ // the frame of the container, i.e. we want it to expand inwards and not outwards when
13456
+ // border thickness changes from hover/selection.
13457
+ ':after': {
13458
+ content: '""',
13459
+ position: 'absolute',
13460
+ boxSizing: 'border-box',
13461
+ border: args.isSelected
13462
+ ? `${borderActiveThickness} solid ${args.theme.palette.themePrimary}`
13463
+ : `${borderDefaultThickness} solid ${args.theme.palette.neutralQuaternaryAlt}`,
13464
+ height: '100%',
13465
+ width: '100%',
13466
+ borderRadius: '0.25rem'
13467
+ },
13468
+ ':hover': {
13469
+ ':after': {
13470
+ border: args.disabled && !args.isSelected
13471
+ ? `${borderDefaultThickness} solid ${args.theme.palette.neutralQuaternaryAlt}`
13472
+ : `${borderActiveThickness} solid ${args.theme.palette.themePrimary}`
13473
+ }
13474
+ }
13475
+ }
13476
+ };
13477
+ };
13478
+
13479
+ // Copyright (c) Microsoft Corporation.
13480
+ /**
13481
+ * Picker for choosing a Video Background Effect.
13482
+ *
13483
+ * @remarks
13484
+ * This functions similar to a radio group of buttons, where the user can select one of the options.
13485
+ *
13486
+ * @internal
13487
+ */
13488
+ const _VideoBackgroundEffectsPicker = (props) => {
13489
+ var _a, _b, _c;
13490
+ const [componentControlledSelectedEffectKey, setComponentControlledSelectedEffectKey] = React__default['default'].useState(props.defaultSelectedEffectKey);
13491
+ // Warn the developer if they use the component in an incorrect controlled way.
13492
+ reactHooks.useWarnings({
13493
+ name: 'VideoBackgroundEffectsPicker',
13494
+ props,
13495
+ controlledUsage: {
13496
+ onChangeProp: 'onChange',
13497
+ valueProp: 'selectedEffectKey',
13498
+ defaultValueProp: 'defaultSelectedEffectKey'
13499
+ }
13500
+ });
13501
+ const selectedEffect = (_a = props.selectedEffectKey) !== null && _a !== void 0 ? _a : componentControlledSelectedEffectKey;
13502
+ const setSelectedEffect = (selectedEffectKey) => {
13503
+ var _a;
13504
+ setComponentControlledSelectedEffectKey(selectedEffectKey);
13505
+ (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, selectedEffectKey);
13506
+ };
13507
+ const convertedOptions = props.options.map((option) => (Object.assign({ isSelected: option.key === selectedEffect, onSelect: () => setSelectedEffect(option.key) }, option)));
13508
+ const optionsByRow = props.itemsPerRow === 'wrap' ? [convertedOptions] : chunk(convertedOptions, (_b = props.itemsPerRow) !== null && _b !== void 0 ? _b : 3);
13509
+ return (React__default['default'].createElement(react.Stack, { tokens: { childrenGap: '0.5rem' } },
13510
+ React__default['default'].createElement(react.Label, { className: react.mergeStyles((_c = props.styles) === null || _c === void 0 ? void 0 : _c.label) }, props.label),
13511
+ optionsByRow.map((options, rowIndex) => {
13512
+ var _a;
13513
+ return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles((_a = props.styles) === null || _a === void 0 ? void 0 : _a.rowRoot), wrap: props.itemsPerRow === 'wrap', horizontal: true, key: rowIndex, tokens: { childrenGap: '0.5rem' } }, options.map((option) => (React__default['default'].createElement(_VideoEffectsItem, Object.assign({}, option, { key: option.key }))))));
13514
+ })));
13515
+ };
13516
+
13283
13517
  // Copyright (c) Microsoft Corporation.
13284
13518
  /**
13285
13519
  * @private
@@ -13852,7 +14086,7 @@ const findConditionalCompiledSelector = (component) => {
13852
14086
 
13853
14087
  // Copyright (c) Microsoft Corporation.
13854
14088
  // Licensed under the MIT license.
13855
- var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14089
+ var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
13856
14090
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13857
14091
  return new (P || (P = Promise))(function (resolve, reject) {
13858
14092
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -13875,35 +14109,35 @@ const createDefaultChatHandlers = memoizeOne__default['default']((chatClient, ch
13875
14109
  let messageIterator = undefined;
13876
14110
  let readReceiptIterator = undefined;
13877
14111
  return {
13878
- onSendMessage: (content, options) => __awaiter$m(void 0, void 0, void 0, function* () {
14112
+ onSendMessage: (content, options) => __awaiter$n(void 0, void 0, void 0, function* () {
13879
14113
  const sendMessageRequest = {
13880
14114
  content,
13881
14115
  senderDisplayName: chatClient.getState().displayName
13882
14116
  };
13883
14117
  yield chatThreadClient.sendMessage(sendMessageRequest, options);
13884
14118
  }),
13885
- onUpdateMessage: (messageId, content, metadata, options) => __awaiter$m(void 0, void 0, void 0, function* () {
14119
+ onUpdateMessage: (messageId, content, metadata, options) => __awaiter$n(void 0, void 0, void 0, function* () {
13886
14120
  const updatedMetadata = metadata ? Object.assign({}, metadata) : {};
13887
14121
  updatedMetadata['fileSharingMetadata'] = JSON.stringify((options === null || options === void 0 ? void 0 : options.attachedFilesMetadata) || []);
13888
14122
  yield chatThreadClient.updateMessage(messageId, { content, metadata: updatedMetadata });
13889
14123
  }),
13890
- onDeleteMessage: (messageId) => __awaiter$m(void 0, void 0, void 0, function* () {
14124
+ onDeleteMessage: (messageId) => __awaiter$n(void 0, void 0, void 0, function* () {
13891
14125
  yield chatThreadClient.deleteMessage(messageId);
13892
14126
  }),
13893
14127
  // This handler is designed for chatThread to consume
13894
- onMessageSeen: (chatMessageId) => __awaiter$m(void 0, void 0, void 0, function* () {
14128
+ onMessageSeen: (chatMessageId) => __awaiter$n(void 0, void 0, void 0, function* () {
13895
14129
  yield chatThreadClient.sendReadReceipt({ chatMessageId });
13896
14130
  }),
13897
- onTyping: () => __awaiter$m(void 0, void 0, void 0, function* () {
14131
+ onTyping: () => __awaiter$n(void 0, void 0, void 0, function* () {
13898
14132
  yield chatThreadClient.sendTypingNotification();
13899
14133
  }),
13900
- onRemoveParticipant: (userId) => __awaiter$m(void 0, void 0, void 0, function* () {
14134
+ onRemoveParticipant: (userId) => __awaiter$n(void 0, void 0, void 0, function* () {
13901
14135
  yield chatThreadClient.removeParticipant(fromFlatCommunicationIdentifier(userId));
13902
14136
  }),
13903
- updateThreadTopicName: (topicName) => __awaiter$m(void 0, void 0, void 0, function* () {
14137
+ updateThreadTopicName: (topicName) => __awaiter$n(void 0, void 0, void 0, function* () {
13904
14138
  yield chatThreadClient.updateTopic(topicName);
13905
14139
  }),
13906
- onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$m(void 0, void 0, void 0, function* () {
14140
+ onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$n(void 0, void 0, void 0, function* () {
13907
14141
  var _a, _b, _c;
13908
14142
  if (messageIterator === undefined) {
13909
14143
  // Lazy definition so that errors in the method call are reported correctly.
@@ -14153,6 +14387,10 @@ const PARTICIPANTS_THRESHOLD = 20;
14153
14387
  * @private
14154
14388
  */
14155
14389
  const MINUTE_IN_MS = 1000 * 60;
14390
+ /**
14391
+ * @private
14392
+ */
14393
+ const DEFAULT_DATA_LOSS_PREVENTION_POLICY_URL = 'https://go.microsoft.com/fwlink/?LinkId=2132837';
14156
14394
  /**
14157
14395
  * @private
14158
14396
  *
@@ -14197,39 +14435,49 @@ const updateMessagesWithAttached = (chatMessagesWithStatus) => {
14197
14435
  chatMessagesWithStatus.sort(compareMessages);
14198
14436
  chatMessagesWithStatus.forEach((message, index, messages) => {
14199
14437
  var _a, _b;
14200
- if (message.messageType !== 'chat') {
14201
- return;
14202
- }
14203
- /**
14204
- * Attached === true means it is within a group of messages in the current order
14205
- * Attached === top/bottom means it is on the top/bottom boundary
14206
- * Attached === false means it is just a single message
14207
- * A group of messages: continuous messages that belong to the same sender and not intercepted by other senders.
14208
- */
14209
- let attached = false;
14210
- const previousMessage = index > 0 ? messages[index - 1] : undefined;
14211
- const nextMessage = index === messages.length - 1 ? undefined : messages[index + 1];
14212
- const previousSenderId = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.messageType) === 'chat' ? previousMessage.senderId : undefined;
14213
- const nextSenderId = (nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.messageType) === 'chat' ? nextMessage.senderId : undefined;
14214
- const timediff = new Date((_a = message === null || message === void 0 ? void 0 : message.createdOn) !== null && _a !== void 0 ? _a : '').getTime() - new Date((_b = previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.createdOn) !== null && _b !== void 0 ? _b : '').getTime();
14215
- const diffMins = Math.round(timediff / MINUTE_IN_MS); // minutes
14216
- if (previousSenderId !== message.senderId) {
14217
- attached = message.senderId === nextSenderId ? 'top' : false;
14218
- }
14219
- else if (diffMins && diffMins >= 5) {
14220
- // if there are more than or equal to 5 mins time gap between messages do not attach and show time stamp
14221
- attached = false;
14222
- }
14223
- else {
14224
- attached = message.senderId === nextSenderId ? true : 'bottom';
14438
+ if (message.messageType === 'chat' ||
14439
+ /* @conditional-compile-remove(data-loss-prevention) */ message.messageType === 'blocked') {
14440
+ /**
14441
+ * Attached === true means it is within a group of messages in the current order
14442
+ * Attached === top/bottom means it is on the top/bottom boundary
14443
+ * Attached === false means it is just a single message
14444
+ * A group of messages: continuous messages that belong to the same sender and not intercepted by other senders.
14445
+ */
14446
+ let attached = false;
14447
+ const previousMessage = index > 0 ? messages[index - 1] : undefined;
14448
+ const nextMessage = index === messages.length - 1 ? undefined : messages[index + 1];
14449
+ const previousSenderId = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.messageType) === 'chat' ||
14450
+ /* @conditional-compile-remove(data-loss-prevention) */ (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.messageType) === 'blocked'
14451
+ ? previousMessage.senderId
14452
+ : undefined;
14453
+ const nextSenderId = (nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.messageType) === 'chat' ||
14454
+ /* @conditional-compile-remove(data-loss-prevention) */ (nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.messageType) === 'blocked'
14455
+ ? nextMessage.senderId
14456
+ : undefined;
14457
+ const timediff = new Date((_a = message === null || message === void 0 ? void 0 : message.createdOn) !== null && _a !== void 0 ? _a : '').getTime() - new Date((_b = previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.createdOn) !== null && _b !== void 0 ? _b : '').getTime();
14458
+ const diffMins = Math.round(timediff / MINUTE_IN_MS); // minutes
14459
+ if (previousSenderId !== message.senderId) {
14460
+ attached = message.senderId === nextSenderId ? 'top' : false;
14461
+ }
14462
+ else if (diffMins && diffMins >= 5) {
14463
+ // if there are more than or equal to 5 mins time gap between messages do not attach and show time stamp
14464
+ attached = false;
14465
+ }
14466
+ else {
14467
+ attached = message.senderId === nextSenderId ? true : 'bottom';
14468
+ }
14469
+ message.attached = attached;
14225
14470
  }
14226
- message.attached = attached;
14227
14471
  });
14228
14472
  };
14229
14473
 
14230
14474
  // Copyright (c) Microsoft Corporation.
14231
14475
  const memoizedAllConvertChatMessage = memoizeFnAll((_key, chatMessage, userId, isSeen, isLargeGroup) => {
14232
14476
  const messageType = chatMessage.type.toLowerCase();
14477
+ /* @conditional-compile-remove(data-loss-prevention) */
14478
+ if (chatMessage.policyViolation) {
14479
+ return convertToUiBlockedMessage(chatMessage, userId, isSeen, isLargeGroup);
14480
+ }
14233
14481
  if (messageType === ACSKnownMessageType.text ||
14234
14482
  messageType === ACSKnownMessageType.richtextHtml ||
14235
14483
  messageType === ACSKnownMessageType.html) {
@@ -14253,6 +14501,23 @@ const extractAttachedFilesMetadata = (metadata) => {
14253
14501
  return [];
14254
14502
  }
14255
14503
  };
14504
+ /* @conditional-compile-remove(data-loss-prevention) */
14505
+ const convertToUiBlockedMessage = (message, userId, isSeen, isLargeGroup) => {
14506
+ var _a;
14507
+ const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;
14508
+ return {
14509
+ messageType: 'blocked',
14510
+ createdOn: message.createdOn,
14511
+ warningText: (_a = message.content) === null || _a === void 0 ? void 0 : _a.message,
14512
+ status: !isLargeGroup && message.status === 'delivered' && isSeen ? 'seen' : message.status,
14513
+ senderDisplayName: message.senderDisplayName,
14514
+ senderId: messageSenderId,
14515
+ messageId: message.id,
14516
+ deletedOn: message.deletedOn,
14517
+ mine: messageSenderId === userId,
14518
+ link: DEFAULT_DATA_LOSS_PREVENTION_POLICY_URL
14519
+ };
14520
+ };
14256
14521
  const convertToUiChatMessage = (message, userId, isSeen, isLargeGroup) => {
14257
14522
  var _a;
14258
14523
  const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;
@@ -14341,7 +14606,7 @@ const messageThreadSelector = reselect.createSelector([getUserId, getChatMessage
14341
14606
  // TODO: Add support for topicUpdated system messages in MessageThread component.
14342
14607
  // message.type === ACSKnownMessageType.topicUpdated ||
14343
14608
  message.clientMessageId !== undefined)
14344
- .filter(messagesWithContentOrFileSharingMetadata)
14609
+ .filter(isMessageValidToRender)
14345
14610
  .map((message) => {
14346
14611
  var _a;
14347
14612
  return memoizedFn((_a = message.id) !== null && _a !== void 0 ? _a : message.clientMessageId, message, userId, message.createdOn <= latestReadTime, isLargeGroup);
@@ -14361,7 +14626,7 @@ const sanitizedMessageContentType = (type) => {
14361
14626
  ? lowerCaseType
14362
14627
  : 'unknown';
14363
14628
  };
14364
- const messagesWithContentOrFileSharingMetadata = (message) => {
14629
+ const isMessageValidToRender = (message) => {
14365
14630
  var _a, _b;
14366
14631
  if (message.deletedOn) {
14367
14632
  return false;
@@ -14369,6 +14634,10 @@ const messagesWithContentOrFileSharingMetadata = (message) => {
14369
14634
  if ((_a = message.metadata) === null || _a === void 0 ? void 0 : _a['fileSharingMetadata']) {
14370
14635
  return true;
14371
14636
  }
14637
+ /* @conditional-compile-remove(data-loss-prevention) */
14638
+ if (message.policyViolation) {
14639
+ return true;
14640
+ }
14372
14641
  return !!(message.content && ((_b = message.content) === null || _b === void 0 ? void 0 : _b.message) !== '');
14373
14642
  };
14374
14643
 
@@ -14640,7 +14909,7 @@ const chatStatefulLogger = logger.createClientLogger('communication-react:chat-s
14640
14909
 
14641
14910
  // Copyright (c) Microsoft Corporation.
14642
14911
  // Licensed under the MIT license.
14643
- var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14912
+ var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
14644
14913
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14645
14914
  return new (P || (P = Promise))(function (resolve, reject) {
14646
14915
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -14915,7 +15184,7 @@ class ChatContext$1 {
14915
15184
  * @throws ChatError. Exceptions thrown from `f` are tagged with the failed `target.
14916
15185
  */
14917
15186
  withAsyncErrorTeedToState(f, target) {
14918
- return (...args) => __awaiter$l(this, void 0, void 0, function* () {
15187
+ return (...args) => __awaiter$m(this, void 0, void 0, function* () {
14919
15188
  try {
14920
15189
  return yield f(...args);
14921
15190
  }
@@ -15017,12 +15286,17 @@ const toChatError = (target, error) => {
15017
15286
  * @private
15018
15287
  */
15019
15288
  const convertChatMessage = (message, status = 'delivered', clientMessageId) => {
15020
- return Object.assign(Object.assign({}, message), { clientMessageId: clientMessageId, status });
15289
+ var _a, _b;
15290
+ return Object.assign(Object.assign({}, message), { clientMessageId: clientMessageId, status,
15291
+ /* @conditional-compile-remove(data-loss-prevention) */
15292
+ policyViolation: !!(((_a = message.sender) === null || _a === void 0 ? void 0 : _a.kind) === 'microsoftTeamsUser' &&
15293
+ !!message.editedOn &&
15294
+ ((_b = message.content) === null || _b === void 0 ? void 0 : _b.message) === '') });
15021
15295
  };
15022
15296
 
15023
15297
  // Copyright (c) Microsoft Corporation.
15024
15298
  // Licensed under the MIT license.
15025
- var __awaiter$k = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15299
+ var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15026
15300
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15027
15301
  return new (P || (P = Promise))(function (resolve, reject) {
15028
15302
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15107,7 +15381,7 @@ class EventSubscriber {
15107
15381
  };
15108
15382
  // This is a temporary fix that no participant message is received for onChatMessageReceived event, which should be handled by JS SDK.
15109
15383
  // Without the temporary fix, there are missing 'participant joined' and 'participant left' system messages in the chat thread.
15110
- this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$k(this, void 0, void 0, function* () {
15384
+ this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$l(this, void 0, void 0, function* () {
15111
15385
  var e_1, _a;
15112
15386
  try {
15113
15387
  for (var _b = __asyncValues$1(this.chatClient
@@ -15199,7 +15473,7 @@ class EventSubscriber {
15199
15473
 
15200
15474
  // Copyright (c) Microsoft Corporation.
15201
15475
  // Licensed under the MIT license.
15202
- var __awaiter$j = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15476
+ var __awaiter$k = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15203
15477
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15204
15478
  return new (P || (P = Promise))(function (resolve, reject) {
15205
15479
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15221,7 +15495,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
15221
15495
  const threadsIterator = iteratorCreator(...args);
15222
15496
  return {
15223
15497
  next() {
15224
- return __awaiter$j(this, void 0, void 0, function* () {
15498
+ return __awaiter$k(this, void 0, void 0, function* () {
15225
15499
  const result = yield threadsIterator.next();
15226
15500
  if (!result.done && result.value) {
15227
15501
  decorateFn(result.value, context);
@@ -15236,7 +15510,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
15236
15510
  const pages = threadsIterator.byPage(settings);
15237
15511
  return {
15238
15512
  next() {
15239
- return __awaiter$j(this, void 0, void 0, function* () {
15513
+ return __awaiter$k(this, void 0, void 0, function* () {
15240
15514
  const result = yield pages.next();
15241
15515
  const page = result.value;
15242
15516
  if (!result.done && result.value) {
@@ -15320,7 +15594,7 @@ const createDecoratedListParticipants = (chatThreadClient, context) => {
15320
15594
 
15321
15595
  // Copyright (c) Microsoft Corporation.
15322
15596
  // Licensed under the MIT license.
15323
- var __awaiter$i = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15597
+ var __awaiter$j = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15324
15598
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15325
15599
  return new (P || (P = Promise))(function (resolve, reject) {
15326
15600
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15339,14 +15613,14 @@ class ProxyChatThreadClient {
15339
15613
  return createDecoratedListMessages(chatThreadClient, this._context);
15340
15614
  }
15341
15615
  case 'getMessage': {
15342
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15616
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15343
15617
  const message = yield chatThreadClient.getMessage(...args);
15344
15618
  this._context.setChatMessage(chatThreadClient.threadId, convertChatMessage(message));
15345
15619
  return message;
15346
15620
  }), 'ChatThreadClient.getMessage');
15347
15621
  }
15348
15622
  case 'sendMessage': {
15349
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15623
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15350
15624
  // Retry logic?
15351
15625
  const [request, options] = args;
15352
15626
  const { content } = request;
@@ -15386,7 +15660,7 @@ class ProxyChatThreadClient {
15386
15660
  }), 'ChatThreadClient.sendMessage');
15387
15661
  }
15388
15662
  case 'addParticipants': {
15389
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15663
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15390
15664
  const result = yield chatThreadClient.addParticipants(...args);
15391
15665
  const [addRequest] = args;
15392
15666
  const participantsToAdd = addRequest.participants;
@@ -15395,7 +15669,7 @@ class ProxyChatThreadClient {
15395
15669
  }), 'ChatThreadClient.addParticipants');
15396
15670
  }
15397
15671
  case 'deleteMessage': {
15398
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15672
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15399
15673
  // DeleteMessage is able to either delete local one(for failed message) or synced message
15400
15674
  const [messageId] = args;
15401
15675
  if (this._context.deleteLocalMessage(chatThreadClient.threadId, messageId)) {
@@ -15413,12 +15687,12 @@ class ProxyChatThreadClient {
15413
15687
  return createDecoratedListReadReceipts(chatThreadClient, this._context);
15414
15688
  }
15415
15689
  case 'sendTypingNotification': {
15416
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15690
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15417
15691
  return yield chatThreadClient.sendTypingNotification(...args);
15418
15692
  }), 'ChatThreadClient.sendTypingNotification');
15419
15693
  }
15420
15694
  case 'removeParticipant': {
15421
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15695
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15422
15696
  const result = yield chatThreadClient.removeParticipant(...args);
15423
15697
  const [removeIdentifier] = args;
15424
15698
  this._context.deleteParticipant(chatThreadClient.threadId, communicationCommon.getIdentifierKind(removeIdentifier));
@@ -15426,7 +15700,7 @@ class ProxyChatThreadClient {
15426
15700
  }), 'ChatThreadClient.removeParticipant');
15427
15701
  }
15428
15702
  case 'updateMessage': {
15429
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15703
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15430
15704
  const result = yield chatThreadClient.updateMessage(...args);
15431
15705
  const [messageId, updateOption] = args;
15432
15706
  this._context.updateChatMessageContent(chatThreadClient.threadId, messageId, updateOption === null || updateOption === void 0 ? void 0 : updateOption.content);
@@ -15434,7 +15708,7 @@ class ProxyChatThreadClient {
15434
15708
  }), 'ChatThreadClient.updateMessage');
15435
15709
  }
15436
15710
  case 'updateTopic': {
15437
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15711
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15438
15712
  const result = yield chatThreadClient.updateTopic(...args);
15439
15713
  const [topic] = args;
15440
15714
  this._context.updateThreadTopic(chatThreadClient.threadId, topic);
@@ -15442,7 +15716,7 @@ class ProxyChatThreadClient {
15442
15716
  }), 'ChatThreadClient.updateTopic');
15443
15717
  }
15444
15718
  case 'getProperties': {
15445
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$i(this, void 0, void 0, function* () {
15719
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$j(this, void 0, void 0, function* () {
15446
15720
  const result = yield chatThreadClient.getProperties(...args);
15447
15721
  this._context.updateThread(chatThreadClient.threadId, result);
15448
15722
  return result;
@@ -15479,7 +15753,7 @@ const createDecoratedListThreads = (chatClient, context) => {
15479
15753
 
15480
15754
  // Copyright (c) Microsoft Corporation.
15481
15755
  // Licensed under the MIT license.
15482
- var __awaiter$h = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15756
+ var __awaiter$i = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15483
15757
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15484
15758
  return new (P || (P = Promise))(function (resolve, reject) {
15485
15759
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15498,7 +15772,7 @@ const proxyChatClient = {
15498
15772
  switch (prop) {
15499
15773
  case 'createChatThread': {
15500
15774
  return context.withAsyncErrorTeedToState(function (...args) {
15501
- return __awaiter$h(this, void 0, void 0, function* () {
15775
+ return __awaiter$i(this, void 0, void 0, function* () {
15502
15776
  const result = yield chatClient.createChatThread(...args);
15503
15777
  const thread = result.chatThread;
15504
15778
  if (thread) {
@@ -15511,7 +15785,7 @@ const proxyChatClient = {
15511
15785
  }
15512
15786
  case 'deleteChatThread': {
15513
15787
  return context.withAsyncErrorTeedToState(function (...args) {
15514
- return __awaiter$h(this, void 0, void 0, function* () {
15788
+ return __awaiter$i(this, void 0, void 0, function* () {
15515
15789
  const result = yield chatClient.deleteChatThread(...args);
15516
15790
  context.deleteThread(args[0]);
15517
15791
  return result;
@@ -15531,7 +15805,7 @@ const proxyChatClient = {
15531
15805
  }
15532
15806
  case 'startRealtimeNotifications': {
15533
15807
  return context.withAsyncErrorTeedToState(function (...args) {
15534
- return __awaiter$h(this, void 0, void 0, function* () {
15808
+ return __awaiter$i(this, void 0, void 0, function* () {
15535
15809
  const ret = yield chatClient.startRealtimeNotifications(...args);
15536
15810
  if (!receiver.eventSubscriber) {
15537
15811
  receiver.eventSubscriber = new EventSubscriber(chatClient, context);
@@ -15542,7 +15816,7 @@ const proxyChatClient = {
15542
15816
  }
15543
15817
  case 'stopRealtimeNotifications': {
15544
15818
  return context.withAsyncErrorTeedToState(function (...args) {
15545
- return __awaiter$h(this, void 0, void 0, function* () {
15819
+ return __awaiter$i(this, void 0, void 0, function* () {
15546
15820
  const ret = yield chatClient.stopRealtimeNotifications(...args);
15547
15821
  if (receiver.eventSubscriber) {
15548
15822
  receiver.eventSubscriber.unsubscribe();
@@ -15698,7 +15972,11 @@ const COMPOSITE_ONLY_ICONS = {
15698
15972
  /* @conditional-compile-remove(PSTN-calls) */
15699
15973
  DialpadStartCall: React__default['default'].createElement(reactIcons.Call20Regular, null),
15700
15974
  /* @conditional-compile-remove(rooms) */
15701
- NoticePageInvalidRoom: React__default['default'].createElement(reactIcons.Info20Filled, null)
15975
+ NoticePageInvalidRoom: React__default['default'].createElement(reactIcons.Info20Filled, null),
15976
+ /* @conditional-compile-remove(video-background-effects) */
15977
+ BlurVideoBackground: React__default['default'].createElement(reactIcons.VideoBackgroundEffect20Regular, null),
15978
+ /* @conditional-compile-remove(video-background-effects) */
15979
+ RemoveVideoBackgroundEffect: React__default['default'].createElement(reactIcons.VideoPerson20Filled, null)
15702
15980
  };
15703
15981
  /**
15704
15982
  * The default set of icons that are available to used in the Composites.
@@ -15731,7 +16009,7 @@ const CallCompositeIcon = (props) => (React__default['default'].createElement(re
15731
16009
  */
15732
16010
  const CallWithChatCompositeIcon = (props) => (React__default['default'].createElement(react.FontIcon, Object.assign({}, props)));
15733
16011
 
15734
- var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left"};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
16012
+ var call$d={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",effects:"Effects",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left"};var chat$d={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$d={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$d,chat:chat$d,callWithChat:callWithChat$d};
15735
16013
 
15736
16014
  var call$c={cameraLabel:"Camera",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",deniedPermissionToRoomDetails:"You do not have permission to join this room.",deniedPermissionToRoomTitle:"Permission denied to room",peopleButtonLabel:"People",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"Room ID provided is not valid.",roomNotFoundTitle:"Room not found",soundLabel:"Sound",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceHolderText:"Enter number",outboundCallingNoticeString:"Calling..."};var chat$c={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$c={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",peopleButtonLabel:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceHolderText:"Enter number"};var en_GB = {call:call$c,chat:chat$c,callWithChat:callWithChat$c};
15737
16015
 
@@ -15981,7 +16259,7 @@ const uploadFileButtonStringTrampoline = () => {
15981
16259
 
15982
16260
  // Copyright (c) Microsoft Corporation.
15983
16261
  // Licensed under the MIT license.
15984
- var __awaiter$g = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16262
+ var __awaiter$h = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
15985
16263
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15986
16264
  return new (P || (P = Promise))(function (resolve, reject) {
15987
16265
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -16100,7 +16378,7 @@ class AzureCommunicationFileUploadAdapter {
16100
16378
  }
16101
16379
  /* @conditional-compile-remove(teams-inline-images) */
16102
16380
  downloadAuthenticatedAttachment(attachmentUrl) {
16103
- return __awaiter$g(this, void 0, void 0, function* () {
16381
+ return __awaiter$h(this, void 0, void 0, function* () {
16104
16382
  function fetchWithAuthentication(url, token) {
16105
16383
  const headers = new Headers();
16106
16384
  headers.append('Authorization', `Bearer ${token}`);
@@ -16178,7 +16456,7 @@ const END_CALL_PAGES = [
16178
16456
 
16179
16457
  // Copyright (c) Microsoft Corporation.
16180
16458
  // Licensed under the MIT license.
16181
- var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16459
+ var __awaiter$g = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16182
16460
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16183
16461
  return new (P || (P = Promise))(function (resolve, reject) {
16184
16462
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -16401,7 +16679,7 @@ const isDisabled$2 = (option) => {
16401
16679
  /**
16402
16680
  * @returns Permissions state for the camera.
16403
16681
  */
16404
- const queryCameraPermissionFromPermissionsAPI = () => __awaiter$f(void 0, void 0, void 0, function* () {
16682
+ const queryCameraPermissionFromPermissionsAPI = () => __awaiter$g(void 0, void 0, void 0, function* () {
16405
16683
  try {
16406
16684
  return (yield navigator.permissions.query({ name: 'camera' })).state;
16407
16685
  }
@@ -16414,7 +16692,7 @@ const queryCameraPermissionFromPermissionsAPI = () => __awaiter$f(void 0, void 0
16414
16692
  /**
16415
16693
  * @returns Permissions state for the microphone.
16416
16694
  */
16417
- const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$f(void 0, void 0, void 0, function* () {
16695
+ const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$g(void 0, void 0, void 0, function* () {
16418
16696
  try {
16419
16697
  return (yield navigator.permissions.query({ name: 'microphone' })).state;
16420
16698
  }
@@ -16431,7 +16709,7 @@ const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$f(void 0, vo
16431
16709
  * If permission API is not supported on this browser, permission state is set to unsupported.
16432
16710
  * @private
16433
16711
  */
16434
- const getDevicePermissionState = (setVideoState, setAudioState) => __awaiter$f(void 0, void 0, void 0, function* () {
16712
+ const getDevicePermissionState = (setVideoState, setAudioState) => __awaiter$g(void 0, void 0, void 0, function* () {
16435
16713
  const [cameraResult, microphoneResult] = yield Promise.all([
16436
16714
  queryCameraPermissionFromPermissionsAPI(),
16437
16715
  queryMicrophonePermissionFromPermissionsAPI()
@@ -16508,7 +16786,7 @@ const createParticipantModifier = (createModifiedParticipant) => {
16508
16786
 
16509
16787
  // Copyright (c) Microsoft Corporation.
16510
16788
  // Licensed under the MIT license.
16511
- var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16789
+ var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16512
16790
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16513
16791
  return new (P || (P = Promise))(function (resolve, reject) {
16514
16792
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -16636,9 +16914,9 @@ class AzureCommunicationChatAdapter {
16636
16914
  this.unsubscribeAllEvents();
16637
16915
  }
16638
16916
  fetchInitialData() {
16639
- return __awaiter$e(this, void 0, void 0, function* () {
16917
+ return __awaiter$f(this, void 0, void 0, function* () {
16640
16918
  // If get properties fails we dont want to try to get the participants after.
16641
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
16919
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16642
16920
  var e_1, _a;
16643
16921
  yield this.chatThreadClient.getProperties();
16644
16922
  try {
@@ -16672,8 +16950,8 @@ class AzureCommunicationChatAdapter {
16672
16950
  this.context.offStateChange(handler);
16673
16951
  }
16674
16952
  sendMessage(content, options = {}) {
16675
- return __awaiter$e(this, void 0, void 0, function* () {
16676
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
16953
+ return __awaiter$f(this, void 0, void 0, function* () {
16954
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16677
16955
  /* @conditional-compile-remove(file-sharing) */
16678
16956
  options.metadata = Object.assign(Object.assign({}, options.metadata), convertFileUploadsUiStateToMessageMetadata(this.context.getState().fileUploads));
16679
16957
  /* @conditional-compile-remove(file-sharing) */
@@ -16690,51 +16968,51 @@ class AzureCommunicationChatAdapter {
16690
16968
  });
16691
16969
  }
16692
16970
  sendReadReceipt(chatMessageId) {
16693
- return __awaiter$e(this, void 0, void 0, function* () {
16694
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
16971
+ return __awaiter$f(this, void 0, void 0, function* () {
16972
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16695
16973
  yield this.handlers.onMessageSeen(chatMessageId);
16696
16974
  }));
16697
16975
  });
16698
16976
  }
16699
16977
  sendTypingIndicator() {
16700
- return __awaiter$e(this, void 0, void 0, function* () {
16701
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
16978
+ return __awaiter$f(this, void 0, void 0, function* () {
16979
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16702
16980
  yield this.handlers.onTyping();
16703
16981
  }));
16704
16982
  });
16705
16983
  }
16706
16984
  removeParticipant(userId) {
16707
- return __awaiter$e(this, void 0, void 0, function* () {
16708
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
16985
+ return __awaiter$f(this, void 0, void 0, function* () {
16986
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16709
16987
  yield this.handlers.onRemoveParticipant(userId);
16710
16988
  }));
16711
16989
  });
16712
16990
  }
16713
16991
  setTopic(topicName) {
16714
- return __awaiter$e(this, void 0, void 0, function* () {
16715
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
16992
+ return __awaiter$f(this, void 0, void 0, function* () {
16993
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16716
16994
  yield this.handlers.updateThreadTopicName(topicName);
16717
16995
  }));
16718
16996
  });
16719
16997
  }
16720
16998
  loadPreviousChatMessages(messagesToLoad) {
16721
- return __awaiter$e(this, void 0, void 0, function* () {
16722
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
16999
+ return __awaiter$f(this, void 0, void 0, function* () {
17000
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16723
17001
  return yield this.handlers.onLoadPreviousChatMessages(messagesToLoad);
16724
17002
  }));
16725
17003
  });
16726
17004
  }
16727
17005
  updateMessage(messageId, content, metadata, options) {
16728
- return __awaiter$e(this, void 0, void 0, function* () {
16729
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
17006
+ return __awaiter$f(this, void 0, void 0, function* () {
17007
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16730
17008
  /* @conditional-compile-remove(file-sharing) */
16731
17009
  return yield this.handlers.onUpdateMessage(messageId, content, metadata, options);
16732
17010
  }));
16733
17011
  });
16734
17012
  }
16735
17013
  deleteMessage(messageId) {
16736
- return __awaiter$e(this, void 0, void 0, function* () {
16737
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$e(this, void 0, void 0, function* () {
17014
+ return __awaiter$f(this, void 0, void 0, function* () {
17015
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$f(this, void 0, void 0, function* () {
16738
17016
  return yield this.handlers.onDeleteMessage(messageId);
16739
17017
  }));
16740
17018
  });
@@ -16769,7 +17047,7 @@ class AzureCommunicationChatAdapter {
16769
17047
  }
16770
17048
  /* @conditional-compile-remove(teams-inline-images) */
16771
17049
  downloadAuthenticatedAttachment(attachmentUrl) {
16772
- return __awaiter$e(this, void 0, void 0, function* () {
17050
+ return __awaiter$f(this, void 0, void 0, function* () {
16773
17051
  if (!this.fileUploadAdapter.downloadAuthenticatedAttachment) {
16774
17052
  return '';
16775
17053
  }
@@ -16824,7 +17102,7 @@ class AzureCommunicationChatAdapter {
16824
17102
  this.emitter.off(event, listener);
16825
17103
  }
16826
17104
  asyncTeeErrorToEventEmitter(f) {
16827
- return __awaiter$e(this, void 0, void 0, function* () {
17105
+ return __awaiter$f(this, void 0, void 0, function* () {
16828
17106
  try {
16829
17107
  return yield f();
16830
17108
  }
@@ -16866,7 +17144,7 @@ const convertEventType = (type) => {
16866
17144
  *
16867
17145
  * @public
16868
17146
  */
16869
- const createAzureCommunicationChatAdapter = ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) => __awaiter$e(void 0, void 0, void 0, function* () {
17147
+ const createAzureCommunicationChatAdapter = ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) => __awaiter$f(void 0, void 0, void 0, function* () {
16870
17148
  if (!isValidIdentifier(userId)) {
16871
17149
  throw new Error('Provided userId is invalid. Please provide valid identifier object.');
16872
17150
  }
@@ -16932,7 +17210,7 @@ beforeDispose) => {
16932
17210
  if (!credential || !displayName || !endpoint || !threadId || !userId) {
16933
17211
  return;
16934
17212
  }
16935
- (() => __awaiter$e(void 0, void 0, void 0, function* () {
17213
+ (() => __awaiter$f(void 0, void 0, void 0, function* () {
16936
17214
  if (adapterRef.current) {
16937
17215
  // Dispose the old adapter when a new one is created.
16938
17216
  //
@@ -16964,7 +17242,7 @@ beforeDispose) => {
16964
17242
  // Dispose any existing adapter when the component unmounts.
16965
17243
  React.useEffect(() => {
16966
17244
  return () => {
16967
- (() => __awaiter$e(void 0, void 0, void 0, function* () {
17245
+ (() => __awaiter$f(void 0, void 0, void 0, function* () {
16968
17246
  if (adapterRef.current) {
16969
17247
  if (beforeDisposeRef.current) {
16970
17248
  yield beforeDisposeRef.current(adapterRef.current);
@@ -16985,7 +17263,7 @@ beforeDispose) => {
16985
17263
  *
16986
17264
  * @public
16987
17265
  */
16988
- const createAzureCommunicationChatAdapterFromClient = (chatClient, chatThreadClient) => __awaiter$e(void 0, void 0, void 0, function* () {
17266
+ const createAzureCommunicationChatAdapterFromClient = (chatClient, chatThreadClient) => __awaiter$f(void 0, void 0, void 0, function* () {
16989
17267
  return new AzureCommunicationChatAdapter(chatClient, chatThreadClient);
16990
17268
  });
16991
17269
  const isChatError = (e) => {
@@ -17196,7 +17474,7 @@ const sendboxContainerStyles = {
17196
17474
 
17197
17475
  // Copyright (c) Microsoft Corporation.
17198
17476
  // Licensed under the MIT license.
17199
- var __awaiter$d = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17477
+ var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17200
17478
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17201
17479
  return new (P || (P = Promise))(function (resolve, reject) {
17202
17480
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -17217,7 +17495,7 @@ const AvatarPersona = (props) => {
17217
17495
  const { userId, dataProvider, text, imageUrl, imageInitials, initialsColor, initialsTextColor, showOverflowTooltip } = props;
17218
17496
  const [data, setData] = React.useState();
17219
17497
  React.useEffect(() => {
17220
- (() => __awaiter$d(void 0, void 0, void 0, function* () {
17498
+ (() => __awaiter$e(void 0, void 0, void 0, function* () {
17221
17499
  if (dataProvider && userId) {
17222
17500
  const newData = yield dataProvider(userId);
17223
17501
  if (avatarDeepDifferenceCheck(data, newData)) {
@@ -17581,7 +17859,7 @@ const FileDownloadErrorBar = (props) => {
17581
17859
 
17582
17860
  // Copyright (c) Microsoft Corporation.
17583
17861
  // Licensed under the MIT license.
17584
- var __awaiter$c = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17862
+ var __awaiter$d = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17585
17863
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17586
17864
  return new (P || (P = Promise))(function (resolve, reject) {
17587
17865
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -17602,7 +17880,7 @@ const ChatScreen = (props) => {
17602
17880
  const theme = useTheme();
17603
17881
  React.useEffect(() => {
17604
17882
  // Initial data should be always fetched by the composite(or external caller) instead of the adapter
17605
- const fetchData = () => __awaiter$c(void 0, void 0, void 0, function* () {
17883
+ const fetchData = () => __awaiter$d(void 0, void 0, void 0, function* () {
17606
17884
  // Fetch initial data for adapter
17607
17885
  yield adapter.fetchInitialData();
17608
17886
  // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.
@@ -17807,7 +18085,7 @@ const adaptCompositeState = (compositeState) => {
17807
18085
 
17808
18086
  // Copyright (c) Microsoft Corporation.
17809
18087
  // Licensed under the MIT license.
17810
- var __awaiter$b = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18088
+ var __awaiter$c = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17811
18089
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17812
18090
  return new (P || (P = Promise))(function (resolve, reject) {
17813
18091
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -17826,88 +18104,88 @@ _component) => {
17826
18104
  return createCompositeHandlers(useAdapter());
17827
18105
  };
17828
18106
  const createCompositeHandlers = memoizeOne__default['default']((adapter) => ({
17829
- onCreateLocalStreamView: (options) => __awaiter$b(void 0, void 0, void 0, function* () {
18107
+ onCreateLocalStreamView: (options) => __awaiter$c(void 0, void 0, void 0, function* () {
17830
18108
  return yield adapter.createStreamView(undefined, options);
17831
18109
  }),
17832
- onCreateRemoteStreamView: (userId, options) => __awaiter$b(void 0, void 0, void 0, function* () {
18110
+ onCreateRemoteStreamView: (userId, options) => __awaiter$c(void 0, void 0, void 0, function* () {
17833
18111
  return yield adapter.createStreamView(userId, options);
17834
18112
  }),
17835
- onHangUp: (forEveryone) => __awaiter$b(void 0, void 0, void 0, function* () {
18113
+ onHangUp: (forEveryone) => __awaiter$c(void 0, void 0, void 0, function* () {
17836
18114
  yield adapter.leaveCall(forEveryone);
17837
18115
  }),
17838
18116
  /* @conditional-compile-remove(PSTN-calls) */
17839
- onToggleHold: () => __awaiter$b(void 0, void 0, void 0, function* () {
18117
+ onToggleHold: () => __awaiter$c(void 0, void 0, void 0, function* () {
17840
18118
  var _a;
17841
18119
  return ((_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.state) === 'LocalHold' ? yield adapter.resumeCall() : yield adapter.holdCall();
17842
18120
  }),
17843
18121
  /* @conditional-compile-remove(PSTN-calls) */
17844
- onAddParticipant: (participant, options) => __awaiter$b(void 0, void 0, void 0, function* () {
18122
+ onAddParticipant: (participant, options) => __awaiter$c(void 0, void 0, void 0, function* () {
17845
18123
  return yield adapter.addParticipant(participant, options);
17846
18124
  }),
17847
18125
  /* @conditional-compile-remove(PSTN-calls) */
17848
- onSendDtmfTone: (dtmfTone) => __awaiter$b(void 0, void 0, void 0, function* () {
18126
+ onSendDtmfTone: (dtmfTone) => __awaiter$c(void 0, void 0, void 0, function* () {
17849
18127
  yield adapter.sendDtmfTone(dtmfTone);
17850
18128
  }),
17851
- onRemoveParticipant: (userId) => __awaiter$b(void 0, void 0, void 0, function* () {
18129
+ onRemoveParticipant: (userId) => __awaiter$c(void 0, void 0, void 0, function* () {
17852
18130
  yield adapter.removeParticipant(userId);
17853
18131
  }),
17854
- onSelectCamera: (deviceInfo, options) => __awaiter$b(void 0, void 0, void 0, function* () {
18132
+ onSelectCamera: (deviceInfo, options) => __awaiter$c(void 0, void 0, void 0, function* () {
17855
18133
  yield adapter.setCamera(deviceInfo, options);
17856
18134
  }),
17857
- onSelectMicrophone: (deviceInfo) => __awaiter$b(void 0, void 0, void 0, function* () {
18135
+ onSelectMicrophone: (deviceInfo) => __awaiter$c(void 0, void 0, void 0, function* () {
17858
18136
  yield adapter.setMicrophone(deviceInfo);
17859
18137
  }),
17860
- onSelectSpeaker: (deviceInfo) => __awaiter$b(void 0, void 0, void 0, function* () {
18138
+ onSelectSpeaker: (deviceInfo) => __awaiter$c(void 0, void 0, void 0, function* () {
17861
18139
  yield adapter.setSpeaker(deviceInfo);
17862
18140
  }),
17863
18141
  onStartCall: (participants, options) => {
17864
18142
  const rawIds = participants.map((participant) => toFlatCommunicationIdentifier(participant));
17865
18143
  return adapter.startCall(rawIds, options);
17866
18144
  },
17867
- onStartScreenShare: () => __awaiter$b(void 0, void 0, void 0, function* () {
18145
+ onStartScreenShare: () => __awaiter$c(void 0, void 0, void 0, function* () {
17868
18146
  yield adapter.startScreenShare();
17869
18147
  }),
17870
- onStopScreenShare: () => __awaiter$b(void 0, void 0, void 0, function* () {
18148
+ onStopScreenShare: () => __awaiter$c(void 0, void 0, void 0, function* () {
17871
18149
  yield adapter.stopScreenShare();
17872
18150
  }),
17873
- onToggleCamera: (options) => __awaiter$b(void 0, void 0, void 0, function* () {
18151
+ onToggleCamera: (options) => __awaiter$c(void 0, void 0, void 0, function* () {
17874
18152
  isCameraOn(adapter.getState()) ? yield adapter.stopCamera() : yield adapter.startCamera(options);
17875
18153
  }),
17876
- onToggleMicrophone: () => __awaiter$b(void 0, void 0, void 0, function* () {
18154
+ onToggleMicrophone: () => __awaiter$c(void 0, void 0, void 0, function* () {
17877
18155
  var _b;
17878
18156
  return ((_b = adapter.getState().call) === null || _b === void 0 ? void 0 : _b.isMuted) ? yield adapter.unmute() : yield adapter.mute();
17879
18157
  }),
17880
- onToggleScreenShare: () => __awaiter$b(void 0, void 0, void 0, function* () {
18158
+ onToggleScreenShare: () => __awaiter$c(void 0, void 0, void 0, function* () {
17881
18159
  var _c;
17882
18160
  return ((_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.isScreenSharingOn)
17883
18161
  ? yield adapter.stopScreenShare()
17884
18162
  : yield adapter.startScreenShare();
17885
18163
  }),
17886
- onStartLocalVideo: () => __awaiter$b(void 0, void 0, void 0, function* () {
18164
+ onStartLocalVideo: () => __awaiter$c(void 0, void 0, void 0, function* () {
17887
18165
  if (adapter.getState().call) {
17888
18166
  return adapter.startCamera();
17889
18167
  }
17890
18168
  }),
17891
- onDisposeLocalStreamView: () => __awaiter$b(void 0, void 0, void 0, function* () {
18169
+ onDisposeLocalStreamView: () => __awaiter$c(void 0, void 0, void 0, function* () {
17892
18170
  return adapter.disposeStreamView();
17893
18171
  }),
17894
- onDisposeRemoteStreamView: (userId) => __awaiter$b(void 0, void 0, void 0, function* () {
18172
+ onDisposeRemoteStreamView: (userId) => __awaiter$c(void 0, void 0, void 0, function* () {
17895
18173
  return adapter.disposeStreamView(userId);
17896
18174
  }),
17897
18175
  /* @conditional-compile-remove(call-readiness) */
17898
- askDevicePermission: (constrain) => __awaiter$b(void 0, void 0, void 0, function* () {
18176
+ askDevicePermission: (constrain) => __awaiter$c(void 0, void 0, void 0, function* () {
17899
18177
  return adapter.askDevicePermission(constrain);
17900
18178
  }),
17901
18179
  /* @conditional-compile-remove(video-background-effects) */
17902
- onRemoveVideoBackgroundEffects: () => __awaiter$b(void 0, void 0, void 0, function* () {
18180
+ onRemoveVideoBackgroundEffects: () => __awaiter$c(void 0, void 0, void 0, function* () {
17903
18181
  return yield adapter.stopVideoBackgroundEffect();
17904
18182
  }),
17905
18183
  /* @conditional-compile-remove(video-background-effects) */
17906
- onBlurVideoBackground: (bgBlurConfig) => __awaiter$b(void 0, void 0, void 0, function* () {
18184
+ onBlurVideoBackground: (bgBlurConfig) => __awaiter$c(void 0, void 0, void 0, function* () {
17907
18185
  return yield adapter.blurVideoBackground(bgBlurConfig);
17908
18186
  }),
17909
18187
  /* @conditional-compile-remove(video-background-effects) */
17910
- onReplaceVideoBackground: (bgReplacementConfig) => __awaiter$b(void 0, void 0, void 0, function* () {
18188
+ onReplaceVideoBackground: (bgReplacementConfig) => __awaiter$c(void 0, void 0, void 0, function* () {
17911
18189
  return yield adapter.replaceVideoBackground(bgReplacementConfig);
17912
18190
  })
17913
18191
  }));
@@ -19259,7 +19537,7 @@ const AddPeopleButton = (props) => {
19259
19537
 
19260
19538
  // Copyright (c) Microsoft Corporation.
19261
19539
  // Licensed under the MIT license.
19262
- var __awaiter$a = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
19540
+ var __awaiter$b = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
19263
19541
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19264
19542
  return new (P || (P = Promise))(function (resolve, reject) {
19265
19543
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -19295,7 +19573,7 @@ const PeoplePaneContent = (props) => {
19295
19573
  setDrawerMenuItems
19296
19574
  ]);
19297
19575
  const participantListProps = React.useMemo(() => {
19298
- const onRemoveAParticipant = (participantId) => __awaiter$a(void 0, void 0, void 0, function* () { return onRemoveParticipant(participantId); });
19576
+ const onRemoveAParticipant = (participantId) => __awaiter$b(void 0, void 0, void 0, function* () { return onRemoveParticipant(participantId); });
19299
19577
  return Object.assign(Object.assign({}, participantListDefaultProps), {
19300
19578
  // Passing undefined callback for mobile to avoid context menus for participants in ParticipantList are clicked
19301
19579
  onRemoveParticipant: props.mobileView ? undefined : onRemoveAParticipant,
@@ -19494,7 +19772,7 @@ const useMinMaxDragPosition = (modalLayerHostId, rtl) => {
19494
19772
  return { minDragPosition: minDragPosition, maxDragPosition: maxDragPosition };
19495
19773
  };
19496
19774
 
19497
- var __awaiter$9 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
19775
+ var __awaiter$a = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
19498
19776
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19499
19777
  return new (P || (P = Promise))(function (resolve, reject) {
19500
19778
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -19524,11 +19802,11 @@ const CallPane = (props) => {
19524
19802
  /**
19525
19803
  * In a Call Composite when a participant is removed, we must remove them from the call.
19526
19804
  */
19527
- const removeParticipantFromCall = (participantId) => __awaiter$9(void 0, void 0, void 0, function* () {
19805
+ const removeParticipantFromCall = (participantId) => __awaiter$a(void 0, void 0, void 0, function* () {
19528
19806
  yield props.callAdapter.removeParticipant(participantId);
19529
19807
  });
19530
19808
  /* @conditional-compile-remove(PSTN-calls) */
19531
- const addParticipantToCall = (participant, options) => __awaiter$9(void 0, void 0, void 0, function* () {
19809
+ const addParticipantToCall = (participant, options) => __awaiter$a(void 0, void 0, void 0, function* () {
19532
19810
  yield props.callAdapter.addParticipant(participant, options);
19533
19811
  });
19534
19812
  const minMaxDragPosition = useMinMaxDragPosition(props.modalLayerHostId, props.rtl);
@@ -19654,12 +19932,6 @@ const CallArrangement = (props) => {
19654
19932
  return (React__default['default'].createElement("div", { ref: containerRef, className: react.mergeStyles(containerDivStyles), id: props.id },
19655
19933
  React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
19656
19934
  React__default['default'].createElement(react.Stack, { grow: true, styles: callArrangementContainerStyles },
19657
- React__default['default'].createElement(react.Stack.Item, { styles: notificationsContainerStyles },
19658
- React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
19659
- React__default['default'].createElement(_ComplianceBanner, Object.assign({}, props.complianceBannerProps))),
19660
- errorBarProps !== false && (React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
19661
- React__default['default'].createElement(ErrorBar, Object.assign({}, errorBarProps)))),
19662
- canUnmute && !!props.mutedNotificationProps && React__default['default'].createElement(MutedNotification, Object.assign({}, props.mutedNotificationProps))),
19663
19935
  ((_b = props.callControlProps) === null || _b === void 0 ? void 0 : _b.options) !== false &&
19664
19936
  /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
19665
19937
  !isMobileWithActivePane && (React__default['default'].createElement(react.Stack.Item, { className: callControlsContainerStyles },
@@ -19670,7 +19942,15 @@ const CallArrangement = (props) => {
19670
19942
  onPeopleButtonClicked: togglePeoplePane })))),
19671
19943
  React__default['default'].createElement(react.Stack, { horizontal: true, grow: true },
19672
19944
  React__default['default'].createElement(react.Stack.Item, { grow: true, style: callCompositeContainerFlex() },
19673
- React__default['default'].createElement(react.Stack.Item, { styles: callGalleryStyles, grow: true }, props.onRenderGalleryContent && (React__default['default'].createElement(react.Stack, { verticalFill: true, styles: mediaGalleryContainerStyles$1 }, props.onRenderGalleryContent())))),
19945
+ React__default['default'].createElement(react.Stack.Item, { styles: callGalleryStyles, grow: true },
19946
+ React__default['default'].createElement(react.Stack, { verticalFill: true, styles: mediaGalleryContainerStyles$1 },
19947
+ React__default['default'].createElement(react.Stack.Item, { styles: notificationsContainerStyles },
19948
+ React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
19949
+ React__default['default'].createElement(_ComplianceBanner, Object.assign({}, props.complianceBannerProps))),
19950
+ errorBarProps !== false && (React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
19951
+ React__default['default'].createElement(ErrorBar, Object.assign({}, errorBarProps)))),
19952
+ canUnmute && !!props.mutedNotificationProps && (React__default['default'].createElement(MutedNotification, Object.assign({}, props.mutedNotificationProps)))),
19953
+ props.onRenderGalleryContent && props.onRenderGalleryContent()))),
19674
19954
  /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
19675
19955
  callPaneContent())))));
19676
19956
  };
@@ -20416,103 +20696,6 @@ const devicePermissionSelector = reselect__namespace.createSelector([getDeviceMa
20416
20696
  };
20417
20697
  });
20418
20698
 
20419
- // Copyright (c) Microsoft Corporation.
20420
- /**
20421
- * @private
20422
- */
20423
- const localPreviewSelector = reselect__namespace.createSelector([getDeviceManager], (deviceManager) => {
20424
- // TODO: we should take in a LocalVideoStream that developer wants to use as their 'Preview' view. We should also
20425
- // handle cases where 'Preview' view is in progress and not necessary completed.
20426
- const view = deviceManager.cameras.length > 0 && // This ensures that the video stream is reset if camera devices are removed.
20427
- deviceManager.unparentedViews.length > 0 &&
20428
- deviceManager.unparentedViews[0].view;
20429
- return {
20430
- videoStreamElement: view ? view.target : null
20431
- };
20432
- });
20433
-
20434
- // Copyright (c) Microsoft Corporation.
20435
- const localPreviewContainerStyle = {
20436
- borderRadius: '.25rem'
20437
- };
20438
- /**
20439
- * @private
20440
- */
20441
- const localPreviewContainerStyleDesktop = react.mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '50%', minWidth: '11rem', maxWidth: '25rem', height: '18.75rem', padding: '0.5rem' }));
20442
- /**
20443
- * @private
20444
- */
20445
- const localPreviewContainerStyleMobile = react.mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '100%', height: '100%' }));
20446
- /**
20447
- * @private
20448
- */
20449
- const cameraOffLabelStyle = react.mergeStyles({
20450
- fontSize: '0.75rem' // 12px
20451
- });
20452
- /**
20453
- * @private
20454
- */
20455
- const localPreviewTileStyle = {
20456
- root: {
20457
- borderRadius: '.25rem'
20458
- }
20459
- };
20460
-
20461
- // Copyright (c) Microsoft Corporation.
20462
- // Licensed under the MIT license.
20463
- var __awaiter$8 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20464
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20465
- return new (P || (P = Promise))(function (resolve, reject) {
20466
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20467
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
20468
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20469
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20470
- });
20471
- };
20472
- /**
20473
- * @private
20474
- */
20475
- const LocalPreview = (props) => {
20476
- const locale = useLocale();
20477
- const cameraButtonProps = usePropsFor$1(CameraButton);
20478
- const localPreviewProps = useSelector$1(localPreviewSelector);
20479
- const devicesButtonProps = usePropsFor$1(DevicesButton);
20480
- const { audio: microphonePermissionGranted, video: cameraPermissionGranted } = useSelector$1(devicePermissionSelector);
20481
- const isLocalMicrophoneEnabled = useSelector$1(getLocalMicrophoneEnabled);
20482
- const adapter = useAdapter();
20483
- const onToggleMic = React.useCallback(() => __awaiter$8(void 0, void 0, void 0, function* () {
20484
- isLocalMicrophoneEnabled ? adapter.mute() : adapter.unmute();
20485
- }), [adapter, isLocalMicrophoneEnabled]);
20486
- const hasNoDevices = devicesButtonProps.cameras.length === 0 &&
20487
- devicesButtonProps.microphones.length === 0 &&
20488
- devicesButtonProps.speakers.length === 0;
20489
- const hasCameras = devicesButtonProps.cameras.length > 0;
20490
- const hasMicrophones = devicesButtonProps.microphones.length > 0;
20491
- const theme = useTheme();
20492
- const onRenderPlaceholder = React.useCallback(() => {
20493
- return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ width: '100%', height: '100%' }), verticalAlign: "center", tokens: { childrenGap: '0.25rem' } },
20494
- React__default['default'].createElement(react.Stack.Item, { align: "center" },
20495
- React__default['default'].createElement(CallCompositeIcon, { iconName: "LocalPreviewPlaceholder", className: react.mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralTertiary }) })),
20496
- React__default['default'].createElement(react.Stack.Item, { align: "center" },
20497
- React__default['default'].createElement(react.Text, { className: react.mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralSecondary }) }, locale.strings.call.cameraTurnedOff))));
20498
- }, [theme, locale.strings.call.cameraTurnedOff]);
20499
- const devicesButtonStyles = props.mobileView
20500
- ? {
20501
- menuStyles: {
20502
- menuItemStyles: buttonFlyoutIncreasedSizeStyles
20503
- }
20504
- }
20505
- : undefined;
20506
- return (React__default['default'].createElement(react.Stack, { "data-ui-id": "call-composite-local-preview", className: props.mobileView ? localPreviewContainerStyleMobile : localPreviewContainerStyleDesktop },
20507
- React__default['default'].createElement(VideoTile, { styles: localPreviewTileStyle, renderElement: (localPreviewProps === null || localPreviewProps === void 0 ? void 0 : localPreviewProps.videoStreamElement) ? (React__default['default'].createElement(StreamMedia, { videoStreamElement: localPreviewProps.videoStreamElement })) : undefined, onRenderPlaceholder: onRenderPlaceholder },
20508
- React__default['default'].createElement(ControlBar, { layout: "floatingBottom" },
20509
- React__default['default'].createElement(MicrophoneButton, { "data-ui-id": "call-composite-local-device-settings-microphone-button", checked: isLocalMicrophoneEnabled, onToggleMicrophone: onToggleMic, disabled: !microphonePermissionGranted || !hasMicrophones, showLabel: true }),
20510
- React__default['default'].createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-camera-button" }, cameraButtonProps, { showLabel: true, disabled: !cameraPermissionGranted || !hasCameras })),
20511
- props.showDevicesButton && (React__default['default'].createElement(DevicesButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-options-button" }, devicesButtonProps, {
20512
- // disable button whilst all other buttons are disabled
20513
- disabled: !microphonePermissionGranted || !cameraPermissionGranted || hasNoDevices, showLabel: true, styles: devicesButtonStyles })))))));
20514
- };
20515
-
20516
20699
  // Copyright (c) Microsoft Corporation.
20517
20700
  /**
20518
20701
  * @private
@@ -20610,6 +20793,123 @@ const startCallButtonStyleMobile = react.mergeStyles({
20610
20793
  width: '100%',
20611
20794
  maxWidth: 'unset'
20612
20795
  });
20796
+ /**
20797
+ * @private
20798
+ */
20799
+ const effectsButtonStyles = (theme) => {
20800
+ return {
20801
+ root: {
20802
+ background: 'transparent',
20803
+ border: 'none',
20804
+ color: theme.palette.blue,
20805
+ width: '40%',
20806
+ alignSelf: 'end',
20807
+ ':hover, :focus': {
20808
+ color: theme.palette.blue
20809
+ }
20810
+ },
20811
+ rootChecked: {
20812
+ color: theme.palette.blue
20813
+ }
20814
+ };
20815
+ };
20816
+
20817
+ // Copyright (c) Microsoft Corporation.
20818
+ /**
20819
+ * @private
20820
+ */
20821
+ const localPreviewSelector = reselect__namespace.createSelector([getDeviceManager], (deviceManager) => {
20822
+ // TODO: we should take in a LocalVideoStream that developer wants to use as their 'Preview' view. We should also
20823
+ // handle cases where 'Preview' view is in progress and not necessary completed.
20824
+ const view = deviceManager.cameras.length > 0 && // This ensures that the video stream is reset if camera devices are removed.
20825
+ deviceManager.unparentedViews.length > 0 &&
20826
+ deviceManager.unparentedViews[0].view;
20827
+ return {
20828
+ videoStreamElement: view ? view.target : null
20829
+ };
20830
+ });
20831
+
20832
+ // Copyright (c) Microsoft Corporation.
20833
+ const localPreviewContainerStyle = {
20834
+ borderRadius: '.25rem'
20835
+ };
20836
+ /**
20837
+ * @private
20838
+ */
20839
+ const localPreviewContainerStyleDesktop = react.mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '50%', minWidth: '11rem', maxWidth: '25rem', height: '18.75rem', padding: '0.5rem' }));
20840
+ /**
20841
+ * @private
20842
+ */
20843
+ const localPreviewContainerStyleMobile = react.mergeStyles(Object.assign(Object.assign({}, localPreviewContainerStyle), { width: '100%', height: '100%' }));
20844
+ /**
20845
+ * @private
20846
+ */
20847
+ const cameraOffLabelStyle = react.mergeStyles({
20848
+ fontSize: '0.75rem' // 12px
20849
+ });
20850
+ /**
20851
+ * @private
20852
+ */
20853
+ const localPreviewTileStyle = {
20854
+ root: {
20855
+ borderRadius: '.25rem'
20856
+ }
20857
+ };
20858
+
20859
+ // Copyright (c) Microsoft Corporation.
20860
+ // Licensed under the MIT license.
20861
+ var __awaiter$9 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20862
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20863
+ return new (P || (P = Promise))(function (resolve, reject) {
20864
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20865
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
20866
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20867
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20868
+ });
20869
+ };
20870
+ /**
20871
+ * @private
20872
+ */
20873
+ const LocalPreview = (props) => {
20874
+ const locale = useLocale();
20875
+ const cameraButtonProps = usePropsFor$1(CameraButton);
20876
+ const localPreviewProps = useSelector$1(localPreviewSelector);
20877
+ const devicesButtonProps = usePropsFor$1(DevicesButton);
20878
+ const { audio: microphonePermissionGranted, video: cameraPermissionGranted } = useSelector$1(devicePermissionSelector);
20879
+ const isLocalMicrophoneEnabled = useSelector$1(getLocalMicrophoneEnabled);
20880
+ const adapter = useAdapter();
20881
+ const onToggleMic = React.useCallback(() => __awaiter$9(void 0, void 0, void 0, function* () {
20882
+ isLocalMicrophoneEnabled ? adapter.mute() : adapter.unmute();
20883
+ }), [adapter, isLocalMicrophoneEnabled]);
20884
+ const hasNoDevices = devicesButtonProps.cameras.length === 0 &&
20885
+ devicesButtonProps.microphones.length === 0 &&
20886
+ devicesButtonProps.speakers.length === 0;
20887
+ const hasCameras = devicesButtonProps.cameras.length > 0;
20888
+ const hasMicrophones = devicesButtonProps.microphones.length > 0;
20889
+ const theme = useTheme();
20890
+ const onRenderPlaceholder = React.useCallback(() => {
20891
+ return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles({ width: '100%', height: '100%' }), verticalAlign: "center", tokens: { childrenGap: '0.25rem' } },
20892
+ React__default['default'].createElement(react.Stack.Item, { align: "center" },
20893
+ React__default['default'].createElement(CallCompositeIcon, { iconName: "LocalPreviewPlaceholder", className: react.mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralTertiary }) })),
20894
+ React__default['default'].createElement(react.Stack.Item, { align: "center" },
20895
+ React__default['default'].createElement(react.Text, { className: react.mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralSecondary }) }, locale.strings.call.cameraTurnedOff))));
20896
+ }, [theme, locale.strings.call.cameraTurnedOff]);
20897
+ const devicesButtonStyles = props.mobileView
20898
+ ? {
20899
+ menuStyles: {
20900
+ menuItemStyles: buttonFlyoutIncreasedSizeStyles
20901
+ }
20902
+ }
20903
+ : undefined;
20904
+ return (React__default['default'].createElement(react.Stack, { "data-ui-id": "call-composite-local-preview", className: props.mobileView ? localPreviewContainerStyleMobile : localPreviewContainerStyleDesktop },
20905
+ React__default['default'].createElement(VideoTile, { styles: localPreviewTileStyle, renderElement: (localPreviewProps === null || localPreviewProps === void 0 ? void 0 : localPreviewProps.videoStreamElement) ? (React__default['default'].createElement(StreamMedia, { videoStreamElement: localPreviewProps.videoStreamElement })) : undefined, onRenderPlaceholder: onRenderPlaceholder },
20906
+ React__default['default'].createElement(ControlBar, { layout: "floatingBottom" },
20907
+ React__default['default'].createElement(MicrophoneButton, { "data-ui-id": "call-composite-local-device-settings-microphone-button", checked: isLocalMicrophoneEnabled, onToggleMicrophone: onToggleMic, disabled: !microphonePermissionGranted || !hasMicrophones, showLabel: true }),
20908
+ React__default['default'].createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-camera-button" }, cameraButtonProps, { showLabel: true, disabled: !cameraPermissionGranted || !hasCameras })),
20909
+ props.showDevicesButton && (React__default['default'].createElement(DevicesButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-options-button" }, devicesButtonProps, {
20910
+ // disable button whilst all other buttons are disabled
20911
+ disabled: !microphonePermissionGranted || !cameraPermissionGranted || hasNoDevices, showLabel: true, styles: devicesButtonStyles })))))));
20912
+ };
20613
20913
 
20614
20914
  // Copyright (c) Microsoft Corporation.
20615
20915
  /**
@@ -20831,6 +21131,71 @@ const CallReadinessModalFallBack = (props) => {
20831
21131
  }
20832
21132
  };
20833
21133
 
21134
+ var __awaiter$8 = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21135
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
21136
+ return new (P || (P = Promise))(function (resolve, reject) {
21137
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21138
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21139
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
21140
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21141
+ });
21142
+ };
21143
+ /**
21144
+ * Pane that is used to show video effects button
21145
+ * @private
21146
+ */
21147
+ /** @beta */
21148
+ const VideoEffectsPane = (props) => {
21149
+ const { showVideoEffectsOptions, setshowVideoEffectsOptions } = props;
21150
+ /* @conditional-compile-remove(video-background-effects) */
21151
+ const locale = useLocale();
21152
+ /* @conditional-compile-remove(video-background-effects) */
21153
+ const strings = locale.strings.call;
21154
+ /* @conditional-compile-remove(video-background-effects) */
21155
+ const selectableVideoEffects = [
21156
+ {
21157
+ key: 'none',
21158
+ iconProps: {
21159
+ iconName: 'RemoveVideoBackgroundEffect'
21160
+ },
21161
+ title: strings.removeBackgroundEffectButtonLabel,
21162
+ tooltipProps: {
21163
+ content: strings.removeBackgroundTooltip
21164
+ }
21165
+ },
21166
+ {
21167
+ key: 'blur',
21168
+ iconProps: {
21169
+ iconName: 'BlurVideoBackground'
21170
+ },
21171
+ title: strings.blurBackgroundEffectButtonLabel,
21172
+ tooltipProps: {
21173
+ content: strings.blurBackgroundTooltip
21174
+ }
21175
+ }
21176
+ ];
21177
+ /* @conditional-compile-remove(video-background-effects) */
21178
+ const onEffectChange = React.useCallback((effectKey) => __awaiter$8(void 0, void 0, void 0, function* () {
21179
+ if (effectKey === 'blur') {
21180
+ props.adapter.blurVideoBackground();
21181
+ }
21182
+ else if (effectKey === 'none') {
21183
+ props.adapter.stopVideoBackgroundEffect();
21184
+ }
21185
+ }), [props.adapter]);
21186
+ return VideoEffectsPaneTrampoline(showVideoEffectsOptions, setshowVideoEffectsOptions,
21187
+ /* @conditional-compile-remove(video-background-effects) */
21188
+ selectableVideoEffects,
21189
+ /* @conditional-compile-remove(video-background-effects) */
21190
+ onEffectChange);
21191
+ };
21192
+ const VideoEffectsPaneTrampoline = (showVideoEffectsOptions, setshowVideoEffectsOptions, selectableVideoEffects, onEffectChange) => {
21193
+ /* @conditional-compile-remove(video-background-effects) */
21194
+ const locale = useLocale();
21195
+ /* @conditional-compile-remove(video-background-effects) */
21196
+ return (React__default['default'].createElement(react.Panel, { headerText: locale.strings.call.effects, isOpen: showVideoEffectsOptions, onDismiss: () => setshowVideoEffectsOptions(false), hasCloseButton: true, closeButtonAriaLabel: "Close", isLightDismiss: true }, selectableVideoEffects && (React__default['default'].createElement(_VideoBackgroundEffectsPicker, { options: selectableVideoEffects, onChange: onEffectChange }))));
21197
+ };
21198
+
20834
21199
  // Copyright (c) Microsoft Corporation.
20835
21200
  /**
20836
21201
  * @private
@@ -20842,6 +21207,8 @@ const ConfigurationPage = (props) => {
20842
21207
  /* @conditional-compile-remove(call-readiness) */ deviceChecks,
20843
21208
  /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,
20844
21209
  /* @conditional-compile-remove(call-readiness) */ onNetworkingTroubleShootingClick } = props;
21210
+ /* @conditional-compile-remove(video-background-effects) */
21211
+ const [showVideoEffectsPane, setVideoEffectsPane] = React.useState(false);
20845
21212
  const options = useAdaptedSelector(getSelector$1(DevicesButton));
20846
21213
  const localDeviceSettingsHandlers = useHandlers();
20847
21214
  const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector$1(devicePermissionSelector);
@@ -20854,6 +21221,8 @@ const ConfigurationPage = (props) => {
20854
21221
  getDevicePermissionState(setVideoState, setAudioState);
20855
21222
  let errorBarProps = usePropsFor$1(ErrorBar);
20856
21223
  const adapter = useAdapter();
21224
+ /* @conditional-compile-remove(video-background-effects) */
21225
+ const theme = react.useTheme();
20857
21226
  const deviceState = adapter.getState().devices;
20858
21227
  /* @conditional-compile-remove(unsupported-browser) */
20859
21228
  const environmentInfo = adapter.getState().environmentInfo;
@@ -20968,6 +21337,10 @@ const ConfigurationPage = (props) => {
20968
21337
  React__default['default'].createElement(react.Stack.Item, { styles: callDetailsContainerStylesDesktop },
20969
21338
  title,
20970
21339
  callDescription),
21340
+ /* @conditional-compile-remove(video-background-effects) */
21341
+ React__default['default'].createElement(react.DefaultButton, { iconProps: { iconName: 'OptionsVideoBackgroundEffect' }, styles: effectsButtonStyles(theme), onClick: () => {
21342
+ setVideoEffectsPane(!showVideoEffectsPane);
21343
+ } }, locale.strings.call.effects),
20971
21344
  React__default['default'].createElement(LocalDeviceSettings, Object.assign({}, options, localDeviceSettingsHandlers, { cameraPermissionGranted: cameraPermissionGrantedTrampoline(cameraPermissionGranted,
20972
21345
  /* @conditional-compile-remove(call-readiness) */ videoState), microphonePermissionGranted: micPermissionGrantedTrampoline(microphonePermissionGranted,
20973
21346
  /* @conditional-compile-remove(call-readiness) */ audioState),
@@ -20976,7 +21349,9 @@ const ConfigurationPage = (props) => {
20976
21349
  setIsPermissionsModalDismissed(true);
20977
21350
  } })))),
20978
21351
  React__default['default'].createElement(react.Stack, { styles: mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop },
20979
- React__default['default'].createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : undefined, onClick: startCallHandler, disabled: disableStartCallButton }))))));
21352
+ React__default['default'].createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : undefined, onClick: startCallHandler, disabled: disableStartCallButton })))),
21353
+ /* @conditional-compile-remove(video-background-effects) */
21354
+ React__default['default'].createElement(VideoEffectsPane, { showVideoEffectsOptions: showVideoEffectsPane, setshowVideoEffectsOptions: setVideoEffectsPane, adapter: adapter })));
20980
21355
  };
20981
21356
  const localPreviewTrampoline = (mobileView, doNotShow) => {
20982
21357
  /* @conditional-compile-remove(rooms) */
@@ -23102,7 +23477,8 @@ const callCompositeContainerStyles = {
23102
23477
  // Start a new stacking context so that any `position:absolute` elements
23103
23478
  // inside the call composite do not compete with its siblings.
23104
23479
  position: 'relative',
23105
- width: '100%'
23480
+ width: '100%',
23481
+ minWidth: 0
23106
23482
  }
23107
23483
  };
23108
23484
  /** @private */
@@ -23626,20 +24002,6 @@ const CallWithChatPane = (props) => {
23626
24002
  React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setDrawerMenuItems([]), items: drawerMenuItems })))));
23627
24003
  };
23628
24004
 
23629
- // Copyright (c) Microsoft Corporation.
23630
- /**
23631
- * Pane that is used to show video effects button
23632
- * @private
23633
- */
23634
- /** @beta */
23635
- const VideoEffectsPane = (props) => {
23636
- return VideoEffectsPaneTrampoline(props.showVideoEffectsOptions, props.setshowVideoEffectsOptions);
23637
- };
23638
- const VideoEffectsPaneTrampoline = (showVideoEffectsOptions, setshowVideoEffectsOptions) => {
23639
- /* @conditional-compile-remove(video-background-effects) */
23640
- return (React__default['default'].createElement(react.Panel, { headerText: "Effects", isOpen: showVideoEffectsOptions, onDismiss: () => setshowVideoEffectsOptions(false), hasCloseButton: true, closeButtonAriaLabel: "Close", isLightDismiss: true }));
23641
- };
23642
-
23643
24005
  // Copyright (c) Microsoft Corporation.
23644
24006
  const CallWithChatScreen = (props) => {
23645
24007
  const { callWithChatAdapter, fluentTheme, formFactor = 'desktop' } = props;
@@ -23795,7 +24157,7 @@ const CallWithChatScreen = (props) => {
23795
24157
  style: callCompositeContainerCSS },
23796
24158
  React__default['default'].createElement(CallComposite, Object.assign({}, props, { formFactor: formFactor, options: callCompositeOptions, adapter: callAdapter, fluentTheme: fluentTheme }))),
23797
24159
  /* @conditional-compile-remove(video-background-effects) */
23798
- React__default['default'].createElement(VideoEffectsPane, { showVideoEffectsOptions: showVideoEffectsPane, setshowVideoEffectsOptions: setShowVideoEffectsPane }),
24160
+ React__default['default'].createElement(VideoEffectsPane, { showVideoEffectsOptions: showVideoEffectsPane, setshowVideoEffectsOptions: setShowVideoEffectsPane, adapter: callAdapter }),
23799
24161
  chatProps.adapter && callAdapter && hasJoinedCall && (React__default['default'].createElement(CallWithChatPane, { chatCompositeProps: chatProps, inviteLink: props.joinInvitationURL, onClose: closePane, chatAdapter: chatProps.adapter, callAdapter: callAdapter, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.onFetchParticipantMenuItems, onChatButtonClicked: showShowChatTabHeaderButton(props.callControls) ? selectChat : undefined, onPeopleButtonClicked: showShowPeopleTabHeaderButton(props.callControls) ? selectPeople : undefined, modalLayerHostId: modalLayerHostId, mobileView: mobileView, activePane: activePane,
23800
24162
  /* @conditional-compile-remove(file-sharing) */
23801
24163
  fileSharing: props.fileSharing, rtl: props.rtl, callControls: typeof props.callControls !== 'boolean' ? props.callControls : undefined }))),