@azure/communication-react 1.12.1-alpha-202401230013 → 1.12.1-alpha-202401250013

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 (95) hide show
  1. package/dist/communication-react.d.ts +39 -5
  2. package/dist/dist-cjs/communication-react/index.js +769 -494
  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/communication-react/src/index.d.ts +1 -1
  7. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  8. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js +2 -1
  9. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js.map +1 -1
  10. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts +9 -5
  11. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +5 -9
  12. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  13. package/dist/dist-esm/react-components/src/components/FileUploadCards.d.ts +32 -1
  14. package/dist/dist-esm/react-components/src/components/FileUploadCards.js.map +1 -1
  15. package/dist/dist-esm/react-components/src/components/InputBoxButton.d.ts +19 -0
  16. package/dist/dist-esm/react-components/src/components/InputBoxButton.js +32 -0
  17. package/dist/dist-esm/react-components/src/components/InputBoxButton.js.map +1 -0
  18. package/dist/dist-esm/react-components/src/components/InputBoxComponent.d.ts +0 -17
  19. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js +3 -29
  20. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/RTE/RTEInputBoxComponent.d.ts +19 -0
  22. package/dist/dist-esm/react-components/src/components/RTE/RTEInputBoxComponent.js +13 -0
  23. package/dist/dist-esm/react-components/src/components/RTE/RTEInputBoxComponent.js.map +1 -0
  24. package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.d.ts +34 -1
  25. package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.js +45 -3
  26. package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.js.map +1 -1
  27. package/dist/dist-esm/react-components/src/components/RTE/RTESendBoxErrors.d.ts +15 -0
  28. package/dist/dist-esm/react-components/src/components/RTE/RTESendBoxErrors.js +18 -0
  29. package/dist/dist-esm/react-components/src/components/RTE/RTESendBoxErrors.js.map +1 -0
  30. package/dist/dist-esm/react-components/src/components/RTE/RichTextEditor.d.ts +18 -0
  31. package/dist/dist-esm/react-components/src/components/RTE/RichTextEditor.js +40 -0
  32. package/dist/dist-esm/react-components/src/components/RTE/RichTextEditor.js.map +1 -0
  33. package/dist/dist-esm/react-components/src/components/SendBox.d.ts +1 -32
  34. package/dist/dist-esm/react-components/src/components/SendBox.js +33 -30
  35. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.d.ts +0 -17
  37. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js +1 -28
  38. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -1
  40. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/styles/InputBoxButton.style.d.ts +13 -0
  42. package/dist/dist-esm/react-components/src/components/styles/InputBoxButton.style.js +30 -0
  43. package/dist/dist-esm/react-components/src/components/styles/InputBoxButton.style.js.map +1 -0
  44. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.d.ts +0 -16
  45. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js +0 -32
  46. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js.map +1 -1
  47. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.d.ts +5 -0
  48. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +16 -0
  49. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -0
  50. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.d.ts +8 -2
  51. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js +13 -7
  52. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js.map +1 -1
  53. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +10 -0
  54. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +18 -0
  55. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -0
  56. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  57. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +20 -0
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts +2 -0
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +5 -1
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +65 -10
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.d.ts +26 -0
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js +66 -0
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js.map +1 -0
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts +5 -0
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +4 -0
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/DtmfDialpadPage.styles.d.ts +8 -0
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/DtmfDialpadPage.styles.js +18 -0
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/DtmfDialpadPage.styles.js.map +1 -0
  73. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.d.ts +7 -0
  74. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js +13 -0
  75. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js.map +1 -1
  76. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/timerUtils.d.ts +17 -0
  77. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/timerUtils.js +30 -0
  78. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/timerUtils.js.map +1 -0
  79. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.d.ts +2 -0
  80. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +22 -1
  81. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  82. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.d.ts +2 -0
  83. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js +40 -18
  84. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js.map +1 -1
  85. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DtmfDialerButton.d.ts +18 -0
  86. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DtmfDialerButton.js +41 -0
  87. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DtmfDialerButton.js.map +1 -0
  88. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +3 -0
  89. package/dist/dist-esm/react-composites/src/composites/common/icons.js +3 -1
  90. package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
  91. package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.d.ts +6 -0
  92. package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.js.map +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +5 -0
  94. package/dist/tsdoc-metadata.json +1 -1
  95. package/package.json +5 -1
@@ -14,6 +14,9 @@ var textareaCaretTs = require('textarea-caret-ts');
14
14
  var reactComponents = require('@fluentui/react-components');
15
15
  var useDebounce = require('use-debounce');
16
16
  var reactFileTypeIcons = require('@fluentui/react-file-type-icons');
17
+ require('roosterjs-editor-plugins');
18
+ require('roosterjs-editor-core');
19
+ require('roosterjs-react');
17
20
  var uuid = require('uuid');
18
21
  var reactChat = require('@fluentui-contrib/react-chat');
19
22
  var react$1 = require('@griffel/react');
@@ -170,7 +173,7 @@ function getDefaultExportFromCjs (x) {
170
173
  // Copyright (c) Microsoft Corporation.
171
174
  // Licensed under the MIT License.
172
175
  // GENERATED FILE. DO NOT EDIT MANUALLY.
173
- var telemetryVersion = '1.12.1-alpha-202401230013';
176
+ var telemetryVersion = '1.12.1-alpha-202401250013';
174
177
 
175
178
 
176
179
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -522,7 +525,7 @@ const getSupportedSpokenLanguages = (state, props) => {
522
525
 
523
526
  // Copyright (c) Microsoft Corporation.
524
527
  // Licensed under the MIT License.
525
- var __awaiter$N = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
528
+ var __awaiter$O = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
526
529
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
527
530
  return new (P || (P = Promise))(function (resolve, reject) {
528
531
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -561,7 +564,7 @@ const _isPreviewOn = (deviceManager) => {
561
564
  *
562
565
  * @private
563
566
  */
564
- const disposeAllLocalPreviewViews = (callClient) => __awaiter$N(void 0, void 0, void 0, function* () {
567
+ const disposeAllLocalPreviewViews = (callClient) => __awaiter$O(void 0, void 0, void 0, function* () {
565
568
  const unparentedViews = callClient.getState().deviceManager.unparentedViews;
566
569
  for (const view of unparentedViews) {
567
570
  yield callClient.disposeView(undefined, undefined, view);
@@ -769,7 +772,7 @@ const holdButtonSelector = reselect__namespace.createSelector([getCallState], (c
769
772
 
770
773
  // Copyright (c) Microsoft Corporation.
771
774
  // Licensed under the MIT License.
772
- var __awaiter$M = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
775
+ var __awaiter$N = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
773
776
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
774
777
  return new (P || (P = Promise))(function (resolve, reject) {
775
778
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -790,7 +793,7 @@ const areStreamsEqual = (prevStream, newStream) => {
790
793
  * @private
791
794
  */
792
795
  const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager, call, options) => {
793
- const onStartLocalVideo = () => __awaiter$M(void 0, void 0, void 0, function* () {
796
+ const onStartLocalVideo = () => __awaiter$N(void 0, void 0, void 0, function* () {
794
797
  // Before the call object creates a stream, dispose of any local preview streams.
795
798
  // @TODO: is there any way to parent the unparented view to the call object instead
796
799
  // of disposing and creating a new stream?
@@ -810,7 +813,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
810
813
  yield call.startVideo(stream);
811
814
  }
812
815
  });
813
- const onStopLocalVideo = (stream) => __awaiter$M(void 0, void 0, void 0, function* () {
816
+ const onStopLocalVideo = (stream) => __awaiter$N(void 0, void 0, void 0, function* () {
814
817
  const callId = call === null || call === void 0 ? void 0 : call.id;
815
818
  if (!callId) {
816
819
  return;
@@ -819,7 +822,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
819
822
  yield call.stopVideo(stream);
820
823
  }
821
824
  });
822
- const onToggleCamera = (options) => __awaiter$M(void 0, void 0, void 0, function* () {
825
+ const onToggleCamera = (options) => __awaiter$N(void 0, void 0, void 0, function* () {
823
826
  const previewOn = _isPreviewOn(callClient.getState().deviceManager);
824
827
  // the disposal of the unparented views is to workaround: https://skype.visualstudio.com/SPOOL/_workitems/edit/3030558.
825
828
  // The root cause of the issue is caused by never transitioning the unparented view to the
@@ -876,19 +879,19 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
876
879
  }
877
880
  }
878
881
  });
879
- const onSelectMicrophone = (device) => __awaiter$M(void 0, void 0, void 0, function* () {
882
+ const onSelectMicrophone = (device) => __awaiter$N(void 0, void 0, void 0, function* () {
880
883
  if (!deviceManager) {
881
884
  return;
882
885
  }
883
886
  return deviceManager.selectMicrophone(device);
884
887
  });
885
- const onSelectSpeaker = (device) => __awaiter$M(void 0, void 0, void 0, function* () {
888
+ const onSelectSpeaker = (device) => __awaiter$N(void 0, void 0, void 0, function* () {
886
889
  if (!deviceManager) {
887
890
  return;
888
891
  }
889
892
  return deviceManager.selectSpeaker(device);
890
893
  });
891
- const onSelectCamera = (device, options) => __awaiter$M(void 0, void 0, void 0, function* () {
894
+ const onSelectCamera = (device, options) => __awaiter$N(void 0, void 0, void 0, function* () {
892
895
  if (!deviceManager) {
893
896
  return;
894
897
  }
@@ -919,11 +922,11 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
919
922
  }
920
923
  });
921
924
  /* @conditional-compile-remove(raise-hand) */
922
- const onRaiseHand = () => __awaiter$M(void 0, void 0, void 0, function* () { var _a; return yield ((_a = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _a === void 0 ? void 0 : _a.raiseHand()); });
925
+ const onRaiseHand = () => __awaiter$N(void 0, void 0, void 0, function* () { var _a; return yield ((_a = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _a === void 0 ? void 0 : _a.raiseHand()); });
923
926
  /* @conditional-compile-remove(raise-hand) */
924
- const onLowerHand = () => __awaiter$M(void 0, void 0, void 0, function* () { var _b; return yield ((_b = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _b === void 0 ? void 0 : _b.lowerHand()); });
927
+ const onLowerHand = () => __awaiter$N(void 0, void 0, void 0, function* () { var _b; return yield ((_b = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand)) === null || _b === void 0 ? void 0 : _b.lowerHand()); });
925
928
  /* @conditional-compile-remove(raise-hand) */
926
- const onToggleRaiseHand = () => __awaiter$M(void 0, void 0, void 0, function* () {
929
+ const onToggleRaiseHand = () => __awaiter$N(void 0, void 0, void 0, function* () {
927
930
  const raiseHandFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.RaiseHand);
928
931
  const localUserId = callClient.getState().userId;
929
932
  const isLocalRaisedHand = raiseHandFeature === null || raiseHandFeature === void 0 ? void 0 : raiseHandFeature.getRaisedHands().find((publishedState) => toFlatCommunicationIdentifier(publishedState.identifier) === toFlatCommunicationIdentifier(localUserId));
@@ -935,7 +938,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
935
938
  }
936
939
  });
937
940
  /* @conditional-compile-remove(reaction) */
938
- const onReactionClicked = (reaction) => __awaiter$M(void 0, void 0, void 0, function* () {
941
+ const onReactionClicked = (reaction) => __awaiter$N(void 0, void 0, void 0, function* () {
939
942
  var _c;
940
943
  if (reaction === 'like' ||
941
944
  reaction === 'applause' ||
@@ -949,19 +952,19 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
949
952
  }
950
953
  return;
951
954
  });
952
- const onToggleMicrophone = () => __awaiter$M(void 0, void 0, void 0, function* () {
955
+ const onToggleMicrophone = () => __awaiter$N(void 0, void 0, void 0, function* () {
953
956
  if (!call || !(_isInCall(call.state) || _isInLobbyOrConnecting(call.state))) {
954
957
  throw new Error(`Please invoke onToggleMicrophone after call is started`);
955
958
  }
956
959
  return call.isMuted ? yield call.unmute() : yield call.mute();
957
960
  });
958
- const onStartScreenShare = () => __awaiter$M(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
959
- const onStopScreenShare = () => __awaiter$M(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
960
- const onToggleScreenShare = () => __awaiter$M(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
961
- const onHangUp = (forEveryone) => __awaiter$M(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
961
+ const onStartScreenShare = () => __awaiter$N(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.startScreenSharing()); });
962
+ const onStopScreenShare = () => __awaiter$N(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.stopScreenSharing()); });
963
+ const onToggleScreenShare = () => __awaiter$N(void 0, void 0, void 0, function* () { return (call === null || call === void 0 ? void 0 : call.isScreenSharingOn) ? yield onStopScreenShare() : yield onStartScreenShare(); });
964
+ const onHangUp = (forEveryone) => __awaiter$N(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.hangUp({ forEveryone: forEveryone === true ? true : false })); });
962
965
  /* @conditional-compile-remove(PSTN-calls) */
963
- const onToggleHold = () => __awaiter$M(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()); });
964
- const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$M(void 0, void 0, void 0, function* () {
966
+ const onToggleHold = () => __awaiter$N(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()); });
967
+ const onCreateLocalStreamView = (options = { scalingMode: 'Crop', isMirrored: true }) => __awaiter$N(void 0, void 0, void 0, function* () {
965
968
  var _d;
966
969
  if (!call || call.localVideoStreams.length === 0) {
967
970
  return;
@@ -977,7 +980,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
977
980
  const { view } = (_d = (yield callClient.createView(call.id, undefined, localStream, options))) !== null && _d !== void 0 ? _d : {};
978
981
  return view ? { view } : undefined;
979
982
  });
980
- const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$M(void 0, void 0, void 0, function* () {
983
+ const onCreateRemoteStreamView = (userId, options = { scalingMode: 'Crop' }) => __awaiter$N(void 0, void 0, void 0, function* () {
981
984
  if (!call) {
982
985
  return;
983
986
  }
@@ -1008,7 +1011,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1008
1011
  }
1009
1012
  return (createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view) ? { view: createViewResult === null || createViewResult === void 0 ? void 0 : createViewResult.view } : undefined;
1010
1013
  });
1011
- const onDisposeRemoteStreamView = (userId) => __awaiter$M(void 0, void 0, void 0, function* () {
1014
+ const onDisposeRemoteStreamView = (userId) => __awaiter$N(void 0, void 0, void 0, function* () {
1012
1015
  if (!call) {
1013
1016
  return;
1014
1017
  }
@@ -1029,7 +1032,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1029
1032
  callClient.disposeView(call.id, participant.identifier, screenShareStream);
1030
1033
  }
1031
1034
  });
1032
- const onDisposeRemoteVideoStreamView = (userId) => __awaiter$M(void 0, void 0, void 0, function* () {
1035
+ const onDisposeRemoteVideoStreamView = (userId) => __awaiter$N(void 0, void 0, void 0, function* () {
1033
1036
  if (!call) {
1034
1037
  return;
1035
1038
  }
@@ -1046,7 +1049,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1046
1049
  callClient.disposeView(call.id, participant.identifier, remoteVideoStream);
1047
1050
  }
1048
1051
  });
1049
- const onDisposeRemoteScreenShareStreamView = (userId) => __awaiter$M(void 0, void 0, void 0, function* () {
1052
+ const onDisposeRemoteScreenShareStreamView = (userId) => __awaiter$N(void 0, void 0, void 0, function* () {
1050
1053
  if (!call) {
1051
1054
  return;
1052
1055
  }
@@ -1063,7 +1066,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1063
1066
  callClient.disposeView(call.id, participant.identifier, screenShareStream);
1064
1067
  }
1065
1068
  });
1066
- const onDisposeLocalStreamView = () => __awaiter$M(void 0, void 0, void 0, function* () {
1069
+ const onDisposeLocalStreamView = () => __awaiter$N(void 0, void 0, void 0, function* () {
1067
1070
  // If the user is currently in a call, dispose of the local stream view attached to that call.
1068
1071
  const callState = call && callClient.getState().calls[call.id];
1069
1072
  const localStream = callState === null || callState === void 0 ? void 0 : callState.localVideoStreams.find((item) => item.mediaStreamType === 'Video');
@@ -1076,18 +1079,18 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1076
1079
  yield disposeAllLocalPreviewViews(callClient);
1077
1080
  });
1078
1081
  /* @conditional-compile-remove(dialpad) */ /* @conditional-compile-remove(PSTN-calls) */
1079
- const onSendDtmfTone = (dtmfTone) => __awaiter$M(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
1082
+ const onSendDtmfTone = (dtmfTone) => __awaiter$N(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.sendDtmf(dtmfTone)); });
1080
1083
  const notImplemented = () => {
1081
1084
  throw new Error('Not implemented, cannot call a method from an abstract object');
1082
1085
  };
1083
1086
  /* @conditional-compile-remove(call-readiness) */
1084
- const askDevicePermission = (constrain) => __awaiter$M(void 0, void 0, void 0, function* () {
1087
+ const askDevicePermission = (constrain) => __awaiter$N(void 0, void 0, void 0, function* () {
1085
1088
  if (deviceManager) {
1086
1089
  yield (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.askDevicePermission(constrain));
1087
1090
  }
1088
1091
  });
1089
1092
  /* @conditional-compile-remove(video-background-effects) */
1090
- const onRemoveVideoBackgroundEffects = () => __awaiter$M(void 0, void 0, void 0, function* () {
1093
+ const onRemoveVideoBackgroundEffects = () => __awaiter$N(void 0, void 0, void 0, function* () {
1091
1094
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
1092
1095
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
1093
1096
  if (stream) {
@@ -1100,7 +1103,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1100
1103
  }
1101
1104
  });
1102
1105
  /* @conditional-compile-remove(video-background-effects) */
1103
- const onBlurVideoBackground = (backgroundBlurConfig) => __awaiter$M(void 0, void 0, void 0, function* () {
1106
+ const onBlurVideoBackground = (backgroundBlurConfig) => __awaiter$N(void 0, void 0, void 0, function* () {
1104
1107
  var _e;
1105
1108
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
1106
1109
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
@@ -1114,7 +1117,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1114
1117
  }
1115
1118
  });
1116
1119
  /* @conditional-compile-remove(video-background-effects) */
1117
- const onReplaceVideoBackground = (backgroundReplacementConfig) => __awaiter$M(void 0, void 0, void 0, function* () {
1120
+ const onReplaceVideoBackground = (backgroundReplacementConfig) => __awaiter$N(void 0, void 0, void 0, function* () {
1118
1121
  var _f;
1119
1122
  const stream = (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) ||
1120
1123
  (deviceManager === null || deviceManager === void 0 ? void 0 : deviceManager.getUnparentedVideoStreams().find((stream) => stream.mediaStreamType === 'Video'));
@@ -1128,34 +1131,34 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1128
1131
  }
1129
1132
  });
1130
1133
  /* @conditional-compile-remove(close-captions) */
1131
- const onStartCaptions = (options) => __awaiter$M(void 0, void 0, void 0, function* () {
1134
+ const onStartCaptions = (options) => __awaiter$N(void 0, void 0, void 0, function* () {
1132
1135
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1133
1136
  yield (captionsFeature === null || captionsFeature === void 0 ? void 0 : captionsFeature.startCaptions(options));
1134
1137
  });
1135
1138
  /* @conditional-compile-remove(close-captions) */
1136
- const onStopCaptions = () => __awaiter$M(void 0, void 0, void 0, function* () {
1139
+ const onStopCaptions = () => __awaiter$N(void 0, void 0, void 0, function* () {
1137
1140
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1138
1141
  yield (captionsFeature === null || captionsFeature === void 0 ? void 0 : captionsFeature.stopCaptions());
1139
1142
  });
1140
1143
  /* @conditional-compile-remove(close-captions) */
1141
- const onSetSpokenLanguage = (language) => __awaiter$M(void 0, void 0, void 0, function* () {
1144
+ const onSetSpokenLanguage = (language) => __awaiter$N(void 0, void 0, void 0, function* () {
1142
1145
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1143
1146
  yield (captionsFeature === null || captionsFeature === void 0 ? void 0 : captionsFeature.setSpokenLanguage(language));
1144
1147
  });
1145
1148
  /* @conditional-compile-remove(close-captions) */
1146
- const onSetCaptionLanguage = (language) => __awaiter$M(void 0, void 0, void 0, function* () {
1149
+ const onSetCaptionLanguage = (language) => __awaiter$N(void 0, void 0, void 0, function* () {
1147
1150
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1148
1151
  yield captionsFeature.setCaptionLanguage(language);
1149
1152
  });
1150
1153
  /* @conditional-compile-remove(end-of-call-survey) */
1151
- const onSubmitSurvey = (survey) => __awaiter$M(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.CallSurvey).submitSurvey(survey)); });
1154
+ const onSubmitSurvey = (survey) => __awaiter$N(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.CallSurvey).submitSurvey(survey)); });
1152
1155
  /* @conditional-compile-remove(spotlight) */
1153
- const onStartSpotlight = (userId) => __awaiter$M(void 0, void 0, void 0, function* () {
1156
+ const onStartSpotlight = (userId) => __awaiter$N(void 0, void 0, void 0, function* () {
1154
1157
  const participant = _toCommunicationIdentifier(userId);
1155
1158
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).startSpotlight([participant]));
1156
1159
  });
1157
1160
  /* @conditional-compile-remove(spotlight) */
1158
- const onStopSpotlight = (userId) => __awaiter$M(void 0, void 0, void 0, function* () {
1161
+ const onStopSpotlight = (userId) => __awaiter$N(void 0, void 0, void 0, function* () {
1159
1162
  const participant = _toCommunicationIdentifier(userId);
1160
1163
  yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Spotlight).stopSpotlight([participant]));
1161
1164
  });
@@ -1218,7 +1221,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1218
1221
 
1219
1222
  // Copyright (c) Microsoft Corporation.
1220
1223
  // Licensed under the MIT License.
1221
- var __awaiter$L = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1224
+ var __awaiter$M = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1222
1225
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1223
1226
  return new (P || (P = Promise))(function (resolve, reject) {
1224
1227
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1246,7 +1249,7 @@ const createDefaultCallingHandlers = memoizeOne((...args) => {
1246
1249
  return callAgent === null || callAgent === void 0 ? void 0 : callAgent.startCall(participants, options);
1247
1250
  },
1248
1251
  /* @conditional-compile-remove(PSTN-calls) */
1249
- onAddParticipant: (userId, options) => __awaiter$L(void 0, void 0, void 0, function* () {
1252
+ onAddParticipant: (userId, options) => __awaiter$M(void 0, void 0, void 0, function* () {
1250
1253
  const participant = _toCommunicationIdentifier(userId);
1251
1254
  if (communicationCommon.isPhoneNumberIdentifier(participant)) {
1252
1255
  call === null || call === void 0 ? void 0 : call.addParticipant(participant, options);
@@ -1254,7 +1257,7 @@ const createDefaultCallingHandlers = memoizeOne((...args) => {
1254
1257
  else if (communicationCommon.isCommunicationUserIdentifier(participant) || communicationCommon.isMicrosoftTeamsUserIdentifier(participant)) {
1255
1258
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
1256
1259
  }
1257
- }), onRemoveParticipant: (userId) => __awaiter$L(void 0, void 0, void 0, function* () {
1260
+ }), onRemoveParticipant: (userId) => __awaiter$M(void 0, void 0, void 0, function* () {
1258
1261
  const participant = _toCommunicationIdentifier(userId);
1259
1262
  yield (call === null || call === void 0 ? void 0 : call.removeParticipant(participant));
1260
1263
  }) });
@@ -1262,7 +1265,7 @@ const createDefaultCallingHandlers = memoizeOne((...args) => {
1262
1265
 
1263
1266
  // Copyright (c) Microsoft Corporation.
1264
1267
  // Licensed under the MIT License.
1265
- var __awaiter$K = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1268
+ var __awaiter$L = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1266
1269
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1267
1270
  return new (P || (P = Promise))(function (resolve, reject) {
1268
1271
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1294,7 +1297,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne((callClient, callAgent, dev
1294
1297
  },
1295
1298
  /* @conditional-compile-remove(teams-identity-support) */
1296
1299
  /* @conditional-compile-remove(PSTN-calls) */
1297
- onAddParticipant: (userId, options) => __awaiter$K(void 0, void 0, void 0, function* () {
1300
+ onAddParticipant: (userId, options) => __awaiter$L(void 0, void 0, void 0, function* () {
1298
1301
  const participant = _toCommunicationIdentifier(userId);
1299
1302
  /* @conditional-compile-remove(teams-identity-support) */
1300
1303
  const threadId = options === null || options === void 0 ? void 0 : options.threadId;
@@ -1310,7 +1313,7 @@ const createDefaultTeamsCallingHandlers = memoizeOne((callClient, callAgent, dev
1310
1313
  }
1311
1314
  /* @conditional-compile-remove(teams-identity-support) */
1312
1315
  call === null || call === void 0 ? void 0 : call.addParticipant(participant);
1313
- }), onRemoveParticipant: (userId) => __awaiter$K(void 0, void 0, void 0, function* () {
1316
+ }), onRemoveParticipant: (userId) => __awaiter$L(void 0, void 0, void 0, function* () {
1314
1317
  const participant = _toCommunicationIdentifier(userId);
1315
1318
  if (communicationCommon.isCommunicationUserIdentifier(participant)) {
1316
1319
  throw new Error('CommunicationIdentifier in Teams call is not supported!');
@@ -1401,7 +1404,7 @@ const getCaptionsSpeakerIdentifier = (captions) => {
1401
1404
 
1402
1405
  // Copyright (c) Microsoft Corporation.
1403
1406
  // Licensed under the MIT License.
1404
- var __awaiter$J = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1407
+ var __awaiter$K = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1405
1408
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1406
1409
  return new (P || (P = Promise))(function (resolve, reject) {
1407
1410
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -1450,13 +1453,13 @@ class ProxyDeviceManager {
1450
1453
  this.selectCamera = (videoDeviceInfo) => {
1451
1454
  this._context.setDeviceManagerSelectedCamera(videoDeviceInfo);
1452
1455
  };
1453
- this.videoDevicesUpdated = () => __awaiter$J(this, void 0, void 0, function* () {
1456
+ this.videoDevicesUpdated = () => __awaiter$K(this, void 0, void 0, function* () {
1454
1457
  // Device Manager always has a camera with '' name if there are no real camera devices available.
1455
1458
  // We don't want to show that in the UI.
1456
1459
  const realCameras = (yield this._deviceManager.getCameras()).filter((c) => !!c.name);
1457
1460
  this._context.setDeviceManagerCameras(dedupeById(realCameras));
1458
1461
  });
1459
- this.audioDevicesUpdated = () => __awaiter$J(this, void 0, void 0, function* () {
1462
+ this.audioDevicesUpdated = () => __awaiter$K(this, void 0, void 0, function* () {
1460
1463
  this._context.setDeviceManagerMicrophones(dedupeById(yield this._deviceManager.getMicrophones()));
1461
1464
  this._context.setDeviceManagerSpeakers(dedupeById(yield this._deviceManager.getSpeakers()));
1462
1465
  });
@@ -1857,7 +1860,7 @@ function convertFromSDKToRaisedHandState(raisedHand) {
1857
1860
 
1858
1861
  // Copyright (c) Microsoft Corporation.
1859
1862
  // Licensed under the MIT License.
1860
- var __awaiter$I = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1863
+ var __awaiter$J = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
1861
1864
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1862
1865
  return new (P || (P = Promise))(function (resolve, reject) {
1863
1866
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -2676,7 +2679,7 @@ let CallContext$2 = class CallContext {
2676
2679
  * @throws CallError. Exceptions thrown from `f` are tagged with the failed `target.
2677
2680
  */
2678
2681
  withAsyncErrorTeedToState(action, target) {
2679
- return (...args) => __awaiter$I(this, void 0, void 0, function* () {
2682
+ return (...args) => __awaiter$J(this, void 0, void 0, function* () {
2680
2683
  try {
2681
2684
  return yield action(...args);
2682
2685
  }
@@ -3130,7 +3133,7 @@ function _logStreamEvent(eventName, streamLogInfo, error) {
3130
3133
 
3131
3134
  // Copyright (c) Microsoft Corporation.
3132
3135
  // Licensed under the MIT License.
3133
- var __awaiter$H = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3136
+ var __awaiter$I = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
3134
3137
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3135
3138
  return new (P || (P = Promise))(function (resolve, reject) {
3136
3139
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -3140,7 +3143,7 @@ var __awaiter$H = (window && window.__awaiter) || function (thisArg, _arguments,
3140
3143
  });
3141
3144
  };
3142
3145
  function createViewVideo(context, internalContext, callId, stream, participantId, options) {
3143
- return __awaiter$H(this, void 0, void 0, function* () {
3146
+ return __awaiter$I(this, void 0, void 0, function* () {
3144
3147
  // we can only have 3 types of createView
3145
3148
  let streamEventType;
3146
3149
  // we will reuse these for local as well but we need to make sure the remote stream is passed in like before.
@@ -3269,7 +3272,7 @@ function createViewVideo(context, internalContext, callId, stream, participantId
3269
3272
  });
3270
3273
  }
3271
3274
  function createViewUnparentedVideo(context, internalContext, stream, options) {
3272
- return __awaiter$H(this, void 0, void 0, function* () {
3275
+ return __awaiter$I(this, void 0, void 0, function* () {
3273
3276
  const renderInfo = internalContext.getUnparentedRenderInfo(stream);
3274
3277
  if (renderInfo && renderInfo.status === 'Rendered') {
3275
3278
  console.warn('Unparented LocalVideoStream is already rendered');
@@ -3438,7 +3441,7 @@ function createView(context, internalContext, callId, participantId, stream, opt
3438
3441
  // Render LocalVideoStream that is not part of a Call
3439
3442
  // 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).
3440
3443
  // We do not have a startLocalPreviewVideo function, so as a workaround we ensure any errors are propagated here.
3441
- return context.withAsyncErrorTeedToState(() => __awaiter$H(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
3444
+ return context.withAsyncErrorTeedToState(() => __awaiter$I(this, void 0, void 0, function* () { return yield createViewUnparentedVideo(context, internalContext, stream, options); }), 'Call.startVideo')();
3442
3445
  }
3443
3446
  else {
3444
3447
  _logStreamEvent(EventNames.CREATE_STREAM_INVALID_PARAMS, { streamType });
@@ -4048,7 +4051,7 @@ class CallSubscriber {
4048
4051
 
4049
4052
  // Copyright (c) Microsoft Corporation.
4050
4053
  // Licensed under the MIT License.
4051
- var __awaiter$G = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4054
+ var __awaiter$H = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4052
4055
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4053
4056
  return new (P || (P = Promise))(function (resolve, reject) {
4054
4057
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4068,14 +4071,14 @@ class ProxyIncomingCall {
4068
4071
  switch (prop) {
4069
4072
  case 'accept': {
4070
4073
  return this._context.withAsyncErrorTeedToState(function (...args) {
4071
- return __awaiter$G(this, void 0, void 0, function* () {
4074
+ return __awaiter$H(this, void 0, void 0, function* () {
4072
4075
  return yield target.accept(...args);
4073
4076
  });
4074
4077
  }, 'IncomingCall.accept');
4075
4078
  }
4076
4079
  case 'reject': {
4077
4080
  return this._context.withAsyncErrorTeedToState(function (...args) {
4078
- return __awaiter$G(this, void 0, void 0, function* () {
4081
+ return __awaiter$H(this, void 0, void 0, function* () {
4079
4082
  return yield target.reject(...args);
4080
4083
  });
4081
4084
  }, 'IncomingCall.reject');
@@ -4316,7 +4319,7 @@ const clearCallRelatedState = (context, internalContext) => {
4316
4319
 
4317
4320
  // Copyright (c) Microsoft Corporation.
4318
4321
  // Licensed under the MIT License.
4319
- var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4322
+ var __awaiter$G = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4320
4323
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4321
4324
  return new (P || (P = Promise))(function (resolve, reject) {
4322
4325
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4342,56 +4345,56 @@ class ProxyCallCommon {
4342
4345
  switch (prop) {
4343
4346
  case 'mute': {
4344
4347
  return this._context.withAsyncErrorTeedToState(function (...args) {
4345
- return __awaiter$F(this, void 0, void 0, function* () {
4348
+ return __awaiter$G(this, void 0, void 0, function* () {
4346
4349
  return yield target.mute(...args);
4347
4350
  });
4348
4351
  }, 'Call.mute');
4349
4352
  }
4350
4353
  case 'unmute': {
4351
4354
  return this._context.withAsyncErrorTeedToState(function (...args) {
4352
- return __awaiter$F(this, void 0, void 0, function* () {
4355
+ return __awaiter$G(this, void 0, void 0, function* () {
4353
4356
  return yield target.unmute(...args);
4354
4357
  });
4355
4358
  }, 'Call.unmute');
4356
4359
  }
4357
4360
  case 'startVideo': {
4358
4361
  return this._context.withAsyncErrorTeedToState(function (...args) {
4359
- return __awaiter$F(this, void 0, void 0, function* () {
4362
+ return __awaiter$G(this, void 0, void 0, function* () {
4360
4363
  return yield target.startVideo(...args);
4361
4364
  });
4362
4365
  }, 'Call.startVideo');
4363
4366
  }
4364
4367
  case 'stopVideo': {
4365
4368
  return this._context.withAsyncErrorTeedToState(function (...args) {
4366
- return __awaiter$F(this, void 0, void 0, function* () {
4369
+ return __awaiter$G(this, void 0, void 0, function* () {
4367
4370
  return yield target.stopVideo(...args);
4368
4371
  });
4369
4372
  }, 'Call.stopVideo');
4370
4373
  }
4371
4374
  case 'startScreenSharing': {
4372
4375
  return this._context.withAsyncErrorTeedToState(function (...args) {
4373
- return __awaiter$F(this, void 0, void 0, function* () {
4376
+ return __awaiter$G(this, void 0, void 0, function* () {
4374
4377
  return yield target.startScreenSharing(...args);
4375
4378
  });
4376
4379
  }, 'Call.startScreenSharing');
4377
4380
  }
4378
4381
  case 'stopScreenSharing': {
4379
4382
  return this._context.withAsyncErrorTeedToState(function (...args) {
4380
- return __awaiter$F(this, void 0, void 0, function* () {
4383
+ return __awaiter$G(this, void 0, void 0, function* () {
4381
4384
  return yield target.stopScreenSharing(...args);
4382
4385
  });
4383
4386
  }, 'Call.stopScreenSharing');
4384
4387
  }
4385
4388
  case 'hold': {
4386
4389
  return this._context.withAsyncErrorTeedToState(function (...args) {
4387
- return __awaiter$F(this, void 0, void 0, function* () {
4390
+ return __awaiter$G(this, void 0, void 0, function* () {
4388
4391
  return yield target.hold(...args);
4389
4392
  });
4390
4393
  }, 'Call.hold');
4391
4394
  }
4392
4395
  case 'resume': {
4393
4396
  return this._context.withAsyncErrorTeedToState(function (...args) {
4394
- return __awaiter$F(this, void 0, void 0, function* () {
4397
+ return __awaiter$G(this, void 0, void 0, function* () {
4395
4398
  return yield target.resume(...args);
4396
4399
  });
4397
4400
  }, 'Call.resume');
@@ -4431,7 +4434,7 @@ class ProxyTeamsCaptions {
4431
4434
  get(target, prop) {
4432
4435
  switch (prop) {
4433
4436
  case 'startCaptions':
4434
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$F(this, void 0, void 0, function* () {
4437
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$G(this, void 0, void 0, function* () {
4435
4438
  var _a, _b;
4436
4439
  this._context.setStartCaptionsInProgress(this._call.id, true);
4437
4440
  const ret = yield target.startCaptions(...args);
@@ -4439,7 +4442,7 @@ class ProxyTeamsCaptions {
4439
4442
  return ret;
4440
4443
  }), 'Call.feature');
4441
4444
  case 'stopCaptions':
4442
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$F(this, void 0, void 0, function* () {
4445
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$G(this, void 0, void 0, function* () {
4443
4446
  const ret = yield target.stopCaptions(...args);
4444
4447
  this._context.setIsCaptionActive(this._call.id, false);
4445
4448
  this._context.setStartCaptionsInProgress(this._call.id, false);
@@ -4447,13 +4450,13 @@ class ProxyTeamsCaptions {
4447
4450
  return ret;
4448
4451
  }), 'Call.feature');
4449
4452
  case 'setSpokenLanguage':
4450
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$F(this, void 0, void 0, function* () {
4453
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$G(this, void 0, void 0, function* () {
4451
4454
  const ret = yield target.setSpokenLanguage(...args);
4452
4455
  this._context.setSelectedSpokenLanguage(this._call.id, args[0]);
4453
4456
  return ret;
4454
4457
  }), 'Call.feature');
4455
4458
  case 'setCaptionLanguage':
4456
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$F(this, void 0, void 0, function* () {
4459
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$G(this, void 0, void 0, function* () {
4457
4460
  const ret = yield target.setCaptionLanguage(...args);
4458
4461
  this._context.setSelectedCaptionLanguage(this._call.id, args[0]);
4459
4462
  return ret;
@@ -4501,7 +4504,7 @@ class ProxyTransferCallFeature {
4501
4504
 
4502
4505
  // Copyright (c) Microsoft Corporation.
4503
4506
  // Licensed under the MIT License.
4504
- var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4507
+ var __awaiter$F = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4505
4508
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4506
4509
  return new (P || (P = Promise))(function (resolve, reject) {
4507
4510
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4515,7 +4518,7 @@ class ProxyCall extends ProxyCallCommon {
4515
4518
  switch (prop) {
4516
4519
  case 'addParticipant': {
4517
4520
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
4518
- return __awaiter$E(this, void 0, void 0, function* () {
4521
+ return __awaiter$F(this, void 0, void 0, function* () {
4519
4522
  return yield target.addParticipant(...args);
4520
4523
  });
4521
4524
  }, 'Call.addParticipant');
@@ -4753,7 +4756,7 @@ class InternalCallContext {
4753
4756
 
4754
4757
  // Copyright (c) Microsoft Corporation.
4755
4758
  // Licensed under the MIT License.
4756
- var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4759
+ var __awaiter$E = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4757
4760
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4758
4761
  return new (P || (P = Promise))(function (resolve, reject) {
4759
4762
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4768,7 +4771,7 @@ class ProxyTeamsCall extends ProxyCallCommon {
4768
4771
  switch (prop) {
4769
4772
  case 'addParticipant': {
4770
4773
  return this.getContext().withAsyncErrorTeedToState(function (...args) {
4771
- return __awaiter$D(this, void 0, void 0, function* () {
4774
+ return __awaiter$E(this, void 0, void 0, function* () {
4772
4775
  return yield target.addParticipant(...args);
4773
4776
  });
4774
4777
  }, 'TeamsCall.addParticipant');
@@ -4885,7 +4888,7 @@ const teamsCallAgentDeclaratify = (callAgent, context, internalContext) => {
4885
4888
 
4886
4889
  // Copyright (c) Microsoft Corporation.
4887
4890
  // Licensed under the MIT License.
4888
- var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4891
+ var __awaiter$D = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4889
4892
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4890
4893
  return new (P || (P = Promise))(function (resolve, reject) {
4891
4894
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4907,7 +4910,7 @@ class ProxyVideoStreamRendererView {
4907
4910
  get(target, prop) {
4908
4911
  switch (prop) {
4909
4912
  case 'updateScalingMode': {
4910
- return (...args) => __awaiter$C(this, void 0, void 0, function* () {
4913
+ return (...args) => __awaiter$D(this, void 0, void 0, function* () {
4911
4914
  yield target.updateScalingMode(...args);
4912
4915
  this._context.setRemoteVideoStreamViewScalingMode(this._callId, this._participantId, this._streamId, args[0]);
4913
4916
  });
@@ -4928,7 +4931,7 @@ const videoStreamRendererViewDeclaratify = (view, context, callId, participantId
4928
4931
 
4929
4932
  // Copyright (c) Microsoft Corporation.
4930
4933
  // Licensed under the MIT License.
4931
- var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4934
+ var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
4932
4935
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4933
4936
  return new (P || (P = Promise))(function (resolve, reject) {
4934
4937
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -4950,7 +4953,7 @@ class ProxyCallClient {
4950
4953
  get(target, prop) {
4951
4954
  switch (prop) {
4952
4955
  case 'createCallAgent': {
4953
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
4956
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$C(this, void 0, void 0, function* () {
4954
4957
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
4955
4958
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
4956
4959
  // callAgent if the createCallAgent succeeds.
@@ -4963,7 +4966,7 @@ class ProxyCallClient {
4963
4966
  }), 'CallClient.createCallAgent');
4964
4967
  }
4965
4968
  case 'createTeamsCallAgent': {
4966
- /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$B(this, void 0, void 0, function* () {
4969
+ /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$C(this, void 0, void 0, function* () {
4967
4970
  // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous
4968
4971
  // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative
4969
4972
  // callAgent if the createCallAgent succeeds.
@@ -4976,7 +4979,7 @@ class ProxyCallClient {
4976
4979
  }), 'CallClient.createTeamsCallAgent');
4977
4980
  }
4978
4981
  case 'getDeviceManager': {
4979
- return this._context.withAsyncErrorTeedToState(() => __awaiter$B(this, void 0, void 0, function* () {
4982
+ return this._context.withAsyncErrorTeedToState(() => __awaiter$C(this, void 0, void 0, function* () {
4980
4983
  // As of writing, the SDK always returns the same instance of DeviceManager so we keep a reference of
4981
4984
  // DeviceManager and if it does not change we return the cached DeclarativeDeviceManager. If it does not we'll
4982
4985
  // throw an error that indicate we need to fix this issue as our implementation has diverged from the SDK.
@@ -5005,7 +5008,7 @@ class ProxyCallClient {
5005
5008
  /**
5006
5009
  * add to this object if we want to proxy anything else off the DebugInfo feature object.
5007
5010
  */
5008
- return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$B(this, void 0, void 0, function* () {
5011
+ return Object.assign(Object.assign({}, feature), { getEnvironmentInfo: () => __awaiter$C(this, void 0, void 0, function* () {
5009
5012
  const environmentInfo = yield feature.getEnvironmentInfo();
5010
5013
  this._context.setEnvironmentInfo(environmentInfo);
5011
5014
  return environmentInfo;
@@ -5066,7 +5069,7 @@ const createStatefulCallClientWithDeps = (callClient, context, internalContext)
5066
5069
  });
5067
5070
  Object.defineProperty(callClient, 'createView', {
5068
5071
  configurable: false,
5069
- value: (callId, participantId, stream, options) => __awaiter$B(void 0, void 0, void 0, function* () {
5072
+ value: (callId, participantId, stream, options) => __awaiter$C(void 0, void 0, void 0, function* () {
5070
5073
  const participantIdKind = participantId ? communicationCommon.getIdentifierKind(participantId) : undefined;
5071
5074
  const result = yield createView(context, internalContext, callId, participantIdKind, stream, options);
5072
5075
  // We only need to declaratify the VideoStreamRendererView object for remote participants. Because the updateScalingMode only needs to be called on remote participant stream views.
@@ -6029,11 +6032,17 @@ const sendButtonStyle = react.mergeStyles({
6029
6032
  /**
6030
6033
  * @private
6031
6034
  */
6032
- const sendIconStyle = react.mergeStyles({
6033
- width: '1.25rem',
6034
- height: '1.25rem',
6035
- margin: 'auto'
6036
- });
6035
+ const sendIconStyle = (props) => {
6036
+ const { theme, hasText,
6037
+ /* @conditional-compile-remove(file-sharing) */ hasFile, hasErrorMessage, customSendIconStyle } = props;
6038
+ const hasNoContent = !hasText && /* @conditional-compile-remove(file-sharing) */ !hasFile;
6039
+ return react.mergeStyles({
6040
+ width: '1.25rem',
6041
+ height: '1.25rem',
6042
+ margin: 'auto',
6043
+ color: hasErrorMessage || hasNoContent ? theme.palette.neutralTertiary : theme.palette.themePrimary
6044
+ }, customSendIconStyle);
6045
+ };
6037
6046
  /**
6038
6047
  * @private
6039
6048
  */
@@ -6066,7 +6075,7 @@ const borderAndBoxShadowStyle = (props) => {
6066
6075
  const borderColorActive = hasErrorMessage ? theme.semanticColors.errorText : theme.palette.themePrimary;
6067
6076
  const borderThickness = disabled ? 0 : defaultSendBoxInactiveBorderThicknessREM;
6068
6077
  const borderActiveThickness = disabled ? 0 : defaultSendBoxActiveBorderThicknessREM;
6069
- return {
6078
+ return react.mergeStyles({
6070
6079
  borderRadius: theme.effects.roundedCorner4,
6071
6080
  border: `${borderThickness}rem solid ${borderColor}`,
6072
6081
  // The border thickness of the sendbox wrapper changes on hover, to prevent the border thickness change causing the
@@ -6076,7 +6085,7 @@ const borderAndBoxShadowStyle = (props) => {
6076
6085
  border: `${borderActiveThickness}rem solid ${borderColorActive}`,
6077
6086
  margin: `${defaultSendBoxActiveBorderThicknessREM - borderActiveThickness}rem`
6078
6087
  }
6079
- };
6088
+ });
6080
6089
  };
6081
6090
 
6082
6091
  // Copyright (c) Microsoft Corporation.
@@ -6544,57 +6553,6 @@ const textFieldStyle = {
6544
6553
  borderRadius: '0.25rem'
6545
6554
  }
6546
6555
  };
6547
- /**
6548
- * @private
6549
- */
6550
- const inputButtonStyle = react.mergeStyles({
6551
- color: 'grey',
6552
- margin: 'auto',
6553
- width: '1.0625rem',
6554
- height: '1.0625rem',
6555
- backgroundColor: 'transparent',
6556
- '&:hover': {
6557
- backgroundColor: 'transparent'
6558
- }
6559
- });
6560
- /**
6561
- * @private
6562
- */
6563
- const inputButtonTooltipStyle = react.mergeStyles({
6564
- // The toolTip host container show be a flex box, so that alignItems: 'center' works for inside buttons
6565
- display: 'flex'
6566
- });
6567
- /**
6568
- * @private
6569
- */
6570
- const iconWrapperStyle$1 = react.mergeStyles({
6571
- pointerEvents: 'none'
6572
- });
6573
-
6574
- // Copyright (c) Microsoft Corporation.
6575
- // Licensed under the MIT License.
6576
- /**
6577
- * @private
6578
- */
6579
- const isDarkThemed = (theme) => {
6580
- const themeBlackBrightness = getPerceptualBrightnessOfHexColor(theme.palette.black);
6581
- const themeWhiteBrightness = getPerceptualBrightnessOfHexColor(theme.palette.white);
6582
- if (Number.isNaN(themeBlackBrightness) || Number.isNaN(themeWhiteBrightness)) {
6583
- return false;
6584
- }
6585
- return themeBlackBrightness > themeWhiteBrightness;
6586
- };
6587
- const getPerceptualBrightnessOfHexColor = (hexColor) => {
6588
- // return NaN if hexColor is not a hex code
6589
- if (!/^#[0-9A-Fa-f]{6}$/i.test(hexColor)) {
6590
- return NaN;
6591
- }
6592
- const r = parseInt(hexColor.substring(1, 3), 16);
6593
- const g = parseInt(hexColor.substring(3, 5), 16);
6594
- const b = parseInt(hexColor.substring(5, 7), 16);
6595
- // arithmetic mean μ of the red, green, and blue color coordinates. Source: https://en.wikipedia.org/wiki/Brightness
6596
- return (r + g + b) / 3;
6597
- };
6598
6556
 
6599
6557
  // Copyright (c) Microsoft Corporation.
6600
6558
  // Licensed under the MIT License.
@@ -7660,7 +7618,7 @@ const _MentionPopover = (props) => {
7660
7618
 
7661
7619
  // Copyright (c) Microsoft Corporation.
7662
7620
  // Licensed under the MIT License.
7663
- var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7621
+ var __awaiter$B = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
7664
7622
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7665
7623
  return new (P || (P = Promise))(function (resolve, reject) {
7666
7624
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -7846,7 +7804,7 @@ const TextFieldWithMention = (props) => {
7846
7804
  onSuggestionSelected,
7847
7805
  updateMentionSuggestions
7848
7806
  ]);
7849
- const debouncedQueryUpdate = useDebounce.useDebouncedCallback((query) => __awaiter$A(void 0, void 0, void 0, function* () {
7807
+ const debouncedQueryUpdate = useDebounce.useDebouncedCallback((query) => __awaiter$B(void 0, void 0, void 0, function* () {
7850
7808
  var _a;
7851
7809
  let suggestions = (_a = (yield (mentionLookupOptions === null || mentionLookupOptions === void 0 ? void 0 : mentionLookupOptions.onQueryUpdated(query)))) !== null && _a !== void 0 ? _a : [];
7852
7810
  suggestions = suggestions.filter((suggestion) => suggestion.displayText.trim() !== '');
@@ -8023,7 +7981,7 @@ const TextFieldWithMention = (props) => {
8023
7981
  });
8024
7982
  }
8025
7983
  }, [updateSelectionIndexesWithMentionIfNeeded, setSelectionStartValue, setSelectionEndValue]);
8026
- const handleOnChange = React.useCallback(({ currentSelectionEnd, currentSelectionStart, currentTriggerStartIndex, event, htmlTextValue, inputTextValue, previousSelectionEnd, previousSelectionStart, tagsValue, updatedValue }) => __awaiter$A(void 0, void 0, void 0, function* () {
7984
+ const handleOnChange = React.useCallback(({ currentSelectionEnd, currentSelectionStart, currentTriggerStartIndex, event, htmlTextValue, inputTextValue, previousSelectionEnd, previousSelectionStart, tagsValue, updatedValue }) => __awaiter$B(void 0, void 0, void 0, function* () {
8027
7985
  var _b;
8028
7986
  debouncedQueryUpdate.cancel();
8029
7987
  if (event.currentTarget === null) {
@@ -8317,14 +8275,71 @@ const InputBoxComponent = (props) => {
8317
8275
  return (React.createElement(react.Stack, { className: mergedRootStyle },
8318
8276
  React.createElement("div", { className: mergedTextContainerStyle }, renderTextField())));
8319
8277
  };
8278
+
8279
+ // Copyright (c) Microsoft Corporation.
8280
+ // Licensed under the MIT License.
8281
+ /**
8282
+ * @private
8283
+ */
8284
+ const isDarkThemed = (theme) => {
8285
+ const themeBlackBrightness = getPerceptualBrightnessOfHexColor(theme.palette.black);
8286
+ const themeWhiteBrightness = getPerceptualBrightnessOfHexColor(theme.palette.white);
8287
+ if (Number.isNaN(themeBlackBrightness) || Number.isNaN(themeWhiteBrightness)) {
8288
+ return false;
8289
+ }
8290
+ return themeBlackBrightness > themeWhiteBrightness;
8291
+ };
8292
+ const getPerceptualBrightnessOfHexColor = (hexColor) => {
8293
+ // return NaN if hexColor is not a hex code
8294
+ if (!/^#[0-9A-Fa-f]{6}$/i.test(hexColor)) {
8295
+ return NaN;
8296
+ }
8297
+ const r = parseInt(hexColor.substring(1, 3), 16);
8298
+ const g = parseInt(hexColor.substring(3, 5), 16);
8299
+ const b = parseInt(hexColor.substring(5, 7), 16);
8300
+ // arithmetic mean μ of the red, green, and blue color coordinates. Source: https://en.wikipedia.org/wiki/Brightness
8301
+ return (r + g + b) / 3;
8302
+ };
8303
+
8304
+ // Copyright (c) Microsoft Corporation.
8305
+ // Licensed under the MIT License.
8306
+ /**
8307
+ * @private
8308
+ */
8309
+ const inputBoxButtonStyle = react.mergeStyles({
8310
+ color: 'grey',
8311
+ margin: 'auto',
8312
+ width: '1.0625rem',
8313
+ height: '1.0625rem',
8314
+ backgroundColor: 'transparent',
8315
+ '&:hover': {
8316
+ backgroundColor: 'transparent'
8317
+ }
8318
+ });
8319
+ /**
8320
+ * @private
8321
+ */
8322
+ const inputBoxButtonTooltipStyle = react.mergeStyles({
8323
+ // The toolTip host container show be a flex box, so that alignItems: 'center' works for inside buttons
8324
+ display: 'flex'
8325
+ });
8326
+ /**
8327
+ * @private
8328
+ */
8329
+ const iconWrapperStyle$1 = react.mergeStyles({
8330
+ pointerEvents: 'none'
8331
+ });
8332
+
8333
+ // Copyright (c) Microsoft Corporation.
8334
+ // Licensed under the MIT License.
8320
8335
  /**
8321
8336
  * @private
8322
8337
  */
8323
8338
  const InputBoxButton = (props) => {
8324
8339
  const { onRenderIcon, onClick, ariaLabel, className, id, tooltipContent } = props;
8325
8340
  const [isHover, setIsHover] = React.useState(false);
8326
- const mergedButtonStyle = react.mergeStyles(inputButtonStyle, className);
8327
- const theme = useTheme();
8341
+ const mergedButtonStyle = react.mergeStyles(inputBoxButtonStyle, className);
8342
+ const theme = react.useTheme();
8328
8343
  const calloutStyle = { root: { padding: 0 }, calloutMain: { padding: '0.5rem' } };
8329
8344
  // Place callout with no gap between it and the button.
8330
8345
  const calloutProps = {
@@ -8332,7 +8347,7 @@ const InputBoxButton = (props) => {
8332
8347
  styles: calloutStyle,
8333
8348
  backgroundColor: isDarkThemed(theme) ? theme.palette.neutralLighter : ''
8334
8349
  };
8335
- return (React.createElement(react.TooltipHost, { hostClassName: inputButtonTooltipStyle, content: tooltipContent, calloutProps: Object.assign({}, calloutProps) },
8350
+ return (React.createElement(react.TooltipHost, { hostClassName: inputBoxButtonTooltipStyle, content: tooltipContent, calloutProps: Object.assign({}, calloutProps) },
8336
8351
  React.createElement(react.IconButton, { className: mergedButtonStyle, ariaLabel: ariaLabel, onClick: onClick, id: id, onMouseEnter: () => {
8337
8352
  setIsHover(true);
8338
8353
  }, onMouseLeave: () => {
@@ -8568,8 +8583,26 @@ const _FileUploadCards = (props) => {
8568
8583
 
8569
8584
  // Copyright (c) Microsoft Corporation.
8570
8585
  // Licensed under the MIT License.
8571
- const EMPTY_MESSAGE_REGEX = /^\s*$/;
8586
+ /* @conditional-compile-remove(file-sharing) */
8587
+ /**
8588
+ * @private
8589
+ */
8590
+ const hasIncompleteFileUploads = (activeFileUploads) => {
8591
+ return !!((activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.length) &&
8592
+ !activeFileUploads.filter((fileUpload) => !fileUpload.error).every((fileUpload) => fileUpload.uploadComplete));
8593
+ };
8594
+ /* @conditional-compile-remove(file-sharing) */
8595
+ /**
8596
+ * @private
8597
+ */
8598
+ const hasCompletedFileUploads = (activeFileUploads) => {
8599
+ return !!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.find((file) => !file.error));
8600
+ };
8601
+
8602
+ // Copyright (c) Microsoft Corporation.
8603
+ // Licensed under the MIT License.
8572
8604
  const MAXIMUM_LENGTH_OF_MESSAGE$1 = 8000;
8605
+ const EMPTY_MESSAGE_REGEX = /^\s*$/;
8573
8606
  /**
8574
8607
  * Component for typing and sending messages.
8575
8608
  *
@@ -8581,15 +8614,17 @@ const MAXIMUM_LENGTH_OF_MESSAGE$1 = 8000;
8581
8614
  const SendBox = (props) => {
8582
8615
  const { disabled, systemMessage, supportNewline, onSendMessage, onTyping, onRenderIcon, onRenderSystemMessage, styles, autoFocus,
8583
8616
  /* @conditional-compile-remove(mention) */
8584
- mentionLookupOptions } = props;
8617
+ mentionLookupOptions,
8618
+ /* @conditional-compile-remove(file-sharing) */
8619
+ activeFileUploads } = props;
8585
8620
  const theme = useTheme();
8586
8621
  const localeStrings = useLocale$1().strings.sendBox;
8587
8622
  const strings = Object.assign(Object.assign({}, localeStrings), props.strings);
8588
8623
  const ids = useIdentifiers();
8589
- const activeFileUploads = activeFileUploadsTrampoline(props);
8590
8624
  const [textValue, setTextValue] = React.useState('');
8591
8625
  const [textValueOverflow, setTextValueOverflow] = React.useState(false);
8592
8626
  const sendTextFieldRef = React.useRef(null);
8627
+ /* @conditional-compile-remove(file-sharing) */
8593
8628
  const [fileUploadsPendingError, setFileUploadsPendingError] = React.useState(undefined);
8594
8629
  const sendMessageOnClick = () => {
8595
8630
  var _a;
@@ -8598,16 +8633,18 @@ const SendBox = (props) => {
8598
8633
  return;
8599
8634
  }
8600
8635
  // Don't send message until all files have been uploaded successfully
8636
+ /* @conditional-compile-remove(file-sharing) */
8601
8637
  setFileUploadsPendingError(undefined);
8602
- if (hasIncompleteFileUploads(props)) {
8603
- /* @conditional-compile-remove(file-sharing) */
8638
+ /* @conditional-compile-remove(file-sharing) */
8639
+ if (hasIncompleteFileUploads(activeFileUploads)) {
8604
8640
  setFileUploadsPendingError({ message: strings.fileUploadsPendingError, timestamp: Date.now() });
8605
8641
  return;
8606
8642
  }
8607
8643
  const message = textValue;
8608
8644
  // we don't want to send empty messages including spaces, newlines, tabs
8609
8645
  // Message can be empty if there is a valid file upload
8610
- if (!EMPTY_MESSAGE_REGEX.test(message) || hasFile(props)) {
8646
+ if (!EMPTY_MESSAGE_REGEX.test(message) ||
8647
+ /* @conditional-compile-remove(file-sharing) */ hasCompletedFileUploads(activeFileUploads)) {
8611
8648
  onSendMessage && onSendMessage(sanitizeText(message));
8612
8649
  setTextValue('');
8613
8650
  }
@@ -8629,18 +8666,28 @@ const SendBox = (props) => {
8629
8666
  const errorMessage = systemMessage !== null && systemMessage !== void 0 ? systemMessage : textTooLongMessage;
8630
8667
  const mergedSendButtonStyle = React.useMemo(() => react.mergeStyles(sendButtonStyle, styles === null || styles === void 0 ? void 0 : styles.sendMessageIconContainer), [styles === null || styles === void 0 ? void 0 : styles.sendMessageIconContainer]);
8631
8668
  const mergedStyles = React.useMemo(() => react.concatStyleSets(styles), [styles]);
8632
- const hasText = !!textValue;
8633
- const hasTextOrFile = hasText || hasFile(props);
8634
- const mergedSendIconStyle = React.useMemo(() => react.mergeStyles(sendIconStyle, {
8635
- color: !!errorMessage || !hasTextOrFile ? theme.palette.neutralTertiary : theme.palette.themePrimary
8636
- }, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon), [errorMessage, hasTextOrFile, theme, styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon]);
8669
+ const mergedSendIconStyle = React.useMemo(() => sendIconStyle({
8670
+ theme,
8671
+ hasText: !!textValue,
8672
+ /* @conditional-compile-remove(file-sharing) */ hasFile: hasCompletedFileUploads(activeFileUploads),
8673
+ hasErrorMessage: !!errorMessage,
8674
+ customSendIconStyle: styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon
8675
+ }), [
8676
+ theme,
8677
+ textValue,
8678
+ /* @conditional-compile-remove(file-sharing) */ activeFileUploads,
8679
+ errorMessage,
8680
+ styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon
8681
+ ]);
8637
8682
  const onRenderSendIcon = React.useCallback((isHover) => onRenderIcon ? (onRenderIcon(isHover)) : (React.createElement(react.Icon, { iconName: isHover && textValue ? 'SendBoxSendHovered' : 'SendBoxSend', className: mergedSendIconStyle })), [mergedSendIconStyle, onRenderIcon, textValue]);
8638
8683
  // Ensure that errors are cleared when there are no files in sendBox
8684
+ /* @conditional-compile-remove(file-sharing) */
8639
8685
  React.useEffect(() => {
8640
8686
  if (!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter((upload) => !upload.error).length)) {
8641
8687
  setFileUploadsPendingError(undefined);
8642
8688
  }
8643
8689
  }, [activeFileUploads]);
8690
+ /* @conditional-compile-remove(file-sharing) */
8644
8691
  const sendBoxErrorsProps = React.useMemo(() => {
8645
8692
  var _a;
8646
8693
  return {
@@ -8662,13 +8709,13 @@ const SendBox = (props) => {
8662
8709
  } })));
8663
8710
  }, [activeFileUploads, props, localeStrings]);
8664
8711
  return (React.createElement(react.Stack, { className: react.mergeStyles(sendBoxWrapperStyles, { overflow: 'visible' } // This is needed for the mention popup to be visible
8665
- ) },
8712
+ ) }, /* @conditional-compile-remove(file-sharing) */
8666
8713
  React.createElement(SendBoxErrors, Object.assign({}, sendBoxErrorsProps)),
8667
- React.createElement(react.Stack, { className: react.mergeStyles(borderAndBoxShadowStyle({
8714
+ React.createElement(react.Stack, { className: borderAndBoxShadowStyle({
8668
8715
  theme,
8669
8716
  hasErrorMessage: !!errorMessage,
8670
8717
  disabled: !!disabled
8671
- })) },
8718
+ }) },
8672
8719
  React.createElement(InputBoxComponent, { autoFocus: autoFocus, "data-ui-id": ids.sendboxTextField, disabled: disabled, errorMessage: onRenderSystemMessage ? onRenderSystemMessage(errorMessage) : errorMessage, textFieldRef: sendTextFieldRef, id: "sendbox", placeholderText: strings.placeholderText, textValue: textValue, onChange: (_, newValue) => setText(newValue), onKeyDown: (ev) => {
8673
8720
  const keyWasSendingMessage = ev.key === 'Enter' && (ev.shiftKey === false || !supportNewline);
8674
8721
  if (!keyWasSendingMessage) {
@@ -8691,15 +8738,6 @@ const SendBox = (props) => {
8691
8738
  /**
8692
8739
  * @private
8693
8740
  */
8694
- const hasIncompleteFileUploads = (props) => {
8695
- const activeFileUploads = activeFileUploadsTrampoline(props);
8696
- return !!((activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.length) &&
8697
- !activeFileUploads.filter((fileUpload) => !fileUpload.error).every((fileUpload) => fileUpload.uploadComplete));
8698
- };
8699
- const hasFile = (props) => {
8700
- const activeFileUploads = activeFileUploadsTrampoline(props);
8701
- return !!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.find((file) => !file.error));
8702
- };
8703
8741
  const sanitizeText = (message) => {
8704
8742
  if (EMPTY_MESSAGE_REGEX.test(message)) {
8705
8743
  return '';
@@ -8708,10 +8746,6 @@ const sanitizeText = (message) => {
8708
8746
  return message;
8709
8747
  }
8710
8748
  };
8711
- const activeFileUploadsTrampoline = (props) => {
8712
- /* @conditional-compile-remove(file-sharing) */
8713
- return props.activeFileUploads;
8714
- };
8715
8749
 
8716
8750
  // Copyright (c) Microsoft Corporation.
8717
8751
  // Licensed under the MIT License.
@@ -8959,6 +8993,21 @@ const ImageGallery = (props) => {
8959
8993
  renderBodyWithLightDismiss()));
8960
8994
  };
8961
8995
 
8996
+ // Copyright (c) Microsoft Corporation.
8997
+ // Licensed under the MIT License.
8998
+ /**
8999
+ * @private
9000
+ */
9001
+ react.mergeStyles({
9002
+ border: 'none',
9003
+ overflow: 'auto',
9004
+ padding: '10px',
9005
+ outline: 'none',
9006
+ bottom: '0',
9007
+ minHeight: '2.25rem',
9008
+ maxHeight: '8.25rem'
9009
+ });
9010
+
8962
9011
  // Copyright (c) Microsoft Corporation.
8963
9012
  // Licensed under the MIT License.
8964
9013
  /** @private */
@@ -10633,7 +10682,7 @@ const chatMessageActionMenuProps = (menuProps) => {
10633
10682
 
10634
10683
  // Copyright (c) Microsoft Corporation.
10635
10684
  // Licensed under the MIT License.
10636
- var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
10685
+ var __awaiter$A = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
10637
10686
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10638
10687
  return new (P || (P = Promise))(function (resolve, reject) {
10639
10688
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -10676,7 +10725,7 @@ const _FileDownloadCards = (props) => {
10676
10725
  fileCount: `${(_c = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.filter(isFileSharingAttachment).length) !== null && _c !== void 0 ? _c : 0}`
10677
10726
  });
10678
10727
  }, [(_b = props.strings) === null || _b === void 0 ? void 0 : _b.fileCardGroupMessage, localeStrings.fileCardGroupMessage, fileMetadata, isFileSharingAttachment]);
10679
- const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$z(void 0, void 0, void 0, function* () {
10728
+ const fileDownloadHandler = React.useCallback((userId, file) => __awaiter$A(void 0, void 0, void 0, function* () {
10680
10729
  if (!props.downloadHandler) {
10681
10730
  window.open(file.url, '_blank', 'noopener,noreferrer');
10682
10731
  }
@@ -10728,7 +10777,7 @@ const useLocaleStringsTrampoline = () => {
10728
10777
 
10729
10778
  // Copyright (c) Microsoft Corporation.
10730
10779
  // Licensed under the MIT License.
10731
- var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
10780
+ var __awaiter$z = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
10732
10781
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10733
10782
  return new (P || (P = Promise))(function (resolve, reject) {
10734
10783
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -10829,7 +10878,7 @@ const MessageBubble = (props) => {
10829
10878
  return undefined;
10830
10879
  }, [editedOn, message.messageType, messageStatus, strings.editedTag, strings.failToSendTag, theme]);
10831
10880
  /* @conditional-compile-remove(image-gallery) */
10832
- const handleOnInlineImageClicked = React.useCallback((attachmentId) => __awaiter$y(void 0, void 0, void 0, function* () {
10881
+ const handleOnInlineImageClicked = React.useCallback((attachmentId) => __awaiter$z(void 0, void 0, void 0, function* () {
10833
10882
  if (onInlineImageClicked === undefined) {
10834
10883
  return;
10835
10884
  }
@@ -10949,7 +10998,7 @@ const ChatMessageComponentAsMessageBubble = React.memo(MessageBubble);
10949
10998
 
10950
10999
  // Copyright (c) Microsoft Corporation.
10951
11000
  // Licensed under the MIT License.
10952
- var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
11001
+ var __awaiter$y = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
10953
11002
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10954
11003
  return new (P || (P = Promise))(function (resolve, reject) {
10955
11004
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -10982,7 +11031,7 @@ const ChatMessageComponent = (props) => {
10982
11031
  onSendMessage && onSendMessage(content !== undefined ? content : '');
10983
11032
  }, [clientMessageId, content, onSendMessage, onDeleteMessage]);
10984
11033
  if (isEditing && message.messageType === 'chat') {
10985
- return (React.createElement(ChatMessageComponentAsEditBox, { message: message, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$x(void 0, void 0, void 0, function* () {
11034
+ return (React.createElement(ChatMessageComponentAsEditBox, { message: message, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$y(void 0, void 0, void 0, function* () {
10986
11035
  props.onUpdateMessage &&
10987
11036
  message.messageId &&
10988
11037
  (yield props.onUpdateMessage(message.messageId, text, metadata, options));
@@ -11293,7 +11342,7 @@ const ChatMessageComponentWrapper = (props) => {
11293
11342
 
11294
11343
  // Copyright (c) Microsoft Corporation.
11295
11344
  // Licensed under the MIT License.
11296
- var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
11345
+ var __awaiter$x = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
11297
11346
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11298
11347
  return new (P || (P = Promise))(function (resolve, reject) {
11299
11348
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -11463,7 +11512,7 @@ const MessageThreadWrapper = (props) => {
11463
11512
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
11464
11513
  const [inlineAttachments, setInlineAttachments] = React.useState({});
11465
11514
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
11466
- const onFetchInlineAttachment = React.useCallback((attachments, messageId) => __awaiter$w(void 0, void 0, void 0, function* () {
11515
+ const onFetchInlineAttachment = React.useCallback((attachments, messageId) => __awaiter$x(void 0, void 0, void 0, function* () {
11467
11516
  if (!onFetchAttachments || attachments.length === 0) {
11468
11517
  return;
11469
11518
  }
@@ -11493,7 +11542,7 @@ const MessageThreadWrapper = (props) => {
11493
11542
  const previousMessagesRef = React.useRef([]);
11494
11543
  // an aria label for Narrator to notify when a message is deleted
11495
11544
  const [deletedMessageAriaLabel, setDeletedMessageAriaLabel] = React.useState(undefined);
11496
- const onDeleteMessageCallback = React.useCallback((messageId) => __awaiter$w(void 0, void 0, void 0, function* () {
11545
+ const onDeleteMessageCallback = React.useCallback((messageId) => __awaiter$x(void 0, void 0, void 0, function* () {
11497
11546
  if (!onDeleteMessage) {
11498
11547
  return;
11499
11548
  }
@@ -11573,7 +11622,7 @@ const MessageThreadWrapper = (props) => {
11573
11622
  */
11574
11623
  const clientHeight = (_a = chatThreadRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight;
11575
11624
  // we try to only send those message status if user is scrolled to the bottom.
11576
- const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$w(void 0, void 0, void 0, function* () {
11625
+ const sendMessageStatusIfAtBottom = React.useCallback(() => __awaiter$x(void 0, void 0, void 0, function* () {
11577
11626
  if (!isAtBottomOfScrollRef.current ||
11578
11627
  !document.hasFocus() ||
11579
11628
  !messagesRef.current ||
@@ -11624,7 +11673,7 @@ const MessageThreadWrapper = (props) => {
11624
11673
  setIsAtBottomOfScrollRef(atBottom);
11625
11674
  }, [scrollToBottom, sendMessageStatusIfAtBottom]);
11626
11675
  // Infinite scrolling + threadInitialize function
11627
- const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$w(void 0, void 0, void 0, function* () {
11676
+ const fetchNewMessageWhenAtTop = React.useCallback(() => __awaiter$x(void 0, void 0, void 0, function* () {
11628
11677
  if (!isLoadingChatMessagesRef.current) {
11629
11678
  if (onLoadPreviousChatMessages) {
11630
11679
  isLoadingChatMessagesRef.current = true;
@@ -13745,7 +13794,7 @@ const localVideoTileContainerStyles = {
13745
13794
 
13746
13795
  // Copyright (c) Microsoft Corporation.
13747
13796
  // Licensed under the MIT License.
13748
- var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
13797
+ var __awaiter$w = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
13749
13798
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13750
13799
  return new (P || (P = Promise))(function (resolve, reject) {
13751
13800
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -13762,7 +13811,7 @@ const LocalVideoCameraCycleButton = (props) => {
13762
13811
  const { cameras, selectedCamera, onSelectCamera, label, ariaDescription, size } = props;
13763
13812
  const theme = react.useTheme();
13764
13813
  const [waitForCamera, setWaitForCamera] = React.useState(false);
13765
- const onChangeCameraClick = React.useCallback((device) => __awaiter$v(void 0, void 0, void 0, function* () {
13814
+ const onChangeCameraClick = React.useCallback((device) => __awaiter$w(void 0, void 0, void 0, function* () {
13766
13815
  // Throttle changing camera to prevent too many callbacks
13767
13816
  if (onSelectCamera) {
13768
13817
  setWaitForCamera(true);
@@ -16868,7 +16917,7 @@ const DevicesButton = (props) => {
16868
16917
 
16869
16918
  // Copyright (c) Microsoft Corporation.
16870
16919
  // Licensed under the MIT License.
16871
- var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16920
+ var __awaiter$v = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
16872
16921
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16873
16922
  return new (P || (P = Promise))(function (resolve, reject) {
16874
16923
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -16906,7 +16955,7 @@ const CameraButton = (props) => {
16906
16955
  const toggleAnnouncerString = React.useCallback((isCameraOn) => {
16907
16956
  setAnnouncerString(!isCameraOn ? strings.cameraActionTurnedOffAnnouncement : strings.cameraActionTurnedOnAnnouncement);
16908
16957
  }, [strings.cameraActionTurnedOffAnnouncement, strings.cameraActionTurnedOnAnnouncement]);
16909
- const onToggleClick = React.useCallback(() => __awaiter$u(void 0, void 0, void 0, function* () {
16958
+ const onToggleClick = React.useCallback(() => __awaiter$v(void 0, void 0, void 0, function* () {
16910
16959
  // Throttle click on camera, need to await onToggleCamera then allow another click
16911
16960
  if (onToggleCamera) {
16912
16961
  setWaitForCamera(true);
@@ -16920,7 +16969,7 @@ const CameraButton = (props) => {
16920
16969
  }
16921
16970
  }
16922
16971
  }), [cameraOn, localVideoViewOptions, onToggleCamera, toggleAnnouncerString]);
16923
- const onChangeCameraClick = React.useCallback((device) => __awaiter$u(void 0, void 0, void 0, function* () {
16972
+ const onChangeCameraClick = React.useCallback((device) => __awaiter$v(void 0, void 0, void 0, function* () {
16924
16973
  // Throttle changing camera to prevent too many callbacks
16925
16974
  if (onSelectCamera) {
16926
16975
  setWaitForCamera(true);
@@ -17091,7 +17140,7 @@ const lightThemeCallButtonStyles = {
17091
17140
 
17092
17141
  // Copyright (c) Microsoft Corporation.
17093
17142
  // Licensed under the MIT License.
17094
- var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17143
+ var __awaiter$u = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
17095
17144
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
17096
17145
  return new (P || (P = Promise))(function (resolve, reject) {
17097
17146
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -17132,7 +17181,7 @@ const MicrophoneButton = (props) => {
17132
17181
  const toggleAnnouncerString = React.useCallback((isMicOn) => {
17133
17182
  setAnnouncerString(!isMicOn ? strings.microphoneActionTurnedOffAnnouncement : strings.microphoneActionTurnedOnAnnouncement);
17134
17183
  }, [strings.microphoneActionTurnedOffAnnouncement, strings.microphoneActionTurnedOnAnnouncement]);
17135
- const onToggleClick = React.useCallback(() => __awaiter$t(void 0, void 0, void 0, function* () {
17184
+ const onToggleClick = React.useCallback(() => __awaiter$u(void 0, void 0, void 0, function* () {
17136
17185
  if (onToggleMicrophone) {
17137
17186
  try {
17138
17187
  yield onToggleMicrophone();
@@ -18307,7 +18356,7 @@ const dtmfFrequencies = {
18307
18356
 
18308
18357
  // Copyright (c) Microsoft Corporation.
18309
18358
  // Licensed under the MIT License.
18310
- var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18359
+ var __awaiter$t = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
18311
18360
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18312
18361
  return new (P || (P = Promise))(function (resolve, reject) {
18313
18362
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -18351,10 +18400,10 @@ const DialpadButton = (props) => {
18351
18400
  const [buttonPressed, setButtonPressed] = React.useState(false);
18352
18401
  const dtmfToneSound = React.useRef(new Tone(dtmfToneAudioContext, dtmfFrequencies[digit].f1, dtmfFrequencies[digit].f2));
18353
18402
  const useLongPressProps = React.useMemo(() => ({
18354
- onClick: () => __awaiter$s(void 0, void 0, void 0, function* () {
18403
+ onClick: () => __awaiter$t(void 0, void 0, void 0, function* () {
18355
18404
  onClick(digit, index);
18356
18405
  }),
18357
- onLongPress: () => __awaiter$s(void 0, void 0, void 0, function* () {
18406
+ onLongPress: () => __awaiter$t(void 0, void 0, void 0, function* () {
18358
18407
  onLongPress(digit, index);
18359
18408
  }),
18360
18409
  touchEventsOnly: isMobile
@@ -18403,7 +18452,7 @@ const DialpadButton = (props) => {
18403
18452
  const DialpadContainer = (props) => {
18404
18453
  var _a, _b;
18405
18454
  const theme = react.useTheme();
18406
- const { onSendDtmfTone, onClickDialpadButton, textFieldValue, onChange, showDeleteButton = true, isMobile = false, disableDtmfPlayback, enableInputEditing } = props;
18455
+ const { onSendDtmfTone, onClickDialpadButton, textFieldValue, onChange, showDeleteButton = true, isMobile = false, disableDtmfPlayback, dialpadMode = 'dialer' } = props;
18407
18456
  const dtmfToneAudioContext = React.useRef(new AudioContext());
18408
18457
  const [plainTextValue, setPlainTextValue] = React.useState(textFieldValue !== null && textFieldValue !== void 0 ? textFieldValue : '');
18409
18458
  const plainTextValuePreviousRenderValue = React.useRef(plainTextValue);
@@ -18450,20 +18499,16 @@ const DialpadContainer = (props) => {
18450
18499
  setText(modifiedInput);
18451
18500
  };
18452
18501
  return (React.createElement(react.Stack, { className: react.mergeStyles(containerStyles$3(theme), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root), "data-test-id": "dialpadContainer", "data-ui-id": "dialpadContainer", horizontalAlign: 'center' },
18453
- React.createElement(react.TextField, { styles: react.concatStyleSets(textFieldStyles(theme), (_b = props.styles) === null || _b === void 0 ? void 0 : _b.textField), value: textFieldValue ? textFieldValue : enableInputEditing ? formatPhoneNumber(plainTextValue) : plainTextValue,
18502
+ dialpadMode === 'dialer' && (React.createElement(react.TextField, { styles: react.concatStyleSets(textFieldStyles(theme), (_b = props.styles) === null || _b === void 0 ? void 0 : _b.textField), value: textFieldValue ? textFieldValue : formatPhoneNumber(plainTextValue),
18454
18503
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
18455
18504
  onChange: (e) => {
18456
- if (enableInputEditing) {
18457
- setText(e.target.value);
18458
- }
18505
+ setText(e.target.value);
18459
18506
  }, onClick: (e) => {
18460
- if (!enableInputEditing) {
18461
- e.preventDefault();
18462
- }
18507
+ e.preventDefault();
18463
18508
  }, placeholder: props.strings.placeholderText, "data-test-id": "dialpad-input", onRenderSuffix: () => {
18464
18509
  var _a;
18465
18510
  return (React.createElement(React.Fragment, null, showDeleteButton && plainTextValue.length !== 0 && (React.createElement(react.IconButton, { ariaLabel: props.strings.deleteButtonAriaLabel, onClick: deleteNumbers, styles: react.concatStyleSets(iconButtonStyles(theme), (_a = props.styles) === null || _a === void 0 ? void 0 : _a.deleteIcon), iconProps: { iconName: 'DialpadBackspace' } }))));
18466
- } }),
18511
+ } })),
18467
18512
  React.createElement(react.FocusZone, null, dialPadButtonsDefault.map((rows, rowIndex) => {
18468
18513
  return (React.createElement(react.Stack, { horizontal: true, key: `row_${rowIndex}`, horizontalAlign: "stretch", tokens: { childrenGap: '1rem' } }, rows.map((button, columnIndex) => (React.createElement(DialpadButton, { key: `button_${columnIndex}`,
18469
18514
  /* row index = 0
@@ -19503,7 +19548,7 @@ const _spokenLanguageToCaptionLanguage = {
19503
19548
 
19504
19549
  // Copyright (c) Microsoft Corporation.
19505
19550
  // Licensed under the MIT License.
19506
- var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
19551
+ var __awaiter$s = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
19507
19552
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19508
19553
  return new (P || (P = Promise))(function (resolve, reject) {
19509
19554
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -19546,7 +19591,7 @@ const _CaptionsSettingsModal = (props) => {
19546
19591
  onDismissCaptionsSettings();
19547
19592
  }
19548
19593
  }, [onDismissCaptionsSettings]);
19549
- const onConfirm = React.useCallback(() => __awaiter$r(void 0, void 0, void 0, function* () {
19594
+ const onConfirm = React.useCallback(() => __awaiter$s(void 0, void 0, void 0, function* () {
19550
19595
  const spokenLanguageCode = selectedSpokenLanguage.key.toString();
19551
19596
  const captionLanguageCode = selectedCaptionLanguage.key.toString();
19552
19597
  if (isCaptionsFeatureActive) {
@@ -20634,7 +20679,7 @@ const findConditionalCompiledSelector = (component) => {
20634
20679
 
20635
20680
  // Copyright (c) Microsoft Corporation.
20636
20681
  // Licensed under the MIT License.
20637
- var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20682
+ var __awaiter$r = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
20638
20683
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20639
20684
  return new (P || (P = Promise))(function (resolve, reject) {
20640
20685
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -20657,35 +20702,35 @@ const createDefaultChatHandlers = memoizeOne((chatClient, chatThreadClient) => {
20657
20702
  let messageIterator = undefined;
20658
20703
  let readReceiptIterator = undefined;
20659
20704
  return {
20660
- onSendMessage: (content, options) => __awaiter$q(void 0, void 0, void 0, function* () {
20705
+ onSendMessage: (content, options) => __awaiter$r(void 0, void 0, void 0, function* () {
20661
20706
  const sendMessageRequest = {
20662
20707
  content,
20663
20708
  senderDisplayName: chatClient.getState().displayName
20664
20709
  };
20665
20710
  yield chatThreadClient.sendMessage(sendMessageRequest, options);
20666
20711
  }),
20667
- onUpdateMessage: (messageId, content, options) => __awaiter$q(void 0, void 0, void 0, function* () {
20712
+ onUpdateMessage: (messageId, content, options) => __awaiter$r(void 0, void 0, void 0, function* () {
20668
20713
  const updatedMetadata = (options === null || options === void 0 ? void 0 : options.metadata) ? Object.assign({}, options.metadata) : {};
20669
20714
  updatedMetadata.fileSharingMetadata = JSON.stringify((options === null || options === void 0 ? void 0 : options.attachmentMetadata) || []);
20670
20715
  yield chatThreadClient.updateMessage(messageId, { content, metadata: updatedMetadata });
20671
20716
  }),
20672
- onDeleteMessage: (messageId) => __awaiter$q(void 0, void 0, void 0, function* () {
20717
+ onDeleteMessage: (messageId) => __awaiter$r(void 0, void 0, void 0, function* () {
20673
20718
  yield chatThreadClient.deleteMessage(messageId);
20674
20719
  }),
20675
20720
  // This handler is designed for chatThread to consume
20676
- onMessageSeen: (chatMessageId) => __awaiter$q(void 0, void 0, void 0, function* () {
20721
+ onMessageSeen: (chatMessageId) => __awaiter$r(void 0, void 0, void 0, function* () {
20677
20722
  yield chatThreadClient.sendReadReceipt({ chatMessageId });
20678
20723
  }),
20679
- onTyping: () => __awaiter$q(void 0, void 0, void 0, function* () {
20724
+ onTyping: () => __awaiter$r(void 0, void 0, void 0, function* () {
20680
20725
  yield chatThreadClient.sendTypingNotification();
20681
20726
  }),
20682
- onRemoveParticipant: (userId) => __awaiter$q(void 0, void 0, void 0, function* () {
20727
+ onRemoveParticipant: (userId) => __awaiter$r(void 0, void 0, void 0, function* () {
20683
20728
  yield chatThreadClient.removeParticipant(fromFlatCommunicationIdentifier(userId));
20684
20729
  }),
20685
- updateThreadTopicName: (topicName) => __awaiter$q(void 0, void 0, void 0, function* () {
20730
+ updateThreadTopicName: (topicName) => __awaiter$r(void 0, void 0, void 0, function* () {
20686
20731
  yield chatThreadClient.updateTopic(topicName);
20687
20732
  }),
20688
- onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$q(void 0, void 0, void 0, function* () {
20733
+ onLoadPreviousChatMessages: (messagesToLoad) => __awaiter$r(void 0, void 0, void 0, function* () {
20689
20734
  var _a, _b, _c;
20690
20735
  if (messageIterator === undefined) {
20691
20736
  // Lazy definition so that errors in the method call are reported correctly.
@@ -21594,7 +21639,7 @@ const chatStatefulLogger = logger.createClientLogger('communication-react:chat-s
21594
21639
 
21595
21640
  // Copyright (c) Microsoft Corporation.
21596
21641
  // Licensed under the MIT License.
21597
- var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21642
+ var __awaiter$q = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21598
21643
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
21599
21644
  return new (P || (P = Promise))(function (resolve, reject) {
21600
21645
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -21869,7 +21914,7 @@ let ChatContext$1 = class ChatContext {
21869
21914
  * @throws ChatError. Exceptions thrown from `f` are tagged with the failed `target.
21870
21915
  */
21871
21916
  withAsyncErrorTeedToState(f, target) {
21872
- return (...args) => __awaiter$p(this, void 0, void 0, function* () {
21917
+ return (...args) => __awaiter$q(this, void 0, void 0, function* () {
21873
21918
  try {
21874
21919
  return yield f(...args);
21875
21920
  }
@@ -21981,7 +22026,7 @@ const convertChatMessage = (message, status = 'delivered', clientMessageId) => {
21981
22026
 
21982
22027
  // Copyright (c) Microsoft Corporation.
21983
22028
  // Licensed under the MIT License.
21984
- var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22029
+ var __awaiter$p = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
21985
22030
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
21986
22031
  return new (P || (P = Promise))(function (resolve, reject) {
21987
22032
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -22070,7 +22115,7 @@ class EventSubscriber {
22070
22115
  };
22071
22116
  // This is a temporary fix that no participant message is received for onChatMessageReceived event, which should be handled by JS SDK.
22072
22117
  // Without the temporary fix, there are missing 'participant joined' and 'participant left' system messages in the chat thread.
22073
- this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$o(this, void 0, void 0, function* () {
22118
+ this.fetchLastParticipantMessage = (threadId, actionType) => __awaiter$p(this, void 0, void 0, function* () {
22074
22119
  var _a, e_1, _b, _c;
22075
22120
  try {
22076
22121
  for (var _d = true, _e = __asyncValues$1(this.chatClient
@@ -22164,7 +22209,7 @@ class EventSubscriber {
22164
22209
 
22165
22210
  // Copyright (c) Microsoft Corporation.
22166
22211
  // Licensed under the MIT License.
22167
- var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22212
+ var __awaiter$o = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22168
22213
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22169
22214
  return new (P || (P = Promise))(function (resolve, reject) {
22170
22215
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -22186,7 +22231,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
22186
22231
  const threadsIterator = iteratorCreator(...args);
22187
22232
  return {
22188
22233
  next() {
22189
- return __awaiter$n(this, void 0, void 0, function* () {
22234
+ return __awaiter$o(this, void 0, void 0, function* () {
22190
22235
  const result = yield threadsIterator.next();
22191
22236
  if (!result.done && result.value) {
22192
22237
  decorateFn(result.value, context);
@@ -22201,7 +22246,7 @@ const createDecoratedIterator = (iteratorCreator, context, decorateFn) => {
22201
22246
  const pages = threadsIterator.byPage(settings);
22202
22247
  return {
22203
22248
  next() {
22204
- return __awaiter$n(this, void 0, void 0, function* () {
22249
+ return __awaiter$o(this, void 0, void 0, function* () {
22205
22250
  const result = yield pages.next();
22206
22251
  const page = result.value;
22207
22252
  if (!result.done && result.value) {
@@ -22288,7 +22333,7 @@ const createDecoratedListParticipants = (chatThreadClient, context) => {
22288
22333
 
22289
22334
  // Copyright (c) Microsoft Corporation.
22290
22335
  // Licensed under the MIT License.
22291
- var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22336
+ var __awaiter$n = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22292
22337
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22293
22338
  return new (P || (P = Promise))(function (resolve, reject) {
22294
22339
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -22307,14 +22352,14 @@ class ProxyChatThreadClient {
22307
22352
  return createDecoratedListMessages(chatThreadClient, this._context);
22308
22353
  }
22309
22354
  case 'getMessage': {
22310
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22355
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22311
22356
  const message = yield chatThreadClient.getMessage(...args);
22312
22357
  this._context.setChatMessage(chatThreadClient.threadId, convertChatMessage(message));
22313
22358
  return message;
22314
22359
  }), 'ChatThreadClient.getMessage');
22315
22360
  }
22316
22361
  case 'sendMessage': {
22317
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22362
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22318
22363
  var _a;
22319
22364
  // Retry logic?
22320
22365
  const [request, options] = args;
@@ -22355,7 +22400,7 @@ class ProxyChatThreadClient {
22355
22400
  }), 'ChatThreadClient.sendMessage');
22356
22401
  }
22357
22402
  case 'addParticipants': {
22358
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22403
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22359
22404
  const result = yield chatThreadClient.addParticipants(...args);
22360
22405
  const [addRequest] = args;
22361
22406
  const participantsToAdd = addRequest.participants;
@@ -22364,7 +22409,7 @@ class ProxyChatThreadClient {
22364
22409
  }), 'ChatThreadClient.addParticipants');
22365
22410
  }
22366
22411
  case 'deleteMessage': {
22367
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22412
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22368
22413
  // DeleteMessage is able to either delete local one(for failed message) or synced message
22369
22414
  const [messageId] = args;
22370
22415
  if (this._context.deleteLocalMessage(chatThreadClient.threadId, messageId)) {
@@ -22382,12 +22427,12 @@ class ProxyChatThreadClient {
22382
22427
  return createDecoratedListReadReceipts(chatThreadClient, this._context);
22383
22428
  }
22384
22429
  case 'sendTypingNotification': {
22385
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22430
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22386
22431
  return yield chatThreadClient.sendTypingNotification(...args);
22387
22432
  }), 'ChatThreadClient.sendTypingNotification');
22388
22433
  }
22389
22434
  case 'removeParticipant': {
22390
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22435
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22391
22436
  const result = yield chatThreadClient.removeParticipant(...args);
22392
22437
  const [removeIdentifier] = args;
22393
22438
  this._context.deleteParticipant(chatThreadClient.threadId, communicationCommon.getIdentifierKind(removeIdentifier));
@@ -22395,7 +22440,7 @@ class ProxyChatThreadClient {
22395
22440
  }), 'ChatThreadClient.removeParticipant');
22396
22441
  }
22397
22442
  case 'updateMessage': {
22398
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22443
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22399
22444
  const result = yield chatThreadClient.updateMessage(...args);
22400
22445
  const [messageId, updateOption] = args;
22401
22446
  this._context.updateChatMessageContent(chatThreadClient.threadId, messageId, updateOption === null || updateOption === void 0 ? void 0 : updateOption.content);
@@ -22403,7 +22448,7 @@ class ProxyChatThreadClient {
22403
22448
  }), 'ChatThreadClient.updateMessage');
22404
22449
  }
22405
22450
  case 'updateTopic': {
22406
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22451
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22407
22452
  const result = yield chatThreadClient.updateTopic(...args);
22408
22453
  const [topic] = args;
22409
22454
  this._context.updateThreadTopic(chatThreadClient.threadId, topic);
@@ -22411,7 +22456,7 @@ class ProxyChatThreadClient {
22411
22456
  }), 'ChatThreadClient.updateTopic');
22412
22457
  }
22413
22458
  case 'getProperties': {
22414
- return this._context.withAsyncErrorTeedToState((...args) => __awaiter$m(this, void 0, void 0, function* () {
22459
+ return this._context.withAsyncErrorTeedToState((...args) => __awaiter$n(this, void 0, void 0, function* () {
22415
22460
  const result = yield chatThreadClient.getProperties(...args);
22416
22461
  this._context.updateThread(chatThreadClient.threadId, result);
22417
22462
  return result;
@@ -22449,7 +22494,7 @@ const createDecoratedListThreads = (chatClient, context) => {
22449
22494
 
22450
22495
  // Copyright (c) Microsoft Corporation.
22451
22496
  // Licensed under the MIT License.
22452
- var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22497
+ var __awaiter$m = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
22453
22498
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22454
22499
  return new (P || (P = Promise))(function (resolve, reject) {
22455
22500
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -22468,7 +22513,7 @@ const proxyChatClient = {
22468
22513
  switch (prop) {
22469
22514
  case 'createChatThread': {
22470
22515
  return context.withAsyncErrorTeedToState(function (...args) {
22471
- return __awaiter$l(this, void 0, void 0, function* () {
22516
+ return __awaiter$m(this, void 0, void 0, function* () {
22472
22517
  const result = yield chatClient.createChatThread(...args);
22473
22518
  const thread = result.chatThread;
22474
22519
  if (thread) {
@@ -22481,7 +22526,7 @@ const proxyChatClient = {
22481
22526
  }
22482
22527
  case 'deleteChatThread': {
22483
22528
  return context.withAsyncErrorTeedToState(function (...args) {
22484
- return __awaiter$l(this, void 0, void 0, function* () {
22529
+ return __awaiter$m(this, void 0, void 0, function* () {
22485
22530
  const result = yield chatClient.deleteChatThread(...args);
22486
22531
  context.deleteThread(args[0]);
22487
22532
  return result;
@@ -22501,7 +22546,7 @@ const proxyChatClient = {
22501
22546
  }
22502
22547
  case 'startRealtimeNotifications': {
22503
22548
  return context.withAsyncErrorTeedToState(function (...args) {
22504
- return __awaiter$l(this, void 0, void 0, function* () {
22549
+ return __awaiter$m(this, void 0, void 0, function* () {
22505
22550
  const ret = yield chatClient.startRealtimeNotifications(...args);
22506
22551
  if (!receiver.eventSubscriber) {
22507
22552
  receiver.eventSubscriber = new EventSubscriber(chatClient, context);
@@ -22512,7 +22557,7 @@ const proxyChatClient = {
22512
22557
  }
22513
22558
  case 'stopRealtimeNotifications': {
22514
22559
  return context.withAsyncErrorTeedToState(function (...args) {
22515
- return __awaiter$l(this, void 0, void 0, function* () {
22560
+ return __awaiter$m(this, void 0, void 0, function* () {
22516
22561
  const ret = yield chatClient.stopRealtimeNotifications(...args);
22517
22562
  if (receiver.eventSubscriber) {
22518
22563
  receiver.eventSubscriber.unsubscribe();
@@ -22706,7 +22751,9 @@ const COMPOSITE_ONLY_ICONS = {
22706
22751
  /* @conditional-compile-remove(gallery-layouts) */
22707
22752
  LargeGalleryLayout: React.createElement(reactIcons.Table20Regular, null),
22708
22753
  /* @conditional-compile-remove(control-bar-button-injection) */
22709
- DefaultCustomButton: React.createElement(reactIcons.Circle20Regular, null)
22754
+ DefaultCustomButton: React.createElement(reactIcons.Circle20Regular, null),
22755
+ /* @conditional-compile-remove(dtmf-dialer) */
22756
+ DtmfDialpadButton: React.createElement(reactIcons.Dialpad20Regular, null)
22710
22757
  };
22711
22758
  /**
22712
22759
  * The default set of icons that are available to used in the Composites.
@@ -22739,7 +22786,7 @@ const CallCompositeIcon = (props) => (React.createElement(react.FontIcon, Object
22739
22786
  */
22740
22787
  const CallWithChatCompositeIcon = (props) => (React.createElement(react.FontIcon, Object.assign({}, props)));
22741
22788
 
22742
- var call$k={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",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",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",leavingCallTitle:"Leaving...",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",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",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:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",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",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."}},surveyQuestion:"How was your call today?",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveyCancelButtonAriaLabel:"Cancel",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",surveyTextboxDefaultText:"Other, please specify",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},SurveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"}};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={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",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",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$k,chat:chat$k,callWithChat:callWithChat$k};
22789
+ var call$k={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",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",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",leavingCallTitle:"Leaving...",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",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",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:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",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",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."}},surveyQuestion:"How was your call today?",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveyCancelButtonAriaLabel:"Cancel",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",surveyTextboxDefaultText:"Other, please specify",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},SurveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"}};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={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",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",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$k,chat:chat$k,callWithChat:callWithChat$k};
22743
22790
 
22744
22791
  // Copyright (c) Microsoft Corporation.
22745
22792
  // Licensed under the MIT License.
@@ -22996,7 +23043,7 @@ const convertObservableFileUploadToFileUploadsUiState = (fileUploads) => {
22996
23043
 
22997
23044
  // Copyright (c) Microsoft Corporation.
22998
23045
  // Licensed under the MIT License.
22999
- var __awaiter$k = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
23046
+ var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
23000
23047
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23001
23048
  return new (P || (P = Promise))(function (resolve, reject) {
23002
23049
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -23131,9 +23178,9 @@ class AzureCommunicationChatAdapter {
23131
23178
  this.unsubscribeAllEvents();
23132
23179
  }
23133
23180
  fetchInitialData() {
23134
- return __awaiter$k(this, void 0, void 0, function* () {
23181
+ return __awaiter$l(this, void 0, void 0, function* () {
23135
23182
  // If get properties fails we dont want to try to get the participants after.
23136
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23183
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23137
23184
  var _a, e_1, _b, _c;
23138
23185
  yield this.chatThreadClient.getProperties();
23139
23186
  try {
@@ -23169,8 +23216,8 @@ class AzureCommunicationChatAdapter {
23169
23216
  this.context.offStateChange(handler);
23170
23217
  }
23171
23218
  sendMessage(content, options = {}) {
23172
- return __awaiter$k(this, void 0, void 0, function* () {
23173
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23219
+ return __awaiter$l(this, void 0, void 0, function* () {
23220
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23174
23221
  /* @conditional-compile-remove(file-sharing) */
23175
23222
  options.metadata = Object.assign(Object.assign({}, options.metadata), convertFileUploadsUiStateToMessageMetadata(this.context.getState().fileUploads));
23176
23223
  /* @conditional-compile-remove(file-sharing) */
@@ -23187,43 +23234,43 @@ class AzureCommunicationChatAdapter {
23187
23234
  });
23188
23235
  }
23189
23236
  sendReadReceipt(chatMessageId) {
23190
- return __awaiter$k(this, void 0, void 0, function* () {
23191
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23237
+ return __awaiter$l(this, void 0, void 0, function* () {
23238
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23192
23239
  yield this.handlers.onMessageSeen(chatMessageId);
23193
23240
  }));
23194
23241
  });
23195
23242
  }
23196
23243
  sendTypingIndicator() {
23197
- return __awaiter$k(this, void 0, void 0, function* () {
23198
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23244
+ return __awaiter$l(this, void 0, void 0, function* () {
23245
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23199
23246
  yield this.handlers.onTyping();
23200
23247
  }));
23201
23248
  });
23202
23249
  }
23203
23250
  removeParticipant(userId) {
23204
- return __awaiter$k(this, void 0, void 0, function* () {
23205
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23251
+ return __awaiter$l(this, void 0, void 0, function* () {
23252
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23206
23253
  yield this.handlers.onRemoveParticipant(userId);
23207
23254
  }));
23208
23255
  });
23209
23256
  }
23210
23257
  setTopic(topicName) {
23211
- return __awaiter$k(this, void 0, void 0, function* () {
23212
- yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23258
+ return __awaiter$l(this, void 0, void 0, function* () {
23259
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23213
23260
  yield this.handlers.updateThreadTopicName(topicName);
23214
23261
  }));
23215
23262
  });
23216
23263
  }
23217
23264
  loadPreviousChatMessages(messagesToLoad) {
23218
- return __awaiter$k(this, void 0, void 0, function* () {
23219
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23265
+ return __awaiter$l(this, void 0, void 0, function* () {
23266
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23220
23267
  return yield this.handlers.onLoadPreviousChatMessages(messagesToLoad);
23221
23268
  }));
23222
23269
  });
23223
23270
  }
23224
23271
  updateMessage(messageId, content, metadata, options) {
23225
- return __awaiter$k(this, void 0, void 0, function* () {
23226
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23272
+ return __awaiter$l(this, void 0, void 0, function* () {
23273
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23227
23274
  /* @conditional-compile-remove(file-sharing) */
23228
23275
  const updatedOptions = options ? { attachmentMetadata: options.attachmentMetadata, metadata: metadata } : {};
23229
23276
  /* @conditional-compile-remove(file-sharing) */
@@ -23232,8 +23279,8 @@ class AzureCommunicationChatAdapter {
23232
23279
  });
23233
23280
  }
23234
23281
  deleteMessage(messageId) {
23235
- return __awaiter$k(this, void 0, void 0, function* () {
23236
- return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23282
+ return __awaiter$l(this, void 0, void 0, function* () {
23283
+ return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23237
23284
  return yield this.handlers.onDeleteMessage(messageId);
23238
23285
  }));
23239
23286
  });
@@ -23268,8 +23315,8 @@ class AzureCommunicationChatAdapter {
23268
23315
  }
23269
23316
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
23270
23317
  downloadAttachments(options) {
23271
- return __awaiter$k(this, void 0, void 0, function* () {
23272
- return this.asyncTeeErrorToEventEmitter(() => __awaiter$k(this, void 0, void 0, function* () {
23318
+ return __awaiter$l(this, void 0, void 0, function* () {
23319
+ return this.asyncTeeErrorToEventEmitter(() => __awaiter$l(this, void 0, void 0, function* () {
23273
23320
  if (this.credential === undefined) {
23274
23321
  throw new ChatError('ChatThreadClient.getMessage', new Error('AccessToken is null'));
23275
23322
  }
@@ -23283,9 +23330,9 @@ class AzureCommunicationChatAdapter {
23283
23330
  }
23284
23331
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
23285
23332
  downloadAuthenticatedFile(accessToken, options) {
23286
- return __awaiter$k(this, void 0, void 0, function* () {
23333
+ return __awaiter$l(this, void 0, void 0, function* () {
23287
23334
  function fetchWithAuthentication(url, token) {
23288
- return __awaiter$k(this, void 0, void 0, function* () {
23335
+ return __awaiter$l(this, void 0, void 0, function* () {
23289
23336
  const headers = new Headers();
23290
23337
  headers.append('Authorization', `Bearer ${token}`);
23291
23338
  try {
@@ -23377,7 +23424,7 @@ class AzureCommunicationChatAdapter {
23377
23424
  this.emitter.off(event, listener);
23378
23425
  }
23379
23426
  asyncTeeErrorToEventEmitter(f) {
23380
- return __awaiter$k(this, void 0, void 0, function* () {
23427
+ return __awaiter$l(this, void 0, void 0, function* () {
23381
23428
  try {
23382
23429
  return yield f();
23383
23430
  }
@@ -23427,7 +23474,7 @@ const convertEventType = (type) => {
23427
23474
  *
23428
23475
  * @public
23429
23476
  */
23430
- const createAzureCommunicationChatAdapter = ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) => __awaiter$k(void 0, void 0, void 0, function* () {
23477
+ const createAzureCommunicationChatAdapter = ({ endpoint: endpointUrl, userId, displayName, credential, threadId }) => __awaiter$l(void 0, void 0, void 0, function* () {
23431
23478
  return _createAzureCommunicationChatAdapterInner(endpointUrl, userId, displayName, credential, threadId);
23432
23479
  });
23433
23480
  /**
@@ -23435,7 +23482,7 @@ const createAzureCommunicationChatAdapter = ({ endpoint: endpointUrl, userId, di
23435
23482
  *
23436
23483
  * @internal
23437
23484
  */
23438
- const _createAzureCommunicationChatAdapterInner = (endpoint, userId, displayName, credential, threadId, telemetryImplementationHint = 'Chat') => __awaiter$k(void 0, void 0, void 0, function* () {
23485
+ const _createAzureCommunicationChatAdapterInner = (endpoint, userId, displayName, credential, threadId, telemetryImplementationHint = 'Chat') => __awaiter$l(void 0, void 0, void 0, function* () {
23439
23486
  if (!_isValidIdentifier(userId)) {
23440
23487
  throw new Error('Provided userId is invalid. Please provide valid identifier object.');
23441
23488
  }
@@ -23504,7 +23551,7 @@ beforeDispose) => {
23504
23551
  if (!credential || !displayName || !endpoint || !threadId || !userId) {
23505
23552
  return;
23506
23553
  }
23507
- (() => __awaiter$k(void 0, void 0, void 0, function* () {
23554
+ (() => __awaiter$l(void 0, void 0, void 0, function* () {
23508
23555
  if (adapterRef.current) {
23509
23556
  // Dispose the old adapter when a new one is created.
23510
23557
  //
@@ -23536,7 +23583,7 @@ beforeDispose) => {
23536
23583
  // Dispose any existing adapter when the component unmounts.
23537
23584
  React.useEffect(() => {
23538
23585
  return () => {
23539
- (() => __awaiter$k(void 0, void 0, void 0, function* () {
23586
+ (() => __awaiter$l(void 0, void 0, void 0, function* () {
23540
23587
  if (adapterRef.current) {
23541
23588
  if (beforeDisposeRef.current) {
23542
23589
  yield beforeDisposeRef.current(adapterRef.current);
@@ -23560,7 +23607,7 @@ beforeDispose) => {
23560
23607
  function createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient,
23561
23608
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
23562
23609
  options) {
23563
- return __awaiter$k(this, void 0, void 0, function* () {
23610
+ return __awaiter$l(this, void 0, void 0, function* () {
23564
23611
  return new AzureCommunicationChatAdapter(chatClient, chatThreadClient,
23565
23612
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */ options);
23566
23613
  });
@@ -23794,7 +23841,7 @@ const sendboxContainerStyles = {
23794
23841
 
23795
23842
  // Copyright (c) Microsoft Corporation.
23796
23843
  // Licensed under the MIT License.
23797
- var __awaiter$j = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
23844
+ var __awaiter$k = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
23798
23845
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23799
23846
  return new (P || (P = Promise))(function (resolve, reject) {
23800
23847
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -23815,7 +23862,7 @@ const AvatarPersona = (props) => {
23815
23862
  const { userId, dataProvider, text, imageUrl, imageInitials, initialsColor, initialsTextColor, showOverflowTooltip } = props;
23816
23863
  const [data, setData] = React.useState();
23817
23864
  React.useEffect(() => {
23818
- (() => __awaiter$j(void 0, void 0, void 0, function* () {
23865
+ (() => __awaiter$k(void 0, void 0, void 0, function* () {
23819
23866
  if (dataProvider && userId) {
23820
23867
  const newData = yield dataProvider(userId);
23821
23868
  if (avatarDeepDifferenceCheck(data, newData)) {
@@ -24232,7 +24279,7 @@ const FileDownloadErrorBar = (props) => {
24232
24279
 
24233
24280
  // Copyright (c) Microsoft Corporation.
24234
24281
  // Licensed under the MIT License.
24235
- var __awaiter$i = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
24282
+ var __awaiter$j = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
24236
24283
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
24237
24284
  return new (P || (P = Promise))(function (resolve, reject) {
24238
24285
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -24259,7 +24306,7 @@ const ChatScreen = (props) => {
24259
24306
  const theme = useTheme();
24260
24307
  React.useEffect(() => {
24261
24308
  // Initial data should be always fetched by the composite(or external caller) instead of the adapter
24262
- const fetchData = () => __awaiter$i(void 0, void 0, void 0, function* () {
24309
+ const fetchData = () => __awaiter$j(void 0, void 0, void 0, function* () {
24263
24310
  // Fetch initial data for adapter
24264
24311
  yield adapter.fetchInitialData();
24265
24312
  // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.
@@ -24299,7 +24346,7 @@ const ChatScreen = (props) => {
24299
24346
  setDownloadErrorMessage(errorMessage);
24300
24347
  } })), [fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.downloadHandler]);
24301
24348
  /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
24302
- const onRenderInlineAttachment = React.useCallback((attachment) => __awaiter$i(void 0, void 0, void 0, function* () {
24349
+ const onRenderInlineAttachment = React.useCallback((attachment) => __awaiter$j(void 0, void 0, void 0, function* () {
24303
24350
  const entry = {};
24304
24351
  attachment.forEach((target) => {
24305
24352
  if (target.attachmentType === 'inlineImage' && target.previewUrl) {
@@ -24310,7 +24357,7 @@ const ChatScreen = (props) => {
24310
24357
  return blob;
24311
24358
  }), [adapter]);
24312
24359
  /* @conditional-compile-remove(image-gallery) */
24313
- const onInlineImageClicked = React.useCallback((attachmentId, messageId) => __awaiter$i(void 0, void 0, void 0, function* () {
24360
+ const onInlineImageClicked = React.useCallback((attachmentId, messageId) => __awaiter$j(void 0, void 0, void 0, function* () {
24314
24361
  var _a, _b;
24315
24362
  const messages = (_a = messageThreadProps.messages) === null || _a === void 0 ? void 0 : _a.filter((message) => {
24316
24363
  return message.messageId === messageId;
@@ -24607,7 +24654,7 @@ const END_CALL_PAGES = [
24607
24654
 
24608
24655
  // Copyright (c) Microsoft Corporation.
24609
24656
  // Licensed under the MIT License.
24610
- var __awaiter$h = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
24657
+ var __awaiter$i = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
24611
24658
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
24612
24659
  return new (P || (P = Promise))(function (resolve, reject) {
24613
24660
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -24930,7 +24977,7 @@ const isDisabled$4 = (option) => {
24930
24977
  /**
24931
24978
  * @returns Permissions state for the camera.
24932
24979
  */
24933
- const queryCameraPermissionFromPermissionsAPI = () => __awaiter$h(void 0, void 0, void 0, function* () {
24980
+ const queryCameraPermissionFromPermissionsAPI = () => __awaiter$i(void 0, void 0, void 0, function* () {
24934
24981
  try {
24935
24982
  return (yield navigator.permissions.query({ name: 'camera' })).state;
24936
24983
  }
@@ -24943,7 +24990,7 @@ const queryCameraPermissionFromPermissionsAPI = () => __awaiter$h(void 0, void 0
24943
24990
  /**
24944
24991
  * @returns Permissions state for the microphone.
24945
24992
  */
24946
- const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$h(void 0, void 0, void 0, function* () {
24993
+ const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$i(void 0, void 0, void 0, function* () {
24947
24994
  try {
24948
24995
  return (yield navigator.permissions.query({ name: 'microphone' })).state;
24949
24996
  }
@@ -24960,7 +25007,7 @@ const queryMicrophonePermissionFromPermissionsAPI = () => __awaiter$h(void 0, vo
24960
25007
  * If permission API is not supported on this browser, permission state is set to unsupported.
24961
25008
  * @private
24962
25009
  */
24963
- const getDevicePermissionState = (setVideoState, setAudioState) => __awaiter$h(void 0, void 0, void 0, function* () {
25010
+ const getDevicePermissionState = (setVideoState, setAudioState) => __awaiter$i(void 0, void 0, void 0, function* () {
24964
25011
  const [cameraResult, microphoneResult] = yield Promise.all([
24965
25012
  queryCameraPermissionFromPermissionsAPI(),
24966
25013
  queryMicrophonePermissionFromPermissionsAPI()
@@ -25038,7 +25085,7 @@ const getSelectedCameraFromAdapterState = (state) => state.devices.selectedCamer
25038
25085
 
25039
25086
  // Copyright (c) Microsoft Corporation.
25040
25087
  // Licensed under the MIT License.
25041
- var __awaiter$g = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25088
+ var __awaiter$h = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25042
25089
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25043
25090
  return new (P || (P = Promise))(function (resolve, reject) {
25044
25091
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -25057,143 +25104,143 @@ _component) => {
25057
25104
  return createCompositeHandlers(useAdapter());
25058
25105
  };
25059
25106
  const createCompositeHandlers = memoizeOne((adapter) => ({
25060
- onCreateLocalStreamView: (options) => __awaiter$g(void 0, void 0, void 0, function* () {
25107
+ onCreateLocalStreamView: (options) => __awaiter$h(void 0, void 0, void 0, function* () {
25061
25108
  return yield adapter.createStreamView(undefined, options);
25062
25109
  }),
25063
- onCreateRemoteStreamView: (userId, options) => __awaiter$g(void 0, void 0, void 0, function* () {
25110
+ onCreateRemoteStreamView: (userId, options) => __awaiter$h(void 0, void 0, void 0, function* () {
25064
25111
  return yield adapter.createStreamView(userId, options);
25065
25112
  }),
25066
- onHangUp: (forEveryone) => __awaiter$g(void 0, void 0, void 0, function* () {
25113
+ onHangUp: (forEveryone) => __awaiter$h(void 0, void 0, void 0, function* () {
25067
25114
  yield adapter.leaveCall(forEveryone);
25068
25115
  }),
25069
25116
  /* @conditional-compile-remove(PSTN-calls) */
25070
- onToggleHold: () => __awaiter$g(void 0, void 0, void 0, function* () {
25117
+ onToggleHold: () => __awaiter$h(void 0, void 0, void 0, function* () {
25071
25118
  var _a;
25072
25119
  return ((_a = adapter.getState().call) === null || _a === void 0 ? void 0 : _a.state) === 'LocalHold' ? yield adapter.resumeCall() : yield adapter.holdCall();
25073
25120
  }),
25074
25121
  /* @conditional-compile-remove(PSTN-calls) */
25075
- onAddParticipant: (participant, options) => __awaiter$g(void 0, void 0, void 0, function* () {
25122
+ onAddParticipant: (participant, options) => __awaiter$h(void 0, void 0, void 0, function* () {
25076
25123
  return yield adapter.addParticipant(participant, options);
25077
25124
  }),
25078
25125
  /* @conditional-compile-remove(PSTN-calls) */
25079
- onSendDtmfTone: (dtmfTone) => __awaiter$g(void 0, void 0, void 0, function* () {
25126
+ onSendDtmfTone: (dtmfTone) => __awaiter$h(void 0, void 0, void 0, function* () {
25080
25127
  yield adapter.sendDtmfTone(dtmfTone);
25081
25128
  }),
25082
- onRemoveParticipant: (userId) => __awaiter$g(void 0, void 0, void 0, function* () {
25129
+ onRemoveParticipant: (userId) => __awaiter$h(void 0, void 0, void 0, function* () {
25083
25130
  yield adapter.removeParticipant(userId);
25084
25131
  }),
25085
25132
  /* @conditional-compile-remove(raise-hand) */
25086
- onRaiseHand: () => __awaiter$g(void 0, void 0, void 0, function* () {
25133
+ onRaiseHand: () => __awaiter$h(void 0, void 0, void 0, function* () {
25087
25134
  yield adapter.raiseHand();
25088
25135
  }),
25089
25136
  /* @conditional-compile-remove(raise-hand) */
25090
- onLowerHand: () => __awaiter$g(void 0, void 0, void 0, function* () {
25137
+ onLowerHand: () => __awaiter$h(void 0, void 0, void 0, function* () {
25091
25138
  yield adapter.lowerHand();
25092
25139
  }),
25093
25140
  /* @conditional-compile-remove(raise-hand) */
25094
- onToggleRaiseHand: () => __awaiter$g(void 0, void 0, void 0, function* () {
25141
+ onToggleRaiseHand: () => __awaiter$h(void 0, void 0, void 0, function* () {
25095
25142
  var _b;
25096
25143
  ((_b = adapter.getState().call) === null || _b === void 0 ? void 0 : _b.raiseHand.localParticipantRaisedHand)
25097
25144
  ? yield adapter.lowerHand()
25098
25145
  : yield adapter.raiseHand();
25099
25146
  }),
25100
25147
  /* @conditional-compile-remove(reaction) */
25101
- onReactionClicked: (reaction) => __awaiter$g(void 0, void 0, void 0, function* () {
25148
+ onReactionClicked: (reaction) => __awaiter$h(void 0, void 0, void 0, function* () {
25102
25149
  yield adapter.onReactionClicked(reaction);
25103
25150
  }),
25104
- onSelectCamera: (deviceInfo, options) => __awaiter$g(void 0, void 0, void 0, function* () {
25151
+ onSelectCamera: (deviceInfo, options) => __awaiter$h(void 0, void 0, void 0, function* () {
25105
25152
  yield adapter.setCamera(deviceInfo, options);
25106
25153
  }),
25107
- onSelectMicrophone: (deviceInfo) => __awaiter$g(void 0, void 0, void 0, function* () {
25154
+ onSelectMicrophone: (deviceInfo) => __awaiter$h(void 0, void 0, void 0, function* () {
25108
25155
  yield adapter.setMicrophone(deviceInfo);
25109
25156
  }),
25110
- onSelectSpeaker: (deviceInfo) => __awaiter$g(void 0, void 0, void 0, function* () {
25157
+ onSelectSpeaker: (deviceInfo) => __awaiter$h(void 0, void 0, void 0, function* () {
25111
25158
  yield adapter.setSpeaker(deviceInfo);
25112
25159
  }),
25113
25160
  onStartCall: (participants, options) => {
25114
25161
  const rawIds = participants.map((participant) => toFlatCommunicationIdentifier(participant));
25115
25162
  return adapter.startCall(rawIds, options);
25116
25163
  },
25117
- onStartScreenShare: () => __awaiter$g(void 0, void 0, void 0, function* () {
25164
+ onStartScreenShare: () => __awaiter$h(void 0, void 0, void 0, function* () {
25118
25165
  yield adapter.startScreenShare();
25119
25166
  }),
25120
- onStopScreenShare: () => __awaiter$g(void 0, void 0, void 0, function* () {
25167
+ onStopScreenShare: () => __awaiter$h(void 0, void 0, void 0, function* () {
25121
25168
  yield adapter.stopScreenShare();
25122
25169
  }),
25123
- onToggleCamera: (options) => __awaiter$g(void 0, void 0, void 0, function* () {
25170
+ onToggleCamera: (options) => __awaiter$h(void 0, void 0, void 0, function* () {
25124
25171
  isCameraOn(adapter.getState()) ? yield adapter.stopCamera() : yield adapter.startCamera(options);
25125
25172
  }),
25126
- onToggleMicrophone: () => __awaiter$g(void 0, void 0, void 0, function* () {
25173
+ onToggleMicrophone: () => __awaiter$h(void 0, void 0, void 0, function* () {
25127
25174
  var _c;
25128
25175
  return ((_c = adapter.getState().call) === null || _c === void 0 ? void 0 : _c.isMuted) ? yield adapter.unmute() : yield adapter.mute();
25129
25176
  }),
25130
- onToggleScreenShare: () => __awaiter$g(void 0, void 0, void 0, function* () {
25177
+ onToggleScreenShare: () => __awaiter$h(void 0, void 0, void 0, function* () {
25131
25178
  var _d;
25132
25179
  return ((_d = adapter.getState().call) === null || _d === void 0 ? void 0 : _d.isScreenSharingOn)
25133
25180
  ? yield adapter.stopScreenShare()
25134
25181
  : yield adapter.startScreenShare();
25135
25182
  }),
25136
- onStartLocalVideo: () => __awaiter$g(void 0, void 0, void 0, function* () {
25183
+ onStartLocalVideo: () => __awaiter$h(void 0, void 0, void 0, function* () {
25137
25184
  if (adapter.getState().call) {
25138
25185
  return adapter.startCamera();
25139
25186
  }
25140
25187
  }),
25141
- onDisposeLocalStreamView: () => __awaiter$g(void 0, void 0, void 0, function* () {
25188
+ onDisposeLocalStreamView: () => __awaiter$h(void 0, void 0, void 0, function* () {
25142
25189
  return adapter.disposeLocalVideoStreamView();
25143
25190
  }),
25144
- onDisposeRemoteStreamView: (userId) => __awaiter$g(void 0, void 0, void 0, function* () {
25191
+ onDisposeRemoteStreamView: (userId) => __awaiter$h(void 0, void 0, void 0, function* () {
25145
25192
  return adapter.disposeStreamView(userId);
25146
25193
  }),
25147
- onDisposeRemoteScreenShareStreamView: (userId) => __awaiter$g(void 0, void 0, void 0, function* () {
25194
+ onDisposeRemoteScreenShareStreamView: (userId) => __awaiter$h(void 0, void 0, void 0, function* () {
25148
25195
  return adapter.disposeScreenShareStreamView(userId);
25149
25196
  }),
25150
- onDisposeRemoteVideoStreamView: (userId) => __awaiter$g(void 0, void 0, void 0, function* () {
25197
+ onDisposeRemoteVideoStreamView: (userId) => __awaiter$h(void 0, void 0, void 0, function* () {
25151
25198
  return adapter.disposeRemoteVideoStreamView(userId);
25152
25199
  }),
25153
25200
  /* @conditional-compile-remove(call-readiness) */
25154
- askDevicePermission: (constrain) => __awaiter$g(void 0, void 0, void 0, function* () {
25201
+ askDevicePermission: (constrain) => __awaiter$h(void 0, void 0, void 0, function* () {
25155
25202
  return adapter.askDevicePermission(constrain);
25156
25203
  }),
25157
25204
  /* @conditional-compile-remove(video-background-effects) */
25158
- onRemoveVideoBackgroundEffects: () => __awaiter$g(void 0, void 0, void 0, function* () {
25205
+ onRemoveVideoBackgroundEffects: () => __awaiter$h(void 0, void 0, void 0, function* () {
25159
25206
  return yield adapter.stopVideoBackgroundEffects();
25160
25207
  }),
25161
25208
  /* @conditional-compile-remove(video-background-effects) */
25162
- onBlurVideoBackground: (backgroundBlurConfig) => __awaiter$g(void 0, void 0, void 0, function* () {
25209
+ onBlurVideoBackground: (backgroundBlurConfig) => __awaiter$h(void 0, void 0, void 0, function* () {
25163
25210
  const blurConfig = Object.assign({ effectName: 'blur' }, backgroundBlurConfig);
25164
25211
  return yield adapter.startVideoBackgroundEffect(blurConfig);
25165
25212
  }),
25166
25213
  /* @conditional-compile-remove(video-background-effects) */
25167
- onReplaceVideoBackground: (backgroundReplacementConfig) => __awaiter$g(void 0, void 0, void 0, function* () {
25214
+ onReplaceVideoBackground: (backgroundReplacementConfig) => __awaiter$h(void 0, void 0, void 0, function* () {
25168
25215
  const replacementConfig = Object.assign({ effectName: 'replacement' }, backgroundReplacementConfig);
25169
25216
  return yield adapter.startVideoBackgroundEffect(replacementConfig);
25170
25217
  }),
25171
25218
  /* @conditional-compile-remove(close-captions) */
25172
- onStartCaptions: (options) => __awaiter$g(void 0, void 0, void 0, function* () {
25219
+ onStartCaptions: (options) => __awaiter$h(void 0, void 0, void 0, function* () {
25173
25220
  yield adapter.startCaptions(options);
25174
25221
  }),
25175
25222
  /* @conditional-compile-remove(close-captions) */
25176
- onStopCaptions: () => __awaiter$g(void 0, void 0, void 0, function* () {
25223
+ onStopCaptions: () => __awaiter$h(void 0, void 0, void 0, function* () {
25177
25224
  yield adapter.stopCaptions();
25178
25225
  }),
25179
25226
  /* @conditional-compile-remove(close-captions) */
25180
- onSetSpokenLanguage: (language) => __awaiter$g(void 0, void 0, void 0, function* () {
25227
+ onSetSpokenLanguage: (language) => __awaiter$h(void 0, void 0, void 0, function* () {
25181
25228
  yield adapter.setSpokenLanguage(language);
25182
25229
  }),
25183
25230
  /* @conditional-compile-remove(close-captions) */
25184
- onSetCaptionLanguage: (language) => __awaiter$g(void 0, void 0, void 0, function* () {
25231
+ onSetCaptionLanguage: (language) => __awaiter$h(void 0, void 0, void 0, function* () {
25185
25232
  yield adapter.setCaptionLanguage(language);
25186
25233
  }),
25187
25234
  /* @conditional-compile-remove(end-of-call-survey) */
25188
- onSubmitSurvey: (survey) => __awaiter$g(void 0, void 0, void 0, function* () {
25235
+ onSubmitSurvey: (survey) => __awaiter$h(void 0, void 0, void 0, function* () {
25189
25236
  return yield adapter.submitSurvey(survey);
25190
25237
  }),
25191
25238
  /* @conditional-compile-remove(spotlight) */
25192
- onStartSpotlight: (userId) => __awaiter$g(void 0, void 0, void 0, function* () {
25239
+ onStartSpotlight: (userId) => __awaiter$h(void 0, void 0, void 0, function* () {
25193
25240
  yield adapter.startSpotlight(userId);
25194
25241
  }),
25195
25242
  /* @conditional-compile-remove(spotlight) */
25196
- onStopSpotlight: (userId) => __awaiter$g(void 0, void 0, void 0, function* () {
25243
+ onStopSpotlight: (userId) => __awaiter$h(void 0, void 0, void 0, function* () {
25197
25244
  yield adapter.stopSpotlight(userId);
25198
25245
  })
25199
25246
  }));
@@ -25327,17 +25374,17 @@ const concatButtonBaseStyles = (...styles) => {
25327
25374
 
25328
25375
  // Copyright (c) Microsoft Corporation.
25329
25376
  // Licensed under the MIT License.
25330
- const icon$2 = () => React.createElement(reactIcons.MoreHorizontal20Filled, { key: 'chatOnIconKey', primaryFill: "currentColor" });
25377
+ const icon$3 = () => React.createElement(reactIcons.MoreHorizontal20Filled, { key: 'chatOnIconKey', primaryFill: "currentColor" });
25331
25378
  /**
25332
25379
  * @private
25333
25380
  */
25334
25381
  const MoreButton = (props) => {
25335
- return (React.createElement(ControlBarButton, Object.assign({}, props, { labelKey: 'optionsButtonLabelKey', showLabel: props.showLabel, onRenderOnIcon: icon$2, onRenderOffIcon: icon$2, onClick: props.onClick, "data-ui-id": props['data-ui-id'] })));
25382
+ return (React.createElement(ControlBarButton, Object.assign({}, props, { labelKey: 'optionsButtonLabelKey', showLabel: props.showLabel, onRenderOnIcon: icon$3, onRenderOffIcon: icon$3, onClick: props.onClick, "data-ui-id": props['data-ui-id'] })));
25336
25383
  };
25337
25384
 
25338
25385
  // Copyright (c) Microsoft Corporation.
25339
25386
  // Licensed under the MIT License.
25340
- var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25387
+ var __awaiter$g = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
25341
25388
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25342
25389
  return new (P || (P = Promise))(function (resolve, reject) {
25343
25390
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -25365,7 +25412,7 @@ const CaptionsBannerMoreButton = (props) => {
25365
25412
  /* @conditional-compile-remove(close-captions) */
25366
25413
  const moreButtonContextualMenuItems = [];
25367
25414
  /* @conditional-compile-remove(close-captions) */
25368
- const startCaptions = React.useCallback(() => __awaiter$f(void 0, void 0, void 0, function* () {
25415
+ const startCaptions = React.useCallback(() => __awaiter$g(void 0, void 0, void 0, function* () {
25369
25416
  yield startCaptionsButtonHandlers.onStartCaptions({
25370
25417
  spokenLanguage: startCaptionsButtonProps.currentSpokenLanguage
25371
25418
  });
@@ -25712,6 +25759,10 @@ const getLatestCapabilitiesChangedInfo = (state) => {
25712
25759
  var _a, _b;
25713
25760
  return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.latestCapabilitiesChangeInfo;
25714
25761
  };
25762
+ /**
25763
+ * @private
25764
+ */
25765
+ const getTargetCallees = (state) => state.targetCallees;
25715
25766
 
25716
25767
  // Copyright (c) Microsoft Corporation.
25717
25768
  // Licensed under the MIT License.
@@ -25805,7 +25856,7 @@ const isDisabled$2 = (option) => {
25805
25856
 
25806
25857
  // Copyright (c) Microsoft Corporation.
25807
25858
  // Licensed under the MIT License.
25808
- const icon$1 = () => React.createElement(CallCompositeIcon, { iconName: 'ControlButtonParticipants' });
25859
+ const icon$2 = () => React.createElement(CallCompositeIcon, { iconName: 'ControlButtonParticipants' });
25809
25860
  /**
25810
25861
  * @private
25811
25862
  */
@@ -25821,7 +25872,7 @@ const People = (props) => {
25821
25872
  }
25822
25873
  }, (_a = props.styles) !== null && _a !== void 0 ? _a : {}, controlButtonBaseStyle);
25823
25874
  }, [props.styles, theme.palette.neutralLight]);
25824
- return (React.createElement(ControlBarButton, Object.assign({}, props, { "data-ui-id": "call-composite-participants-button", strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon$1, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon$1, onClick: onClick, styles: styles })));
25875
+ return (React.createElement(ControlBarButton, Object.assign({}, props, { "data-ui-id": "call-composite-participants-button", strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon$2, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon$2, onClick: onClick, styles: styles })));
25825
25876
  };
25826
25877
 
25827
25878
  // Copyright (c) Microsoft Corporation.
@@ -26438,7 +26489,7 @@ const isRoomsCallTrampoline = (adapter) => {
26438
26489
 
26439
26490
  // Copyright (c) Microsoft Corporation.
26440
26491
  // Licensed under the MIT License.
26441
- const icon = () => React.createElement(CallCompositeIcon, { iconName: 'ControlBarPeopleButton' });
26492
+ const icon$1 = () => React.createElement(CallCompositeIcon, { iconName: 'ControlBarPeopleButton' });
26442
26493
  /**
26443
26494
  * @private
26444
26495
  */
@@ -26453,7 +26504,7 @@ const PeopleButton = (props) => {
26453
26504
  }
26454
26505
  }, (_a = props.styles) !== null && _a !== void 0 ? _a : {});
26455
26506
  }, [props.styles, theme.palette.neutralLight]);
26456
- return (React.createElement(ControlBarButton, Object.assign({}, props, { strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon, onClick: onClick, styles: styles })));
26507
+ return (React.createElement(ControlBarButton, Object.assign({}, props, { strings: strings, labelKey: 'peopleButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon$1, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon$1, onClick: onClick, styles: styles })));
26457
26508
  };
26458
26509
 
26459
26510
  // Copyright (c) Microsoft Corporation.
@@ -26472,7 +26523,152 @@ const useCallWithChatCompositeStrings = () => {
26472
26523
 
26473
26524
  // Copyright (c) Microsoft Corporation.
26474
26525
  // Licensed under the MIT License.
26475
- var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26526
+ /**
26527
+ * @private
26528
+ */
26529
+ const mediaGallerySelector = reselect__namespace.createSelector([getLocalVideoStreams], (localVideoStreams) => {
26530
+ var _a, _b;
26531
+ return {
26532
+ isVideoStreamOn: !!((_b = (_a = localVideoStreams === null || localVideoStreams === void 0 ? void 0 : localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.target)
26533
+ };
26534
+ });
26535
+ /**
26536
+ * Custom selector for this hook to retrieve all the participants that are currently
26537
+ * connected to the call.
26538
+ */
26539
+ const getRemoteParticipantsConnectedSelector = reselect__namespace.createSelector([getRemoteParticipants], (remoteParticipants) => {
26540
+ const participants = Object.values(remoteParticipants !== null && remoteParticipants !== void 0 ? remoteParticipants : {});
26541
+ return participants.filter((p) => p.state === 'Connected');
26542
+ });
26543
+
26544
+ // Copyright (c) Microsoft Corporation.
26545
+ // Licensed under the MIT License.
26546
+ /**
26547
+ * sets the announcement string whenever a Participant comes or goes from a call to be
26548
+ * used by the system narrator.
26549
+ *
26550
+ * @returns string to be used by the narrator and Announcer component
26551
+ *
26552
+ * @internal
26553
+ */
26554
+ const useParticipantChangedAnnouncement = () => {
26555
+ const locale = useLocale().strings.call;
26556
+ const strings = React.useMemo(() => {
26557
+ return {
26558
+ participantJoinedNoticeString: locale.participantJoinedNoticeString,
26559
+ twoParticipantJoinedNoticeString: locale.twoParticipantJoinedNoticeString,
26560
+ threeParticipantJoinedNoticeString: locale.threeParticipantJoinedNoticeString,
26561
+ participantLeftNoticeString: locale.participantLeftNoticeString,
26562
+ twoParticipantLeftNoticeString: locale.twoParticipantLeftNoticeString,
26563
+ threeParticipantLeftNoticeString: locale.threeParticipantLeftNoticeString,
26564
+ unnamedParticipantString: locale.unnamedParticipantString,
26565
+ manyParticipantsJoined: locale.manyParticipantsJoined,
26566
+ manyParticipantsLeft: locale.manyParticipantsLeft,
26567
+ manyUnnamedParticipantsJoined: locale.manyUnnamedParticipantsJoined,
26568
+ manyUnnamedParticipantsLeft: locale.manyUnnamedParticipantsLeft
26569
+ };
26570
+ }, [locale]);
26571
+ const [announcerString, setAnnouncerString] = React.useState('');
26572
+ const currentParticipants = useSelector$1(getRemoteParticipantsConnectedSelector);
26573
+ /**
26574
+ * We want to use a useRef here since we want to not fire this hook based on the previous participants
26575
+ * this allows this value to be used in the hook without being in the dependency array.
26576
+ *
26577
+ * Note: By definition if this hook is used in another component it is not pure anymore.
26578
+ */
26579
+ const previousParticipants = React.useRef(currentParticipants);
26580
+ const resetAnnoucement = (string) => {
26581
+ setAnnouncerString(string);
26582
+ };
26583
+ React.useMemo(() => {
26584
+ const currentIds = currentParticipants.map((p) => toFlatCommunicationIdentifier(p.identifier));
26585
+ const previousIds = previousParticipants.current.map((p) => toFlatCommunicationIdentifier(p.identifier));
26586
+ const whoJoined = currentParticipants.filter((p) => !previousIds.includes(toFlatCommunicationIdentifier(p.identifier)));
26587
+ const whoLeft = previousParticipants.current.filter((p) => !currentIds.includes(toFlatCommunicationIdentifier(p.identifier)));
26588
+ if (whoJoined.length > 0) {
26589
+ resetAnnoucement(createAnnouncementString('joined', whoJoined, strings));
26590
+ }
26591
+ if (whoLeft.length > 0) {
26592
+ resetAnnoucement(createAnnouncementString('left', whoLeft, strings));
26593
+ }
26594
+ // Update cached value at the end.
26595
+ previousParticipants.current = currentParticipants;
26596
+ }, [currentParticipants, strings]);
26597
+ return announcerString;
26598
+ };
26599
+ /**
26600
+ * Generates the announcement string for when a participant joins or leaves a call.
26601
+ */
26602
+ const createAnnouncementString = (direction, participants, strings) => {
26603
+ var _a, _b, _c;
26604
+ /**
26605
+ * If there are no participants return empty string.
26606
+ */
26607
+ if (participants.length === 0) {
26608
+ return '';
26609
+ }
26610
+ /**
26611
+ * Filter participants into two arrays to put all the unnamed participants at the back of the
26612
+ * names being announced.
26613
+ */
26614
+ const unnamedParticipants = participants.filter((p) => !p.displayName);
26615
+ const namedParicipants = participants.filter((p) => p.displayName);
26616
+ const sortedParticipants = namedParicipants.concat(unnamedParticipants);
26617
+ /**
26618
+ * if there are only unnamed participants present in the array announce a special unnamed participants
26619
+ * only string.
26620
+ */
26621
+ if (sortedParticipants.filter((p) => p.displayName).length === 0 && sortedParticipants.length > 1) {
26622
+ return _formatString(direction === 'joined' ? strings.manyUnnamedParticipantsJoined : strings.manyUnnamedParticipantsLeft, {
26623
+ numOfParticipants: (sortedParticipants.length - 1).toString()
26624
+ });
26625
+ }
26626
+ const participantNames = sortedParticipants.map((p) => { var _a; return (_a = p.displayName) !== null && _a !== void 0 ? _a : strings.unnamedParticipantString; });
26627
+ switch (sortedParticipants.length) {
26628
+ case 1:
26629
+ return _formatString(direction === 'joined' ? strings.participantJoinedNoticeString : strings.participantLeftNoticeString, { displayName: participantNames[0] });
26630
+ case 2:
26631
+ return _formatString(direction === 'joined' ? strings.twoParticipantJoinedNoticeString : strings.twoParticipantLeftNoticeString, {
26632
+ displayName1: participantNames[0],
26633
+ displayName2: participantNames[1]
26634
+ });
26635
+ case 3:
26636
+ return _formatString(direction === 'joined' ? strings.threeParticipantJoinedNoticeString : strings.threeParticipantLeftNoticeString, {
26637
+ displayName1: participantNames[0],
26638
+ displayName2: participantNames[1],
26639
+ displayName3: participantNames[2]
26640
+ });
26641
+ }
26642
+ /**
26643
+ * If we have more than 3 participants joining we need to do something more to announce them
26644
+ * appropriately.
26645
+ *
26646
+ * We don't want to announce every name when more than 3 participants join at once so
26647
+ * we parse out the first 3 names we have and announce those with the number of others.
26648
+ */
26649
+ const numberOfExtraParticipants = sortedParticipants.length - 3;
26650
+ return _formatString(direction === 'joined' ? strings.manyParticipantsJoined : strings.manyParticipantsLeft, {
26651
+ displayName1: (_a = sortedParticipants[0].displayName) !== null && _a !== void 0 ? _a : strings.unnamedParticipantString,
26652
+ displayName2: (_b = sortedParticipants[1].displayName) !== null && _b !== void 0 ? _b : strings.unnamedParticipantString,
26653
+ displayName3: (_c = sortedParticipants[2].displayName) !== null && _c !== void 0 ? _c : strings.unnamedParticipantString,
26654
+ numOfParticipants: numberOfExtraParticipants.toString()
26655
+ });
26656
+ };
26657
+ /* @conditional-compile-remove(dtmf-dialer) */
26658
+ /**
26659
+ * determines if the media gallery should be replaced by the dtmf dialer
26660
+ * @param callees Target callees to determine if the dtmf dialer should be shown
26661
+ * @returns whether the dialer should be the gallery content or not
26662
+ */
26663
+ const showDtmfDialer = (callees) => {
26664
+ return !!((callees === null || callees === void 0 ? void 0 : callees.filter((callee) => {
26665
+ return communicationCommon.isPhoneNumberIdentifier(callee) || communicationCommon.isMicrosoftTeamsAppIdentifier(callee);
26666
+ })) && callees.length > 0);
26667
+ };
26668
+
26669
+ // Copyright (c) Microsoft Corporation.
26670
+ // Licensed under the MIT License.
26671
+ var __awaiter$f = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
26476
26672
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
26477
26673
  return new (P || (P = Promise))(function (resolve, reject) {
26478
26674
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -26486,7 +26682,7 @@ var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments,
26486
26682
  * @private
26487
26683
  */
26488
26684
  const DesktopMoreButton = (props) => {
26489
- var _a, _b, _c, _d, _e, _f, _g;
26685
+ var _a, _b, _c, _d, _e, _f, _g, _h;
26490
26686
  /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
26491
26687
  const localeStrings = useLocale();
26492
26688
  /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
@@ -26496,7 +26692,7 @@ const DesktopMoreButton = (props) => {
26496
26692
  /* @conditional-compile-remove(close-captions) */
26497
26693
  const startCaptionsButtonHandlers = useHandlers();
26498
26694
  /* @conditional-compile-remove(close-captions) */
26499
- const startCaptions = React.useCallback(() => __awaiter$e(void 0, void 0, void 0, function* () {
26695
+ const startCaptions = React.useCallback(() => __awaiter$f(void 0, void 0, void 0, function* () {
26500
26696
  yield startCaptionsButtonHandlers.onStartCaptions({
26501
26697
  spokenLanguage: startCaptionsButtonProps.currentSpokenLanguage
26502
26698
  });
@@ -26507,6 +26703,12 @@ const DesktopMoreButton = (props) => {
26507
26703
  const [focusedContentOn, setFocusedContentOn] = React.useState(false);
26508
26704
  /* @conditional-compile-remove(gallery-layouts) */
26509
26705
  const [previousLayout, setPreviousLayout] = React.useState((_a = props.userSetGalleryLayout) !== null && _a !== void 0 ? _a : 'floatingLocalVideo');
26706
+ /* @conditional-compile-remove(dtmf-dialer) */
26707
+ const callees = useSelector$1(getTargetCallees);
26708
+ /* @conditional-compile-remove(dtmf-dialer) */
26709
+ const allowDtmfDialer = showDtmfDialer(callees);
26710
+ /* @conditional-compile-remove(dtmf-dialer) */
26711
+ const [dtmfDialerChecked, setDtmfDialerChecked] = React.useState((_b = props.dtmfDialerPresent) !== null && _b !== void 0 ? _b : false);
26510
26712
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
26511
26713
  const moreButtonStrings = React.useMemo(() => ({
26512
26714
  label: localeStrings.strings.call.moreButtonCallingLabel,
@@ -26598,20 +26800,30 @@ const DesktopMoreButton = (props) => {
26598
26800
  });
26599
26801
  }
26600
26802
  }
26601
- /*@conditional-compile-remove(PSTN-calls) */
26602
- if (props.onClickShowDialpad) {
26603
- moreButtonContextualMenuItems.push({
26604
- key: 'showDialpadKey',
26605
- text: localeStrings.strings.callWithChat.openDtmfDialpadLabel,
26606
- onClick: () => {
26607
- props.onClickShowDialpad && props.onClickShowDialpad();
26608
- },
26609
- iconProps: { iconName: 'Dialpad', styles: { root: { lineHeight: 0 } } },
26610
- itemProps: {
26611
- styles: buttonFlyoutIncreasedSizeStyles
26612
- },
26613
- disabled: props.disableButtonsForHoldScreen
26614
- });
26803
+ /* @conditional-compile-remove(dtmf-dialer) */
26804
+ const dtmfDialerScreenOption = {
26805
+ key: 'dtmfDialerScreenKey',
26806
+ itemProps: {
26807
+ styles: buttonFlyoutIncreasedSizeStyles
26808
+ },
26809
+ text: !dtmfDialerChecked
26810
+ ? localeStrings.strings.call.dtmfDialerMoreButtonLabelOn
26811
+ : localeStrings.strings.call.dtmfDialerMoreButtonLabelOff,
26812
+ onClick: () => {
26813
+ props.onSetDialpadPage && props.onSetDialpadPage();
26814
+ setDtmfDialerChecked(!dtmfDialerChecked);
26815
+ },
26816
+ iconProps: {
26817
+ iconName: 'DtmfDialpadButton',
26818
+ styles: { root: { lineHeight: 0 } }
26819
+ }
26820
+ };
26821
+ /* @conditional-compile-remove(dtmf-dialer) */
26822
+ /**
26823
+ * Only render the dtmf dialer if the dialpad for PSTN calls is not present
26824
+ */
26825
+ if (props.onSetDialpadPage && allowDtmfDialer) {
26826
+ moreButtonContextualMenuItems.push(dtmfDialerScreenOption);
26615
26827
  }
26616
26828
  /* @conditional-compile-remove(gallery-layouts) */
26617
26829
  if (props.onUserSetOverflowGalleryPositionChange) {
@@ -26758,11 +26970,11 @@ const DesktopMoreButton = (props) => {
26758
26970
  }
26759
26971
  };
26760
26972
  /* @conditional-compile-remove(large-gallery) */
26761
- (_c = (_b = galleryOptions.subMenuProps) === null || _b === void 0 ? void 0 : _b.items) === null || _c === void 0 ? void 0 : _c.push(largeGalleryOption);
26973
+ (_d = (_c = galleryOptions.subMenuProps) === null || _c === void 0 ? void 0 : _c.items) === null || _d === void 0 ? void 0 : _d.push(largeGalleryOption);
26762
26974
  /* @conditional-compile-remove(gallery-layout-composite) */
26763
- (_e = (_d = galleryOptions.subMenuProps) === null || _d === void 0 ? void 0 : _d.items) === null || _e === void 0 ? void 0 : _e.push(galleryOption);
26975
+ (_f = (_e = galleryOptions.subMenuProps) === null || _e === void 0 ? void 0 : _e.items) === null || _f === void 0 ? void 0 : _f.push(galleryOption);
26764
26976
  /* @conditional-compile-remove(overflow-top-composite) */
26765
- (_g = (_f = galleryOptions.subMenuProps) === null || _f === void 0 ? void 0 : _f.items) === null || _g === void 0 ? void 0 : _g.push(overflowGalleryOption);
26977
+ (_h = (_g = galleryOptions.subMenuProps) === null || _g === void 0 ? void 0 : _g.items) === null || _h === void 0 ? void 0 : _h.push(overflowGalleryOption);
26766
26978
  /* @conditional-compile-remove(gallery-layouts) */
26767
26979
  moreButtonContextualMenuItems.push(galleryOptions);
26768
26980
  }
@@ -26835,6 +27047,38 @@ const invisibleHiddenFocusStartPoint = {
26835
27047
  }
26836
27048
  };
26837
27049
 
27050
+ // Copyright (c) Microsoft Corporation.
27051
+ // Licensed under the MIT License.
27052
+ /* @conditional-compile-remove(dtmf-dialer) */
27053
+ /* @conditional-compile-remove(dtmf-dialer) */
27054
+ const icon = () => React.createElement(CallCompositeIcon, { iconName: 'DtmfDialpadButton' });
27055
+ /* @conditional-compile-remove(dtmf-dialer) */
27056
+ /**
27057
+ * Button for showing and hiding the dtmf dialer in the Call composite.
27058
+ * To be used only if the more button control is disabled. This button will replace
27059
+ * it in the control bar unless it is also disabled.
27060
+ * @private
27061
+ */
27062
+ const DtmfDialpadButton = (props) => {
27063
+ const { strings, onRenderOnIcon, onRenderOffIcon, onClick, displayType } = props;
27064
+ const theme = react.useTheme();
27065
+ const locale = useLocale();
27066
+ const dialpadButtonStrings = {
27067
+ label: locale.strings.call.dtmfDialerButtonLabel,
27068
+ tooltipOnContent: locale.strings.call.dtmfDialerButtonTooltipOn,
27069
+ tooltipOffContent: locale.strings.call.dtmfDialerButtonTooltipOff
27070
+ };
27071
+ const styles = React.useMemo(() => {
27072
+ var _a;
27073
+ return react.concatStyleSets({
27074
+ rootChecked: {
27075
+ background: theme.palette.neutralLight
27076
+ }
27077
+ }, (_a = props.styles) !== null && _a !== void 0 ? _a : {});
27078
+ }, [props.styles, theme.palette.neutralLight]);
27079
+ return (React.createElement(ControlBarButton, Object.assign({}, props, { strings: strings ? strings : dialpadButtonStrings, showLabel: displayType !== 'compact', labelKey: 'dtmfDialpadButtonLabelKey', onRenderOnIcon: onRenderOnIcon !== null && onRenderOnIcon !== void 0 ? onRenderOnIcon : icon, onRenderOffIcon: onRenderOffIcon !== null && onRenderOffIcon !== void 0 ? onRenderOffIcon : icon, onClick: onClick, styles: styles })));
27080
+ };
27081
+
26838
27082
  // Copyright (c) Microsoft Corporation.
26839
27083
  // Licensed under the MIT License.
26840
27084
  const inferCommonCallControlOptions = (mobileView, commonCallControlOptions) => {
@@ -26978,6 +27222,12 @@ const CommonCallControlBar = (props) => {
26978
27222
  /* @conditional-compile-remove(rooms) */ !hideRaiseHandButtonInRoomsCall && (React.createElement(RaiseHand, { displayType: options.displayType, styles: commonButtonStyles,
26979
27223
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
26980
27224
  disabled: props.disableButtonsForHoldScreen || isDisabled$4(options.microphoneButton) })),
27225
+ /* @conditional-compile-remove(dtmf-dialer) */ showDtmfDialerButton(options) &&
27226
+ props.onSetDialpadPage !== undefined && (React.createElement(DtmfDialpadButton, { styles: commonButtonStyles, displayType: options.displayType, onClick: () => {
27227
+ if (props.onSetDialpadPage !== undefined) {
27228
+ props.onSetDialpadPage();
27229
+ }
27230
+ } })),
26981
27231
  screenShareButtonIsEnabled && (React.createElement(ScreenShare, { option: options.screenShareButton, displayType: options.displayType, styles: screenShareButtonStyles,
26982
27232
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
26983
27233
  disabled: props.disableButtonsForHoldScreen || isDisabled$4(options.screenShareButton) })), (_b = customButtons['primary']) === null || _b === void 0 ? void 0 :
@@ -27001,7 +27251,11 @@ const CommonCallControlBar = (props) => {
27001
27251
  /* @conditional-compile-remove(gallery-layouts) */
27002
27252
  onUserSetGalleryLayout: props.onUserSetGalleryLayout,
27003
27253
  /* @conditional-compile-remove(gallery-layouts) */
27004
- userSetGalleryLayout: props.userSetGalleryLayout })),
27254
+ userSetGalleryLayout: props.userSetGalleryLayout,
27255
+ /* @conditional-compile-remove(dtmf-dialer) */
27256
+ dtmfDialerPresent: props.dtmfDialerPresent,
27257
+ /* @conditional-compile-remove(dtmf-dialer) */
27258
+ onSetDialpadPage: props.onSetDialpadPage })),
27005
27259
  React.createElement(EndCall, { displayType: "compact", styles: endCallButtonStyles }))))))),
27006
27260
  !props.mobileView && sideButtonsPresent && (React.createElement(react.Stack.Item, null,
27007
27261
  React.createElement("div", { ref: sidepaneControlsRef },
@@ -27116,6 +27370,15 @@ const getDesktopEndCallButtonStyles = (theme) => {
27116
27370
  return react.concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);
27117
27371
  };
27118
27372
  const isEnabled$1 = (option) => option !== false;
27373
+ /* @conditional-compile-remove(dtmf-dialer) */
27374
+ const showDtmfDialerButton = (options) => {
27375
+ if (options.moreButton === false && options.dtmfDialerButton !== false) {
27376
+ return true;
27377
+ }
27378
+ else {
27379
+ return false;
27380
+ }
27381
+ };
27119
27382
 
27120
27383
  // Copyright (c) Microsoft Corporation.
27121
27384
  // Licensed under the MIT License.
@@ -27250,7 +27513,7 @@ const themedToggleButtonStyle = (theme, checked) => {
27250
27513
 
27251
27514
  // Copyright (c) Microsoft Corporation.
27252
27515
  // Licensed under the MIT License.
27253
- var __awaiter$d = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
27516
+ var __awaiter$e = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
27254
27517
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27255
27518
  return new (P || (P = Promise))(function (resolve, reject) {
27256
27519
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -27489,7 +27752,7 @@ const MoreDrawer = (props) => {
27489
27752
  ? captionSettingsProp.currentCaptionLanguage
27490
27753
  : _spokenLanguageToCaptionLanguage[currentSpokenLanguage]);
27491
27754
  /* @conditional-compile-remove(close-captions) */
27492
- const onToggleChange = React.useCallback(() => __awaiter$d(void 0, void 0, void 0, function* () {
27755
+ const onToggleChange = React.useCallback(() => __awaiter$e(void 0, void 0, void 0, function* () {
27493
27756
  if (!captionSettingsProp.isCaptionsFeatureActive) {
27494
27757
  yield startCaptionsButtonHandlers.onStartCaptions({
27495
27758
  spokenLanguage: currentSpokenLanguage
@@ -28228,7 +28491,7 @@ const AddPeopleButton = (props) => {
28228
28491
 
28229
28492
  // Copyright (c) Microsoft Corporation.
28230
28493
  // Licensed under the MIT License.
28231
- var __awaiter$c = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
28494
+ var __awaiter$d = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
28232
28495
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
28233
28496
  return new (P || (P = Promise))(function (resolve, reject) {
28234
28497
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -28250,11 +28513,11 @@ const PeoplePaneContent = (props) => {
28250
28513
  return localeStrings.strings.call;
28251
28514
  };
28252
28515
  const strings = getStrings();
28253
- const removeParticipantFromCall = React.useCallback((participantId) => __awaiter$c(void 0, void 0, void 0, function* () {
28516
+ const removeParticipantFromCall = React.useCallback((participantId) => __awaiter$d(void 0, void 0, void 0, function* () {
28254
28517
  yield adapter.removeParticipant(participantId);
28255
28518
  }), [adapter]);
28256
28519
  /* @conditional-compile-remove(PSTN-calls) */
28257
- const addParticipantToCall = React.useCallback((participant, options) => __awaiter$c(void 0, void 0, void 0, function* () {
28520
+ const addParticipantToCall = React.useCallback((participant, options) => __awaiter$d(void 0, void 0, void 0, function* () {
28258
28521
  yield adapter.addParticipant(participant, options);
28259
28522
  }), [adapter]);
28260
28523
  /* @conditional-compile-remove(PSTN-calls) */
@@ -28281,7 +28544,7 @@ const PeoplePaneContent = (props) => {
28281
28544
  setDrawerMenuItems
28282
28545
  ]);
28283
28546
  const participantListProps = React.useMemo(() => {
28284
- const onRemoveAParticipant = (participantId) => __awaiter$c(void 0, void 0, void 0, function* () { return removeParticipantFromCall(participantId); });
28547
+ const onRemoveAParticipant = (participantId) => __awaiter$d(void 0, void 0, void 0, function* () { return removeParticipantFromCall(participantId); });
28285
28548
  return Object.assign(Object.assign({}, participantListDefaultProps), {
28286
28549
  // Passing undefined callback for mobile to avoid context menus for participants in ParticipantList are clicked
28287
28550
  onRemoveParticipant: props.mobileView ? undefined : onRemoveAParticipant,
@@ -28422,7 +28685,7 @@ const localVideoSelector = reselect__namespace.createSelector([callStatusSelecto
28422
28685
 
28423
28686
  // Copyright (c) Microsoft Corporation.
28424
28687
  // Licensed under the MIT License.
28425
- var __awaiter$b = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
28688
+ var __awaiter$c = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
28426
28689
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
28427
28690
  return new (P || (P = Promise))(function (resolve, reject) {
28428
28691
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -28491,7 +28754,7 @@ const VideoEffectsPaneContent = (props) => {
28491
28754
  return videoEffects;
28492
28755
  }, [strings, adapter]);
28493
28756
  /* @conditional-compile-remove(video-background-effects) */
28494
- const onEffectChange = React.useCallback((effectKey) => __awaiter$b(void 0, void 0, void 0, function* () {
28757
+ const onEffectChange = React.useCallback((effectKey) => __awaiter$c(void 0, void 0, void 0, function* () {
28495
28758
  if (effectKey === 'blur') {
28496
28759
  const blurEffect = {
28497
28760
  effectName: effectKey
@@ -29227,7 +29490,11 @@ const CallArrangement = (props) => {
29227
29490
  /* @conditional-compile-remove(gallery-layouts) */
29228
29491
  onUserSetGalleryLayout: props.onUserSetGalleryLayoutChange,
29229
29492
  /* @conditional-compile-remove(gallery-layouts) */
29230
- userSetGalleryLayout: props.userSetGalleryLayout, peopleButtonRef: peopleButtonRef, cameraButtonRef: cameraButtonRef }))))),
29493
+ userSetGalleryLayout: props.userSetGalleryLayout,
29494
+ /* @conditional-compile-remove(dtmf-dialer) */
29495
+ onSetDialpadPage: props.onSetDialpadPage,
29496
+ /* @conditional-compile-remove(dtmf-dialer) */
29497
+ dtmfDialerPresent: props.dtmfDialerPresent, peopleButtonRef: peopleButtonRef, cameraButtonRef: cameraButtonRef }))))),
29231
29498
  ((_g = props.callControlProps) === null || _g === void 0 ? void 0 : _g.options) !== false && showDrawer && (React.createElement(react.Stack, { styles: drawerContainerStylesValue },
29232
29499
  React.createElement(PreparedMoreDrawer, { callControls: props.callControlProps.options, onLightDismiss: closeDrawer, onPeopleButtonClicked: onMoreDrawerPeopleClicked,
29233
29500
  /* @conditional-compile-remove(PSTN-calls) */
@@ -29301,140 +29568,6 @@ const localVideoCameraCycleButtonSelector = reselect.createSelector([getDeviceMa
29301
29568
  };
29302
29569
  });
29303
29570
 
29304
- // Copyright (c) Microsoft Corporation.
29305
- // Licensed under the MIT License.
29306
- /**
29307
- * @private
29308
- */
29309
- const mediaGallerySelector = reselect__namespace.createSelector([getLocalVideoStreams], (localVideoStreams) => {
29310
- var _a, _b;
29311
- return {
29312
- isVideoStreamOn: !!((_b = (_a = localVideoStreams === null || localVideoStreams === void 0 ? void 0 : localVideoStreams.find((stream) => stream.mediaStreamType === 'Video')) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.target)
29313
- };
29314
- });
29315
- /**
29316
- * Custom selector for this hook to retrieve all the participants that are currently
29317
- * connected to the call.
29318
- */
29319
- const getRemoteParticipantsConnectedSelector = reselect__namespace.createSelector([getRemoteParticipants], (remoteParticipants) => {
29320
- const participants = Object.values(remoteParticipants !== null && remoteParticipants !== void 0 ? remoteParticipants : {});
29321
- return participants.filter((p) => p.state === 'Connected');
29322
- });
29323
-
29324
- // Copyright (c) Microsoft Corporation.
29325
- // Licensed under the MIT License.
29326
- /**
29327
- * sets the announcement string whenever a Participant comes or goes from a call to be
29328
- * used by the system narrator.
29329
- *
29330
- * @returns string to be used by the narrator and Announcer component
29331
- *
29332
- * @internal
29333
- */
29334
- const useParticipantChangedAnnouncement = () => {
29335
- const locale = useLocale().strings.call;
29336
- const strings = React.useMemo(() => {
29337
- return {
29338
- participantJoinedNoticeString: locale.participantJoinedNoticeString,
29339
- twoParticipantJoinedNoticeString: locale.twoParticipantJoinedNoticeString,
29340
- threeParticipantJoinedNoticeString: locale.threeParticipantJoinedNoticeString,
29341
- participantLeftNoticeString: locale.participantLeftNoticeString,
29342
- twoParticipantLeftNoticeString: locale.twoParticipantLeftNoticeString,
29343
- threeParticipantLeftNoticeString: locale.threeParticipantLeftNoticeString,
29344
- unnamedParticipantString: locale.unnamedParticipantString,
29345
- manyParticipantsJoined: locale.manyParticipantsJoined,
29346
- manyParticipantsLeft: locale.manyParticipantsLeft,
29347
- manyUnnamedParticipantsJoined: locale.manyUnnamedParticipantsJoined,
29348
- manyUnnamedParticipantsLeft: locale.manyUnnamedParticipantsLeft
29349
- };
29350
- }, [locale]);
29351
- const [announcerString, setAnnouncerString] = React.useState('');
29352
- const currentParticipants = useSelector$1(getRemoteParticipantsConnectedSelector);
29353
- /**
29354
- * We want to use a useRef here since we want to not fire this hook based on the previous participants
29355
- * this allows this value to be used in the hook without being in the dependency array.
29356
- *
29357
- * Note: By definition if this hook is used in another component it is not pure anymore.
29358
- */
29359
- const previousParticipants = React.useRef(currentParticipants);
29360
- const resetAnnoucement = (string) => {
29361
- setAnnouncerString(string);
29362
- };
29363
- React.useMemo(() => {
29364
- const currentIds = currentParticipants.map((p) => toFlatCommunicationIdentifier(p.identifier));
29365
- const previousIds = previousParticipants.current.map((p) => toFlatCommunicationIdentifier(p.identifier));
29366
- const whoJoined = currentParticipants.filter((p) => !previousIds.includes(toFlatCommunicationIdentifier(p.identifier)));
29367
- const whoLeft = previousParticipants.current.filter((p) => !currentIds.includes(toFlatCommunicationIdentifier(p.identifier)));
29368
- if (whoJoined.length > 0) {
29369
- resetAnnoucement(createAnnouncementString('joined', whoJoined, strings));
29370
- }
29371
- if (whoLeft.length > 0) {
29372
- resetAnnoucement(createAnnouncementString('left', whoLeft, strings));
29373
- }
29374
- // Update cached value at the end.
29375
- previousParticipants.current = currentParticipants;
29376
- }, [currentParticipants, strings]);
29377
- return announcerString;
29378
- };
29379
- /**
29380
- * Generates the announcement string for when a participant joins or leaves a call.
29381
- */
29382
- const createAnnouncementString = (direction, participants, strings) => {
29383
- var _a, _b, _c;
29384
- /**
29385
- * If there are no participants return empty string.
29386
- */
29387
- if (participants.length === 0) {
29388
- return '';
29389
- }
29390
- /**
29391
- * Filter participants into two arrays to put all the unnamed participants at the back of the
29392
- * names being announced.
29393
- */
29394
- const unnamedParticipants = participants.filter((p) => !p.displayName);
29395
- const namedParicipants = participants.filter((p) => p.displayName);
29396
- const sortedParticipants = namedParicipants.concat(unnamedParticipants);
29397
- /**
29398
- * if there are only unnamed participants present in the array announce a special unnamed participants
29399
- * only string.
29400
- */
29401
- if (sortedParticipants.filter((p) => p.displayName).length === 0 && sortedParticipants.length > 1) {
29402
- return _formatString(direction === 'joined' ? strings.manyUnnamedParticipantsJoined : strings.manyUnnamedParticipantsLeft, {
29403
- numOfParticipants: (sortedParticipants.length - 1).toString()
29404
- });
29405
- }
29406
- const participantNames = sortedParticipants.map((p) => { var _a; return (_a = p.displayName) !== null && _a !== void 0 ? _a : strings.unnamedParticipantString; });
29407
- switch (sortedParticipants.length) {
29408
- case 1:
29409
- return _formatString(direction === 'joined' ? strings.participantJoinedNoticeString : strings.participantLeftNoticeString, { displayName: participantNames[0] });
29410
- case 2:
29411
- return _formatString(direction === 'joined' ? strings.twoParticipantJoinedNoticeString : strings.twoParticipantLeftNoticeString, {
29412
- displayName1: participantNames[0],
29413
- displayName2: participantNames[1]
29414
- });
29415
- case 3:
29416
- return _formatString(direction === 'joined' ? strings.threeParticipantJoinedNoticeString : strings.threeParticipantLeftNoticeString, {
29417
- displayName1: participantNames[0],
29418
- displayName2: participantNames[1],
29419
- displayName3: participantNames[2]
29420
- });
29421
- }
29422
- /**
29423
- * If we have more than 3 participants joining we need to do something more to announce them
29424
- * appropriately.
29425
- *
29426
- * We don't want to announce every name when more than 3 participants join at once so
29427
- * we parse out the first 3 names we have and announce those with the number of others.
29428
- */
29429
- const numberOfExtraParticipants = sortedParticipants.length - 3;
29430
- return _formatString(direction === 'joined' ? strings.manyParticipantsJoined : strings.manyParticipantsLeft, {
29431
- displayName1: (_a = sortedParticipants[0].displayName) !== null && _a !== void 0 ? _a : strings.unnamedParticipantString,
29432
- displayName2: (_b = sortedParticipants[1].displayName) !== null && _b !== void 0 ? _b : strings.unnamedParticipantString,
29433
- displayName3: (_c = sortedParticipants[2].displayName) !== null && _c !== void 0 ? _c : strings.unnamedParticipantString,
29434
- numOfParticipants: numberOfExtraParticipants.toString()
29435
- });
29436
- };
29437
-
29438
29571
  // Copyright (c) Microsoft Corporation.
29439
29572
  // Licensed under the MIT License.
29440
29573
  const VideoGalleryStyles = {
@@ -29727,6 +29860,112 @@ const networkReconnectTileSelector = reselect__namespace.createSelector([getUser
29727
29860
  };
29728
29861
  });
29729
29862
 
29863
+ // Copyright (c) Microsoft Corporation.
29864
+ // Licensed under the MIT License.
29865
+ /**
29866
+ * @internal
29867
+ */
29868
+ const getMinutes$1 = (time) => {
29869
+ return Math.floor(getSeconds$1(time) / 60);
29870
+ };
29871
+ /**
29872
+ * @internal
29873
+ */
29874
+ const getSeconds$1 = (time) => {
29875
+ return Math.floor(time / 1000);
29876
+ };
29877
+ /**
29878
+ * @internal
29879
+ */
29880
+ const getHours$1 = (time) => {
29881
+ return Math.floor(getMinutes$1(time) / 60);
29882
+ };
29883
+ /**
29884
+ * @internal
29885
+ */
29886
+ const getReadableTime$1 = (time) => {
29887
+ const hours = getHours$1(time);
29888
+ const readableMinutes = ('0' + (getMinutes$1(time) % 60)).slice(-2);
29889
+ const readableSeconds = ('0' + (getSeconds$1(time) % 60)).slice(-2);
29890
+ return `${hours > 0 ? hours + ':' : ''}${readableMinutes}:${readableSeconds}`;
29891
+ };
29892
+
29893
+ // Copyright (c) Microsoft Corporation.
29894
+ // Licensed under the MIT License.
29895
+ /**
29896
+ * styles for hold pane timer
29897
+ *
29898
+ * @private
29899
+ */
29900
+ const DtmfDialpadContentTimerStyles = {
29901
+ root: {
29902
+ color: 'inherit',
29903
+ fontWeight: 600,
29904
+ fontSize: _pxToRem(20),
29905
+ lineHeight: _pxToRem(28),
29906
+ margin: 'auto'
29907
+ }
29908
+ };
29909
+
29910
+ // Copyright (c) Microsoft Corporation.
29911
+ // Licensed under the MIT License.
29912
+ var __awaiter$b = (window && window.__awaiter) || function (thisArg, _arguments, P, generator) {
29913
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
29914
+ return new (P || (P = Promise))(function (resolve, reject) {
29915
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29916
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
29917
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
29918
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
29919
+ });
29920
+ };
29921
+ const DtmfDialpadPageContent = (props) => {
29922
+ var _a, _b;
29923
+ const { adapter } = props;
29924
+ const adapterState = adapter.getState();
29925
+ const theme = react.useTheme();
29926
+ const calleeId = (_a = adapterState.targetCallees) === null || _a === void 0 ? void 0 : _a[0];
29927
+ const remoteParticipants = (_b = adapterState.call) === null || _b === void 0 ? void 0 : _b.remoteParticipants;
29928
+ let calleeName;
29929
+ if (remoteParticipants) {
29930
+ const remoteParticipantValues = Object.values(remoteParticipants);
29931
+ if (calleeId && communicationCommon.isPhoneNumberIdentifier(calleeId)) {
29932
+ calleeName = calleeId.phoneNumber;
29933
+ }
29934
+ else {
29935
+ calleeName = remoteParticipantValues.find((p) => p.identifier === calleeId);
29936
+ }
29937
+ }
29938
+ return (React.createElement(react.Stack, { style: { height: '100%', width: '100%', background: theme.palette.white } },
29939
+ React.createElement(react.Stack, { verticalAlign: 'center', style: { margin: 'auto' } },
29940
+ React.createElement(DtmfDialerContentTimer, null),
29941
+ React.createElement(react.Text, { style: { margin: 'auto' } }, calleeName !== 'Unnamed participant' ? calleeName : ''),
29942
+ React.createElement(Dialpad, { onSendDtmfTone: (tone) => __awaiter$b(void 0, void 0, void 0, function* () {
29943
+ /* @conditional-compile-remove(dtmf-dialer) */
29944
+ yield adapter.sendDtmfTone(tone);
29945
+ }), dialpadMode: 'dtmf' }))));
29946
+ };
29947
+ const DtmfDialerContentTimer = () => {
29948
+ const [time, setTime] = React.useState(0);
29949
+ const elapsedTime = getReadableTime$1(time);
29950
+ const startTime = React.useRef(performance.now());
29951
+ React.useEffect(() => {
29952
+ const interval = setInterval(() => {
29953
+ setTime(performance.now() - startTime.current);
29954
+ }, 10);
29955
+ return () => {
29956
+ clearInterval(interval);
29957
+ };
29958
+ }, [startTime]);
29959
+ return React.createElement(react.Text, { styles: DtmfDialpadContentTimerStyles }, elapsedTime);
29960
+ };
29961
+ /**
29962
+ * @internal
29963
+ */
29964
+ const DtmfDialpadPage = (props) => {
29965
+ const adapter = useAdapter();
29966
+ return React.createElement(DtmfDialpadPageContent, { adapter: adapter, mobileView: props.mobileView });
29967
+ };
29968
+
29730
29969
  // Copyright (c) Microsoft Corporation.
29731
29970
  // Licensed under the MIT License.
29732
29971
  /**
@@ -29751,10 +29990,50 @@ const CallPage = (props) => {
29751
29990
  const errorBarProps = usePropsFor$1(ErrorBar);
29752
29991
  const mutedNotificationProps = useSelector$1(mutedNotificationSelector);
29753
29992
  const networkReconnectTileProps = useSelector$1(networkReconnectTileSelector);
29993
+ /* @conditional-compile-remove(dtmf-dialer) */
29994
+ const remoteParticipantsConnected = useSelector$1(getRemoteParticipantsConnectedSelector);
29995
+ /* @conditional-compile-remove(dtmf-dialer) */
29996
+ const callees = useSelector$1(getTargetCallees);
29997
+ /* @conditional-compile-remove(dtmf-dialer) */
29998
+ const renderDtmfDialerFromStart = showDtmfDialer(callees);
29999
+ /* @conditional-compile-remove(dtmf-dialer) */
30000
+ const [dtmfDialerPresent, setDtmfDialerPresent] = React.useState(renderDtmfDialerFromStart);
30001
+ /* @conditional-compile-remove(dtmf-dialer) */
30002
+ const dialerShouldAutoDismiss = React.useRef(renderDtmfDialerFromStart);
30003
+ /* @conditional-compile-remove(dtmf-dialer) */
30004
+ /**
30005
+ * This useEffect is about clearing the dtmf dialer should there be a new participant that joins the call.
30006
+ * This will only happen the first time should the dialer be present when the call starts.
30007
+ */
30008
+ React.useEffect(() => {
30009
+ if (remoteParticipantsConnected.length > 1 && dtmfDialerPresent && dialerShouldAutoDismiss.current) {
30010
+ setDtmfDialerPresent(false);
30011
+ dialerShouldAutoDismiss.current = false;
30012
+ }
30013
+ }, [dtmfDialerPresent, remoteParticipantsConnected, setDtmfDialerPresent]);
29754
30014
  const strings = useLocale().strings.call;
29755
30015
  // Reduce the controls shown when mobile view is enabled.
29756
30016
  const callControlOptions = mobileView ? reduceCallControlsForMobile(options === null || options === void 0 ? void 0 : options.callControls) : options === null || options === void 0 ? void 0 : options.callControls;
29757
30017
  const drawerMenuHostId = reactHooks.useId('drawerMenuHost');
30018
+ const onRenderGalleryContentTrampoline = () => {
30019
+ /* @conditional-compile-remove(dtmf-dialer) */
30020
+ if (dtmfDialerPresent) {
30021
+ return (React.createElement(DtmfDialpadPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: props.latestErrors, onDismissError: props.onDismissError,
30022
+ /* @conditional-compile-remove(capabilities) */
30023
+ capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps, onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent), dtmfDialerPresent: dtmfDialerPresent }));
30024
+ }
30025
+ else {
30026
+ return (React.createElement(MediaGallery, Object.assign({ isMobile: mobileView }, mediaGalleryProps, mediaGalleryHandlers, { onFetchAvatarPersonaData: onFetchAvatarPersonaData,
30027
+ /* @conditional-compile-remove(pinned-participants) */
30028
+ remoteVideoTileMenuOptions: options === null || options === void 0 ? void 0 : options.remoteVideoTileMenuOptions, drawerMenuHostId: drawerMenuHostId,
30029
+ /* @conditional-compile-remove(click-to-call) */
30030
+ localVideoTileOptions: options === null || options === void 0 ? void 0 : options.localVideoTile,
30031
+ /* @conditional-compile-remove(gallery-layouts) */
30032
+ userSetOverflowGalleryPosition: userSetOverflowGalleryPosition,
30033
+ /* @conditional-compile-remove(gallery-layouts) */
30034
+ userSetGalleryLayout: galleryLayout })));
30035
+ }
30036
+ };
29758
30037
  return (React.createElement(CallArrangement, { id: drawerMenuHostId, complianceBannerProps: Object.assign(Object.assign({}, complianceBannerProps), { strings }), errorBarProps: (options === null || options === void 0 ? void 0 : options.errorBar) !== false && errorBarProps, mutedNotificationProps: mutedNotificationProps, callControlProps: {
29759
30038
  callInvitationURL: callInvitationURL,
29760
30039
  onFetchParticipantMenuItems: onFetchParticipantMenuItems,
@@ -29762,15 +30041,7 @@ const CallPage = (props) => {
29762
30041
  increaseFlyoutItemSize: mobileView
29763
30042
  },
29764
30043
  /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
29765
- onFetchAvatarPersonaData: onFetchAvatarPersonaData, mobileView: mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => _isInCall(callStatus) ? (isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (React.createElement(MediaGallery, Object.assign({ isMobile: mobileView }, mediaGalleryProps, mediaGalleryHandlers, { onFetchAvatarPersonaData: onFetchAvatarPersonaData,
29766
- /* @conditional-compile-remove(pinned-participants) */
29767
- remoteVideoTileMenuOptions: options === null || options === void 0 ? void 0 : options.remoteVideoTileMenuOptions, drawerMenuHostId: drawerMenuHostId,
29768
- /* @conditional-compile-remove(click-to-call) */
29769
- localVideoTileOptions: options === null || options === void 0 ? void 0 : options.localVideoTile,
29770
- /* @conditional-compile-remove(gallery-layouts) */
29771
- userSetOverflowGalleryPosition: userSetOverflowGalleryPosition,
29772
- /* @conditional-compile-remove(gallery-layouts) */
29773
- userSetGalleryLayout: galleryLayout }))) : (React.createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps)))) : (React.createElement(React.Fragment, null)), updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: onCloseChatPane, dataUiId: 'call-page', latestErrors: props.latestErrors, onDismissError: props.onDismissError,
30044
+ onFetchAvatarPersonaData: onFetchAvatarPersonaData, mobileView: mobileView, modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => _isInCall(callStatus) ? (isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (onRenderGalleryContentTrampoline()) : (React.createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps)))) : (React.createElement(React.Fragment, null)), updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: onCloseChatPane, dataUiId: 'call-page', latestErrors: props.latestErrors, onDismissError: props.onDismissError,
29774
30045
  /* @conditional-compile-remove(gallery-layouts) */
29775
30046
  onUserSetOverflowGalleryPositionChange: onSetUserSetOverflowGalleryPosition,
29776
30047
  /* @conditional-compile-remove(gallery-layouts) */
@@ -29778,7 +30049,11 @@ const CallPage = (props) => {
29778
30049
  /* @conditional-compile-remove(gallery-layouts) */
29779
30050
  userSetGalleryLayout: galleryLayout,
29780
30051
  /* @conditional-compile-remove(capabilities) */
29781
- capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps }));
30052
+ capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps,
30053
+ /* @conditional-compile-remove(dtmf-dialer) */
30054
+ onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent),
30055
+ /* @conditional-compile-remove(dtmf-dialer) */
30056
+ dtmfDialerPresent: dtmfDialerPresent }));
29782
30057
  };
29783
30058
  /**
29784
30059
  * @private